From: Eric C. <ecr...@us...> - 2006-09-25 19:11:22
|
User: ecrutchfield Date: 06/09/25 12:11:22 Modified: andromda-aspdotnet/src/main/resources/templates/aspdotnet/web2005 webformBase.cs.vsl andromda-aspdotnet/src/main/resources/templates/aspdotnet/uicontrollers formImplMacros.vm andromda-aspdotnet/src/main/resources/templates/aspdotnet/web2003 webformBase.aspx.cs.vsl Added: andromda-aspdotnet/src/main/resources/templates/aspdotnet validation.vm Log: refactor form population and add validation of fields Revision Changes Path 1.1 cartridges/andromda-aspdotnet/src/main/resources/templates/aspdotnet/validation.vm Index: validation.vm =================================================================== ## ## renderValidationControl - Renders the appropriate validation control ## based on the type of field being evaluated. ## #macro (renderValidationControl $field $ownerParameter ) #if ($field.backingListName) #set ($fieldName = $field.name) #else #set ($fieldName = $field.getFormPropertyId($ownerParameter)) #end #foreach ($validatorType in $field.validatorTypes) ########### CompareValidator - DataType check #if ($validatorType.equalsIgnoreCase("integer") || $validatorType.equalsIgnoreCase("short") || $validatorType.equalsIgnoreCase("double") || $validatorType.equalsIgnoreCase("float") || $validatorType.equalsIgnoreCase("date")) #if ($validatorType.equalsIgnoreCase("integer") || $validatorType.equalsIgnoreCase("short")) #set ($dataType = "Integer") #elseif ($validatorType.equalsIgnoreCase("float") || $validatorType.equalsIgnoreCase("double")) #set ($dataType = "Double") #elseif ($validatorType.equalsIgnoreCase("date")) #set ($dataType = "Date") #else #set ($dataType = "String") #end <asp:CompareValidator runat="server" id="${fieldName}CV_$validatorType" Operator="DataTypeCheck" Type="$dataType" ControlToValidate="$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}$type" /> #end ########### CompareValidator - validWhen #if ($validatorType.equalsIgnoreCase("validwhen")) <asp:CompareValidator runat="server" id="${fieldName}CV_$validatorType" ControlToValidate="$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}$type" #foreach ($validatorVar in $field.validatorVars) #set ($operator = $validatorVar.get(0)) #set ($dataType = $stringUtils.capitalise($validatorVar.get(2))) #if ($validatorVar.get(2).toString().equalsIgnoreCase("param")) #set ($compareType = "ControlToCompare") #set ($compareTo = "$stringUtils.lowerCamelCaseName(${action.name})_$validatorVar.get(1)") #else #set ($compareType = "ValueToCompare") #set ($compareTo = "$validatorVar.get(1)") #end Operator="#convertOperator($operator)" ${compareType}="$compareTo" Type="$dataType" #end /> #end ########### RangeValidator #if ($validatorType.equalsIgnoreCase("intRange") || $validatorType.equalsIgnoreCase("doubleRange") || $validatorType.equalsIgnoreCase("floatRange") || $validatorType.equalsIgnoreCase("minlength") || $validatorType.equalsIgnoreCase("maxlength")) #if ($validatorType.equalsIgnoreCase("intRange") || $validatorType.equalsIgnoreCase("minlength") || $validatorType.equalsIgnoreCase("maxlength")) #set ($dataType = "Integer") #elseif ($validatorType.equalsIgnoreCase("floatRange") || $validatorType.equalsIgnoreCase("doubleRange")) #set ($dataType = "Double") #end <asp:RangeValidator runat="server" id="${fieldName}RV_$validatorType" Type="$dataType" ControlToValidate="$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}$type" #foreach ($validatorVar in $field.validatorVars) #set ($varValue = $validatorVar.get(1)) #set ($rangeMin = $validatorVar.get(0).startsWith("min")) #set ($rangeMax = $validatorVar.get(0).startsWith("max")) #if ($rangeMin) MinimumValue="${varValue}" #elseif ($rangeMax) MaximumValue="${varValue}" #end #end /> #end ########### RegularExpressionValidator #if ($validatorType.equalsIgnoreCase("mask")) <asp:RegularExpressionValidator runat="server" id="${fieldName}REV_$validatorType" ControlToValidate="$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}$type" #foreach ($validatorVar in $field.validatorVars) ValidationExpression="$validatorVar.get(1)" #end /> #end #end #end ## ## renderValidationAttribute - Renders the appropriate attribute ## for the validation control. ## #macro(renderValidationAttribute $field $ownerParameter) #if ($field.backingListName) #set ($fieldName = $field.name) #else #set ($fieldName = $field.getFormPropertyId($ownerParameter)) #end #foreach ($validatorType in $field.validatorTypes) ########### CompareValidator - DataType/validWhen check #if ($validatorType.equalsIgnoreCase("integer") || $validatorType.equalsIgnoreCase("short") || $validatorType.equalsIgnoreCase("double") || $validatorType.equalsIgnoreCase("float") || $validatorType.equalsIgnoreCase("date") || $validatorType.equalsIgnoreCase("validwhen")) protected System.Web.UI.WebControls.CompareValidator ${fieldName}CV_$validatorType; #end ########### RangeValidator #if ($validatorType.equalsIgnoreCase("intRange") || $validatorType.equalsIgnoreCase("doubleRange") || $validatorType.equalsIgnoreCase("floatRange") || $validatorType.equalsIgnoreCase("minlength") || $validatorType.equalsIgnoreCase("maxlength")) protected System.Web.UI.WebControls.RangeValidator ${fieldName}RV_$validatorType; #end ########### RegularExpressionValidator #if ($validatorType.equalsIgnoreCase("mask")) protected System.Web.UI.WebControls.RegularExpressionValidator ${fieldName}REV_$validatorType; #end #end #end ## ## renderValidationErrorMessage - Renders the appropriate error message ## for the validation control. ## #macro(renderValidationErrorMessage $field $ownerParameter) #if ($dotNetVersion=="2.0") #set ($resourceBegin = "Resources.GeneratedResources.errors_") #set ($resourceEnd = "") #else #set ($resourceBegin = 'resourceManager.GetString("') #set ($resourceEnd = '")') #end #if ($field.backingListName) #set ($fieldName = $field.name) #else #set ($fieldName = $field.getFormPropertyId($ownerParameter)) #end #set ($displayName = $stringUtils.capitalise($fieldName)) #foreach ($validatorType in $field.validatorTypes) ########### CompareValidator - DataType/validWhen check #if ($validatorType.equalsIgnoreCase("integer") || $validatorType.equalsIgnoreCase("short") || $validatorType.equalsIgnoreCase("double") || $validatorType.equalsIgnoreCase("float")) this.${fieldName}CV_${validatorType}.ErrorMessage = String.Format(${resourceBegin}${validatorType}${resourceEnd}, "$displayName"); #end #if ($validatorType.equalsIgnoreCase("date")) this.${fieldName}CV_${validatorType}.ErrorMessage = String.Format(${resourceBegin}${validatorType}${resourceEnd}, "$displayName", "$defaultDateFormat"); #end ########### RangeValidator #if ($validatorType.equalsIgnoreCase("intRange") || $validatorType.equalsIgnoreCase("doubleRange") || $validatorType.equalsIgnoreCase("floatRange") || $validatorType.equalsIgnoreCase("minlength") || $validatorType.equalsIgnoreCase("maxlength")) #foreach ($validatorVar in $field.validatorVars) #if ($validatorVar.get(0).startsWith("min")) #set ($rangeMin = $validatorVar.get(1)) #else #set ($rangeMax = $validatorVar.get(1)) #end #end this.${fieldName}RV_${validatorType}.ErrorMessage = String.Format(${resourceBegin}range${resourceEnd}, new object[]{"${displayName}", "${rangeMin}", "${rangeMax}"}); #end ########### RegularExpressionValidator #if ($validatorType.equalsIgnoreCase("mask")) this.${fieldName}REV_${validatorType}.ErrorMessage = String.Format(${resourceBegin}invalid${resourceEnd}, "${displayName}"); #end #if ($validatorType.equalsIgnoreCase("validwhen")) this.${fieldName}CV_${validatorType}.ErrorMessage = String.Format(${resourceBegin}invalid${resourceEnd}, "${displayName}"); #end #end #end ## ## convertOperator - converts a C# style operator to an operator ## compatible with the Operator property of a validation control ## #macro(convertOperator $op) #if ($op.equals("=="))Equal#elseif ($op.equals("!="))NotEqual#elseif ($op.equals("<"))LessThan#elseif ($op.equals("<="))LessThanEqual#elseif ($op.equals(">"))GreaterThan#elseif ($op.equals(">="))GreaterThanEqual#end #end 1.2 +33 -39 cartridges/andromda-aspdotnet/src/main/resources/templates/aspdotnet/web2005/webformBase.cs.vsl Index: webformBase.cs.vsl =================================================================== RCS file: /cvsroot/andromdaplugins/cartridges/andromda-aspdotnet/src/main/resources/templates/aspdotnet/web2005/webformBase.cs.vsl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -w -r1.1 -r1.2 --- webformBase.cs.vsl 17 Sep 2006 17:30:41 -0000 1.1 +++ webformBase.cs.vsl 25 Sep 2006 19:11:21 -0000 1.2 @@ -1,23 +1,3 @@ -## -## This macro renders the line that sets the property -## on the controllers form using the value of the input field defined on the page -## -#macro( populateFormProperties ) -#if(!$action.tableAction && !$action.tableLink) -#foreach($parameter in ${action.parameters}) -#if(!${parameter.hidden} && !${parameter.inputTable}) -#set($viewType = ${parameter.viewType}) -#set($fieldName = "this.$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}$viewType") -## if we can't get the value from the field (e.g. Label) then we need to get it from it's Hidden counterpart. -#if($viewType.equalsIgnoreCase("HyperLink") || $viewType.equalsIgnoreCase("Label")) -#set($fieldName = "this.$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}Hidden") -#end -#set($formProperty = "$parameter.capitalisedName") - org.andromda.cartridges.aspdotnet.FormPopulator.PopulateForm(${fieldName}, base.Controller.${action.formImplementationPropertyName}, "${formProperty}"); -#end -#end -#end -#end #set($generatedFile = "${webform.fullyQualifiedPath}/${webform.normalizedName}Base.cs") #set($key = "@${webform.useCase.normalizedName}.${webform.normalizedName}") using System; @@ -41,29 +21,23 @@ /// </summary> public abstract class ${webform.normalizedName}Base : ${webform.useCase.normalizedName}PageBase { - protected System.Web.UI.WebControls.Literal ${webform.normalizedName}Page; -#foreach($action in ${webform.actions}) +## Render attributes for any controls on the page +#render2005ActionInput() +## Now render attributes for any validator controls on the page +#foreach($action in ${webform.outgoing}) #foreach($parameter in ${action.parameters}) -#set($aspType = "${parameter.getViewType()}") -#if(!${parameter.hidden}) - protected System.Web.UI.WebControls.Label $stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}lbl; -#end -#if($aspType.equals('file')) - protected System.Web.UI.WebControls.FileUpload ${parameter.name}FileSelector; +#if ($parameter.validationRequired) +#if (!$parameter.complex) +#renderValidationAttribute($parameter "") #else - protected System.Web.UI.WebControls.${parameter.getViewType()} $stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}$aspType; -#if(${aspType.equalsIgnoreCase('hyperlink')}||${aspType.equalsIgnoreCase('label')}) - protected System.Web.UI.HtmlControls.HtmlInputHidden $stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}Hidden; +#foreach ($attribute in $parameter.attributes) +#if ($attribute.validationRequired) +#renderValidationAttribute($attribute $parameter) +#end #end #end #end - protected System.Web.UI.WebControls.Button ${action.actionMethodName}Button; #end - -##Now deal with tables -#foreach($parameter in $webform.tables) - protected System.Web.UI.WebControls.GridView ${parameter.name}DG; - protected System.Web.UI.WebControls.Label ${parameter.name}Count; #end protected void Page_Load(object sender, System.EventArgs e) @@ -79,10 +53,30 @@ this.$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}${parameter.viewType}.DataSource = base.Controller.${action.formImplementationPropertyName}.Get$stringUtils.capitalize(${parameter.backingListName})(); this.$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}${parameter.viewType}.DataBind(); #end +## Now render any error messages for the validation controls. This is done +## here because we need to do some string manipulation on the value we pull from +## the resource. +#if ($parameter.validationRequired) +#if (!$parameter.complex) +#renderValidationErrorMessage($parameter "") +#else +#foreach ($attribute in $parameter.attributes) +#if ($attribute.validationRequired) +#renderValidationErrorMessage($attribute $parameter) +#end +#end +#end +#end #end #end #end #foreach($parameter in $webform.tables) +##@todo We should be able to set the data source for this.${parameter.name}DG, +## but how do we know which Form object to pull it from. There could have +## been multiple views incoming to this view, so we can't be sure of +## the name of the property on the controller where the value was set. +## this.${parameter.name}DG.DataSource = this.Controller.${parameter.action.formImplementationPropertyName}.$stringUtils.capitalise(${parameter.name}); +## this.${parameter.name}DG.DataBind(); if(!(this.${parameter.name}DG.PageCount > 1)) ${parameter.name}DG.AllowPaging = false; if(this.${parameter.name}DG.Rows.Count < 1) @@ -103,7 +97,7 @@ protected void $stringUtils.capitalize(${parameter.name})DG_SelectedIndexChanged(object sender, System.EventArgs e) { //${toDoTag} Not really sure what to do here. - //${action.getNavigation()} + //action.getNavigation() } protected void $stringUtils.capitalize(${parameter.name})DG_Page(Object sender, GridViewPageEventArgs e) @@ -135,7 +129,7 @@ protected abstract void PageLoad(); #foreach($table in $webform.tables) - protected void ${table.name}DG_ItemCommand(object source, DataGridCommandEventArgs e) + protected void $stringUtils.capitalise(${table.name})_RowCommand(object source, GridViewCommandEventArgs e) { System.Collections.Specialized.StringDictionary nameValuePairs = org.andromda.cartridges.aspdotnet.StringUtils.ParseCommandArgument(e.CommandArgument); switch (e.CommandName) 1.2 +20 -0 cartridges/andromda-aspdotnet/src/main/resources/templates/aspdotnet/uicontrollers/formImplMacros.vm Index: formImplMacros.vm =================================================================== RCS file: /cvsroot/andromdaplugins/cartridges/andromda-aspdotnet/src/main/resources/templates/aspdotnet/uicontrollers/formImplMacros.vm,v retrieving revision 1.1 retrieving revision 1.2 diff -u -w -r1.1 -r1.2 --- formImplMacros.vm 17 Sep 2006 17:30:51 -0000 1.1 +++ formImplMacros.vm 25 Sep 2006 19:11:21 -0000 1.2 @@ -72,6 +72,26 @@ ## +## This macro renders the code that sets the property +## of the form using the value of the input field defined on the page. +## +#macro( populateFormProperties ) +#if(!$action.tableAction && !$action.tableLink) +#foreach($parameter in ${action.parameters}) +#if(!${parameter.inputHidden} && !${parameter.inputTable}) +#set($viewType = ${parameter.viewType}) +#set($fieldName = "this.$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}$viewType") +## if we can't get the value from the field (e.g. Label) then we need to get it from it's Hidden counterpart. +#if($viewType.equalsIgnoreCase("HyperLink") || $viewType.equalsIgnoreCase("Label")) +#set($fieldName = "this.$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}Hidden") +#end +#set($formProperty = "$parameter.capitalisedName") + org.andromda.cartridges.aspdotnet.FormPopulator.PopulateForm(${fieldName}, base.Controller.${action.formImplementationPropertyName}, "${formProperty}"); +#end +#end +#end +#end +## ## This macro renders the date/time formatters within the form implementation ## #macro(renderDateTimeFormatters $field $ownerParameter) 1.2 +26 -39 cartridges/andromda-aspdotnet/src/main/resources/templates/aspdotnet/web2003/webformBase.aspx.cs.vsl Index: webformBase.aspx.cs.vsl =================================================================== RCS file: /cvsroot/andromdaplugins/cartridges/andromda-aspdotnet/src/main/resources/templates/aspdotnet/web2003/webformBase.aspx.cs.vsl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -w -r1.1 -r1.2 --- webformBase.aspx.cs.vsl 17 Sep 2006 17:30:45 -0000 1.1 +++ webformBase.aspx.cs.vsl 25 Sep 2006 19:11:21 -0000 1.2 @@ -1,23 +1,3 @@ -## -## This macro renders the line that sets the property -## on the controllers form using the value of the input field defined on the page -## -#macro( populateFormProperties ) -#if(!$action.tableAction && !$action.tableLink) -#foreach($parameter in ${action.parameters}) -#if(!${parameter.hidden} && !${parameter.inputTable}) -#set($viewType = ${parameter.viewType}) -#set($fieldName = "this.$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}$viewType") -## if we can't get the value from the field (e.g. Label) then we need to get it from it's Hidden counterpart. -#if($viewType.equalsIgnoreCase("HyperLink") || $viewType.equalsIgnoreCase("Label")) -#set($fieldName = "this.$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}Hidden") -#end -#set($formProperty = "$parameter.capitalisedName") - org.andromda.cartridges.aspdotnet.FormPopulator.PopulateForm(${fieldName}, base.Controller.${action.formImplementationPropertyName}, "${formProperty}"); -#end -#end -#end -#end #set($generatedFile = "${webform.fullyQualifiedPath}/${webform.normalizedName}Base.cs") #set($key = "@${webform.useCase.normalizedName}.${webform.normalizedName}") using System; @@ -41,29 +21,22 @@ /// </summary> public abstract class ${webform.normalizedName}Base : ${webform.useCase.normalizedName}PageBase { - protected System.Web.UI.WebControls.Literal ${webform.normalizedName}Page; -#foreach($action in ${webform.actions}) +#render2003ActionInput() +## Now render attributes for any validator controls on the page +#foreach($action in ${webform.outgoing}) #foreach($parameter in ${action.parameters}) -#set($aspType = "${parameter.getViewType()}") -#if(!${parameter.hidden}) - protected System.Web.UI.WebControls.Label $stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}lbl; -#end -#if(${aspType.equalsIgnoreCase('file')}) - protected System.Web.UI.HtmlControls.HtmlInputFile ${parameter.name}FileSelector; +#if ($parameter.validationRequired) +#if (!$parameter.complex) +#renderValidationAttribute($parameter "") #else - protected System.Web.UI.WebControls.${parameter.getViewType()} $stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}$aspType; -#if(${aspType.equalsIgnoreCase('hyperlink')}||${aspType.equalsIgnoreCase('label')}) - protected System.Web.UI.HtmlControls.HtmlInputHidden $stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}Hidden; +#foreach ($attribute in $parameter.attributes) +#if ($attribute.validationRequired) +#renderValidationAttribute($attribute $parameter) +#end #end #end #end - protected System.Web.UI.WebControls.Button ${action.actionMethodName}Button; #end - -##Now deal with tables -#foreach($parameter in $webform.tables) - protected System.Web.UI.WebControls.DataGrid ${parameter.name}DG; - protected System.Web.UI.WebControls.Label ${parameter.name}Count; #end #region Web Form Designer generated code @@ -103,7 +76,7 @@ #foreach($action in ${webform.outgoing}) #if(!$action.hyperlink) #foreach($parameter in ${action.parameters}) -#if(!${parameter.isHidden()}) +#if(!${parameter.inputHidden}) this.$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}lbl.Text = resourceManager.GetString("${key}.${parameter.name}lbl"); #if(!${parameter.getViewType().equals('file')}) $stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}${parameter.getViewType()}.ToolTip = resourceManager.GetString("${key}.${parameter.name}${parameter.getViewType()}.Help"); @@ -122,6 +95,20 @@ this.$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}${parameter.viewType}.DataSource = base.Controller.${action.formImplementationPropertyName}.Get$stringUtils.capitalize(${parameter.backingListName})(); this.$stringUtils.lowerCamelCaseName(${action.name})_${parameter.name}${parameter.viewType}.DataBind(); #end +## Now render any error messages for the validation controls. This is done +## here because we need to do some string manipulation on the value we pull from +## the resource. +#if ($parameter.validationRequired) +#if (!$parameter.complex) +#renderValidationErrorMessage($parameter "") +#else +#foreach ($attribute in $parameter.attributes) +#if ($attribute.validationRequired) +#renderValidationErrorMessage($attribute $parameter) +#end +#end +#end +#end #end #end #end @@ -155,7 +142,7 @@ private void ${parameter.name}DG_SelectedIndexChanged(object sender, System.EventArgs e) { //${toDoTag} Not really sure what to do here. - //${action.getNavigation()} + //\${action.getNavigation()} } protected void $stringUtils.capitalize(${parameter.name})DG_Page(Object sender, DataGridPageChangedEventArgs e) |