blob: ba4fec46cb7d5acefbe8b65bd56541cb134865ea [file] [log] [blame]
<%@ jet package="org.eclipse.bpmn2.tools.xsltFromEcore.jet" class="XMLToXMI" imports="org.eclipse.emf.ecore.*" skeleton="generator.skeleton"%>
<% JetInput input = (JetInput) argument; %>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xmi="http://schema.omg.org/spec/XMI"
xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
xmlns:bpmn2xmi="http://www.omg.org/spec/BPMN/20100524/MODEL-XMI"
xmlns:bpmndixmi="http://www.omg.org/spec/BPMN/20100524/DI-XMI"
xmlns:dixmi="http://www.omg.org/spec/DD/20100524/DI-XMI"
xmlns:dcxmi="http://www.omg.org/spec/DD/20100524/DC-XMI">
<xsl:output method="xml" indent="yes"/>
<xsl:template name="concat">
<xsl:param name="nodeset" />
<xsl:variable name="buffer">
<xsl:for-each select="$nodeset">
<xsl:value-of select="concat(., ' ')"/>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="normalize-space($buffer)"/>
</xsl:template>
<xsl:template match="/">
<xmi:XMI xmi:version="2.0">
<xsl:for-each select="bpmn2:definitions">
<bpmn2xmi:Definitions>
<xsl:call-template name="DefinitionsTemplate" />
</bpmn2xmi:Definitions>
</xsl:for-each>
</xmi:XMI>
</xsl:template>
<xsl:template name="EObjectTemplate">
<!-- TODO: Add your copy logic for extension attributes-->
</xsl:template>
<% for(EClass c: input.getClasses()) { %>
<xsl:template name="<%=c.getName()%>Template">
<%for(EClass superClass: c.getESuperTypes()) {%>
<xsl:call-template name="<%=superClass.getName()%>Template"/>
<%}%>
<% for(EStructuralFeature feature: input.getAllFeatureThatAreAttributesInXMI(c)) { %>
<xsl:if test="<%=input.getXPathForXml(feature)%>"><xsl:attribute name="<%=feature.getName() %>"> <xsl:value-of select="<%=input.getXPathForXml(feature) %>" /> </xsl:attribute></xsl:if>
<% } %>
<% for(EStructuralFeature feature: input.getAllFeatureThatAreReferences(c)) { %>
<xsl:if test="<%=input.getXPathForXml(feature)%>"><xsl:attribute name="<%=feature.getName() %>"><xsl:call-template name="concat"><xsl:with-param name="nodeset" select="<%=input.getXPathForXml(feature)%>"/></xsl:call-template></xsl:attribute></xsl:if>
<% }
for(EStructuralFeature feature: input.getAllOtherFeaturesInXMI(c)) { %>
<xsl:for-each select="<%=input.getSubFeaturesXPath(feature)%>">
<%if(input.hasSubFeatures(feature)){ %>
<xsl:choose>
<%for(EStructuralFeature subFeature: input.getAllSubFeatures(feature)) {%>
<xsl:when test="self::<%=input.getXPathForXml(subFeature)%>">
<<%=feature.getName()%> xmi:type="<%=input.getPrefix(subFeature)%>xmi:<%=subFeature.getEType().getName()%>">
<xsl:call-template name="<%=subFeature.getEType().getName()%>Template" />
</<%=feature.getName()%>>
</xsl:when >
<% }%>
</xsl:choose>
<%} else {%>
<<%=feature.getName()%> xmi:type="<%=input.getPrefix(feature)%>xmi:<%=feature.getEType().getName()%>">
<xsl:call-template name="<%=feature.getEType().getName()%>Template" />
</<%=feature.getName()%>>
<%}%>
</xsl:for-each>
<% }%>
</xsl:template>
<% }%>
</xsl:stylesheet>