예제 #1
0
        public GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var location      = values.GetString("DestinationFolder");
            var iisExpressUrl = parameters.ContainsKey("iisExpressUrl") ? parameters["iisExpressUrl"] : "";

            var copier = new DirectoryRenamerCopier(arguments.TemplateInformation.TemplatePath, location)
            {
                ExcludeExtensions = arguments.TemplateInformation.ExcludeExtensions.Select(x => x.FileExtension).ToList(),
                RemoveExtensions  = arguments.TemplateInformation.RemoveExtensions.Select(x => x.FileExtension).ToList(),
                RenameExtensions  = arguments.TemplateInformation.RenameExtensions.Select(x => x.FileExtension).ToList(),
                UtfExtensions     = arguments.TemplateInformation.RenameExtensions.Where(x => x.UseUtf8Encoding).Select(x => x.FileExtension).ToList(),
                RenameWords       = arguments.TemplateInformation.Renames
            };

            copier.RenameWords.Add(iisExpressUrl, string.Format("http://localhost:{0}/", GetRandomPort()));

            if (copier.StartRenaming())
            {
                return(new GeneratorActionResult(true, ""));
            }
            else
            {
                return(new GeneratorActionResult(false, ""));
            }
        }
예제 #2
0
        public GeneratorActionResult RollbackAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var registerIis = values.GetBool("RegisterIis");

            if (registerIis)
            {
                var serverManager = new ServerManager();

                var site = serverManager.Sites.FirstOrDefault(x => x.Name == arguments.Name);

                if (site != null)
                {
                    serverManager.Sites.Remove(site);
                }

                var appPool = serverManager.ApplicationPools.FirstOrDefault(x => x.Name == arguments.Name);

                if (appPool != null)
                {
                    serverManager.ApplicationPools.Remove(appPool);
                }

                // Commit
                serverManager.CommitChanges();
            }

            return(new GeneratorActionResult(true, ""));
        }
예제 #3
0
        public void TestStrongTypesRepo()
        {
            var folder = @"..\UnitTests\TestAtoms\CareRelated";

            var args = new GeneratorArguments <CSharpTargetConfig>(
                new CSharpTargetConfig
            {
                Entities =
                {
                    StrongTypes = true
                }
            },
                folder, AtomCreator.LoadDefaults(folder));

            var sqlArgs      = new GeneratorArguments <SqlTargetConfig>(new SqlTargetConfig(), args.AtomsFolder, AtomCreator.LoadDefaults(folder));
            var sqlGenerator = new SqlGenerator().Generate(sqlArgs);


            var result = new RepositoryGenerator(sqlGenerator).Generate(args);

            foreach (var item in result)
            {
                Console.WriteLine(item.Output);
            }
        }
        public GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var location = values.GetString("DestinationFolder");

            RemoveFile(Path.Combine(location, "Template.xml"));

            return(new GeneratorActionResult(true, ""));
        }
예제 #5
0
        public GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var location = values.GetString("DestinationFolder");

            var repo = new Repository(location);

            repo.Push(new PushCommand().WithTimeout(60 * 60));

            return(new GeneratorActionResult(true, ""));
        }
        public GeneratorActionResult RollbackAction(GeneratorArguments arguments, ActionInputValues values, Dictionary <string, string> parameters)
        {
            var location = values.GetString("DestinationFolder");

            if (Directory.Exists(location))
            {
                Directory.Delete(location, true);
            }

            return(new GeneratorActionResult(true, ""));
        }
        public GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var location = values.GetString("DestinationFolder");

            var repo = new Repository(location);

            repo.Add(new AddCommand().WithPaths(location));

            repo.Commit(string.Format(MercurialCommitMessage, Environment.UserName));

            return(new GeneratorActionResult(true, ""));
        }
예제 #8
0
파일: SqlVerb.cs 프로젝트: jakeswenson/Atom
        private IEnumerable <GeneratorResult> FromTargetConfigs(SqlTargetConfig sqlConfig)
        {
            var args = new GeneratorArguments <SqlTargetConfig>(sqlConfig, AtomsFolder, AtomCreator.LoadDefaults(AtomsFolder));

            var sqlResult = new SqlGenerator().Generate(args);

            sqlResult.OutputPath = sqlConfig.OutputPath;

            if (Directory.Exists(sqlResult.OutputPath))
            {
                foreach (var file in Directory.EnumerateFiles(sqlResult.OutputPath, "*.generated.sql", SearchOption.AllDirectories))
                {
                    sqlResult.Deletions.Add(file);
                }
            }

            string redGateFile = Path.Combine(sqlConfig.OutputPath, "RedGateDatabaseInfo.xml");

            Log.Information("Looking for redgate database info xml at {RedGateDatabaseInfoXml}", redGateFile);


            if (sqlResult.DataFiles.Any() &&
                File.Exists(redGateFile))
            {
                Log.Information("Found redgate file, updating...");

                var regate       = XDocument.Load(uri: redGateFile);
                var dataFiles    = regate.Root.Elements("DataFileSet").First();
                var allDataFiles = dataFiles.Elements("DataFile")
                                   .Select(n => n.Value).Union(sqlResult.DataFiles, StringComparer.OrdinalIgnoreCase).ToList();

                dataFiles.Elements("Count")
                .First()
                .Value = allDataFiles.Count().ToString();

                Log.Information("DataFiles Count: {DataFileCount}", allDataFiles.Count());

                dataFiles.Elements("DataFile").Remove();

                dataFiles.Add(allDataFiles.Select(s => new XElement("DataFile", s)));

                var genResult = new GeneratorResult()
                {
                    OutputPath = _config.OutputPath
                };

                genResult.AddOutput("RedGateDatabaseInfo.xml", regate.ToString());

                yield return(genResult);
            }

            yield return(sqlResult);
        }
예제 #9
0
        private IEnumerable <ProjectedAtomRoot> GetProjectionAtoms(GeneratorArguments <CSharpTargetConfig> generatorArguments, CSharpTargetConfig config)
        {
            var atoms = AtomCreator.FromFolder(generatorArguments.AtomsFolder, generatorArguments.Defaults)
                        .ToList();

            var generator = new ProjectionMemberGenerator(atoms);

            var projectedAtoms = generator.GetProjections(AtomCreator.ProjectionsFromFolder(generatorArguments.AtomsFolder));

            return(atoms.Select(ProjectedAtomRoot.FromAtom)
                   .Concat(projectedAtoms));
        }
예제 #10
0
파일: SqlVerb.cs 프로젝트: devshorts/Atom
        private IEnumerable<GeneratorResult> FromTargetConfigs(SqlTargetConfig sqlConfig)
        {
            var args = new GeneratorArguments<SqlTargetConfig>(sqlConfig, AtomsFolder, AtomCreator.LoadDefaults(AtomsFolder));

            var sqlResult = new SqlGenerator().Generate(args);

            sqlResult.OutputPath = sqlConfig.OutputPath;

            if (Directory.Exists(sqlResult.OutputPath))
            {
                foreach (var file in Directory.EnumerateFiles(sqlResult.OutputPath, "*.generated.sql", SearchOption.AllDirectories))
                {
                    sqlResult.Deletions.Add(file);
                }
            }

            string redGateFile = Path.Combine(sqlConfig.OutputPath, "RedGateDatabaseInfo.xml");

            Log.Information("Looking for redgate database info xml at {RedGateDatabaseInfoXml}", redGateFile);

            if (sqlResult.DataFiles.Any() &&
                File.Exists(redGateFile))
            {
                Log.Information("Found redgate file, updating...");

                var regate = XDocument.Load(uri: redGateFile);
                var dataFiles = regate.Root.Elements("DataFileSet").First();
                var allDataFiles = dataFiles.Elements("DataFile")
                                            .Select(n => n.Value).Union(sqlResult.DataFiles, StringComparer.OrdinalIgnoreCase).ToList();

                dataFiles.Elements("Count")
                         .First()
                         .Value = allDataFiles.Count().ToString();

                Log.Information("DataFiles Count: {DataFileCount}", allDataFiles.Count());

                dataFiles.Elements("DataFile").Remove();

                dataFiles.Add(allDataFiles.Select(s => new XElement("DataFile", s)));

                var genResult = new GeneratorResult()
                {
                    OutputPath = _config.OutputPath
                };

                genResult.AddOutput("RedGateDatabaseInfo.xml", regate.ToString());

                yield return genResult;
            }

            yield return sqlResult;
        }
        public GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var location = values.GetString("DestinationFolder");

            var repo = new Repository(location);

            if (repo.Manifest().Any())
            {
                return(new GeneratorActionResult(false, "Repository has commits, and is therefor not empty!"));
            }

            return(new GeneratorActionResult(true, ""));
        }
예제 #12
0
        public GeneratorResult Generate(GeneratorArguments <CSharpTargetConfig> generatorArguments)
        {
            var result = new GeneratorResult();

            var generator = new CSharpCodeClassGenerator(generatorArguments.Config);

            var atoms = GetProjectionAtoms(generatorArguments, generatorArguments.Config);

            foreach (var generatorOutput in generator.Generate(atoms))
            {
                result.AddOutput(generatorOutput);
            }

            return(result);
        }
예제 #13
0
파일: Tests.cs 프로젝트: devshorts/Atom
        public void TestRepos()
        {
            var folder = @"..\UnitTests\TestAtoms\CareRelated";
            var args = new GeneratorArguments<CSharpTargetConfig>(new CSharpTargetConfig(), folder, AtomCreator.LoadDefaults(folder));

            var sqlArgs = new GeneratorArguments<SqlTargetConfig>(new SqlTargetConfig(), args.AtomsFolder, AtomCreator.LoadDefaults(folder));
            var sqlGenerator = new SqlGenerator().Generate(sqlArgs);

            var result = new RepositoryGenerator(sqlGenerator).Generate(args);

            foreach (var item in result)
            {
                Console.WriteLine(item.Output);
            }
        }
        public GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var location           = values.GetString("DestinationFolder");
            var connectionString   = parameters["connectionString"];
            var databasePrefix     = parameters["databasePrefix"];
            var databaseScriptName = parameters["databaseScriptName"];
            var databaseServerName = parameters["databaseServerName"];
            var databaseUsername   = parameters["databaseUsername"];
            var databasePassword   = parameters["databasePassword"];

            using (var sqlConnection = new SqlConnection(connectionString))
            {
                using (var sqlCommand = new SqlCommand(string.Format(DatabaseCreateStatement, string.Format(DatabaseNameFormat, databasePrefix, arguments.Name))
                                                       , sqlConnection))
                {
                    sqlCommand.Connection.Open();
                    sqlCommand.ExecuteNonQuery();
                    sqlCommand.Connection.Close();
                }
            }

            var databaseScriptFilePath = System.IO.Path.Combine(location, databaseScriptName);
            var osqlCommand            = string.Concat(string.Format(DatabaseOsqlCommand, databaseServerName, databaseUsername, databasePassword), " -d ", string.Format(DatabaseNameFormat, databasePrefix, arguments.Name),
                                                       " -i \"", databaseScriptFilePath, "\"");

            using (var process = new Process()
            {
                StartInfo = new ProcessStartInfo()
                {
                    Arguments = osqlCommand,
                    WindowStyle = ProcessWindowStyle.Normal,
                    CreateNoWindow = false,
                    FileName = "osql.exe"
                }
            })
            {
                process.Start();
                process.WaitForExit(300 * 1000);

                if (!process.HasExited)
                {
                    process.Kill();
                    throw new Exception("OSQL process was niet klaar binnen 5 minuten");
                }
            }

            return(new GeneratorActionResult(true, ""));
        }
        public virtual GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var location = values.GetString("DestinationFolder");

            try
            {
                GitCommandRunner.RunCommand("add -A", location);
                GitCommandRunner.RunCommand(string.Format("commit -m \"{0}\"", string.Format(GitCommitMessage, Environment.UserName)), location);
            }
            catch (Exception ex)
            {
                return(new GeneratorActionResult(false, ex.Message));
            }

            return(new GeneratorActionResult(true, ""));
        }
        public virtual GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var location = values.GetString("DestinationFolder");

            try
            {
                GitCommandRunner.RunCommand("config --global http.postBuffer 1548576000", location);
                GitCommandRunner.RunCommand("push --all origin", location);
            }
            catch (Exception ex)
            {
                return(new GeneratorActionResult(false, ex.Message));
            }

            return(new GeneratorActionResult(true, ""));
        }
예제 #17
0
        public GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            url   = parameters["url"];
            token = parameters["token"];

            try
            {
                values.Add("CloneUrl", GetCloneUrl(values.GetString("projectId")));
            }
            catch (Exception ex)
            {
                return(new GeneratorActionResult(false, ex.Message));
            }

            return(new GeneratorActionResult(true, ""));
        }
예제 #18
0
        public virtual GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var cloneUrl = values.GetString("CloneUrl");
            var location = values.GetString("DestinationFolder");

            try
            {
                GitCommandRunner.RunCommand(string.Format("clone {0} ./", cloneUrl), location);
            }
            catch (Exception ex)
            {
                return(new GeneratorActionResult(false, ex.Message));
            }

            return(new GeneratorActionResult(true, ""));
        }
        public GeneratorActionResult RollbackAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var editHostsFile = values.GetBool("EditHostsFile");

            if (editHostsFile)
            {
                if (System.IO.File.Exists(string.Concat(HostFileWriter.HostFilePath, ".backup")))
                {
                    // Replace backup
                    System.IO.File.WriteAllText(HostFileWriter.HostFilePath,
                                                System.IO.File.ReadAllText(string.Concat(HostFileWriter.HostFilePath, ".backup"), Encoding.UTF8),
                                                Encoding.UTF8);
                }
            }

            return(new GeneratorActionResult(true, ""));
        }
        public GeneratorActionResult ExecuteAction(GeneratorArguments arguments, ActionInputValues values, Dictionary <string, string> parameters)
        {
            var location = values.GetString("DestinationFolder");

            if (Directory.Exists(location))
            {
                if (Directory.GetFiles(location).Length > 0 | Directory.GetDirectories(location).Length > 0)
                {
                    return(new GeneratorActionResult(false, "Directory already exists and is not empty!"));
                }
            }
            else
            {
                Directory.CreateDirectory(location);
            }

            return(new GeneratorActionResult(true, ""));
        }
예제 #21
0
        public GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            url       = parameters["url"];
            token     = parameters["token"];
            moveToken = parameters["moveToken"];

            try
            {
                var projectId = CreateProject(arguments.Name, "", "Websites");
                values.Add("projectId", projectId);
            }
            catch (Exception ex)
            {
                return(new GeneratorActionResult(false, ex.Message));
            }

            return(new GeneratorActionResult(true, ""));
        }
        public GeneratorActionResult RollbackAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var connectionString = parameters["connectionString"];
            var databasePrefix   = parameters["databasePrefix"];

            using (var sqlConnection = new SqlConnection(connectionString))
            {
                using (var sqlCommand = new SqlCommand(string.Format(DatabaseDropStatement, string.Format(DatabaseNameFormat, databasePrefix, arguments.Name)),
                                                       sqlConnection))
                {
                    sqlCommand.Connection.Open();
                    sqlCommand.ExecuteNonQuery();
                    sqlCommand.Connection.Close();
                }
            }

            return(new GeneratorActionResult(true, ""));
        }
예제 #23
0
        public GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var location = values.GetString("DestinationFolder");
            var cloneUrl = values.GetString("CloneUrl");

            if (Directory.Exists(location))
            {
                var repo = new Repository(location);
                repo.CloneGui(new CloneGuiCommand {
                    Source = cloneUrl, WaitForGuiToClose = true
                });
            }
            else
            {
                return(new GeneratorActionResult(false, "Directory doesn't exist!"));
            }

            return(new GeneratorActionResult(true, ""));
        }
예제 #24
0
        private void GenerateButtonClick(object sender, EventArgs e)
        {
            if (!(ValidateSiteNameBox()) || (!inputFieldRepeater1.ValidateAllControl()))
            {
                return;
            }

            selectedTemplate.Prepare(ProjectNameBox.Text);

            var generatorArguments = new GeneratorArguments
            {
                Name = ProjectNameBox.Text,
                TemplateInformation = selectedTemplate,
                InputValues         = inputFieldRepeater1.GetInputValues()
            };

            var generatorForm = new GeneratorForm(generatorArguments);

            generatorForm.ShowDialog();
        }
예제 #25
0
        public GeneratorResult Generate(GeneratorArguments <AtomGenerationTargetConfig> generatorArguments)
        {
            _config = generatorArguments;

            Log.Information("Beginning reverse atom genernation {@Config}", new { generatorArguments.Config });

            var server = new Server(generatorArguments.Config.Host);

            var db = server.Databases[generatorArguments.Config.Database];

            var result = new GeneratorResult();

            foreach (Table table in db.Tables)
            {
                Log.Information("Processing: {Name} {Schema}", table.Name, table.Schema);
                result.AddOutput(CreateOutput(db, table));
            }

            return(result);
        }
예제 #26
0
        public GeneratorResult Generate(GeneratorArguments <CSharpTargetConfig> generatorArguments)
        {
            var result = new GeneratorResult();

            var allAtoms = AtomCreator.FromFolder(generatorArguments.AtomsFolder);

            var repositoryMembers = _sqlGenerationResults.SqlAccessors.Select(sqlAccessorMetadata => ToRepoMember(sqlAccessorMetadata, allAtoms))
                                    .ToList();

            var singleRepoGenerator = new CSharpSingleRepositoryGenerator(generatorArguments.Config);

            var singleRepo = singleRepoGenerator.Generate(repositoryMembers);

            result.AddOutput(Path.ChangeExtension(singleRepo.Name, generatorArguments.Config.FileExtension), singleRepo.CodeString);

            var dbFile = singleRepoGenerator.GenerateDbFile(repositoryMembers);

            result.AddOutput(Path.ChangeExtension(dbFile.Name, generatorArguments.Config.FileExtension), dbFile.CodeString);

            return(result);
        }
예제 #27
0
        private IEnumerable<GeneratorResult> FromTargetConfigs(CSharpTargetConfig targetConfig)
        {
            var args = new GeneratorArguments<CSharpTargetConfig>(targetConfig, AtomsFolder, AtomCreator.LoadDefaults(AtomsFolder));

            if(targetConfig.Repository != null){
                var sqlArgs = new GeneratorArguments<SqlTargetConfig>(new SqlTargetConfig(), args.AtomsFolder, AtomCreator.LoadDefaults(AtomsFolder));
                var sqlGenerator = new SqlGenerator().Generate(sqlArgs);

                var repoResult = new RepositoryGenerator(sqlGenerator).Generate(args);

                repoResult.OutputPath = targetConfig.Repository.OutputPath;

                yield return repoResult;
            }

            var codeResult = new CodeGenerator().Generate(args);

            codeResult.OutputPath = targetConfig.Entities.OutputPath;

            yield return codeResult;
        }
        public GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var editHostsFile = values.GetBool("EditHostsFile");
            var hostName      = values.GetString("HostName");

            if (editHostsFile)
            {
                // Create backup
                System.IO.File.WriteAllText(string.Concat(HostFileWriter.HostFilePath, ".backup"),
                                            System.IO.File.ReadAllText(HostFileWriter.HostFilePath, Encoding.UTF8),
                                            Encoding.UTF8);

                var hostEditor = new HostFileWriter();

                hostEditor.AddOrUpdateEntry(hostName, "127.0.0.1", String.Concat("Dev URL for ", arguments.Name));

                hostEditor.Save();
            }

            return(new GeneratorActionResult(true, ""));
        }
예제 #29
0
        private IEnumerable <GeneratorResult> FromTargetConfigs(CSharpTargetConfig targetConfig)
        {
            var args = new GeneratorArguments <CSharpTargetConfig>(targetConfig, AtomsFolder, AtomCreator.LoadDefaults(AtomsFolder));

            if (targetConfig.Repository != null)
            {
                var sqlArgs      = new GeneratorArguments <SqlTargetConfig>(new SqlTargetConfig(), args.AtomsFolder, AtomCreator.LoadDefaults(AtomsFolder));
                var sqlGenerator = new SqlGenerator().Generate(sqlArgs);

                var repoResult = new RepositoryGenerator(sqlGenerator).Generate(args);

                repoResult.OutputPath = targetConfig.Repository.OutputPath;

                yield return(repoResult);
            }

            var codeResult = new CodeGenerator().Generate(args);

            codeResult.OutputPath = targetConfig.Entities.OutputPath;

            yield return(codeResult);
        }
예제 #30
0
        public GeneratorActionResult ExecuteAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
        {
            var registerIis         = values.GetBool("RegisterIis");
            var hosttName           = values.GetString("HostName");
            var location            = values.GetString("DestinationFolder");
            var umbracoRelativePath = parameters["umbracoRelativePath"];

            foreach (var renameWord in arguments.TemplateInformation.Renames)
            {
                umbracoRelativePath = StringHelpers.ReplaceEx(umbracoRelativePath, renameWord.Key, renameWord.Value);
            }

            if (registerIis)
            {
                // Get IIS reference
                var serverManager = new ServerManager();

                // Create new AppPool or use existing
                var appPool = serverManager.ApplicationPools.FirstOrDefault(x => x.Name == arguments.Name) ??
                              serverManager.ApplicationPools.Add(arguments.Name);

                // Umbraco is .NET 4.0
                appPool.ManagedRuntimeVersion = "v4.0";

                // Add site and configure
                var physicalPath = System.IO.Path.Combine(location, umbracoRelativePath);
                serverManager.Sites.Add(arguments.Name, physicalPath, 80);

                serverManager.Sites[arguments.Name].ApplicationDefaults.ApplicationPoolName = arguments.Name;
                serverManager.Sites[arguments.Name].Bindings.Clear();
                serverManager.Sites[arguments.Name].Bindings.Add("*:80:" + hosttName, "http");
                serverManager.Sites[arguments.Name].ServerAutoStart = true;

                // Commit
                serverManager.CommitChanges();
            }

            return(new GeneratorActionResult(true, ""));
        }
예제 #31
0
        private static void Visitor(bool fast, string[] projectFiles, Action <IGeneratorArguments> func)
        {
            ProjectVisitor projects = new ProjectVisitor(fast, projectFiles);

            Check.Assert <ApplicationException>(projects.Count > 0, "Unable to locate any projects matching: " + String.Join(" ", projectFiles));

            projects.VisitProjectItems(
                delegate(IProjectInfo p, IProjectItem item)
            {
                if (!StringComparer.OrdinalIgnoreCase.Equals("CmdTool", item.CustomTool))
                {
                    return;
                }
                string itemPath = item.FullFileName;
                if (File.Exists(itemPath))
                {
                    GeneratorArguments args = new GeneratorArguments(true, itemPath, item, p);
                    args.OutputMessage     += OutputMessage;
                    func(args);
                }
            }
                );
        }
예제 #32
0
        protected override IEnumerable<GeneratorResult> Generate()
        {
            AtomConfig config = TryLoadAtomConfig();

            if (config == null)
            {
                yield break;
            }

            var sqlConfig = config.Targets.Values.OfType<SqlTargetConfig>().Single();
            var csharpConfig = config.Targets.Values.OfType<CSharpTargetConfig>().Single();

            var defaults = AtomCreator.LoadDefaults(config.AtomPath);

            var sqlArgs = new GeneratorArguments<SqlTargetConfig>(sqlConfig, config.AtomPath, defaults);
            var args = new GeneratorArguments<CSharpTargetConfig>(csharpConfig, config.AtomPath, defaults, sqlArgs.Atoms);

            var sqlResult = new SqlGenerator().Generate(sqlArgs);

            sqlResult.OutputPath = sqlConfig.OutputPath;

            //if (Directory.Exists(sqlResult.OutputPath))
            //{
            //    foreach (var file in Directory.EnumerateFiles(sqlResult.OutputPath, "*.generated.sql", SearchOption.AllDirectories))
            //    {
            //        sqlResult.Deletions.Add(file);
            //    }
            //}

            string redGateFile = Path.Combine(sqlConfig.OutputPath, "RedGateDatabaseInfo.xml");
            Log.Information("Looking for redgate database info xml at {RedGateDatabaseInfoXml}", redGateFile);

            if (sqlResult.DataFiles.Any() &&
                File.Exists(redGateFile))
            {
                Log.Information("Found redgate file, updating...");

                var regate = XDocument.Load(uri: redGateFile);
                var dataFiles = regate.Root.Elements("DataFileSet").First();
                var allDataFiles = dataFiles.Elements("DataFile")
                                            .Select(n => n.Value).Union(sqlResult.DataFiles, StringComparer.OrdinalIgnoreCase).ToList();

                dataFiles.Elements("Count")
                         .First()
                         .Value = allDataFiles.Count().ToString();

                Log.Information("DataFiles Count: {DataFileCount}", allDataFiles.Count());

                dataFiles.Elements("DataFile").Remove();

                dataFiles.Add(allDataFiles.Select(s => new XElement("DataFile", s)));

                var genResult = new GeneratorResult()
                {
                    OutputPath = sqlConfig.OutputPath
                };

                genResult.AddOutput("RedGateDatabaseInfo.xml", regate.ToString());

                yield return genResult;
            }

            yield return sqlResult;

            if (csharpConfig.Repository != null)
            {
                var repoResult = new RepositoryGenerator(sqlResult).Generate(args);

                repoResult.OutputPath = csharpConfig.Repository.OutputPath;

                yield return repoResult;
            }

            var codeResult = new CodeGenerator().Generate(args);

            codeResult.OutputPath = csharpConfig.Entities.OutputPath;

            yield return codeResult;
        }
예제 #33
0
 public GeneratorActionResult RollbackAction(GeneratorArguments arguments, Core.InputFields.ActionInputValues values, Dictionary <string, string> parameters)
 {
     throw new NotImplementedException();
 }
예제 #34
0
        public GeneratorForm(GeneratorArguments arguments)
        {
            generatorArguments = arguments;

            InitializeComponent();
        }