3 xmlns:
xsl=
"http://www.w3.org/1999/XSL/Transform"
4 xmlns:UML = 'org.omg.xmi.namespace.UML'
5 xmlns:
exslt=
"http://exslt.org/common"
7 <xsl:output method=
"xml"/>
9 <xsl:template match=
"/">
10 <xsl:apply-templates select=
"//UML:Model"/>
13 <xsl:template match=
"UML:Model">
15 <xsl:attribute name=
"name">
16 <xsl:value-of select=
"@name"/>
18 <xsl:call-template name=
"nostereotype"/>
19 <xsl:call-template name=
"ww8resources"/>
20 <xsl:call-template name=
"sprms"/>
24 <xsl:template name=
"nostereotype">
25 <xsl:for-each select=
"UML:Namespace.ownedElement/UML:Class[not(UML:ModelElement.stereotype)]">
26 <xsl:variable name=
"myid" select=
"@xmi.id"/>
28 <xsl:attribute name=
"name">
29 <xsl:value-of select=
"$myid"/>
31 <xsl:attribute name=
"resource">
32 <xsl:for-each select=
"//UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$myid]">
33 <xsl:value-of select=
"UML:Generalization.parent/UML:Class/@xmi.idref"/>
36 <xsl:apply-templates select=
".//UML:Attribute|.//UML:Operation" mode=
"ww8resource"/>
41 <xsl:template name=
"ww8resources">
42 <xsl:for-each select=
"UML:Namespace.ownedElement/UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8resource' and not(UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8sprm')]">
43 <xsl:sort select=
"@xmi.id"/>
44 <xsl:call-template name=
"ww8resource"/>
48 <xsl:template name=
"ww8resource">
49 <xsl:variable name=
"myid" select=
"@xmi.id"/>
50 <xsl:variable name=
"classid">
51 <xsl:call-template name=
"gettaggedvalue">
52 <xsl:with-param name=
"name">classid
</xsl:with-param>
56 <xsl:attribute name=
"name">
57 <xsl:value-of select=
"$myid"/>
59 <xsl:attribute name=
"resource">
60 <xsl:for-each select=
"//UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$myid]">
61 <xsl:value-of select=
"UML:Generalization.parent/UML:Class/@xmi.idref"/>
64 <xsl:if test=
"string-length($classid) > 0">
65 <xsl:attribute name=
"classid">
66 <xsl:value-of select=
"$classid"/>
69 <xsl:for-each select=
"UML:ModelElement.stereotype/UML:Stereotype">
70 <xsl:if test=
"@xmi.idref != 'ww8resource'">
72 <xsl:attribute name=
"name">
73 <xsl:value-of select=
"@xmi.idref"/>
78 <xsl:apply-templates select=
".//UML:Attribute|.//UML:Operation" mode=
"ww8resource"/>
82 <xsl:template name=
"gettaggedvalue">
83 <xsl:param name=
"name"/>
84 <xsl:for-each select=
"UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=$name]">
85 <xsl:value-of select=
"UML:TaggedValue.dataValue"/>
89 <xsl:template name=
"sizefortype">
90 <xsl:param name=
"type"/>
92 <xsl:when test=
"$type='S8'">1</xsl:when>
93 <xsl:when test=
"$type='U8'">1</xsl:when>
94 <xsl:when test=
"$type='S16'">2</xsl:when>
95 <xsl:when test=
"$type='U16'">2</xsl:when>
96 <xsl:when test=
"$type='S32'">4</xsl:when>
97 <xsl:when test=
"$type='U32'">4</xsl:when>
98 <xsl:otherwise>0</xsl:otherwise>
102 <xsl:template name=
"bits">
103 <xsl:param name=
"bits"/>
105 <xsl:attribute name=
"name">
106 <xsl:value-of select=
"@name"/>
108 <xsl:attribute name=
"bits">
109 <xsl:value-of select=
"$bits"/>
111 <xsl:attribute name=
"token">
112 <xsl:call-template name=
"gettaggedvalue">
113 <xsl:with-param name=
"name">attrid
</xsl:with-param>
119 <xsl:template match=
"UML:Attribute" mode=
"ww8resource">
120 <xsl:variable name=
"mask">
121 <xsl:call-template name=
"gettaggedvalue">
122 <xsl:with-param name=
"name">mask
</xsl:with-param>
125 <xsl:variable name=
"offset">
126 <xsl:call-template name=
"gettaggedvalue">
127 <xsl:with-param name=
"name">offset
</xsl:with-param>
130 <xsl:variable name=
"type">
131 <xsl:value-of select=
"UML:StructuralFeature.type/UML:DataType/@xmi.idref"/>
133 <xsl:variable name=
"size">
134 <xsl:call-template name=
"sizefortype">
135 <xsl:with-param name=
"type" select=
"$type"/>
138 <xsl:variable name=
"arraycount">
139 <xsl:call-template name=
"gettaggedvalue">
140 <xsl:with-param name=
"name">arraycount
</xsl:with-param>
144 <xsl:when test=
"string-length($mask) = 0">
146 <xsl:attribute name=
"name">
147 <xsl:value-of select=
"@name"/>
149 <xsl:attribute name=
"type">
150 <xsl:value-of select=
"$type"/>
152 <xsl:attribute name=
"size">
153 <xsl:value-of select=
"$size"/>
155 <xsl:for-each select=
"UML:ModelElement.stereotype/UML:Stereotype[@xmi.idref='array']">
156 <xsl:attribute name=
"array-count">
157 <xsl:value-of select=
"$arraycount"/>
160 <xsl:attribute name=
"token">
161 <xsl:call-template name=
"gettaggedvalue">
162 <xsl:with-param name=
"name">attrid
</xsl:with-param>
168 <xsl:variable name=
"attrswithoffset">
169 <xsl:for-each select=
"ancestor::UML:Class//UML:Attribute[UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='offset' and UML:TaggedValue.dataValue=$offset]]">
170 <xsl:sort select=
"UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='shift']/UML:TaggedValue.dataValue" data-type=
"number" order=
"descending"/>
171 <xsl:copy-of select=
"."/>
174 <xsl:text>
</xsl:text>
175 <xsl:if test=
"@name = exslt:node-set($attrswithoffset)/UML:Attribute[1]/@name">
177 <xsl:attribute name=
"size">
178 <xsl:value-of select=
"$size"/>
180 <xsl:attribute name=
"type">
181 <xsl:value-of select=
"$type"/>
183 <xsl:variable name=
"allbits" select=
"8 * $size"/>
184 <xsl:for-each select=
"exslt:node-set($attrswithoffset)/UML:Attribute">
185 <xsl:variable name=
"lastshift">
187 <xsl:when test=
"count(preceding-sibling::UML:Attribute) = 0">
188 <xsl:value-of select=
"$allbits"/>
191 <xsl:value-of select=
"preceding-sibling::UML:Attribute[1]/UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='shift']/UML:TaggedValue.dataValue"/>
195 <xsl:variable name=
"bits" select=
"$lastshift - UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='shift']/UML:TaggedValue.dataValue"/>
196 <xsl:call-template name=
"bits">
197 <xsl:with-param name=
"bits" select=
"$bits"/>
206 <xsl:template match=
"UML:Operation" mode=
"ww8resource">
208 <xsl:attribute name=
"name">
209 <xsl:value-of select=
"@name"/>
211 <xsl:attribute name=
"type">
212 <xsl:for-each select=
"UML:BehavioralFeature.parameter/UML:Parameter[@kind='return']">
213 <xsl:value-of select=
"UML:Parameter.type/UML:Class/@xmi.idref"/>
216 <xsl:attribute name=
"token">
217 <xsl:call-template name=
"gettaggedvalue">
218 <xsl:with-param name=
"name">opid
</xsl:with-param>
221 <xsl:for-each select=
"UML:ModelElement.stereotype">
223 <xsl:value-of select=
"UML:Stereotype/@xmi.idref"/>
229 <xsl:template match=
"*" mode=
"ww8resources">
230 <xsl:apply-templates select=
"*" mode=
"ww8resources"/>
233 <xsl:template name=
"sprms">
234 <xsl:for-each select=
"UML:Namespace.ownedElement/UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8sprm']">
235 <xsl:sort select=
"@xmi.id"/>
237 <xsl:attribute name=
"name">
238 <xsl:value-of select=
"@xmi.id"/>
240 <xsl:attribute name=
"code">
241 <xsl:call-template name=
"gettaggedvalue">
242 <xsl:with-param name=
"name">sprmcode
</xsl:with-param>
245 <xsl:attribute name=
"kind">
246 <xsl:call-template name=
"gettaggedvalue">
247 <xsl:with-param name=
"name">kind
</xsl:with-param>
250 <xsl:attribute name=
"token">
251 <xsl:call-template name=
"gettaggedvalue">
252 <xsl:with-param name=
"name">sprmid
</xsl:with-param>
255 <xsl:if test=
"UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8resource'">
256 <xsl:apply-templates select=
".//UML:Attribute|.//UML:Operation" mode=
"ww8resource"/>