Exemplo n.º 1
0
        /// <summary>
        /// Generates C# code as per specified settings and properties.
        /// </summary>
        /// <param name="settings">C# generator settings</param>
        /// <param name="properties">Array of ClrProperty type</param>
        /// <returns>C# code body in string.</returns>
        public override string GenerateCSharpCode(CSharpSettings settings, ClrProperty[] properties)
        {
            if (settings == null)
            {
                return(string.Empty);
            }

            if (properties == null)
            {
                return(string.Empty);
            }

            if (string.IsNullOrEmpty(settings.ClassName))
            {
                return(string.Empty);
            }

            classBuilder.Clear();

            AppendLine("using System;");
            AppendLine("using System.Data;");
            AppendLine();

            bool hasNamespace = !string.IsNullOrEmpty(settings.Namespace);

            if (hasNamespace)
            {
                AppendLine($"namespace {settings.Namespace}");
                OpenCurlyBraces();
            }

            var modifier = Enum.GetName(typeof(Enums.AccessModifiers), settings.AccessModifier).ToLower();

            if (modifier.Length > 0)
            {
                modifier = modifier + " ";
            }

            AppendLine($"{modifier}class {settings.ClassName} : DataTable");

            //Class opens
            OpenCurlyBraces();

            AppendLine($"{modifier} {settings.ClassName}()");

            OpenCurlyBraces();
            this.AppendLine($"this.TableName = this.GetType().Name;");
            foreach (var p in properties)
            {
                this.AppendLine($"this.Columns.Add(\"{p.Name}\", typeof({p.PropertyType.GetDisplayName()}));");
            }
            CloseCurlyBraces();

            var rowClassName = $"{settings.ClassName}Row";

            this.AppendLine();

            this.AppendLine($"protected override Type GetRowType()");
            OpenCurlyBraces();

            this.AppendLine($"return typeof({rowClassName});");
            CloseCurlyBraces();

            this.AppendLine();

            this.AppendLine($"public {rowClassName} this[int rowIndex]");
            OpenCurlyBraces();

            this.AppendLine($"get {{ return ({rowClassName})Rows[rowIndex]; }}");
            CloseCurlyBraces();

            this.AppendLine();

            this.AppendLine($"public void AddRow({rowClassName} row)");
            OpenCurlyBraces();

            this.AppendLine($"Rows.Add(row);");
            CloseCurlyBraces();

            this.AppendLine();

            this.AppendLine($"public new {rowClassName} NewRow()");
            OpenCurlyBraces();

            this.AppendLine($"return ({rowClassName})base.NewRow();");
            CloseCurlyBraces();

            //table class closes here
            CloseCurlyBraces();

            this.AppendLine();

            //Writing Row Class starts here
            this.AppendLine($"{modifier} class {rowClassName} : DataRow");
            OpenCurlyBraces();


            //Adding Constructor
            this.AppendLine();
            this.AppendLine($"public {rowClassName}(DataRowBuilder rowBuilder) : base(rowBuilder) {{ }}");
            this.AppendLine();

            //Adding Property accessors
            foreach (var p in properties)
            {
                this.AppendLine($"public {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get => ({p.PropertyType.GetDisplayName()})this[\"{p.Name}\"]; set => this[\"{p.Name}\"] = value;}}");
                this.AppendLine();
            }

            //Row Class closes here
            CloseCurlyBraces();

            if (hasNamespace)
            {
                CloseCurlyBraces();
            }

            return(classBuilder.ToString());
        }
Exemplo n.º 2
0
        /// <summary>
        ///     Generates C# code as per specified settings and properties.
        /// </summary>
        /// <param name="settings">C# generator settings</param>
        /// <param name="properties">Array of ClrProperty type</param>
        /// <returns>C# code body in string.</returns>
        public override string GenerateCSharpCode(CSharpSettings settings, ClrProperty[] properties)
        {
            if (settings == null)
            {
                return(string.Empty);
            }

            if (properties == null)
            {
                return(string.Empty);
            }

            if (string.IsNullOrEmpty(settings.ClassName))
            {
                return(string.Empty);
            }

            ClassBuilder = new StringBuilder();

            //Add usings
            AppendLine("using System;");

            if (settings.NullValueIgnoreHandling || settings.SnakeCaseNamingStrategy)
            {
                AppendLine("using Newtonsoft.Json");
            }

            if (settings.SnakeCaseNamingStrategy)
            {
                AppendLine("using Newtonsoft.Json.Serialization");
            }

            AppendLine();

            var hasNamespace = !string.IsNullOrEmpty(settings.Namespace);

            //Add Namespace block if present.
            if (hasNamespace)
            {
                AppendLine($"namespace {settings.Namespace}");
                OpenCurlyBraces();
            }

            var modifier = Enum.GetName(typeof(AccessModifiers), settings.AccessModifier)
                           ?.ToLower();

            if (!string.IsNullOrEmpty(modifier))
            {
                modifier += " ";
            }

            if (settings.SnakeCaseNamingStrategy || settings.NullValueIgnoreHandling)
            {
                var attributeValues = string.Empty;

                if (settings.NullValueIgnoreHandling)
                {
                    attributeValues = "ItemNullValueHandling = NullValueHandling.Ignore";
                }

                if (settings.SnakeCaseNamingStrategy)
                {
                    if (settings.NullValueIgnoreHandling)
                    {
                        attributeValues += ", NamingStrategyType = typeof(SnakeCaseNamingStrategy)";
                    }
                    else
                    {
                        attributeValues += "NamingStrategyType = typeof(SnakeCaseNamingStrategy)";
                    }
                }

                AppendLine($"[JsonObject({attributeValues})]");
            }

            //Add class name
            AppendLine($"{modifier}class {settings.ClassName}");

            //Class opens
            OpenCurlyBraces();

            var firstProperty = true;

            foreach (var p in properties)
            {
                var typeName = GetTypeKeyword(p.PropertyType.GetDisplayName());

                switch (settings.MemberType)
                {
                case MemberTypes.AutoProperties:
                    AppendLine
                    (
                        $"{AccessModifiers.Public.ToString().ToLower()} {typeName} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get; set; }}"
                    );

                    break;

                case MemberTypes.FieldsOnly:
                    AppendLine
                    (
                        $"{AccessModifiers.Private.ToString().ToLower()} {typeName} {GetNamePerConvention(p.Name, settings.FieldNamingConvention, settings.FieldsPrefix)} {{ get; set; }}"
                    );

                    break;

                case MemberTypes.FieldEncapsulatedByproperties:
                    if (!firstProperty)
                    {
                        AppendLine();
                    }

                    var fldName = GetNamePerConvention(p.Name, settings.FieldNamingConvention, settings.FieldsPrefix);

                    AppendLine($"{AccessModifiers.Private.ToString().ToLower()} {typeName} {fldName};");

                    if (settings.CustomLogicGetter.Length > 0 && settings.CustomLogicSetter.Length > 0)
                    {
                        AppendLine
                        (
                            $"{AccessModifiers.Public.ToString().ToLower()} {typeName} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get {{{settings.CustomLogicGetter}; return {fldName};}} set {{{settings.CustomLogicSetter}; {fldName} = value;}} }}"
                        );
                    }
                    else if (settings.CustomLogicGetter.Length > 0)
                    {
                        AppendLine
                        (
                            $"{AccessModifiers.Public.ToString().ToLower()} {typeName} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get {{{settings.CustomLogicGetter}; return {fldName};}} set => {fldName} = value; }}"
                        );
                    }
                    else if (settings.CustomLogicSetter.Length > 0)
                    {
                        AppendLine
                        (
                            $"{AccessModifiers.Public.ToString().ToLower()} {typeName} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get => {fldName}; set {{{settings.CustomLogicSetter}; {fldName} = value;}} }}"
                        );
                    }
                    else
                    {
                        AppendLine
                        (
                            $"{AccessModifiers.Public.ToString().ToLower()} {typeName} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get => {fldName}; set => {fldName} = value; }}"
                        );
                    }

                    break;
                }

                firstProperty = false;
            }

            //Class closes
            CloseCurlyBraces();

            if (hasNamespace)
            {
                CloseCurlyBraces();
            }

            return(ClassBuilder.ToString());
        }
Exemplo n.º 3
0
 /// <summary>
 /// Generates C# code as per specified settings and properties.
 /// </summary>
 /// <param name="settings">C# generator settings</param>
 /// <param name="properties">Array of ClrProperty type</param>
 /// <returns>C# code body in string.</returns>
 public abstract string GenerateCSharpCode(CSharpSettings settings, ClrProperty[] properties);
Exemplo n.º 4
0
        /// <summary>
        ///     Generates C# code as per specified settings and properties.
        /// </summary>
        /// <param name="settings">C# generator settings</param>
        /// <param name="properties">Array of ClrProperty type</param>
        /// <returns>C# code body in string.</returns>
        public override string GenerateCSharpCode(CSharpSettings settings, ClrProperty[] properties)
        {
            if (settings == null)
            {
                return(string.Empty);
            }

            if (properties == null)
            {
                return(string.Empty);
            }

            if (string.IsNullOrEmpty(settings.ClassName))
            {
                return(string.Empty);
            }

            AppendLine("using System;");
            AppendLine("using System.Data;");

            if (settings.NullValueIgnoreHandling || settings.SnakeCaseNamingStrategy)
            {
                AppendLine("using Newtonsoft.Json");
            }

            if (settings.SnakeCaseNamingStrategy)
            {
                AppendLine("using Newtonsoft.Json.Serialization");
            }

            AppendLine();

            var hasNamespace = !string.IsNullOrEmpty(settings.Namespace);

            if (hasNamespace)
            {
                AppendLine($"namespace {settings.Namespace}");
                OpenCurlyBraces();
            }

            var modifier = Enum.GetName(typeof(AccessModifiers), settings.AccessModifier)
                           ?.ToLower();

            if (!string.IsNullOrEmpty(modifier))
            {
                modifier += " ";
            }

            if (settings.SnakeCaseNamingStrategy || settings.NullValueIgnoreHandling)
            {
                var attributeValues = string.Empty;

                if (settings.NullValueIgnoreHandling)
                {
                    attributeValues = "ItemNullValueHandling = NullValueHandling.Ignore";
                }

                if (settings.SnakeCaseNamingStrategy)
                {
                    if (settings.NullValueIgnoreHandling)
                    {
                        attributeValues += ", NamingStrategyType = typeof(SnakeCaseNamingStrategy)";
                    }
                    else
                    {
                        attributeValues += "NamingStrategyType = typeof(SnakeCaseNamingStrategy)";
                    }
                }

                AppendLine($"[JsonObject({attributeValues})]");
            }

            AppendLine($"{modifier}class {settings.ClassName} : DataTable");

            //Class opens
            OpenCurlyBraces();

            AppendLine($"{modifier} {settings.ClassName}()");

            OpenCurlyBraces();
            AppendLine("this.TableName = this.GetType().Name;");

            foreach (var p in properties)
            {
                AppendLine($"this.Columns.Add(\"{p.Name}\", typeof({p.PropertyType.GetDisplayName()}));");
            }

            CloseCurlyBraces();

            var rowClassName = $"{settings.ClassName}Row";

            AppendLine();

            AppendLine("protected override Type GetRowType()");
            OpenCurlyBraces();

            AppendLine($"return typeof({rowClassName});");
            CloseCurlyBraces();

            AppendLine();

            AppendLine($"public {rowClassName} this[int rowIndex]");
            OpenCurlyBraces();

            AppendLine($"get {{ return ({rowClassName})Rows[rowIndex]; }}");
            CloseCurlyBraces();

            AppendLine();

            AppendLine($"public void AddRow({rowClassName} row)");
            OpenCurlyBraces();

            AppendLine("Rows.Add(row);");
            CloseCurlyBraces();

            AppendLine();

            AppendLine($"public new {rowClassName} NewRow()");
            OpenCurlyBraces();

            AppendLine($"return ({rowClassName})base.NewRow();");
            CloseCurlyBraces();

            //table class closes here
            CloseCurlyBraces();

            AppendLine();

            //Writing Row Class starts here
            AppendLine($"{modifier} class {rowClassName} : DataRow");
            OpenCurlyBraces();

            //Adding Constructor
            AppendLine();
            AppendLine($"public {rowClassName}(DataRowBuilder rowBuilder) : base(rowBuilder) {{ }}");
            AppendLine();

            //Adding Property accessors
            foreach (var p in properties)
            {
                AppendLine
                (
                    $"public {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get => ({p.PropertyType.GetDisplayName()})this[\"{p.Name}\"]; set => this[\"{p.Name}\"] = value;}}"
                );

                AppendLine();
            }

            //Row Class closes here
            CloseCurlyBraces();

            if (hasNamespace)
            {
                CloseCurlyBraces();
            }

            return(ClassBuilder.ToString());
        }
Exemplo n.º 5
0
        /// <summary>
        /// Generates C# code as per specified settings and properties.
        /// </summary>
        /// <param name="settings">C# generator settings</param>
        /// <param name="properties">Array of ClrProperty type</param>
        /// <returns>C# code body in string.</returns>
        public override string GenerateCSharpCode(CSharpSettings settings, ClrProperty[] properties)
        {
            if (settings == null)
            {
                return(string.Empty);
            }

            if (properties == null)
            {
                return(string.Empty);
            }

            if (string.IsNullOrEmpty(settings.ClassName))
            {
                return(string.Empty);
            }

            classBuilder = new StringBuilder();

            //Add usings
            AppendLine("using System;");
            AppendLine();

            bool hasNamespace = !string.IsNullOrEmpty(settings.Namespace);

            //Add Namespace block if present.
            if (hasNamespace)
            {
                AppendLine($"namespace {settings.Namespace}");
                OpenCurlyBraces();
            }

            var modifier = Enum.GetName(typeof(Enums.AccessModifiers), settings.AccessModifier).ToLower();

            if (modifier.Length > 0)
            {
                modifier = modifier + " ";
            }

            //Add class name
            AppendLine($"{modifier}class {settings.ClassName}");

            //Class opens
            OpenCurlyBraces();


            bool firstProperty = true;

            foreach (var p in properties)
            {
                switch (settings.MemberType)
                {
                case MemberTypes.AutoProperties:
                    AppendLine($"{AccessModifiers.Public.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get; set; }}");
                    break;

                case MemberTypes.FieldsOnly:
                    AppendLine($"{AccessModifiers.Private.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.FieldNamingConvention, settings.FieldsPrefix)} {{ get; set; }}");
                    break;

                case MemberTypes.FieldEncapsulatedByproperties:
                    if (!firstProperty)
                    {
                        AppendLine();
                    }
                    var fldName = GetNamePerConvention(p.Name, settings.FieldNamingConvention, settings.FieldsPrefix);

                    AppendLine($"{AccessModifiers.Private.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {fldName};");

                    if (settings.CustomLogicGetter.Length > 0 && settings.CustomLogicSetter.Length > 0)
                    {
                        AppendLine($"{AccessModifiers.Public.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get {{{settings.CustomLogicGetter}; return {fldName};}} set {{{settings.CustomLogicSetter}; {fldName} = value;}} }}");
                    }
                    else if (settings.CustomLogicGetter.Length > 0)
                    {
                        AppendLine($"{AccessModifiers.Public.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get {{{settings.CustomLogicGetter}; return {fldName};}} set => {fldName} = value; }}");
                    }
                    else if (settings.CustomLogicSetter.Length > 0)
                    {
                        AppendLine($"{AccessModifiers.Public.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get => {fldName}; set {{{settings.CustomLogicSetter}; {fldName} = value;}} }}");
                    }
                    else
                    {
                        AppendLine($"{AccessModifiers.Public.ToString().ToLower()} {p.PropertyType.GetDisplayName()} {GetNamePerConvention(p.Name, settings.PropertiesNamingConvention, settings.PropertiesPrefix)} {{ get => {fldName}; set => {fldName} = value; }}");
                    }

                    break;
                }
                firstProperty = false;
            }

            //Class closes
            CloseCurlyBraces();

            if (hasNamespace)
            {
                CloseCurlyBraces();
            }
            return(base.classBuilder.ToString());
        }