private static void writeFormItemGetter( TextWriter writer, ModificationField field, string controlTypeForName, IEnumerable <CSharpParameter> requiredParams, bool controlIsLabeled, IEnumerable <CSharpParameter> preValueOptionalParams, string valueParamTypeName, IEnumerable <CSharpParameter> postValueOptionalParams, bool includeAdditionalValidationMethodParam, Func <string, string> formControlExpressionGetter, string preFormItemStatements = "", string postFormItemStatements = "", IEnumerable <string> additionalSummarySentences = null) { var parameters = new List <CSharpParameter>(); parameters.AddRange(requiredParams); parameters.Add(new CSharpParameter("FormItemSetup", "formItemSetup", "null")); parameters.Add(new CSharpParameter("IReadOnlyCollection<PhrasingComponent>", "label", "null")); if (controlIsLabeled) { parameters.Add(new CSharpParameter("IReadOnlyCollection<PhrasingComponent>", "formItemLabel", "null")); } parameters.AddRange(preValueOptionalParams); parameters.Add(new CSharpParameter(valueParamTypeName, "value", "null")); parameters.AddRange(postValueOptionalParams); if (includeAdditionalValidationMethodParam) { parameters.Add( new CSharpParameter( "System.Action<Validator>", "additionalValidationMethod", defaultValue: "null", description: "A method that takes the form control’s validator and performs additional validation.")); } CodeGenerationStatics.AddSummaryDocComment( writer, getFormItemGetterSummary(field, controlTypeForName, additionalSummarySentences ?? new string[0])); foreach (var i in parameters) { CodeGenerationStatics.AddParamDocComment(writer, i.Name, i.Description); } writer.WriteLine( "public FormItem " + EwlStatics.GetCSharpIdentifier("Get" + field.PascalCasedName + controlTypeForName + "FormItem") + "( " + parameters.Select(i => i.MethodSignatureDeclaration).GetCommaDelimitedStringFromCollection() + " ) {"); writer.WriteLine("label = label ?? \"{0}\".ToComponents();".FormatWith(getDefaultLabel(field))); writer.WriteLine( StringTools.ConcatenateWithDelimiter( Environment.NewLine, preFormItemStatements, "var formItem = {0}.ToFormItem( setup: formItemSetup, label: {1} );".FormatWith( formControlExpressionGetter(EwlStatics.GetCSharpIdentifier(field.PrivateFieldName)), controlIsLabeled ? "formItemLabel" : "label"), postFormItemStatements, "return formItem;")); writer.WriteLine("}"); }
private static void writeFormItemGetter( TextWriter writer, string controlType, ModificationField field, string controlTypeForName, string valueParamTypeName, IEnumerable <CSharpParameter> requiredControlParams, IEnumerable <CSharpParameter> requiredValidationParams, string valueParamDefaultValue, IEnumerable <CSharpParameter> optionalControlParams, bool includeValidationParams, IEnumerable <CSharpParameter> optionalValidationParams, string body, IEnumerable <string> additionalSummarySentences) { CodeGenerationStatics.AddSummaryDocComment(writer, getFormItemGetterSummary(field, controlTypeForName, additionalSummarySentences)); CodeGenerationStatics.AddParamDocComment(writer, "additionalValidationMethod", "Passes the labelAndSubject and a validator to the function."); CodeGenerationStatics.AddParamDocComment(writer, "validationList", validationListParamDocComment); var parameters = new List <CSharpParameter>(); if (valueParamTypeName.Length > 0) { parameters.Add(new CSharpParameter("bool", "useValueParameter")); } parameters.AddRange(requiredControlParams); parameters.AddRange(requiredValidationParams); parameters.Add(new CSharpParameter("string", "labelAndSubject", "\"" + getDefaultLabelAndSubject(field) + "\"")); parameters.Add(new CSharpParameter("FormItemLabel", "labelOverride", "null")); if (valueParamTypeName.Length > 0) { parameters.Add(new CSharpParameter(valueParamTypeName, "value", valueParamDefaultValue)); } parameters.AddRange(optionalControlParams); parameters.Add(new CSharpParameter("int?", "cellSpan", "null")); parameters.Add(new CSharpParameter("TextAlignment", "textAlignment", "TextAlignment.NotSpecified")); if (includeValidationParams) { parameters.Add(new CSharpParameter("System.Func<bool>", "validationPredicate", "null")); } parameters.AddRange(optionalValidationParams); if (includeValidationParams) { parameters.Add(new CSharpParameter("System.Action", "validationErrorNotifier", "null")); parameters.Add(new CSharpParameter("System.Action<string,Validator>", "additionalValidationMethod", "null")); parameters.Add(new CSharpParameter("ValidationList", "validationList", "null")); } writer.WriteLine( "public FormItem<" + controlType + "> " + StandardLibraryMethods.GetCSharpIdentifierSimple("Get" + field.PascalCasedName + controlTypeForName + "FormItem") + "( " + parameters.Select(i => i.MethodSignatureDeclaration).GetCommaDelimitedStringFromCollection() + " ) {"); writer.WriteLine(body); writer.WriteLine("}"); }
private static void writeGenericGetter( TextWriter writer, ModificationField field, bool includeValueParams, bool?includeValidationMethodReturnValue, string body) { CodeGenerationStatics.AddSummaryDocComment(writer, getFormItemGetterSummary(field, "", new string[0])); CodeGenerationStatics.AddParamDocComment(writer, "additionalValidationMethod", "Passes the labelAndSubject and a validator to the function."); CodeGenerationStatics.AddParamDocComment(writer, "validationList", validationListParamDocComment); var parameters = new List <CSharpParameter>(); if (includeValueParams) { parameters.Add(new CSharpParameter("bool", "useValueParameter")); } parameters.Add( new CSharpParameter("System.Func<" + (includeValueParams ? field.NullableTypeName : field.TypeName) + ",string,ControlType>", "controlGetter")); if (includeValidationMethodReturnValue.HasValue) { parameters.Add( includeValidationMethodReturnValue.Value ? new CSharpParameter("System.Func<ControlType,PostBackValueDictionary,string,Validator," + field.TypeName + ">", "validationMethod") : new CSharpParameter("System.Action<ControlType,PostBackValueDictionary,string,Validator>", "validationMethod")); } parameters.Add(new CSharpParameter("string", "labelAndSubject", "\"" + getDefaultLabelAndSubject(field) + "\"")); parameters.Add(new CSharpParameter("FormItemLabel", "labelOverride", "null")); if (includeValueParams) { parameters.Add(new CSharpParameter(field.NullableTypeName, "value", field.TypeIs(typeof(string)) ? "\"\"" : "null")); } parameters.Add(new CSharpParameter("int?", "cellSpan", "null")); parameters.Add(new CSharpParameter("TextAlignment", "textAlignment", "TextAlignment.NotSpecified")); if (includeValidationMethodReturnValue.HasValue) { parameters.Add(new CSharpParameter("System.Func<bool>", "validationPredicate", "null")); parameters.Add(new CSharpParameter("System.Action", "validationErrorNotifier", "null")); parameters.Add(new CSharpParameter("System.Action<string,Validator>", "additionalValidationMethod", "null")); parameters.Add(new CSharpParameter("ValidationList", "validationList", "null")); } writer.WriteLine( "public FormItem<ControlType> " + StandardLibraryMethods.GetCSharpIdentifierSimple("Get" + field.PascalCasedName + "FormItem") + "<ControlType>( " + parameters.Select(i => i.MethodSignatureDeclaration).GetCommaDelimitedStringFromCollection() + " ) where ControlType: Control {"); writer.WriteLine(body); writer.WriteLine("}"); }