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; }
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); }
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; }
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))); }
private static string ResolveOutputName(OutputFileConfiguration outputConfiguration, ObjectDefinitionBase definition) { return(outputConfiguration.NamingRules.Aggregate(definition.Name, (current, rule) => NamingRuleFactory.Create(rule.Name).Execute(current, rule))); }