public EntityClass(EntityConstraintsClass eConsts, string module) { EntityConstraints = eConsts; Name = eConsts.TableName.ToPascalCase() + "Entity"; Package = $@"havelsan.kovan.{module}.service.entity"; BaseClass = PredefinedClasses.HvlEntity; Annotations.Add(Entity()); Annotations.Add(Table() .SetParameter("name", eConsts.TableNameRef) .SetParameter("schema", eConsts.TableSchema) .SetParameter("indexes", eConsts.UniqueConstraintsRef.Select(u => Index() .SetParameter("name", u.Name) .SetParameter("unique", true) .SetParameter("columnList", u.ColumnList)).ToList() )); IfPresent(eConsts.TableSequenceRef, ts => Annotations.Add(HvlEntitySequence().SetParameter("name", ts))); ClassMembers.AddRange(eConsts.Table.Columns.Select(col => { var cm = new ClassMember(col.Name.ToCamelCase(), col.Type.ToJavaType(), null, AccessModifier.Private); cm.Annotations.Add(Column().SetParameter("name", eConsts.GetColumnName(col))); cm.Annotations.AddIfTrue(!col.Nullable, NotNull()); IfPresent(col.Size, size => { if (cm.Type.BaseClass == PredefinedClasses.JavaNumber) { var da = Digits(); size.Max.IfPresent(max => da.SetParameter("integer", eConsts.GetColumnSizeMax(col))); size.Min.IfPresent(min => da.SetParameter("fraction", eConsts.GetColumnSizeMin(col))); cm.Annotations.Add(da); } else { var sa = Size(); size.Min.IfPresent(min => sa.SetParameter("min", eConsts.GetColumnSizeMin(col))); size.Max.IfPresent(max => sa.SetParameter("max", eConsts.GetColumnSizeMax(col))); cm.Annotations.Add(sa); } }); return(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); } } }