Author: schorlet Date: 2008-12-09 09:49:14 +0000 (Tue, 09 Dec 2008) New Revision: 387 Modified: lutingenerator/trunk/src/main/xsl/xmi1.2ToObjectModel.xsl Log: Correction bug 1737 Prise en compte du MetaModel UML dans les fichiers XMI. Modified: lutingenerator/trunk/src/main/xsl/xmi1.2ToObjectModel.xsl =================================================================== --- lutingenerator/trunk/src/main/xsl/xmi1.2ToObjectModel.xsl 2008-12-08 11:37:55 UTC (rev 386) +++ lutingenerator/trunk/src/main/xsl/xmi1.2ToObjectModel.xsl 2008-12-09 09:49:14 UTC (rev 387) @@ -562,37 +562,12 @@ </xsl:attribute> </xsl:if> - <xsl:variable name="id"> - <xsl:value-of select="concat(UML:StructuralFeature.type/*/@xmi.idref,UML2:TypedElement.type/*/@xmi.idref)"/> - </xsl:variable> -<!-- - <xsl:if test="concat($id,'none')='none'"> - <xsl:variable name="id"> - <xsl:value-of select="UML:StructuralFeature.type/*/@xmi.idref"/> - </xsl:variable> - </xsl:if> ---> - <xsl:choose> - <xsl:when test="$id != ''"> - <xsl:for-each select="/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/descendant::*[@xmi.id = $id]"> - <xsl:attribute name="type"> - <xsl:call-template name="packagePathOfWithDot"/> - <xsl:value-of select="@name"/> - </xsl:attribute> - </xsl:for-each> - </xsl:when> - <xsl:when test="UML:StructuralFeature.type/UML:*/@href != ''"> - <xsl:variable name="external-url" select="substring-before(UML:StructuralFeature.type/UML:*/@href, '#')"/> - <xsl:variable name="external-id" select="substring-after(UML:StructuralFeature.type/UML:*/@href, '#')"/> - <xsl:for-each select="document($external-url)//descendant::*[@xmi.id=$external-id]"> - <xsl:attribute name="type"> - <xsl:call-template name="packagePathOfWithDot"/> - <xsl:value-of select="@name"/> - </xsl:attribute> - </xsl:for-each> - </xsl:when> - </xsl:choose> - + <xsl:attribute name="type"> + <xsl:call-template name="fullClassName"> + <xsl:with-param name="childpath">UML:StructuralFeature.type</xsl:with-param> + </xsl:call-template> + </xsl:attribute> + <xsl:if test="UML:StructuralFeature.multiplicity"> <xsl:variable name="minMultiplicity"> <xsl:value-of select="UML:StructuralFeature.multiplicity/UML:Multiplicity/UML:Multiplicity.range/UML:MultiplicityRange/@lower"/> @@ -706,22 +681,11 @@ <xsl:value-of select="@name"/> </xsl:attribute> - <xsl:variable name="id"> - <xsl:value-of select="concat(UML:Parameter.type/*/@xmi.idref,UML2:TypedElement.type/*/@xmi.idref)"/> - </xsl:variable> -<!-- - <xsl:if test="concat($id,'none')='none'"> - <xsl:variable name="id"> - <xsl:value-of select="UML:Parameter.type/*/@xmi.idref"/> - </xsl:variable> - </xsl:if> ---> - <xsl:for-each select="/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/descendant::*[@xmi.id = $id]"> <xsl:attribute name="type"> - <xsl:call-template name="packagePathOfWithDot"/> - <xsl:value-of select="@name"/> + <xsl:call-template name="fullClassName"> + <xsl:with-param name="childpath">UML:Parameter.type</xsl:with-param> + </xsl:call-template> </xsl:attribute> - </xsl:for-each> </xsl:element> </xsl:template> @@ -733,19 +697,12 @@ <xsl:variable name="id"> <xsl:value-of select="concat(UML:Parameter.type/*/@xmi.idref,UML2:TypedElement.type/*/@xmi.idref)"/> </xsl:variable> -<!-- - <xsl:if test="concat($id,'none')='none'"> - <xsl:variable name="id"> - <xsl:value-of select="UML:Parameter.type/*/@xmi.idref"/> - </xsl:variable> - </xsl:if> ---> - <xsl:for-each select="/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/descendant::*[@xmi.id = $id]"> + <xsl:attribute name="type"> - <xsl:call-template name="packagePathOfWithDot"/> - <xsl:value-of select="@name"/> + <xsl:call-template name="fullClassName"> + <xsl:with-param name="childpath">UML:Parameter.type</xsl:with-param> + </xsl:call-template> </xsl:attribute> - </xsl:for-each> </xsl:element> </xsl:template> @@ -807,19 +764,9 @@ <xsl:value-of select="UML:TaggedValue.type/UML:TagDefinition/@xmi.idref"/> </xsl:variable> <xsl:variable name="tagName"> - <!-- see bug http://lists.labs.libre-entreprise.org/pipermail/lutingenerator-devel/2007-J... - les UML:TagDefinition n'apparaisent pas au meme endroit (a voir pk) - <xsl:value-of select="//UML:TagDefinition[@xmi.id = $tagId]/@name"/>--> - <xsl:choose> - <xsl:when test="$tagId != '' and /XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:TagDefinition[@xmi.id = $tagId]"> - <xsl:value-of select="/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:TagDefinition[@xmi.id = $tagId]/@name"/> - </xsl:when> - <xsl:when test="UML:TaggedValue.type/UML:TagDefinition/@href != ''"> - <xsl:variable name="external-url" select="substring-before(UML:TaggedValue.type/UML:TagDefinition/@href, '#')"/> - <xsl:variable name="external-id" select="substring-after(UML:TaggedValue.type/UML:TagDefinition/@href, '#')"/> - <xsl:value-of select="document($external-url)//descendant::*[@xmi.id=$external-id]/@name"/> - </xsl:when> - </xsl:choose> + <xsl:call-template name="fullClassName"> + <xsl:with-param name="childpath">UML:TaggedValue.type</xsl:with-param> + </xsl:call-template> </xsl:variable> <xsl:element name="tagValue"> <xsl:attribute name="name"> @@ -832,6 +779,33 @@ </xsl:template> + <xsl:template name="fullClassName"> + <xsl:param name="childpath"/> + + <xsl:if test="count(child::*[name() = $childpath]) = 1"> + <xsl:choose> + <xsl:when test="child::*[name() = $childpath]/*/@xmi.idref"> + <xsl:variable name="id" select="child::*[name() = $childpath]/*/@xmi.idref"/> + <xsl:for-each select="/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/descendant::*[@xmi.id = $id]"> + <xsl:call-template name="packagePathOfWithDot"/> + <xsl:value-of select="@name"/> + </xsl:for-each> + </xsl:when> + <xsl:when test="child::*[name() = $childpath]/*/@href"> + <xsl:variable name="href" select="child::*[name() = $childpath]/*/@href"/> + <xsl:variable name="external-url" select="substring-before($href, '#')"/> + <xsl:variable name="external-id" select="substring-after($href, '#')"/> + <xsl:for-each select="document($external-url)//descendant::*[@xmi.id=$external-id]"> + <xsl:call-template name="packagePathOfWithDot"/> + <xsl:value-of select="@name"/> + </xsl:for-each> + </xsl:when> + <xsl:otherwise> + </xsl:otherwise> + </xsl:choose> + </xsl:if> + </xsl:template> + <xsl:template name="packagePathOfWithDot"> <xsl:if test="name()!='UML:DataType'"> <xsl:for-each select="ancestor::UML:Package">