<xsl:stylesheet version = '1.0' 
     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
     xmlns:UML='org.omg.xmi.namespace.UML'>
<xsl:output method="text"/>

<xsl:template match="/">
	foldersTree = gFld("<I>Navigation Map</I>", "", "green")
	<xsl:apply-templates select="//UML:StateMachine.top"/>
</xsl:template>

<xsl:template match="UML:StateMachine.top">
	<xsl:apply-templates select="UML:CompositeState/UML:CompositeState.subvertex/UML:Pseudostate[@kind='initial']">
		<xsl:with-param name="levelp"><xsl:value-of select="0"/></xsl:with-param>
	</xsl:apply-templates>
	
	<xsl:apply-templates select="UML:CompositeState/UML:CompositeState.subvertex/UML:CompositeState | UML:CompositeState/UML:CompositeState.subvertex/UML:SimpleState"/>
	
	<xsl:apply-templates select="UML:CompositeState/UML:CompositeState.subvertex/UML:FinalState">
		<xsl:with-param name="levelp"><xsl:value-of select="0"/></xsl:with-param>
	</xsl:apply-templates>
</xsl:template>

<xsl:template match="UML:CompositeState">
	<xsl:variable name="level" select="count(ancestor::UML:CompositeState)-1"/>
	<xsl:variable name="fldname" select="@name"/>
	<xsl:variable name="stateid" select="@xmi.id"/>
	<xsl:variable name="condC" select="UML:State.entry/UML:CallAction/UML:Action.script/UML:ActionExpression/@body"/>
	<xsl:variable name="region" select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=//UML:TagDefinition[@name='Region']/@xmi.id]/@dataValue"/>
	
	<xsl:variable name="contentid" select="//UML:TagDefinition[@name='Content']/@xmi.id"/>
	
	<xsl:variable name="lnksrc" select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref= $contentid]/@dataValue"/>
		
	
	
	<xsl:choose>
	<xsl:when test="$condC">
	<xsl:text>if (</xsl:text><xsl:value-of select="$condC"/>
	<xsl:text>) {</xsl:text>
	
	<xsl:if test="$fldname!='state_machine_top'">
	<xsl:choose>
		<xsl:when test="$region='True'">
			<xsl:choose>
			       <xsl:when test="$level=0">
					<xsl:value-of select="concat('aux', $level+1)"/> = insFld(foldersTree, gFldConc("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
				</xsl:when>
				<xsl:otherwise>
					<xsl:value-of select="concat('aux', $level+1)"/> = insFld(<xsl:value-of select="concat('aux', $level)"/>, gFldConc("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
				</xsl:otherwise>
			</xsl:choose>
		</xsl:when>
		<xsl:otherwise>
			<xsl:choose>
				<xsl:when test="$level=0">
					<xsl:value-of select="concat('aux', $level+1)"/> = insFld(foldersTree, gFld("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
				</xsl:when>
				<xsl:otherwise>
					<xsl:value-of select="concat('aux', $level+1)"/> = insFld(<xsl:value-of select="concat('aux', $level)"/>, gFld("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
				</xsl:otherwise>
			</xsl:choose>
		</xsl:otherwise>
	</xsl:choose>
	</xsl:if>
	
	<xsl:text>}
	</xsl:text>
	<xsl:text>else{
	
	</xsl:text>
	<xsl:if test="$fldname!='state_machine_top'">
		<xsl:choose>
			<xsl:when test="$region='True'">
				<xsl:choose>
				       <xsl:when test="$level=0">
						<xsl:value-of select="concat('aux', $level+1)"/> = insFld(foldersTree, gFldConc("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "red", "<xsl:value-of select="$stateid"/>"))
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="concat('aux', $level+1)"/> = insFld(<xsl:value-of select="concat('aux', $level)"/>, gFldConc("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "red", "<xsl:value-of select="$stateid"/>"))
					</xsl:otherwise>
				</xsl:choose>
			</xsl:when>
			<xsl:otherwise>
				<xsl:choose>
					<xsl:when test="$level=0">
						<xsl:value-of select="concat('aux', $level+1)"/> = insFld(foldersTree, gFld("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "red", "<xsl:value-of select="$stateid"/>"))
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="concat('aux', $level+1)"/> = insFld(<xsl:value-of select="concat('aux', $level)"/>, gFld("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "red", "<xsl:value-of select="$stateid"/>"))
					</xsl:otherwise>
				</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:if>
	<xsl:text>}</xsl:text>
	</xsl:when>
	<xsl:otherwise>
		<xsl:if test="$fldname!='state_machine_top'">
		<xsl:choose>
			<xsl:when test="$region='True'">
				<xsl:choose>
				       <xsl:when test="$level=0">
						<xsl:value-of select="concat('aux', $level+1)"/> = insFld(foldersTree, gFldConc("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="concat('aux', $level+1)"/> = insFld(<xsl:value-of select="concat('aux', $level)"/>, gFldConc("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
					</xsl:otherwise>
				</xsl:choose>
			</xsl:when>
			<xsl:otherwise>
				<xsl:choose>
					<xsl:when test="$level=0">
						<xsl:value-of select="concat('aux', $level+1)"/> = insFld(foldersTree, gFld("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="concat('aux', $level+1)"/> = insFld(<xsl:value-of select="concat('aux', $level)"/>, gFld("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
					</xsl:otherwise>
				</xsl:choose>
		</xsl:otherwise>
		</xsl:choose>
		</xsl:if>
	</xsl:otherwise>
	
	</xsl:choose>
	<xsl:apply-templates select="UML:StateVertex.outgoing/UML:Transition" mode="state">
			<xsl:with-param name="levelp"><xsl:value-of select="$level+1"/></xsl:with-param>
			<xsl:with-param name="stateidp"><xsl:value-of select="$stateid"/></xsl:with-param>
		</xsl:apply-templates>
	
	<xsl:apply-templates select="UML:CompositeState.subvertex/UML:Pseudostate[@kind='initial']">
	     		<xsl:with-param name="levelp"><xsl:value-of select="$level+1"/></xsl:with-param>
     	</xsl:apply-templates>
     	
	<xsl:apply-templates select="UML:CompositeState.subvertex/UML:CompositeState | UML:CompositeState.subvertex/UML:SimpleState">
	     		<xsl:with-param name="levelp"><xsl:value-of select="$level"/></xsl:with-param>
     	</xsl:apply-templates>
     	<xsl:apply-templates select="UML:CompositeState.subvertex/UML:FinalState">
		     		<xsl:with-param name="levelp"><xsl:value-of select="$level+1"/></xsl:with-param>
     	</xsl:apply-templates>
</xsl:template>	     


<xsl:template match="UML:SimpleState">
	<xsl:variable name="level" select="count(ancestor::UML:CompositeState)-1"/>
	<xsl:variable name="fldname" select="@name"/>
	<xsl:variable name="stateid" select="@xmi.id"/>
	<xsl:variable name="cond" select="UML:State.entry/UML:CallAction/UML:Action.script/UML:ActionExpression/@body"/>
	
	<xsl:variable name="lnksrc" select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=//UML:TagDefinition[@name='Content']/@xmi.id]/@dataValue"/>
	
	<xsl:choose>
	<xsl:when test="$cond">
	<xsl:text>if (</xsl:text><xsl:value-of select="$cond"/>
	<xsl:text>) {</xsl:text>
	
	
	<xsl:choose>
		<xsl:when test="$level=0">
			<xsl:value-of select="concat('aux', $level+1)"/> = insFld(foldersTree, gFldDoc("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="concat('aux', $level+1)"/> = insFld(<xsl:value-of select="concat('aux', $level)"/>, gFldDoc("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
		</xsl:otherwise>
	</xsl:choose>
	<xsl:text>}
	</xsl:text>
	<xsl:text>else{
	
	</xsl:text>
	<xsl:choose>
			<xsl:when test="$level=0">
				<xsl:value-of select="concat('aux', $level+1)"/> = insFld(foldersTree, gFldDoc("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "red", "<xsl:value-of select="$stateid"/>"))
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="concat('aux', $level+1)"/> = insFld(<xsl:value-of select="concat('aux', $level)"/>, gFldDoc("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "red", "<xsl:value-of select="$stateid"/>"))
			</xsl:otherwise>
	</xsl:choose>
	
	<xsl:text>}</xsl:text>
	
	</xsl:when>
	<xsl:otherwise>
	<xsl:choose>
			<xsl:when test="$level=0">
				<xsl:value-of select="concat('aux', $level+1)"/> = insFld(foldersTree, gFldDoc("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="concat('aux', $level+1)"/> = insFld(<xsl:value-of select="concat('aux', $level)"/>, gFldDoc("<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
			</xsl:otherwise>
	</xsl:choose>
	</xsl:otherwise>
	
	</xsl:choose>
	<xsl:apply-templates select="UML:StateVertex.outgoing/UML:Transition" mode="state">
				<xsl:with-param name="levelp"><xsl:value-of select="$level+1"/></xsl:with-param>
				<xsl:with-param name="stateidp"><xsl:value-of select="$stateid"/></xsl:with-param>
	</xsl:apply-templates>
</xsl:template>


<xsl:template match="UML:Transition" mode="state">
	<xsl:param name="levelp"/>
	<xsl:param name="stateidp"/>
	
	<xsl:variable name="id" select="@xmi.idref"/>
	
	
	
	<xsl:apply-templates select="//UML:Transition[@xmi.id=$id]" mode="transition">
				<xsl:with-param name="levelp"><xsl:value-of select="$levelp"/></xsl:with-param>
				<xsl:with-param name="stateidp"><xsl:value-of select="$stateidp"/></xsl:with-param>
	</xsl:apply-templates>
</xsl:template>

<xsl:template match="UML:Transition" mode="transition">
	<xsl:param name="levelp"/>
	<xsl:param name="stateidp"/>
	
	<xsl:variable name="transnamep" select="@name"/>
	
	<xsl:variable name="fldname" select="@name"/>
	<xsl:variable name="pseudostateid" select="UML:Transition.target/UML:Pseudostate/@xmi.idref"/>
	<xsl:variable name="compositestateid" select="UML:Transition.target/UML:CompositeState/@xmi.idref"/>
	<xsl:variable name="simplestateid" select="UML:Transition.target/UML:SimpleState/@xmi.idref"/>
	<xsl:variable name="finalstateid" select="UML:Transition.target/UML:FinalState/@xmi.idref"/>
	
	
	<xsl:apply-templates select="//UML:Pseudostate[@xmi.id=$pseudostateid]" mode="transition">
				<xsl:with-param name="levelp"><xsl:value-of select="$levelp"/></xsl:with-param>
				<xsl:with-param name="namep"><xsl:value-of select="$fldname"/></xsl:with-param>
				<xsl:with-param name="stateidp"><xsl:value-of select="$stateidp"/></xsl:with-param>
				<xsl:with-param name="transnamep"><xsl:value-of select="$transnamep"/></xsl:with-param>
	</xsl:apply-templates>
	<xsl:apply-templates select="//UML:CompositeState[@xmi.id=$compositestateid]" mode="transition">
					<xsl:with-param name="levelp"><xsl:value-of select="$levelp"/></xsl:with-param>
					<xsl:with-param name="namep"><xsl:value-of select="$fldname"/></xsl:with-param>
					<xsl:with-param name="stateidp"><xsl:value-of select="$stateidp"/></xsl:with-param>
					<xsl:with-param name="transnamep"><xsl:value-of select="$transnamep"/></xsl:with-param>
	</xsl:apply-templates>
	<xsl:apply-templates select="//UML:SimpleState[@xmi.id=$simplestateid]" mode="transition">
					<xsl:with-param name="levelp"><xsl:value-of select="$levelp"/></xsl:with-param>
					<xsl:with-param name="namep"><xsl:value-of select="$fldname"/></xsl:with-param>
					<xsl:with-param name="stateidp"><xsl:value-of select="$stateidp"/></xsl:with-param>
					<xsl:with-param name="transnamep"><xsl:value-of select="$transnamep"/></xsl:with-param>
	</xsl:apply-templates>
	<xsl:apply-templates select="//UML:FinalState[@xmi.id=$finalstateid]" mode="transition">
					<xsl:with-param name="levelp"><xsl:value-of select="$levelp"/></xsl:with-param>
					<xsl:with-param name="namep"><xsl:value-of select="$fldname"/></xsl:with-param>
					<xsl:with-param name="stateidp"><xsl:value-of select="$stateidp"/></xsl:with-param>
					<xsl:with-param name="transnamep"><xsl:value-of select="$transnamep"/></xsl:with-param>
	</xsl:apply-templates>
</xsl:template>



<xsl:template match="UML:Pseudostate">
	<xsl:param name="levelp"/>
	<xsl:param name="transnamep"/>
	
	<xsl:variable name="level" select="count(ancestor::UML:CompositeState)-1"/>
	<xsl:variable name="fldname" select="@name"/>
	<xsl:variable name="stateid" select="@xmi.id"/>
	<xsl:variable name="condC" select="UML:State.entry/UML:CallAction/UML:Action.script/UML:ActionExpression/@body"/>
	<xsl:variable name="region" select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=//UML:TagDefinition[@name='Region']/@xmi.id]/@dataValue"/>
		
	<xsl:variable name="lnksrc" select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=//UML:TagDefinition[@name='Content']/@xmi.id]/@dataValue"/>
			
	<xsl:choose>	
	<xsl:when test="$condC">
		<xsl:text>if (</xsl:text><xsl:value-of select="$condC"/>
		<xsl:text>) {</xsl:text>
		<xsl:if test="$fldname!='state_machine_top'">
		<xsl:choose>
			<xsl:when test="$region='True'">
				<xsl:choose>
				       <xsl:when test="$levelp=0">
						<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(foldersTree, gFldConc("<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'"><xsl:text>/</xsl:text><xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>")
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(<xsl:value-of select="concat('aux', $level)"/>, gFldConc("<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
					</xsl:otherwise>
				</xsl:choose>
			</xsl:when>
			<xsl:otherwise>
				<xsl:choose>
					<xsl:when test="$levelp=0">
						<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(foldersTree, gFld("<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(<xsl:value-of select="concat('aux', $levelp)"/>, gFld("<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
					</xsl:otherwise>
				</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
		</xsl:if>
		<xsl:text>}</xsl:text>
		<xsl:text>else{
		
		</xsl:text>
		<xsl:if test="$fldname!='state_machine_top'">
				<xsl:choose>
					<xsl:when test="$region='True'">
						<xsl:choose>
						       <xsl:when test="$level=0">
								<xsl:value-of select="concat('aux', $level+1)"/> = insFld(foldersTree, gFldConc("<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "red", "<xsl:value-of select="$stateid"/>"))
							</xsl:when>
							<xsl:otherwise>
								<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(<xsl:value-of select="concat('aux', $levelp)"/>, gFldConc("<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "red", "<xsl:value-of select="$stateid"/>"))
							</xsl:otherwise>
						</xsl:choose>
					</xsl:when>
					<xsl:otherwise>
						<xsl:choose>
							<xsl:when test="$level=0">
								<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(foldersTree, gFld("<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "red", "<xsl:value-of select="$stateid"/>"))
							</xsl:when>
							<xsl:otherwise>
								<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(<xsl:value-of select="concat('aux', $levelp)"/>, gFld("<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "red", "<xsl:value-of select="$stateid"/>"))
							</xsl:otherwise>
						</xsl:choose>
					</xsl:otherwise>
				</xsl:choose>
				</xsl:if>
			<xsl:text>}
			</xsl:text>
			</xsl:when>
			<xsl:otherwise>
			<xsl:if test="$fldname!='state_machine_top'">
				<xsl:choose>
					<xsl:when test="$region='True'">
						<xsl:choose>
							<xsl:when test="$levelp=0">
								<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(foldersTree, gFldConc("<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
							</xsl:when>
							<xsl:otherwise>
								<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(<xsl:value-of select="concat('aux', $levelp)"/>, gFldConc("<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
							</xsl:otherwise>
						</xsl:choose>
					</xsl:when>
					<xsl:otherwise>
						<xsl:choose>
							<xsl:when test="$level=0">
								<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(foldersTree, gFld("<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
							</xsl:when>
							<xsl:otherwise>
								<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(<xsl:value-of select="concat('aux', $levelp)"/>, gFld("<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
										</xsl:otherwise>
						</xsl:choose>
					</xsl:otherwise>
				</xsl:choose>	
			</xsl:if>
			</xsl:otherwise>
	</xsl:choose>
	
	<xsl:apply-templates select="UML:StateVertex.outgoing/UML:Transition" mode="state">
			<xsl:with-param name="levelp"><xsl:value-of select="$levelp+1"/></xsl:with-param>
			<xsl:with-param name="stateidp"><xsl:value-of select="$stateid"/></xsl:with-param>
	</xsl:apply-templates>
</xsl:template>

<xsl:template match="UML:Pseudostate" mode="transition">
	<xsl:param name="levelp"/>
	<xsl:param name="namep"/>
	<xsl:param name="stateidp"/>
	<xsl:param name="transnamep"/>
	
	<xsl:variable name="condC" select="UML:State.entry/UML:CallAction/UML:Action.script/UML:ActionExpression/@body"/>
	
	<xsl:choose>
		<xsl:when test="$condC">
		<xsl:text>if (</xsl:text><xsl:value-of select="$condC"/>
		<xsl:text>) {</xsl:text>
	
		<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(<xsl:value-of select="concat('aux', $levelp)"/>, gFld("<xsl:value-of select="$namep"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "", "green", "<xsl:value-of select="$stateidp"/>"))
		
		<xsl:text>}
		</xsl:text>
		<xsl:text>else{
		
		</xsl:text>
		<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(<xsl:value-of select="concat('aux', $levelp)"/>, gFld("<xsl:value-of select="$namep"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "", "red", "<xsl:value-of select="$stateidp"/>"))
		
		<xsl:text>}				
		</xsl:text>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="concat('aux', $levelp+1)"/> = insFld(<xsl:value-of select="concat('aux', $levelp)"/>, gFld("<xsl:value-of select="$namep"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "", "green", "<xsl:value-of select="$stateidp"/>"))
		</xsl:otherwise>
		
		
	</xsl:choose>
	<xsl:apply-templates select="UML:StateVertex.outgoing/UML:Transition" mode="state">
				<xsl:with-param name="levelp"><xsl:value-of select="$levelp+1"/></xsl:with-param>
				<xsl:with-param name="stateidp"><xsl:value-of select="$stateidp"/></xsl:with-param>
	</xsl:apply-templates>
</xsl:template>

<xsl:template match="UML:SimpleState" mode="transition">
	<xsl:param name="levelp"/>
	<xsl:param name="namep"/>
	<xsl:param name="stateidp"/>
	<xsl:param name="transnamep"/>
	
	<xsl:variable name="fldname" select="@name"/>
	<xsl:variable name="cond" select="UML:State.entry/UML:CallAction/UML:Action.script/UML:ActionExpression/@body"/>	
	<xsl:variable name="lnksrc" select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=//UML:TagDefinition[@name='Content']/@xmi.id]/@dataValue"/>
	
	
	<xsl:choose>
		<xsl:when test="$cond">
		<xsl:text>if (</xsl:text><xsl:value-of select="$cond"/>
		<xsl:text>) {</xsl:text>
		
		<xsl:value-of select="concat('aux', $levelp+1)"/> = insDoc(<xsl:value-of select="concat('aux', $levelp)"/>, gLnkLnk(2, "<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "<xsl:value-of select="$fldname"/>", "green", "<xsl:value-of select="$stateidp"/>"))
	
		<xsl:text>}
			</xsl:text>
		<xsl:text>else{
		
		</xsl:text>
		<xsl:value-of select="concat('aux', $levelp+1)"/> = insDoc(<xsl:value-of select="concat('aux', $levelp)"/>, gLnkLnk(2, "<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "<xsl:value-of select="$fldname"/>", "red", "<xsl:value-of select="$stateidp"/>"))
		
		<xsl:text>}
			</xsl:text>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="concat('aux', $levelp+1)"/> = insDoc(<xsl:value-of select="concat('aux', $levelp)"/>, gLnkLnk(2, "<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "<xsl:value-of select="$fldname"/>", "green", "<xsl:value-of select="$stateidp"/>"))
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>


<xsl:template match="UML:CompositeState" mode="transition">
	<xsl:param name="levelp"/>
	<xsl:param name="namep"/>
	<xsl:param name="stateidp"/>
	<xsl:param name="transnamep"/>
	
	<xsl:variable name="fldname" select="@name"/>
	<xsl:variable name="cond" select="UML:State.entry/UML:CallAction/UML:Action.script/UML:ActionExpression/@body"/>
	
	<xsl:variable name="lnksrc" select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=//UML:TagDefinition[@name='Content']/@xmi.id]/@dataValue"/>
	
	<xsl:choose>
		<xsl:when test="$cond">
			<xsl:text>if (</xsl:text><xsl:value-of select="$cond"/>
		<xsl:text>) {</xsl:text>
		
		<xsl:value-of select="concat('aux', $levelp+1)"/> = insDoc(<xsl:value-of select="concat('aux', $levelp)"/>, gLnkLnk(2, "<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "<xsl:value-of select="$fldname"/>", "green", "<xsl:value-of select="$stateidp"/>"))
		<xsl:text>}
		</xsl:text>
		<xsl:text>else{
		
		</xsl:text>
		<xsl:value-of select="concat('aux', $levelp+1)"/> = insDoc(<xsl:value-of select="concat('aux', $levelp)"/>, gLnkLnk(2, "<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "<xsl:value-of select="$fldname"/>", "red", "<xsl:value-of select="$stateidp"/>"))
		
		<xsl:text>}
		</xsl:text>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="concat('aux', $levelp+1)"/> = insDoc(<xsl:value-of select="concat('aux', $levelp)"/>, gLnkLnk(2, "<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "<xsl:value-of select="$fldname"/>", "green", "<xsl:value-of select="$stateidp"/>"))
		</xsl:otherwise>
	</xsl:choose>	
</xsl:template>

<xsl:template match="UML:FinalState" mode="transition">
	<xsl:param name="levelp"/>
	<xsl:param name="namep"/>
	<xsl:param name="stateidp"/>
	<xsl:param name="transnamep"/>
	
	<xsl:variable name="fldname" select="@name"/>
	<xsl:variable name="cond" select="UML:State.entry/UML:CallAction/UML:Action.script/UML:ActionExpression/@body"/>
		
	<xsl:variable name="lnksrc" select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=//UML:TagDefinition[@name='Content']/@xmi.id]/@dataValue"/>
	
	<xsl:choose>
		<xsl:when test="$cond">
			<xsl:text>if (</xsl:text><xsl:value-of select="$cond"/>
		<xsl:text>) {</xsl:text>
			
		<xsl:value-of select="concat('aux', $levelp+1)"/> = insDoc(<xsl:value-of select="concat('aux', $levelp)"/>, gLnkLnk(2, "<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "<xsl:value-of select="$fldname"/>", "green", "<xsl:value-of select="$stateidp"/>"))
		<xsl:text>}
		</xsl:text>
		<xsl:text>else{</xsl:text>
			<xsl:value-of select="concat('aux', $levelp+1)"/> = insDoc(<xsl:value-of select="concat('aux', $levelp)"/>, gLnkLnk(2, "<xsl:value-of select="$fldname"/><xsl:if test="$transnamep='next'">/<xsl:value-of select="$transnamep"/></xsl:if>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "<xsl:value-of select="$fldname"/>", "red", "<xsl:value-of select="$stateidp"/>"))
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="concat('aux', $levelp+1)"/> = insDoc(<xsl:value-of select="concat('aux', $levelp)"/>, gLnkLnk(2, "<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "<xsl:value-of select="$fldname"/>", "green", "<xsl:value-of select="$stateidp"/>"))
		</xsl:otherwise>
	</xsl:choose>		
</xsl:template>

<xsl:template match="UML:FinalState">
	<xsl:param name="levelp"/>
	<xsl:variable name="fldname" select="@name"/>
	<xsl:variable name="stateid" select="@xmi.id"/>
	
	<xsl:variable name="lnksrc" select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=//UML:TagDefinition[@name='Content']/@xmi.id]/@dataValue"/>
	
	
	<xsl:choose>
			<xsl:when test="$levelp=0">
				<xsl:value-of select="concat('aux', $levelp+1)"/> = insDoc(foldersTree, gLnk(2, "<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="concat('aux', $levelp+1)"/> = insDoc(<xsl:value-of select="concat('aux', $levelp)"/>, gLnk(2, "<xsl:value-of select="$fldname"/>", "<xsl:apply-templates select="UML:ModelElement.taggedValue"/>", "green", "<xsl:value-of select="$stateid"/>"))
			</xsl:otherwise>
	</xsl:choose>
	
	<!--aux1 = insDoc(foldersTree, gLnk(2, "<xsl:value-of select="$fldname"/>", "<xsl:value-of select="$lnksrc"/>", "green"))-->
</xsl:template>


<xsl:template match="UML:ModelElement.taggedValue">
	<xsl:apply-templates select="UML:TaggedValue"/>
</xsl:template>


<xsl:template match="UML:TaggedValue">

	<xsl:variable name="tagid" select="UML:TaggedValue.type/UML:TagDefinition/@xmi.idref"/>
	<xsl:variable name="content" select="//UML:TagDefinition[@xmi.id=$tagid]/@tagType"/> 
	
	<xsl:if test="$content='Content'">
			<xsl:value-of select="@dataValue"/>
	</xsl:if>
</xsl:template>

</xsl:stylesheet>
