コード例 #1
0
        /// <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();
        }
コード例 #2
0
        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();
        }
コード例 #3
0
 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;
 }
コード例 #4
0
 /// <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;
 }
コード例 #5
0
        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");
            }
        }