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

Revision 928, 18.1 KB checked in by gosiaw, 12 years ago (diff)

Heatsinks and Outlets added

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
9        <!-- Information for mapping of DEBB classes into DCWoRMS computingResource
10                classes -->
11        <xsl:param name="computingResourceClasses" select="computingResourceClasses" />
12
13        <!-- Information for mapping of resource classes into DCWoRMS resourceUnits
14                classes -->
15        <xsl:param name="resourceUnitClasses" select="resourceUnitClasses" />
16
17        <xsl:template match="/">
18                <xsl:element name="environment">
19                        <xsl:attribute name="xsi:noNamespaceSchemaLocation">DCWormsResSchema.xsd</xsl:attribute>
20                        <xsl:element name="resources">
21                                <xsl:element name="scheduler"></xsl:element>
22                                <xsl:apply-templates select="//*[ComponentId]"
23                                        mode="full" />
24                        </xsl:element>
25                </xsl:element>
26        </xsl:template>
27
28        <!-- TODO: Move most of "code" to basic template -->
29        <xsl:template match="//*[ComponentId]" mode="full">
30                <xsl:element name="computingResource">
31                        <xsl:attribute name="class"> 
32                                <xsl:value-of select="name(.)" /> 
33                        </xsl:attribute>
34                        <xsl:attribute name="name">
35                                <xsl:variable name="oldComponentId"><xsl:value-of select="ComponentId" /></xsl:variable>
36                                <xsl:variable name="newComponentId">
37                                <xsl:value-of select="translate($oldComponentId, '/', '_')" />
38                                </xsl:variable>
39                                <xsl:value-of select="$newComponentId" />
40                        </xsl:attribute>
41                        <xsl:call-template name="translateComputingElement" />
42                </xsl:element>
43        </xsl:template>
44
45        <xsl:template match="//*[ComponentId]">
46                <xsl:call-template name="translateComputingElement" />
47        </xsl:template>
48
49        <xsl:template name="translateComputingElement">
50                <xsl:if test="Memory">
51                        <xsl:apply-templates select="Memory" />
52                </xsl:if>
53                <xsl:if test="Storage">
54                        <xsl:apply-templates select="Storage" />
55                </xsl:if>
56                <xsl:call-template name="BasicDEBBPhysicalElementParameters" />
57                <xsl:if test="Baseboard">
58                        <xsl:apply-templates select="Baseboard" />
59                </xsl:if>
60                <xsl:if test="Sensor">
61                        <xsl:apply-templates select="Sensor" />
62                </xsl:if>
63                <xsl:if test="PowerSupply">
64                        <xsl:apply-templates select="PowerSupply" />
65                </xsl:if>
66                <xsl:if test="Processor">
67                        <xsl:apply-templates select="Processor" />
68                </xsl:if>
69                <xsl:if test="CoolingDevice">
70                        <!-- Base cooling device data -->
71                        <xsl:apply-templates select="CoolingDevice" mode="basic" />
72                        <!-- Air throughput connected, advanced, technical data -->
73                        <xsl:if test="CoolingDevice/ThroughputProfile">
74                                <xsl:element name="profile">
75                                        <xsl:element name="airThroughputProfile">
76                                                <xsl:element name="airThroughputStates">
77                                                        <xsl:apply-templates select="CoolingDevice"
78                                                                mode="advanced" />
79                                                </xsl:element>
80                                        </xsl:element>
81                                </xsl:element>
82                        </xsl:if>
83                </xsl:if>
84               
85                <xsl:if test="Heatsink">
86                        <xsl:apply-templates select="Heatsink" />
87                </xsl:if>       
88               
89                <xsl:if test="Outlet">
90                        <xsl:apply-templates select="Outlet" />
91                </xsl:if>       
92
93        </xsl:template>
94
95        <xsl:template match="Baseboard">
96                <xsl:element name="parameter">
97                        <xsl:attribute name="name">baseboard</xsl:attribute>
98                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
99                                cannot contain parameters. Must be parameter containing properties. -->
100                        <xsl:call-template name="BasicDEBBPhysicalElementProperties" />
101                </xsl:element>
102        </xsl:template>
103
104        <xsl:template match="Sensor">
105                <xsl:element name="parameter">
106                        <xsl:attribute name="name">sensor</xsl:attribute>
107                        <xsl:element name="property">
108                                <xsl:attribute name="name">class</xsl:attribute>
109                                <xsl:element name="value">
110                                        <xsl:value-of select="Class" />
111                                </xsl:element>
112                        </xsl:element>
113                        <xsl:element name="property">
114                                <xsl:attribute name="name">unit</xsl:attribute>
115                                <xsl:element name="value">
116                                        <xsl:value-of select="Unit" />
117                                </xsl:element>
118                        </xsl:element>
119                        <xsl:if test="MinValue">
120                                <xsl:element name="property">
121                                        <xsl:attribute name="name">minValue</xsl:attribute>
122                                        <xsl:element name="value">
123                                                <xsl:value-of select="MinValue" />
124                                        </xsl:element>
125                                </xsl:element>
126                        </xsl:if>
127                        <xsl:if test="MaxValue">
128                                <xsl:element name="property">
129                                        <xsl:attribute name="name">maxValue</xsl:attribute>
130                                        <xsl:element name="value">
131                                                <xsl:value-of select="MaxValue" />
132                                        </xsl:element>
133                                </xsl:element>
134                        </xsl:if>
135                        <xsl:if test="Factor">
136                                <xsl:element name="property">
137                                        <xsl:attribute name="name">factor</xsl:attribute>
138                                        <xsl:element name="value">
139                                                <xsl:value-of select="Factor" />
140                                        </xsl:element>
141                                </xsl:element>
142                        </xsl:if>
143                        <xsl:if test="Accuracy">
144                                <xsl:element name="property">
145                                        <xsl:attribute name="name">accuracy</xsl:attribute>
146                                        <xsl:element name="value">
147                                                <xsl:value-of select="Accuracy" />
148                                        </xsl:element>
149                                </xsl:element>
150                        </xsl:if>
151
152                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
153                                cannot contain parameters. Must be parameter containing properties. -->
154                        <xsl:call-template name="BasicDEBBPhysicalElementProperties" />
155                </xsl:element>
156        </xsl:template>
157
158        <xsl:template match="Processor">
159                <xsl:element name="computingResource">
160                        <xsl:attribute name="class">Processor</xsl:attribute>
161                        <xsl:call-template name="BasicDEBBPhysicalElementParameters" />
162                        <xsl:element name="parameter">
163                                <xsl:attribute name="name">speed</xsl:attribute>
164                                <xsl:element name="value">
165                                        <xsl:value-of select="MaxClockSpeed" />
166                                </xsl:element>
167                        </xsl:element>
168                        <xsl:if test="PState | CState">
169                                <!-- If PState or CState elements present add powerProfile element -->
170                                <xsl:element name="profile">
171                                        <xsl:element name="powerProfile">
172                                                <xsl:if test="PState/Transition">
173                                                        <xsl:element name="powerStates">
174                                                                <!-- <xsl:element name="powerState"> -->
175                                                                <!-- TODO: What to take if from??? -->
176                                                                <!-- <xsl:element name="name">DummyName</xsl:element> -->
177                                                                <!-- <xsl:element name="powerUsage">0</xsl:element> -->
178                                                                <xsl:apply-templates select="PState/Transition" />
179                                                                <!-- </xsl:element> -->
180                                                        </xsl:element>
181                                                </xsl:if>
182                                                <xsl:apply-templates select="PState" />
183                                                <xsl:apply-templates select="CState" />
184                                        </xsl:element>
185                                </xsl:element>
186                        </xsl:if>
187                </xsl:element>
188        </xsl:template>
189
190        <xsl:template match="PState">
191                <xsl:element name="parameter">
192                        <xsl:attribute name="name">pState</xsl:attribute>
193                        <xsl:element name="property">
194                                <xsl:attribute name="name">name</xsl:attribute>
195                                <xsl:element name="value">
196                                        <xsl:value-of select="State" />
197                                </xsl:element>
198                        </xsl:element>
199                        <xsl:element name="property">
200                                <xsl:attribute name="name">frequency</xsl:attribute>
201                                <xsl:element name="value">
202                                        <xsl:value-of select="Frequency" />
203                                </xsl:element>
204                        </xsl:element>
205                        <xsl:element name="property">
206                                <xsl:attribute name="name">voltage</xsl:attribute>
207                                <xsl:element name="value">
208                                        <xsl:value-of select="Voltage" />
209                                </xsl:element>
210                        </xsl:element>
211                        <xsl:element name="property">
212                                <xsl:attribute name="name">powerUsage</xsl:attribute>
213                                <xsl:element name="value">
214                                        <xsl:value-of select="PowerUsage" />
215                                </xsl:element>
216                        </xsl:element>
217                </xsl:element>
218        </xsl:template>
219
220        <xsl:template match="CState">
221                <xsl:element name="parameter">
222                        <xsl:attribute name="name">pState</xsl:attribute>
223                        <xsl:element name="property">
224                                <xsl:attribute name="name">name</xsl:attribute>
225                                <xsl:element name="value">
226                                        <xsl:value-of select="State" />
227                                </xsl:element>
228                        </xsl:element>
229                        <xsl:element name="property">
230                                <xsl:attribute name="name">powerUsage</xsl:attribute>
231                                <xsl:element name="value">
232                                        <xsl:value-of select="PowerUsage" />
233                                </xsl:element>
234                        </xsl:element>
235                </xsl:element>
236        </xsl:template>
237
238        <xsl:template match="PState/Transition">
239                <xsl:element name="powerState">
240                        <xsl:element name="name">
241                                <xsl:value-of select="../State" />
242                        </xsl:element>
243                        <xsl:element name="transition">
244                                <xsl:element name="to">
245                                        <xsl:value-of select="ToState" />
246                                </xsl:element>
247                                <xsl:element name="powerUsage">
248                                        <xsl:value-of select="PowerUsage" />
249                                </xsl:element>
250                                <xsl:element name="time">
251                                        <xsl:value-of select="Time" />
252                                </xsl:element>
253                        </xsl:element>
254                </xsl:element>
255        </xsl:template>
256
257        <xsl:template name="BasicStateParameters">
258                <xsl:element name="name">
259                        <xsl:value-of select="State" />
260                </xsl:element>
261                <xsl:element name="powerUsage">
262                        <xsl:value-of select="PowerUsage" />
263                </xsl:element>
264                <xsl:element name="transition">
265                        <xsl:element name="to">
266                                <xsl:value-of select="Transition/ToState" />
267                        </xsl:element>
268                        <xsl:element name="powerUsage">
269                                <xsl:value-of select="Transition/PowerUsage" />
270                        </xsl:element>
271                        <xsl:element name="time">
272                                <xsl:value-of select="Transition/Time" />
273                        </xsl:element>
274                </xsl:element>
275        </xsl:template>
276
277        <xsl:template match="PowerSupply">
278                <xsl:element name="parameter">
279                        <xsl:attribute name="name">powerSupply</xsl:attribute>
280                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
281                                cannot contain parameters. Must be parameter containing properties. -->
282                        <xsl:call-template name="BasicDEBBPhysicalElementProperties" />
283                </xsl:element>
284        </xsl:template>
285
286        <xsl:template match="Memory">
287                <xsl:element name="resourceUnit">
288                        <xsl:attribute name="class">Memory</xsl:attribute>
289                        <xsl:element name="amount">
290                                <xsl:value-of select="Capacity" />
291                        </xsl:element>
292                        <xsl:call-template name="BasicDEBBPhysicalElementParameters" />
293                </xsl:element>
294        </xsl:template>
295
296        <xsl:template match="Storage">
297                <xsl:element name="resourceUnit">
298                        <xsl:attribute name="class">Storage</xsl:attribute>
299                        <xsl:attribute name="type"><xsl:value-of select="Class" /></xsl:attribute>
300                        <xsl:element name="amount">
301                                <xsl:attribute name="unit">MB</xsl:attribute>
302                                <xsl:value-of select="Capacity" />
303                        </xsl:element>
304                        <xsl:element name="parameter">
305                                <xsl:attribute name="name">interface</xsl:attribute>
306                                <xsl:element name="value">
307                                        <xsl:value-of select="Interface" />
308                                </xsl:element>
309                        </xsl:element>
310                        <xsl:call-template name="BasicDEBBPhysicalElementParameters" />
311                </xsl:element>
312        </xsl:template>
313
314        <xsl:template match="CoolingDevice" mode="basic">
315                <xsl:element name="parameter">
316                        <xsl:attribute name="name">CoolingDevice</xsl:attribute>
317                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
318                                cannot contain parameters. Must be parameter containing properties. -->
319
320                        <!-- Obligatory attribute -->
321                        <xsl:element name="property">
322                                <xsl:attribute name="name">class</xsl:attribute>
323                                <xsl:element name="value">
324                                        <xsl:value-of select="Class" />
325                                </xsl:element>
326                        </xsl:element>
327                        <xsl:if test="MaxCoolingCapacity">
328                                <xsl:element name="property">
329                                        <xsl:attribute name="name">maxCoolingCapacity</xsl:attribute>
330                                        <xsl:element name="value">
331                                                <xsl:value-of select="MaxCoolingCapacity" />
332                                        </xsl:element>
333                                </xsl:element>
334                        </xsl:if>
335                        <xsl:if test="MaxAirThroughput">
336                                <xsl:element name="property">
337                                        <xsl:attribute name="name">maxAirThroughput</xsl:attribute>
338                                        <xsl:element name="value">
339                                                <xsl:value-of select="MaxAirThroughput" />
340                                        </xsl:element>
341                                </xsl:element>
342                        </xsl:if>
343                        <xsl:if test="MaxWaterThroughput">
344                                <xsl:element name="property">
345                                        <xsl:attribute name="name">maxWaterThroughput</xsl:attribute>
346                                        <xsl:element name="value">
347                                                <xsl:value-of select="MaxWaterThroughput" />
348                                        </xsl:element>
349                                </xsl:element>
350                        </xsl:if>
351                        <xsl:call-template name="BasicDEBBPhysicalElementProperties" />
352                </xsl:element>
353        </xsl:template>
354
355        <xsl:template match="CoolingDevice" mode="advanced">
356                <xsl:attribute name="name"><xsl:value-of select="generate-id()" /></xsl:attribute>
357                <xsl:if test="ThroughputProfile">
358                        <xsl:apply-templates select="ThroughputProfile" />
359                </xsl:if>
360        </xsl:template>
361
362        <xsl:template match="ThroughputProfile">
363                <xsl:apply-templates select="FlowState" />
364        </xsl:template>
365
366        <xsl:template match="FlowState">
367                <xsl:element name="airThroughputState">
368                        <xsl:element name="name">
369                                <xsl:value-of select="State" />
370                        </xsl:element>
371                        <xsl:if test="Flow">
372                                <xsl:element name="value">
373                                        <xsl:value-of select="Flow" />
374                                </xsl:element>
375                        </xsl:if>
376                        <xsl:if test="PowerUsage">
377                                <xsl:element name="powerUsage">
378                                        <xsl:value-of select="PowerUsage" />
379                                </xsl:element>
380                        </xsl:if>
381                        <xsl:if test="Transition">
382                                <xsl:apply-templates select="Transition" />
383                        </xsl:if>
384                </xsl:element>
385        </xsl:template>
386
387        <xsl:template match="Transition">
388                <xsl:element name="parameter">
389                        <xsl:attribute name="name">toState</xsl:attribute>
390                        <xsl:element name="value">
391                                <xsl:value-of select="ToState" />
392                        </xsl:element>
393                </xsl:element>
394                <xsl:element name="parameter">
395                        <xsl:attribute name="name">powerUsage</xsl:attribute>
396                        <xsl:element name="value">
397                                <xsl:value-of select="PowerUsage" />
398                        </xsl:element>
399                </xsl:element>
400                <xsl:element name="parameter">
401                        <xsl:attribute name="name">time</xsl:attribute>
402                        <xsl:element name="value">
403                                <xsl:value-of select="Time" />
404                        </xsl:element>
405                </xsl:element>
406        </xsl:template>
407
408        <!-- Template for transforming basic parameters of all devices of any type -->
409        <xsl:template name="BasicDEBBPhysicalElementParameters">
410                <xsl:if test="Manufacturer">
411                        <xsl:element name="parameter">
412                                <xsl:attribute name="name">manufacturer</xsl:attribute>
413                                <xsl:element name="value">
414                                        <xsl:value-of select="Manufacturer" />
415                                </xsl:element>
416                        </xsl:element>
417                </xsl:if>
418                <xsl:if test="Product">
419                        <xsl:element name="parameter">
420                                <xsl:attribute name="name">product</xsl:attribute>
421                                <xsl:element name="value">
422                                        <xsl:value-of select="Product" />
423                                </xsl:element>
424                        </xsl:element>
425                </xsl:if>
426                <xsl:if test="MaxPower">
427                        <xsl:element name="parameter">
428                                <xsl:attribute name="name">maxPower</xsl:attribute>
429                                <xsl:element name="value">
430                                        <xsl:value-of select="MaxPower" />
431                                </xsl:element>
432                        </xsl:element>
433                </xsl:if>
434        </xsl:template>
435
436        <xsl:template name="BasicDEBBSimpleTypeProperties">
437                <xsl:comment>BasicDEBBSimpleTypeProperties</xsl:comment>
438               
439                <xsl:call-template name="BasicDEBBPhysicalElementProperties"/>
440                <!-- Transform (not needed in DCWoRMS) -->
441<!--            <xsl:if test="Transform">-->
442<!--                    <xsl:element name="property">-->
443<!--                            <xsl:attribute name="name">transform</xsl:attribute>-->
444<!--                            <xsl:element name="value">-->
445<!--                                    <xsl:value-of select="Transform" />-->
446<!--                            </xsl:element>-->
447<!--                    </xsl:element>          -->
448<!--            </xsl:if>-->
449               
450                <!-- Reference (not needed in DCWoRMS) -->
451<!--            <xsl:if test="Reference">-->
452<!--                    <xsl:element name="property">-->
453<!--                            <xsl:attribute name="name">reference</xsl:attribute>-->
454<!--                            <xsl:element name="value">-->
455<!--                                    <xsl:value-of select="Reference" />-->
456<!--                            </xsl:element>-->
457<!--                    </xsl:element>          -->
458<!--            </xsl:if>                       -->
459        </xsl:template>
460       
461        <xsl:template name="BasicDEBBPhysicalElementProperties">
462                <xsl:comment>BasicDEBBPhysicalElementProperties</xsl:comment>
463               
464                <xsl:if test="Label">
465                        <xsl:element name="property">
466                                <xsl:attribute name="name">label</xsl:attribute>
467                                <xsl:element name="value">
468                                        <xsl:value-of select="Label" />
469                                </xsl:element>
470                        </xsl:element>
471                </xsl:if>
472               
473                <xsl:if test="Manufacturer">
474                        <xsl:element name="property">
475                                <xsl:attribute name="name">manufacturer</xsl:attribute>
476                                <xsl:element name="value">
477                                        <xsl:value-of select="Manufacturer" />
478                                </xsl:element>
479                        </xsl:element>
480                </xsl:if>
481               
482                <xsl:if test="Product">
483                        <xsl:element name="property">
484                                <xsl:attribute name="name">product</xsl:attribute>
485                                <xsl:element name="value">
486                                        <xsl:value-of select="Product" />
487                                </xsl:element>
488                        </xsl:element>
489                </xsl:if>
490               
491                <xsl:if test="MaxPower">
492                        <xsl:element name="property">
493                                <xsl:attribute name="name">maxPower</xsl:attribute>
494                                <xsl:element name="value">
495                                        <xsl:value-of select="MaxPower" />
496                                </xsl:element>
497                        </xsl:element>
498                </xsl:if>
499               
500                <xsl:if test="PowerUsage">
501                        <xsl:element name="property">
502                                <xsl:attribute name="name">powerUsage</xsl:attribute>
503                                <xsl:element name="value">
504                                        <xsl:value-of select="PowerUsage" />
505                                </xsl:element>
506                        </xsl:element>
507                </xsl:if>
508
509                <!-- PowerUsageProfile -->
510                <!-- TODO: It should be translated, but it is not clear how. Impossible
511                 to map hierarchy in parameters and their properties, which is necessary here. -->
512<!--            <xsl:if test="PowerUsageProfile">-->
513<!--                    <xsl:element name="property">-->
514<!--                            <xsl:attribute name="name">powerUsageProfile</xsl:attribute>-->
515<!--                            <xsl:element name="value">-->
516<!--                                    <xsl:value-of select="PowerUsageProfile" />-->
517<!--                            </xsl:element>-->
518<!--                    </xsl:element>-->
519<!--            </xsl:if>-->
520
521               
522                <xsl:if test="Type">
523                        <xsl:element name="property">
524                                <xsl:attribute name="name">type</xsl:attribute>
525                                <xsl:element name="value">
526                                        <xsl:value-of select="Type" />
527                                </xsl:element>
528                        </xsl:element>
529                </xsl:if>
530               
531        </xsl:template>
532       
533        <xsl:template match="Heatsink">
534                <xsl:element name="parameter">
535                        <xsl:attribute name="name">heatsink</xsl:attribute>
536                       
537                        <xsl:if test="TransferRate">
538                                <xsl:element name="property">
539                                        <xsl:attribute name="name">transferRate</xsl:attribute>
540                                        <xsl:element name="value">
541                                                <xsl:value-of select="TransferRate" />
542                                        </xsl:element>
543                                </xsl:element>
544                        </xsl:if>
545                       
546                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
547                                cannot contain parameters. Must be parameter containing properties. -->
548                        <xsl:call-template name="BasicDEBBSimpleTypeProperties" />
549                </xsl:element> 
550        </xsl:template> 
551       
552        <xsl:template match="Outlet">
553                <xsl:element name="parameter">
554                        <xsl:attribute name="name">outlet</xsl:attribute>
555                       
556                        <xsl:if test="MaxRPM">
557                                <xsl:element name="property">
558                                        <xsl:attribute name="name">maxRPM</xsl:attribute>
559                                        <xsl:element name="value">
560                                                <xsl:value-of select="MaxRPM" />
561                                        </xsl:element>
562                                </xsl:element>
563                        </xsl:if>
564                       
565                        <!-- Don't call BasicDEBBPhysicalElementParameters, because parameter
566                                cannot contain parameters. Must be parameter containing properties. -->
567                        <xsl:call-template name="BasicDEBBSimpleTypeProperties" />
568                </xsl:element>
569       
570        </xsl:template> 
571       
572</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.