示例#1
0
        private async Task ProcessCodeGenerationAsync(OutputFileConfiguration configuration)
        {
            var template        = TemplateCache.Instance.Get(configuration.TemplatePath);
            var generationItems = new List <GenerationItem>();

            foreach (var objectDefinition in this.TranslationService.GetObjectDefinitions().Where(x => IsMatch(x, configuration)))
            {
                try
                {
                    generationItems.Add(await this.GenerateFileAsync(configuration, objectDefinition, template));
                }
                catch (Exception e)
                {
                    this.LoggingService.Error($"Problems found in object definition '{objectDefinition.Name}':{Environment.NewLine}{e.Message}");
                }
            }

            this.LoggingService.WriteLine($" - Starting output configuration file [{configuration.Name}]: {generationItems.Count} files generated.");

            if (configuration.Summary != null)
            {
                await this.GenerateOutputFileSummaryAsync(configuration, generationItems);
            }

            this.GenerationItems.AddRange(generationItems);
        }
 public GenerationItemModel(OutputFileConfiguration configuration, ObjectDefinitionBase definition, IEnumerable <ObjectDefinitionBase> definitions, INativeTypeTranslators typeTranslators)
 {
     this.Configuration   = configuration;
     this.Definition      = definition;
     this.Definitions     = definitions;
     this.TypeTranslators = typeTranslators;
 }
示例#3
0
        private async Task <GenerationItem> GenerateFileAsync(OutputFileConfiguration configuration, ObjectDefinitionBase definition, ITemplate template)
        {
            var outputFilename  = ResolveOutputName(configuration, definition);
            var outputDirectory = Path.GetFullPath($"{this.SourcePath}/{configuration.OutputPath}");
            var generationItem  = new GenerationItem(configuration, new GenerationItemModel(configuration, definition, this.TranslationService.GetObjectDefinitions(), this.NativeTranslators), Path.GetFullPath($"{outputDirectory}/{outputFilename}"));

            if (!Directory.Exists(outputDirectory))
            {
                Directory.CreateDirectory(outputDirectory);
            }

            File.WriteAllText(generationItem.OutputFileName, await this.TemplateService.ExecuteAsync(template, generationItem.Model, this.LoggingService));
            return(generationItem);
        }
示例#4
0
        private async Task GenerateOutputFileSummaryAsync(OutputFileConfiguration configuration, List <GenerationItem> generationItems)
        {
            try
            {
                this.LoggingService.Write($" - Generating Summary for [{configuration.Name}]: ");
                await this.GenerateSummaryFileAsync(configuration.Summary, generationItems);

                this.LoggingService.WriteLine("Summary Generated.");
            }
            catch (Exception ex)
            {
                this.LoggingService.Error(ex.Message);
            }
        }
 public GenerationItem(OutputFileConfiguration configuration, GenerationItemModel model, string fileName)
 {
     this.Configuration  = configuration;
     this.Model          = model;
     this.OutputFileName = fileName;
 }
示例#6
0
 private static bool IsMatch(ObjectDefinitionBase objectDefinition, OutputFileConfiguration outputConfiguration)
 {
     return(outputConfiguration.TypeMatchers.Any() &&
            outputConfiguration.TypeMatchers.Aggregate(true, (current, typeMatcherConfiguration) => current & TypeMatcherFactory.Create(typeMatcherConfiguration.Name).Match(typeMatcherConfiguration, objectDefinition)));
 }
示例#7
0
 private static string ResolveOutputName(OutputFileConfiguration outputConfiguration, ObjectDefinitionBase definition)
 {
     return(outputConfiguration.NamingRules.Aggregate(definition.Name, (current, rule) => NamingRuleFactory.Create(rule.Name).Execute(current, rule)));
 }