protected override void AddBaseTypes(CodeTypeDeclaration type, TableImportArgumentsViewModel args) { base.AddBaseTypes(type, args); var primaryKeyType = args.GetPrimaryKeyType(); if (primaryKeyType != null) type.BaseTypes.Add(new CodeTypeReference(args.SelectedBaseRepositoryType.Name, new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType))); }
protected override void AddBaseTypes(CodeTypeDeclaration type, TableImportArgumentsViewModel args) { base.AddBaseTypes(type, args); var primaryKeyType = args.GetPrimaryKeyType(); if (args.SelectedBaseRepositoryType == typeof(ICRUDRepository <,>)) { type.BaseTypes.Add(new CodeTypeReference(typeof(CRUDRESTRepositoryBase <,>).Name, new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType))); } else if (args.SelectedBaseRepositoryType == typeof(IReadOnlyRepository <,>)) { type.BaseTypes.Add(new CodeTypeReference(typeof(ReadOnlyRESTRepositoryBase <,>).Name, new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType))); } else { type.BaseTypes.Add(new CodeTypeReference(typeof(RESTRepositoryBase <,>).Name, new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType))); } var interfaceName = $"I{args.SingularName}Repository"; type.BaseTypes.Add(new CodeTypeReference(interfaceName)); var attr = new CodeAttributeDeclaration(new CodeTypeReference(typeof(RepositoryAttribute))); attr.Arguments.Add(new CodeAttributeArgument(new CodeTypeOfExpression(interfaceName))); type.CustomAttributes.Add(attr); var constructor = new CodeConstructor { Attributes = MemberAttributes.Public }; constructor.BaseConstructorArgs.Add(new CodePrimitiveExpression(args.SingularName)); type.Members.Add(constructor); }
protected override void AddMembers(CodeTypeDeclaration type, TableImportArgumentsViewModel args) { var modelConfig = (ModelProjectConfiguration)_project; foreach (var column in args.Columns) { type.Members.Add(CreateAutoProperty(column.Type.ToString(), column.Name)); } if (modelConfig.AdditionalProperties != null && modelConfig.AdditionalProperties.Any()) { foreach (var additionalProperty in modelConfig.AdditionalProperties) { type.Members.Add(CreateAutoProperty(additionalProperty.Type, additionalProperty.Name)); } } if (args.Columns.Count(e => e.IsPrimaryKey) == 1) { var primary = args.Columns.First(e => e.IsPrimaryKey); var getKey = new CodeSnippetTypeMember(); getKey.Text = $"\t\t[IgnoreDataMember]\n\t\tpublic {primary.Type} GetKey =>{primary.Name};\n"; type.Members.Add(getKey); var unique = new CodeTypeReference(typeof(IUniqueObject <>).Name, new CodeTypeReference(primary.Type)); GenerateEqualsMethod(type, primary.Type); GenerateGetHashCodeMethod(type); GenerateEqualsIUniqueMethod(type, unique, primary.Type); GenerateEqualsModelMethod(type, primary.Type); } }
protected override CodeTypeDeclaration CreateType(TableImportArgumentsViewModel args) { return(new CodeTypeDeclaration(GetClassName(args)) { IsClass = true, TypeAttributes = TypeAttributes.Public | TypeAttributes.Class }); }
protected override void AddBaseTypes(CodeTypeDeclaration type, TableImportArgumentsViewModel args) { base.AddBaseTypes(type, args); var primaryKeyType = args.GetPrimaryKeyType(); var dbmlClass = Path.GetFileName(_solution.DatabaseConfigurations.DbmlPath) + "DataContext"; var dbClass = $"DB.{args.SingularName}"; if (dbClass.EndsWith("Status")) { dbClass = dbClass.Replace("Status", "Statuse"); } if (args.SelectedBaseRepositoryType == typeof(ICRUDRepository <,>)) { if (_solution.LinqProjectConfiguration.UseCutomCrudBase) { type.BaseTypes.Add(new CodeTypeReference(_solution.LinqProjectConfiguration.SelectedLinqCrudBase, new CodeTypeReference(dbClass), new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType))); } else { type.BaseTypes.Add(new CodeTypeReference(typeof(CRUDLinqRepositoryBase <, , ,>).Name, new CodeTypeReference($"DB.{dbmlClass}"), new CodeTypeReference(dbClass), new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType))); } } else if (args.SelectedBaseRepositoryType == typeof(IReadOnlyRepository <,>)) { if (_solution.LinqProjectConfiguration.UseCutomCrudBase) { type.BaseTypes.Add(new CodeTypeReference(_solution.LinqProjectConfiguration.SelectedLinqReadBase, new CodeTypeReference(dbClass), new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType))); } else { type.BaseTypes.Add(new CodeTypeReference(typeof(ReadOnlyLinqRepositoryBase <, , ,>).Name, new CodeTypeReference($"DB.{dbmlClass}"), new CodeTypeReference(dbClass), new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType))); } } else { type.BaseTypes.Add(new CodeTypeReference(typeof(LinqRepositoryBase <, , ,>).Name, new CodeTypeReference($"DB.{dbmlClass}"), new CodeTypeReference(dbClass), new CodeTypeReference(args.ModelName), new CodeTypeReference(primaryKeyType))); } var interfaceName = $"I{args.SingularName}Repository"; type.BaseTypes.Add(new CodeTypeReference(interfaceName)); var attr = new CodeAttributeDeclaration(new CodeTypeReference(typeof(RepositoryAttribute))); attr.Arguments.Add(new CodeAttributeArgument(new CodeTypeOfExpression(interfaceName))); type.CustomAttributes.Add(attr); }
protected override void AddBaseTypes(CodeTypeDeclaration type, TableImportArgumentsViewModel args) { var modelConfig = (ModelProjectConfiguration)_project; if (!string.IsNullOrWhiteSpace(modelConfig.AdditionalInterfaces)) { foreach (var interf in modelConfig.AdditionalInterfaces.Split(';')) { type.BaseTypes.Add(new CodeTypeReference(interf)); } } if (args.Columns.Count(e => e.IsPrimaryKey) == 1) { var primary = args.Columns.First(e => e.IsPrimaryKey); var unique = new CodeTypeReference(typeof(IUniqueObject <>).Name, new CodeTypeReference(primary.Type)); type.BaseTypes.Add(unique); type.BaseTypes.Add(new CodeTypeReference(typeof(IEquatable <>).Name, unique)); type.BaseTypes.Add(new CodeTypeReference(typeof(IEquatable <>).Name, new CodeTypeReference(GetClassName(args)))); } }
protected override string GetClassName(TableImportArgumentsViewModel args) { return($"{args.SingularName}Repository"); }
protected override string GetClassName(TableImportArgumentsViewModel args) { return(args.SingularName); }
public byte[] Generate(CoddeeSolutionInfo solution, ProjectConfiguration project, TableImportArgumentsViewModel args) { using (var ms = new MemoryStream()) { Generate(solution, project, args, ms); return(ms.ToArray()); } }
protected abstract string GetClassName(TableImportArgumentsViewModel args);
protected virtual void AddBaseTypes(CodeTypeDeclaration type, TableImportArgumentsViewModel args) { }
protected abstract CodeTypeDeclaration CreateType(TableImportArgumentsViewModel args);
public void Generate(CoddeeSolutionInfo solution, ProjectConfiguration project, TableImportArgumentsViewModel args, Stream stream) { _project = project; _solution = solution; var compileUnit = new CodeCompileUnit(); var nameSpace = new CodeNamespace(project.DefaultNamespace); var usingsNamespace = new CodeNamespace(); usingsNamespace.Imports.Add(new CodeNamespaceImport("System")); usingsNamespace.Imports.Add(new CodeNamespaceImport("Coddee")); AddNamepaceImports(usingsNamespace); var type = CreateType(args); AddBaseTypes(type, args); AddMembers(type, args); nameSpace.Types.Add(type); compileUnit.Namespaces.Add(usingsNamespace); compileUnit.Namespaces.Add(nameSpace); CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); CodeGeneratorOptions options = new CodeGeneratorOptions { BlankLinesBetweenMembers = false, BracingStyle = "C" }; using (var ms = new MemoryStream()) { using (var tempsw = new StreamWriter(ms)) { provider.GenerateCodeFromCompileUnit(compileUnit, tempsw, options); } var text = Encoding.UTF8.GetString(ms.ToArray()); text = text.Replace("This code was generated by a tool.", "This code was generated by Coddee tool."); var bytes = Encoding.UTF8.GetBytes(text); stream.Write(bytes, 0, bytes.Length); stream.Flush(); } }