<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.5"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
	xmlns:javaee="http://java.sun.com/xml/ns/javaee"
	xmlns:sip="http://www.jcp.org/xml/ns/sipservlet" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<xsl:output method="xml" encoding="UTF-8" indent="yes" />
	<xsl:strip-space elements="*" />


	<!--
	exclude-result-prefixes="javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	
	
		======================================================================
		This file contains an XSLT transformation stylesheet which
		constructs a result tree from a number of XML sources by filtering
		reordering and adding arbitrary structure. This file is
		automatically generated by the XML Mapper tool from IBM WebSphere
		Studio Workbench.
		======================================================================
	-->

	<!--
		======================================================================
		The Root Element
		The "Root Element" section specifies which template will be
		invoked first thus determining the root element of the result tree.
		======================================================================
	-->

	<xsl:template match="/">
		<xsl:apply-templates select="/sip:sip-app" />
	</xsl:template>


	<!--
		======================================================================
		Remaining Templates
		The remaining section defines the template rules. The last template
		rule is a generic identity transformation used for moving complete
		tree fragments from an input source to the result tree.
		======================================================================
	-->
	
	<!-- Composed element template -->
	<xsl:template match="/sip:sip-app">
		<web-app>
			<xsl:apply-templates select="@*" />
			
			<xsl:apply-templates select="javaee:icon" />
			<xsl:apply-templates select="javaee:description" />			
			
			<xsl:apply-templates select="sip:app-name" />
			<xsl:apply-templates select="sip:distributable" />
			<xsl:apply-templates select="sip:context-param" />
			<xsl:apply-templates select="sip:servlet" />
			<!-- 
			<xsl:apply-templates select="sip:servlet-selection" />
			 -->
			<!--
				instead of transofm servlet-mapping, we need to create
				servlet-mapping even if not exist in sip.xml. the info exist in the
				servlet map
			-->
			<xsl:call-template name="create-servlet-mapping" />

			<!--
				xsl:call-template name="mime-mapping"/> <xsl:call-template
				name="welcome-file-list"/> <xsl:call-template name="error-page"/>
				<xsl:call-template name="taglib"/
			-->
			<xsl:apply-templates select="sip:security-constraint" />
			<xsl:apply-templates select="sip:login-config" />
			<xsl:apply-templates select="sip:security-role" />
			
			<xsl:apply-templates select="javaee:ejb-ref" />
			<xsl:apply-templates select="javaee:ejb-local-ref" />
			
			<xsl:apply-templates select="javaee:service-ref" />
			<xsl:apply-templates select="javaee:resource-ref" />
			<xsl:apply-templates select="javaee:resource-env-ref" />
			
<!-- 			
			<xsl:apply-templates select="env-entry" />
			<xsl:apply-templates select="javaee:web-app-servlet-name-uniqueness" />
 -->		
 			<xsl:apply-templates select="javaee:message-destination-ref" />
 			<xsl:apply-templates select="javaee:persistence-context-ref" />
 			<xsl:apply-templates select="javaee:persistence-unit-ref" />
 			
			<xsl:apply-templates select="sip:message-destination" />
			<xsl:apply-templates select="sip:locale-encoding-mapping-list" />
			
			<xsl:apply-templates select="javaee:post-construct" />
			<xsl:apply-templates select="javaee:pre-destroy" />
		</web-app>
	</xsl:template>

	<xsl:template match="sip:app-name">
		<display-name>
			<xsl:value-of select="." />
		</display-name>
	</xsl:template>

	<xsl:template match="sip:context-param">
		<xsl:copy>
			<xsl:apply-templates/>
		</xsl:copy>
	</xsl:template>
	
	
<!-- 
	<xsl:template match="sip:servlet-selection">
		<xsl:apply-templates select="sip:servlet-mapping" />
	</xsl:template>

	<xsl:template match="sip:servlet-mapping">
		<xsl:copy>
			<xsl:apply-templates />
			<xsl:apply-templates select="@*" />
			<xsl:apply-templates select="javaee:servlet-name" />
			<xsl:call-template name="javaee:url-pattern" />
		</xsl:copy>
	</xsl:template>
 -->	

	<xsl:template name="create-servlet-mapping">
		<xsl:for-each select="sip:servlet">
			<servlet-mapping>
				<javaee:servlet-name>
					<xsl:value-of select="javaee:servlet-name" />
				</javaee:servlet-name>
				<xsl:call-template name="javaee:url-pattern" />
			</servlet-mapping>
		</xsl:for-each>
	</xsl:template>


	<xsl:template match="sip:servlet">
		<xsl:copy>
			<xsl:apply-templates select="@*" />
			<xsl:apply-templates select="javaee:display-name" />
						
			<xsl:apply-templates select="javaee:servlet-name" />
			<xsl:apply-templates select="javaee:servlet-class" />

			<!-- End of Choice Construct -->
			<xsl:apply-templates select="javaee:init-param" />
			<xsl:apply-templates select="javaee:run-as" />
			<xsl:apply-templates select="javaee:security-role-ref" />
		</xsl:copy>
	</xsl:template>
	
	
	<xsl:template match="sip:security-constraint">
		<xsl:copy>
			<xsl:apply-templates select="@*" />
			<xsl:apply-templates select="sip:display-name" />
			<xsl:apply-templates select="sip:resource-collection" />
			<xsl:apply-templates select="sip:auth-constraint" />
			<xsl:apply-templates select="sip:user-data-constraint" />
		</xsl:copy>
	</xsl:template>

	

	<!-- hardcoded POST value for http method, POST will force authentication while GET won't -->
	<xsl:template name="http-method">
		<javaee:http-method>
			<xsl:value-of select="'POST'" />
		</javaee:http-method>
	</xsl:template>
	
	
	<xsl:template match="sip:resource-collection">
		<javaee:web-resource-collection>
			<xsl:apply-templates select="sip:resource-name" />
			<xsl:apply-templates select="sip:description" />
			<javaee:url-pattern>/<xsl:value-of select="sip:servlet-name" /></javaee:url-pattern>
			<xsl:call-template name="http-method" />
			
			<!--
			<xsl:apply-templates select="@*" /> 
			-->			
			
		</javaee:web-resource-collection>
	</xsl:template>
	
	<xsl:template match="sip:resource-name">
		<web-resource-name>
			<xsl:value-of select="." />
		</web-resource-name>
	</xsl:template>	
	
	
	<xsl:template match="sip:login-config">
		<xsl:copy>
			<xsl:apply-templates select="@*" />
			<xsl:apply-templates select="sip:auth-method" />
			<xsl:apply-templates select="sip:realm-name" />
			<!--				
			<xsl:call-template name="form-login-config" />			
			 -->
		</xsl:copy>
	</xsl:template>
	
	<!--
		======================================================================
		Web.xml only Templates

		======================================================================
		
	-->	
	
	<xsl:template name="javaee:url-pattern">
		<javaee:url-pattern>/<xsl:value-of select="javaee:servlet-name" /></javaee:url-pattern>
	</xsl:template>
	
	
	<!-- Newly-defined element template -->
	<xsl:template name="filter-name">
		<filter-name>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue15'" />
      </xsl:attribute>
		</filter-name>
	</xsl:template>
	

	<!-- Newly-defined element template -->
	<xsl:template name="create-servlet-load-on-startup">
		<xsl:param name="servlet-class-name" />
		<xsl:variable name="isListener"
			select="/sip:sip-app/sip:listener[listener-class=$servlet-class-name]" />
		<xsl:if test="$isListener">
			<load-on-startup />
		</xsl:if>
	</xsl:template>

	<!-- Newly-defined element template -->
	<xsl:template name="mime-type">
		<mime-type>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue55'" />
      </xsl:attribute>
		</mime-type>
	</xsl:template>

	<!-- Newly-defined element template -->
	<xsl:template name="taglib">
		<taglib>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue61'" />
      </xsl:attribute>
			<xsl:call-template name="taglib-uri" />
			<xsl:call-template name="taglib-location" />
		</taglib>
	</xsl:template>


	<!-- Newly-defined element template -->
	<xsl:template name="form-error-page">
		<form-error-page>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue92'" />
      </xsl:attribute>
		</form-error-page>
	</xsl:template>


	<!-- Newly-defined element template -->
	<!--
		xsl:template name="filter-mapping"> <filter-mapping> <xsl:attribute
		name="id"> <xsl:value-of select="'idvalue23'"/> </xsl:attribute>
		<xsl:call-template name="filter-name"/> <xsl:call-template
		name="servlet-name"/> </filter-mapping> </xsl:template
	-->

	<!-- Newly-defined element template -->
	<xsl:template name="taglib-location">
		<taglib-location>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue63'" />
      </xsl:attribute>
		</taglib-location>
	</xsl:template>

	<!-- Newly-defined element template -->
	<xsl:template name="extension">
		<extension>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue54'" />
      </xsl:attribute>
		</extension>
	</xsl:template>

	<!-- Newly-defined element template -->
	<xsl:template name="welcome-file">
		<welcome-file>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue57'" />
      </xsl:attribute>
		</welcome-file>
	</xsl:template>

	<!-- Newly-defined element template -->
	<xsl:template name="error-code">
		<error-code>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue59'" />
      </xsl:attribute>
		</error-code>
	</xsl:template>

	<!-- Newly-defined element template -->
	<xsl:template name="location">
		<location>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue60'" />
      </xsl:attribute>
		</location>
	</xsl:template>

	<!-- Newly-defined element template -->
	<xsl:template name="taglib-uri">
		<taglib-uri>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue62'" />
      </xsl:attribute>
		</taglib-uri>
	</xsl:template>

	<!-- Newly-defined element template -->
	<xsl:template name="welcome-file-list">
		<welcome-file-list>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue56'" />
      </xsl:attribute>
			<xsl:call-template name="welcome-file" />
		</welcome-file-list>
	</xsl:template>

	<!-- Identity transformation template -->
	<xsl:template match="*|@*|comment()|processing-instruction()|text()">
		<xsl:copy>
			<xsl:apply-templates select="*|@*|comment()|processing-instruction()|text()" />
		</xsl:copy>
	</xsl:template>
	
	
	<!-- Newly-defined element template -->
	<xsl:template name="filter-class">
		<filter-class>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue18'" />
      </xsl:attribute>
		</filter-class>
	</xsl:template>

	<!-- Newly-defined element template -->
	<xsl:template name="jsp-file">
		<jsp-file>
		</jsp-file>
	</xsl:template>

	<!-- Newly-defined element template -->
	<xsl:template name="error-page">
		<error-page>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue58'" />
      </xsl:attribute>

			<xsl:call-template name="exception-type" />
			<xsl:call-template name="location" />
		</error-page>
	</xsl:template>

	<!-- Composed element template -->


	<!-- Newly-defined element template -->
	<xsl:template name="form-login-page">
		<form-login-page>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue91'" />
      </xsl:attribute>
		</form-login-page>
	</xsl:template>

	<!-- Newly-defined element template -->
	<!--
		xsl:template name="filter"> <filter> <xsl:attribute name="id">
		<xsl:value-of select="'idvalue11'"/> </xsl:attribute>
		<xsl:call-template name="icon"/> <xsl:call-template
		name="filter-name"/> <xsl:call-template name="display-name"/>
		<xsl:call-template name="description"/> <xsl:call-template
		name="filter-class"/> <xsl:call-template name="init-param"/> </filter>
		</xsl:template
	-->

	<!-- Newly-defined element template -->
	<xsl:template name="mime-mapping">
		<mime-mapping>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue53'" />
      </xsl:attribute>
			<xsl:call-template name="extension" />
			<xsl:call-template name="mime-type" />
		</mime-mapping>
	</xsl:template>

	<!-- Newly-defined element template -->
	<xsl:template name="form-login-config">
		<form-login-config>
			<xsl:attribute name="id">
        <xsl:value-of select="'idvalue90'" />
      </xsl:attribute>
			<xsl:call-template name="form-login-page" />
			<xsl:call-template name="form-error-page" />
		</form-login-config>
	</xsl:template>

	<!-- Newly-defined element template -->
	<xsl:template name="exception-type">
		<exception-type>
		</exception-type>
	</xsl:template>


	
</xsl:stylesheet>
