1 |
<?xml version="1.0" encoding="UTF-8"?> |
2 |
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsp="http://apache.org/xsp" xmlns:sdx="http://www.culture.gouv.fr/ns/sdx/sdx" exclude-result-prefixes="xsl"> |
3 |
<!-- --> |
4 |
<!-- ============================ OUTPUTS =============================== --> |
5 |
<!-- --> |
6 |
<!-- |
7 |
<sdx:terms> : includes the list of terms of an index |
8 |
--> |
9 |
<xsl:template match="sdx:terms"> |
10 |
<xsp:logic xml:title="TERMS"> |
11 |
<xsl:call-template name="comment"/> |
12 |
sdx_terms=null; |
13 |
sdx_page=-1; |
14 |
<xsl:call-template name="sdx:build-locations"/> |
15 |
<xsl:call-template name="sdx:fields"/> |
16 |
<xsl:call-template name="sdx:values"/> |
17 |
<xsl:call-template name="sdx:hpp"/> |
18 |
<xsl:call-template name="sdx:parameter"> |
19 |
<xsl:with-param name="name" select="'qid'"/> |
20 |
</xsl:call-template> |
21 |
sdx_object=getSessionObject(session, sdx_parameter); |
22 |
if (sdx_object != null && sdx_object instanceof Terms) |
23 |
{ |
24 |
sdx_terms=(Terms)sdx_object; |
25 |
<!-- dynamic changes of hitsPerPage |
26 |
try to give best page from requested |
27 |
not useful for base query --> |
28 |
if (sdx_hpp != sdx_terms.getHitsPerPage()) { |
29 |
/* if new hpp */ |
30 |
<xsl:call-template name="sdx:parameter"> |
31 |
<xsl:with-param name="name" select="'page'"/> |
32 |
<xsl:with-param name="abbr" select="'p'"/> |
33 |
</xsl:call-template> |
34 |
sdx_page=(int)java.lang.Math.floor((((sdx_i-1)*sdx_terms.getHitsPerPage())+1)/sdx_hpp )+1; |
35 |
sdx_terms.setHitsPerPage(sdx_hpp); |
36 |
<xsl:if test="ancestor::sdx:debug"> |
37 |
<sdx:debug title="HPP dynamic"> |
38 |
<xsp:attribute name="hppOld"> |
39 |
<xsp:expr>sdx_j</xsp:expr> |
40 |
</xsp:attribute> |
41 |
<xsp:attribute name="hppNew"> |
42 |
<xsp:expr>sdx_hpp</xsp:expr> |
43 |
</xsp:attribute> |
44 |
<xsp:attribute name="pageOld"> |
45 |
<xsp:expr>sdx_i</xsp:expr> |
46 |
</xsp:attribute> |
47 |
<xsp:attribute name="pageNew"> |
48 |
<xsp:expr>sdx_page</xsp:expr> |
49 |
</xsp:attribute> |
50 |
</sdx:debug> |
51 |
</xsl:if> |
52 |
} |
53 |
} |
54 |
else if (sdx_fields != null && sdx_fields.length != 0) |
55 |
{ |
56 |
sdx_terms=new Terms(); |
57 |
sdx_terms.enableLogging(sdx_log); |
58 |
sdx_terms.setEncoding(sdx_encoding); |
59 |
// more than one field, multi-key sort |
60 |
if (sdx_fields.length > 1) |
61 |
{ |
62 |
<!--we try to get a qid, if none is provided we build terms as normal using a locations object--> |
63 |
<xsl:call-template name="sdx:parameter"> |
64 |
<xsl:with-param name="name" select="'qid'"/> |
65 |
</xsl:call-template> |
66 |
if (sdx_check(sdx_parameter)) /* if we hava query id, we try to get cached results */ |
67 |
{ |
68 |
sdx_object=getSessionObject(session, sdx_parameter); |
69 |
if (sdx_object != null && sdx_object instanceof Results) |
70 |
{ |
71 |
sdx_results=(Results)sdx_object; |
72 |
if (sdx_results != null) sdx_terms.setUp(sdx_results, sdx_fields, sdx_values); |
73 |
} |
74 |
} |
75 |
else if (sdx_locations != null) sdx_terms.setUp(sdx_locations, sdx_fields, sdx_values); |
76 |
|
77 |
|
78 |
} |
79 |
// 1 field, 1 value |
80 |
else if (sdx_values != null && sdx_values.length != 0) |
81 |
{ |
82 |
<xsl:call-template name="sdx:parameter"> |
83 |
<xsl:with-param name="name" select="'qid'"/> |
84 |
</xsl:call-template> |
85 |
if (sdx_check(sdx_parameter)) /* if we hava query id, we try to get cached results */ |
86 |
{ |
87 |
sdx_object=getSessionObject(session, sdx_parameter); |
88 |
if (sdx_object != null && sdx_object instanceof Results) |
89 |
{ |
90 |
sdx_results=(Results)sdx_object; |
91 |
if (sdx_results != null) sdx_terms.setUp(sdx_results, sdx_fields[0], sdx_values[0]); |
92 |
} |
93 |
} |
94 |
else if (sdx_locations != null) sdx_terms.setUp(sdx_locations, sdx_fields[0], sdx_values[0]); |
95 |
|
96 |
} |
97 |
// default case, one field |
98 |
else |
99 |
{ |
100 |
<xsl:call-template name="sdx:parameter"> |
101 |
<xsl:with-param name="name" select="'qid'"/> |
102 |
</xsl:call-template> |
103 |
if (sdx_check(sdx_parameter)) /* if we hava query id, we try to get cached results */ |
104 |
{ |
105 |
sdx_object=getSessionObject(session, sdx_parameter); |
106 |
if (sdx_object != null && sdx_object instanceof Results) |
107 |
{ |
108 |
sdx_results=(Results)sdx_object; |
109 |
if (sdx_results != null) sdx_terms.setUp(sdx_results, sdx_fields[0], null); |
110 |
} |
111 |
} |
112 |
else if (sdx_locations != null) sdx_terms.setUp(sdx_locations, sdx_fields[0]); |
113 |
|
114 |
|
115 |
} |
116 |
sdx_terms.setHitsPerPage(sdx_hpp); |
117 |
|
118 |
/* caching */ |
119 |
sdx_string = setShowSessionObject(session, null, sdx_terms, sdx_qmax);//allowing called method to calculate key |
120 |
/* to inform the toSAX() method */ |
121 |
sdx_terms.setId(sdx_string); |
122 |
sdx_qid=sdx_string; |
123 |
|
124 |
} |
125 |
if (sdx_page < 1) { |
126 |
<xsl:call-template name="sdx:parameter"> |
127 |
<xsl:with-param name="name" select="'page'"/> |
128 |
<xsl:with-param name="abbr" select="'p'"/> |
129 |
</xsl:call-template> |
130 |
sdx_page=sdx_i; |
131 |
} |
132 |
if (sdx_terms != null) sdx_terms.toSAX(contentHandler, sdx_page); |
133 |
</xsp:logic> |
134 |
</xsl:template> |
135 |
<!-- |
136 |
<sdx:includeDocument> : includes a document from the current document application |
137 |
--> |
138 |
<xsl:template match="sdx:includeDocument"> |
139 |
<xsl:call-template name="sdx:base"/> |
140 |
<xsl:call-template name="sdx:id"/> |
141 |
<xsp:logic> |
142 |
//TODO : can also use a qid/no combination |
143 |
if (sdx_check(sdx_id)) |
144 |
{ |
145 |
sdx_consumer=(XMLConsumer)contentHandler; |
146 |
<xsl:call-template name="sdx:hilite"/> |
147 |
if (sdx_pipeline != null) sdx_consumer=(XMLConsumer)sdx_pipeline; |
148 |
sdx_document=new XMLDocument(sdx_id); |
149 |
/* don't know type */ |
150 |
sdx_bool=false; |
151 |
/* if a type param given */ |
152 |
if (Document.DOCTYPE_HTML.equals(sdx_type)) |
153 |
{ |
154 |
sdx_document=new HTMLDocument(sdx_id); |
155 |
sdx_bool=false; |
156 |
} |
157 |
else if (Document.DOCTYPE_XML.equals(sdx_type)) |
158 |
{ |
159 |
sdx_bool=false; |
160 |
} |
161 |
/* send document to stream */ |
162 |
sdx_base.getDocument( |
163 |
(ParsableDocument)sdx_document, |
164 |
new IncludeXMLConsumer(sdx_consumer), |
165 |
sdx_bool); |
166 |
<xsl:call-template name="sdx:navigation"/> |
167 |
} |
168 |
</xsp:logic> |
169 |
</xsl:template> |
170 |
<xsl:template match="sdx:navigation" name="sdx:navigation"> |
171 |
<xsp:logic xml:title="NAVIGATION - {name()}"> |
172 |
<xsl:call-template name="sdx:parameter"> |
173 |
<xsl:with-param name="name" select="'qid'"/> |
174 |
</xsl:call-template> |
175 |
sdx_object=getSessionObject(session, sdx_parameter); |
176 |
if (sdx_object != null && sdx_object instanceof Results) |
177 |
{ |
178 |
//If an id is provided, it take precedence over the document's position |
179 |
if (sdx_check(sdx_id)) |
180 |
((Results)sdx_object).getNavigationAsSAX(contentHandler, sdx_id); |
181 |
else { |
182 |
<xsl:call-template name="sdx:parameter"> |
183 |
<xsl:with-param name="name" select="'no'"/> |
184 |
<xsl:with-param name="abbr" select="'n'"/> |
185 |
</xsl:call-template> |
186 |
((Results)sdx_object).getNavigationAsSAX(contentHandler, sdx_i); |
187 |
} |
188 |
} |
189 |
</xsp:logic> |
190 |
</xsl:template> |
191 |
<!-- --> |
192 |
<!-- ============================ INPUTS ================================ --> |
193 |
<!-- --> |
194 |
<!-- Administration of documents bases (insert, delete) --> |
195 |
<!-- --> |
196 |
<!-- |
197 |
check a documentbase integrity |
198 |
--> |
199 |
<xsl:template name="sdx:checkIntegrity"> |
200 |
if(sdx_base != null) sdx_base.checkIntegrity(); |
201 |
</xsl:template> |
202 |
<!-- |
203 |
optimize a documentbase |
204 |
--> |
205 |
<xsl:template name="sdx:optimize"> |
206 |
if(sdx_base != null) sdx_base.optimize(); |
207 |
</xsl:template> |
208 |
|
209 |
<!-- |
210 |
build a IndexParameters sdx_index with parameters |
211 |
--> |
212 |
<xsl:template match="sdx:index" name="sdx:index"> |
213 |
<xsp:logic xml:title="INDEX - indexation parameters {name()}"> |
214 |
|
215 |
sdx_index = new IndexParameters(); |
216 |
|
217 |
<xsl:call-template name="sdx:parameter"> |
218 |
<xsl:with-param name="name" select="'sameId'"/> |
219 |
</xsl:call-template> |
220 |
if (sdx_check(sdx_parameter)) |
221 |
{ |
222 |
//the default behavior is IndexParameters.SAME_ID_REPLACE |
223 |
if (sdx_parameter.equalsIgnoreCase("replace")) sdx_index.setSameId(IndexParameters.SAME_ID_REPLACE); |
224 |
if (sdx_parameter.equalsIgnoreCase("error")) sdx_index.setSameId(IndexParameters.SAME_ID_ERROR); |
225 |
if (sdx_parameter.equalsIgnoreCase("ignore")) sdx_index.setSameId(IndexParameters.SAME_ID_IGNORE); |
226 |
} |
227 |
<xsl:call-template name="sdx:parameter"> |
228 |
<xsl:with-param name="name" select="'attachedDocumentSameId'"/> |
229 |
</xsl:call-template> |
230 |
if (sdx_check(sdx_parameter)) |
231 |
{ |
232 |
//the default behavior is IndexParameters.SAME_ID_SHARED_DOCUMENT_REFRESH |
233 |
if (sdx_parameter.equalsIgnoreCase("refresh")) sdx_index.setAttachedDocumentSameId(IndexParameters.SAME_ID_REFRESH_SHARED_DOCUMENT); |
234 |
if (sdx_parameter.equalsIgnoreCase("replace")) sdx_index.setAttachedDocumentSameId(IndexParameters.SAME_ID_REPLACE); |
235 |
if (sdx_parameter.equalsIgnoreCase("error")) sdx_index.setAttachedDocumentSameId(IndexParameters.SAME_ID_ERROR); |
236 |
if (sdx_parameter.equalsIgnoreCase("ignore")) sdx_index.setAttachedDocumentSameId(IndexParameters.SAME_ID_IGNORE); |
237 |
} |
238 |
<!--setting the parameter for shared secondary documents (attached and sub documents) having ids as existing documents--> |
239 |
<xsl:call-template name="sdx:parameter"> |
240 |
<xsl:with-param name="name" select="'subDocumentSameId'"/> |
241 |
</xsl:call-template> |
242 |
if (sdx_check(sdx_parameter)) |
243 |
{ |
244 |
//the default behavior is IndexParameters.REFRESH_SHARED_DOCUMENT |
245 |
if (sdx_parameter.equalsIgnoreCase("refresh")) sdx_index.setSubDocumentSameId(IndexParameters.SAME_ID_REFRESH_SHARED_DOCUMENT); |
246 |
if (sdx_parameter.equalsIgnoreCase("replace")) sdx_index.setSubDocumentSameId(IndexParameters.SAME_ID_REPLACE); |
247 |
if (sdx_parameter.equalsIgnoreCase("error")) sdx_index.setSubDocumentSameId(IndexParameters.SAME_ID_ERROR); |
248 |
if (sdx_parameter.equalsIgnoreCase("ignore")) sdx_index.setSubDocumentSameId(IndexParameters.SAME_ID_IGNORE); |
249 |
} |
250 |
<!--TODO what other index parameters for same id are possible? one parameter specifically for subdocument?--> |
251 |
|
252 |
|
253 |
<!-- the sdx_show logic is |
254 |
|
255 |
one string is common to all document, define in |
256 |
sdx_show by <sdx:page show="..." showParam="show" .../> |
257 |
a local show could be defined by <sdx:* show="..." showParam="?" .../> |
258 |
|
259 |
sdx_show2 store general or local show if one |
260 |
then, define params |
261 |
--> |
262 |
|
263 |
<xsl:call-template name="sdx:parameter"> |
264 |
<xsl:with-param name="name" select="'show'"/> |
265 |
<xsl:with-param name="http" select="''"/> |
266 |
</xsl:call-template> |
267 |
sdx_show2=sdx_show; |
268 |
if (sdx_check(sdx_parameter)) sdx_show2=sdx_parameter; |
269 |
if (sdx_show2 != null) |
270 |
{ |
271 |
if (sdx_show2.indexOf("summary") != -1) sdx_index.setSendIndexationEvents(IndexParameters.SEND_STATS_EVENTS); |
272 |
if (sdx_show2.indexOf("failures") != -1) sdx_index.setSendIndexationEvents(IndexParameters.SEND_ERRORS_EVENTS); |
273 |
if (sdx_show2.indexOf("additions") != -1) sdx_index.setSendIndexationEvents(IndexParameters.SEND_ALL_EVENTS); |
274 |
} |
275 |
<xsl:call-template name="sdx:parameter"> |
276 |
<xsl:with-param name="name" select="'batch'"/> |
277 |
</xsl:call-template> |
278 |
if (sdx_i > 0) sdx_index.setBatchMax(sdx_i); |
279 |
<xsl:choose> |
280 |
<!-- if user pipeline given, parse it, if not, get default --> |
281 |
<xsl:when test="sdx:pipeline/sdx:transformation"> |
282 |
<xsl:apply-templates select="sdx:pipeline"/> |
283 |
if (sdx_pipeline != null) sdx_index.setPipeline(sdx_pipeline); |
284 |
sdx_pipeline=null; |
285 |
</xsl:when> |
286 |
<xsl:when test="sdx:pipeline/sdx:parameter"> |
287 |
if (sdx_base != null) sdx_pipeline=sdx_base.getIndexationPipeline(); |
288 |
</xsl:when> |
289 |
</xsl:choose> |
290 |
<xsl:if test="sdx:pipeline/sdx:parameter"> |
291 |
if (sdx_pipeline != null) |
292 |
//TODO?:fred why are you nullifying the pipe above?-rbp |
293 |
sdx_params=sdx_pipeline.getParameters(); |
294 |
if (sdx_index != null && sdx_index.getPipeline() != null) |
295 |
sdx_params=sdx_index.getPipeline().getParameters(); |
296 |
if (sdx_params == null) |
297 |
sdx_params=new Parameters(); |
298 |
<!-- add indexation parameters on each tag sdx:parameter --> |
299 |
<xsl:for-each select="sdx:pipeline/sdx:parameter"> |
300 |
<xsl:apply-templates select="."/> |
301 |
if (sdx_params != null && sdx_name != null && sdx_parameter != null) |
302 |
sdx_params.setParameter(sdx_name, sdx_parameter); |
303 |
</xsl:for-each> |
304 |
sdx_index.setPipelineParams(sdx_params); |
305 |
</xsl:if> |
306 |
<xsl:if test="ancestor::sdx:debug"> |
307 |
<sdx:debug title="INDEXATION PARAMETERS"> |
308 |
<xsp:attribute name="element"> |
309 |
<xsl:value-of select="name()"/> |
310 |
</xsp:attribute> |
311 |
</sdx:debug> |
312 |
</xsl:if> |
313 |
</xsp:logic> |
314 |
</xsl:template> |
315 |
<!-- build a document --> |
316 |
<xsl:template name="sdx:document" match="sdx:page//sdx:document"> |
317 |
<xsl:param name="parameters" select="true()"/> |
318 |
<xsp:logic xml:title="DOCUMENT"> |
319 |
<xsl:call-template name="comment"> |
320 |
<xsl:with-param name="name" select="'DOCUMENT'"/> |
321 |
</xsl:call-template> sdx_document=null; |
322 |
<xsl:if test="$parameters"> |
323 |
<!-- id could be modified or setted by url, or indexed content --> |
324 |
<xsl:call-template name="sdx:id"/> |
325 |
<!-- type could be modified by content --> |
326 |
<xsl:call-template name="sdx:type"/> |
327 |
<xsl:call-template name="sdx:url"/> |
328 |
<xsl:call-template name="sdx:file"/> |
329 |
<xsl:call-template name="sdx:xml"/> |
330 |
<xsl:call-template name="sdx:dom"/> |
331 |
</xsl:if> |
332 |
/* set type */ |
333 |
if ("text/xml".equals(sdx_type)) sdx_document=new XMLDocument(); |
334 |
else if ("text/html".equals(sdx_type)) sdx_document=new HTMLDocument(); |
335 |
else if (Document.DOCTYPE_XML.equals(sdx_type)) { sdx_type="text/xml"; sdx_document=new XMLDocument(); } |
336 |
else if (Document.DOCTYPE_HTML.equals(sdx_type)) { sdx_type="text/html"; sdx_document=new HTMLDocument(); } |
337 |
else if (sdx_check(sdx_xml)) { sdx_type="text/xml"; sdx_document=new XMLDocument();} |
338 |
else if (sdx_url != null) { sdx_type="text/xml"; sdx_document=new XMLDocument(); } |
339 |
else if (sdx_dom != null) { sdx_type="text/xml"; sdx_document=new XMLDocument(); } |
340 |
else { sdx_document=new XMLDocument(); sdx_type="text/xml"; } |
341 |
|
342 |
if (sdx_check(sdx_type)) sdx_document.setMimeType(sdx_type); |
343 |
|
344 |
/* set id */ |
345 |
if (sdx_check(sdx_id)) sdx_document.setId(sdx_id); |
346 |
else if (sdx_url != null) sdx_document.setId(sdx_url.toExternalForm()); |
347 |
/* set content */ |
348 |
if (sdx_url != null) sdx_document.setContent(sdx_url); |
349 |
else if (sdx_check(sdx_xml)) sdx_document.setContent(sdx_xml.getBytes("UTF-8")); |
350 |
else if (sdx_file != null) sdx_document.setContent(sdx_file); |
351 |
else if (sdx_dom != null) ((XMLDocument)sdx_document).setContent(sdx_dom); |
352 |
else sdx_document=null; |
353 |
</xsp:logic> |
354 |
</xsl:template> |
355 |
<xsl:template match="sdx:uploadDocument"> |
356 |
<xsp:logic xml:title="IMPORT"> |
357 |
<xsl:call-template name="comment"/> |
358 |
try{ |
359 |
<xsl:call-template name="sdx:repo"/> |
360 |
} |
361 |
catch(SDXException e) |
362 |
{} // repo can be null |
363 |
|
364 |
<xsl:call-template name="sdx:document"/> |
365 |
if (sdx_document != null) |
366 |
{ |
367 |
<xsl:call-template name="sdx:index"/> |
368 |
sdx_base.index((IndexableDocument)sdx_document, sdx_repo, sdx_index , contentHandler); |
369 |
<xsl:apply-templates select="sdx:success/node()"/> |
370 |
<xsl:call-template name="sdx:parameter"> |
371 |
<xsl:with-param name="name" select="'optimize'"/> |
372 |
</xsl:call-template> |
373 |
if ( sdx_bool ) { |
374 |
<xsl:call-template name="sdx:optimize"/> |
375 |
} |
376 |
<!--<xsl:if test="@optimize='true'"><xsl:call-template name="sdx:optimize"/></xsl:if>--> |
377 |
} |
378 |
else |
379 |
{ |
380 |
<xsl:apply-templates select="sdx:fallback/*"/> |
381 |
} |
382 |
|
383 |
</xsp:logic> |
384 |
</xsl:template> |
385 |
<xsl:template match="sdx:uploadDocuments"> |
386 |
<xsp:logic xml:title="IMPORTS"> |
387 |
<xsl:call-template name="comment"/> |
388 |
try{ |
389 |
<xsl:call-template name="sdx:repo"/> |
390 |
} |
391 |
catch(SDXException e) |
392 |
{} // repo can be null |
393 |
|
394 |
if (sdx_check(sdx_type)) sdx_type="text/xml"; |
395 |
|
396 |
<!-- sources for documents --> |
397 |
<xsl:call-template name="sdx:dir"/> |
398 |
<xsl:call-template name="sdx:url"/> |
399 |
<xsl:call-template name="sdx:zip"/> |
400 |
<xsl:call-template name="sdx:type"/> |
401 |
if (sdx_zip != null) sdx_dir=sdx_unzip(sdx_zip); |
402 |
if (sdx_dir != null) |
403 |
{ |
404 |
<xsl:call-template name="sdx:parameter"> |
405 |
<xsl:with-param name="name" select="'includes'"/> |
406 |
</xsl:call-template> |
407 |
sdx_pattern=sdx_parameter; |
408 |
<xsl:call-template name="sdx:parameter"> |
409 |
<xsl:with-param name="name" select="'excludes'"/> |
410 |
</xsl:call-template> |
411 |
sdx_vector=sdx_dir(sdx_dir, sdx_pattern, sdx_parameter, null); |
412 |
sdx_enum = sdx_vector.elements(); |
413 |
sdx_documents=new IndexableDocument[sdx_vector.size()]; |
414 |
<xsl:if test="ancestor::sdx:debug"> |
415 |
<sdx:debug title="DOCUMENTS"> |
416 |
<xsp:attribute name="size"> |
417 |
<xsp:expr>sdx_vector.size()</xsp:expr> |
418 |
</xsp:attribute> |
419 |
</sdx:debug> |
420 |
</xsl:if> |
421 |
sdx_i=0; |
422 |
while (sdx_enum.hasMoreElements()) |
423 |
{ |
424 |
sdx_document=new XMLDocument(); |
425 |
if (false) {} |
426 |
else if ("text/html".equals(sdx_type)) sdx_document=new HTMLDocument(); |
427 |
else if (Document.DOCTYPE_HTML.equals(sdx_type)) |
428 |
{ |
429 |
sdx_type="text/html"; |
430 |
sdx_document=new HTMLDocument(); |
431 |
} |
432 |
sdx_file=(File)sdx_enum.nextElement(); |
433 |
if (sdx_url != null) |
434 |
sdx_document.setContent(sdx_file.toURL()); |
435 |
else |
436 |
sdx_document.setContent(sdx_file); |
437 |
<xsl:if test="ancestor::sdx:debug"> |
438 |
<sdx:debug title="DOCUMENT"> |
439 |
<xsp:attribute name="n"> |
440 |
<xsp:expr>sdx_i</xsp:expr> |
441 |
</xsp:attribute> |
442 |
<xsp:attribute name="file"> |
443 |
<xsp:expr>sdx_file</xsp:expr> |
444 |
</xsp:attribute> |
445 |
</sdx:debug> |
446 |
</xsl:if> |
447 |
sdx_documents[sdx_i]=sdx_document; |
448 |
sdx_i++; |
449 |
} |
450 |
<xsl:call-template name="sdx:index"/> |
451 |
sdx_base.index((IndexableDocument[])sdx_documents, sdx_repo, sdx_index , contentHandler); |
452 |
<xsl:call-template name="sdx:parameter"> |
453 |
<xsl:with-param name="name" select="'optimize'"/> |
454 |
</xsl:call-template> |
455 |
if ( sdx_bool ) { |
456 |
<xsl:call-template name="sdx:optimize"/> |
457 |
} |
458 |
<!--<xsl:if test="@optimize='true'"><xsl:call-template name="sdx:optimize"/></xsl:if>--> |
459 |
<xsl:apply-templates select="sdx:success/node()"/> |
460 |
if (sdx_zip != null && sdx_dir != null) |
461 |
FileUtil.deleteDirectory(sdx_dir);//recursive delete of tmp zip dir |
462 |
} |
463 |
else |
464 |
{ |
465 |
<xsl:apply-templates select="sdx:fallback/node()"/> |
466 |
} |
467 |
|
468 |
</xsp:logic> |
469 |
</xsl:template> |
470 |
<!-- |
471 |
Ce tag permet de supprimer un document d'une base. Il prend un paramètre, |
472 |
soit le nom du paramètre qui contient l'identificateur du document. |
473 |
Ce paramètre doit être dans l'attribut "idParam". |
474 |
--> |
475 |
<xsl:template match="sdx:deleteDocument "> |
476 |
<xsp:logic xml:title="DELETE - "> |
477 |
<xsl:call-template name="comment"/> |
478 |
<xsl:call-template name="sdx:base"/> |
479 |
<xsl:call-template name="sdx:parameter"> |
480 |
<xsl:with-param name="name" select="'delete'"/> |
481 |
</xsl:call-template> |
482 |
if (sdx_bool) |
483 |
{ |
484 |
<xsl:call-template name="sdx:id"/> |
485 |
|
486 |
if (sdx_check(sdx_id)) |
487 |
{ |
488 |
|
489 |
<!-- in fact, we don't need to know the type of document before delete, TEMP --> |
490 |
sdx_document=new XMLDocument(sdx_id); |
491 |
|
492 |
|
493 |
sdx_base.delete(sdx_document, contentHandler); |
494 |
|
495 |
|
496 |
<xsl:apply-templates select="sdx:success"/> |
497 |
|
498 |
|
499 |
<xsl:call-template name="sdx:parameter"> |
500 |
<xsl:with-param name="name" select="'optimize'"/> |
501 |
</xsl:call-template> |
502 |
if ( sdx_bool ) { |
503 |
|
504 |
|
505 |
<xsl:call-template name="sdx:optimize"/> |
506 |
} |
507 |
<!--<xsl:if test="@optimize='true'"><xsl:call-template name="sdx:optimize"/></xsl:if>--> |
508 |
} |
509 |
} |
510 |
<xsl:if test="sdx:fallback"> |
511 |
else |
512 |
{ |
513 |
<xsl:apply-templates select="sdx:fallback"/> |
514 |
} |
515 |
</xsl:if> |
516 |
</xsp:logic> |
517 |
</xsl:template> |
518 |
<!-- |
519 |
Behaviour : reacts on a qid attribute, |
520 |
or on the queries nested ; |
521 |
queries may be executed before deleting |
522 |
--> |
523 |
<xsl:template match="sdx:deleteDocuments"> |
524 |
<xsp:logic xml:title="DELETES - delete docs on a query (cached or expressed)"> |
525 |
<xsl:call-template name="sdx:parameter"> |
526 |
<xsl:with-param name="name" select="'delete'"/> |
527 |
</xsl:call-template> |
528 |
if (sdx_bool) |
529 |
{ |
530 |
<xsl:call-template name="comment"/> |
531 |
sdx_query=null; |
532 |
sdx_results=null; |
533 |
<xsl:call-template name="sdx:build-locations"/> |
534 |
<xsl:apply-templates select="*[contains(name(), 'Query')]"/> |
535 |
<xsl:call-template name="sdx:results"/> |
536 |
if (sdx_results != null) |
537 |
{ |
538 |
sdx_pipeline = new DeleteResultsPipeline(); |
539 |
sdx_pipeline.enableLogging(sdx_log); |
540 |
/* needed so that the framework will be available for executing the deletions */ |
541 |
sdx_pipeline.service(cocoon_serviceManager); |
542 |
/* indicates the id of the application from which deletion is desired */ |
543 |
((DeleteResultsPipeline)sdx_pipeline).setApplicationId(sdx_application.getId()); |
544 |
/* the content handler to feed with deletion events */ |
545 |
sdx_pipeline.setConsumer((XMLConsumer)contentHandler); |
546 |
/* passing result events to the delete results transformation */ |
547 |
<!-- use the show template --> |
548 |
// sdx_results.toSAX(sdx_pipeline); |
549 |
<xsl:call-template name="sdx:show"/> |
550 |
sdx_results=null; |
551 |
session.removeAttribute("sdx_"+sdx_qid); |
552 |
<xsl:call-template name="sdx:parameter"> |
553 |
<xsl:with-param name="name" select="'optimize'"/> |
554 |
</xsl:call-template> |
555 |
if ( sdx_bool ) { |
556 |
<xsl:call-template name="sdx:optimize"/> |
557 |
} |
558 |
<!--<xsl:if test="@optimize='true'"><xsl:call-template name="sdx:optimize"/></xsl:if>--> |
559 |
} |
560 |
} |
561 |
</xsp:logic> |
562 |
</xsl:template> |
563 |
<!-- --> |
564 |
<!-- ========================== RIGHTS =================================== --> |
565 |
<!-- --> |
566 |
<xsl:template match="sdx:login"> |
567 |
<xsp:logic xml:title="LOGIN"> |
568 |
<xsl:call-template name="comment"/> |
569 |
<xsl:call-template name="sdx:app"/> |
570 |
<xsl:call-template name="sdx:parameter"> |
571 |
<xsl:with-param name="name" select="'id'"/> |
572 |
</xsl:call-template> sdx_id=sdx_parameter; |
573 |
<xsl:call-template name="sdx:parameter"> |
574 |
<xsl:with-param name="name" select="'pass'"/> |
575 |
</xsl:call-template> |
576 |
<xsl:if test="ancestor::sdx:debug"> |
577 |
<sdx:debug title="LOGIN"> |
578 |
<xsp:attribute name="id"> |
579 |
<xsp:expr>sdx_id</xsp:expr> |
580 |
</xsp:attribute> |
581 |
<xsp:attribute name="pass"> |
582 |
<xsp:expr>sdx_parameter</xsp:expr> |
583 |
</xsp:attribute> |
584 |
<xsp:attribute name="element"> |
585 |
<xsl:value-of select="name()"/> |
586 |
</xsp:attribute> |
587 |
<xsp:attribute name="app"> |
588 |
<xsp:expr>sdx_app</xsp:expr> |
589 |
</xsp:attribute> |
590 |
</sdx:debug> |
591 |
</xsl:if> |
592 |
if (sdx_check(sdx_id)) |
593 |
{ |
594 |
if (sdx_app != null && sdx_app.validateUser(sdx_id, sdx_parameter)) |
595 |
{ |
596 |
/* logged-in */ |
597 |
sdx_user=sdx_app.getUserInformation(sdx_id); |
598 |
session.setAttribute("sdx_user", sdx_user); |
599 |
<xsl:apply-templates select="*[name()!='sdx:fallback']"/> |
600 |
} |
601 |
/* not logged-in */ |
602 |
else |
603 |
{ |
604 |
<xsl:apply-templates select="sdx:fallback/*"/> |
605 |
} |
606 |
} |
607 |
</xsp:logic> |
608 |
</xsl:template> |
609 |
<xsl:template match="sdx:loginSu"> |
610 |
<xsp:logic xml:title="loginSu - logged as super-user (server admin)"> |
611 |
<xsl:call-template name="comment"/> |
612 |
<xsl:call-template name="sdx:parameter"> |
613 |
<xsl:with-param name="name" select="'id'"/> |
614 |
</xsl:call-template> |
615 |
sdx_id=sdx_parameter; |
616 |
<xsl:call-template name="sdx:parameter"> |
617 |
<xsl:with-param name="name" select="'pass'"/> |
618 |
</xsl:call-template> |
619 |
if (sdx_check(sdx_id) && sdx_check(sdx_parameter)) |
620 |
{ |
621 |
try { |
622 |
sdx_user=sdx_frame.validateSuperUser(sdx_id, sdx_parameter); |
623 |
session.setAttribute("sdx_user", sdx_user); |
624 |
<xsl:apply-templates select="*[name()!='sdx:fallback']"/> |
625 |
} |
626 |
catch(Exception e) { |
627 |
<xsl:apply-templates select="sdx:fallback/*"/> |
628 |
} |
629 |
} |
630 |
</xsp:logic> |
631 |
</xsl:template> |
632 |
<!-- |
633 |
When this tag is matched, |
634 |
if the sdx:parameter @logout is set to true |
635 |
then any user saved in session is replaced |
636 |
by anonymous user |
637 |
--> |
638 |
<xsl:template match="sdx:logout"> |
639 |
<xsp:logic xml:title="LOGOUT"> |
640 |
<xsl:call-template name="comment"/> |
641 |
<xsl:call-template name="sdx:app"/> |
642 |
<xsl:call-template name="sdx:parameter"> |
643 |
<xsl:with-param name="name" select="'logout'"/> |
644 |
</xsl:call-template> |
645 |
if (sdx_check(sdx_parameter)) |
646 |
{ |
647 |
if (sdx_app != null) sdx_user=sdx_app.getUserInformation(null); |
648 |
else sdx_user=null; |
649 |
session.setAttribute("sdx_user", sdx_user); |
650 |
} |
651 |
</xsp:logic> |
652 |
</xsl:template> |
653 |
<xsl:template match="sdx:userIsAdmin "> |
654 |
<xsp:logic xml:title="userIsAdmin"> |
655 |
<xsl:call-template name="comment"/> |
656 |
<xsl:call-template name="sdx:app"/> |
657 |
if (sdx_app != null) sdx_parameter=sdx_app.getDefaultAdminGroupId(); |
658 |
if (sdx_user != null && sdx_app != null && |
659 |
sdx_app.getId().equals(sdx_user.getAppId()) && |
660 |
sdx_user.isMember(sdx_parameter)) |
661 |
{ |
662 |
<xsp:logic xml:title="ISADMIN"> |
663 |
<xsl:apply-templates select="*[name()!='sdx:fallback']"/> |
664 |
</xsp:logic> |
665 |
} |
666 |
<xsl:if test="sdx:fallback"> |
667 |
/* not Member */ |
668 |
else |
669 |
{ |
670 |
<xsp:logic xml:title="NOT ADMIN"> |
671 |
<xsl:apply-templates select="sdx:fallback/*"/> |
672 |
</xsp:logic> |
673 |
} |
674 |
</xsl:if> |
675 |
</xsp:logic> |
676 |
</xsl:template> |
677 |
<xsl:template match="sdx:userIsMember"> |
678 |
<xsp:logic xml:title="ISMEMBER"> |
679 |
<xsl:call-template name="comment"/> |
680 |
<xsl:call-template name="sdx:app"/> |
681 |
<xsl:call-template name="sdx:parameters"> |
682 |
<xsl:with-param name="name" select="'group'"/> |
683 |
</xsl:call-template> |
684 |
<xsl:call-template name="sdx:parameter"> |
685 |
<xsl:with-param name="name" select="'op'"/> |
686 |
</xsl:call-template> |
687 |
if (sdx_op == Query.OPERATOR_AND) sdx_bool=true; |
688 |
else sdx_bool=false; |
689 |
/* isMember */ |
690 |
if (sdx_user != null && sdx_app != null && |
691 |
sdx_app.getId().equals(sdx_user.getAppId()) && |
692 |
sdx_user.isMember(sdx_parameters, sdx_bool)) |
693 |
{ |
694 |
<xsl:apply-templates select="*[name()!='sdx:fallback']"/> |
695 |
} |
696 |
/* not Member */ |
697 |
else |
698 |
{ |
699 |
<xsl:apply-templates select="sdx:fallback/*"/> |
700 |
} |
701 |
</xsp:logic> |
702 |
</xsl:template> |
703 |
<xsl:template match="sdx:userIsSu"> |
704 |
<xsp:logic xml:title="ISSU"> |
705 |
<xsl:call-template name="comment"/> |
706 |
if (sdx_frame.isSuperUserSet() && sdx_user != null && sdx_user.isSuperuser()) |
707 |
/* isMember */ |
708 |
{ |
709 |
<xsl:apply-templates select="*[name()!='sdx:fallback']"/> |
710 |
} |
711 |
/* not isMember */ |
712 |
else |
713 |
{ |
714 |
<xsl:apply-templates select="sdx:fallback/*"/> |
715 |
} |
716 |
</xsp:logic> |
717 |
</xsl:template> |
718 |
<xsl:template match="sdx:userIsAdminOrSu"> |
719 |
<xsl:call-template name="comment"/> |
720 |
<xsl:call-template name="sdx:app"/> |
721 |
<xsp:logic> |
722 |
if ( |
723 |
(sdx_app !=null && |
724 |
sdx_app.getId().equals(sdx_user.getAppId()) && |
725 |
sdx_user.isMember(sdx_app.getDefaultAdminGroupId())) |
726 |
|| |
727 |
(sdx_frame.isSuperUserSet() && sdx_user != null && sdx_user.isSuperuser()) |
728 |
) |
729 |
/* isMember */ |
730 |
{ |
731 |
<xsl:apply-templates select="*[name()!='sdx:fallback']"/> |
732 |
} |
733 |
/* not isMember */ |
734 |
else |
735 |
{ |
736 |
<xsl:apply-templates select="sdx:fallback/*"/> |
737 |
} |
738 |
</xsp:logic> |
739 |
</xsl:template> |
740 |
</xsl:stylesheet> |