From dff905227d388dc33eeed809c4155fa3f6257f93 Mon Sep 17 00:00:00 2001 From: sb <sb> Date: Thu, 15 May 2008 16:29:24 +0000 Subject: [PATCH] Spent a lot of time trying to get Andrew's (very clever) automatic type resolution to widgets working, but without good success, so I've backed out a lot of code. It may still be the right approach, but will take much more work to get working. --- transforms01/adl2controllerclasses.xslt | 46 +++++++++++++++++++------ transforms01/adl2views.xslt | 38 +++++++++++++------- 2 files changed, 61 insertions(+), 23 deletions(-) diff --git a/transforms01/adl2controllerclasses.xslt b/transforms01/adl2controllerclasses.xslt index ba79c6d..9941d90 100755 --- a/transforms01/adl2controllerclasses.xslt +++ b/transforms01/adl2controllerclasses.xslt @@ -9,8 +9,8 @@ Transform ADL into (partial) controller classes $Author: sb $ - $Revision: 1.25 $ - $Date: 2008-05-13 10:36:46 $ + $Revision: 1.26 $ + $Date: 2008-05-15 16:29:24 $ --> <!-- WARNING WARNING WARNING: Do NOT reformat this file! @@ -71,7 +71,7 @@ // // 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.25 $', 10)"/> +// adl2controllerclasses.xslt version <xsl:value-of select="substring( '$Revision: 1.26 $', 10)"/> // // This file is automatically generated; DO NOT EDIT IT. // @@ -128,7 +128,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.25 $', 10)"/> +// adl2controllerclasses.xslt version <xsl:value-of select="substring( '$Revision: 1.26 $', 10)"/> // // This file is automatically generated; DO NOT EDIT IT. // @@ -148,6 +148,7 @@ using Castle.MonoRail.Framework.Helpers; using Cygnet.Exceptions; using Cygnet.Web.Helpers; using Cygnet.Web.Controllers; +using Cygnet.Web.SmartControls; using NHibernate; using NHibernate.Expression; using Castle.MonoRail.Framework; @@ -164,13 +165,38 @@ namespace <xsl:value-of select="$controllerns"/> { /// /// DO NOT EDIT THIS FILE! /// </summary> - [ Layout("<xsl:value-of select="$layout-name"/>"), - Rescue("<xsl:value-of select="$rescue-name"/>"), - ControllerDetails("<xsl:value-of select="@name"/>", - Area = "<xsl:value-of select="$area-name"/>")] - public partial class <xsl:value-of select="@name"/>Controller : <xsl:value-of select="concat( 'Abstract', /adl:application/@name, 'Controller')"/> { + [ + Layout("<xsl:value-of select="$layout-name"/>"), + Rescue("<xsl:value-of select="$rescue-name"/>"), + ControllerDetails("<xsl:value-of select="@name"/>", Area = "<xsl:value-of select="$area-name"/>"), + Helper(typeof(<xsl:value-of select="concat( @name, 'FieldHelper')"/>), "<xsl:value-of select="concat( @name, 'FieldHelper')"/>") + ] + public partial class <xsl:value-of select="concat( @name, 'Controller')"/>Controller : <xsl:value-of select="concat( 'Abstract', /adl:application/@name, 'Controller')"/> { - <xsl:if test="adl:form"> + /* The SmartFormHelper stuff in generated controller classes does not yet work. There is some + * hope that in future it will offer definite benefits and in the mean time it is doing no harm. + * However if you are looking for bugs look elsewhere - this is not currently used */ + protected class <xsl:value-of select="concat( @name, 'FieldHelper')"/> : SmartFormHelper { + public <xsl:value-of select="concat( @name, 'FieldHelper')"/>() { + <xsl:for-each select="descendant::adl:property[@type='entity']"> + <xsl:variable name="entityname" select="@entity"/> + <xsl:variable name="entity" select="//adl:entity[@name=$entityname]"/> + <xsl:choose> + <xsl:when test="$entity/@foreign='true'"> + /* Entity <xsl:value-of select="$entityname"/> is foreign..? */ + <xsl:variable name="foreignkey" select="$entity/adl:key/adl:property[position()=1]/@name"/> + Register<<xsl:value-of select="concat( $entityns, '.', $entityname)"/>>( "", + new TypeMenuControl<<xsl:value-of select="concat( $entityns, '.', $entityname)"/>>( "<xsl:value-of select="$foreignkey"/>","<xsl:value-of select="$foreignkey"/>")); + </xsl:when> + <xsl:otherwise> + Register<<xsl:value-of select="concat( $entityns, '.', $entityname)"/>>( "", EntityMenuControl<<xsl:value-of select="concat( $entityns, '.', $entityname)"/>>.Instance); + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + } + } + + <xsl:if test="adl:form"> <!-- unless there's at least one form, we won't generate a 'store' method --> /// <summary> /// Store the record represented by the parameters passed in an HTTP service diff --git a/transforms01/adl2views.xslt b/transforms01/adl2views.xslt index 02de96c..71154d4 100755 --- a/transforms01/adl2views.xslt +++ b/transforms01/adl2views.xslt @@ -12,8 +12,8 @@ Transform ADL into velocity view templates $Author: sb $ - $Revision: 1.16 $ - $Date: 2008-05-09 16:12:12 $ + $Revision: 1.17 $ + $Date: 2008-05-15 16:30:25 $ --> <!-- WARNING WARNING WARNING: Do NOT reformat this file! Whitespace (or lack of it) is significant! --> @@ -104,7 +104,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.16 $', 10)"/> + Generated using adl2views.xslt <xsl:value-of select="substring( '$Revision: 1.17 $', 10)"/> </xsl:comment> <xsl:call-template name="maybe-delete"> <xsl:with-param name="entity" select="."/> @@ -141,7 +141,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.16 $', 10)"/> + Generated using adl2views.xslt <xsl:value-of select="substring( '$Revision: 1.17 $', 10)"/> </xsl:comment> <xsl:call-template name="install-scripts"/> </head> @@ -227,7 +227,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.16 $', 10)"/> + Generated using adl2views.xslt <xsl:value-of select="substring( '$Revision: 1.17 $', 10)"/> </xsl:comment> #capturefor( title) #if ( $instance) @@ -351,7 +351,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.16 $', 10)"/> + Generated using adl2views.xsl <xsl:value-of select="substring( '$Revision: 1.17 $', 10)"/> </xsl:comment> <xsl:call-template name="install-scripts"/> <script type='text/javascript' language='JavaScript1.2'> @@ -482,7 +482,9 @@ </xsl:when> <xsl:otherwise> <!-- create a hidden widget for the natural primary key --> + #if ( $instance) ${FormHelper.HiddenField( "instance.<xsl:value-of select="$keyname"/>")} + #end </xsl:otherwise> </xsl:choose> </xsl:for-each> @@ -994,35 +996,45 @@ <xsl:choose> <xsl:when test="@type='entity'"> <xsl:value-of select="concat('$instance.', @name, '.UserIdentifier')"/> - ${FormHelper.HiddenField( <xsl:value-of select="concat('$instance.', @name, '.KeyString')"/>)} + #if ( $instance) + ${FormHelper.HiddenField( "<xsl:value-of select="concat('instance.', @name, '.KeyString')"/>")} + #end </xsl:when> <!-- TODO: if @type='list' or 'link', should generate Velocity to generate ul list of UserIdentifiers --> <xsl:otherwise> <xsl:value-of select="concat('$instance.', @name)"/> - ${FormHelper.HiddenField( <xsl:value-of select="concat('$instance.', @name)"/>)} + #if ( $instance) + ${FormHelper.HiddenField( "<xsl:value-of select="concat('instance.', @name)"/>")} + #end </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:when test="$permission='insert' or $permission='noedit'"> + #if ( $instance) #if ($instance.<xsl:value-of select="@name"/>) <xsl:choose> <xsl:when test="@type='entity'"> <xsl:value-of select="concat('$instance.', @name, '.UserIdentifier')"/> - ${FormHelper.HiddenField( <xsl:value-of select="concat('$instance.', @name, '.KeyString')"/>)} + ${FormHelper.HiddenField( "<xsl:value-of select="concat('instance.', @name, '.KeyString')"/>")} </xsl:when> <xsl:otherwise> <xsl:value-of select="concat('$instance.', @name)"/> - ${FormHelper.HiddenField( <xsl:value-of select="concat('$instance.', @name)"/>)} + ${FormHelper.HiddenField( "<xsl:value-of select="concat('instance.', @name)"/>")} </xsl:otherwise> </xsl:choose> #else <xsl:call-template name="widget"> <xsl:with-param name="property" select="."/> </xsl:call-template> - #end - </xsl:when> + #end + #else + <xsl:call-template name="widget"> + <xsl:with-param name="property" select="."/> + </xsl:call-template> + #end + </xsl:when> <!-- TODO: if $permission='insert', then you should get an editable widget if there is no current value, else a 'not authorised' message --> <!-- TODO: if $permission='noedit', then you should get an editable widget if there @@ -1347,7 +1359,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.16 $', 10)"/> + Generated using adl2listview.xsl <xsl:value-of select="substring( '$Revision: 1.17 $', 10)"/> </xsl:comment> <xsl:call-template name="install-scripts"/> </head>