public void DataModel_Template_Test()
        {
            var template = new DataModelTemplate(new EntityInfo()
            {
                Id = _entityId
            }, ApplicationId, Constants.DataNamespace);
            var output = template.TransformText();

            Assert.NotNull(output);
            Assert.NotEmpty(output);
            Assert.Contains($"namespace {ApplicationId}.Backend.{_dataNamespace}", output);
        }
        private void TransformEntities(SmartAppInfo manifest)
        {
            var enabledEntities = manifest.DataModel.Entities.Where(e => !e.IsEnum).AsEnumerable();

            foreach (var entity in enabledEntities)
            {
                var template = new DataModelTemplate(entity, manifest.Id, Constants.DataNamespace);
                _writingService.WriteFile(Path.Combine(_context.BasePath, template.OutputPath, $"{entity.Id}.g.cs"), template.TransformText());

                if (!entity.IsAbstract)
                {
                    var key = entity.AllProperties()?.FirstOrDefault(p => p.IsKey);
                    if (key != null)
                    {
                        var irepositoryTemplate = new IDataRepository(entity, manifest.Id, Constants.Version);
                        _writingService.WriteFile(Path.Combine(_context.BasePath, irepositoryTemplate.OutputPath, $"I{entity.Id}Repository.g.cs"), irepositoryTemplate.TransformText());

                        var repositoryTemplate = new DataRepository(entity, manifest.Id, Constants.Version);
                        _writingService.WriteFile(Path.Combine(_context.BasePath, repositoryTemplate.OutputPath, $"{entity.Id}Repository.g.cs"), repositoryTemplate.TransformText());
                    }
                }
            }
        }
Example #3
0
        static void Main(string[] args)
        {
            Console.WriteLine(ConsoleHelpers.GetSlackerHeaderText());

            if (args.Length < 4 || args[0].ToLower() != "export")
            {
                Console.WriteLine("Invalid command syntax: " + EXPORT_SYNTAX);

                Console.Read();
                return;
            }

            // Get Connection String
            var connectionString = ConfigurationManager.ConnectionStrings
                                   .Cast <ConnectionStringSettings>().FirstOrDefault(
                connStr => connStr.Name == args[1]
                )
                                   ?.ConnectionString;


            // Initialize DataService
            var dataService = new GenericDataService <InformationSchemaColumn>(
                SqlConnectionService.FromConnectionString(connectionString)
                );

            // Get Information Schema
            var informationSchema = dataService.Select(new QueryProps()
            {
                WhereSql    = "TABLE_CATALOG LIKE @Catalog",
                WhereParams = new {
                    Catalog = args[2]
                }
            });

            if (!informationSchema.Any())
            {
                Console.WriteLine("Could not find any results matching information schema target.");
                Console.Read();
                return;
            }

            // Get Output Directory
            var catalogName = DataModelTemplate.GetPropertyName(informationSchema.First().TableCatalog);
            var catalogDir  = !Path.IsPathRooted(args[3]) ?
                              Path.Combine(Environment.CurrentDirectory, args[3], catalogName) :
                              Path.Combine(args[3], catalogName);

            // Create Catalog Directory if not exists
            if (!Directory.Exists(catalogDir))
            {
                Directory.CreateDirectory(catalogDir);
            }

            // Create output schema delegate
            void OutputSchema(IGrouping <string, InformationSchemaColumn> schemaGroup)
            {
                var schemaName = DataModelTemplate.GetPropertyName(schemaGroup.First().TableSchema);
                var schemaDir  = Path.Combine(catalogDir, schemaName);

                // Create Schema Directory if not exists
                if (!Directory.Exists(schemaDir))
                {
                    Directory.CreateDirectory(schemaDir);
                }

                // Create output file delegate
                void OutputFile(DataModelTemplate dataModelTemplate)
                {
                    var tableName = DataModelTemplate.GetPropertyName(dataModelTemplate.TableName);
                    var filePath  = Path.Combine(schemaDir, tableName + ".cs");

                    if (File.Exists(filePath))
                    {
                        File.Delete(filePath);
                    }

                    Console.WriteLine($"Generating Model: {catalogName}\\{schemaName}\\{tableName}.cs");
                    File.WriteAllText(filePath, dataModelTemplate.TransformText());
                }

                // Output files
                schemaGroup.GroupBy(
                    infoSchemaCol => infoSchemaCol.TableName
                    ).Select(
                    infoSchemaCols => new DataModelTemplate(infoSchemaCols.ToList())
                    ).ToList().ForEach(
                    OutputFile
                    );
            }

            // Build Models
            informationSchema.GroupBy(
                infoSchemaCol => infoSchemaCol.TableSchema
                ).ToList().ForEach(OutputSchema);


            Console.WriteLine("Done");
            Console.Read();
        }
        public void DataModel_Template_NullParameter_Test()
        {
            var template = new DataModelTemplate(null, null, null);

            Assert.Throws <ArgumentNullException>(() => template.TransformText());
        }
        /// <summary>
        /// Generates Go code for service client.
        /// </summary>
        /// <param name="serviceClient"></param>
        /// <returns></returns>
        public override async Task Generate(CodeModel cm)
        {
            var codeModel = cm as CodeModelSwift;

            if (codeModel == null)
            {
                throw new Exception("Code model is not a Swift Code Model");
            }

            // unfortunately there is an ordering issue here.  during model generation we might
            // flatten some types (but not all depending on type).  then during client generation
            // the validation codegen needs to know if a type was flattened so it can generate
            // the correct code, so we need to generate models before clients.
            //Protocols
            foreach (CompositeTypeSwift modelType in cm.ModelTypes.Union(codeModel.HeaderTypes))
            {
                var modelProtocolTemplate = new ModelProtocolTemplate {
                    Model = modelType
                };
                await Write(modelProtocolTemplate, Path.Combine("protocols", $"{modelType.Name}Protocol{ImplementationFileExtension}"));
            }

            //Models
            foreach (CompositeTypeSwift modelType in cm.ModelTypes.Union(codeModel.HeaderTypes))
            {
                var modelTemplate = new DataModelTemplate {
                    Model = modelType
                };
                await Write(modelTemplate, Path.Combine("data", $"{modelType.TypeName}{ImplementationFileExtension}"));
            }

            //Model Tests
            foreach (CompositeTypeSwift modelType in cm.ModelTypes.Union(codeModel.HeaderTypes))
            {
                var modelTemplate = new DataModelTestTemplate {
                    Model = modelType
                };
                //await Write(modelTemplate, Path.Combine("tests", $"{modelType.Name}Test{ImplementationFileExtension}"));
            }

            // Enums
            foreach (EnumTypeSwift enumType in cm.EnumTypes)
            {
                var enumTemplate = new EnumTemplate {
                    Model = enumType
                };
                await Write(enumTemplate, Path.Combine("data", $"{enumTemplate.Model.Name}Enum{ImplementationFileExtension}"));
            }

            // Command
            foreach (var methodGroup in codeModel.MethodGroups)
            {
                if (string.IsNullOrWhiteSpace(methodGroup.Name))
                {
                    methodGroup.Name = "Service";
                }


                foreach (var method in methodGroup.Methods)
                {
                    var methodContextTemplate = new MethodCommandTemplate
                    {
                        Model = (MethodSwift)method
                    };

                    await Write(methodContextTemplate, Path.Combine("commands", $"{methodGroup.Name + method.Name}{ImplementationFileExtension}"));
                }
            }

            // Service client
            var serviceClientTemplate = new ServiceClientTemplate
            {
                Model = codeModel
            };

            await Write(serviceClientTemplate, Path.Combine("commands", FormatFileName("DataFactory")));

            // Package.swift
            if (!string.IsNullOrWhiteSpace(CodeModelSwift.FrameworkName))
            {
                var packageTemplate = new PackageTemplate
                {
                    Model = codeModel
                };
                await Write(packageTemplate, "Package.swift");
            }

            foreach (var methodGroup in codeModel.MethodGroups)
            {
                if (string.IsNullOrWhiteSpace(methodGroup.Name))
                {
                    methodGroup.Name = "Service";
                }

                var methodGroupTemplate = new MethodGroupTemplate
                {
                    Model = methodGroup
                };

                await Write(methodGroupTemplate, Path.Combine("commands", FormatFileName(methodGroup.Name)));
            }
        }