private static string GenerateModelClass(CodeGenerationOptions options, Kind kind) { Clear(); string ns = NamespaceHelper.MakeNamespace(options.RootNamespace, kind); WriteUsings(options, kind); WriteLine($"namespace {ns}"); using (OpenBlock()) { string typeName = NameHelper.MakeModelClassName(kind); WriteLine($"public class {typeName}"); using (OpenBlock()) { if (kind == Kind.Context || kind == Kind.Supervisor) { WriteLine($"public ScaffoldedFile File {{ get; set; }}"); WriteLine(); WriteLine($"public ScaffoldedFile Interface {{ get; set; }}"); } else { WriteLine($"public IList<ScaffoldedFile> Files {{ get; }} = new List<ScaffoldedFile>();"); } } } return(GetText()); }
private static string GenerateScaffolderInterface(CodeGenerationOptions options, Kind kind) { Clear(); string ns = NamespaceHelper.MakeNamespace(options.RootNamespace, kind); WriteUsings(options, kind); WriteLine($"namespace {ns}"); using (OpenBlock()) { string modelName = NameHelper.MakeModelClassName(kind); string typeName = NameHelper.MakeScaffolderInterfaceName(kind); WriteLine($"public interface {typeName}"); using (OpenBlock()) { WriteLine($"void Save({modelName} model);"); WriteLine(); WriteLine($"{modelName} ScaffoldModel(OpenApiOptions options);"); } } return(GetText()); }
private static string MakeFileName(FileType type, Kind kind) { switch (type) { case FileType.ModelClass: return(NameHelper.MakeModelClassName(kind) + ".cs"); case FileType.GeneratorClass: return(NameHelper.MakeGeneratorClassName(kind) + ".cs"); case FileType.ScaffolderClass: return(NameHelper.MakeScaffolderClassName(kind) + ".cs"); case FileType.GeneratorInterface: return(NameHelper.MakeGeneratorInterfaceName(kind) + ".cs"); case FileType.ScaffolderInterface: return(NameHelper.MakeScaffolderInterfaceName(kind) + ".cs"); default: return(string.Empty + ".cs"); } }
private static string GenerateScaffoldedModelClass(CodeGenerationOptions options) { Clear(); WriteUsings(options, Kind.None); WriteLine($"namespace {options.RootNamespace}"); using (OpenBlock()) { WriteLine("public class ScaffoldedModel"); using (OpenBlock()) { foreach (var kind in options.Kinds) { //if (kind == Kind.Supervisor || kind == Kind.Context) // continue; string modelName = NameHelper.MakeModelClassName(kind); string name = NameHelper.MakeName(kind); WriteLine(); WriteLine($"public {modelName} {name} {{ get; set; }}"); } } } return(GetText()); }
private static string GenerateScaffolderClass(CodeGenerationOptions options, Kind kind) { Clear(); string ns = NamespaceHelper.MakeNamespace(options.RootNamespace, kind); WriteUsings(options, kind); WriteLine($"namespace {ns}"); using (OpenBlock()) { string modelName = NameHelper.MakeModelClassName(kind); string typeName = NameHelper.MakeScaffolderClassName(kind); string baseTypeName = NameHelper.MakeScaffolderInterfaceName(kind); string generatorInterfaceName = NameHelper.MakeGeneratorInterfaceName(kind); WriteLine($"public class {typeName} : AbstractScaffolder, {baseTypeName}"); using (OpenBlock()) { WriteLine($"public {typeName}(ScaffolderDependencies dependencies, {generatorInterfaceName} generator) : base(dependencies)"); using (OpenBlock()) { WriteLine("Generator = generator;"); } WriteLine(); WriteLine($"protected {generatorInterfaceName} Generator {{ get; }} "); WriteLine(); WriteLine($"public void Save({modelName} model)"); using (OpenBlock()) { if (kind == Kind.Context || kind == Kind.Supervisor) { WriteLine($"Dependencies.FileWriter.WriteFile(model.File);"); WriteLine($"Dependencies.FileWriter.WriteFile(model.Interface);"); } else { WriteLine($"Dependencies.FileWriter.WriteFiles(model.Files);"); } } WriteLine(); WriteLine($"public {modelName} ScaffoldModel(OpenApiOptions options)"); using (OpenBlock()) { WriteLine($"var model = new {modelName}();"); if (kind == Kind.Context) { WriteLine("var classFile = new ScaffoldedFile();"); WriteLine("var interfaceFile = new ScaffoldedFile();"); WriteLine("classFile.Code = Generator.WriteClassCode(options.Document, options.RootNamespace);"); WriteLine($"classFile.Path = Dependencies.PathHelper.Context(options.OutputDir, options.ContextClassName);"); WriteLine("interfaceFile.Code = Generator.WriteInterfaceCode(options.Document, options.RootNamespace);"); WriteLine($"interfaceFile.Path = Dependencies.PathHelper.Context(options.OutputDir, options.ContextInterfaceName);"); WriteLine("model.File = classFile;"); WriteLine("model.Interface = interfaceFile;"); } else if (kind == Kind.Supervisor) { WriteLine("var classFile = new ScaffoldedFile();"); WriteLine("var interfaceFile = new ScaffoldedFile();"); WriteLine("classFile.Code = Generator.WriteClassCode(options.Document, options.RootNamespace);"); WriteLine($"classFile.Path = Dependencies.PathHelper.Supervisor(options.OutputDir, options.SupervisorClassName);"); WriteLine("interfaceFile.Code = Generator.WriteInterfaceCode(options.Document, options.RootNamespace);"); WriteLine($"interfaceFile.Path = Dependencies.PathHelper.Supervisor(options.OutputDir, options.SupervisorInterfaceName);"); WriteLine("model.File = classFile;"); WriteLine("model.Interface = interfaceFile;"); } else { WriteLine("foreach(var kvp in options.Document.Components.Schemas)"); using (OpenBlock()) { WriteLine("var name = kvp.Key;"); WriteLine("var schema = kvp.Value;"); WriteLine($"var code = Generator.WriteCode(schema, name, Dependencies.Namespace.{kind}(options.RootNamespace));"); WriteLine($"var path = Dependencies.PathHelper.{kind}(options.OutputDir, name);"); WriteLine($"var file = new ScaffoldedFile {{ Code = code, Path = path }};"); WriteLine($"model.Files.Add(file);"); } } WriteLine("return model;"); } } } return(GetText()); }