public void Add(IRelationAdditionOptions options)
        {
            string filePath = this.pathService.GetAbsolutePathForDbContext(options);
            string fileData = UpdateFileData(options, filePath);

            CsharpClassWriter.Write(filePath, fileData);
        }
Esempio n. 2
0
        private static void ParseOptions(IRelationAdditionOptions options, string[] args)
        {
            string entityName = args[3];

            options.DomainFrom           = entityName.Split('.')[0];
            options.EntityNameFrom       = entityName.Split('.')[1].Split(':')[0];
            options.EntityNamePluralFrom = entityName.Split(':')[1];

            entityName                 = args[4];
            options.DomainTo           = entityName.Split('.')[0];
            options.EntityNameTo       = entityName.Split('.')[1].Split(':')[0];
            options.EntityNamePluralTo = entityName.Split(':')[1];

            if (ArgumentParser.HasArgument(args, "-n", "--alternative-property-names"))
            {
                string st = ArgumentParser.ExtractArgument(args, "-n", "--alternative-property-names");
                options.PropertyNameFrom = st.Split(':')[0];
                options.PropertyNameTo   = st.Split(':')[1];
            }
            else
            {
                options.PropertyNameFrom = options.EntityNameFrom;
                options.PropertyNameTo   = options.EntityNamePluralTo;
            }
        }
Esempio n. 3
0
        private string UpdateFileData(IRelationAdditionOptions options, string filePath)
        {
            string fileData = File.ReadAllText(filePath);

            StringEditor stringEditor = new StringEditor(fileData);

            stringEditor.NextThatContains("constructor(");
            stringEditor.InsertLine($"  {options.EntityNamePluralLowerFrom}: I{options.EntityNameFrom}[];");
            stringEditor.InsertNewLine();

            stringEditor.NextThatContains("private router: Router");
            stringEditor.InsertLine($"    private {options.EntityNamePluralLowerFrom}CrudService: {options.EntityNamePluralFrom}CrudService,");

            stringEditor.NextThatContains("this.formBuilder.group({");
            stringEditor.NextThatContains("});");
            stringEditor.InsertLine($"      {options.PropertyNameFrom.LowerFirstChar()}Id: new FormControl(null, [Validators.required]),");

            stringEditor.MoveToStart();
            stringEditor.NextThatContains("ngOnInit()");
            stringEditor.NextThatStartsWith("  }");
            stringEditor.InsertNewLine();
            stringEditor.InsertLine($"    this.{options.EntityNamePluralLowerFrom} = await this.{options.EntityNamePluralLowerFrom}CrudService.get{options.EntityNamePluralFrom}();");

            return(stringEditor.GetText());
        }
        private void AddTab(IRelationAdditionOptions options, StringEditor stringEditor)
        {
            stringEditor.MoveToStart();
            stringEditor.NextThatContains("    </mat-tab-group>");

            stringEditor.InsertLine($"        <mat-tab label=\"{options.PropertyNameTo.ToReadable()}\">");
            stringEditor.InsertLine($"            <h2>{options.PropertyNameTo.ToReadable()}</h2>");
            stringEditor.InsertLine($"            <div class=\"table-container\">");
            stringEditor.InsertLine($"                <table mat-table [dataSource]=\"{options.EntityNamePluralLowerTo}TableDataSource\">");
            stringEditor.InsertLine($"");
            stringEditor.InsertLine($"                    <ng-container matColumnDef=\"name\">");
            stringEditor.InsertLine($"                        <th mat-header-cell *matHeaderCellDef> Name </th>");
            stringEditor.InsertLine($"                        <td mat-cell *matCellDef=\"let element\"> {{{{element.name}}}} </td>");
            stringEditor.InsertLine($"                    </ng-container>");
            stringEditor.InsertLine($"");
            stringEditor.InsertLine($"                    <ng-container matColumnDef=\"detail\">");
            stringEditor.InsertLine($"                        <th mat-header-cell *matHeaderCellDef></th>");
            stringEditor.InsertLine($"                        <td mat-cell *matCellDef=\"let element\" width=\"10%\">");
            stringEditor.InsertLine($"                            <button mat-button role=\"link\">Detail</button>");
            stringEditor.InsertLine($"                        </td>");
            stringEditor.InsertLine($"                    </ng-container>");
            stringEditor.InsertLine($"");
            stringEditor.InsertLine($"                    <tr mat-header-row *matHeaderRowDef=\"{options.EntityNamePluralLowerTo}GridColumns; sticky: true\"></tr>");
            stringEditor.InsertLine($"                    <tr mat-row *matRowDef=\"let row; columns: {options.EntityNamePluralLowerTo}GridColumns;\"");
            stringEditor.InsertLine($"                        [routerLink]=\"['/{StringConverter.PascalToKebabCase(options.DomainTo)}/{StringConverter.PascalToKebabCase(options.EntityNamePluralTo)}/detail', row.id]\"></tr>");
            stringEditor.InsertLine($"                </table>");
            stringEditor.InsertLine($"            </div>");
            stringEditor.InsertLine($"        </mat-tab>");
        }
Esempio n. 5
0
        private string UpdateFileData(IRelationAdditionOptions options, string filePath)
        {
            string fileData = File.ReadAllText(filePath);

            StringEditor stringEditor = new StringEditor(fileData);

            // ----------- DbSet -----------
            stringEditor.NextThatContains($"export class {options.EntityNameFrom}DetailPage");
            stringEditor.Next();

            stringEditor.InsertNewLine();
            stringEditor.InsertLine($"  public {options.EntityNamePluralLowerTo}TableDataSource = new MatTableDataSource<I{options.EntityNameTo}>([]);");
            stringEditor.InsertLine($"  public {options.EntityNamePluralLowerTo}GridColumns: string[] = [");
            stringEditor.InsertLine($"    'name',");
            stringEditor.InsertLine($"    'detail',");
            stringEditor.InsertLine($"  ];");

            stringEditor.NextThatContains($"private async load{options.EntityNameFrom}(");
            stringEditor.NextThatContains("  }");

            stringEditor.InsertNewLine();
            stringEditor.InsertLine($"    this.{options.EntityNamePluralLowerTo}TableDataSource.data = this.{options.EntityNameLowerFrom}.{options.PropertyNameTo.LowerFirstChar()};");

            return(stringEditor.GetText());
        }
        protected override void Add1ToNRelation(IRelationAdditionOptions options)
        {
            // From
            string fromImportStatementPath = $"src/app/model/{StringConverter.PascalToKebabCase(options.DomainTo)}" +
                                             $"/{StringConverter.PascalToKebabCase(options.EntityNamePluralTo)}" +
                                             $"/dtos/i-{StringConverter.PascalToKebabCase(options.EntityNameTo)}";

            IRelationSideAdditionOptions fromOptions =
                RelationAdditionOptions.GetPropertyForFrom(options, $"I{options.EntityNameTo}[]");

            this.frontendDtoRelationAddition.AddPropertyToDTO(fromOptions, ModelProjectGeneration.DomainFolder, FileName,
                                                              $"{options.EntityNameTo}, I{options.EntityNameTo}", fromImportStatementPath);

            frontendDtoPropertyFromMethodAddition.AddPropertyToDTO(options, ModelProjectGeneration.DomainFolder, FileName);

            // To
            string toImportStatementPath = $"src/app/model/{StringConverter.PascalToKebabCase(options.DomainFrom)}" +
                                           $"/{StringConverter.PascalToKebabCase(options.EntityNamePluralFrom)}" +
                                           $"/dtos/i-{StringConverter.PascalToKebabCase(options.EntityNameFrom)}";

            IRelationSideAdditionOptions toOptions =
                RelationAdditionOptions.GetPropertyForTo(options, $"I{options.EntityNameFrom}");

            this.frontendDtoRelationAddition.AddPropertyToDTO(toOptions, ModelProjectGeneration.DomainFolder, FileName,
                                                              $"{options.EntityNameFrom}, I{options.EntityNameFrom}", toImportStatementPath);

            frontendDtoPropertyToMethodAddition.AddPropertyToDTO(options, ModelProjectGeneration.DomainFolder, FileName);
        }
 private string GetNameResolutionMethod(IRelationAdditionOptions options)
 {
     return
         ($"  public get{options.EntityNameFrom}Name({options.EntityNameLowerFrom}Id: string): string {{\n" +
          $"    return this.{options.EntityNamePluralLowerFrom}.find({options.EntityNameLowerFrom} => {options.EntityNameLowerFrom}.id === {options.EntityNameLowerFrom}Id).name;\n" +
          "  }");
 }
Esempio n. 8
0
        public static bool Validate(IRelationAdditionOptions options)
        {
            if (string.IsNullOrEmpty(options.DomainFrom) ||
                string.IsNullOrEmpty(options.EntityNameFrom) ||
                string.IsNullOrEmpty(options.EntityNamePluralFrom) ||
                string.IsNullOrEmpty(options.PropertyNameFrom) ||
                string.IsNullOrEmpty(options.DomainTo) ||
                string.IsNullOrEmpty(options.EntityNameTo) ||
                string.IsNullOrEmpty(options.EntityNamePluralTo) ||
                string.IsNullOrEmpty(options.PropertyNameTo) ||
                !options.DomainFrom.IsAlpha() ||
                !options.EntityNameFrom.IsAlpha() ||
                !options.EntityNamePluralFrom.IsAlpha() ||
                !options.PropertyNameFrom.IsAlpha() ||
                !options.DomainTo.IsAlpha() ||
                !options.EntityNameTo.IsAlpha() ||
                !options.EntityNamePluralTo.IsAlpha() ||
                !options.PropertyNameTo.IsAlpha())
            {
                return(false);
            }

            options.DomainFrom           = options.DomainFrom.UpperFirstChar();
            options.EntityNameFrom       = options.EntityNameFrom.UpperFirstChar();
            options.EntityNamePluralFrom = options.EntityNamePluralFrom.UpperFirstChar();
            options.PropertyNameFrom     = options.PropertyNameFrom.UpperFirstChar();
            options.DomainTo             = options.DomainTo.UpperFirstChar();
            options.EntityNameTo         = options.EntityNameTo.UpperFirstChar();
            options.EntityNamePluralTo   = options.EntityNamePluralTo.UpperFirstChar();
            options.PropertyNameTo       = options.PropertyNameTo.UpperFirstChar();

            return(true);
        }
        public void AddPropertyToDTO(IRelationAdditionOptions options, string domainFolder, string fileName)
        {
            string filePath = GetFilePath(options, domainFolder, fileName);
            string fileData = UpdateFileData(options, filePath);

            TypescriptClassWriter.Write(filePath, fileData);
        }
Esempio n. 10
0
        private string UpdateFileData(IRelationAdditionOptions options, string filePath)
        {
            string fileData = File.ReadAllText(filePath);

            StringEditor stringEditor = new StringEditor(fileData);

            // ----------- DbSet -----------

            if (fileData.Contains("</mat-tab-group>"))
            {
                stringEditor.NextThatContains("<mat-tab label=\"Stammdaten\">");
                stringEditor.NextThatContains("</mat-tab>");
            }
            else
            {
                stringEditor.NextThatStartsWith($"<div class=\"{options.EntityNameTo.ToKebab()}-detail-page\"");
                stringEditor.NextThatStartsWith($"</div>");
            }

            stringEditor.InsertNewLine();

            stringEditor.InsertLine(GetLine(options));

            return(stringEditor.GetText());
        }
        public void Add(IRelationAdditionOptions options, string domainFolder, string templateFileName)
        {
            string filePath = GetFilePath(options, domainFolder, templateFileName);
            string fileData = UpdateFileData(options, filePath);

            CsharpClassWriter.Write(filePath, fileData);
        }
        protected override void Add1ToNRelation(IRelationAdditionOptions options)
        {
            // To
            string usingStatement = $"{options.ProjectName}.Contract.Persistence.Modules.{options.DomainFrom}.{options.EntityNamePluralFrom}";

            this.logicRelationAddition.Add(options, LogicProjectGeneration.DomainFolder, FileName, usingStatement);
        }
Esempio n. 13
0
        public void AddContraint(IRelationAdditionOptions options, string domainFolder, string templateFileName)
        {
            string filePath = GetFilePath(options, domainFolder, templateFileName);
            string fileData = GetFileData(options, filePath);

            File.WriteAllText(filePath, fileData);
        }
 private string GetAppRoutingLine(IRelationAdditionOptions options)
 {
     return
         ($"            <ng-container matColumnDef=\"{options.PropertyNameFrom.LowerFirstChar()}\">\n" +
          $"                <th mat-header-cell *matHeaderCellDef mat-sort-header> {options.PropertyNameFrom.ToReadable()} </th>\n" +
          $"                <td mat-cell *matCellDef=\"let element\" > {{{{get{options.EntityNameFrom}Name(element.{options.PropertyNameFrom.LowerFirstChar()}Id)}}}} </td>\n" +
          "            </ng-container>\n");
 }
Esempio n. 15
0
        protected override void Add1ToNRelation(IRelationAdditionOptions options)
        {
            IRelationSideAdditionOptions guidPropertyOptions     = RelationAdditionOptions.GetPropertyForTo(options, "Guid");
            PropertyAdditionOptions      propertyAdditionOptions = new PropertyAdditionOptions(guidPropertyOptions);

            this.propertyAddition.AddPropertyToDTO(propertyAdditionOptions, LogicTestsProjectGeneration.DomainFolder, FileName);
            this.logicDbDtoTestMethodsAddition.Add(propertyAdditionOptions, LogicTestsProjectGeneration.DomainFolder, FileName);
        }
        protected override void Add1ToNRelation(IRelationAdditionOptions options)
        {
            // From
            this.dtoFromRepositoryIncludeAddition.Add(options, PersistenceProjectGeneration.DomainFolder, FileName);

            // To
            this.dtoToRepositoryIncludeAddition.Add(options, PersistenceProjectGeneration.DomainFolder, FileName);
        }
Esempio n. 17
0
        protected override void Add1ToNRelation(IRelationAdditionOptions options)
        {
            // To
            IRelationSideAdditionOptions optionsTo = RelationAdditionOptions
                                                     .GetPropertyForTo(options, "Guid");

            this.relationAddition.AddRelationToDTO(optionsTo, LogicProjectGeneration.DomainFolder, FileName);
        }
Esempio n. 18
0
        protected override void Add1ToNRelation(IRelationAdditionOptions options)
        {
            IRelationSideAdditionOptions relationAdditionOptions =
                RelationAdditionOptions.GetPropertyForTo(options, "Guid");
            PropertyAdditionOptions propertyAdditionOptions = new PropertyAdditionOptions(relationAdditionOptions);

            this.apiPropertyAddition.AddPropertyToDTO(propertyAdditionOptions, ApiProjectGeneration.DomainFolder, FileName);
        }
Esempio n. 19
0
        private string GetFilePath(IRelationAdditionOptions options, string domainFolder, string templateFileName)
        {
            IEntityAdditionOptions entityOptions = RelationAdditionOptions.GetPropertyForFrom(options);
            string absolutePathForDTOs           = this.pathService.GetAbsolutePathForDTOs(entityOptions, domainFolder);
            string fileName = templateFileName.Replace("Entity", entityOptions.EntityName);
            string filePath = Path.Combine(absolutePathForDTOs, fileName);

            return(filePath);
        }
Esempio n. 20
0
 public static IEntityAdditionOptions GetPropertyForFrom(IRelationAdditionOptions options)
 {
     return(new EntityAdditionOptions(options)
     {
         Domain = options.DomainFrom,
         EntityName = options.EntityNameFrom,
         EntityNamePlural = options.EntityNamePluralFrom
     });
 }
Esempio n. 21
0
        public void Add(IRelationAdditionOptions options, string domainFolder, string templateFileName)
        {
            string filePath = GetFilePath(options, domainFolder, templateFileName);
            string fileData = UpdateFileData(options, filePath);

            fileData = UsingStatements.Add(fileData, "Microsoft.EntityFrameworkCore");

            CsharpClassWriter.Write(filePath, fileData);
        }
Esempio n. 22
0
        protected override void Add1ToNRelation(IRelationAdditionOptions options)
        {
            IRelationSideAdditionOptions toOptions =
                RelationAdditionOptions.GetPropertyForTo(options, "Guid");
            PropertyAdditionOptions propertyAdditionOptions = new PropertyAdditionOptions(toOptions);

            this.frontendDtoPropertyAddition.AddPropertyToDTO(propertyAdditionOptions, ModelProjectGeneration.DomainFolder, FileName);
            this.frontendDtoPropertyMethodAddition.AddPropertyToDTO(propertyAdditionOptions, "fromApiEntity", "apiEntity", ModelProjectGeneration.DomainFolder, FileName);
        }
Esempio n. 23
0
 public static IEntityAdditionOptions GetPropertyForTo(IRelationAdditionOptions options)
 {
     return(new EntityAdditionOptions(options)
     {
         Domain = options.DomainTo,
         EntityName = options.EntityNameTo,
         EntityNamePlural = options.EntityNamePluralTo,
     });
 }
        public void Add(IRelationAdditionOptions options, string domainFolder, string templateFileName, string namespaceToAdd)
        {
            string filePath = GetFilePath(options, domainFolder, templateFileName);
            string fileData = UpdateFileData(options, filePath);

            fileData = UsingStatements.Add(fileData, namespaceToAdd);

            CsharpClassWriter.Write(filePath, fileData);
        }
Esempio n. 25
0
        private string GetFilePath(IRelationAdditionOptions options, string domainFolder, string templateFileName)
        {
            var    entityOptions         = RelationAdditionOptions.GetPropertyForTo(options);
            string absolutePathForDomain = this.pathService.GetAbsolutePathForDbDomain(entityOptions, domainFolder);
            string fileName = templateFileName.Replace("Entities", entityOptions.EntityNamePlural);
            string filePath = Path.Combine(absolutePathForDomain, fileName);

            return(filePath);
        }
Esempio n. 26
0
        protected override void Add1ToNRelation(IRelationAdditionOptions options)
        {
            // To
            IRelationSideAdditionOptions relationSideAdditionOptions =
                RelationAdditionOptions.GetPropertyForTo(options, "Guid");
            PropertyAdditionOptions propertyAdditionOptions = new PropertyAdditionOptions(relationSideAdditionOptions);

            this.dbTablePropertyAddition.AddProperty(propertyAdditionOptions, DBProjectGeneration.DomainFolder, FileName);
            this.dbTableRelationContraintAddition.AddContraint(options, DBProjectGeneration.DomainFolder, FileName);
        }
        private string GetFilePath(IRelationAdditionOptions options, string domainFolder, string fileName)
        {
            IEntityAdditionOptions entityOptions = RelationAdditionOptions.GetPropertyForFrom(options);
            string absolutePathForDTOs           = this.pathService.GetAbsolutePathForFrontendModel(entityOptions, domainFolder);

            fileName = fileName.Replace("entity-kebab", StringConverter.PascalToKebabCase(entityOptions.EntityName));
            string filePath = Path.Combine(absolutePathForDTOs, fileName);

            return(filePath);
        }
Esempio n. 28
0
 public void PerformAdd1ToNRelationCommand(IRelationAdditionOptions options)
 {
     try
     {
         this.Add1ToNRelation(options);
     }
     catch (Exception e)
     {
         Console.WriteLine("Fehler bei Relation-Generierung: " + e.Message);
     }
 }
Esempio n. 29
0
 internal static IRelationSideAdditionOptions GetPropertyForTo(IRelationAdditionOptions options, string propertyType)
 {
     return(new RelationSideAdditionOptions(options)
     {
         Domain = options.DomainTo,
         EntityName = options.EntityNameTo,
         EntityNamePlural = options.EntityNamePluralTo,
         PropertyType = propertyType,
         PropertyName = options.PropertyNameFrom + (propertyType.Equals("Guid") ? "Id" : "")
     });
 }
        private string UpdateFileData(IRelationAdditionOptions options, string filePath)
        {
            string fileData = File.ReadAllText(filePath);

            fileData = UsingStatements.Add(fileData, $"{options.ProjectName}.Contract.Persistence.Modules.{options.DomainFrom}.{options.EntityNamePluralFrom}");
            fileData = UsingStatements.Add(fileData, $"{options.ProjectName}.Logic.Tests.Modules.{options.DomainFrom}.{options.EntityNamePluralFrom}");

            // ----------- Repository Generation -----------
            StringEditor stringEditor = new StringEditor(fileData);

            stringEditor.MoveToEnd();
            stringEditor.Next();
            stringEditor.PrevThatContains("}");
            stringEditor.PrevThatContains("}");
            stringEditor.InsertLine("\n" +
                                    $"        private Mock<I{options.EntityNamePluralFrom}CrudRepository> Setup{options.EntityNamePluralFrom}RepositoryDefault()\n" +
                                    "        {\n" +
                                    $"            var {options.EntityNamePluralLowerFrom}CrudRepository = new Mock<I{options.EntityNamePluralFrom}CrudRepository>(MockBehavior.Strict);\n" +
                                    $"            {options.EntityNamePluralLowerFrom}CrudRepository.Setup(repository => repository.Does{options.EntityNameFrom}Exist({options.EntityNameFrom}TestValues.IdDefault)).Returns(true);\n" +
                                    $"            {options.EntityNamePluralLowerFrom}CrudRepository.Setup(repository => repository.Does{options.EntityNameFrom}Exist({options.EntityNameFrom}TestValues.IdDefault2)).Returns(true);\n" +
                                    $"            {options.EntityNamePluralLowerFrom}CrudRepository.Setup(repository => repository.Does{options.EntityNameFrom}Exist({options.EntityNameFrom}TestValues.IdForCreate)).Returns(false);\n" +
                                    $"            return {options.EntityNamePluralLowerFrom}CrudRepository;\n" +
                                    "        }");

            fileData = stringEditor.GetText();

            // ----------- TestMethods -----------
            stringEditor = new StringEditor(fileData);
            stringEditor.NextThatContains("[TestMethod]");
            while (stringEditor.GetLineNumber() < stringEditor.GetLineCount())
            {
                stringEditor.Next();
                if (stringEditor.GetLine().Contains("Create" + options.EntityNameTo) ||
                    stringEditor.GetLine().Contains("Update" + options.EntityNameTo))
                {
                    stringEditor.NextThatContains($"Mock<I{options.EntityNamePluralTo}CrudRepository>");
                    stringEditor.Next(line => !line.Contains("CrudRepository>") && line.Trim().Length > 0);
                    stringEditor.InsertLine($"            Mock<I{options.EntityNamePluralFrom}CrudRepository> {options.EntityNamePluralLowerFrom}CrudRepository = this.Setup{options.EntityNamePluralFrom}RepositoryDefault();");

                    stringEditor.NextThatContains($"{options.EntityNamePluralTo}CrudLogic {options.EntityNamePluralLowerTo}CrudLogic = new {options.EntityNamePluralTo}CrudLogic");
                    stringEditor.Next(line => !line.Contains("CrudRepository.Object"));
                    stringEditor.InsertLine($"                {options.EntityNamePluralLowerFrom}CrudRepository.Object,");
                }
                else
                {
                    stringEditor.NextThatContains($"{options.EntityNamePluralTo}CrudLogic {options.EntityNamePluralLowerTo}CrudLogic = new {options.EntityNamePluralTo}CrudLogic");
                    stringEditor.Next(line => !line.Contains("CrudRepository.Object"));
                    stringEditor.InsertLine("                null,");
                }
                stringEditor.NextThatContains("[TestMethod]");
            }

            return(stringEditor.GetText());
        }