public ConverterClass(ModelClass mClass, string module) { ModelClass = mClass; Name = mClass.EntityClass.EntityConstraints.TableName.ToPascalCase() + "Converter"; Package = $@"havelsan.kovan.{module}.service.converter"; BaseClass = PredefinedClasses.HvlConverter; BaseClass.GenericList.Add(mClass); BaseClass.GenericList.Add(mClass.EntityClass); Annotations.Add(PredefinedAnnotations.Component()); var doConvertToModelFunc = new Function(this, "doConvertToModel", PredefinedClasses.JavaVoid, Models.DataModels.Enum.AccessModifier.Protected); var modelParam = new FunctionParameter("model", mClass); var entityParam = new FunctionParameter("entity", mClass.EntityClass); doConvertToModelFunc.FunctionParameters.Add(modelParam); doConvertToModelFunc.FunctionParameters.Add(entityParam); foreach (var member in modelParam.Type.ClassMembers.ClassMembers) { var modelMember = member; var entityMember = entityParam.Type.ClassMembers.ClassMembers.FirstOrDefault(x => x.Name == member.Name); doConvertToModelFunc.Expressions.Add( new SetterAssignExpression { Destination = modelParam, Source = entityParam, DestinationClassMember = modelMember, SourceClassMember = entityMember }); } Functions.Add(doConvertToModelFunc); var doConvertToEntityFunc = new Function(this, "doConvertToEntity", PredefinedClasses.JavaVoid, Models.DataModels.Enum.AccessModifier.Protected); modelParam = new FunctionParameter("model", mClass); entityParam = new FunctionParameter("entity", mClass.EntityClass); doConvertToEntityFunc.FunctionParameters.Add(entityParam); doConvertToEntityFunc.FunctionParameters.Add(modelParam); foreach (var member in modelParam.Type.ClassMembers.ClassMembers) { var modelMember = member; var entityMember = entityParam.Type.ClassMembers.ClassMembers.FirstOrDefault(x => x.Name == member.Name); doConvertToEntityFunc.Expressions.Add( new SetterAssignExpression { Destination = entityParam, Source = modelParam, DestinationClassMember = entityMember, SourceClassMember = modelMember }); } Functions.Add(doConvertToEntityFunc); //foreach (var classMember in EntityClass.ClassMembers.ClassMembers) //{ // var cm = new ClassMember(classMember.Name, classMember.Type, classMember.Value, classMember.AccessModifier, classMember.NonAccessModifiers.ToArray()); // foreach (var annotation in classMember.Annotations.Where(x => !x.Package.IsParent("javax.persistence"))) // { // var an = new Annotation(annotation.Name, annotation.Package, annotation.Parameters.Values.ToArray()); // cm.Annotations.Add(an); // } // ClassMembers.Add(cm); //} }
public DBFile(string name, string module) { TableList = new List <Table>(); using (var sr = new StreamReader(name)) { var str = sr.ReadToEnd(); foreach (var item in str.GetSlices("/* Create", "/* Create")) { if (item.Contains("/* Create Tables */")) { GetTable(item); } else if (item.Contains("/* Create Primary Keys, Indexes, Uniques, Checks */")) { foreach (var constraint in item.GetSlices("ALTER TABLE", $";{NewLine}")) { GetPrimaryKeyAndIndex(constraint); } } else if (item.Contains("/* Create Foreign Key Constraints */")) { foreach (var constraint in item.GetSlices("ALTER TABLE", $";{NewLine}")) { GetForeignKey(constraint); } } else if (item.Contains("/* Create Table Comments, Sequences for Autonumber Columns */")) { foreach (var sequence in item.GetSlices("CREATE SEQUENCE", ";")) { GetSequence(sequence); } foreach (var constraint in item.GetSlices("COMMENT ON", $";{NewLine}")) { if (constraint.Trim().StartsWith("COMMENT ON TABLE")) { GetTableComment(constraint); } else if (constraint.Trim().StartsWith("COMMENT ON COLUMN")) { GetColumnComment(constraint); } } } } } EntityConstraintDic = new Dictionary <string, EntityConstraintsClass>(); EntityDic = new Dictionary <string, EntityClass>(); foreach (var table in TableList) { table.Schema = "KOVAN_" + module.ToUpperEn(); var moduleName = module.ToLowerEn(); var ec = new EntityConstraintsClass(table, "workshop"); EntityConstraintDic.Add(ec.Name, ec); var entity = new EntityClass(ec, "workshop"); EntityDic.Add(entity.Name, entity); } foreach (var table in TableList) { table.Columns.Any(x => x.Constraints.Count > 0); foreach (var col in table.Columns) { if (col.Constraints.Any(x => x is ForeignKey)) { var entityClass = EntityDic.Values.First(x => x.EntityConstraints.Table.Name == col.Table.Name); var fkEntityClass = EntityDic.Values.First(x => x.EntityConstraints.Table.Name == (col.Constraints.First(y => y is ForeignKey) as ForeignKey).ReferenceColumn.Table.Name); if (entityClass.Name == fkEntityClass.Name) { continue; } var cm = entityClass.ClassMembers.ClassMembers.First(x => x.Name == col.Name.ToCamelCase()); var entityClassMember = new ClassMember(fkEntityClass.Name.Replace("Entity", "").ToLowerFirstCharacter(), fkEntityClass, null, Models.DataModels.Enum.AccessModifier.Private); entityClass.ClassMembers.Replace(col.Name.ToCamelCase(), entityClassMember); var listClass = Models.DataModels.Predefined.PredefinedClasses.JavaList; listClass.GenericList.Add(entityClass); var fkEntityClassMember = new ClassMember(entityClass.Name.Replace("Entity", "") + "List", listClass, null, Models.DataModels.Enum.AccessModifier.Private); if (col.Constraints.Any(x => x is Unique) && (col.Constraints.FirstOrDefault(x => x is Unique) as Unique).Columns.Count > 1) { fkEntityClass.ClassMembers.Add(fkEntityClassMember); fkEntityClassMember.Annotations.Add(Models.DataModels.Predefined.PredefinedAnnotations.OneToMany() .SetParameter("cascade", new ReferenceValue("CascadeType.ALL")) .SetParameter("mappedBy", entityClassMember.Name)); entityClassMember.Annotations.Add(Models.DataModels.Predefined.PredefinedAnnotations.ManyToOne()); entityClassMember.Annotations.Add(Models.DataModels.Predefined.PredefinedAnnotations.JoinColumn() .SetParameter("referencedColumnName", fkEntityClass.EntityConstraints.GetStaticMemberByValue((col.Constraints.FirstOrDefault(x => x is ForeignKey) as ForeignKey).Column.Name)) .SetParameter("name", KoGen.Models.DataModels.ReferenceValue.FromStaticMemberByValue(entityClass.EntityConstraints, col.Name)) .SetParameter("foreignKey", Models.DataModels.Predefined.PredefinedAnnotations.ForeignKey() .SetParameter("name", (col.Constraints.FirstOrDefault(x => x is ForeignKey) as ForeignKey).Name))); } else { entityClassMember.Annotations.Add(Models.DataModels.Predefined.PredefinedAnnotations.OneToOne()); } } } } ModelDic = new Dictionary <string, ModelClass>(); foreach (var entityClass in EntityDic.Values) { var m = new ModelClass(entityClass, "workshop"); ModelDic.Add(m.Name, m); } foreach (var modelClass in ModelDic.Values) { foreach (var classMember in modelClass.ClassMembers.ClassMembers) { var mClass = ModelDic.Values.FirstOrDefault(x => x.EntityClass.Name == classMember.Type.Name || (classMember.Type == Models.DataModels.Predefined.PredefinedClasses.JavaList && x.EntityClass.Name == classMember.Type.GenericList.First().Name)); if (mClass != null) { modelClass.ClassMembers.ChangeType(classMember.Name, mClass); } } } ConverterDic = new Dictionary <string, ConverterClass>(); foreach (var modelClass in ModelDic.Values) { var m = new ConverterClass(modelClass, "workshop"); ConverterDic.Add(m.Name, m); } foreach (var converterClass in ConverterDic.Values) { foreach (var expression in converterClass.Functions.First(x => x.Name == "doConvertToEntity").Expressions.Where(x => x is SetterAssignExpression).Select(x => x as SetterAssignExpression)) { if (expression.DestinationClassMember.Type != expression.SourceClassMember.Type) { var converter = ConverterDic.Values.FirstOrDefault(x => x.ModelClass != converterClass.ModelClass && x.ModelClass == expression.SourceClassMember.Type); if (converter != null) { if (!converterClass.ClassMembers.ClassMembers.Any(x => x.Type == converter)) { converterClass.ClassMembers.Add(new ClassMember(converter.Name.ToLowerFirstCharacter(), converter, null, Models.DataModels.Enum.AccessModifier.Private, Models.DataModels.Enum.NonAccessModifier.Transient), false); } } } } if (converterClass.ClassMembers.ClassMembers.Count > 0) { var ctor = new ConstructorFunction(converterClass); ctor.Annotations.Add(Models.DataModels.Predefined.PredefinedAnnotations.Autowired()); converterClass.Functions.Insert(0, ctor); } } }