Ejemplo n.º 1
0
        static (MavenRepoType type, string location) GetMavenInfoForArtifact(BindingConfig config, MavenArtifactConfig artifact)
        {
            var template = config.GetTemplateSet(artifact.TemplateSet);

            if (template.MavenRepositoryType.HasValue)
            {
                return(template.MavenRepositoryType.Value, template.MavenRepositoryLocation);
            }

            return(config.MavenRepositoryType, config.MavenRepositoryLocation);
        }
Ejemplo n.º 2
0
        static async Task ProcessConfig(BindingConfig config)
        {
            var mavenProjects = new Dictionary <string, Project>();
            var mavenGroups   = new List <MavenGroup>();

            foreach (var artifact in config.MavenArtifacts)
            {
                if (artifact.DependencyOnly)
                {
                    continue;
                }

                var maven = MavenFactory.GetMavenRepository(config, artifact);

                var mavenGroup = maven.Groups.FirstOrDefault(g => g.Id == artifact.GroupId);

                Project project = null;

                project = await maven.GetProjectAsync(artifact.GroupId, artifact.ArtifactId, artifact.Version);

                if (project != null)
                {
                    mavenProjects.Add($"{artifact.GroupId}/{artifact.ArtifactId}-{artifact.Version}", project);
                }
            }

            if (config.DownloadExternals)
            {
                await DownloadArtifacts(config, mavenProjects);
            }

            var slnProjModels = new Dictionary <string, BindingProjectModel>();
            var models        = BuildProjectModels(config, mavenProjects);

            var json = Newtonsoft.Json.JsonConvert.SerializeObject(models);

            if (config.Debug.DumpModels)
            {
                File.WriteAllText(Path.Combine(config.BasePath, "models.json"), json);
            }

            var engine = new RazorLightEngineBuilder()
                         .UseMemoryCachingProvider()
                         .Build();

            foreach (var model in models)
            {
                var template_set = config.GetTemplateSet(model.MavenArtifacts.FirstOrDefault()?.MavenArtifactConfig?.TemplateSet);

                foreach (var template in template_set.Templates)
                {
                    var inputTemplateFile = Path.Combine(config.BasePath, template.TemplateFile);
                    var templateSrc       = File.ReadAllText(inputTemplateFile);

                    AssignMetadata(model, template);

                    var outputFile = new FileInfo(template.GetOutputFile(config, model));
                    if (!outputFile.Directory.Exists)
                    {
                        outputFile.Directory.Create();
                    }

                    string result = await engine.CompileRenderAsync(inputTemplateFile, templateSrc, model);

                    File.WriteAllText(outputFile.FullName, result);

                    // We want to collect all the models for the .csproj's so we can add them to a .sln file after
                    if (!slnProjModels.ContainsKey(outputFile.FullName) && template.OutputFileRule.EndsWith(".csproj"))
                    {
                        slnProjModels.Add(outputFile.FullName, model);
                    }
                }
            }

            if (!string.IsNullOrEmpty(config.SolutionFile))
            {
                var slnPath = Path.Combine(config.BasePath ?? AppDomain.CurrentDomain.BaseDirectory, config.SolutionFile);
                var sln     = SolutionFileBuilder.Build(config, slnProjModels);
                File.WriteAllText(slnPath, sln);
            }
        }