Author: schorlet Date: 2009-02-03 13:36:59 +0000 (Tue, 03 Feb 2009) New Revision: 412 Added: lutingenerator/trunk/src/main/xsl/xmi2.2ToObjectModel.xsl Log: Fichier XSL de transformation de XMI 2.1 en objectmodel Added: lutingenerator/trunk/src/main/xsl/xmi2.2ToObjectModel.xsl =================================================================== --- lutingenerator/trunk/src/main/xsl/xmi2.2ToObjectModel.xsl (rev 0) +++ lutingenerator/trunk/src/main/xsl/xmi2.2ToObjectModel.xsl 2009-02-03 13:36:59 UTC (rev 412) @@ -0,0 +1,135 @@ +<xsl:stylesheet version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xalan="http://xml.apache.org/xslt" + xmlns:extensions="http://www.codelutin.com/XSLTExtensions" + xmlns:redirect="http://xml.apache.org/xalan/redirect" + extension-element-prefixes="extensions redirect" + xmlns="http://www.codelutin.org/lutingenerator/objectModel" + xmlns:packageValidator="xalan://org.codelutin.generator.PackageValidator" + xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" + xmlns:uml="http://www.eclipse.org/uml2/2.1.0/UML"> + + <xsl:output method="xml" encoding="UTF-8" indent="yes" + xalan:indent-amount="2" /> + + <!-- processing entry point. We'll process everything from that root package path. Everything else is ignored --> + <xsl:param name="fullPackagePath" /> + <xsl:param name="extraPackages" /> + + <!-- + . Matching templates + --> + + <xsl:template match="/xmi:XMI/uml:Model"> + <xsl:element name="objectModel"> + <xsl:attribute name="name"> + <xsl:value-of select="@name" /> + </xsl:attribute> + + <xsl:apply-templates> + <!-- TODO: replace(@name, '::', '.') --> + <xsl:with-param name="parentLocalPackageName" + select="@name" /> + </xsl:apply-templates> + </xsl:element> + </xsl:template> + + <xsl:template match="text()|attribute" /> + + <xsl:template match="*"> + <xsl:param name="parentLocalPackageName" /> + <xsl:apply-templates> + <xsl:with-param name="parentLocalPackageName"> + <xsl:value-of select="$parentLocalPackageName" /> + </xsl:with-param> + </xsl:apply-templates> + </xsl:template> + + + <xsl:template match="packagedElement[@xmi:type='uml:Package']"> + <xsl:param name="parentLocalPackageName" /> + + <xsl:variable name="packageName"> + <xsl:value-of select="@name" /> + </xsl:variable> + + <xsl:variable name="localPackageName"> + <xsl:value-of + select="concat($parentLocalPackageName, '.', $packageName)" /> + </xsl:variable> + + <xsl:apply-templates> + <xsl:with-param name="parentLocalPackageName"> + <xsl:value-of select="$localPackageName" /> + </xsl:with-param> + </xsl:apply-templates> + </xsl:template> + + <xsl:template match="packagedElement[@xmi:type='uml:Class']"> + <xsl:param name="parentLocalPackageName" /> + + <xsl:variable name="classId"> + <xsl:value-of select="@xmi.id" /> + </xsl:variable> + + <xsl:element name="class"> + <!-- class properties --> + <xsl:attribute name="name"> + <xsl:value-of select="@name" /> + </xsl:attribute> + + <xsl:attribute name="package"> + <xsl:value-of select="$parentLocalPackageName" /> + </xsl:attribute> + + <!-- stereotypes --> + <xsl:for-each + select="/xmi:XMI/child::*[@base_Class = current()/@xmi:id]"> + <xsl:element name="stereotype"> + <xsl:attribute name="name"> + <xsl:value-of select="local-name()" /> + </xsl:attribute> + </xsl:element> + </xsl:for-each> + + <!-- class attributes --> + <xsl:apply-templates select="ownedAttribute" /> + </xsl:element> + </xsl:template> + + <xsl:template match="ownedAttribute"> + + <xsl:element name="attribute"> + <xsl:attribute name="name"> + <xsl:value-of select="@name" /> + </xsl:attribute> + + <xsl:attribute name="type"> + <xsl:call-template name="fullClassName"> + <xsl:with-param name="childpath">type</xsl:with-param> + </xsl:call-template> + </xsl:attribute> + </xsl:element> + </xsl:template> + + <!-- + . Named templates + --> + + <xsl:template name="fullClassName"> + <xsl:param name="childpath" /> + <xsl:variable name="child" + select="child::*[name() = $childpath]" /> + + <xsl:if test="$child"> + <xsl:choose> + <xsl:when + test="$child/@xmi:type = 'uml:PrimitiveType'"> + <xsl:value-of + select="substring-after($child/@href, '#')" /> + </xsl:when> + </xsl:choose> + </xsl:if> + </xsl:template> + +</xsl:stylesheet>