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 ;
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); }
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); }
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); }
public virtual string GetR11CReverseNavigationFkPropertyName(CRflProperty aR11CProperty) => this.Tok.Trg_P_Parent_Pfx + aR11CProperty.DeclaringTyp.Name + "_" + aR11CProperty.Name + "_" + this.Tok.Trg_P_Fk_Sfx;
public virtual string GetR1NCReverseNavigationRefName(CRflProperty aR1NCProperty) => this.Tok.Trg_P_Parent_Pfx + aR1NCProperty.DeclaringTyp.Name + "_" + aR1NCProperty.Name;
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); } }
public virtual string GetR11CForeignKeyPropertyName(CRflProperty aR11CPRoperty) => aR11CPRoperty.Name + this.Tok.Trg_P_Fk_Sfx;
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() );
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); }
public virtual IEnumerable <CRflAttribute> GetAttributes(CRflProperty aPrp) => aPrp.GetAttributesWithPrefix(this.Tok.Mdl_P_A_Nme_DomA);
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);
public virtual string GetInit(CRflProperty aPrp) => aPrp.GetAttributeValue(this.Tok.Mdl_P_A_Nme_Init).DefaultIfEmpty(() => this.GetInit(this.GetReturnTyp(aPrp)));
public virtual CRflTyp GetReturnTyp(CRflProperty aPrp) => aPrp.DeclaringTyp.Model.GetTypByName(GetReturnTypName(aPrp));
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);
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)));
public virtual IEnumerable <CodeAttributeDeclaration> NewCodeAttributeDecls(CRflProperty aProperty, CGenModelInterpreter aModelInterpreter) => this.NewCodeAttributeDeclsExist(aProperty, aModelInterpreter) .Concat(this.NewCodeAttributeDeclsExplicit(aProperty));
public virtual string GetEntityRefPropertyName(CRflProperty aPrp) => aPrp.Name + this.Tok.Dom_P_Ref_Sfx;
public abstract IEnumerable <CodeExpression> NewCtorArgs(CGenModelInterpreter aModelInterpreter, CCodeDomBuilder aDomBuilder, CRflProperty aProperty);
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)))))); } }
public virtual string GetR1NCForeignKeyPropertyName(CRflProperty aR1NCProperty) => this.Tok.Trg_P_Parent_Pfx + aR1NCProperty.DeclaringTyp.Name + "_" + aR1NCProperty.Name + this.Tok.Trg_P_Fk_Sfx;
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); }
public CRflAttribute(CRflProperty aRflProperty, CRflRow aRflRow) { this.RflProperty = aRflProperty; this.Row = aRflRow; }