source: DCWoRMS/trunk/simulator/xslt/jsdl_qcg.xslt @ 477

Revision 477, 15.6 KB checked in by wojtekp, 13 years ago (diff)
  • Property svn:executable set to *
  • Property svn:mime-type set to text/plain
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2
3<xsl:stylesheet version="1.0"
4        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
5        xmlns:jsdl="http://schemas.ggf.org/jsdl/2005/11/jsdl"
6        xmlns:jsdl-posix="http://schemas.ggf.org/jsdl/2005/11/jsdl-posix"
7        xmlns:msxsl="urn:schemas-microsoft-com:xslt"
8        xmlns:xalan="http://xml.apache.org/xalan"
9        extension-element-prefixes="msxsl">
10
11        <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
12
13        <xsl:variable name="FILE_URL_PREFIX">file:///</xsl:variable>   
14       
15        <xsl:key name="FILESYSTEMS" match="/jsdl:JobDefinition/jsdl:JobDescription/jsdl:Resources/jsdl:FileSystem" use="@name"/>
16       
17        <xsl:template match="/">
18                        <xsl:if test="(
19                                not(jsdl:JobDefinition/jsdl:JobDescription/jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Executable/text()) and
20                                not(jsdl:JobDefinition/jsdl:JobDescription/jsdl:Application/jsdl:ApplicationName/text())
21                        ) or (
22                                jsdl:JobDefinition/jsdl:JobDescription/jsdl:Application/jsdl:ApplicationName/text() and
23                                jsdl:JobDefinition/jsdl:JobDescription/jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Executable/text()
24                        )">
25                        <xsl:message terminate="no">
26                                Either ApplicationName or Executable can be specified in the same time
27                        </xsl:message>                 
28                </xsl:if>
29               
30                <xsl:apply-templates select="jsdl:JobDefinition/jsdl:JobDescription"/>         
31        </xsl:template>
32       
33        <xsl:template match="jsdl:JobDescription">
34                <xsl:element name="qcgJob">
35
36                        <xsl:attribute name="appid">
37                                <xsl:value-of select="jsdl:JobIdentification/jsdl:JobName/text()"/>
38                        </xsl:attribute>
39                       
40                        <xsl:if test="jsdl:JobIdentification/jsdl:JobProject">
41                                <xsl:attribute name="project">
42                                        <xsl:value-of select="jsdl:JobIdentification/jsdl:JobProject"/>
43                                </xsl:attribute>
44                       
45                                <xsl:if test="count(jsdl:JobIdentification/jsdl:JobProject) &gt; 1">
46                                        <xsl:message terminate="no">
47                                                Job can belong to ONE project at the most
48                                        </xsl:message>
49                                </xsl:if>       
50                </xsl:if>
51               
52                <xsl:apply-templates select="jsdl:JobIdentifier/jsdl:Description"/>
53               
54                <xsl:call-template name="TASK_TEMPLATE"/>
55                       
56                </xsl:element>
57        </xsl:template>
58       
59        <xsl:template match="jsdl:Description" mode="JOB_MODE">
60                <xsl:element name="JobNode">
61                        <xsl:value-of select="jsdl:Description"/>
62                </xsl:element>
63        </xsl:template>
64       
65        <xsl:template name="TASK_TEMPLATE">
66                <xsl:element name="task">
67               
68                        <xsl:attribute name="taskid">
69                                <xsl:choose>
70                                        <xsl:when test="jsdl:JobIdentifier/jsdl:JobIdentification/jsdl:JobName">
71                                                <xsl:value-of select="jsdl:JobIdentifier/jsdl:JobIdentification/jsdl:JobName"/>
72                                        </xsl:when>
73                                        <xsl:otherwise>task</xsl:otherwise>
74                                </xsl:choose>
75                        </xsl:attribute>
76                       
77                        <xsl:if test="count(jsdl:DataStaging/jsdl:DeleteOnTermination[text() = 'false']) &gt; 0">
78                                        <xsl:attribute name="persistent">true</xsl:attribute>
79                        </xsl:if>
80                       
81                        <xsl:apply-templates select="jsdl:Resources/jsdl:CandidateHosts"/>
82                                               
83                        <xsl:if test="jsdl:Application/jsdl:ApplicationName or jsdl:Resources">
84                                <xsl:element name="resource">
85                                        <xsl:apply-templates select="jsdl:Resources" mode="RESOURCES_MODE"/>           
86                                        <xsl:if test="jsdl:Application/ApplicationName">
87                                                <xsl:element name="applications">
88                                                        <xsl:apply-templates select="jsdl:ApplicationName">
89                                                                <xsl:with-param name="VERSION">
90                                                                        <xsl:value-of select="jsdl:ApplicationVersion"/>
91                                                                </xsl:with-param>
92                                                        </xsl:apply-templates>
93                                                </xsl:element>
94                                        </xsl:if>                       
95                                </xsl:element>
96                        </xsl:if>
97                       
98                        <xsl:if test="jsdl:Resources/jsdl:IndividualCPUSpeed or
99                                            jsdl:Resources/jsdl:IndividualCPUCount or
100                                            jsdl:Resources/jsdl:IndividualNetworkBandwidth or
101                                            jsdl:Resources/jsdl:IndividualPhysicalMemory or
102                                            jsdl:Resources/jsdl:IndividualDiskSpace">
103                                <xsl:element name="hardConstraints">
104                                        <xsl:apply-templates select="jsdl:Resources/jsdl:IndividualCPUSpeed"/>
105                                        <xsl:apply-templates select="jsdl:Resources/jsdl:IndividualCPUCount"/>
106                                        <xsl:apply-templates select="jsdl:Resources/jsdl:IndividualNetworkBandwidth"/>
107                                        <xsl:apply-templates select="jsdl:Resources/jsdl:IndividualPhysicalMemory"/>
108                                        <xsl:apply-templates select="jsdl:Resources/jsdl:IndividualDiskSpace"/>
109                                </xsl:element>
110                        </xsl:if>
111
112                        <xsl:element name="executable">
113                                <xsl:attribute name="type">single</xsl:attribute>
114                               
115                                <xsl:apply-templates select="jsdl:Application/jsdl:ApplicationName">
116                                        <xsl:with-param name="VERSION">
117                                                <xsl:value-of select="jsdl:Application/jsdl:ApplicationVersion"/>
118                                        </xsl:with-param>
119                                </xsl:apply-templates>
120                               
121                                <xsl:apply-templates select="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Executable"/>
122                       
123                                <xsl:if test="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Argument or jsdl:DataStaging">
124                                        <xsl:element name="arguments">
125                                                <xsl:apply-templates select="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Argument"/>
126                                                <xsl:apply-templates select="jsdl:DataStaging"/>
127                                        </xsl:element>
128                                </xsl:if>       
129                               
130                                <xsl:if test="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Input">
131                                        <xsl:element name="stdin">
132                                                <xsl:element name="url">
133                                                        <xsl:call-template name="FILESYSTEM_VALUE">
134                                                                <xsl:with-param name="FILESYSTEM_NAME">
135                                                                        <xsl:value-of select="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Input/@filesystemName"/>
136                                                                </xsl:with-param>
137                                                                <xsl:with-param name="VALUE">
138                                                                        <xsl:value-of select="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Input"/>
139                                                                </xsl:with-param>
140                                                        </xsl:call-template>
141                                                </xsl:element> 
142                                        </xsl:element>
143                                </xsl:if>
144       
145                                <xsl:if test="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Output">
146                                        <xsl:element name="stdout">
147                                                <xsl:element name="url">
148                                                        <xsl:call-template name="FILESYSTEM_VALUE">
149                                                                <xsl:with-param name="FILESYSTEM_NAME">
150                                                                        <xsl:value-of select="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Output/@filesystemName"/>
151                                                                </xsl:with-param>
152                                                                <xsl:with-param name="VALUE">
153                                                                        <xsl:value-of select="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Output"/>
154                                                                </xsl:with-param>
155                                                        </xsl:call-template>
156                                                </xsl:element> 
157                                        </xsl:element>
158                                </xsl:if>
159       
160                                <xsl:if test="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Error">
161                                        <xsl:element name="stderr">
162                                                <xsl:element name="url">
163                                                        <xsl:call-template name="FILESYSTEM_VALUE">
164                                                                <xsl:with-param name="FILESYSTEM_NAME">
165                                                                        <xsl:value-of select="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Error/@filesystemName"/>
166                                                                </xsl:with-param>
167                                                                <xsl:with-param name="VALUE">
168                                                                        <xsl:value-of select="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Error"/>
169                                                                </xsl:with-param>
170                                                        </xsl:call-template>
171                                                </xsl:element> 
172                                        </xsl:element>
173                                </xsl:if>
174                               
175                                <xsl:if test="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Environment">
176                                        <xsl:element name="environment">
177                                                <xsl:apply-templates select="jsdl:Application/jsdl-posix:POSIXApplication/jsdl-posix:Environment"/>
178                                        </xsl:element>
179                                </xsl:if>
180                       
181                        </xsl:element>
182                       
183                </xsl:element>
184        </xsl:template>
185       
186        <xsl:template match="jsdl:CandidateHosts">
187                <xsl:element name="candidateHosts">
188                        <xsl:for-each select="jsdl:HostName">
189                                <xsl:element name="hostName">
190                                        <xsl:value-of select="."/>
191                                </xsl:element>
192                        </xsl:for-each>
193                </xsl:element>
194        </xsl:template>
195       
196        <xsl:template match="jsdl:ApplicationName">
197                <xsl:param name="VERSION"/>
198                <xsl:element name="application">
199                        <xsl:if test="$VERSION">
200                                <xsl:attribute name="version">
201                                        <xsl:value-of select="$VERSION"/>
202                                </xsl:attribute>
203                        </xsl:if>
204                </xsl:element>
205        </xsl:template>
206
207        <xsl:template match="jsdl:Resources" mode="RESOURCES_MODE">
208                <xsl:apply-templates select="jsdl:OperatingSystem/jsdl:OperatingSystemType"/>
209                <xsl:apply-templates select="jsdl:OperatingSystem/jsdl:OperatingSystemVersion"/>
210        </xsl:template>
211               
212        <xsl:template match="jsdl-posix:Executable">
213                <xsl:element name="execfile">
214                        <xsl:attribute name="name">
215                                <xsl:call-template name="GET_FILE_NAME">
216                                        <xsl:with-param name="FILE_PATH">
217                                                <xsl:value-of select="."/>
218                                        </xsl:with-param>
219                                </xsl:call-template>
220                        </xsl:attribute>
221                        <xsl:element name="url">
222                                <xsl:call-template name="FILESYSTEM_VALUE">
223                                        <xsl:with-param name="FILESYSTEM_NAME">
224                                                <xsl:value-of select="@filesystemName"/>
225                                        </xsl:with-param>
226                                        <xsl:with-param name="VALUE">
227                                                <xsl:value-of select="."/>
228                                        </xsl:with-param>
229                                </xsl:call-template>
230                        </xsl:element>
231                </xsl:element>
232        </xsl:template>
233       
234        <xsl:template match="jsdl-posix:Argument">
235                <xsl:element name="value">
236                        <xsl:call-template name="FILESYSTEM_VALUE">
237                                <xsl:with-param name="FILESYSTEM_NAME">
238                                        <xsl:value-of select="@filesystemName"/>
239                                </xsl:with-param>
240                                <xsl:with-param name="VALUE">
241                                        <xsl:value-of select="."/>
242                                </xsl:with-param>
243                        </xsl:call-template>
244                </xsl:element>
245        </xsl:template>
246       
247        <xsl:template match="jsdl:DataStaging">
248                <xsl:element name="file">
249                        <xsl:attribute name="name">
250                                <xsl:call-template name="FILESYSTEM_VALUE">
251                                        <xsl:with-param name="FILESYSTEM_NAME">
252                                                <xsl:value-of select="jsdl:FilesystemName"/>
253                                        </xsl:with-param>
254                                        <xsl:with-param name="VALUE">
255                                                <xsl:value-of select="jsdl:FileName"/>
256                                        </xsl:with-param>
257                                </xsl:call-template>
258                        </xsl:attribute>
259                       
260                        <xsl:attribute name="type">
261                                <xsl:choose>
262                                        <xsl:when test="jsdl:Source/jsdl:URI">in</xsl:when>
263                                        <xsl:when test="jsdl:Target/jsdl:URI">out</xsl:when>
264                                        <xsl:otherwise>
265                                                <xsl:message terminate="no">
266                                                        Source or Target URI is missing
267                                                </xsl:message>
268                                        </xsl:otherwise>
269                                </xsl:choose>
270                        </xsl:attribute>
271                       
272                        <xsl:if test="jsdl:CreationFlag = 'append'">
273                                <xsl:attribute name="append">true</xsl:attribute>
274                        </xsl:if>
275                       
276                        <xsl:element name="url">
277                                <xsl:choose>
278                                        <xsl:when test="jsdl:Source/jsdl:URI">
279                                                <xsl:value-of select="jsdl:Source/jsdl:URI"/>
280                                        </xsl:when>
281                                        <xsl:when test="jsdl:Target/jsdl:URI">
282                                                <xsl:value-of select="jsdl:Target/jsdl:URI"/>
283                                        </xsl:when>
284                                </xsl:choose>
285                        </xsl:element>
286                       
287                </xsl:element>
288        </xsl:template>
289       
290        <xsl:template match="jsdl-posix:Environment">
291                <xsl:element name="variable">
292                        <xsl:attribute name="name">
293                                <xsl:value-of select="@name"/>
294                        </xsl:attribute>
295                        <xsl:call-template name="FILESYSTEM_VALUE">
296                                <xsl:with-param name="FILESYSTEM_NAME">
297                                        <xsl:value-of select="@filesystemName"/>
298                                </xsl:with-param>
299                                <xsl:with-param name="VALUE">
300                                        <xsl:value-of select="."/>
301                                </xsl:with-param>
302                        </xsl:call-template>
303                </xsl:element>
304        </xsl:template>
305       
306        <xsl:template match="jsdl:OperatingSystemType">
307                <xsl:element name="ostype">
308                        <xsl:value-of select="jsdl:OperatingSystemName"/>
309                </xsl:element>
310        </xsl:template>
311
312        <xsl:template match="jsdl:OperatingSystemVersion">
313                <xsl:element name="osversion">
314                        <xsl:value-of select="."/>
315                </xsl:element>
316        </xsl:template>
317       
318        <xsl:template match="jsdl:IndividualCPUSpeed">
319                <xsl:call-template name="HARD_CONSTRAINT_TEMPLATE">
320                        <xsl:with-param name="NAME">cpuspeed</xsl:with-param>
321                        <xsl:with-param name="VALUES" select="*"/>
322                        <xsl:with-param name="FACTOR">0.001</xsl:with-param>
323                </xsl:call-template>
324        </xsl:template>
325       
326        <xsl:template match="jsdl:IndividualCPUCount">
327                <xsl:call-template name="HARD_CONSTRAINT_TEMPLATE">
328                        <xsl:with-param name="NAME">cpucount</xsl:with-param>
329                        <xsl:with-param name="VALUES" select="*"/>
330                        <xsl:with-param name="FACTOR">1</xsl:with-param>
331                </xsl:call-template>
332        </xsl:template>
333       
334        <xsl:template match="jsdl:IndividualNetworkBandwidth">
335                <xsl:call-template name="HARD_CONSTRAINT_TEMPLATE">
336                        <xsl:with-param name="NAME">bandwidth</xsl:with-param>
337                        <xsl:with-param name="VALUES" select="*"/>
338                        <xsl:with-param name="FACTOR">
339                                <xsl:value-of select="1 div (8 * 1024)"/>
340                        </xsl:with-param>
341                </xsl:call-template>   
342        </xsl:template>
343       
344        <xsl:template match="jsdl:IndividualPhysicalMemory">
345                <xsl:call-template name="HARD_CONSTRAINT_TEMPLATE">
346                        <xsl:with-param name="NAME">memory</xsl:with-param>
347                        <xsl:with-param name="VALUES" select="*"/>
348                        <xsl:with-param name="FACTOR">
349                                <xsl:value-of select="1 div 1024"/>
350                        </xsl:with-param>
351                </xsl:call-template>   
352        </xsl:template>
353       
354        <xsl:template match="jsdl:IndividualDiskSpace">
355                <xsl:call-template name="HARD_CONSTRAINT_TEMPLATE">
356                        <xsl:with-param name="NAME">diskspace</xsl:with-param>
357                        <xsl:with-param name="VALUES" select="*"/>
358                        <xsl:with-param name="FACTOR">1</xsl:with-param>
359                </xsl:call-template>   
360        </xsl:template>
361
362       
363        <xsl:template name="HARD_CONSTRAINT_TEMPLATE">
364                <xsl:param name="NAME"/>
365                <xsl:param name="VALUES"/>
366                <xsl:param name="FACTOR"/>
367                <xsl:element name="parameter">
368                        <xsl:attribute name="name">
369                                <xsl:value-of select="$NAME"/>
370                        </xsl:attribute>
371<!--            <xsl:apply-templates select="msxsl:node-set($VALUES)">
372-->
373                <xsl:apply-templates select="xalan:nodeset($VALUES)">
374                                <xsl:with-param name="FACTOR" select="$FACTOR"/>
375                        </xsl:apply-templates>
376                </xsl:element>
377        </xsl:template>
378       
379        <xsl:template match="jsdl:UpperBoundedRange">
380                <xsl:param name="FACTOR"/>
381                <xsl:element name="range">
382                        <xsl:element name="max">
383                                <xsl:value-of select=". * $FACTOR"/>
384                        </xsl:element>
385                </xsl:element>
386        </xsl:template>
387
388        <xsl:template match="jsdl:LowerBoundedRange">
389                <xsl:param name="FACTOR"/>
390                <xsl:element name="range">
391                        <xsl:element name="min">
392                                <xsl:value-of select=". * $FACTOR"/>
393                        </xsl:element>
394                </xsl:element>
395        </xsl:template>
396
397        <xsl:template match="jsdl:Exact">
398                <xsl:param name="FACTOR"/>
399                <xsl:element name="value">
400                        <xsl:value-of select=". * $FACTOR"/>
401                </xsl:element>
402        </xsl:template>
403
404        <xsl:template match="jsdl:Range">
405                <xsl:param name="FACTOR"/>
406                <xsl:element name="range">
407                        <xsl:element name="min">
408                                <xsl:value-of select="jsdl:LowerBound * $FACTOR"/>
409                        </xsl:element>
410                        <xsl:element name="max">
411                                <xsl:value-of select="jsdl:UpperBound * $FACTOR"/>
412                        </xsl:element>
413                </xsl:element>
414        </xsl:template>
415
416
417
418       
419<xsl:template name="FILESYSTEM_VALUE">
420        <xsl:param name="FILESYSTEM_NAME"/>
421        <xsl:param name="VALUE"/>
422        <xsl:choose>
423                <xsl:when test="$FILESYSTEM_NAME and $FILESYSTEM_NAME != ''">
424                        <xsl:variable name="FILESYSTEM"  select="key('FILESYSTEMS', string($FILESYSTEM_NAME))"/>
425                        <xsl:choose>
426                                <xsl:when test="$FILESYSTEM">
427                                        <xsl:value-of select="$FILESYSTEM/jsdl:MountPoint"/>
428                                </xsl:when>
429                                <xsl:otherwise>
430                                        <xsl:message terminate="no">
431                                                Delcaration of following filesystem is missing: <xsl:value-of select="$FILESYSTEM_NAME"/>
432                                        </xsl:message>
433                                </xsl:otherwise>
434                        </xsl:choose>
435                        <xsl:value-of select="$VALUE"/>
436                </xsl:when>
437                <xsl:otherwise>
438                        <xsl:if test="starts-with($VALUE, '/')">
439                                <xsl:value-of select="$FILE_URL_PREFIX"/>
440                        </xsl:if>
441                        <xsl:value-of select="$VALUE"/>
442                </xsl:otherwise>
443        </xsl:choose>
444</xsl:template>
445
446<xsl:template name="GET_FILE_NAME">
447        <xsl:param name="FILE_PATH"/>
448               
449        <xsl:choose>
450                <xsl:when test="not(contains($FILE_PATH,'/'))">
451                        <xsl:value-of select="$FILE_PATH"/>
452                </xsl:when>
453                <xsl:otherwise>
454                        <xsl:call-template name="GET_FILE_NAME">
455                                <xsl:with-param name="FILE_PATH">
456                                        <xsl:value-of select="substring-after($FILE_PATH,'/')"/>
457                                </xsl:with-param>
458                        </xsl:call-template>
459                </xsl:otherwise>
460        </xsl:choose>
461</xsl:template>
462               
463</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.