Beispiel #1
0
        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);
            //}
        }
Beispiel #2
0
        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);
                }
            }
        }