Esempio n. 1
0
        private static void runCab(int id)
        {
            // single iter
              // get first
              CSolution sol = new CSolution();

              sol.orders.Add(DataContainer.getWhereId(id));
              DataContainer.orders.Remove(DataContainer.getWhereId(id));
              List<Order> avalible = GetAvalible(DataContainer.getWhereId(id).start, DataContainer.getWhereId(id).departTime);
              sol.orders.Add(avalible[0]);
              if (DataContainer.routes[sol.orders[1].start, sol.orders[0].finish] >
            DataContainer.routes[sol.orders[1].start, sol.orders[1].finish])
              {
            sol.orders.Add(sol.orders[1]);
            sol.orders.Add(sol.orders[0]);
              }
              else
              {
            sol.orders.Add(sol.orders[0]);
            sol.orders.Add(sol.orders[1]);
              }

              File.WriteAllText("answer.txt", sol.ToString());

              //while(avalible.Count > 0)
              //{

              //}
        }
Esempio n. 2
0
        public void ShouldCreateSolutionWithMetaRepoProjectManualVerify()
        {
            //Arrange
            var metaRepo = new MetaRepoBuilder().BuildSampleMetaRepo();
            var project  = new CProject()
            {
                ProjectName = "meta-repo", ProjectIs = CProjectIs.MetaRepo, ProjectType = CProjectType.MetaRepoProj
            };

            project.ProjectContent.Add(new CProjectContent {
                Content = metaRepo, File = new CFile {
                    FileName = "metaproject.cmd", Encoding = Encoding.ASCII
                }, BuildAction = CBuildAction.None
            });
            var solution = new CSolution()
            {
                SolutionName = "MetaSolution"
            };

            solution.Project.Add(project);

            IServiceCollection serviceCollection = new ServiceCollection();

            serviceCollection.AddTransient <IVisualStudioSolutionWriter, VisualStudioSolutionWriter>();
            var serviceProvider = serviceCollection.BuildServiceProvider();
            var writer          = serviceProvider.GetRequiredService <IVisualStudioSolutionWriter>();


            //Act
            writer.Write(@"c:\temp\meta1\", solution);

            //Assert

            //todo: manual verification
        }
Esempio n. 3
0
 CSolution GetActiveStdVerification(CSolution parent)
 {
     if (lstSolution.Exists(c => c.Type_sol == 3 && c.Solution_status == true && c.Parentid == parent.Id))
     {
         return(lstSolution.First(c => c.Type_sol == 3 && c.Solution_status == true && c.Parentid == parent.Id));
     }
     return(null);
 }
Esempio n. 4
0
        public void AddAllProjectsToMasterSln(CSolution solution, string outputRootPath, string solutionName)
        {
            var masterSolutionPath = Path.Combine(outputRootPath, $"{solutionName}.sln");

            CommandProcessor.ExecuteCommand($"dotnet new sln  --name {solutionName}", outputRootPath);

            foreach (var project in solution.Project)
            {
                AddProjectToSln(outputRootPath, solutionName, masterSolutionPath, project);
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Populate business objects from the data reader
        /// </summary>
        /// <param name="dataReader">data reader</param>
        /// <returns>list of CSolution</returns>
        internal List <CSolution> PopulateObjectsFromReader(IDataReader dataReader)
        {
            List <CSolution> list = new List <CSolution>();

            while (dataReader.Read())
            {
                CSolution businessObject = new CSolution();
                PopulateBusinessObjectFromReader(businessObject, dataReader);
                list.Add(businessObject);
            }
            return(list);
        }
        public CSolution Convert(string slnPath)
        {
            var solution = new CSolution();

            solution.SolutionName = Path.GetFileName(slnPath);
            var rawSolution = SolutionParser.Parse(slnPath);

            solution.SolutionPath = slnPath;
            foreach (var rawProject in rawSolution.Projects)
            {
                //skip "folders"
                if (rawProject.TypeGuid == Guid.Parse("{2150e333-8fdc-42a3-9474-1a3956d46de8}"))
                {
                    continue;
                }
                var fullPath = Path.Combine(Path.GetDirectoryName(slnPath), rawProject.Path);
                if (!File.Exists(fullPath))
                {
                    continue;
                }
                var projectText = File.ReadAllText(fullPath);
                if (IgnoreTestProjects && projectText.Contains("{3AC096D0-A1C2-E12C-1390-A8335801FDAB}"))
                {
                    //test project
                    continue;
                }
                if (IgnoreTestProjects && rawProject.Name.Contains("Test"))
                {
                    //test project
                    continue;
                }

                var project = new CProject {
                };
                project.ProjectGuid      = rawProject.Guid;
                project.ProjectShortName = rawProject.Name;
                project.ProjectName      = rawProject.Name;
                project.Path             = Path.Combine(Path.GetDirectoryName(slnPath), rawProject.Path);
                project.HasDockerFile    = HasDockerFile(project.Path);
                var projectExtension = Path.GetExtension(project.Path).ToLower();
                if (projectExtension == ".sqlproj")
                {
                    project.ProjectType = CProjectType.SqlProj;
                    project.ProjectIs   = CProjectIs.DataBase;
                }

                solution.Project.Add(project);
            }
            return(solution);
        }
Esempio n. 7
0
 public void Visit(IVisitor visitor, CSolution solution)
 {
     _currentSolution = solution;
     Directory.CreateDirectory(_fileWriter.RootPath);
     solution.SolutionPath = Path.Combine(_fileWriter.RootPath, $"{solution.SolutionName}.sln");
     CommandProcessor.ExecuteCommand($"dotnet new sln --name {solution.SolutionName} ", _fileWriter.RootPath);
     foreach (var project in solution.Project)
     {
         if (string.IsNullOrEmpty(project.ProjectFolder))
         {
             _fileWriter.CurrentPath = _fileWriter.RootPath;
         }
         project.Accept(visitor);
     }
 }
Esempio n. 8
0
        public void Write(string outputRootPath, CSolution solution)
        {
            _fileWriter.RootPath = outputRootPath;

            /*
             * var visitor = new CVisualStudioVisitor(_logger, codeWriter,
             *  new FastSolutionVisitor(new CodeWriter(), fileWriter),
             *  new CProjectVisitor(_logger, new CodeWriter(), fileWriter),
             *  new CProjectFileVisitor(_logger, fileWriter, codeWriter), new CSharpCInterfaceVisitor(codeWriter),
             *  new CSharpCClassVisitor(codeWriter), new CSharpCMethodVisitor(codeWriter),
             *  new CSharpCPropertyVisitor(codeWriter),
             *  new CSharpCParameterVisitor(codeWriter),
             *  new CSharpCFieldVisitor(codeWriter),
             *  new CSharpCConstructorVisitor(codeWriter),
             *  null,
             *  new CSharpCClassAttributeVisitor(codeWriter),
             *  new CSharpCMethodAttributeVisitor(codeWriter));
             */
            solution.Accept(_visualStudioVisitor);

            //now that the .proto files and .cmd have been written to disk
            //execute the .cmd to generate the .cs files

            foreach (var project in solution.Project)
            {
                foreach (var pc in project.ProjectContent)
                {
                    if (pc.Content is CBatchFile)
                    {
                        var batchFile = pc.Content as CBatchFile;
                        if (!batchFile.ExecutePostKickstart)
                        {
                            continue;
                        }
                        //todo: this probably won't run in Docker / Linux
                        var processStartInfo = new ProcessStartInfo();
                        processStartInfo.FileName         = pc.File.FileName;
                        processStartInfo.WorkingDirectory = pc.File.WrittenToPath;
                        processStartInfo.WindowStyle      = ProcessWindowStyle.Hidden;
                        processStartInfo.UseShellExecute  = true;
                        Process.Start(processStartInfo);

                        //todo: verify success
                    }
                }
            }
        }
Esempio n. 9
0
        void AddSecondSolution()
        {
            if (!lstSolution.Exists(c => c.Idsolution == 0 && c.Solution_status == true && c.Type_sol == 2))
            {
                CSolution firstSolution = GetActiveFirstSolution();

                // --- añadir dentro de una solución intermedia 1
                lstSolution.Add(
                    new CSolution
                {
                    Idsolution            = 0,
                    Id                    = GetMaxCorrelativeNode() + 1,
                    Parentid              = firstSolution.Id,
                    Cod_solution          = "Nueva solución intermedia 2", //modSolution.GetCorrelative(ModSolution.Correlative.SolucionIntermedia),
                    Date_begin            = DateTime.Now,
                    Date_end              = DateTime.Now.AddMonths(new CSettings().GetNumMonthSolInterm()),
                    Idelement             = group_solution.Idelement,
                    Lote                  = "",
                    Observation           = "",
                    Prepared_by           = Comun.User_system.Iduser,
                    Purity                = 0,
                    Solution_name         = "",
                    Solution_status       = true,
                    Type_sol              = 2,
                    Volumen               = 0,
                    Concentration         = template_method_aa.Std_concentration_sol2,
                    Aliquot               = 0,
                    Idreactive_medium     = group_solution.Idreactive_medium,
                    Idreactive_modif      = group_solution.Idreactive_modif,
                    Reactive_medium_value = GetMedium(2),
                    Image_index           = 0
                });

                treeSolInterm.DataSource = new BindingList <CSolution>(lstSolution);
                treeSolInterm.ExpandAll();

                SetButtonsInProcess();
            }
            else
            {
                new FormMessage("Agregar solución", "No es posible agregar. Existe una solución intermedia 2 en proceso", true, false).ShowDialog();
            }
        }
Esempio n. 10
0
        public static CProtoFileRef GetProtoFileRef(this CSolution solution, string serviceName)
        {
            foreach (var project in solution.Project)
            {
                foreach (var pc in project.ProjectContent)
                {
                    if (pc.Content is CProtoFileRef)
                    {
                        var protoFileRef = pc.Content as CProtoFileRef;

                        if (protoFileRef.ProtoFile.ProtoService.Exists(s => s.ServiceName == serviceName))
                        {
                            return(protoFileRef);
                        }
                    }
                }
            }
            return(null);
        }
Esempio n. 11
0
        /// <summary>
        /// Select by primary key
        /// </summary>
        /// <param name="keys">primary keys</param>
        /// <returns>CSolution business object</returns>
        public CSolution SelectByPrimaryKey(CSolutionKeys keys)
        {
            NpgsqlCommand sqlCommand = new NpgsqlCommand();

            sqlCommand.CommandText = "public.sp_solution_SelectByPrimaryKey";
            sqlCommand.CommandType = CommandType.StoredProcedure;

            // Use connection object of base class
            sqlCommand.Connection = MainConnection;

            try
            {
                sqlCommand.Parameters.Add(new NpgsqlParameter("p_idsolution", NpgsqlDbType.Integer, 4, "", ParameterDirection.Input, false, 0, 0, DataRowVersion.Proposed, keys.Idsolution));


                MainConnection.Open();

                NpgsqlDataReader dataReader = sqlCommand.ExecuteReader();

                if (dataReader.Read())
                {
                    CSolution businessObject = new CSolution();

                    PopulateBusinessObjectFromReader(businessObject, dataReader);

                    return(businessObject);
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("CSolution::SelectByPrimaryKey::Error occured.", ex);
            }
            finally
            {
                MainConnection.Close();
                sqlCommand.Dispose();
            }
        }
Esempio n. 12
0
        private List <CRepo> GetBlahRepos( )
        {
            var repos = new List <CRepo>();

            var marketPlaceData = new CRepo {
                Name = "sample-repo", Url = companyGit
            };
            var marketPlaceDataSolution1 = new CSolution
            {
                SolutionName = "Company.SampleService.SyncServices",
                SolutionPath = @"Code\SyncServices"
            };

            marketPlaceDataSolution1.Project.Add(new CProject
            {
                ProjectName      = "SampleService",
                ProjectShortName = "SampleService",
                Path             = "Company.SampleService.SyncServices.csproj",
                ProjectIs        = CProjectIs.Grpc
            });

            marketPlaceData.RepoSolution.Add(marketPlaceDataSolution1);
            repos.Add(marketPlaceData);


            repos.Add(new CRepo {
                Name = "news-svc", Url = companyGit
            });
            repos.Add(new CRepo {
                Name = "weather-report-svc", Url = companyGit
            });


            repos.Add(new CRepo {
                Name = "dockerize"
            });

            return(repos);
        }
Esempio n. 13
0
        public void ShouldCreateSolutionWithDockerComposeProjectManualVerify()
        {
            //Arrange


            var metaRepo          = new MetaRepoBuilder().BuildSampleMetaRepo();
            var dockerComposeFile = new DockerComposeFileService().Build(metaRepo);

            var project = new CProject()
            {
                ProjectName = "docker-compose", ProjectIs = CProjectIs.DockerCompose, ProjectType = CProjectType.DockerProj, TemplateProjectPath = @"templates\Docker\docker-compose.dcproj"
            };

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

            solution.Project.Add(project);


            IServiceCollection serviceCollection = new ServiceCollection();

            serviceCollection.AddTransient <IVisualStudioSolutionWriter, VisualStudioSolutionWriter>();
            var serviceProvider = serviceCollection.BuildServiceProvider();
            var writer          = serviceProvider.GetRequiredService <IVisualStudioSolutionWriter>();

            //Act
            writer.Write(@"c:\temp\", solution);

            //Assert

            //todo: manual verification
        }
Esempio n. 14
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. 15
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);
        }
Esempio n. 16
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;
        }
Esempio n. 17
0
        /// <summary>
        /// insert new row in the table
        /// </summary>
        /// <param name="businessObject">business object</param>
        /// <returns>true of successfully insert</returns>
        public bool Insert(CSolution businessObject)
        {
            NpgsqlCommand sqlCommand = new NpgsqlCommand();

            sqlCommand.CommandText = "public.sp_solution_Insert";
            sqlCommand.CommandType = CommandType.StoredProcedure;

            // Use connection object of base class
            sqlCommand.Connection = MainConnection;

            try
            {
                sqlCommand.Parameters.AddWithValue("p_idsolution", businessObject.Idsolution);
                sqlCommand.Parameters["p_idsolution"].NpgsqlDbType = NpgsqlDbType.Integer;
                sqlCommand.Parameters["p_idsolution"].Direction    = ParameterDirection.InputOutput;

                sqlCommand.Parameters.AddWithValue("p_id", businessObject.Id);
                sqlCommand.Parameters["p_id"].NpgsqlDbType = NpgsqlDbType.Integer;
                sqlCommand.Parameters.AddWithValue("p_parentid", businessObject.Parentid);
                sqlCommand.Parameters["p_parentid"].NpgsqlDbType = NpgsqlDbType.Integer;
                sqlCommand.Parameters.AddWithValue("p_idgroup_solution", businessObject.Idgroup_solution);
                sqlCommand.Parameters["p_idgroup_solution"].NpgsqlDbType = NpgsqlDbType.Integer;
                sqlCommand.Parameters.AddWithValue("p_idelement", businessObject.Idelement);
                sqlCommand.Parameters["p_idelement"].NpgsqlDbType = NpgsqlDbType.Integer;
                sqlCommand.Parameters.AddWithValue("p_cod_solution", businessObject.Cod_solution);
                sqlCommand.Parameters["p_cod_solution"].NpgsqlDbType = NpgsqlDbType.Varchar;
                sqlCommand.Parameters.AddWithValue("p_type_sol", businessObject.Type_sol);
                sqlCommand.Parameters["p_type_sol"].NpgsqlDbType = NpgsqlDbType.Integer;
                sqlCommand.Parameters.AddWithValue("p_solution_name", businessObject.Solution_name);
                sqlCommand.Parameters["p_solution_name"].NpgsqlDbType = NpgsqlDbType.Varchar;
                sqlCommand.Parameters.AddWithValue("p_purity", businessObject.Purity);
                sqlCommand.Parameters["p_purity"].NpgsqlDbType = NpgsqlDbType.Numeric;
                sqlCommand.Parameters.AddWithValue("p_concentration", businessObject.Concentration);
                sqlCommand.Parameters["p_concentration"].NpgsqlDbType = NpgsqlDbType.Numeric;
                sqlCommand.Parameters.AddWithValue("p_aliquot", businessObject.Aliquot);
                sqlCommand.Parameters["p_aliquot"].NpgsqlDbType = NpgsqlDbType.Numeric;
                sqlCommand.Parameters.AddWithValue("p_volumen", businessObject.Volumen);
                sqlCommand.Parameters["p_volumen"].NpgsqlDbType = NpgsqlDbType.Numeric;
                sqlCommand.Parameters.AddWithValue("p_date_begin", businessObject.Date_begin);
                sqlCommand.Parameters["p_date_begin"].NpgsqlDbType = NpgsqlDbType.Date;
                sqlCommand.Parameters.AddWithValue("p_date_end", businessObject.Date_end);
                sqlCommand.Parameters["p_date_end"].NpgsqlDbType = NpgsqlDbType.Date;
                sqlCommand.Parameters.AddWithValue("p_num_months", businessObject.Num_months);
                sqlCommand.Parameters["p_num_months"].NpgsqlDbType = NpgsqlDbType.Integer;
                sqlCommand.Parameters.AddWithValue("p_prepared_by", businessObject.Prepared_by);
                sqlCommand.Parameters["p_prepared_by"].NpgsqlDbType = NpgsqlDbType.Smallint;
                sqlCommand.Parameters.AddWithValue("p_observation", businessObject.Observation);
                sqlCommand.Parameters["p_observation"].NpgsqlDbType = NpgsqlDbType.Varchar;
                sqlCommand.Parameters.AddWithValue("p_lote", businessObject.Lote);
                sqlCommand.Parameters["p_lote"].NpgsqlDbType = NpgsqlDbType.Varchar;
                sqlCommand.Parameters.AddWithValue("p_solution_status", businessObject.Solution_status);
                sqlCommand.Parameters["p_solution_status"].NpgsqlDbType = NpgsqlDbType.Boolean;
                sqlCommand.Parameters.AddWithValue("p_idreactive_medium", businessObject.Idreactive_medium);
                sqlCommand.Parameters["p_idreactive_medium"].NpgsqlDbType = NpgsqlDbType.Integer;
                sqlCommand.Parameters.AddWithValue("p_reactive_medium_value", businessObject.Reactive_medium_value);
                sqlCommand.Parameters["p_reactive_medium_value"].NpgsqlDbType = NpgsqlDbType.Numeric;
                sqlCommand.Parameters.AddWithValue("p_idreactive_modif", businessObject.Idreactive_modif);
                sqlCommand.Parameters["p_idreactive_modif"].NpgsqlDbType = NpgsqlDbType.Integer;
                sqlCommand.Parameters.AddWithValue("p_reactive_modif_value", businessObject.Reactive_modif_value);
                sqlCommand.Parameters["p_reactive_modif_value"].NpgsqlDbType = NpgsqlDbType.Numeric;
                sqlCommand.Parameters.AddWithValue("p_concat_cod_methods", businessObject.Concat_cod_methods);
                sqlCommand.Parameters["p_concat_cod_methods"].NpgsqlDbType = NpgsqlDbType.Varchar;
                sqlCommand.Parameters.AddWithValue("p_image_index", businessObject.Image_index);
                sqlCommand.Parameters["p_image_index"].NpgsqlDbType = NpgsqlDbType.Integer;
                sqlCommand.Parameters.AddWithValue("p_usernew", businessObject.Usernew);
                sqlCommand.Parameters["p_usernew"].NpgsqlDbType = NpgsqlDbType.Varchar;
                sqlCommand.Parameters.AddWithValue("p_datenew", businessObject.Datenew);
                sqlCommand.Parameters["p_datenew"].NpgsqlDbType = NpgsqlDbType.Date;
                sqlCommand.Parameters.AddWithValue("p_useredit", businessObject.Useredit);
                sqlCommand.Parameters["p_useredit"].NpgsqlDbType = NpgsqlDbType.Varchar;
                sqlCommand.Parameters.AddWithValue("p_dateedit", businessObject.Dateedit);
                sqlCommand.Parameters["p_dateedit"].NpgsqlDbType = NpgsqlDbType.Date;
                sqlCommand.Parameters.AddWithValue("p_status", businessObject.Status);
                sqlCommand.Parameters["p_status"].NpgsqlDbType = NpgsqlDbType.Boolean;


                MainConnection.Open();

                sqlCommand.ExecuteNonQuery();
                businessObject.Idsolution = Convert.ToInt32(sqlCommand.Parameters["p_idsolution"].Value);

                return(true);
            }
            catch (Exception ex)
            {
                throw new Exception("CSolution::Insert::Error occured.", ex);
            }
            finally
            {
                MainConnection.Close();
                sqlCommand.Dispose();
            }
        }
Esempio n. 18
0
 CSolution GetActiveStdVerification(CSolution parent)
 {
     if (lstSolution.Exists(c => c.Type_sol == 3 && c.Solution_status == true && c.Parentid == parent.Id))
     {
         return lstSolution.First(c => c.Type_sol == 3 && c.Solution_status == true && c.Parentid == parent.Id);
     }
     return null;
 }
Esempio n. 19
0
        /// <summary>
        /// Estados para los botones:
        /// -------------------------
        /// - si no existe una solución o esta desactivada entonces se habilita el estado de activación del boton
        /// - si existe una solución activa entonces se desactiva el botón y se puede preguntar por los botones
        ///   siguientes.
        /// </summary>
        void ShowStatusButtons()
        {
            AllowAddSolInterm1 = false;
            AllowAddSolInterm2 = false;
            AllowAddStdVerif   = false;
            CSolution firstSolution  = null;
            CSolution SecondSolution = null;

            if (!FlagSolutionInProcess)
            {
                // Solución intermedia 1
                if (Convert.ToBoolean(template_method_aa.Std_flag_sol_intermedia1))
                {
                    if ((firstSolution = GetActiveFirstSolution()) == null)
                    {
                        // no existe o está deshabilitado la solución intermedia 1, entonces habilitar agregación
                        AllowAddSolInterm1 = true;
                    }
                    else
                    {
                        // ya existe una solución intermedia 1
                        AllowAddSolInterm1 = false;
                        AllowAddSolInterm2 = false;
                        AllowAddStdVerif   = false;

                        //if (GetActiveStdVerification(firstSolution) == null)
                        if (GetActiveStdVerification1() == null)
                        {
                            AllowAddStdVerif = true;
                        }
                        else
                        {
                            // ya existe un estandar de verificación
                            AllowAddStdVerif = false;
                        }
                    }
                }
                // Solución intermedia 2
                if (Convert.ToBoolean(template_method_aa.Std_flag_sol_intermedia2))
                {
                    if (GetActiveFirstSolution() == null)
                    {
                        AllowAddSolInterm1 = true;
                        AllowAddSolInterm2 = false;
                        AllowAddStdVerif   = false;
                    }
                    else
                    {
                        // ya existe la solución intermedia 1 deshabilitar agregación
                        AllowAddSolInterm1 = false;
                        AllowAddStdVerif   = false;

                        // si solución intermedia dos no existe o está desactivada habilitar agregación
                        if ((SecondSolution = GetActiveSecondSolution()) == null)
                        {
                            AllowAddSolInterm2 = true;
                        }
                        else
                        {
                            // ya existe solución intermedia 2
                            AllowAddSolInterm2 = false;
                            AllowAddStdVerif   = false;

                            //if (GetActiveStdVerification(SecondSolution) == null)
                            if (GetActiveStdVerification2() == null)
                            {
                                AllowAddStdVerif = true;
                            }
                            else
                            {
                                // ya existe un estandar de verificación
                                AllowAddStdVerif = false;
                            }
                        }
                    }
                }

                btSolInterm1.Enabled = AllowAddSolInterm1;
                btSolInterm2.Enabled = AllowAddSolInterm2;
                btStdVerif.Enabled   = AllowAddStdVerif;
            }
            else
            {
                btSolInterm1.Enabled = AllowAddSolInterm1;
                btSolInterm2.Enabled = AllowAddSolInterm2;
                btStdVerif.Enabled   = AllowAddStdVerif;
            }
        }
Esempio n. 20
0
        /// <summary>
        /// Populate business object from data reader
        /// </summary>
        /// <param name="businessObject">business object</param>
        /// <param name="dataReader">data reader</param>
        internal void PopulateBusinessObjectFromReader(CSolution businessObject, IDataReader dataReader)
        {
            businessObject.Idsolution = dataReader.GetInt32(dataReader.GetOrdinal(CSolution.CSolutionFields.Idsolution.ToString()));

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Id.ToString())))
            {
                businessObject.Id = dataReader.GetInt32(dataReader.GetOrdinal(CSolution.CSolutionFields.Id.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Parentid.ToString())))
            {
                businessObject.Parentid = dataReader.GetInt32(dataReader.GetOrdinal(CSolution.CSolutionFields.Parentid.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Idgroup_solution.ToString())))
            {
                businessObject.Idgroup_solution = dataReader.GetInt32(dataReader.GetOrdinal(CSolution.CSolutionFields.Idgroup_solution.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Idelement.ToString())))
            {
                businessObject.Idelement = dataReader.GetInt32(dataReader.GetOrdinal(CSolution.CSolutionFields.Idelement.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Cod_solution.ToString())))
            {
                businessObject.Cod_solution = dataReader.GetString(dataReader.GetOrdinal(CSolution.CSolutionFields.Cod_solution.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Type_sol.ToString())))
            {
                businessObject.Type_sol = dataReader.GetInt32(dataReader.GetOrdinal(CSolution.CSolutionFields.Type_sol.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Solution_name.ToString())))
            {
                businessObject.Solution_name = dataReader.GetString(dataReader.GetOrdinal(CSolution.CSolutionFields.Solution_name.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Purity.ToString())))
            {
                businessObject.Purity = dataReader.GetDecimal(dataReader.GetOrdinal(CSolution.CSolutionFields.Purity.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Concentration.ToString())))
            {
                businessObject.Concentration = dataReader.GetDecimal(dataReader.GetOrdinal(CSolution.CSolutionFields.Concentration.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Aliquot.ToString())))
            {
                businessObject.Aliquot = dataReader.GetDecimal(dataReader.GetOrdinal(CSolution.CSolutionFields.Aliquot.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Volumen.ToString())))
            {
                businessObject.Volumen = dataReader.GetDecimal(dataReader.GetOrdinal(CSolution.CSolutionFields.Volumen.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Date_begin.ToString())))
            {
                businessObject.Date_begin = dataReader.GetDateTime(dataReader.GetOrdinal(CSolution.CSolutionFields.Date_begin.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Date_end.ToString())))
            {
                businessObject.Date_end = dataReader.GetDateTime(dataReader.GetOrdinal(CSolution.CSolutionFields.Date_end.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Num_months.ToString())))
            {
                businessObject.Num_months = dataReader.GetInt32(dataReader.GetOrdinal(CSolution.CSolutionFields.Num_months.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Prepared_by.ToString())))
            {
                businessObject.Prepared_by = (short?)dataReader.GetInt16(dataReader.GetOrdinal(CSolution.CSolutionFields.Prepared_by.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Observation.ToString())))
            {
                businessObject.Observation = dataReader.GetString(dataReader.GetOrdinal(CSolution.CSolutionFields.Observation.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Lote.ToString())))
            {
                businessObject.Lote = dataReader.GetString(dataReader.GetOrdinal(CSolution.CSolutionFields.Lote.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Solution_status.ToString())))
            {
                businessObject.Solution_status = dataReader.GetBoolean(dataReader.GetOrdinal(CSolution.CSolutionFields.Solution_status.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Idreactive_medium.ToString())))
            {
                businessObject.Idreactive_medium = dataReader.GetInt32(dataReader.GetOrdinal(CSolution.CSolutionFields.Idreactive_medium.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Reactive_medium_value.ToString())))
            {
                businessObject.Reactive_medium_value = dataReader.GetDecimal(dataReader.GetOrdinal(CSolution.CSolutionFields.Reactive_medium_value.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Idreactive_modif.ToString())))
            {
                businessObject.Idreactive_modif = dataReader.GetInt32(dataReader.GetOrdinal(CSolution.CSolutionFields.Idreactive_modif.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Reactive_modif_value.ToString())))
            {
                businessObject.Reactive_modif_value = dataReader.GetDecimal(dataReader.GetOrdinal(CSolution.CSolutionFields.Reactive_modif_value.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Concat_cod_methods.ToString())))
            {
                businessObject.Concat_cod_methods = dataReader.GetString(dataReader.GetOrdinal(CSolution.CSolutionFields.Concat_cod_methods.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Image_index.ToString())))
            {
                businessObject.Image_index = dataReader.GetInt32(dataReader.GetOrdinal(CSolution.CSolutionFields.Image_index.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Usernew.ToString())))
            {
                businessObject.Usernew = dataReader.GetString(dataReader.GetOrdinal(CSolution.CSolutionFields.Usernew.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Datenew.ToString())))
            {
                businessObject.Datenew = dataReader.GetDateTime(dataReader.GetOrdinal(CSolution.CSolutionFields.Datenew.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Useredit.ToString())))
            {
                businessObject.Useredit = dataReader.GetString(dataReader.GetOrdinal(CSolution.CSolutionFields.Useredit.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Dateedit.ToString())))
            {
                businessObject.Dateedit = dataReader.GetDateTime(dataReader.GetOrdinal(CSolution.CSolutionFields.Dateedit.ToString()));
            }

            if (!dataReader.IsDBNull(dataReader.GetOrdinal(CSolution.CSolutionFields.Status.ToString())))
            {
                businessObject.Status = dataReader.GetBoolean(dataReader.GetOrdinal(CSolution.CSolutionFields.Status.ToString()));
            }
        }
 public void Visit(CSolution solution)
 {
     _logger.LogInformation($"Visiting {GetType()}");
     _solutionVisitor.Visit(this, solution);
     _logger.LogInformation($"Visited {GetType()}");
 }
Esempio n. 22
0
        public void BuildSellersMegaSolution()
        {
            var tempPath = OutputDir;

            var codeWriter = new CodeWriter();

            IServiceCollection serviceCollection = new ServiceCollection();

            serviceCollection.AddTransient <IVisualStudioSolutionWriter, VisualStudioSolutionWriter>();
            serviceCollection.AddTransient <ICSolutionVisitor, FastSolutionVisitor>();

            var fileWriter = new FileWriter();

            fileWriter.RootPath = tempPath;
            serviceCollection.AddSingleton <IFileWriter>(fileWriter);

            serviceCollection.AddSingleton <ILogger <CVisualStudioVisitorBase> >(new Logger <CVisualStudioVisitorBase>(new NullLoggerFactory()));
            serviceCollection.AddSingleton <ILogger <CMetaRepoVisitor> >(new Logger <CMetaRepoVisitor>(new NullLoggerFactory()));
            serviceCollection.AddSingleton <ILogger <CRepoVisitor> >(new Logger <CRepoVisitor>(new NullLoggerFactory()));
            serviceCollection.AddSingleton <ILogger <VisualStudioSolutionWriter> >(new Logger <VisualStudioSolutionWriter>(new NullLoggerFactory()));
            serviceCollection.AddSingleton <ILogger <CProjectVisitor> >(new Logger <CProjectVisitor>(new NullLoggerFactory()));
            serviceCollection.AddSingleton <ILogger <CProjectFileVisitor> >(new Logger <CProjectFileVisitor>(new NullLoggerFactory()));
            serviceCollection.AddSingleton <ILogger <CProjectContentVisitor> >(new Logger <CProjectContentVisitor>(new NullLoggerFactory()));
            serviceCollection.AddSingleton <ILogger <CDockerComposeFileVisitor> >(new Logger <CDockerComposeFileVisitor>(new NullLoggerFactory()));
            serviceCollection.AddSingleton <ILogger <CDockerFileServiceVisitor> >(new Logger <CDockerFileServiceVisitor>(new NullLoggerFactory()));

            serviceCollection.AddSingleton <ICodeWriter>(codeWriter);
            serviceCollection.AddTransient <ICVisualStudioVisitorBase, CVisualStudioVisitorBase>();

            serviceCollection.AddTransient <IFastSolutionVisitor, FastSolutionVisitor>();
            //serviceCollection.AddTransient<ICVisualStudioVisitor, CVisualStudioVisitor>();
            serviceCollection.AddTransient <ICMetaRepoVisitor, CMetaRepoVisitor>();
            serviceCollection.AddTransient <ICRepoVisitor, CRepoVisitor>();
            serviceCollection.AddTransient <ICVisualStudioVisitor, CVisualStudioVisitor>();

            //var serviceProvider = serviceCollection.BuildServiceProvider();

            var container = new Container();

            container.Configure(config =>
            {
                config.Scan(scanner =>
                {
                    scanner.AssemblyContainingType <ILogger>();

                    scanner.AssemblyContainingType <IKickstartService>();
                    scanner.SingleImplementationsOfInterface();
                });
                config.Populate(serviceCollection);
            });
            var serviceProvider = container.GetInstance <IServiceProvider>();

            var metaRepo = new MetaRepoBuilder().BuildSampleMetaRepo();
            var visitor  = serviceProvider.GetRequiredService <ICVisualStudioVisitorBase>(); // new CVisualStudioVisitor(new Mock<ILogger>().Object, codeWriter);

            metaRepo.Accept(visitor as IVisitor);

            Directory.CreateDirectory(tempPath);

            //http://thesoftwarecondition.com/blog/2014/06/08/nuget-issues-with-nested-solutions-branches/

            //get code from repos
            CommandProcessor.ExecuteCommandWindow(codeWriter.ToString(), tempPath, true);

            UpdateLibraryPaths(tempPath);
            var compositeSolution = new CSolution()
            {
                SolutionName = metaRepo.MetaRepoName
            };

            compositeSolution.SolutionPath = Path.Combine(tempPath, $"{compositeSolution.SolutionName}.sln");
            var compositeRepo = new CRepo();

            compositeRepo.RepoSolution.Add(compositeSolution);

            metaRepo.CompositeRepo = compositeRepo;


            //todo: dockerize Asp.Net apps
            //set docker-compose to looking in the Publish folder otherwise there's way too many files
            //add docker file to project
            //set dockerfile to copy when Publish


            //find all the solutions in repos
            foreach (var repo in metaRepo.Repos)
            {
                var repoPath      = Path.Combine(tempPath, repo.Name);
                var solutionPaths = new VisualStudioScanner().ScanForSolutions(repoPath);

                var solutions = new SlnToCSolutionConverter().Convert(solutionPaths);
                repo.RepoSolution.Clear();//remove any existing
                foreach (var solution in solutions)
                {
                    if (repo.SolutionWhiteList.Count > 0 && !repo.SolutionWhiteList.Contains(solution.SolutionName))
                    {
                        continue;
                    }
                    repo.RepoSolution.Add(solution);
                }
            }

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

            var dockerComposeProject = new CProject()
            {
                ProjectName = "docker-compose", ProjectIs = CProjectIs.DockerCompose, ProjectType = CProjectType.DockerProj, TemplateProjectPath = @"templates\Docker\docker-compose.dcproj"
            };

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


            var writer = serviceProvider.GetRequiredService <IVisualStudioSolutionWriter>();

            writer.Write(tempPath, compositeSolution);


            //add all the projects to the composite solution
            var fastSolutionVisitor = serviceProvider.GetRequiredService <IFastSolutionVisitor>(); // new FastSolutionVisitor(codeWriter, new Mock<IFileWriter>().Object);

            foreach (var repo in metaRepo.Repos)
            {
                foreach (var solution in repo.RepoSolution)
                {
                    fastSolutionVisitor.AddAllProjectsToMasterSln(solution, tempPath, compositeSolution.SolutionName);
                }
            }


            //generate batch script to do "Nuget Restore"
            //todo: move into library
            var batchWriter = new CodeWriter();

            foreach (var repo in metaRepo.Repos)
            {
                foreach (var solution in repo.RepoSolution)
                {
                    System.Uri uri1 = new Uri(tempPath);

                    System.Uri uri2 = new Uri(Path.GetDirectoryName(solution.SolutionPath));

                    Uri relativeUri  = uri1.MakeRelativeUri(uri2);
                    var relativePath = relativeUri.ToString().Replace("%20", " ");

                    batchWriter.WriteLine($@"copy nuget.exe ""{relativePath}/nuget.exe"" /Y");
                    batchWriter.WriteLine($"cd {relativePath}");
                    batchWriter.WriteLine($@"Nuget Restore ""{solution.SolutionPath}""");
                    batchWriter.WriteLine($@"del nuget.exe");
                    batchWriter.WriteLine("cd /D  %~dp0"); //go back to where batch was run
                }
            }
            File.WriteAllText(Path.Combine(tempPath, "NugetRestore.cmd"), batchWriter.ToString());
        }