source: DCWoRMS/trunk/src/test/DEBBTranslator/xml/DEBBComponentTranslator.xsl @ 626

Revision 626, 12.5 KB checked in by gosiaw, 12 years ago (diff)

Common instructions from two templates moved to a new basic template.

Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<xsl:stylesheet version="1.0"
3        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:plm="http://www.plmxml.org/Schemas/PLMXMLSchema"
4        xmlns:cim="http://www.coolemall.eu/DEBBComponent" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
5        <!-- Specification of the output document -->
6        <xsl:output method="xml" version="1.0" encoding="UTF-8"
7                indent="yes" />
8        <xsl:template match="/">
9                <xsl:element name="environment">
10                        <xsl:attribute name="xsi:noNamespaceSchemaLocation">DCWormsResSchema.xsd</xsl:attribute>
11                        <xsl:element name="resources">
12                                <xsl:element name="scheduler"></xsl:element>
13                                <xsl:apply-templates select="//*[ComponentId]"
14                                        mode="full" />
15                        </xsl:element>
16                </xsl:element>
17        </xsl:template>
18
19        <!-- TODO: Move most of "code" to basic template -->
20        <xsl:template match="//*[ComponentId]" mode="full">
21                <xsl:element name="computingResource">
22                        <xsl:attribute name="class"> 
23                                <xsl:value-of select="name(.)" /> 
24                        </xsl:attribute>
25                        <xsl:attribute name="name">
26                                <xsl:variable name="oldComponentId"><xsl:value-of select="ComponentId" /></xsl:variable>
27                                <xsl:variable name="newComponentId">
28                                <xsl:value-of select="translate($oldComponentId, '/', '_')" />
29                                </xsl:variable>
30                                <xsl:value-of select="$newComponentId" />
31                        </xsl:attribute>
32                        <xsl:call-template name="translateComputingElement"/>
33                </xsl:element>
34        </xsl:template>
35
36        <xsl:template match="//*[ComponentId]">
37                <xsl:call-template name="translateComputingElement"/>
38        </xsl:template>
39
40        <xsl:template name="translateComputingElement">
41                <xsl:if test="Memory">
42                        <xsl:apply-templates select="Memory" />
43                </xsl:if>
44                <xsl:if test="Storage">
45                        <xsl:apply-templates select="Storage" />
46                </xsl:if>
47                <xsl:call-template name="BasicDEBBPhysicalElementParameters" />
48                <xsl:if test="Baseboard">
49                        <xsl:apply-templates select="Baseboard" />
50                </xsl:if>
51                <xsl:if test="Sensor">
52                        <xsl:apply-templates select="Sensor" />
53                </xsl:if>
54                <xsl:if test="PowerSupply">
55                        <xsl:apply-templates select="PowerSupply" />
56                </xsl:if>
57                <xsl:if test="Processor">
58                        <xsl:apply-templates select="Processor" />
59                </xsl:if>
60                <xsl:if test="CoolingDevice">
61                        <!-- Base cooling device data -->
62                        <xsl:apply-templates select="CoolingDevice" mode="basic" />
63                        <!-- Air throughput connected, advanced, technical data -->
64                        <xsl:element name="profile">
65                                <xsl:element name="airThroughputProfile">
66                                        <xsl:element name="airThroughputStates">
67                                                <xsl:apply-templates select="CoolingDevice"
68                                                        mode="advanced" />
69                                        </xsl:element>
70                                </xsl:element>
71                        </xsl:element>
72                </xsl:if>       
73        </xsl:template>
74
75        <xsl:template match="Baseboard">
76                <xsl:element name="parameter">
77                        <xsl:attribute name="name">Baseboard</xsl:attribute>
78                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
79                                cannot contain parameters. Must be parameter containing properties. -->
80                        <xsl:call-template name="BasicDEBBPhysicalElementProperties" />
81                </xsl:element>
82        </xsl:template>
83
84        <xsl:template match="Sensor">
85                <xsl:element name="parameter">
86                        <xsl:attribute name="name">Sensor</xsl:attribute>
87                        <xsl:element name="property">
88                                <xsl:attribute name="name">Class</xsl:attribute>
89                                <xsl:element name="value">
90                                        <xsl:value-of select="Class" />
91                                </xsl:element>
92                        </xsl:element>
93                        <xsl:element name="property">
94                                <xsl:attribute name="name">Unit</xsl:attribute>
95                                <xsl:element name="value">
96                                        <xsl:value-of select="Unit" />
97                                </xsl:element>
98                        </xsl:element>
99                        <xsl:if test="MinValue">
100                                <xsl:element name="property">
101                                        <xsl:attribute name="name">MinValue</xsl:attribute>
102                                        <xsl:element name="value">
103                                                <xsl:value-of select="MinValue" />
104                                        </xsl:element>
105                                </xsl:element>
106                        </xsl:if>
107                        <xsl:if test="MaxValue">
108                                <xsl:element name="property">
109                                        <xsl:attribute name="name">MaxValue</xsl:attribute>
110                                        <xsl:element name="value">
111                                                <xsl:value-of select="MaxValue" />
112                                        </xsl:element>
113                                </xsl:element>
114                        </xsl:if>
115                        <xsl:if test="Factor">
116                                <xsl:element name="property">
117                                        <xsl:attribute name="name">Factor</xsl:attribute>
118                                        <xsl:element name="value">
119                                                <xsl:value-of select="Factor" />
120                                        </xsl:element>
121                                </xsl:element>
122                        </xsl:if>
123                        <xsl:if test="Accuracy">
124                                <xsl:element name="property">
125                                        <xsl:attribute name="name">Accuracy</xsl:attribute>
126                                        <xsl:element name="value">
127                                                <xsl:value-of select="Accuracy" />
128                                        </xsl:element>
129                                </xsl:element>
130                        </xsl:if>
131
132                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
133                                cannot contain parameters. Must be parameter containing properties. -->
134                        <xsl:call-template name="BasicDEBBPhysicalElementProperties" />
135                </xsl:element>
136        </xsl:template>
137
138        <xsl:template match="Processor">
139                <xsl:element name="computingResource">
140                        <xsl:attribute name="class">Processor</xsl:attribute>
141                        <xsl:call-template name="BasicDEBBPhysicalElementParameters" />
142                        <xsl:element name="parameter">
143                                <xsl:attribute name="name">MaxClockSpeed</xsl:attribute>
144                                <xsl:element name="value">
145                                        <xsl:value-of select="MaxClockSpeed" />
146                                </xsl:element>
147                        </xsl:element>
148                        <xsl:if test="PState | CState">
149                                <!-- If PState or CState elements present add powerProfile element -->
150                                <xsl:element name="profile">
151                                        <xsl:element name="powerProfile">
152                                                <xsl:element name="powerStates">
153                                                        <xsl:apply-templates select="PState" />
154                                                        <xsl:apply-templates select="CState" />
155                                                </xsl:element>
156                                        </xsl:element>
157                                </xsl:element>
158                        </xsl:if>
159                </xsl:element>
160        </xsl:template>
161
162        <xsl:template match="PState">
163                <xsl:element name="powerState">
164                        <xsl:call-template name="BasicStateParameters" />
165                        <!-- Voltage & Frequency -->
166                        <xsl:element name="parameter">
167                                <xsl:attribute name="name">Voltage</xsl:attribute>
168                                <xsl:element name="value">
169                                        <xsl:value-of select="Voltage" />
170                                </xsl:element>
171                        </xsl:element>
172                        <xsl:element name="parameter">
173                                <xsl:attribute name="name">Frequency</xsl:attribute>
174                                <xsl:element name="value">
175                                        <xsl:value-of select="Frequency" />
176                                </xsl:element>
177                        </xsl:element>
178                </xsl:element>
179        </xsl:template>
180
181        <xsl:template match="CState">
182                <xsl:element name="powerState">
183                        <xsl:call-template name="BasicStateParameters" />
184                </xsl:element>
185        </xsl:template>
186
187        <xsl:template name="BasicStateParameters">
188                <xsl:element name="name">
189                        <xsl:value-of select="State" />
190                </xsl:element>
191                <xsl:element name="powerUsage">
192                        <xsl:value-of select="PowerUsage" />
193                </xsl:element>
194                <xsl:element name="transition">
195                        <xsl:element name="to">
196                                <xsl:value-of select="Transition/ToState" />
197                        </xsl:element>
198                        <xsl:element name="powerUsage">
199                                <xsl:value-of select="Transition/PowerUsage" />
200                        </xsl:element>
201                        <xsl:element name="time">
202                                <xsl:value-of select="Transition/Time" />
203                        </xsl:element>
204                </xsl:element>
205        </xsl:template>
206
207        <xsl:template match="PowerSupply">
208                <xsl:element name="parameter">
209                        <xsl:attribute name="name">PowerSupply</xsl:attribute>
210                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
211                                cannot contain parameters. Must be parameter containing properties. -->
212                        <xsl:call-template name="BasicDEBBPhysicalElementProperties" />
213                </xsl:element>
214        </xsl:template>
215
216        <xsl:template match="Memory">
217                <xsl:element name="resourceUnit">
218                        <xsl:attribute name="class">Memory</xsl:attribute>
219                        <xsl:element name="amount">
220                                <xsl:value-of select="Capacity" />
221                        </xsl:element>
222                        <xsl:call-template name="BasicDEBBPhysicalElementParameters" />
223                </xsl:element>
224        </xsl:template>
225
226        <xsl:template match="Storage">
227                <xsl:element name="resourceUnit">
228                        <xsl:attribute name="class">Storage</xsl:attribute>
229                        <xsl:attribute name="type"><xsl:value-of select="Class" /></xsl:attribute>
230                        <xsl:element name="amount">
231                                <xsl:attribute name="unit">MB</xsl:attribute>
232                                <xsl:value-of select="Capacity" />
233                        </xsl:element>
234                        <xsl:element name="parameter">
235                                <xsl:attribute name="name">Interface</xsl:attribute>
236                                <xsl:element name="value">
237                                        <xsl:value-of select="Interface" />
238                                </xsl:element>
239                        </xsl:element>
240                        <xsl:call-template name="BasicDEBBPhysicalElementParameters" />
241                </xsl:element>
242        </xsl:template>
243
244        <xsl:template match="CoolingDevice" mode="basic">
245                <xsl:element name="parameter">
246                        <xsl:attribute name="name">CoolingDevice</xsl:attribute>
247                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
248                                cannot contain parameters. Must be parameter containing properties. -->
249
250                        <!-- Obligatory attribute -->
251                        <xsl:element name="property">
252                                <xsl:attribute name="name">Class</xsl:attribute>
253                                <xsl:element name="value">
254                                        <xsl:value-of select="Class" />
255                                </xsl:element>
256                        </xsl:element>
257                        <xsl:if test="MaxCoolingCapacity">
258                                <xsl:element name="property">
259                                        <xsl:attribute name="name">MaxCoolingCapacity</xsl:attribute>
260                                        <xsl:element name="value">
261                                                <xsl:value-of select="MaxCoolingCapacity" />
262                                        </xsl:element>
263                                </xsl:element>
264                        </xsl:if>
265                        <xsl:if test="MaxAirThroughput">
266                                <xsl:element name="property">
267                                        <xsl:attribute name="name">MaxAirThroughput</xsl:attribute>
268                                        <xsl:element name="value">
269                                                <xsl:value-of select="MaxAirThroughput" />
270                                        </xsl:element>
271                                </xsl:element>
272                        </xsl:if>
273                        <xsl:if test="MaxWaterThroughput">
274                                <xsl:element name="property">
275                                        <xsl:attribute name="name">MaxWaterThroughput</xsl:attribute>
276                                        <xsl:element name="value">
277                                                <xsl:value-of select="MaxWaterThroughput" />
278                                        </xsl:element>
279                                </xsl:element>
280                        </xsl:if>
281                        <xsl:call-template name="BasicDEBBPhysicalElementProperties" />
282                </xsl:element>
283        </xsl:template>
284
285        <xsl:template match="CoolingDevice" mode="advanced">
286                <xsl:attribute name="name">DummyCoolingDeviceName</xsl:attribute>
287                <xsl:if test="ThroughputProfile">
288                        <xsl:apply-templates select="ThroughputProfile" />
289                </xsl:if>
290        </xsl:template>
291
292        <xsl:template match="ThroughputProfile">
293                <xsl:apply-templates select="FlowState" />
294        </xsl:template>
295
296        <xsl:template match="FlowState">
297                <xsl:element name="airThroughputState">
298                        <xsl:element name="name">
299                                <xsl:value-of select="State" />
300                        </xsl:element>
301                        <xsl:if test="Flow">
302                                <xsl:element name="value">
303                                        <xsl:value-of select="Flow" />
304                                </xsl:element>
305                        </xsl:if>
306                        <xsl:if test="PowerUsage">
307                                <xsl:element name="powerUsage">
308                                        <xsl:value-of select="PowerUsage" />
309                                </xsl:element>
310                        </xsl:if>
311                        <xsl:if test="Transition">
312                                <xsl:apply-templates select="Transition" />
313                        </xsl:if>
314                </xsl:element>
315        </xsl:template>
316
317        <xsl:template match="Transition">
318                <xsl:element name="parameter">
319                        <xsl:attribute name="name">ToState</xsl:attribute>
320                        <xsl:element name="value">
321                                <xsl:value-of select="ToState" />
322                        </xsl:element>
323                </xsl:element>
324                <xsl:element name="parameter">
325                        <xsl:attribute name="name">PowerUsage</xsl:attribute>
326                        <xsl:element name="value">
327                                <xsl:value-of select="PowerUsage" />
328                        </xsl:element>
329                </xsl:element>
330                <xsl:element name="parameter">
331                        <xsl:attribute name="name">Time</xsl:attribute>
332                        <xsl:element name="value">
333                                <xsl:value-of select="Time" />
334                        </xsl:element>
335                </xsl:element>
336        </xsl:template>
337
338        <!-- Template for transforming basic parameters of all devices of any type -->
339        <xsl:template name="BasicDEBBPhysicalElementParameters">
340                <xsl:if test="Manufacturer">
341                        <xsl:element name="parameter">
342                                <xsl:attribute name="name">Manufacturer</xsl:attribute>
343                                <xsl:element name="value">
344                                        <xsl:value-of select="Manufacturer" />
345                                </xsl:element>
346                        </xsl:element>
347                </xsl:if>
348                <xsl:if test="Product">
349                        <xsl:element name="parameter">
350                                <xsl:attribute name="name">Product</xsl:attribute>
351                                <xsl:element name="value">
352                                        <xsl:value-of select="Product" />
353                                </xsl:element>
354                        </xsl:element>
355                </xsl:if>
356                <xsl:if test="MaxPower">
357                        <xsl:element name="parameter">
358                                <xsl:attribute name="name">MaxPower</xsl:attribute>
359                                <xsl:element name="value">
360                                        <xsl:value-of select="MaxPower" />
361                                </xsl:element>
362                        </xsl:element>
363                </xsl:if>
364        </xsl:template>
365
366        <xsl:template name="BasicDEBBPhysicalElementProperties">
367                <xsl:if test="Manufacturer">
368                        <xsl:element name="property">
369                                <xsl:attribute name="name">Manufacturer</xsl:attribute>
370                                <xsl:element name="value">
371                                        <xsl:value-of select="Manufacturer" />
372                                </xsl:element>
373                        </xsl:element>
374                </xsl:if>
375                <xsl:if test="Product">
376                        <xsl:element name="property">
377                                <xsl:attribute name="name">Product</xsl:attribute>
378                                <xsl:element name="value">
379                                        <xsl:value-of select="Product" />
380                                </xsl:element>
381                        </xsl:element>
382                </xsl:if>
383                <xsl:if test="MaxPower">
384                        <xsl:element name="property">
385                                <xsl:attribute name="name">MaxPower</xsl:attribute>
386                                <xsl:element name="value">
387                                        <xsl:value-of select="MaxPower" />
388                                </xsl:element>
389                        </xsl:element>
390                </xsl:if>
391        </xsl:template>
392</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.