source: cats/SCHEMAcat/trunk/urn.org.isocat.schemacat.interface.rest/interface/schemaFile.dpml @ 4570

Last change on this file since 4570 was 4570, checked in by andmor, 10 years ago

Name for the folder containing schema files is now the schema ID so it doesn't change when the user edits the schema name.

File size: 13.3 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<sequence debug="false" profile="false">
3    <sloot-profile name="schemaFile_dpml">
4        <log>
5            <level>INFO</level>
6            <message>
7                <literal type="string">[interface.REST] [%1] requested schema file with id: [%2]</literal>
8            </message>
9            <param>
10                <request>
11                    <identifier>active:xpath2</identifier>
12                    <argument name="operand">scratch:user</argument>
13                    <argument name="operator">
14                        <literal type="string">string(/sc:user/@xml:id)</literal>
15                    </argument>
16                </request>
17            </param>
18            <param>arg:schemaID</param>
19        </log>
20        <sloot-profile name="schemaFile_dpml.getSchema">
21            <request assignment="schema-metadata">
22                <identifier>active:org.isocat.schemacat.access.data.schema.metadata</identifier>
23                <argument name="id">arg:schemaID</argument>
24            </request>
25        </sloot-profile>
26        <request assignment="access-status">
27            <identifier>active:interface.rest.schema.access.getstatus</identifier>
28            <argument name="schema-metadata">this:schema-metadata</argument>
29        </request>
30        <sloot-profile name="schemaFile_dpml.proceed">
31            <switch assignment="proceed">
32                <cond method="identity">
33                    <request>
34                        <identifier>active:sloot.xpath2</identifier>
35                        <argument name="operand" >this:access-status</argument>
36                        <argument name="operator">
37                            <literal type="string">boolean(.='private')</literal>
38                        </argument>
39                    </request>
40                </cond>
41                <then>
42                    <sequence>
43                        <if assignment="response">
44                            <cond method="identity">
45                                <request>
46                                    <identifier>active:isAuthorized</identifier>
47                                    <argument name="authorizedIDs" method="identity">
48                                        <request>
49                                            <identifier>active:interface.rest.schema.access.authorizedIds</identifier>
50                                            <argument name="schema-metadata">this:schema-metadata</argument>
51                                            <argument name="schemaID">arg:schemaID</argument>
52                                        </request>
53                                    </argument>
54                                    <argument name="authorizedRoles" method="identity">
55                                        <request>
56                                            <identifier>active:org.isocat.schemacat.access.data.schemas.authorizedRoles</identifier>
57                                        </request>
58                                    </argument>
59                                    <argument name="user" method="identity">scratch:user</argument>
60                                </request>
61                            </cond>
62                            <then>
63                                <sequence>
64                                    <literal assignment="response" type="boolean">true</literal>
65                                    <literal assignment="cache-control" type="string">private, max-age=0, must-revalidate</literal> <!-- no-cache, no-store? -->
66                                </sequence>
67                            </then>
68                            <else>
69                                <literal type="boolean">false</literal>
70                            </else>
71                        </if>
72                    </sequence>
73                </then>
74                <cond method="identity">
75                    <request>
76                        <identifier>active:sloot.xpath2</identifier>
77                        <argument name="operand">this:access-status</argument>
78                        <argument name="operator">
79                            <literal type="string">boolean(.='sharedURL')</literal>
80                        </argument>
81                    </request>
82                </cond>
83                <then>
84                    <sequence>
85                        <literal assignment="response" type="boolean">true</literal>
86                        <literal assignment="cache-control" type="string">public, max-age=0, must-revalidate, proxy-revalidate</literal>
87                    </sequence>
88                </then>
89                <otherwise>
90                    <literal type="boolean">false</literal>
91                </otherwise>
92            </switch>
93        </sloot-profile>
94        <sloot-profile name="schemaFile_dpml.generateResponse">
95            <if assignment="response">
96                <cond method="identity">
97                    <request>
98                        <identifier>this:proceed</identifier>
99                    </request>
100                </cond>
101                <then>
102                    <sequence>
103                        <sloot-profile name="schemaFile_dpml.generateResponse.computeSchemaFolderName">
104                            <request assignment="schema-folder-name">
105                                <identifier>active:xpath2</identifier>
106                                <argument name="operand">this:schema-metadata</argument>
107                                <argument name="operator">
108                                    <literal type="string">string(/sc:schema/@xml:id)</literal>
109                                </argument>
110                            </request>
111                        </sloot-profile>
112                        <sloot-profile name="schemaFile_dpml.generateResponse.getSchemacatConfig">
113                            <request assignment="schemacat-config">
114                                <identifier>res:/etc/BaseXConfig.xml</identifier>
115                            </request>
116                        </sloot-profile>
117                        <sloot-profile name="schemaFile_dpml.generateResponse.computeSchemataLocation">
118                            <request assignment="schemata-location">
119                                <identifier>active:xpath2</identifier>
120                                <argument name="operand">this:schemacat-config</argument>
121                                <argument name="operator">
122                                    <literal type="string">
123                                        if (ends-with(/nvp/schemata-private-folder/text(), '/')) then
124                                            /nvp/schemata-private-folder/text()
125                                        else
126                                            concat(/nvp/schemata-private-folder/text(), '/')
127                                    </literal>
128                                </argument>
129                            </request>
130                        </sloot-profile>
131                        <sloot-profile name="schemaFile_dpml.generateResponse.computeSchemataFilesSubPath">
132                            <request assignment="schemata-filesSubPath">
133                                <identifier>active:xpath2</identifier>
134                                <argument name="operand">this:schemacat-config</argument>
135                                <argument name="operator">
136                                    <literal type="string">
137                                        if (ends-with(/nvp/schemata-private-filesSubFolder/text(), '/')) then
138                                            /nvp/schemata-private-filesSubFolder/text()
139                                        else
140                                            concat(/nvp/schemata-private-filesSubFolder/text(), '/')
141                                    </literal>
142                                </argument>
143                            </request>
144                        </sloot-profile>
145                        <sloot-profile name="schemaFile_dpml.generateResponse.computeSchemaPath">
146                            <request assignment="schema-path">
147                                <identifier>active:javascript</identifier>
148                                <argument name="operator">
149                                    <literal type="string">
150                                        var schemataLocation = context.source("arg:schemataLocation");
151                                        var schemaFolder = context.source("arg:schemaFolderName");
152                                        var schemaPath = schemataLocation + schemaFolder;
153                                        context.createResponseFrom(schemaPath);
154                                    </literal>
155                                </argument>
156                                <argument name="schemataLocation">this:schemata-location</argument>
157                                <argument name="schemaFolderName">this:schema-folder-name</argument>
158                            </request>
159                        </sloot-profile>
160                        <sloot-profile name="schemaFile_dpml.generateResponse.getFileContent">
161                            <request assignment="response">
162                                <identifier>active:org.isocat.schemacat.access.data.schema.file</identifier>
163                                <argument name="file-name">arg:file-name</argument>
164                                <argument name="schema-path">this:schema-path</argument>
165                                <argument name="schema-files-subPath">this:schemata-filesSubPath</argument>
166                            </request>
167                        </sloot-profile>
168                        <sloot-profile name="schemaFile_dpml.generateResponse.computeContentDisposition">
169                            <if assignment="content-disposition">
170                                <cond method="identity">
171                                    <request>
172                                        <identifier>arg:download</identifier>
173                                    </request>
174                                </cond>
175                                <then>
176                                    <literal type="string">attachment</literal>
177                                </then>
178                                <else>
179                                    <literal type="string">inline</literal>
180                                </else>
181                            </if>
182                        </sloot-profile>
183                        <sloot-profile name="schemaFile_dpml.generateResponse.getMime">
184                            <request assignment="schema-mime">
185                                <identifier>active:org.isocat.schemacat.access.data.schema.file.mime</identifier>
186                                <argument name="schemaID">arg:schemaID</argument>
187                                <argument name="file-name">arg:file-name</argument>
188                            </request>
189                        </sloot-profile>
190                        <sloot-profile name="schemaFile_dpml.generateResponse.configResponse">
191                            <request assignment="response-config">
192                                <identifier>active:sloot.xquery</identifier>
193                                <argument name="operator">
194                                    <literal type="xml">
195                                        <query>
196                                            <config>
197                                                <header name="httpResponse:/header/Cache-Control">{$cache-control}</header>
198                                                <header name="mime">{$schema-mime}</header>
199                                                <header name="httpResponse:/header/Content-Disposition">{$content-disposition}</header>
200                                                <header name="HTTP_CACHE_EXPIRES_DELTA_SECONDS">0</header>
201                                            </config>
202                                        </query>
203                                    </literal>
204                                </argument>
205                                <argument name="cache-control">this:cache-control</argument>
206                                <argument name="schema-mime">this:schema-mime</argument>
207                                <argument name="content-disposition">this:content-disposition</argument>
208                            </request>
209                        </sloot-profile>
210                        <sloot-profile name="schemaFile_dpml.generateResponse.modifyResponse">
211                            <modify-response assignment="response">
212                                <operand>this:response</operand>
213                                <config>this:response-config</config>
214                            </modify-response>
215                        </sloot-profile>
216                    </sequence>
217                </then>
218                <else>
219                    <request>
220                        <identifier>active:interface.rest.HTTPresponse.forbidden</identifier>
221                    </request>
222                </else>
223            </if>
224        </sloot-profile>
225        <sloot-debug>
226            <request>
227                <verb>SINK</verb>
228                <identifier>res:/debug/org.isocat.schemacat.interface.rest.schema.file.response.xml</identifier>
229                <argument name="primary">this:response</argument>
230            </request>
231        </sloot-debug>
232    </sloot-profile>
233</sequence>
Note: See TracBrowser for help on using the repository browser.