Exemplo n.º 1
0
 public virtual string GetAttributeTypeName(CRflProperty aProperty, string aModelAttributeTypeName, CGenModelInterpreter aModelInterpreter)
 => aModelAttributeTypeName.Contains(aModelInterpreter.Tok.Dom_Nsp_Seperator)
     ? aModelAttributeTypeName
     : aModelInterpreter.GetClrNamespace(aProperty.Model.GetTypByName(aModelAttributeTypeName)).Length == 0
     ? aModelAttributeTypeName
     : aModelInterpreter.GetClrNamespace(aProperty.Model.GetTypByName(aModelAttributeTypeName)) + aModelInterpreter.Tok.Dom_Nsp_Seperator + aModelAttributeTypeName
 ;
Exemplo n.º 2
0
        internal IEnumerable <CRflRow> NewR1NCForeignKeyRows(CRflProperty aR1NCProperty)
        {
            var aR1NPTyp          = aR1NCProperty.DeclaringTyp;
            var aR1NCTyp          = this.GetReturnTyp(aR1NCProperty);
            var aFkPropertyName   = this.GetR1NCForeignKeyPropertyName(aR1NCProperty);
            var aSelfTypName      = aR1NPTyp.Name;
            var aFkTypName        = aR1NCTyp.Name;
            var aGeneratedComment = "Generated by " + nameof(CGenModelInterpreter) + "." + nameof(NewR1NCForeignKeyRows);
            var aFkPropertyRow    = CRflRow.New(aFkTypName, aFkPropertyName, this.Tok.Mdl_P_A_Typ_Nme, nameof(System.Guid), string.Empty, aGeneratedComment);
            var aFkPropertyWriteOnlyBySystemRow      = CRflRow.New(aFkTypName, aFkPropertyName, this.Tok.Trg_P_A_WriteOnlyBySystem, true.ToString());
            var aFkCounterpartTypeAttributeType      = this.Tok.GetModelAttributeTypName(typeof(CbOrm.App.Sys.CForeignKeyCounterpartTypeAttribute));
            var aFkCounterpartTypeAttributeValue     = aSelfTypName;
            var aFkCounterpartTypeAttributeRow       = CRflRow.New(aFkTypName, aFkPropertyName, this.Tok.Mdl_P_A_Nme_DomA + aFkCounterpartTypeAttributeType, aFkCounterpartTypeAttributeValue, string.Empty, aGeneratedComment);
            var aFkCounterpartPropertyAttributeType  = this.Tok.GetModelAttributeTypName(typeof(CForeignKeyCounterpartPropertyNameAttribute));
            var aFkCounterpartPropertyAttributeValue = aR1NCProperty.Name;
            var aFkCounterpartAttributeRow           = CRflRow.New(aFkTypName, aFkPropertyName, this.Tok.Mdl_P_A_Nme_DomA + aFkCounterpartPropertyAttributeType, aFkCounterpartPropertyAttributeValue, string.Empty, aGeneratedComment);

            yield return(aFkPropertyRow);

            yield return(aFkPropertyWriteOnlyBySystemRow);

            yield return(aFkCounterpartTypeAttributeRow);

            yield return(aFkCounterpartAttributeRow);
        }
Exemplo n.º 3
0
        public virtual IEnumerable <CRflRow> NewR1NCReverseNavigationRows(CRflProperty aR1NCProperty)
        {
            var aR1NPTyp                = aR1NCProperty.DeclaringTyp;
            var aR1NCTyp                = this.GetReturnTyp(aR1NCProperty);
            var aTargetTypName          = aR1NCTyp.Name;
            var aReverseRefPropertyName = this.GetR1NCReverseNavigationRefName(aR1NCProperty);
            var aReferencedTypName      = aR1NPTyp.Name;
            var aGeneratorComment       = "Generated by " + nameof(CGenModelInterpreter) + "." + nameof(NewR1NCReverseNavigationRows);
            var aRefTypDeclRow          = CRflRow.New(aTargetTypName, aReverseRefPropertyName, this.Tok.Mdl_P_A_Typ_Nme, aReferencedTypName, string.Empty, aGeneratorComment);
            var aRefCardinalityRow      = CRflRow.New(aTargetTypName, aReverseRefPropertyName, this.Tok.Mdl_P_A_Nme_Crd, CCardinalityEnum.R1NP.ToString().TrimStart("R"), string.Empty, aGeneratorComment);

            yield return(aRefTypDeclRow);

            yield return(aRefCardinalityRow);
        }
Exemplo n.º 4
0
        public virtual IEnumerable <CRflRow> NewR11CReverseNavigationRows(CRflProperty aR11CProperty)
        {
            var aR11PTyp                        = aR11CProperty.DeclaringTyp;
            var aR11CTyp                        = this.GetReturnTyp(aR11CProperty);
            var aTargetTypName                  = aR11CTyp.Name;
            var aReverseRefPropertyName         = this.GetR11CReverseNavigationRefName(aR11CProperty);
            var aFkPropertyName                 = this.GetR11CReverseNavigationFkPropertyName(aR11CProperty);
            var aReferencedTypName              = aR11PTyp.Name;
            var aGeneratorComment               = "Generated by " + nameof(CGenModelInterpreter) + "." + nameof(NewR11CReverseNavigationRows);
            var aRefTypDeclRow                  = CRflRow.New(aTargetTypName, aReverseRefPropertyName, this.Tok.Mdl_P_A_Typ_Nme, aReferencedTypName, string.Empty, aGeneratorComment);
            var aRefCardinalityRow              = CRflRow.New(aTargetTypName, aReverseRefPropertyName, this.Tok.Mdl_P_A_Nme_Crd, CCardinalityEnum.R11P.ToString().TrimStart("R"), string.Empty, aGeneratorComment);
            var aRefFkRow                       = CRflRow.New(aTargetTypName, aFkPropertyName, this.Tok.Mdl_P_A_Typ_Nme, nameof(Guid));
            var aFkCounterpartTypeAttributeType = this.Tok.GetModelAttributeTypName(typeof(CbOrm.App.Sys.CForeignKeyCounterpartTypeAttribute));
            var aSelfTypName                    = aR11CTyp.Name;
            var aSelfPropertyName               = aReverseRefPropertyName;

            yield return(aRefFkRow);

            yield return(aRefTypDeclRow);

            yield return(aRefCardinalityRow);
        }
Exemplo n.º 5
0
 public virtual string GetR11CReverseNavigationFkPropertyName(CRflProperty aR11CProperty) => this.Tok.Trg_P_Parent_Pfx + aR11CProperty.DeclaringTyp.Name + "_" + aR11CProperty.Name + "_" + this.Tok.Trg_P_Fk_Sfx;
Exemplo n.º 6
0
 public virtual string GetR1NCReverseNavigationRefName(CRflProperty aR1NCProperty) => this.Tok.Trg_P_Parent_Pfx + aR1NCProperty.DeclaringTyp.Name + "_" + aR1NCProperty.Name;
Exemplo n.º 7
0
        public override IEnumerable <CodeExpression> NewCtorArgs(CGenModelInterpreter aModelInterpreter, CCodeDomBuilder aDomBuilder, CRflProperty aProperty)
        {
            var aCTyp = aModelInterpreter.GetReturnTyp(aProperty);
            var aGenarateReverseNavigation = aCTyp.Interpret(() => bool.Parse(aCTyp.GetAttributeValue(aModelInterpreter.Tok.Mdl_T_A_GenerateReverseNavigation, () => true.ToString())));

            if (aGenarateReverseNavigation)
            {
                var aCTypNme     = aModelInterpreter.GetTypName(aCTyp, true);
                var aCdTypRef    = new CodeTypeReference(aCTypNme);
                var aCdTypRefExp = new CodeTypeReferenceExpression(aCdTypRef);
                var aPrpNme      = aModelInterpreter.Tok.GetRelationyMetaInfoPropertyName(aModelInterpreter.GetR11CReverseNavigationRefName(aProperty));
                var aFldRefExp   = new CodePropertyReferenceExpression(aCdTypRefExp, aPrpNme);
                yield return(aFldRefExp);
            }
        }
Exemplo n.º 8
0
 public virtual string GetR11CForeignKeyPropertyName(CRflProperty aR11CPRoperty) => aR11CPRoperty.Name + this.Tok.Trg_P_Fk_Sfx;
Exemplo n.º 9
0
 public virtual IEnumerable <CodeAttributeDeclaration> NewCodeAttributeDeclsExist(CRflProperty aProperty, CGenModelInterpreter aModelInterpreter)
 => from aAttribute in aProperty.GetAttributesWithPrefix(this.Tok.Mdl_P_A_Nme_DomA)
 select new CodeAttributeDeclaration(
     new CodeTypeReference(this.GetAttributeTypeName(aProperty, aAttribute.Name.TrimStart(this.Tok.Mdl_P_A_Nme_DomA), aModelInterpreter)),
     System.Type.GetType(this.GetAttributeTypeName(aProperty, aAttribute.Name.TrimStart(this.Tok.Mdl_P_A_Nme_DomA), aModelInterpreter)).GetCustomAttribute <CAttributeValueTypeAttribute>().NewCodeAttributeArguments(aAttribute.Value).ToArray()
     );
Exemplo n.º 10
0
        public override IEnumerable <CodeExpression> NewCtorArgs(CGenModelInterpreter aModelInterpreter, CCodeDomBuilder aDomBuilder, CRflProperty aProperty)
        {
            var aPTyp        = aModelInterpreter.GetReturnTyp(aProperty);
            var aPTypNme     = aModelInterpreter.GetTypName(aPTyp, false);
            var aCTyp        = aProperty.DeclaringTyp;
            var aCTypNme     = aCTyp.Name;
            var aCdTypRef    = new CodeTypeReference(aCTypNme);
            var aCdTypRefExp = new CodeTypeReferenceExpression(aCdTypRef);
            var aFldNme      = "_" + aProperty.Name + "_" + aModelInterpreter.Tok.Trg_P_Fk_Sfx + aModelInterpreter.Tok.Dom_F_Mta_P_Sfx; //aProperty.Name.TrimStart(aModelInterpreter.Tok.Trg_P_Parent_Pfx).TrimStart(aPTypNme) + aModelInterpreter.Tok.Trg_P_Fk_Sfx + aModelInterpreter.Tok.Trg_C_Mta_P_Rel_Sfx;
            var aFldRefExp   = new CodeFieldReferenceExpression(aCdTypRefExp, aFldNme);

            yield return(aFldRefExp);
        }
Exemplo n.º 11
0
 public virtual IEnumerable <CRflAttribute> GetAttributes(CRflProperty aPrp) => aPrp.GetAttributesWithPrefix(this.Tok.Mdl_P_A_Nme_DomA);
Exemplo n.º 12
0
 public virtual CCardinalityEnum GetCardinality(CRflProperty aPrp) => aPrp.GetAttributeValue(this.Tok.Mdl_P_A_Nme_Crd).DefaultIfEmpty(aCardinalityText => ("R" + aCardinalityText.Replace(":", string.Empty)).ParseEnum <CCardinalityEnum>(), () => this.GetIsObject(this.GetReturnTyp(aPrp)) ? CCardinalityEnum.R1NC : CCardinalityEnum.Skalar);
Exemplo n.º 13
0
 public virtual string GetInit(CRflProperty aPrp) => aPrp.GetAttributeValue(this.Tok.Mdl_P_A_Nme_Init).DefaultIfEmpty(() => this.GetInit(this.GetReturnTyp(aPrp)));
Exemplo n.º 14
0
 public virtual CRflTyp GetReturnTyp(CRflProperty aPrp) => aPrp.DeclaringTyp.Model.GetTypByName(GetReturnTypName(aPrp));
Exemplo n.º 15
0
 public virtual string GetReturnTypName(CRflProperty aPrp) => this.GetIsEnum(aPrp.DeclaringTyp)
                                                            ? aPrp.DeclaringTyp.Name
                                                            : aPrp.Name.Length == 0 ? string.Empty : aPrp.GetAttributeValue(this.Tok.Mdl_P_A_Typ_Nme).DefaultIfEmpty(() => aPrp.Name);
Exemplo n.º 16
0
 public virtual IEnumerable <CodeAttributeDeclaration> NewCodeAttributeDeclsGen(CRflProperty aProperty, CGenModelInterpreter aModelInterpreter)
 => from aAttribute in aProperty.GetAttributesWithPrefix(this.Tok.Mdl_P_A_Nme_DomA)
     where aModelInterpreter.GetGenerate(aProperty.Model.GetTypByName(aAttribute.Name.TrimStart(this.Tok.Mdl_P_A_Nme_DomA)))
 select new CodeAttributeDeclaration(
     new CodeTypeReference(this.Tok.GetClrAttributeClassNameFromModel(aAttribute.Name.TrimStart(this.Tok.Mdl_P_A_Nme_DomA))),
     new CodeAttributeArgument(new CodePrimitiveExpression(aAttribute.Value)));
Exemplo n.º 17
0
 public virtual IEnumerable <CodeAttributeDeclaration> NewCodeAttributeDecls(CRflProperty aProperty, CGenModelInterpreter aModelInterpreter) =>
 this.NewCodeAttributeDeclsExist(aProperty, aModelInterpreter)
 .Concat(this.NewCodeAttributeDeclsExplicit(aProperty));
Exemplo n.º 18
0
 public virtual string GetEntityRefPropertyName(CRflProperty aPrp) => aPrp.Name + this.Tok.Dom_P_Ref_Sfx;
Exemplo n.º 19
0
 public abstract IEnumerable <CodeExpression> NewCtorArgs(CGenModelInterpreter aModelInterpreter, CCodeDomBuilder aDomBuilder, CRflProperty aProperty);
Exemplo n.º 20
0
        public virtual IEnumerable <CodeAttributeDeclaration> NewCodeAttributeDeclsExplicit(CRflProperty aProperty)
        {
            var aAttributeName  = this.Tok.Trg_P_AutoCreate_Nme;
            var aAttributeValue = aProperty.GetAttributeValue(aAttributeName);

            if (aAttributeValue != string.Empty)
            {
                yield return(new CodeAttributeDeclaration(new CodeTypeReference(typeof(CbOrm.App.Sys.CAutoCreateAttribute)), new CodeAttributeArgument(new CodePrimitiveExpression(aProperty.GetAttribute(aAttributeName).Interpret(() => bool.Parse(aAttributeValue))))));
            }
        }
Exemplo n.º 21
0
 public virtual string GetR1NCForeignKeyPropertyName(CRflProperty aR1NCProperty) => this.Tok.Trg_P_Parent_Pfx + aR1NCProperty.DeclaringTyp.Name + "_" + aR1NCProperty.Name + this.Tok.Trg_P_Fk_Sfx;
Exemplo n.º 22
0
        private void AddMembers(CRflTyp aPTyp, CodeTypeDeclaration aCdTypDcl, CRflProperty aProperty)
        {
            var    aModel            = aProperty.Model;
            var    aModelInterpreter = this.ModelInterpreter;
            var    aCodeDomBuilder   = this.CodeDomBuilder;
            var    aPTypNme          = this.ModelInterpreter.GetTypName(aPTyp, true);
            var    aCdPTypRef        = new CodeTypeReference(aPTypNme);
            var    aCdPTypRefExp     = new CodeTypeReferenceExpression(aCdPTypRef);
            var    aCTyp             = this.ModelInterpreter.GetReturnTyp(aProperty);
            var    aPrpNme           = aProperty.Name;
            string aMtaFldTypNme;
            var    aMtaPrpNme    = this.Tok.GetRelationyMetaInfoPropertyName(aPrpNme);
            var    aMtaPrpRefExp = new CodePropertyReferenceExpression(aCdPTypRefExp, aMtaPrpNme);
            var    aCTypRef      = this.CodeDomBuilder.NewCodeTypeRef(aCTyp);

            // Relations-Objects
            var aCrd           = this.ModelInterpreter.GetCardinality(aProperty);
            var aRelTypName    = this.ModelInterpreter.GetClassName(aCrd);
            var aRelSystemType = CRef.GetRefClass(aCrd);
            var aCdRTypRef     = new CodeTypeReference(aRelTypName, this.CodeDomBuilder.NewCodeTypeRef(aPTyp), aCTypRef);
            var aCtorArgs1     = new CodeExpression[] { new CodeThisReferenceExpression(), aMtaPrpRefExp };
            var aCtorArgsBuildAttribIsDefined = aRelSystemType.IsNullRef() ? false : aRelSystemType.IsDefined(typeof(CGenCtorArgsBuilderAttribute), true);
            var aWriteOnlyBySystem            = aProperty.Interpret(() => bool.Parse(aProperty.GetAttributeValue(this.Tok.Trg_P_A_WriteOnlyBySystem, false.ToString)));
            var aCtorArgs2            = aWriteOnlyBySystem ? new CodeExpression[] { new CodeObjectCreateExpression(typeof(CAccessKey)) } : new CodeExpression[] { };
            var aCtorArgBuilderAttrib = aCtorArgsBuildAttribIsDefined ? aRelSystemType.GetCustomAttribute <CGenCtorArgsBuilderAttribute>(true) : default(CGenCtorArgsBuilderAttribute);
            var aCtorArgs3            = aCtorArgBuilderAttrib.IsNullRef() ? new CodeExpression[] { } : aCtorArgBuilderAttrib.NewCtorArgs(aModelInterpreter, aCodeDomBuilder, aProperty);
            var aCtorArgs             = aCtorArgs1.Concat(aCtorArgs2).Concat(aCtorArgs3);
            var aNewExp  = new CodeObjectCreateExpression(aCdRTypRef, aCtorArgs.ToArray());
            var aIsClass = true;
            var aLazyPrp = this.CodeDomBuilder.NewLazyLoadPrperty(aCdRTypRef, aIsClass, this.ModelInterpreter.GetEntityRefPropertyName(aProperty), aNewExp, MemberAttributes.Public | MemberAttributes.Final);

            aCdTypDcl.Members.Add(aLazyPrp.Item1);
            aCdTypDcl.Members.Add(aLazyPrp.Item2);
            var aCdPrp = aLazyPrp.Item1;

            aMtaFldTypNme = this.Tok.GeRelationMetaInfoTypName(aRelTypName);

            // Property.Attributes from System
            aCdPrp.CustomAttributes.Add(new CodeAttributeDeclaration(new CodeTypeReference(typeof(CTargetTypeAttribute)), new CodeAttributeArgument(new CodeTypeOfExpression(aCTypRef))));


            // Property.Attributes from Model
            var aCdAs = this.CodeDomBuilder.NewCodeAttributeDecls(aProperty, this.ModelInterpreter);

            aCdPrp.CustomAttributes.AddRange(aCdAs.ToArray());



            // Property.NetaInfo.Field
            var aMtaFldNme = this.Tok.GetRelationMetaInfoFieldName(aPrpNme);
            //aMtaFldTypNme = this.Tok.Trg_C_Mta_P_Fld_Nme;
            var aCdMtaFldTypRef  = new CodeTypeReference(aMtaFldTypNme);
            var aCdMtaPrpFldDcl  = new CodeMemberField(aMtaFldTypNme, aMtaFldNme);
            var aCdMtaPrpInitExp = new CodeObjectCreateExpression(aCdMtaFldTypRef,
                                                                  this.CodeDomBuilder.NewTypeOfExpression(aPTypNme),
                                                                  this.CodeDomBuilder.NewNameOfPrpertyExpression(aPrpNme)
                                                                  );

            aCdMtaPrpFldDcl.Type       = aCdMtaFldTypRef;
            aCdMtaPrpFldDcl.Attributes = MemberAttributes.Static
                                         | MemberAttributes.Private
            ;
            aCdMtaPrpFldDcl.InitExpression = aCdMtaPrpInitExp;
            aCdTypDcl.Members.Add(aCdMtaPrpFldDcl);

            var aCdMtaFldRefExp = new CodeFieldReferenceExpression(aCdPTypRefExp, aMtaFldNme);

            // Property.MetaInfo.Property
            var aCdMtaPrp = new CodeMemberProperty();

            aCdMtaPrp.Name       = aMtaPrpNme;
            aCdMtaPrp.Type       = aCdMtaFldTypRef;
            aCdMtaPrp.Attributes = MemberAttributes.Static
                                   | MemberAttributes.Public
            ;
            aCdMtaPrp.HasGet = true;
            aCdMtaPrp.GetStatements.Add(new CodeMethodReturnStatement(aCdMtaFldRefExp));
            aCdTypDcl.Members.Add(aCdMtaPrp);
        }
Exemplo n.º 23
0
 public CRflAttribute(CRflProperty aRflProperty, CRflRow aRflRow)
 {
     this.RflProperty = aRflProperty;
     this.Row         = aRflRow;
 }