/// <summary> /// Initializes a new instance of the <see cref="Translator"/> class. /// </summary> /// <param name="configuration">The configuration of the translator.</param> public Translator(Action <ITranslatorConfig> configuration) { this.DataModels = new DataModelAggregator(new EnvironmentMapper(this.DataModels)); IServiceCollection services = new ServiceCollection(); ITranslatorConfig translatorConfig = new TranslatorConfig(services); configuration(translatorConfig); services.AddVtlProcessing(translatorConfig.RemoveDeadCode); services.AddScoped(typeof(IDataModelProvider), p => this.DataModels); services.AddScoped(p => this.DataModels); services.AddScoped(p => this.EnvironmentMapper); this.Targets = translatorConfig.Targets; ErrorCollectorProvider errorCollectorProvider = new ErrorCollectorProvider(); services.AddLogging((config) => { config.AddProvider(errorCollectorProvider); }); this.Errors = new ErrorsCollection(errorCollectorProvider); this._provider = services.BuildServiceProvider(); }
public TSQLTestBase(string schema) { string connectionString = Resources.TestDbConnectionString; IServiceCollection services = new ServiceCollection(); services.AddVtlProcessing((configure) => { configure.DataModels.DefaultNamespace = "ns"; configure.DataModels.AddSqlServerModel(connectionString); configure.EnvironmentMapper.Mapping = new Dictionary <string, string>() { { "ns", $"[{schema}]." } }; }); services.AddTsqlTarget(); this.errCollectorProvider = new ErrorCollectorProvider(); services.AddLogging((configure) => { configure.AddProvider(this.errCollectorProvider); }); this.provider = services.BuildServiceProvider(); this.frontEnd = provider.GetFrontEnd(); this.middleEnd = provider.GetMiddleEnd(); }
public TranslationService(ILogger <TranslationService> logger, ITreeGenerator treeGenerator, ISchemaModifiersApplier schemaModifiersApplier, IEnumerable <ILoggerProvider> loggerProviders, IEnumerable <ITargetRenderer> targetRenderers, IDataModelAggregator dataModelAggregator) { this._logger = logger; this._treeGenerator = treeGenerator; this._schemaModifiersApplier = schemaModifiersApplier; this._errorCollectorProvider = (ErrorCollectorProvider)loggerProviders.SingleOrDefault(l => l.GetType() == typeof(ErrorCollectorProvider)); this._dataModelAggregator = dataModelAggregator; this._targetRenderers = targetRenderers; }
/// <summary> /// Initializes a new instance of the <see cref="ErrorsCollection"/> class. /// </summary> /// <param name="errorProvider">The collector of error logs..</param> public ErrorsCollection(ErrorCollectorProvider errorProvider) { this._errorProvider = errorProvider; }
public static void Main(string[] args) { string source = Example.Source; string connectionString = @"Server=...;Trusted_Connection=True;"; IServiceCollection services = new ServiceCollection(); services.AddVtlProcessing((configure) => { configure.DataModels.DefaultNamespace = "Json"; configure.DataModels.AddSqlServerModel(connectionString); configure.DataModels.AddJsonModel($"{Directory.GetCurrentDirectory()}\\DataModel.json"); // namespace name is in a json file configure.DataModels.AddDictionaryModel((config) => { config .AddDataSet( "R1", (ComponentType.Identifier, BasicDataType.Integer, "Id1"), (ComponentType.Identifier, BasicDataType.Integer, "Id2"), (ComponentType.Measure, BasicDataType.Integer, "Me1"), (ComponentType.Measure, BasicDataType.Integer, "Me2"), (ComponentType.NonViralAttribute, BasicDataType.String, "At1"), (ComponentType.ViralAttribute, BasicDataType.Integer, "At2") ) .AddDataSet( "R2", (ComponentType.Identifier, BasicDataType.Integer, "Id1"), (ComponentType.Measure, BasicDataType.String, "Me1"), (ComponentType.Measure, BasicDataType.Integer, "Me2") ) .AddDataSet( "R_num", (ComponentType.Identifier, BasicDataType.Integer, "Id1"), (ComponentType.Measure, BasicDataType.Number, "Me2") ); } , "def_ns"); configure.EnvironmentMapper.Mapping = new Dictionary <string, string>() { { "Json", string.Empty }, { "Regular", string.Empty }, { "Pivot", "[VtlProcessingTests].[Pivoting]." }, }; }); services.AddPlantUmlTarget((configure) => { configure.AddDataStructureObject(); configure.UseArrowFirstToLast(); configure.ShowNumberLine(); configure.UseRuleExpressionsModel(); }); services.AddTsqlTarget((configure) => { configure.AddComments(); }); services.AddLogging((configure) => { configure.AddConsole(); configure.AddDebug(); configure.AddProvider(new ErrorCollectorProvider()); }); ServiceProvider provider = services.BuildServiceProvider(); ErrorCollectorProvider errColector = provider.GetService <ILoggerProvider>() as ErrorCollectorProvider; ITransformationSchema schema = provider.GetFrontEnd().BuildTransformationSchema(source); // front-end provider.GetMiddleEnd().Process(schema); // middle-end bool areErrors = errColector.ErrorCollectors.Sum(counter => counter.Errors.Count) > 0; // back-end: ITargetRenderer plantUmlRenderer = provider.GetTargetRenderer("PlantUML"); string plantUmlResult = plantUmlRenderer.Render(schema); PlantUmlUrlConverter converter = new PlantUmlUrlConverter(plantUmlResult); if (!areErrors) { ITargetRenderer tsqlRenderer = provider.GetTargetRenderer("TSQL"); Process.Start("cmd.exe", $"/C start {converter.SVGUrl}"); FilesManager.ResultToFile(plantUmlResult, "result.plantuml"); FilesManager.ResultToFile(tsqlRenderer.Render(schema), "result.sql"); } else { Debug.WriteLine($"\n\n{converter.SVGUrl}\n\n"); } }