Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            Translator translator = new Translator((configure) =>
            {
                configure.AddPlantUmlTarget((config) =>
                {
                    config.AddDataStructureObject();
                    config.UseArrowFirstToLast();
                    config.ShowNumberLine();
                });

                configure.AddTsqlTarget((config) =>
                {
                    config.AddComments();
                });

                configure.AddLogging((config) =>
                {
                    config.AddConsole();
                    config.AddDebug();
                });
            });

            translator.EnvironmentMapper.Mapping = new Dictionary <string, string>()
            {
                { "Json", string.Empty },
                { "Regular", string.Empty },
                { "Namespace", "[DbSchema].[DbTable]." },
            };

            translator.DataModels.AddJsonModel($"{Directory.GetCurrentDirectory()}\\DataModel.json");
            translator.DataModels.AddDictionaryModel(RegularModel.ModelConfiguration, "Regular");
            translator.DataModels.DefaultNamespace = "Json";

            ITransformationSchema schema = translator.CreateSchema(Example.Source);

            if (translator.Errors.Count == 0)
            {
                string plantUmlResult          = translator.Translate(schema, "PlantUML");
                PlantUmlUrlConverter converter = new PlantUmlUrlConverter(plantUmlResult);
                Process.Start("cmd.exe", $"/C start {converter.SVGUrl}");

                string tsqlResult = translator.Translate(schema, "TSQL");
                Debug.WriteLine(tsqlResult);
            }
        }
Ejemplo n.º 2
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");
            }
        }