This does not work, but...

I'm halfway through refactoring adl2controllerclasses, and about to make an even more radical change. This is a way back in case it goes horribly wrong.
This commit is contained in:
sb 2008-06-06 08:46:27 +00:00
parent f9fd11c101
commit f5b524e5c7
2 changed files with 196 additions and 150 deletions

View file

@ -9,8 +9,8 @@
Transform ADL into (partial) controller classes Transform ADL into (partial) controller classes
$Author: sb $ $Author: sb $
$Revision: 1.9 $ $Revision: 1.10 $
$Date: 2008-06-04 16:17:39 $ $Date: 2008-06-06 08:46:27 $
--> -->
<!-- WARNING WARNING WARNING: Do NOT reformat this file! <!-- WARNING WARNING WARNING: Do NOT reformat this file!
@ -72,7 +72,7 @@
// //
// Automatically generated abstract super class for controllers for the // Automatically generated abstract super class for controllers for the
// <xsl:value-of select="/adl:application/@name"/> application; generated using // <xsl:value-of select="/adl:application/@name"/> application; generated using
// adl2controllerclasses.xslt version <xsl:value-of select="substring( '$Revision: 1.9 $', 10)"/> // adl2controllerclasses.xslt version <xsl:value-of select="substring( '$Revision: 1.10 $', 10)"/>
// //
// This file is automatically generated; DO NOT EDIT IT. // This file is automatically generated; DO NOT EDIT IT.
// //
@ -135,7 +135,7 @@ namespace <xsl:value-of select="$controllerns"/> {
// //
// Controller for auto-generated forms for editing <xsl:value-of select="@name"/>s // Controller for auto-generated forms for editing <xsl:value-of select="@name"/>s
// Automatically generated from application description using // Automatically generated from application description using
// adl2controllerclasses.xslt version <xsl:value-of select="substring( '$Revision: 1.9 $', 10)"/> // adl2controllerclasses.xslt version <xsl:value-of select="substring( '$Revision: 1.10 $', 10)"/>
// //
// This file is automatically generated; DO NOT EDIT IT. // This file is automatically generated; DO NOT EDIT IT.
// //
@ -296,10 +296,12 @@ namespace <xsl:value-of select="$controllerns"/> {
</xsl:call-template> </xsl:call-template>
</xsl:variable> </xsl:variable>
hibernator.CreateCriteria( typeof( <xsl:value-of select="concat( $entityns, '.', $keyentity)"/>)) hibernator.CreateCriteria( typeof( <xsl:value-of select="concat( $entityns, '.', $keyentity)"/>))
.Add(Expression.Eq( "<xsl:value-of select="//adl:entity[@name=$keyentity]/adl:key/adl:property[position()=1]/@name"/>",<xsl:choose> <xsl:call-template name="add-hibernate-expression-eq">
<xsl:when test="$keyenttype = 'int'">Int32.Parse( Form[ "<xsl:value-of select="concat( 'instance.', @name)"/>"])</xsl:when> <xsl:with-param name="property" select="//adl:entity[@name=$keyentity]/adl:key/adl:property[position()=1]"/>
<xsl:otherwise>Form[ "<xsl:value-of select="concat( 'instance.', @name)"/>"]</xsl:otherwise> <xsl:with-param name="value">
</xsl:choose>)) Form[ "<xsl:value-of select="concat( 'instance.', @name)"/>"]
</xsl:with-param>
</xsl:call-template>
.UniqueResult&lt;<xsl:value-of select="concat( $entityns, '.', $keyentity)"/>&gt;()</xsl:when> .UniqueResult&lt;<xsl:value-of select="concat( $entityns, '.', $keyentity)"/>&gt;()</xsl:when>
<xsl:otherwise>Form["<xsl:value-of select="concat( 'instance.', @name)"/>"]</xsl:otherwise> <xsl:otherwise>Form["<xsl:value-of select="concat( 'instance.', @name)"/>"]</xsl:otherwise>
</xsl:choose> </xsl:choose>
@ -386,7 +388,14 @@ namespace <xsl:value-of select="$controllerns"/> {
</xsl:choose> </xsl:choose>
</xsl:for-each> </xsl:for-each>
<xsl:for-each select="property[@type='link']"> <xsl:for-each select="descendant::adl:property[@type='link']">
<xsl:variable name="farentityname" select="@entity"/>
<xsl:variable name="farkey" select="//adl:entity[@name=$farentityname]/adl:key/adl:property[position()=1]/@name"/>
<xsl:variable name="farkeybasetype">
<xsl:call-template name="base-type">
<xsl:with-param name="property" select="//adl:entity[@name=$farentityname]/adl:key/adl:property[position()=1]"/>
</xsl:call-template>
</xsl:variable>
/* to update a link table which has no other data than the near and far keys, it is /* to update a link table which has no other data than the near and far keys, it is
* sufficient to smash the existing values and create new ones. It's also a lot easier! */ * sufficient to smash the existing values and create new ones. It's also a lot easier! */
@ -408,9 +417,12 @@ namespace <xsl:value-of select="$controllerns"/> {
foreach ( string index in <xsl:value-of select="concat(@name, 'Values')"/>) foreach ( string index in <xsl:value-of select="concat(@name, 'Values')"/>)
{ {
<xsl:value-of select="concat( 'record.', @name)"/>.Add( <xsl:value-of select="concat( 'record.', @name)"/>.Add(
hibernator.CreateCriteria(typeof(<xsl:value-of select="@entity"/>)) hibernator.CreateCriteria(typeof(<xsl:value-of select="concat( $entityns, '.', @entity)"/>))
.Add(Expression.Eq("<xsl:value-of select="@entity"/>Id", index)) <xsl:call-template name="add-hibernate-expression-eq">
.UniqueResult&lt;<xsl:value-of select="$entityns"/>.<xsl:value-of select="@entity"/>&gt;()); <xsl:with-param name="property" select="//adl:entity[@name=$farentityname]/adl:key/adl:property[position()=1]"/>
<xsl:with-param name="value" select="index"/>
</xsl:call-template>
.UniqueResult&lt;<xsl:value-of select="concat( $entityns, '.', @entity)"/>&gt;());
} }
} }
</xsl:for-each> </xsl:for-each>
@ -468,20 +480,10 @@ namespace <xsl:value-of select="$controllerns"/> {
{ {
<xsl:value-of select="concat( $entityns, '.', @entity)"/> item = <xsl:value-of select="concat( $entityns, '.', @entity)"/> item =
hibernator.CreateCriteria(typeof(<xsl:value-of select="@entity"/>)) hibernator.CreateCriteria(typeof(<xsl:value-of select="@entity"/>))
.Add(Expression.Eq("<xsl:value-of select="$farkey"/>", <xsl:choose> <xsl:call-template name="add-hibernate-expression-eq">
<xsl:when test="$farkeybasetype = 'string'"> <xsl:with-param name="property" select="//adl:entity[@name=$farentityname]/adl:key/adl:property[position()=1]"/>
index <xsl:with-param name="value" select="index"/>
</xsl:when> </xsl:call-template>
<xsl:when test="$farkeybasetype = 'integer'">
Int32.Parse( index)
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
ADL: Error: keys of type <xsl:value-of select="$farkeybasetype"/> cannot yet be used
in lists
</xsl:message>
</xsl:otherwise>
</xsl:choose>))
.UniqueResult&lt;<xsl:value-of select="concat( $entityns, '.', @entity)"/>&gt;(); .UniqueResult&lt;<xsl:value-of select="concat( $entityns, '.', @entity)"/>&gt;();
if ( ! record.<xsl:value-of select="@name"/>.Contains( item)) if ( ! record.<xsl:value-of select="@name"/>.Contains( item))
@ -632,34 +634,18 @@ namespace <xsl:value-of select="$controllerns"/> {
</xsl:call-template> </xsl:call-template>
</xsl:variable> </xsl:variable>
<xsl:choose> <xsl:choose>
<xsl:when test="@type='message'"> <xsl:when test="$base-type='boolean'"/>
<!-- search.Add( Expression.Like( "<xsl:value-of select="@name"/>.LocalText", "%"+Params["<xsl:value-of select="concat( 'search_', @name)"/>"]+"%")); --> <xsl:when test="$base-type='link'"/>
</xsl:when> <xsl:when test="$base-type='list'"/>
<xsl:when test="$base-type = 'integer'">
if ( ! String.IsNullOrEmpty( Params[ "<xsl:value-of select="concat( 'search_', @name)"/>"])) {
search.Add( Expression.Eq( "<xsl:value-of select="@name"/>", Int32.Parse( Params["<xsl:value-of select="concat( 'search_', @name)"/>"])));
}
</xsl:when>
<xsl:when test="$base-type = 'real'">
if ( ! String.IsNullOrEmpty( Params[ "<xsl:value-of select="concat( 'search_', @name)"/>"])) {
search.Add( Expression.Eq( "<xsl:value-of select="@name"/>", Int32.Parse( Params["<xsl:value-of select="concat( 'search_', @name)"/>"])));
}
</xsl:when>
<xsl:when test="$base-type = 'money'">
if ( ! String.IsNullOrEmpty( Params[ "<xsl:value-of select="concat( 'search_', @name)"/>"])) {
search.Add( Expression.Eq( "<xsl:value-of select="@name"/>", Int32.Parse( Params["<xsl:value-of select="concat( 'search_', @name)"/>"])));
}
</xsl:when>
<!-- xsl:when test="$base-type = 'entity'">
search.Add( Expression.Like( "<xsl:value-of select="@name"/>.UserIdentifier", "%"+Params["<xsl:value-of select="concat( 'search_', @name)"/>"]+"%"));
</xsl:when doesn't work -->
<xsl:otherwise> <xsl:otherwise>
if ( ! String.IsNullOrEmpty( Params[ "<xsl:value-of select="concat( 'search_', @name)"/>"])) { if ( ! String.IsNullOrEmpty( Params[ "<xsl:value-of select="concat( 'search_', @name)"/>"])) {
search.Add( Expression.Like( "<xsl:value-of select="@name"/>", "%"+Params["<xsl:value-of select="concat( 'search_', @name)"/>"]+"%")); search<xsl:call-template name="add-hibernate-expression-like">
<xsl:with-param name="property" select="."/>
<xsl:with-param name="value" select="concat( 'search_', @name)"/>
</xsl:call-template>;
} }
</xsl:otherwise> </xsl:otherwise>
</xsl:choose> </xsl:choose>
</xsl:for-each> </xsl:for-each>
<xsl:for-each select="adl:property[@distinct='user' or @distinct='all']"> <xsl:for-each select="adl:property[@distinct='user' or @distinct='all']">
search.AddOrder(<xsl:value-of select="concat( ' new Order( &#34;', @name, '&#34;, true)')"/>); search.AddOrder(<xsl:value-of select="concat( ' new Order( &#34;', @name, '&#34;, true)')"/>);
@ -706,40 +692,6 @@ namespace <xsl:value-of select="$controllerns"/> {
<xsl:with-param name="property" select="."/> <xsl:with-param name="property" select="."/>
</xsl:call-template> </xsl:call-template>
</xsl:variable> </xsl:variable>
.Add( Expression.Eq( "<xsl:value-of select="@name"/>", <xsl:choose>
<xsl:when test="$basetype='integer'">
Int32.Parse( Form[ "<xsl:value-of select="concat( 'instance.', @name)"/>"])
</xsl:when>
<xsl:when test="$basetype='string'">
Form[ "<xsl:value-of select="concat( 'instance.', @name)"/>"]
</xsl:when>
<xsl:when test="$basetype='entity'">
<!-- Maybe TODO: this doesn't work recursively - if an entity has a key which is an entity
and the key of that entity is an entity, you're on your own, mate! -->
<xsl:variable name="keyentity" select="@entity"/>
<xsl:variable name="keyenttype">
<xsl:call-template name="primary-key-csharp-type">
<xsl:with-param name="entity" select="//adl:entity[@name=$keyentity]"/>
</xsl:call-template>
</xsl:variable>
hibernator.CreateCriteria( typeof( <xsl:value-of select="concat( $entityns, '.', $keyentity)"/>))
.Add(Expression.Eq( "<xsl:value-of select="//adl:entity[@name=$keyentity]/adl:key/adl:property[position()=1]/@name"/>",<xsl:choose>
<xsl:when test="$keyenttype = 'int'">
Int32.Parse( Form[ "<xsl:value-of select="concat( 'instance.', @name)"/>"])
</xsl:when>
<xsl:when test="$keyenttype='String'">
Form[ "<xsl:value-of select="concat( 'instance.', @name)"/>"]
</xsl:when>
<xsl:otherwise>
Form[ "<xsl:value-of select="concat( 'instance.', @name)"/>"]
</xsl:otherwise>
</xsl:choose>))
.UniqueResult&lt;<xsl:value-of select="concat( $entityns, '.', $keyentity)"/>&gt;()
</xsl:when>
<xsl:otherwise>
Form[ "<xsl:value-of select="concat( 'instance.', @name)"/>"]
</xsl:otherwise>
</xsl:choose>))
</xsl:for-each> </xsl:for-each>
.UniqueResult&lt;<xsl:value-of select="concat( $entityns, '.', @name)"/>&gt;(); .UniqueResult&lt;<xsl:value-of select="concat( $entityns, '.', @name)"/>&gt;();
} }
@ -877,17 +829,18 @@ namespace <xsl:value-of select="$controllerns"/> {
</xsl:for-each> </xsl:for-each>
[AccessibleThrough(Verb.Get)] [AccessibleThrough(Verb.Get)]
public void <xsl:value-of select="@name"/>( <xsl:for-each select="ancestor::adl:entity/adl:key/adl:property"> public void <xsl:value-of select="@name"/>( <xsl:for-each select="ancestor::adl:entity/adl:key/adl:property">
<xsl:choose> <!-- all args are passed as string because that's what hibernate-expression-eq -->
string <xsl:choose>
<xsl:when test="@type='entity'"> <xsl:when test="@type='entity'">
<xsl:call-template name="csharp-base-type"> <!-- xsl:call-template name="csharp-base-type">
<xsl:with-param name="property" select="."/> <xsl:with-param name="property" select="."/>
</xsl:call-template> </xsl:call-template -->
<xsl:value-of select="concat( ' ', @name, '_Value')"/> <xsl:value-of select="concat( ' ', @name, '_Value')"/>
</xsl:when> </xsl:when>
<xsl:otherwise> <xsl:otherwise>
<xsl:call-template name="csharp-base-type"> <!-- xsl:call-template name="csharp-base-type">
<xsl:with-param name="property" select="."/> <xsl:with-param name="property" select="."/>
</xsl:call-template> </xsl:call-template -->
<xsl:value-of select="concat( ' ', @name)"/> <xsl:value-of select="concat( ' ', @name)"/>
</xsl:otherwise> </xsl:otherwise>
</xsl:choose> </xsl:choose>
@ -901,7 +854,10 @@ namespace <xsl:value-of select="$controllerns"/> {
<xsl:when test="@type='entity'"> <xsl:when test="@type='entity'">
<xsl:variable name="entity" select="@entity"/> <xsl:variable name="entity" select="@entity"/>
hibernator.CreateCriteria(typeof(<xsl:value-of select="concat($entityns, '.', @entity)"/>)) hibernator.CreateCriteria(typeof(<xsl:value-of select="concat($entityns, '.', @entity)"/>))
.Add( Expression.Eq( "<xsl:value-of select="//adl:entity[@name=$entity]/adl:key/adl:property[position()=1]/@name"/>", <xsl:value-of select="concat( @name, '_Value')"/>)) <xsl:call-template name="add-hibernate-expression-eq">
<xsl:with-param name="property" select="//adl:entity[@name=$entity]/adl:key/adl:property[position()=1]"/>
<xsl:with-param name="value" select="concat( @name, '_Value')"/>
</xsl:call-template>
.UniqueResult&lt;<xsl:value-of select="concat($entityns, '.', @entity)"/>&gt;() .UniqueResult&lt;<xsl:value-of select="concat($entityns, '.', @entity)"/>&gt;()
</xsl:when> </xsl:when>
<xsl:otherwise> <xsl:otherwise>
@ -921,10 +877,10 @@ namespace <xsl:value-of select="$controllerns"/> {
</xsl:for-each> </xsl:for-each>
[AccessibleThrough(Verb.Get)] [AccessibleThrough(Verb.Get)]
public void <xsl:value-of select="@name"/>( <xsl:for-each select="ancestor::adl:entity/adl:key/adl:property"> public void <xsl:value-of select="@name"/>( <xsl:for-each select="ancestor::adl:entity/adl:key/adl:property">
<xsl:call-template name="csharp-type"> <!-- xsl:call-template name="csharp-type">
<xsl:with-param name="property" select="."/> <xsl:with-param name="property" select="."/>
</xsl:call-template> </xsl:call-template -->
<xsl:value-of select="concat( ' ', @name)"/> string <xsl:value-of select="concat( ' ', @name)"/>
<xsl:if test="not( position() = last())">,</xsl:if> <xsl:if test="not( position() = last())">,</xsl:if>
</xsl:for-each>) </xsl:for-each>)
{ {
@ -934,7 +890,10 @@ namespace <xsl:value-of select="$controllerns"/> {
<xsl:value-of select="concat($entityns, '.', ancestor::adl:entity/@name)"/> record = <xsl:value-of select="concat($entityns, '.', ancestor::adl:entity/@name)"/> record =
hibernator.CreateCriteria(typeof(<xsl:value-of select="concat($entityns, '.', ancestor::adl:entity/@name)"/>)) hibernator.CreateCriteria(typeof(<xsl:value-of select="concat($entityns, '.', ancestor::adl:entity/@name)"/>))
<xsl:for-each select="ancestor::adl:entity/adl:key/adl:property"> <xsl:for-each select="ancestor::adl:entity/adl:key/adl:property">
.Add(Expression.Eq("<xsl:value-of select="@name"/>", <xsl:value-of select="@name"/>)) <xsl:call-template name="add-hibernate-expression-eq">
<xsl:with-param name="property" select="."/>
<xsl:with-param name="value" select="@name"/>
</xsl:call-template>
</xsl:for-each> </xsl:for-each>
.UniqueResult&lt;<xsl:value-of select="concat($entityns, '.', ancestor::adl:entity/@name)"/>&gt;(); .UniqueResult&lt;<xsl:value-of select="concat($entityns, '.', ancestor::adl:entity/@name)"/>&gt;();
@ -968,6 +927,11 @@ namespace <xsl:value-of select="$controllerns"/> {
/* <xsl:apply-templates/> */ /* <xsl:apply-templates/> */
</xsl:template> </xsl:template>
<xsl:template match="adl:key">
<!-- the key shouldn't be matched directly - at least, not in this implementation -->
</xsl:template>
<!-- for properties with @distinct='all' or @distinct='system', <!-- for properties with @distinct='all' or @distinct='system',
check that values are indeed distinct --> check that values are indeed distinct -->
<xsl:template name="check-property-value-distinct"> <xsl:template name="check-property-value-distinct">
@ -989,22 +953,10 @@ namespace <xsl:value-of select="$controllerns"/> {
matchCriteria = matchCriteria =
hibernator.CreateCriteria(typeof(<xsl:value-of select="$property/ancestor::adl:entity/@name"/>)); hibernator.CreateCriteria(typeof(<xsl:value-of select="$property/ancestor::adl:entity/@name"/>));
matchCriteria.Add(Expression.Eq("<xsl:value-of select="$property/@name"/>", <xsl:choose> matchCriteria<xsl:call-template name="add-hibernate-expression-eq">
<xsl:when test="$basetype='string'">Form["<xsl:value-of select="concat('instance.', $property/@name)"/>"]</xsl:when> <xsl:with-param name="property" select="$property"/>
<xsl:when test="$basetype='integer'">Int32.Parse( Form["<xsl:value-of select="concat('instance.', $property/@name)"/>"])</xsl:when> <xsl:with-param name="value" select="concat('instance.', $property/@name)"/>
<xsl:when test="$basetype='entity'"> </xsl:call-template>;
<xsl:call-template name="fetch-property-instance">
<xsl:with-param name="property" select="."/>
<xsl:with-param name="valuename" select="adl:property[position()=1]/@name"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
ADL: ERROR: don't yet know how to do distinctness checks for properties
with base type <xsl:value-of select="$basetype"/>
</xsl:message>
</xsl:otherwise>
</xsl:choose>));
if ( record != null) { if ( record != null) {
/* i.e. we do have values for each of our key fields... */ /* i.e. we do have values for each of our key fields... */
@ -1014,17 +966,11 @@ namespace <xsl:value-of select="$controllerns"/> {
<xsl:with-param name="property" select="."/> <xsl:with-param name="property" select="."/>
</xsl:call-template> </xsl:call-template>
</xsl:variable> </xsl:variable>
matchCriteria.Add(Expression.Not(Expression.Eq("<xsl:value-of select="@name"/>",<xsl:choose> matchCriteria.Add(Expression.Not(<xsl:call-template name="hibernate-expression-eq">
<xsl:when test="$keybasetype='entity'">
<xsl:call-template name="fetch-property-instance">
<!-- recurse -->
<xsl:with-param name="property" select="."/> <xsl:with-param name="property" select="."/>
<xsl:with-param name="valuename" select="@name"/> <xsl:with-param name="value">
</xsl:call-template> Form["<xsl:value-of select="concat( 'instance.', @name)"/>"]</xsl:with-param>
</xsl:when> </xsl:call-template>));
<xsl:when test="$keybasetype='integer'">Int32.Parse( Form["<xsl:value-of select="concat( 'instance.', @name)"/>"])</xsl:when>
<xsl:otherwise>Form["<xsl:value-of select="concat( 'instance.', @name)"/>"]</xsl:otherwise>
</xsl:choose>)));
</xsl:for-each> </xsl:for-each>
} }
@ -1111,10 +1057,6 @@ namespace <xsl:value-of select="$controllerns"/> {
</xsl:template> </xsl:template>
<xsl:template match="adl:key">
<!-- the key shouldn't be matched directly - at least, not in this implementation -->
</xsl:template>
<xsl:template name="menu"> <xsl:template name="menu">
<xsl:param name="property"/> <xsl:param name="property"/>
<xsl:variable name="entity" select="//adl:entity[@name=$property/@entity]"/> <xsl:variable name="entity" select="//adl:entity[@name=$property/@entity]"/>
@ -1169,6 +1111,100 @@ namespace <xsl:value-of select="$controllerns"/> {
</xsl:choose> </xsl:choose>
</xsl:template> </xsl:template>
<!-- it's often convenient to wrap an expression in an Add() -->
<xsl:template name="add-hibernate-expression-eq">
<xsl:param name="property"/>
<xsl:param name="value"/>
<xsl:variable name="basetype">
<xsl:call-template name="base-type">
<xsl:with-param name="property" select="$property"/>
</xsl:call-template>
</xsl:variable>
.Add(<xsl:call-template name="hibernate-expression-eq">
<xsl:with-param name="property" select="$property"/>
<xsl:with-param name="value" select="$value"/>
</xsl:call-template>)
</xsl:template>
<!-- it's often convenient to wrap an expression in an Add() -->
<xsl:template name="add-hibernate-expression-like">
<xsl:param name="property"/>
<xsl:param name="value"/>
<xsl:variable name="basetype">
<xsl:call-template name="base-type">
<xsl:with-param name="property" select="$property"/>
</xsl:call-template>
</xsl:variable>
.Add(<xsl:call-template name="hibernate-expression-like">
<xsl:with-param name="property" select="$property"/>
<xsl:with-param name="value" select="$value"/>
</xsl:call-template>)
</xsl:template>
<!-- generate a hibernate equality expression based on this property,
comparing it to this value -->
<xsl:template name="hibernate-expression-eq">
<!-- an entity of type property -->
<xsl:param name="property"/>
<!-- an expression which, at run time, will evaluate to a string -->
<xsl:param name="value"/>
<xsl:variable name="basetype">
<xsl:call-template name="base-type">
<xsl:with-param name="property" select="$property"/>
</xsl:call-template>
</xsl:variable>
Expression.Eq("<xsl:value-of select="$property/@name"/>", <xsl:choose>
<xsl:when test="$basetype = 'string'">
<xsl:value-of select="$value"/>
</xsl:when>
<xsl:when test="$basetype = 'integer'">
Int32.Parse( <xsl:value-of select="$value"/>)
</xsl:when>
<xsl:when test="$basetype = 'money'">
Decimal.Parse( <xsl:value-of select="$value"/>)
</xsl:when>
<xsl:when test="$basetype = 'date'">
Date.Parse( <xsl:value-of select="$value"/>)
</xsl:when>
<xsl:when test="$basetype='entity'">
<xsl:call-template name="fetch-property-instance">
<!-- recurse -->
<xsl:with-param name="property" select="$property"/>
<xsl:with-param name="value" select="$value"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
ADL: Error: keys of type <xsl:value-of select="$basetype"/> cannot yet be used
in links
</xsl:message>
</xsl:otherwise>
</xsl:choose>)
</xsl:template>
<!-- generate a hibernate like expression based on this property,
comparing it to this value -->
<xsl:template name="hibernate-expression-like">
<xsl:param name="property"/>
<xsl:param name="value"/>
<xsl:variable name="basetype">
<xsl:call-template name="base-type">
<xsl:with-param name="property" select="$property"/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="$basetype='string' or $basetype='text'">
Expression.Like( "<xsl:value-of select="@name"/>", "%"+Params["<xsl:value-of select="$value"/>"]+"%")
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="hibernate-expression-eq">
<xsl:with-param name="property" select="$property"/>
<xsl:with-param name="value" select="$value"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- argument: a property <!-- argument: a property
returns 'true' if that property is of a type which makes it searchable, returns 'true' if that property is of a type which makes it searchable,
else 'false'. See also how search fields are generated in adl2views.xsl --> else 'false'. See also how search fields are generated in adl2views.xsl -->
@ -1198,24 +1234,22 @@ namespace <xsl:value-of select="$controllerns"/> {
<!-- the name of the value in the returned values from which the instance <!-- the name of the value in the returned values from which the instance
must be resolved --> must be resolved -->
<xsl:param name="valuename"/> <xsl:param name="valuename"/>
<xsl:if test="not( $property/@type='entity')"> <xsl:variable name="basetype">
<xsl:call-template name="base-type">
<xsl:with-param name="property" select="$property"/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="not( $basetype='entity')">
<xsl:message terminate="yes"> <xsl:message terminate="yes">
ADL: ERROR: property passed to fetch-property-instance whose type is not 'entity' ADL: ERROR: property passed to fetch-property-instance whose type is not 'entity'
</xsl:message> </xsl:message>
</xsl:if> </xsl:if>
hibernator.CreateCriteria(typeof(<xsl:value-of select="concat( $entityns, '.', $property/@entity)"/>)) hibernator.CreateCriteria(typeof(<xsl:value-of select="concat( $entityns, '.', $property/@entity)"/>))
<xsl:for-each select="//adl:entity[@name=$property/@entity]/adl:key/adl:property"> <xsl:for-each select="//adl:entity[@name=$property/@entity]/adl:key/adl:property">
.Add(Expression.Eq("<xsl:value-of select="@name"/>",<xsl:choose> <xsl:call-template name="add-hibernate-expression-eq">
<xsl:when test="@type='entity'">
<xsl:call-template name="fetch-property-instance">
<!-- recurse -->
<xsl:with-param name="property" select="."/> <xsl:with-param name="property" select="."/>
<xsl:with-param name="valuename" select="$valuename"/> <xsl:with-param name="value">Form["<xsl:value-of select="concat( 'instance.', $valuename)"/>"]</xsl:with-param>
</xsl:call-template> </xsl:call-template>
</xsl:when>
<xsl:when test="@type='integer'">Int32.Parse( Form["<xsl:value-of select="concat( 'instance.', $valuename)"/>"])</xsl:when>
<xsl:otherwise>Form["<xsl:value-of select="concat( 'instance.', $valuename)"/>"]</xsl:otherwise>
</xsl:choose>))
</xsl:for-each> </xsl:for-each>
.UniqueResult&lt;<xsl:value-of select="concat( $entityns, '.', @entity)"/>&gt;() .UniqueResult&lt;<xsl:value-of select="concat( $entityns, '.', @entity)"/>&gt;()
</xsl:template> </xsl:template>

View file

@ -13,8 +13,8 @@
Transform ADL into velocity view templates Transform ADL into velocity view templates
$Author: sb $ $Author: sb $
$Revision: 1.6 $ $Revision: 1.7 $
$Date: 2008-06-04 16:17:39 $ $Date: 2008-06-06 08:46:27 $
--> -->
<!-- WARNING WARNING WARNING: Do NOT reformat this file! <!-- WARNING WARNING WARNING: Do NOT reformat this file!
Whitespace (or lack of it) is significant! --> Whitespace (or lack of it) is significant! -->
@ -124,7 +124,7 @@
Auto generated Velocity maybe-delete form for <xsl:value-of select="@name"/>, Auto generated Velocity maybe-delete form for <xsl:value-of select="@name"/>,
generated from ADL. generated from ADL.
Generated using adl2views.xslt <xsl:value-of select="substring( '$Revision: 1.6 $', 10)"/> Generated using adl2views.xslt <xsl:value-of select="substring( '$Revision: 1.7 $', 10)"/>
</xsl:comment> </xsl:comment>
<xsl:call-template name="maybe-delete"> <xsl:call-template name="maybe-delete">
<xsl:with-param name="entity" select="."/> <xsl:with-param name="entity" select="."/>
@ -162,7 +162,7 @@
Auto generated Velocity maybe-delete form for <xsl:value-of select="@name"/>, Auto generated Velocity maybe-delete form for <xsl:value-of select="@name"/>,
generated from ADL. generated from ADL.
Generated using adl2views.xslt <xsl:value-of select="substring( '$Revision: 1.6 $', 10)"/> Generated using adl2views.xslt <xsl:value-of select="substring( '$Revision: 1.7 $', 10)"/>
</xsl:comment> </xsl:comment>
<xsl:call-template name="install-scripts"/> <xsl:call-template name="install-scripts"/>
</head> </head>
@ -243,7 +243,7 @@
Auto generated Velocity <xsl:value-of select="@name"/> form for <xsl:value-of select="ancestor::adl:entity/@name"/>, Auto generated Velocity <xsl:value-of select="@name"/> form for <xsl:value-of select="ancestor::adl:entity/@name"/>,
generated from ADL. generated from ADL.
Generated using adl2views.xslt <xsl:value-of select="substring( '$Revision: 1.6 $', 10)"/> Generated using adl2views.xslt <xsl:value-of select="substring( '$Revision: 1.7 $', 10)"/>
</xsl:comment> </xsl:comment>
#capturefor( title) #capturefor( title)
#if ( $instance) #if ( $instance)
@ -364,7 +364,7 @@
Auto generated Velocity form for <xsl:value-of select="ancestor::adl:entity/@name"/>, Auto generated Velocity form for <xsl:value-of select="ancestor::adl:entity/@name"/>,
generated from ADL. generated from ADL.
Generated using adl2views.xsl <xsl:value-of select="substring( '$Revision: 1.6 $', 10)"/> Generated using adl2views.xsl <xsl:value-of select="substring( '$Revision: 1.7 $', 10)"/>
</xsl:comment> </xsl:comment>
<xsl:call-template name="install-scripts"/> <xsl:call-template name="install-scripts"/>
<script type='text/javascript' language='JavaScript1.2'> <script type='text/javascript' language='JavaScript1.2'>
@ -737,7 +737,7 @@
<xsl:template match="adl:property[@type='link'or @type='list']"> <xsl:template match="adl:property[@type='link'or @type='list']">
<!-- note! this template is only intended to match properties in the context of a form: <!-- note! this template is only intended to match properties in the context of a form:
it may be we need to add a mode to indicate this! --> it may be we need to add a mode to indicate this! -->
<!-- for links we implement a shuffle widget, which extends over both columns --> <!-- for links and lists we implement a shuffle widget, which extends over both columns -->
<!-- TODO: Permissions! --> <!-- TODO: Permissions! -->
<xsl:param name="oddness" select="odd"/> <xsl:param name="oddness" select="odd"/>
<tr> <tr>
@ -764,7 +764,19 @@
</input> </input>
</td> </td>
<td class="widget" rowspan="2"> <td class="widget" rowspan="2">
${ShuffleWidgetHelper.SelectedOptions( "<xsl:value-of select="@name"/>", $instance.<xsl:value-of select="@name"/>)} <xsl:variable name="entityname" select="@entity"/>
<xsl:variable name="foreignkey" select="@farkey"/>
<xsl:variable name="allow-shuffle-back">
<xsl:choose>
<xsl:when test="@type='list' and //adl:entity[@name=$entityname]//adl:property[@name=$foreignkey and @required='true']">
<xsl:value-of select="'false'"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'true'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
${ShuffleWidgetHelper.SelectedOptions( "<xsl:value-of select="@name"/>", $instance.<xsl:value-of select="@name"/>, <xsl:value-of select="$allow-shuffle-back"/>)}
</td> </td>
</tr> </tr>
<tr> <tr>
@ -951,7 +963,7 @@
Auto generated Velocity list for <xsl:value-of select="@name"/>, Auto generated Velocity list for <xsl:value-of select="@name"/>,
generated from ADL. generated from ADL.
Generated using adl2views.xslt <xsl:value-of select="substring( '$Revision: 1.6 $', 10)"/> Generated using adl2views.xslt <xsl:value-of select="substring( '$Revision: 1.7 $', 10)"/>
</xsl:comment> </xsl:comment>
#capturefor( title) #capturefor( title)
@ -990,7 +1002,7 @@
Auto generated Velocity list for <xsl:value-of select="ancestor::adl:entity/@name"/>, Auto generated Velocity list for <xsl:value-of select="ancestor::adl:entity/@name"/>,
generated from ADL. generated from ADL.
Generated using adl2listview.xsl <xsl:value-of select="substring( '$Revision: 1.6 $', 10)"/> Generated using adl2listview.xsl <xsl:value-of select="substring( '$Revision: 1.7 $', 10)"/>
</xsl:comment> </xsl:comment>
<xsl:call-template name="install-scripts"/> <xsl:call-template name="install-scripts"/>
</head> </head>