Beispiel #1
0
        private static void writeGenericGetter(TextWriter writer, ModificationField field)
        {
            CodeGenerationStatics.AddSummaryDocComment(writer, getFormItemGetterSummary(field, "", new string[0]));

            var parameters = new List <CSharpParameter>();

            parameters.Add(new CSharpParameter("System.Func<{0},IReadOnlyCollection<FlowComponent>>".FormatWith(field.NullableTypeName), "contentGetter"));
            parameters.Add(new CSharpParameter("FormItemSetup", "setup", "null"));
            parameters.Add(new CSharpParameter("IReadOnlyCollection<PhrasingComponent>", "label", "null"));
            parameters.Add(
                new CSharpParameter(
                    field.TypeIs(typeof(string)) ? field.NullableTypeName : "SpecifiedValue<{0}>".FormatWith(field.NullableTypeName),
                    "value",
                    "null"));
            parameters.Add(new CSharpParameter("System.Func<System.Action<{0}>,EwfValidation>".FormatWith(field.TypeName), "validationGetter", "null"));

            writer.WriteLine(
                "public FormItem " + EwlStatics.GetCSharpIdentifier("Get" + field.PascalCasedName + "FormItem") + "( " +
                parameters.Select(i => i.MethodSignatureDeclaration).GetCommaDelimitedStringFromCollection() + " ) {");
            writer.WriteLine("label = label ?? \"{0}\".ToComponents();".FormatWith(getDefaultLabel(field)));
            writer.WriteLine(
                "return {0}.ToFormItem( setup: setup, label: label, validation: {1} );".FormatWith(
                    "contentGetter( {0} )".FormatWith(
                        field.TypeIs(typeof(string))
                                                        ? "value ?? {0}".FormatWith(EwlStatics.GetCSharpIdentifier(field.Name))
                                                        : "value != null ? value.Value : {0}".FormatWith(EwlStatics.GetCSharpIdentifier(field.Name))),
                    "validationGetter?.Invoke( v => {0} = v )".FormatWith(EwlStatics.GetCSharpIdentifier(field.Name))));
            writer.WriteLine("}");
        }
        internal static void Generate(string rootPath, string nameSpace, TextWriter writer)
        {
            var cssClasses = new HashSet <string>();

            foreach (var fileInfo in new DirectoryInfo(rootPath).GetFiles("*.css", SearchOption.AllDirectories))
            {
                new FileReader(fileInfo.FullName).ExecuteInStreamReader(
                    delegate(StreamReader reader) {
                    // Remove comments and styles.
                    // NOTE: We need to find a way to also throw out media query expressions.
                    var text = reader.ReadToEnd().RemoveTextBetweenStrings("/*", "*/").RemoveTextBetweenStrings("{", "}");

                    foreach (Match match in Regex.Matches(text, @"\.(\w+)"))
                    {
                        cssClasses.Add(match.Groups[1].Value);
                    }
                });
            }

            if (cssClasses.Any())
            {
                writer.WriteLine("namespace " + nameSpace + " {");

                CodeGenerationStatics.AddSummaryDocComment(writer, "This class provides typesafe access to css classes present in *.css files.");
                writer.WriteLine("public class ElementClasses {");

                var identifiers = new HashSet <string>();
                foreach (var elementClass in cssClasses)
                {
                    writer.WriteLine("/// <summary>");
                    writer.WriteLine("/// Constant for the '{0}' class.".FormatWith(elementClass));
                    writer.WriteLine("/// </summary>");
                    var identifier = EwlStatics.GetCSharpIdentifier(elementClass.CapitalizeString());
                    if (identifiers.Contains(identifier))
                    {
                        var uniqueIdentifier = identifier;
                        var i = 0;
                        while (identifiers.Contains(uniqueIdentifier))
                        {
                            uniqueIdentifier = identifier + i++;
                        }
                        identifier = uniqueIdentifier;
                    }
                    identifiers.Add(identifier);
                    writer.WriteLine("public static readonly ElementClass {0} = new ElementClass( \"{1}\" );".FormatWith(identifier, elementClass));
                }

                writer.WriteLine("}");                   // class
                writer.WriteLine("}");                   // namespace
            }

            // Web Forms compatibility. Remove when EnduraCode goal 790 is complete.
            generateLegacy(rootPath, nameSpace, writer);
        }
        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("}");
        }