Esempio n. 1
0
        private void AddSchemas(CProject dataProject, KSolution mSolution, KDataStoreProject sqlKProject)
        {
            /*
             * foreach (var mockView in sqlKProject.MockView)
             * {
             *  AddSchema(dataProject, mockView.Schema.SchemaName);
             *  if (sqlKProject.KickstartAuditTables)
             *      AddSchema(dataProject, $"{mockView.Schema.SchemaName}");
             *
             *  AddSchema(dataProject, $"{mockView.Schema.SchemaName}Api");
             * }*/
            foreach (var table in sqlKProject.Table)
            {
                AddSchema(dataProject, $"{table.GeneratedTable.Schema.SchemaName}");
            }

            foreach (var view in sqlKProject.View)
            {
                AddSchema(dataProject, $"{view.GeneratedView.Schema.SchemaName}");
            }

            foreach (var storeProcedure in sqlKProject.StoredProcedure)
            {
                AddSchema(dataProject, $"{storeProcedure.GeneratedStoredProcedure.Schema.SchemaName}");
            }
        }
Esempio n. 2
0
        public bool GenerateCSolution(KSolution solution)
        {
            if (solution.GeneratedSolution != null)
            {
                return(false);

                ;
            }
            var allGenerated = true;

            foreach (var project in solution.Project
                     .OfType <KGrpcIntegrationProject>())
            {
                foreach (var rpcRef in project.ProtoRef)
                {
                    if (rpcRef.RefSolution.GeneratedSolution == null)
                    {
                        allGenerated = false;
                        break;
                    }
                }
            }
            if (!allGenerated)
            {
                return(false);
            }


            _solutionToCSolutionConverter.Convert(solution);

            return(true);
        }
Esempio n. 3
0
        public CProject BuildProject(KSolution kSolution, KDataStoreProject dataStoreKProject)
        {
            _dataStoreKProject = dataStoreKProject;

            var kinesisProject = new CProject
            {
                ProjectName      = dataStoreKProject.ProjectFullName,
                ProjectShortName = dataStoreKProject.ProjectName,
                ProjectFolder    = dataStoreKProject.ProjectFolder,
                ProjectType      = CProjectType.FlywayProj
            };

            kinesisProject.TemplateProjectPath =
                @"templates\NetStandard20ClassLibrary.csproj";
            kinesisProject.ProjectIs = CProjectIs.DatabaseFlyway;

            /*
             * addFlyway(kinesisProject);
             *
             * AddSchemas(kinesisProject, kSolution, dataStoreKProject);
             *
             * var tables2 = dataStoreKProject.Table.Select(t => t.GeneratedTable).ToList();
             * AddTables(kinesisProject, tables2);
             *
             * AddTableTypes(kinesisProject, dataStoreKProject.TableType.Select(tt=> tt.GeneratedTableType).ToList());
             *
             * if (true) //todo: add separate setting for CRUD vs GET
             *  AddGetStoredProcedures(kinesisProject, dataStoreKProject.StoredProcedure.Select(s=>s.GeneratedStoredProcedure).ToList());
             *
             *
             * AddDmsRules(kinesisProject, tables2);
             */
            return(kinesisProject);
        }
Esempio n. 4
0
        public CProject BuildProject(KSolution kSolution, KDataStoreProject sqlKProject)
        {
            _sqlKProject = sqlKProject;

            var dbProject = new CProject
            {
                ProjectName      = sqlKProject.ProjectFullName,
                ProjectShortName = sqlKProject.ProjectName,
                ProjectFolder    = sqlKProject.ProjectFolder,
                ProjectType      = CProjectType.FlywayProj
            };

            dbProject.TemplateProjectPath =
                @"templates\NetStandard20ClassLibrary.csproj";
            dbProject.ProjectIs = CProjectIs.DatabaseFlyway;

            addFlyway(dbProject);

            AddSchemas(dbProject, kSolution, sqlKProject);

            var tables2 = sqlKProject.Table.Select(t => t.GeneratedTable).ToList();

            AddTables(dbProject, tables2);

            AddTableTypes(dbProject, sqlKProject.TableType.Select(tt => tt.GeneratedTableType).ToList());

            if (true) //todo: add separate setting for CRUD vs GET
            {
                AddGetStoredProcedures(dbProject, sqlKProject.StoredProcedure.Select(s => s.GeneratedStoredProcedure).ToList());
            }


            AddDmsRules(dbProject, tables2);
            return(dbProject);
        }
        public void Bind(KSolution templateSolution)
        {
            _templateSolution = templateSolution;

            _textBoxSolutionName.Text = templateSolution.SolutionName;
            _textBoxCompanyName.Text  = templateSolution.CompanyName;
            if (!string.IsNullOrEmpty(templateSolution.ProtoFileText))
            {
                _comboBoxSourceOfMetadata.SelectedIndex = 1;
            }
            else
            {
                _comboBoxSourceOfMetadata.SelectedIndex = 2;
            }

            foreach (var templateProject in _templateSolution.Project)
            {
                var projectControl = new ProjectOptionsControl();
                var tabPage        = new TabPage();
                tabPage.Text = templateProject.ProjectShortName;
                _tabControlProjects.TabPages.Add(tabPage);
                tabPage.Controls.Add(projectControl);
                projectControl.Dock = DockStyle.Fill;
                projectControl.Bind(templateProject);
            }
        }
Esempio n. 6
0
        private CProject BuildGrpcProject(KSolution kSolution, KDataStoreProject databaseKProject,
                                          KDataLayerProject dataLayerKProject, KGrpcProject grpcKProjectIn, CSolution solution, CProject sqlProject,
                                          CProject dataProject)
        {
            var grpcProject = _grpcServiceProjectService.BuildProject(kSolution, databaseKProject, dataLayerKProject,
                                                                      grpcKProjectIn, sqlProject, dataProject);

            return(grpcProject);
        }
        public override CProject BuildProject(KSolution kSolution, KDataStoreProject databaseKProject,
                                              KDataLayerProject dataLayerKProject, KGrpcProject grpcKProject, CProject sqlProject, CProject dataProject)
        {
            var project = base.BuildProject(kSolution, databaseKProject, dataLayerKProject, grpcKProject, sqlProject,
                                            dataProject);

            project.ProjectIs = CProjectIs.Grpc | CProjectIs.Service;
            return(project);
        }
Esempio n. 8
0
        private CProject BuildDataStoreProject(KSolution kSolution, KDataStoreProject dataStoreKProject)
        {
            var service = _dataStoreServiceFactory.Create(dataStoreKProject.DataStoreType);

            if (service == null)
            {
                return(null);
            }

            return(service.BuildProject(kSolution, dataStoreKProject));
        }
Esempio n. 9
0
        private void addTabPage(KSolution templateSolution)
        {
            var tabPage = new TabPage();

            tabPage.Text = $"{templateSolution.SolutionName}";

            var control = new SolutionOptionsControl();

            tabPage.Controls.Add(control);
            control.Dock = DockStyle.Fill;
            control.Bind(templateSolution);
            _tabControl.TabPages.Add(tabPage);
        }
Esempio n. 10
0
 public KProtoFile BuildProtoFileFromKSolution(KSolution solution)
 {
     if (string.IsNullOrWhiteSpace(solution.ProtoFileText))
     {
         return(null);
     }
     try
     {
         var kProtoFile = Convert(solution.ProtoFileName, solution.ProtoFileText);
         return(kProtoFile);
     }
     catch (ProtoCompileException)
     {
         return(null);
     }
 }
Esempio n. 11
0
        public CProject BuildSolutionFilesProject(KSolution mSolution)
        {
            var project = new CProject
            {
                ProjectName      = "SolutionFiles",
                ProjectShortName = "SolutionFiles",
                ProjectFolder    = string.Empty,
                ProjectType      = CProjectType.CsProj,
                ProjectIs        = CProjectIs.SolutionFiles
            };

            AddGitIgnoreFile(project);
            AddNugetConfig(project);
            AddRulesetFile(mSolution, project);
            return(project);
        }
Esempio n. 12
0
        public CProject BuildProject(KSolution kSolution, KGrpcClientProject grpcClientKProject)
        {
            _grpcClientKProject = grpcClientKProject;
            var project = new CProject
            {
                ProjectName      = grpcClientKProject.ProjectFullName,
                ProjectShortName = grpcClientKProject.ProjectShortName,
                ProjectFolder    = grpcClientKProject.ProjectFolder,
                ProjectType      = CProjectType.CsProj,
                ProjectIs        = grpcClientKProject.ProjectIs
            };

            project.TemplateProjectPath = @"templates\NetStandard20ClassLibrary.csproj";

            return(project);
        }
Esempio n. 13
0
        private void AddRulesetFile(KSolution mSolution, CProject project)
        {
            var nuGetConfigFile = ReadResourceFile($".ruleset");

            nuGetConfigFile = nuGetConfigFile.Replace("##CompanyName##", mSolution.CompanyName);
            nuGetConfigFile = nuGetConfigFile.Replace("##SolutionName##", mSolution.SolutionName);

            project.ProjectContent.Add(new CProjectContent
            {
                Content = new CText {
                    Text = nuGetConfigFile
                },
                BuildAction = CBuildAction.None,
                File        = new CFile
                {
                    Folder   = $@"",
                    FileName = $"{mSolution.CompanyName}.{mSolution.SolutionName}.ruleset",
                    Encoding = Encoding.ASCII
                }
            });
        }
        public CProject BuildProject(KSolution kSolution, KDataStoreProject dataStoreKProject, KDataStoreTestProject sqlTestKProject,
                                     KDataLayerProject dataLayerKProject,
                                     CProject dataStoreProject, CInterface dbProviderInterface, CClass dbProviderClass)
        {
            _dataStoreKProject   = dataStoreKProject;
            _sqlTestKProject     = sqlTestKProject;
            _dataLayerKProject   = dataLayerKProject;
            _dataStoreProject    = dataStoreProject;
            _dbProviderInterface = dbProviderInterface;
            _dbProviderClass     = dbProviderClass;

            var dbTestProject = new CProject
            {
                ProjectName      = sqlTestKProject.ProjectFullName,
                ProjectShortName = sqlTestKProject.ProjectName,
                ProjectFolder    = sqlTestKProject.ProjectFolder,
                ProjectType      = CProjectType.CsProj
            };

            dbTestProject.ProjectReference.Add(dataStoreProject);

            dbTestProject.TemplateProjectPath = @"templates\NetCore31ConsoleApp.csproj";

            AddTestInitializationClass(dbTestProject);
            AddStartupContainerClass(dbTestProject);
            AddTestDataServiceClass(dbTestProject);
            AddTestDataServiceBuilderInterface(dbTestProject);
            AddTestDataServiceBuilderClass(dbTestProject);
            AddReadSqlScriptClass(dbTestProject);
            AddSqlScriptInterface(dbTestProject);
            AddSqlScriptClass(dbTestProject);
            AddEmbeddedSqlCommandClass(dbTestProject);
            AddEmbeddedSqlQueryClass(dbTestProject);
            AddAssemblyExtensionClass(dbTestProject);
            AddAppSettingsJson(dbTestProject);
            AddDataServiceTestClass(dbTestProject);
            AddNuGetRefs(dbTestProject);

            return(dbTestProject);
        }
        public CProject BuildProject(KSolution kSolution, KDockerComposeProject dockerComposeKProject)
        {
            _dockerComposeKProject = dockerComposeKProject;
            var project = new CProject
            {
                ProjectName      = dockerComposeKProject.ProjectFullName,
                ProjectShortName = dockerComposeKProject.ProjectShortName,
                ProjectFolder    = dockerComposeKProject.ProjectFolder,
                ProjectType      = CProjectType.DockerProj,
                ProjectIs        = dockerComposeKProject.ProjectIs
            };

            project.TemplateProjectPath = @"templates\Docker\docker-compose.dcproj";

            var dockerComposeFile = new DockerComposeFileService().Build();

            project.ProjectContent.Add(new CProjectContent {
                Content = dockerComposeFile, File = new CFile {
                    FileName = "docker-compose.yml"
                }, BuildAction = CBuildAction.None
            });

            return(project);
        }
Esempio n. 16
0
 public CProject BuildProject(KSolution kSolution, KDataStoreProject dataStoreKProject)
 {
     return(new CProject {
         Kickstart = false
     });
 }
        private List <KSolutionGroup> GetSolutionGroups()
        {
            var solutionGroupList = new List <KSolutionGroup>();

            _sl.SelectWorksheet("Solutions");


            var colSolutionGroup     = GetColumnIndex("SolutionGroupName");
            var colSolutionName      = GetColumnIndex("SolutionName");
            var colCompanyName       = GetColumnIndex("CompanyName");
            var colDefaultSchemaName = GetColumnIndex("DefaultSchemaName");

            var colKickstartdatabaseProject      = GetColumnIndex("KickstartdatabaseProject");
            var colKickstartDataProject          = GetColumnIndex("KickstartDataProject");
            var colKickstartAuditTables          = GetColumnIndex("KickstartAuditTables");
            var colKickstartCRUDStoredProcedures = GetColumnIndex("KickstartCRUDStoredProcedures");
            var colKickstartTableSeedScripts     = GetColumnIndex("KickstartTableSeedScripts");

            var colKickstartGrpcProjectFlag            = GetColumnIndex("KickstartGrpcProjectFlag");
            var colKickstartGrpcIntegrationProjectFlag = GetColumnIndex("KickstartGrpcIntegrationProjectFlag");

            var colSqlViewFile = GetColumnIndex("SqlViewFile");

            /*
             * var col = GetColumnIndex("");
             * var col = GetColumnIndex("");
             * var col = GetColumnIndex("");
             * var col = GetColumnIndex("");
             * var col = GetColumnIndex("");
             * var col = GetColumnIndex("");
             * var col = GetColumnIndex("");
             * var col = GetColumnIndex("");
             * var col = GetColumnIndex("");
             * var col = GetColumnIndex("");
             * var col = GetColumnIndex("");
             * var col = GetColumnIndex("");
             */

            var currentRow    = 2;
            var solutionGroup =
                new KSolutionGroup {
                SolutionGroupName = _sl.GetCellValueAsString(currentRow, colSolutionGroup)
            };

            solutionGroupList.Add(solutionGroup);
            while (!string.IsNullOrEmpty(_sl.GetCellValueAsString(currentRow, colSolutionGroup)))
            {
                if (solutionGroup.SolutionGroupName != _sl.GetCellValueAsString(currentRow, colSolutionGroup))
                {
                    solutionGroup = new KSolutionGroup
                    {
                        SolutionGroupName = _sl.GetCellValueAsString(currentRow, colSolutionGroup)
                    };
                    solutionGroupList.Add(solutionGroup);
                }
                var solution = new KSolution
                {
                    SolutionName = _sl.GetCellValueAsString(currentRow, colSolutionName),
                    CompanyName  = _sl.GetCellValueAsString(currentRow, colCompanyName)

                                   /*
                                    * DefaultSchemaName = _sl.GetCellValueAsString(currentRow, colDefaultSchemaName),
                                    * KickstartdatabaseProject = _sl.GetCellValueAsBoolean(currentRow, colKickstartdatabaseProject),
                                    * KickstartDataProject = _sl.GetCellValueAsBoolean(currentRow, colKickstartDataProject),
                                    * KickstartAuditTables = _sl.GetCellValueAsBoolean(currentRow, colKickstartAuditTables),
                                    * KickstartCRUDStoredProcedures = _sl.GetCellValueAsBoolean(currentRow, colKickstartCRUDStoredProcedures),
                                    * KickstartTableSeedScripts = _sl.GetCellValueAsBoolean(currentRow, colKickstartTableSeedScripts),
                                    *
                                    * KickstartGrpcProjectFlag = _sl.GetCellValueAsBoolean(currentRow, colKickstartGrpcProjectFlag),
                                    * KickstartGrpcIntegrationProjectFlag = _sl.GetCellValueAsBoolean(currentRow, colKickstartGrpcIntegrationProjectFlag),
                                    */
                };
                var databaseProject = new KDataStoreProject();
                databaseProject.SqlViewFile = _sl.GetCellValueAsString(currentRow, colSqlViewFile);
                solution.Project.Add(databaseProject);

                solution.GeneratedSolution = new CSolution {
                    SolutionName = solution.SolutionName
                };
                solutionGroup.Solution.Add(solution);

                currentRow++;
            }
            return(solutionGroupList);
        }
        public CProject BuildProject(KSolution mSolution, KDataStoreProject sqlKProject)
        {
            var dbProject = new CProject
            {
                ProjectName      = sqlKProject.ProjectFullName, //$"{CompanyName}.{ProjectName}.{ProjectSuffix}",
                ProjectShortName = sqlKProject.ProjectName,     // $@"{ProjectName}.{ProjectSuffix}",
                ProjectFolder    = sqlKProject.ProjectFolder,
                ProjectType      = CProjectType.SqlProj
            };

            dbProject.TemplateProjectPath =
                @"templates\SqlServer2014DbProject.sqlproj";
            dbProject.ProjectIs = CProjectIs.DataBase;

            var schemaConverter = new CSchemaToSqlServerSchemaConverter();

            //create schema
            AddSchemas(dbProject, mSolution, sqlKProject);

            var tables2 = sqlKProject.Table.Select(t => t.GeneratedTable).ToList();

            AddTables(dbProject, tables2);

            var tables = GetTables(sqlKProject.MockView, false);

            AddTables(dbProject, tables);

            if (sqlKProject.KickstartAuditTables)
            {
                var auditTables = GetTables(sqlKProject.MockView, true);
                //fixup the FK's
                FixupAuditFKs(auditTables);
                AddIsDeleteColumn(auditTables);
                AddTables(dbProject, auditTables);
            }

            AddTableTypes(dbProject, sqlKProject.TableType);

            AddViews(dbProject, sqlKProject.View);

            var allTables = new List <CTable>();

            allTables.AddRange(tables);
            allTables.AddRange(tables2);

            /*
             * if (sqlKProject.KickstartCRUDStoredProcedures)
             * {
             *  //AddInsertStoredProcedures(dataProject, tables);
             *  //AddUpdateStoredProcedures(dataProject, tables);
             *
             *  AddInsertUpdateStoredProcedures(dbProject, allTables);
             *  //AddInsertUpdateStoredProcedures(dbProject, tables2);
             *
             * }*/
            if (true) //todo: add separate setting for CRUD vs GET
            {
                AddGetStoredProcedures(dbProject, sqlKProject.StoredProcedure);
            }

            /*
             * if (sqlMProject.KickstartCRUDStoredProcedures)
             * {
             *  //delete stored procedures
             *  AddDeleteStoredProcedures(dbProject, allTables);
             *  //AddDeleteStoredProcedures(dbProject, tables2);
             * }
             */
            if (sqlKProject.KickstartTableSeedScripts)
            {
                AddSeedScripts(dbProject, allTables);
            }

            return(dbProject);
        }
        public CProject BuildProject(KSolution kSolution, KGrpcProject mGrpcProject,
                                     KGrpcServiceClientTestProject grpcMServiceClientTestProject, CProject grpcProject, bool addProtoRef = false)
        {
            _kSolution    = kSolution;
            _mGrpcProject = mGrpcProject;
            _grpcMServiceClientTestProject = grpcMServiceClientTestProject;
            var project = new CProject
            {
                ProjectName      = grpcMServiceClientTestProject.ProjectFullName,
                ProjectShortName = grpcMServiceClientTestProject.ProjectShortName,
                ProjectFolder    = grpcMServiceClientTestProject.ProjectFolder,
                ProjectType      = CProjectType.CsProj,
                ProjectIs        = CProjectIs.Test | CProjectIs.Client,
                StartupObject    =
                    $"{grpcMServiceClientTestProject.CompanyName}.{grpcMServiceClientTestProject.ProjectName}{grpcMServiceClientTestProject.NamespaceSuffix}.{grpcMServiceClientTestProject.ProjectSuffix}.Program"
            };

            project.TemplateProjectPath = @"templates\NetCore31ConsoleApp.csproj";
            project.NuGetReference.Add(new CNuGet {
                NuGetName = "Microsoft.NET.Test.Sdk", Version = "15.3.0"
            });
            project.NuGetReference.Add(new CNuGet {
                NuGetName = "Moq", Version = "4.7.99"
            });
            project.NuGetReference.Add(new CNuGet {
                NuGetName = "MSTest.TestAdapter", Version = "1.1.18"
            });
            project.NuGetReference.Add(new CNuGet {
                NuGetName = "MSTest.TestFramework", Version = "1.1.18"
            });


            var testClasses = new List <CClass>();

            foreach (var protoFile in _mGrpcProject.ProtoFile)
            {
                foreach (var protoService in protoFile.GeneratedProtoFile.ProtoService)
                {
                    var testClass = BuildTestClass(protoService);
                    testClasses.Add(testClass);
                    project.ProjectContent.Add(new CProjectContent
                    {
                        Content     = testClass,
                        BuildAction = CBuildAction.DoNotInclude,
                        File        = new CFile {
                            Folder = $@"", FileName = $"{testClass.ClassName}.cs"
                        }
                    });
                }
                if (addProtoRef)
                {
                    AddProtoRpcRef(project, protoFile.GeneratedProtoFile);
                }
            }
            AddProgramClass(project, grpcProject, testClasses);


            AddProtoBatchFile(project);
            project.ProjectReference.Add(grpcProject);
            return(project);
        }
Esempio n. 20
0
 public void AddAllProjectsToMasterSln(KSolution solution, string outputRootPath, string solutionName)
 {
     AddAllProjectsToMasterSln(solution.GeneratedSolution, outputRootPath, solutionName);
 }
        public CProject BuildProject(KSolution mSolution, KGrpcIntegrationProject grpcKIntegrationProject,
                                     IList <KProtoRef> protoRpcRefs)
        {
            _kSolution    = mSolution;
            _grpcKProject = grpcKIntegrationProject;


            var project = new CProject
            {
                ProjectName         = grpcKIntegrationProject.ProjectFullName,
                ProjectShortName    = grpcKIntegrationProject.ProjectShortName,
                ProjectFolder       = grpcKIntegrationProject.ProjectFolder,
                ProjectType         = CProjectType.CsProj,
                ProjectIs           = CProjectIs.Grpc | CProjectIs.Integration | CProjectIs.Service,
                TemplateProjectPath = @"templates\NetCore31ConsoleApp.csproj"
            };

            //AddLoggerClass(project);
            //AddGitIgnoreFile(project);
            AddProtoRpcRefs(project, protoRpcRefs);
            //AddProtoBatchFile(project);
            if (protoRpcRefs.Count > 0)
            {
                AddProtoRefBatchFile(project);
            }
            AddAppClass(project);
            //AddLogEvents(project);

            if (_grpcKProject is KGrpcIntegrationProject)
            {
                AddApiHosts(project);
                AddLimitsSettings(project);
            }

            AddServiceSettings(project);
            AddVersionTxt(project);
            var containerClass = _containerClassBuilder.AddContainerClass(_grpcKProject, DataStoreTypes.Unknown, project, null, null, null, null);

            AddStartupAppServices(project, null, null);
            // var mediatorInterface = AddIMediatorInterface(project);
            //AddMediatorClass(project, mediatorInterface);
            AddDockerFile(project);
            AddNugetRefs(project);
            AddAppSettingsJson(project, grpcKIntegrationProject.ProtoFile.FirstOrDefault()?.GeneratedProtoFile);

            foreach (var protoFile in grpcKIntegrationProject.ProtoFile)
            {
                AddProtoFile(project, protoFile.GeneratedProtoFile);
                //AddProtoFileRefs(project, protoFileRefs);
                AddQuery(project, null, protoFile.GeneratedProtoFile);
                AddHandlers(project, null, null, grpcKIntegrationProject, protoFile.GeneratedProtoFile);

                foreach (var service in protoFile.GeneratedProtoFile.ProtoService)
                {
                    var protoNamespace = protoFile.GeneratedProtoFile.CSharpNamespace; //
                    if (string.IsNullOrEmpty(protoNamespace))
                    {
                        protoNamespace =
                            $@"{grpcKIntegrationProject.CompanyName}.{grpcKIntegrationProject.ProjectName}.{
                                    grpcKIntegrationProject.ProjectSuffix
                                }.Proto.Types";
                    }


                    var implClass = _serviceImplClassBuilder.BuildServiceImplClass(_grpcKProject, service, protoFile.CSharpNamespace);
                    project.ProjectContent.Add(new CProjectContent
                    {
                        Content     = implClass,
                        BuildAction = _grpcKProject.DotNetType == DotNetType.Framework ? CBuildAction.Compile : CBuildAction.DoNotInclude,
                        File        = new CFile {
                            Folder = $@"Implementation", FileName = $"{implClass.ClassName}.cs"
                        }
                    });
                }
            }
            AddStartupGrpcClass(project, grpcKIntegrationProject.ProtoFile);

            AddProgramClass(project, containerClass);

            return(project);
        }
Esempio n. 22
0
        public KSolution BuildSolution(KickstartWizardModel kickstartWizardModel)
        {
            var solution = new KSolution()
            {
                CompanyName = kickstartWizardModel.CompanyName, SolutionName = kickstartWizardModel.SolutionName
            };

            KProtoFile kProtoFile = null;

            if (kickstartWizardModel.MetadataSource == MetadataSource.Grpc)
            {
                kProtoFile = kickstartWizardModel.MetadataSource == MetadataSource.Grpc ? _protoToKProtoConverter.Convert("zzz", kickstartWizardModel.ProtoFileText) : null;

                //this will override whatever user typed on first standard VS dialog
                if (kickstartWizardModel.CurrentStep == KickstartWizardModel.Step.ProtoFile)
                {
                    kickstartWizardModel.SolutionName = InferSolutionName(kProtoFile);
                    kickstartWizardModel.ProjectName  = InferProjectName(kProtoFile);
                }
                else
                {
                }

                var databaseProject = BuildDatabaseProject(kickstartWizardModel, kProtoFile);
                solution.Project.Add(databaseProject);

                var databaseTestProject = BuildDatabaseTestProject(kickstartWizardModel, kProtoFile);
                solution.Project.Add(databaseTestProject);

                //_databaseSqlView.Bind(databaseProject);

                //if (_currentStep == Step.GenerationStart)
                {
                    var dataLayerProject = BuildDataLayerProject(kickstartWizardModel, databaseProject);
                    var grpcProject      = BuildGrpcProject(kickstartWizardModel, databaseProject, dataLayerProject, kProtoFile);
                    solution.Project.Add(grpcProject);

                    solution.Project.Add(dataLayerProject);
                }
            }
            else if (kickstartWizardModel.MetadataSource == MetadataSource.SqlScripts)
            {
                var databaseProjectStart = BuildDatabaseProject(kickstartWizardModel, null);

                var connectionString = "Server=localhost;";
                var outputRootPath   = string.Empty;

                var databaseProject = _dbToKSolutionConverter.BuildSqlMeta(connectionString, outputRootPath, databaseProjectStart);

                var dataLayerProject = BuildDataLayerProject(kickstartWizardModel, databaseProject);

                solution.Project.Add(databaseProject);
                solution.Project.Add(dataLayerProject);

                var grpcProject = BuildGrpcProject(kickstartWizardModel, databaseProject, dataLayerProject, null);
                grpcProject.CompanyName = kickstartWizardModel.CompanyName;
                solution.Project.Add(grpcProject);

                var protoFiles = _dataLayerProjectToKProtoFileConverter.Convert(databaseProject, dataLayerProject, grpcProject);
                foreach (var pf in protoFiles)
                {
                    grpcProject.ProtoFile.Add(pf);
                }
                //_databaseSqlStep.Bind(databaseProject);

                var pf3 = protoFiles.FirstOrDefault();
                if (pf3 != null)
                {
                    pf3.ProtoFileText = _protoFileToProtoFileConverter.Convert(pf3.GeneratedProtoFile);
                    // _protoFileView.Bind(pf3);
                }
            }


            if (kickstartWizardModel.CreateGrpcServiceTestClientProject)
            {
                solution.Project.Add(new KGrpcServiceClientTestProject {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }
            if (kickstartWizardModel.CreateDockerBuildProject)
            {
                solution.Project.Add(new KDockerBuildScriptProject {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }
            if (kickstartWizardModel.CreateGrpcUnitTestProject)
            {
                solution.Project.Add(new KGrpcServiceUnitTestProject {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }
            if (kickstartWizardModel.CreateIntegrationTestProject)
            {
                solution.Project.Add(new KGrpcServiceIntegrationTestProject {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }

            if (kickstartWizardModel.CreateWebAppProject)
            {
                solution.Project.Add(new KWebUIProject {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }

            if (kickstartWizardModel.CreateDockerComposeProject)
            {
                solution.Project.Add(new KDockerComposeProject()
                {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }

            if (kickstartWizardModel.CreateGrpcClientProject)
            {
                solution.Project.Add(new KGrpcClientProject()
                {
                    ProjectName = kickstartWizardModel.ProjectName
                });
            }
            return(solution);
        }
Esempio n. 23
0
        public void Convert(KSolution kSolution)
        {
            var solution = new CSolution {
                SolutionName = $"{kSolution.CompanyName}.{kSolution.SolutionName}"
            };
            var integrationTestSolution = new CSolution
            {
                SolutionName = $"{kSolution.CompanyName}.{kSolution.SolutionName}.IntegrationTests"
            };
            bool generatedSomething = true;

            while (generatedSomething)
            {
                generatedSomething = false;
                foreach (var kProject in kSolution.Project)
                {
                    _logger.LogInformation("Generating projects for KProject: {project}", kProject.ProjectName);
                    bool dependenciesAllGenerated = !kProject.DependsOnProject.Any(p => p.GeneratedProject == null);
                    if (dependenciesAllGenerated)
                    {
                        if (kProject.GeneratedProject != null)
                        {
                            continue;
                        }
                        if (kProject is KWebUIProject)
                        {
                            var webAppProject = kProject as KWebUIProject;
                            var webAppService =
                                new WebAppProjectService {
                            };

                            var webAppCProject = webAppService.BuildProject(webAppProject);

                            kProject.GeneratedProject = webAppCProject;
                            if (webAppProject.Kickstart)
                            {
                                solution.Project.Add(webAppCProject);
                            }
                        }

                        if (kProject is KDockerComposeProject)
                        {
                            var dockerComposeKProject = kProject as KDockerComposeProject;

                            var dockerComposeProjectService = new DockerComposeProjectService();

                            var dockerComposeCProject = dockerComposeProjectService.BuildProject(kSolution, dockerComposeKProject);

                            kProject.GeneratedProject = dockerComposeCProject;
                            if (dockerComposeCProject.Kickstart)
                            {
                                solution.Project.Add(dockerComposeCProject);
                            }
                        }

                        if (kProject is KGrpcClientProject)
                        {
                            var kGrpcClientProject = kProject as KGrpcClientProject;

                            var grpcClientProjectService = new GrpcClientProjectService();

                            var grpcClientCProject = grpcClientProjectService.BuildProject(kSolution, kGrpcClientProject);

                            kProject.GeneratedProject = grpcClientCProject;
                            if (grpcClientCProject.Kickstart)
                            {
                                solution.Project.Add(grpcClientCProject);
                            }
                        }



                        if (kProject is KDataStoreProject)
                        {
                            var      dataStoreKProject = kProject as KDataStoreProject;
                            CProject dataStoreProject  = BuildDataStoreProject(kSolution, dataStoreKProject);
                            if (dataStoreProject != null)
                            {
                                kProject.GeneratedProject = dataStoreProject;
                                if (dataStoreKProject.Kickstart && dataStoreProject.Kickstart)
                                {
                                    solution.Project.Add(dataStoreProject);
                                }
                                _logger.LogInformation("Generated data store project {project}", dataStoreProject.ProjectName);
                                generatedSomething = true;
                            }
                            else
                            {
                                kProject.GeneratedProject = new CNullProject();
                                _logger.LogInformation("Kipped data store project {project}", kProject.ProjectName);
                                generatedSomething = true; //tell a white lie
                            }
                        }
                        else if (kProject is KDataLayerProject)
                        {
                            CProject dataProject         = null;
                            var      sqlKProject         = kProject.DependsOnProject.FirstOrDefault(k => k is KDataStoreProject) as KDataStoreProject;
                            var      sqlProject          = sqlKProject?.GeneratedProject;
                            var      allStoredProcedures = new List <CStoredProcedure>();
                            if (sqlProject != null)
                            {
                                foreach (var pc in sqlProject.ProjectContent)
                                {
                                    if (pc.Content is CStoredProcedure)
                                    {
                                        allStoredProcedures.Add(pc.Content as CStoredProcedure);
                                    }
                                }
                            }


                            var dataLayerKProject = kProject as KDataLayerProject;

                            dataProject = _dataLayerServiceFactory.Create(dataLayerKProject.ConnectsToDatabaseType).BuildProject(sqlKProject, dataLayerKProject, allStoredProcedures,
                                                                                                                                 sqlKProject?.Table, sqlKProject?.TableType, sqlKProject?.View);
                            kProject.GeneratedProject = dataProject;
                            if (dataLayerKProject.Kickstart)
                            {
                                solution.Project.Add(dataProject);
                            }

                            generatedSomething = true;

                            foreach (var dbTest in kSolution.Project
                                     .OfType <KDataStoreTestProject>())
                            {
                                var dataStoreProject      = sqlKProject.GeneratedProject;
                                var kDataStoreTestProject = dbTest as KDataStoreTestProject;
                                var service = _dataStoreTestServiceFactory.Create(kDataStoreTestProject.DataStoreType);
                                if (service != null)
                                {
                                    var dbProviderInterface = dataProject.Interface.First(i =>
                                                                                          i.InheritsFrom?.InterfaceName == "IDbProvider");
                                    var dbProviderClass = dataProject.Class.First(c =>
                                                                                  c.Implements.Exists(i => i.InterfaceName == dbProviderInterface.InterfaceName));

                                    if (kDataStoreTestProject.Kickstart && kDataStoreTestProject.Kickstart)
                                    {
                                        solution.Project.Add(service.BuildProject(kSolution, sqlKProject,
                                                                                  kDataStoreTestProject, dataLayerKProject, dataStoreProject,
                                                                                  dbProviderInterface, dbProviderClass));
                                    }
                                    // kDataStoreTestProject, dataStoreProject));
                                }
                            }
                        }
                        else if (kProject is KGrpcIntegrationProject)
                        {
                            var sqlKProject = kProject.DependsOnProject.FirstOrDefault(k => k is KDataStoreProject) as KDataStoreProject;

                            var dataLayerKProject = kProject.DependsOnProject.FirstOrDefault(k => k is KDataLayerProject) as KDataLayerProject;

                            var kGrpcProject = kProject.DependsOnProject.FirstOrDefault(k => k is KGrpcProject) as KGrpcProject;

                            if (sqlKProject != null && dataLayerKProject != null)
                            {
                                var sqlProject       = sqlKProject.GeneratedProject;
                                var dataLayerProject = dataLayerKProject.GeneratedProject;

                                var grpcIntegrationProject = BuildGrpcProject(kSolution, sqlKProject, dataLayerKProject, kGrpcProject,
                                                                              solution, sqlProject, dataLayerProject);
                                kProject.GeneratedProject = grpcIntegrationProject;
                                solution.Project.Add(grpcIntegrationProject);
                            }
                            else
                            {
                                var grpcKIntegrationProject = kProject as KGrpcIntegrationProject;

                                var grpcIntegrationProject = _grpcIntegrationServiceProjectService.BuildProject(kSolution,
                                                                                                                grpcKIntegrationProject, grpcKIntegrationProject.ProtoRef);
                                kProject.GeneratedProject = grpcIntegrationProject;
                                solution.Project.Add(grpcIntegrationProject);
                            }


                            generatedSomething = true;
                        }
                        else if (kProject is KGrpcProject)
                        {
                            var sqlKProject = kProject.DependsOnProject.FirstOrDefault(k => k is KDataStoreProject) as KDataStoreProject;
                            var sqlProject  = sqlKProject?.GeneratedProject;

                            var dataLayerKProject = kProject.DependsOnProject.FirstOrDefault(k => k is KDataLayerProject) as KDataLayerProject;
                            var dataLayerProject  = dataLayerKProject?.GeneratedProject;

                            var kGrpcProject = kProject as KGrpcProject;//.DependsOnProject.First(k => k is KGrpcProject) as KGrpcProject;

                            var grpcProject = BuildGrpcProject(kSolution, sqlKProject, dataLayerKProject, kGrpcProject,
                                                               solution, sqlProject, dataLayerProject);
                            kProject.GeneratedProject = grpcProject;
                            if (kGrpcProject.Kickstart)
                            {
                                solution.Project.Add(grpcProject);
                            }

                            foreach (var grpcUnitTestProject in kSolution.Project.OfType <KGrpcServiceUnitTestProject>())
                            {
                                solution.Project.Add(_grpcServiceUnitTestProjectService.BuildProject(kGrpcProject,
                                                                                                     grpcUnitTestProject, grpcProject));
                            }

                            foreach (var grpcClientTestProject in kSolution.Project
                                     .OfType <KGrpcServiceClientTestProject>())
                            {
                                solution.Project.Add(_grpcServiceClientTestProjectService.BuildProject(kSolution, kGrpcProject,
                                                                                                       grpcClientTestProject, grpcProject));
                            }
                            foreach (var grpcIntegrationBusinessTestProject in kSolution.Project
                                     .OfType <KGrpcIntegrationBusinessTestProject>())
                            {
                                var grpcIntegrationTestBusinessProject =
                                    _grpcServiceIntegrationBusinessTestProjectService.BuildProject(
                                        grpcIntegrationBusinessTestProject, grpcProject, kGrpcProject.ProtoFile, false);
                                integrationTestSolution.Project.Add(grpcIntegrationTestBusinessProject);

                                foreach (var grpcIntegrationTestProject in kSolution.Project
                                         .OfType <KGrpcServiceIntegrationTestProject>())
                                {
                                    integrationTestSolution.Project.Add(
                                        _grpcServiceIntegrationTestProjectService.BuildProject(kGrpcProject,
                                                                                               grpcIntegrationTestProject, grpcIntegrationTestBusinessProject, false));
                                }
                            }
                            generatedSomething = true;
                        }
                    }
                }
            }

            foreach (var mDockerBuildScriptProject in kSolution.Project
                     .OfType <KDockerBuildScriptProject>())
            {
                solution.Project.Add(_buildScriptService.Execute(kSolution.SolutionName, mDockerBuildScriptProject));
            }

            solution.Project.Add(_solutionFileService.BuildSolutionFilesProject(kSolution));


            kSolution.GeneratedSolution     = solution;
            kSolution.GeneratedTestSolution = integrationTestSolution;

            int x = 1;
        }
Esempio n. 24
0
        public void ConvertOld(KSolution kSolution)
        {
            var solution = new CSolution {
                SolutionName = $"{kSolution.CompanyName}.{kSolution.SolutionName}"
            };
            var integrationTestSolution = new CSolution
            {
                SolutionName = $"{kSolution.CompanyName}.{kSolution.SolutionName}.IntegrationTests"
            };

            foreach (var sqlKProject in kSolution.Project
                     .OfType <KDataStoreProject>())
            {
                var sqlProject = _dataStoreServiceFactory.Create(sqlKProject.DataStoreType).BuildProject(kSolution, sqlKProject);

                if (sqlKProject.Kickstart)
                {
                    solution.Project.Add(sqlProject);
                }
                var allStoredProcedures = new List <CStoredProcedure>();
                foreach (var pc in sqlProject.ProjectContent)
                {
                    if (pc.Content is CStoredProcedure)
                    {
                        allStoredProcedures.Add(pc.Content as CStoredProcedure);
                    }
                }

                foreach (var dataLayerProject in kSolution.Project
                         .OfType <KDataLayerProject>())
                {
                    CProject dataProject = _dataLayerServiceFactory.Create(dataLayerProject.ConnectsToDatabaseType).BuildProject(sqlKProject, dataLayerProject, allStoredProcedures, sqlKProject.Table,
                                                                                                                                 sqlKProject.TableType, sqlKProject.View);
                    solution.Project.Add(dataProject);

                    foreach (var grpcServiceIntegrationTestDbProject in kSolution.Project
                             .OfType <KGrpcServiceIntegrationTestDbProject>())
                    {
                        var dataIntegrationService     = new GrpcServiceIntegrationTestDbProjectService();
                        var dataIntegrationTestProject =
                            dataIntegrationService.BuildProject(grpcServiceIntegrationTestDbProject);
                        integrationTestSolution.Project.Add(dataIntegrationTestProject);
                    }

                    foreach (var kGrpcProject in kSolution.Project
                             .OfType <KGrpcProject>())
                    {
                        var grpcProject = BuildGrpcProject(kSolution, sqlKProject, dataLayerProject, kGrpcProject,
                                                           solution, sqlProject, dataProject);
                        solution.Project.Add(grpcProject);

                        foreach (var grpcUnitTestProject in kSolution.Project.OfType <KGrpcServiceUnitTestProject>())
                        {
                            var grpcServiceUnitTestProjectService = new GrpcServiceUnitTestProjectService();
                            solution.Project.Add(grpcServiceUnitTestProjectService.BuildProject(kGrpcProject,
                                                                                                grpcUnitTestProject, grpcProject));
                        }

                        foreach (var grpcClientTestProject in kSolution.Project
                                 .OfType <KGrpcServiceClientTestProject>())
                        {
                            solution.Project.Add(_grpcServiceClientTestProjectService.BuildProject(kSolution, kGrpcProject,
                                                                                                   grpcClientTestProject, grpcProject));
                        }
                        foreach (var grpcIntegrationBusinessTestProject in kSolution.Project
                                 .OfType <KGrpcIntegrationBusinessTestProject>())
                        {
                            var grpcIntegrationTestBusinessProject =
                                _grpcServiceIntegrationBusinessTestProjectService.BuildProject(
                                    grpcIntegrationBusinessTestProject, grpcProject, kGrpcProject.ProtoFile, false);
                            integrationTestSolution.Project.Add(grpcIntegrationTestBusinessProject);

                            foreach (var grpcIntegrationTestProject in kSolution.Project
                                     .OfType <KGrpcServiceIntegrationTestProject>())
                            {
                                integrationTestSolution.Project.Add(
                                    _grpcServiceIntegrationTestProjectService.BuildProject(kGrpcProject,
                                                                                           grpcIntegrationTestProject, grpcIntegrationTestBusinessProject, false));
                            }
                        }
                    }
                }
            }

            foreach (var grpcMIntegrationProject in kSolution.Project
                     .OfType <KGrpcIntegrationProject>())
            {
                var grpcIntegrationProject = _grpcIntegrationServiceProjectService.BuildProject(kSolution,
                                                                                                grpcMIntegrationProject, grpcMIntegrationProject.ProtoRef);
                solution.Project.Add(grpcIntegrationProject);
                foreach (var grpcUnitTestProject in kSolution.Project
                         .OfType <KGrpcServiceUnitTestProject>())
                {
                    solution.Project.Add(_grpcServiceUnitTestProjectService.BuildProject(grpcMIntegrationProject,
                                                                                         grpcUnitTestProject, grpcIntegrationProject));
                }

                foreach (var grpcIntegrationBusinessTestProject in kSolution.Project
                         .OfType <KGrpcIntegrationBusinessTestProject>())
                {
                    var project = _grpcServiceIntegrationBusinessTestProjectService.BuildProject(
                        grpcIntegrationBusinessTestProject, grpcIntegrationProject, grpcMIntegrationProject.ProtoFile,
                        true);
                    project.ProjectIs = CProjectIs.Integration | CProjectIs.Test | CProjectIs.Client;
                    integrationTestSolution.Project.Add(project);
                }
                foreach (var grpcClientTestProject in kSolution.Project
                         .OfType <KGrpcServiceClientTestProject>())
                {
                    solution.Project.Add(_grpcServiceClientTestProjectService.BuildProject(kSolution, grpcMIntegrationProject,
                                                                                           grpcClientTestProject, grpcIntegrationProject));
                }
            }

            foreach (var mDockerBuildScriptProject in kSolution.Project
                     .OfType <KDockerBuildScriptProject>())
            {
                solution.Project.Add(_buildScriptService.Execute(kSolution.SolutionName, mDockerBuildScriptProject));
            }
            solution.Project.Add(_solutionFileService.BuildSolutionFilesProject(kSolution));

            kSolution.GeneratedSolution     = solution;
            kSolution.GeneratedTestSolution = integrationTestSolution;
            //return solution;
        }