/// <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 }); }
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()); }
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); }
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 }); }
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, }); }