/// <summary>
        /// Создать класс который возвращает список шаблонов, для того чтобы потом их положить в базу
        /// </summary>
        /// <param name="opts"></param>
        /// <returns></returns>
        public static GenerateClassBaseModel GetInitDataClass(TemplateCodeInitDataOptions opts)
        {
            var cl = new GenerateClassBaseModel
            {
                ClassName = $"{opts.TemplateSchemaName}InitData",
                IsStatic  = false,
                Summary   = opts.Summary,
                NameSpace = "Ecc.Model.InitData.Templates",
                Usings    = new HashSet <string>
                {
                    "Cmn.Constants.Ecc",
                    "Cmn.Enums.Ecc",
                    "Ecc.Model.OtherModels",
                    "Ecc.Model.Resources",
                    "System.Collections.Generic"
                }
            };

            cl.Properties.Add(new GenerateStaticGetListOfDataMethod
            {
                Description = "Получить модели для создания шаблонов",
                EnumeratedElementClassName = "CreateMessageTemplate",
                PropertyName       = "GetTemplates",
                EnumeratedElements = opts.Data.Select(x => GetPropertyDictionary(x, opts)).ToList()
            });

            return(cl);
        }
        public static void Generate(string directory)
        {
            //Группируем их по название группы триггеров
            var groups = EccTemplateListGenerator.Templates.GroupBy(x => x.TriggerGroupName).ToList();

            var triggerClasses = groups.Select(x => TemplateCodeInitDataClassGenerator.GetTriggersClass(new TemplateCodesInitTriggersOptions
            {
                StaticClassSummary = $"Триггеры группы {x.Key}",
                TemplatesData      = x.ToList(),
                TemplateSchemaName = x.Key
            }));

            var triggersClass = new GenerateClassBaseModel
            {
                ClassName  = TemplateCodeInitDataClassGenerator.TriggersName,
                IsStatic   = true,
                SubClasses = triggerClasses.ToList(),
                Summary    = "Триггеры шаблонов сообщений",
                NameSpace  = "Cmn.Constants.Ecc",
                Usings     = new HashSet <string>
                {
                    "System"
                }
            };

            triggersClass.CreateCSharpFileInFolder(directory, new GenerateClassOptions
            {
                IncludeUsingsAndNameSpace = true
            });
        }
Beispiel #3
0
        public static string GenerateClass(GenerateClassBaseModel model, GenerateClassOptions options)
        {
            var sb = new StringBuilder();

            if (options.IncludeUsingsAndNameSpace && options.Tabbing != 0)
            {
                throw new ApplicationException("Уровень вложенности должен быть равен нулю, если требуется сгенерировать класс, включая namespace и директивы using. " +
                                               $"Свойство {nameof(GenerateClassOptions.IncludeUsingsAndNameSpace)} должно быть равно false");
            }

            if (options.IncludeUsingsAndNameSpace)
            {
                options.Tabbing = 1;

                foreach (var usDir in model.Usings)
                {
                    sb.AppendLine($"using {usDir};");
                }

                if (model.Usings.Count > 0)
                {
                    sb.AppendLine();
                }

                sb.AppendLine($"namespace {model.NameSpace}");
                sb.AppendLine("{");
            }

            ClassBuilderExtensions.AddSummaryTag(sb, model.Summary, options.Tabbing);

            var _static = model.IsStatic? " static" : "";

            sb.AppendLineWithTabbing($"public{_static} class {model.ClassName}", options.Tabbing);
            sb.AppendLineWithTabbing("{", options.Tabbing);

            foreach (var sub in model.SubClasses)
            {
                sb.Append(sub.GenerateClass(new GenerateClassOptions
                {
                    Tabbing = options.Tabbing + 1,
                    IncludeUsingsAndNameSpace = false
                }));
                sb.AppendLine();
            }

            foreach (var elem in model.Properties)
            {
                elem.Generate(sb, options.Tabbing + 1);
            }

            sb.AppendLineWithTabbing("}", options.Tabbing);

            //Namespace нужно закрыть
            if (options.IncludeUsingsAndNameSpace)
            {
                sb.AppendLine("}");
            }

            return(sb.ToString());
        }
Beispiel #4
0
        public static void GenerateEccMasks(string directory)
        {
            var masks = JsonSchemaToFileWriter.GetSchemaFromFile <List <EccMaskModel> >(FilePath(directory));

            GenerateEccDefaultMaskValues(masks, directory);
            GenerateEccMasksInitDataClass(masks, directory);

            var model = new GenerateClassBaseModel
            {
                ClassName = SchemaName,
                Summary   = "Маски используемые для рассылок, которые будут заменены на значения",
                IsStatic  = true,
                NameSpace = "Cmn.Constants.Ecc",
            };

            model.Properties.AddRange(masks.Select(x => new GenerateConstStringProperty
            {
                Value        = x.Mask,
                PropertyName = x.Mask,
                Description  = x.Description
            }).ToList());

            model.CreateCSharpFileInFolder(directory, new GenerateClassOptions
            {
                IncludeUsingsAndNameSpace = true,
            });

            GenerateResources(masks, directory);
        }
        /// <summary>
        /// Возвращает модель для создания класса со списком тригггеров по типу
        /// </summary>
        /// <returns></returns>
        public static GenerateClassBaseModel GetTriggersClass(TemplateCodesInitTriggersOptions options)
        {
            var model = new GenerateClassBaseModel
            {
                ClassName = options.TemplateSchemaName,
                Summary   = options.StaticClassSummary,
                IsStatic  = false
            };

            model.Properties.AddRange(options.TemplatesData.Select(x => new GenerateGuidParseFromStringGetProperty
            {
                Value        = EccCodeGuidProvider.GetOrAddGuid(x.TriggerGroupName, x.TriggerName),
                IsStatic     = true,
                Description  = "",
                PropertyName = x.TriggerName
            }));

            return(model);
        }
Beispiel #6
0
        private static void GenerateEccDefaultMaskValues(List <EccMaskModel> data, string resultsFolder)
        {
            var model = new GenerateClassBaseModel
            {
                ClassName = "EccMaskDefaultValues",
                Summary   = "Значения статических масок, которые используются для рассылок",
                IsStatic  = true,
                NameSpace = "Cmn.Constants.Ecc",
                Usings    = new HashSet <string>
                {
                    "System.Collections.Generic"
                }
            };

            data.ForEach(x => x.Description = x.Description.Replace("\n", string.Empty));

            var rows = data.Where(x => !string.IsNullOrWhiteSpace(x.DefaultValue));

            model.Properties.AddRange(rows.Select(x => new GenerateConstStringProperty
            {
                Value        = x.DefaultValue.Replace(System.Environment.NewLine, @"\r\n").Replace("\"", "\\\""),
                PropertyName = x.Mask,
                Description  = x.Description
            }).ToList());

            model.Properties.Add(new FillDictionaryStaticMethodProperty
            {
                PropertyName = "FillDictionary",
                MasksToFill  = new HashSet <string>(rows.Select(x => Unwrap(x.Mask))),
                Description  = "Заполнить словарь дефолтными значениями масок"
            });

            model.CreateCSharpFileInFolder(resultsFolder, new GenerateClassOptions
            {
                IncludeUsingsAndNameSpace = true
            });
        }
Beispiel #7
0
        private static void GenerateEccMasksInitDataClass(List <EccMaskModel> data, string resultsFolder)
        {
            var model = new GenerateClassBaseModel
            {
                ClassName = $"{SchemaName}InitData",
                Summary   = "Маски используемые для рассылок, которые будут заменены на значения",
                IsStatic  = true,
                NameSpace = "Ecc.Model.InitData",
                Usings    = new HashSet <string>
                {
                    "Ecc.Model.Models",
                    "System.Collections.Generic",
                    "Ecc.Model.Resources"
                }
            };

            model.Properties.Add(new GenerateStaticGetListOfDataMethod
            {
                Description = "Получить маски для того, чтобы положить в базу",
                EnumeratedElementClassName = "EccTemplateMask",
                PropertyName       = "GetMasks",
                EnumeratedElements = data.Select((x, i) => new Dictionary <string, string>
                {
                    [nameof(EccMaskModel.Mask)] = $"{MaskResourceName}.{ToMaskNameResName(x.Mask)}",
                    [nameof(EccMaskModel.SpanishDescription)] = $"{MaskResourceName}.{ToSpanishResName(x.Mask)}",
                    [nameof(EccMaskModel.EnglishDescription)] = $"{MaskResourceName}.{ToEnglishResName(x.Mask)}",
                    [nameof(EccMaskModel.Description)]        = $"{MaskResourceName}.{ToRussianResName(x.Mask)}",
                    [nameof(EccMaskModel.DefaultValue)]       = string.IsNullOrWhiteSpace(x.DefaultValue)? "null" : ToStringPropertyValue(x.DefaultValue)
                }).ToList()
            });

            model.CreateCSharpFileInFolder(resultsFolder, new GenerateClassOptions
            {
                IncludeUsingsAndNameSpace = true,
            });
        }