Beispiel #1
0
        public override void InitMemberInfo(object member, XafMemberInfo memberInfo)
        {
            base.InitMemberInfo(member, memberInfo);
            var typeMetadata = Metadata.FirstOrDefault(tm => tm.Type == memberInfo.Owner.Type);

            if (typeMetadata != null)
            {
                if (typeMetadata.KeyPropertyName == memberInfo.Name)
                {
                    memberInfo.IsKey = true;
                    memberInfo.AddAttribute(new VisibleInDetailViewAttribute(false));
                    memberInfo.AddAttribute(new VisibleInListViewAttribute(false));
                    memberInfo.Owner.KeyMember = memberInfo;
                    memberInfo.IsPersistent = true;
                }

                if (memberInfo.ListElementType != null)
                {
                    var associatedTypeInfo = typesInfo.FindTypeInfo(memberInfo.ListElementType);
                    
                    memberInfo.AssociatedMemberInfo = (XafMemberInfo)associatedTypeInfo.Members.FirstOrDefault(m => m.MemberType == memberInfo.Owner.Type);
                    if (memberInfo.AssociatedMemberInfo != null)
                    {
                        memberInfo.IsAssociation = true;
                        memberInfo.AssociatedMemberInfo.IsReferenceToOwner = true;
                        memberInfo.AssociatedMemberOwner = associatedTypeInfo.Type;
                        memberInfo.IsAggregated = true;
                    }
                }
                memberInfo.IsPersistent = !memberInfo.IsReadOnly;
            }
        }
Beispiel #2
0
 private static void InitializeKeyProperty(XafMemberInfo memberInfo)
 {
     memberInfo.IsKey = true;
     memberInfo.AddAttribute(new VisibleInDetailViewAttribute(false));
     memberInfo.AddAttribute(new VisibleInListViewAttribute(false));
     memberInfo.Owner.KeyMember = memberInfo;
     memberInfo.IsPersistent    = true;
 }
 void ITypeInfoSource.InitMemberInfo(object member, XafMemberInfo memberInfo) {
     var dcPropertyInfo = member as DCPropertyInfo;
     if (dcPropertyInfo != null) {
         memberInfo.MemberType = dcPropertyInfo.PropertyType;
         memberInfo.IsReadOnly = !dcPropertyInfo.CanWrite;
     }
     InitMemberInfo(member, memberInfo);
 }
        void ITypeInfoSource.InitMemberInfo(object member, XafMemberInfo memberInfo)
        {
            var dcPropertyInfo = member as DCPropertyInfo;

            if (dcPropertyInfo != null)
            {
                memberInfo.MemberType = dcPropertyInfo.PropertyType;
                memberInfo.IsReadOnly = !dcPropertyInfo.CanWrite;
            }
            InitMemberInfo(member, memberInfo);
        }
Beispiel #5
0
        public override void InitMemberInfo(object member, XafMemberInfo memberInfo)
        {
            base.InitMemberInfo(member, memberInfo);
            if (memberInfo.Owner.IsInterface)
            {
                return;
            }

            var typeMetadata = Metadata.FirstOrDefault(tm => memberInfo.Owner.Type.IsAssignableFrom(tm.Type));

            PropertyDescriptor descriptor = member as PropertyDescriptor;

            if (descriptor != null)
            {
                foreach (Attribute attr in descriptor.Attributes)
                {
                    if (!memberInfo.Attributes.Any(a => a.GetType() == attr.GetType()))
                    {
                        memberInfo.AddAttribute(attr);
                    }
                }
            }

            if (typeMetadata != null)
            {
                IPropertyMetadata propertyMetadata = typeMetadata.Properties.FirstOrDefault(p => p.Name == memberInfo.Name);

                if (propertyMetadata != null)
                {
                    if (Equals(typeMetadata.KeyProperty, propertyMetadata))
                    {
                        InitializeKeyProperty(memberInfo);
                    }

                    switch (propertyMetadata.RelationType)
                    {
                    case RelationType.OneToMany:
                        InitializeOneToMany(memberInfo);
                        break;

                    case RelationType.ManyToMany:
                        InitializeManyToMany(memberInfo);
                        break;

                    case RelationType.Reference:
                        memberInfo.IsAssociation = true;
                        break;
                    }

                    memberInfo.IsPersistent = !memberInfo.IsReadOnly;
                }
            }
        }
Beispiel #6
0
        public override void InitMemberInfo(object member, XafMemberInfo memberInfo)
        {
            base.InitMemberInfo(member, memberInfo);
            if (memberInfo.Owner.IsInterface) return;

            var typeMetadata = Metadata.FirstOrDefault(tm => memberInfo.Owner.Type.IsAssignableFrom(tm.Type));

            PropertyDescriptor descriptor = member as PropertyDescriptor;
            if (descriptor != null)
            {
                foreach (Attribute attr in descriptor.Attributes)
                    if (!memberInfo.Attributes.Any(a => a.GetType() == attr.GetType()))
                        memberInfo.AddAttribute(attr);
            }

            if (typeMetadata != null)
            {
                IPropertyMetadata propertyMetadata = typeMetadata.Properties.FirstOrDefault(p => p.Name == memberInfo.Name);

                if (propertyMetadata != null)
                {
                    if (Equals(typeMetadata.KeyProperty, propertyMetadata))
                    {
                        InitializeKeyProperty(memberInfo);
                    }

                    switch (propertyMetadata.RelationType)
                    {
                        case RelationType.OneToMany:
                            InitializeOneToMany(memberInfo);
                            break;
                        case RelationType.ManyToMany:
                            InitializeManyToMany(memberInfo);
                            break;
                        case RelationType.Reference:
                            memberInfo.IsAssociation = true;
                            break;
                    }

                    memberInfo.IsPersistent = !memberInfo.IsReadOnly;
                }
            }
        }
Beispiel #7
0
        private void InitializeOneToMany(XafMemberInfo memberInfo)
        {
            var associatedTypeInfo = typesInfo.FindTypeInfo(memberInfo.ListElementType);

            memberInfo.AssociatedMemberInfo = (XafMemberInfo)associatedTypeInfo.Members.FirstOrDefault(m => m.MemberType == memberInfo.Owner.Type);
            if (memberInfo.AssociatedMemberInfo != null)
            {
                memberInfo.IsAssociation = true;
                memberInfo.AssociatedMemberInfo.IsReferenceToOwner = true;
                memberInfo.AssociatedMemberOwner = associatedTypeInfo.Type;
                memberInfo.AssociatedMemberInfo.AssociatedMemberOwner = memberInfo.Owner.Type;
                memberInfo.AssociatedMemberInfo.AssociatedMemberInfo  = memberInfo;
                memberInfo.IsAggregated = true;
            }
            else
            {
                throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture,
                                                                  "No owner reference found for the collection {0}", memberInfo.Name));
            }
        }
Beispiel #8
0
 public override bool RegisterNewMember(ITypeInfo owner, XafMemberInfo memberInfo)
 {
     return(base.RegisterNewMember(owner, memberInfo));
 }
Beispiel #9
0
 public override bool RegisterNewMember(ITypeInfo owner, XafMemberInfo memberInfo)
 {
     return base.RegisterNewMember(owner, memberInfo);
 }
Beispiel #10
0
        private static void InitializeKeyProperty(XafMemberInfo memberInfo)
        {
            memberInfo.IsKey = true;
            memberInfo.AddAttribute(new VisibleInDetailViewAttribute(false));
            memberInfo.AddAttribute(new VisibleInListViewAttribute(false));
            memberInfo.Owner.KeyMember = memberInfo;
            memberInfo.IsPersistent = true;

        }
Beispiel #11
0
        private void InitializeManyToMany(XafMemberInfo memberInfo)
        {
            var associatedTypeInfo = typesInfo.FindTypeInfo(memberInfo.ListElementType);

            memberInfo.AssociatedMemberInfo = (XafMemberInfo)associatedTypeInfo.Members.FirstOrDefault(m => IsListOfType(m.MemberType, memberInfo.Owner.Type));
            if (memberInfo.AssociatedMemberInfo != null)
            {
                memberInfo.IsAssociation = true;
                memberInfo.IsManyToMany = true;
                memberInfo.AssociatedMemberInfo.IsAssociation = true;
                memberInfo.AssociatedMemberInfo.IsManyToMany = true;

                memberInfo.AssociatedMemberOwner = associatedTypeInfo.Type;
                memberInfo.AssociatedMemberInfo.AssociatedMemberOwner = memberInfo.Owner.Type;
                memberInfo.AssociatedMemberInfo.AssociatedMemberInfo = memberInfo;
                memberInfo.IsAggregated = false;
            }
         
        }
Beispiel #12
0
        private void InitializeOneToMany(XafMemberInfo memberInfo)
        {
            var associatedTypeInfo = typesInfo.FindTypeInfo(memberInfo.ListElementType);

            memberInfo.AssociatedMemberInfo = (XafMemberInfo)associatedTypeInfo.Members.FirstOrDefault(m => m.MemberType == memberInfo.Owner.Type);
            if (memberInfo.AssociatedMemberInfo != null)
            {
                memberInfo.IsAssociation = true;
                memberInfo.AssociatedMemberInfo.IsReferenceToOwner = true;
                memberInfo.AssociatedMemberOwner = associatedTypeInfo.Type;
                memberInfo.AssociatedMemberInfo.AssociatedMemberOwner = memberInfo.Owner.Type;
                memberInfo.AssociatedMemberInfo.AssociatedMemberInfo = memberInfo;
                memberInfo.IsAggregated = true;
            }
            else
                throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture,
                    "No owner reference found for the collection {0}", memberInfo.Name));
        }