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
$Author: sb $
$Revision: 1.9 $
$Date: 2008-06-04 16:17:39 $
$Revision: 1.10 $
$Date: 2008-06-06 08:46:27 $
-->
<!-- WARNING WARNING WARNING: Do NOT reformat this file!
@ -72,7 +72,7 @@
//
// Automatically generated abstract super class for controllers for the
// <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.
//
@ -135,7 +135,7 @@ namespace <xsl:value-of select="$controllerns"/> {
//
// Controller for auto-generated forms for editing <xsl:value-of select="@name"/>s
// 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.
//
@ -296,10 +296,12 @@ namespace <xsl:value-of select="$controllerns"/> {
</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:otherwise>Form[ "<xsl:value-of select="concat( 'instance.', @name)"/>"]</xsl:otherwise>
</xsl:choose>))
<xsl:call-template name="add-hibernate-expression-eq">
<xsl:with-param name="property" select="//adl:entity[@name=$keyentity]/adl:key/adl:property[position()=1]"/>
<xsl:with-param name="value">
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>
<xsl:otherwise>Form["<xsl:value-of select="concat( 'instance.', @name)"/>"]</xsl:otherwise>
</xsl:choose>
@ -386,7 +388,14 @@ namespace <xsl:value-of select="$controllerns"/> {
</xsl:choose>
</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
* 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')"/>)
{
<xsl:value-of select="concat( 'record.', @name)"/>.Add(
hibernator.CreateCriteria(typeof(<xsl:value-of select="@entity"/>))
.Add(Expression.Eq("<xsl:value-of select="@entity"/>Id", index))
.UniqueResult&lt;<xsl:value-of select="$entityns"/>.<xsl:value-of select="@entity"/>&gt;());
hibernator.CreateCriteria(typeof(<xsl:value-of select="concat( $entityns, '.', @entity)"/>))
<xsl:call-template name="add-hibernate-expression-eq">
<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>
@ -468,20 +480,10 @@ namespace <xsl:value-of select="$controllerns"/> {
{
<xsl:value-of select="concat( $entityns, '.', @entity)"/> item =
hibernator.CreateCriteria(typeof(<xsl:value-of select="@entity"/>))
.Add(Expression.Eq("<xsl:value-of select="$farkey"/>", <xsl:choose>
<xsl:when test="$farkeybasetype = 'string'">
index
</xsl:when>
<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>))
<xsl:call-template name="add-hibernate-expression-eq">
<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;();
if ( ! record.<xsl:value-of select="@name"/>.Contains( item))
@ -631,35 +633,19 @@ namespace <xsl:value-of select="$controllerns"/> {
<xsl:with-param name="property" select="."/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<xsl:when test="@type='message'">
<!-- search.Add( Expression.Like( "<xsl:value-of select="@name"/>.LocalText", "%"+Params["<xsl:value-of select="concat( 'search_', @name)"/>"]+"%")); -->
</xsl:when>
<xsl:when test="$base-type = 'integer'">
<xsl:choose>
<xsl:when test="$base-type='boolean'"/>
<xsl:when test="$base-type='link'"/>
<xsl:when test="$base-type='list'"/>
<xsl:otherwise>
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)"/>"])));
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: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>
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)"/>"]+"%"));
}
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<xsl:for-each select="adl:property[@distinct='user' or @distinct='all']">
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:call-template>
</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>
.UniqueResult&lt;<xsl:value-of select="concat( $entityns, '.', @name)"/>&gt;();
}
@ -877,17 +829,18 @@ namespace <xsl:value-of select="$controllerns"/> {
</xsl:for-each>
[AccessibleThrough(Verb.Get)]
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:call-template name="csharp-base-type">
<!-- xsl:call-template name="csharp-base-type">
<xsl:with-param name="property" select="."/>
</xsl:call-template>
</xsl:call-template -->
<xsl:value-of select="concat( ' ', @name, '_Value')"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="csharp-base-type">
<!-- xsl:call-template name="csharp-base-type">
<xsl:with-param name="property" select="."/>
</xsl:call-template>
</xsl:call-template -->
<xsl:value-of select="concat( ' ', @name)"/>
</xsl:otherwise>
</xsl:choose>
@ -901,7 +854,10 @@ namespace <xsl:value-of select="$controllerns"/> {
<xsl:when test="@type='entity'">
<xsl:variable name="entity" select="@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;()
</xsl:when>
<xsl:otherwise>
@ -921,10 +877,10 @@ namespace <xsl:value-of select="$controllerns"/> {
</xsl:for-each>
[AccessibleThrough(Verb.Get)]
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:call-template>
<xsl:value-of select="concat( ' ', @name)"/>
</xsl:call-template -->
string <xsl:value-of select="concat( ' ', @name)"/>
<xsl:if test="not( position() = last())">,</xsl:if>
</xsl:for-each>)
{
@ -934,7 +890,10 @@ namespace <xsl:value-of select="$controllerns"/> {
<xsl:value-of select="concat($entityns, '.', ancestor::adl:entity/@name)"/> record =
hibernator.CreateCriteria(typeof(<xsl:value-of select="concat($entityns, '.', ancestor::adl:entity/@name)"/>))
<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>
.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: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',
check that values are indeed distinct -->
<xsl:template name="check-property-value-distinct">
@ -989,22 +953,10 @@ namespace <xsl:value-of select="$controllerns"/> {
matchCriteria =
hibernator.CreateCriteria(typeof(<xsl:value-of select="$property/ancestor::adl:entity/@name"/>));
matchCriteria.Add(Expression.Eq("<xsl:value-of select="$property/@name"/>", <xsl:choose>
<xsl:when test="$basetype='string'">Form["<xsl:value-of select="concat('instance.', $property/@name)"/>"]</xsl:when>
<xsl:when test="$basetype='integer'">Int32.Parse( Form["<xsl:value-of select="concat('instance.', $property/@name)"/>"])</xsl:when>
<xsl:when test="$basetype='entity'">
<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>));
matchCriteria<xsl:call-template name="add-hibernate-expression-eq">
<xsl:with-param name="property" select="$property"/>
<xsl:with-param name="value" select="concat('instance.', $property/@name)"/>
</xsl:call-template>;
if ( record != null) {
/* 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:call-template>
</xsl:variable>
matchCriteria.Add(Expression.Not(Expression.Eq("<xsl:value-of select="@name"/>",<xsl:choose>
<xsl:when test="$keybasetype='entity'">
<xsl:call-template name="fetch-property-instance">
<!-- recurse -->
<xsl:with-param name="property" select="."/>
<xsl:with-param name="valuename" select="@name"/>
</xsl:call-template>
</xsl:when>
<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>)));
matchCriteria.Add(Expression.Not(<xsl:call-template name="hibernate-expression-eq">
<xsl:with-param name="property" select="."/>
<xsl:with-param name="value">
Form["<xsl:value-of select="concat( 'instance.', @name)"/>"]</xsl:with-param>
</xsl:call-template>));
</xsl:for-each>
}
@ -1111,10 +1057,6 @@ namespace <xsl:value-of select="$controllerns"/> {
</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:param name="property"/>
<xsl:variable name="entity" select="//adl:entity[@name=$property/@entity]"/>
@ -1169,6 +1111,100 @@ namespace <xsl:value-of select="$controllerns"/> {
</xsl:choose>
</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
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 -->
@ -1198,24 +1234,22 @@ namespace <xsl:value-of select="$controllerns"/> {
<!-- the name of the value in the returned values from which the instance
must be resolved -->
<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">
ADL: ERROR: property passed to fetch-property-instance whose type is not 'entity'
</xsl:message>
</xsl:if>
hibernator.CreateCriteria(typeof(<xsl:value-of select="concat( $entityns, '.', $property/@entity)"/>))
<xsl:for-each select="//adl:entity[@name=$property/@entity]/adl:key/adl:property">
.Add(Expression.Eq("<xsl:value-of select="@name"/>",<xsl:choose>
<xsl:when test="@type='entity'">
<xsl:call-template name="fetch-property-instance">
<!-- recurse -->
<xsl:with-param name="property" select="."/>
<xsl:with-param name="valuename" select="$valuename"/>
</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:call-template name="add-hibernate-expression-eq">
<xsl:with-param name="property" select="."/>
<xsl:with-param name="value">Form["<xsl:value-of select="concat( 'instance.', $valuename)"/>"]</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
.UniqueResult&lt;<xsl:value-of select="concat( $entityns, '.', @entity)"/>&gt;()
</xsl:template>

View file

@ -13,8 +13,8 @@
Transform ADL into velocity view templates
$Author: sb $
$Revision: 1.6 $
$Date: 2008-06-04 16:17:39 $
$Revision: 1.7 $
$Date: 2008-06-06 08:46:27 $
-->
<!-- WARNING WARNING WARNING: Do NOT reformat this file!
Whitespace (or lack of it) is significant! -->
@ -124,7 +124,7 @@
Auto generated Velocity maybe-delete form for <xsl:value-of select="@name"/>,
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:call-template name="maybe-delete">
<xsl:with-param name="entity" select="."/>
@ -162,7 +162,7 @@
Auto generated Velocity maybe-delete form for <xsl:value-of select="@name"/>,
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:call-template name="install-scripts"/>
</head>
@ -243,7 +243,7 @@
Auto generated Velocity <xsl:value-of select="@name"/> form for <xsl:value-of select="ancestor::adl:entity/@name"/>,
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>
#capturefor( title)
#if ( $instance)
@ -364,7 +364,7 @@
Auto generated Velocity form for <xsl:value-of select="ancestor::adl:entity/@name"/>,
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:call-template name="install-scripts"/>
<script type='text/javascript' language='JavaScript1.2'>
@ -737,7 +737,7 @@
<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:
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! -->
<xsl:param name="oddness" select="odd"/>
<tr>
@ -764,7 +764,19 @@
</input>
</td>
<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>
</tr>
<tr>
@ -951,7 +963,7 @@
Auto generated Velocity list for <xsl:value-of select="@name"/>,
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>
#capturefor( title)
@ -990,7 +1002,7 @@
Auto generated Velocity list for <xsl:value-of select="ancestor::adl:entity/@name"/>,
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:call-template name="install-scripts"/>
</head>