204 lines
6 KiB
HTML
Executable file
204 lines
6 KiB
HTML
Executable file
<?xml version="1.0" encoding="UTF-8" ?>
|
|
<xsl:stylesheet version="1.0"
|
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
xmlns="urn:nhibernate-mapping-2.2"
|
|
xmlns:a="http://cygnets.co.uk/schemas/adl-1.2"
|
|
exclude-result-prefixes="a">
|
|
|
|
<!--
|
|
Application Description Framework
|
|
adl2hibernate.xsl
|
|
|
|
(c) 2007 Cygnet Solutions Ltd
|
|
|
|
Transform ADL to Verbose (or canonical) ADL
|
|
Most defaults are replaced with their actual values.
|
|
|
|
$Author: af $
|
|
$Revision: 1.1 $
|
|
-->
|
|
|
|
<xsl:output indent="no" method="xml" encoding="utf-8"/>
|
|
|
|
<xsl:template match="a:application">
|
|
<hibernate-mapping>
|
|
<xsl:apply-templates select="@namespace|@assembly" />
|
|
<xsl:comment>
|
|
***************************************************************************
|
|
*
|
|
* ©2007 Cygnet Solutions Ltd
|
|
*
|
|
* THIS FILE IS AUTOMATICALLY GENERATED AND SHOULD NOT
|
|
* BE MANUALLY EDITED.
|
|
*
|
|
* Generated using adl2hibernate-mapping.xsl revision <xsl:value-of select="substring('$Revision: 1.1 $', 12)"/>
|
|
*
|
|
***************************************************************************
|
|
</xsl:comment>
|
|
<xsl:apply-templates select="a:entity|comment()"/>
|
|
</hibernate-mapping>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:entity">
|
|
<class>
|
|
<xsl:apply-templates select="@name|@table" />
|
|
<xsl:apply-templates select="a:key" />
|
|
<xsl:apply-templates select="a:property|a:set|a:bag|a:subclass|a:component|a:discriminator" />
|
|
</class>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:key">
|
|
<xsl:choose>
|
|
<xsl:when test="count(a:property)=0">
|
|
<xsl:message terminate="yes">
|
|
Class '<xsl:value-of select="ancestor::a:entity/@name"/>' has no properties in its key
|
|
</xsl:message>
|
|
</xsl:when>
|
|
<xsl:when test="count(a:property)=1">
|
|
<id>
|
|
<xsl:apply-templates select="a:property/@*|a:property/node()" />
|
|
</id>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<composite-id>
|
|
<xsl:apply-templates select="a:property" mode="key" />
|
|
</composite-id>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:property" mode="key">
|
|
<xsl:choose>
|
|
<xsl:when test="@type='entity'">
|
|
<key-many-to-one>
|
|
<xsl:apply-templates select="@name|@column|@entity|node()"/>
|
|
</key-many-to-one>
|
|
</xsl:when>
|
|
<xsl:when test="true()">
|
|
<key-property>
|
|
<xsl:apply-templates select="@*|node()"/>
|
|
</key-property>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:property">
|
|
<xsl:choose>
|
|
<xsl:when test="@type='entity'">
|
|
<many-to-one>
|
|
<xsl:apply-templates select="@name|@column|@entity|node()"/>
|
|
</many-to-one>
|
|
</xsl:when>
|
|
<xsl:when test="true()">
|
|
<property><xsl:apply-templates select="@*|node()"/></property>
|
|
</xsl:when>
|
|
</xsl:choose>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:property/@type">
|
|
<xsl:attribute name="type">
|
|
<xsl:call-template name="type-spec">
|
|
<xsl:with-param name="typename" select="../@type"/>
|
|
</xsl:call-template>
|
|
<xsl:if test="../@size">(<xsl:value-of select="../@size"/>)</xsl:if>
|
|
</xsl:attribute>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:property/@size"><!--Remove--></xsl:template>
|
|
|
|
<xsl:template match="a:property/@required">
|
|
<xsl:if test="string(.)='true'">
|
|
<xsl:attribute name="not-null">true</xsl:attribute>
|
|
</xsl:if>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="@entity">
|
|
<xsl:attribute name="class">
|
|
<xsl:value-of select="."/></xsl:attribute>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:set">
|
|
<set>
|
|
<xsl:apply-templates select="@*|node()" />
|
|
</set>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:bag">
|
|
<bag>
|
|
<xsl:apply-templates select="@*|node()" />
|
|
</bag>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:subclass">
|
|
<subclass>
|
|
<xsl:apply-templates select="@*"/>
|
|
<xsl:apply-templates select="node()"/>
|
|
</subclass>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:discriminator">
|
|
<discriminator>
|
|
<xsl:apply-templates select="@*|node()" />
|
|
</discriminator>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:component">
|
|
<component>
|
|
<xsl:apply-templates select="@*|node()" />
|
|
</component>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:foreign-key">
|
|
<key>
|
|
<xsl:apply-templates select="@*|node()" />
|
|
</key>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:one-to-many">
|
|
<one-to-many>
|
|
<xsl:apply-templates select="@*|node()" />
|
|
</one-to-many>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:many-to-many">
|
|
<many-to-many>
|
|
<xsl:apply-templates select="@*|node()" />
|
|
</many-to-many>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="a:generator">
|
|
<generator>
|
|
<xsl:apply-templates select="@*|node()" />
|
|
</generator>
|
|
</xsl:template>
|
|
|
|
<xsl:template name="type-spec">
|
|
<xsl:param name="typename"/>
|
|
<xsl:param name="nullable" select="false()"/>
|
|
<xsl:variable name="type0" select="/a:application/a:type[@name=$typename]|document('types.xml')/types/type[@name=$typename]"/>
|
|
<xsl:variable name="type" select="$type0[1]"/>
|
|
<xsl:choose>
|
|
<xsl:when test="$type/@hibernate">
|
|
<xsl:value-of select="$type/@hibernate" />
|
|
</xsl:when>
|
|
<xsl:when test="$type/@dotnet">
|
|
<xsl:value-of select="$type/@dotnet" />
|
|
</xsl:when>
|
|
<xsl:when test="$type">
|
|
<xsl:message terminate="yes">Error! Found type "<xsl:value-of select="$typename"/>" but cannot find 'dotnet' or 'hibernate' attributes.</xsl:message>
|
|
</xsl:when>
|
|
<xsl:otherwise>
|
|
<xsl:message terminate="yes">Error! Type "<xsl:value-of select="$typename"/>" not found.</xsl:message>
|
|
</xsl:otherwise>
|
|
</xsl:choose>
|
|
</xsl:template>
|
|
|
|
|
|
<xsl:template match="@*|node()">
|
|
<xsl:copy>
|
|
<xsl:apply-templates select="@*|node()"/>
|
|
</xsl:copy>
|
|
</xsl:template>
|
|
|
|
|
|
</xsl:stylesheet> |