1cdf0e10cSrcweir<xsl:stylesheet 2cdf0e10cSrcweir version="1.0" 3cdf0e10cSrcweir xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 4cdf0e10cSrcweir xmlns:UML = 'org.omg.xmi.namespace.UML' 5cdf0e10cSrcweir xmlns:exslt="http://exslt.org/common" 6cdf0e10cSrcweir xml:space="default"> 7*8eb6fccdSAndrew Rist<!--*********************************************************** 8*8eb6fccdSAndrew Rist * 9*8eb6fccdSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 10*8eb6fccdSAndrew Rist * or more contributor license agreements. See the NOTICE file 11*8eb6fccdSAndrew Rist * distributed with this work for additional information 12*8eb6fccdSAndrew Rist * regarding copyright ownership. The ASF licenses this file 13*8eb6fccdSAndrew Rist * to you under the Apache License, Version 2.0 (the 14*8eb6fccdSAndrew Rist * "License"); you may not use this file except in compliance 15*8eb6fccdSAndrew Rist * with the License. You may obtain a copy of the License at 16*8eb6fccdSAndrew Rist * 17*8eb6fccdSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 18*8eb6fccdSAndrew Rist * 19*8eb6fccdSAndrew Rist * Unless required by applicable law or agreed to in writing, 20*8eb6fccdSAndrew Rist * software distributed under the License is distributed on an 21*8eb6fccdSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 22*8eb6fccdSAndrew Rist * KIND, either express or implied. See the License for the 23*8eb6fccdSAndrew Rist * specific language governing permissions and limitations 24*8eb6fccdSAndrew Rist * under the License. 25*8eb6fccdSAndrew Rist * 26*8eb6fccdSAndrew Rist ***********************************************************--> 27cdf0e10cSrcweir <xsl:output method="xml"/> 28cdf0e10cSrcweir 29cdf0e10cSrcweir <xsl:template match="/"> 30cdf0e10cSrcweir <xsl:apply-templates select="//UML:Model"/> 31cdf0e10cSrcweir </xsl:template> 32cdf0e10cSrcweir 33cdf0e10cSrcweir <xsl:template match="UML:Model"> 34cdf0e10cSrcweir <model> 35cdf0e10cSrcweir <xsl:attribute name="name"> 36cdf0e10cSrcweir <xsl:value-of select="@name"/> 37cdf0e10cSrcweir </xsl:attribute> 38cdf0e10cSrcweir <xsl:call-template name="nostereotype"/> 39cdf0e10cSrcweir <xsl:call-template name="ww8resources"/> 40cdf0e10cSrcweir <xsl:call-template name="sprms"/> 41cdf0e10cSrcweir </model> 42cdf0e10cSrcweir </xsl:template> 43cdf0e10cSrcweir 44cdf0e10cSrcweir <xsl:template name="nostereotype"> 45cdf0e10cSrcweir <xsl:for-each select="UML:Namespace.ownedElement/UML:Class[not(UML:ModelElement.stereotype)]"> 46cdf0e10cSrcweir <xsl:variable name="myid" select="@xmi.id"/> 47cdf0e10cSrcweir <class> 48cdf0e10cSrcweir <xsl:attribute name="name"> 49cdf0e10cSrcweir <xsl:value-of select="$myid"/> 50cdf0e10cSrcweir </xsl:attribute> 51cdf0e10cSrcweir <xsl:attribute name="resource"> 52cdf0e10cSrcweir <xsl:for-each select="//UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$myid]"> 53cdf0e10cSrcweir <xsl:value-of select="UML:Generalization.parent/UML:Class/@xmi.idref"/> 54cdf0e10cSrcweir </xsl:for-each> 55cdf0e10cSrcweir </xsl:attribute> 56cdf0e10cSrcweir <xsl:apply-templates select=".//UML:Attribute|.//UML:Operation" mode="ww8resource"/> 57cdf0e10cSrcweir </class> 58cdf0e10cSrcweir </xsl:for-each> 59cdf0e10cSrcweir </xsl:template> 60cdf0e10cSrcweir 61cdf0e10cSrcweir <xsl:template name="ww8resources"> 62cdf0e10cSrcweir <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')]"> 63cdf0e10cSrcweir <xsl:sort select="@xmi.id"/> 64cdf0e10cSrcweir <xsl:call-template name="ww8resource"/> 65cdf0e10cSrcweir </xsl:for-each> 66cdf0e10cSrcweir </xsl:template> 67cdf0e10cSrcweir 68cdf0e10cSrcweir <xsl:template name="ww8resource"> 69cdf0e10cSrcweir <xsl:variable name="myid" select="@xmi.id"/> 70cdf0e10cSrcweir <xsl:variable name="classid"> 71cdf0e10cSrcweir <xsl:call-template name="gettaggedvalue"> 72cdf0e10cSrcweir <xsl:with-param name="name">classid</xsl:with-param> 73cdf0e10cSrcweir </xsl:call-template> 74cdf0e10cSrcweir </xsl:variable> 75cdf0e10cSrcweir <ww8resource> 76cdf0e10cSrcweir <xsl:attribute name="name"> 77cdf0e10cSrcweir <xsl:value-of select="$myid"/> 78cdf0e10cSrcweir </xsl:attribute> 79cdf0e10cSrcweir <xsl:attribute name="resource"> 80cdf0e10cSrcweir <xsl:for-each select="//UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$myid]"> 81cdf0e10cSrcweir <xsl:value-of select="UML:Generalization.parent/UML:Class/@xmi.idref"/> 82cdf0e10cSrcweir </xsl:for-each> 83cdf0e10cSrcweir </xsl:attribute> 84cdf0e10cSrcweir <xsl:if test="string-length($classid) > 0"> 85cdf0e10cSrcweir <xsl:attribute name="classid"> 86cdf0e10cSrcweir <xsl:value-of select="$classid"/> 87cdf0e10cSrcweir </xsl:attribute> 88cdf0e10cSrcweir </xsl:if> 89cdf0e10cSrcweir <xsl:for-each select="UML:ModelElement.stereotype/UML:Stereotype"> 90cdf0e10cSrcweir <xsl:if test="@xmi.idref != 'ww8resource'"> 91cdf0e10cSrcweir <stereotype> 92cdf0e10cSrcweir <xsl:attribute name="name"> 93cdf0e10cSrcweir <xsl:value-of select="@xmi.idref"/> 94cdf0e10cSrcweir </xsl:attribute> 95cdf0e10cSrcweir </stereotype> 96cdf0e10cSrcweir </xsl:if> 97cdf0e10cSrcweir </xsl:for-each> 98cdf0e10cSrcweir <xsl:apply-templates select=".//UML:Attribute|.//UML:Operation" mode="ww8resource"/> 99cdf0e10cSrcweir </ww8resource> 100cdf0e10cSrcweir </xsl:template> 101cdf0e10cSrcweir 102cdf0e10cSrcweir <xsl:template name="gettaggedvalue"> 103cdf0e10cSrcweir <xsl:param name="name"/> 104cdf0e10cSrcweir <xsl:for-each select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=$name]"> 105cdf0e10cSrcweir <xsl:value-of select="UML:TaggedValue.dataValue"/> 106cdf0e10cSrcweir </xsl:for-each> 107cdf0e10cSrcweir </xsl:template> 108cdf0e10cSrcweir 109cdf0e10cSrcweir <xsl:template name="sizefortype"> 110cdf0e10cSrcweir <xsl:param name="type"/> 111cdf0e10cSrcweir <xsl:choose> 112cdf0e10cSrcweir <xsl:when test="$type='S8'">1</xsl:when> 113cdf0e10cSrcweir <xsl:when test="$type='U8'">1</xsl:when> 114cdf0e10cSrcweir <xsl:when test="$type='S16'">2</xsl:when> 115cdf0e10cSrcweir <xsl:when test="$type='U16'">2</xsl:when> 116cdf0e10cSrcweir <xsl:when test="$type='S32'">4</xsl:when> 117cdf0e10cSrcweir <xsl:when test="$type='U32'">4</xsl:when> 118cdf0e10cSrcweir <xsl:otherwise>0</xsl:otherwise> 119cdf0e10cSrcweir </xsl:choose> 120cdf0e10cSrcweir </xsl:template> 121cdf0e10cSrcweir 122cdf0e10cSrcweir <xsl:template name="bits"> 123cdf0e10cSrcweir <xsl:param name="bits"/> 124cdf0e10cSrcweir <bits> 125cdf0e10cSrcweir <xsl:attribute name="name"> 126cdf0e10cSrcweir <xsl:value-of select="@name"/> 127cdf0e10cSrcweir </xsl:attribute> 128cdf0e10cSrcweir <xsl:attribute name="bits"> 129cdf0e10cSrcweir <xsl:value-of select="$bits"/> 130cdf0e10cSrcweir </xsl:attribute> 131cdf0e10cSrcweir <xsl:attribute name="token"> 132cdf0e10cSrcweir <xsl:call-template name="gettaggedvalue"> 133cdf0e10cSrcweir <xsl:with-param name="name">attrid</xsl:with-param> 134cdf0e10cSrcweir </xsl:call-template> 135cdf0e10cSrcweir </xsl:attribute> 136cdf0e10cSrcweir </bits> 137cdf0e10cSrcweir </xsl:template> 138cdf0e10cSrcweir 139cdf0e10cSrcweir <xsl:template match="UML:Attribute" mode="ww8resource"> 140cdf0e10cSrcweir <xsl:variable name="mask"> 141cdf0e10cSrcweir <xsl:call-template name="gettaggedvalue"> 142cdf0e10cSrcweir <xsl:with-param name="name">mask</xsl:with-param> 143cdf0e10cSrcweir </xsl:call-template> 144cdf0e10cSrcweir </xsl:variable> 145cdf0e10cSrcweir <xsl:variable name="offset"> 146cdf0e10cSrcweir <xsl:call-template name="gettaggedvalue"> 147cdf0e10cSrcweir <xsl:with-param name="name">offset</xsl:with-param> 148cdf0e10cSrcweir </xsl:call-template> 149cdf0e10cSrcweir </xsl:variable> 150cdf0e10cSrcweir <xsl:variable name="type"> 151cdf0e10cSrcweir <xsl:value-of select="UML:StructuralFeature.type/UML:DataType/@xmi.idref"/> 152cdf0e10cSrcweir </xsl:variable> 153cdf0e10cSrcweir <xsl:variable name="size"> 154cdf0e10cSrcweir <xsl:call-template name="sizefortype"> 155cdf0e10cSrcweir <xsl:with-param name="type" select="$type"/> 156cdf0e10cSrcweir </xsl:call-template> 157cdf0e10cSrcweir </xsl:variable> 158cdf0e10cSrcweir <xsl:variable name="arraycount"> 159cdf0e10cSrcweir <xsl:call-template name="gettaggedvalue"> 160cdf0e10cSrcweir <xsl:with-param name="name">arraycount</xsl:with-param> 161cdf0e10cSrcweir </xsl:call-template> 162cdf0e10cSrcweir </xsl:variable> 163cdf0e10cSrcweir <xsl:choose> 164cdf0e10cSrcweir <xsl:when test="string-length($mask) = 0"> 165cdf0e10cSrcweir <attribute> 166cdf0e10cSrcweir <xsl:attribute name="name"> 167cdf0e10cSrcweir <xsl:value-of select="@name"/> 168cdf0e10cSrcweir </xsl:attribute> 169cdf0e10cSrcweir <xsl:attribute name="type"> 170cdf0e10cSrcweir <xsl:value-of select="$type"/> 171cdf0e10cSrcweir </xsl:attribute> 172cdf0e10cSrcweir <xsl:attribute name="size"> 173cdf0e10cSrcweir <xsl:value-of select="$size"/> 174cdf0e10cSrcweir </xsl:attribute> 175cdf0e10cSrcweir <xsl:for-each select="UML:ModelElement.stereotype/UML:Stereotype[@xmi.idref='array']"> 176cdf0e10cSrcweir <xsl:attribute name="array-count"> 177cdf0e10cSrcweir <xsl:value-of select="$arraycount"/> 178cdf0e10cSrcweir </xsl:attribute> 179cdf0e10cSrcweir </xsl:for-each> 180cdf0e10cSrcweir <xsl:attribute name="token"> 181cdf0e10cSrcweir <xsl:call-template name="gettaggedvalue"> 182cdf0e10cSrcweir <xsl:with-param name="name">attrid</xsl:with-param> 183cdf0e10cSrcweir </xsl:call-template> 184cdf0e10cSrcweir </xsl:attribute> 185cdf0e10cSrcweir </attribute> 186cdf0e10cSrcweir </xsl:when> 187cdf0e10cSrcweir <xsl:otherwise> 188cdf0e10cSrcweir <xsl:variable name="attrswithoffset"> 189cdf0e10cSrcweir <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]]"> 190cdf0e10cSrcweir <xsl:sort select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='shift']/UML:TaggedValue.dataValue" data-type="number" order="descending"/> 191cdf0e10cSrcweir <xsl:copy-of select="."/> 192cdf0e10cSrcweir </xsl:for-each> 193cdf0e10cSrcweir </xsl:variable> 194cdf0e10cSrcweir <xsl:text>
</xsl:text> 195cdf0e10cSrcweir <xsl:if test="@name = exslt:node-set($attrswithoffset)/UML:Attribute[1]/@name"> 196cdf0e10cSrcweir <bitfield> 197cdf0e10cSrcweir <xsl:attribute name="size"> 198cdf0e10cSrcweir <xsl:value-of select="$size"/> 199cdf0e10cSrcweir </xsl:attribute> 200cdf0e10cSrcweir <xsl:attribute name="type"> 201cdf0e10cSrcweir <xsl:value-of select="$type"/> 202cdf0e10cSrcweir </xsl:attribute> 203cdf0e10cSrcweir <xsl:variable name="allbits" select="8 * $size"/> 204cdf0e10cSrcweir <xsl:for-each select="exslt:node-set($attrswithoffset)/UML:Attribute"> 205cdf0e10cSrcweir <xsl:variable name="lastshift"> 206cdf0e10cSrcweir <xsl:choose> 207cdf0e10cSrcweir <xsl:when test="count(preceding-sibling::UML:Attribute) = 0"> 208cdf0e10cSrcweir <xsl:value-of select="$allbits"/> 209cdf0e10cSrcweir </xsl:when> 210cdf0e10cSrcweir <xsl:otherwise> 211cdf0e10cSrcweir <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"/> 212cdf0e10cSrcweir </xsl:otherwise> 213cdf0e10cSrcweir </xsl:choose> 214cdf0e10cSrcweir </xsl:variable> 215cdf0e10cSrcweir <xsl:variable name="bits" select="$lastshift - UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='shift']/UML:TaggedValue.dataValue"/> 216cdf0e10cSrcweir <xsl:call-template name="bits"> 217cdf0e10cSrcweir <xsl:with-param name="bits" select="$bits"/> 218cdf0e10cSrcweir </xsl:call-template> 219cdf0e10cSrcweir </xsl:for-each> 220cdf0e10cSrcweir </bitfield> 221cdf0e10cSrcweir </xsl:if> 222cdf0e10cSrcweir </xsl:otherwise> 223cdf0e10cSrcweir </xsl:choose> 224cdf0e10cSrcweir </xsl:template> 225cdf0e10cSrcweir 226cdf0e10cSrcweir <xsl:template match="UML:Operation" mode="ww8resource"> 227cdf0e10cSrcweir <operation> 228cdf0e10cSrcweir <xsl:attribute name="name"> 229cdf0e10cSrcweir <xsl:value-of select="@name"/> 230cdf0e10cSrcweir </xsl:attribute> 231cdf0e10cSrcweir <xsl:attribute name="type"> 232cdf0e10cSrcweir <xsl:for-each select="UML:BehavioralFeature.parameter/UML:Parameter[@kind='return']"> 233cdf0e10cSrcweir <xsl:value-of select="UML:Parameter.type/UML:Class/@xmi.idref"/> 234cdf0e10cSrcweir </xsl:for-each> 235cdf0e10cSrcweir </xsl:attribute> 236cdf0e10cSrcweir <xsl:attribute name="token"> 237cdf0e10cSrcweir <xsl:call-template name="gettaggedvalue"> 238cdf0e10cSrcweir <xsl:with-param name="name">opid</xsl:with-param> 239cdf0e10cSrcweir </xsl:call-template> 240cdf0e10cSrcweir </xsl:attribute> 241cdf0e10cSrcweir <xsl:for-each select="UML:ModelElement.stereotype"> 242cdf0e10cSrcweir <stereotype> 243cdf0e10cSrcweir <xsl:value-of select="UML:Stereotype/@xmi.idref"/> 244cdf0e10cSrcweir </stereotype> 245cdf0e10cSrcweir </xsl:for-each> 246cdf0e10cSrcweir </operation> 247cdf0e10cSrcweir </xsl:template> 248cdf0e10cSrcweir 249cdf0e10cSrcweir <xsl:template match="*" mode="ww8resources"> 250cdf0e10cSrcweir <xsl:apply-templates select="*" mode="ww8resources"/> 251cdf0e10cSrcweir </xsl:template> 252cdf0e10cSrcweir 253cdf0e10cSrcweir <xsl:template name="sprms"> 254cdf0e10cSrcweir <xsl:for-each select="UML:Namespace.ownedElement/UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8sprm']"> 255cdf0e10cSrcweir <xsl:sort select="@xmi.id"/> 256cdf0e10cSrcweir <sprm> 257cdf0e10cSrcweir <xsl:attribute name="name"> 258cdf0e10cSrcweir <xsl:value-of select="@xmi.id"/> 259cdf0e10cSrcweir </xsl:attribute> 260cdf0e10cSrcweir <xsl:attribute name="code"> 261cdf0e10cSrcweir <xsl:call-template name="gettaggedvalue"> 262cdf0e10cSrcweir <xsl:with-param name="name">sprmcode</xsl:with-param> 263cdf0e10cSrcweir </xsl:call-template> 264cdf0e10cSrcweir </xsl:attribute> 265cdf0e10cSrcweir <xsl:attribute name="kind"> 266cdf0e10cSrcweir <xsl:call-template name="gettaggedvalue"> 267cdf0e10cSrcweir <xsl:with-param name="name">kind</xsl:with-param> 268cdf0e10cSrcweir </xsl:call-template> 269cdf0e10cSrcweir </xsl:attribute> 270cdf0e10cSrcweir <xsl:attribute name="token"> 271cdf0e10cSrcweir <xsl:call-template name="gettaggedvalue"> 272cdf0e10cSrcweir <xsl:with-param name="name">sprmid</xsl:with-param> 273cdf0e10cSrcweir </xsl:call-template> 274cdf0e10cSrcweir </xsl:attribute> 275cdf0e10cSrcweir <xsl:if test="UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8resource'"> 276cdf0e10cSrcweir <xsl:apply-templates select=".//UML:Attribute|.//UML:Operation" mode="ww8resource"/> 277cdf0e10cSrcweir </xsl:if> 278cdf0e10cSrcweir </sprm> 279cdf0e10cSrcweir </xsl:for-each> 280cdf0e10cSrcweir </xsl:template> 281cdf0e10cSrcweir 282*8eb6fccdSAndrew Rist</xsl:stylesheet> 283