Esempio n. 1
0
        protected void HandleRelations(ValueObjectConfig config, IMap <String, IList <XElement> > configDetails)
        {
            IList <XElement> elementTypes = configDetails.Get(XmlConstants.RELATION.LocalName);

            if (elementTypes != null)
            {
                for (int i = elementTypes.Count; i-- > 0;)
                {
                    XElement entry      = elementTypes[i];
                    String   memberName = XmlConfigUtil.GetRequiredAttribute(entry, XmlConstants.NAME);

                    if (config.IsIgnoredMember(memberName))
                    {
                        continue;
                    }

                    config.SetValueObjectMemberType(memberName, ValueObjectMemberType.RELATION);

                    bool holdsListType = XmlConfigUtil.AttributeIsTrue(entry, XmlConstants.LIST_TYPE);
                    if (holdsListType)
                    {
                        config.AddListTypeMember(memberName);
                    }

                    String elementTypeName = XmlConfigUtil.GetAttribute(entry, XmlConstants.TARGET_VALUE_OBJECT);
                    if (elementTypeName.Length > 0)
                    {
                        Type elementType = XmlConfigUtil.GetTypeForName(elementTypeName);
                        config.PutMemberType(memberName, elementType);
                    }
                }
            }
        }
Esempio n. 2
0
        protected void HandlePrimitiveCollections(ValueObjectConfig config, IMap <String, IList <XElement> > configDetails)
        {
            IList <XElement> memberTags = configDetails.Get(XmlConstants.BASIC.LocalName);

            if (memberTags == null)
            {
                return;
            }
            for (int j = memberTags.Count; j-- > 0;)
            {
                XElement element    = memberTags[j];
                String   memberName = XmlConfigUtil.GetRequiredAttribute(element, XmlConstants.NAME);

                if (config.IsIgnoredMember(memberName))
                {
                    continue;
                }

                config.SetValueObjectMemberType(memberName, ValueObjectMemberType.BASIC);

                String targetElementTypeName = XmlConfigUtil.GetAttribute(element, XmlConstants.TARGET_ELEMENT_TYPE);
                if (targetElementTypeName.Length == 0)
                {
                    continue;
                }

                Type elementType = XmlConfigUtil.GetTypeForName(targetElementTypeName);
                config.PutMemberType(memberName, elementType);
            }
        }
Esempio n. 3
0
        protected void HandleMembers(ValueObjectConfig config, XElement voConfig, IEntityMetaData metaData)
        {
            IMap <String, IList <XElement> > configDetails = XmlConfigUtil.ChildrenToElementMap(voConfig);

            HandleIgnoredMembers(config, configDetails);
            HandleMemberMappings(config, configDetails, metaData);
            HandleRelations(config, configDetails);
        }
Esempio n. 4
0
        protected void HandleMemberMappings(ValueObjectConfig config, IMap <String, IList <XElement> > configDetails, IEntityMetaData metaData)
        {
            Type entityType = config.EntityType;
            Type valueType  = config.ValueType;

            IMap <String, IPropertyInfo> entityPropertyMap = PropertyInfoProvider.GetPropertyMap(entityType);
            IMap <String, IPropertyInfo> valuePropertyMap  = PropertyInfoProvider.GetPropertyMap(valueType);

            for (int i = memberTagNames.Length; i-- > 0;)
            {
                String memberTagName = memberTagNames[i].LocalName;

                IList <XElement> memberTags = configDetails.Get(memberTagName);
                if (memberTags == null)
                {
                    continue;
                }

                for (int j = memberTags.Count; j-- > 0;)
                {
                    XElement element    = memberTags[j];
                    String   memberName = XmlConfigUtil.GetRequiredAttribute(element, XmlConstants.NAME);
                    if (config.IsIgnoredMember(memberName))
                    {
                        continue;
                    }
                    if (RuntimeValidationActive && !IsPropertyResolvable(valueType, valuePropertyMap, memberName, null))
                    {
                        throw new ArgumentException("Value type property '" + valueType.Name + "." + memberName + "' not found");
                    }

                    bool holdsListType = XmlConfigUtil.AttributeIsTrue(element, XmlConstants.LIST_TYPE);
                    if (holdsListType)
                    {
                        config.AddListTypeMember(memberName);
                    }

                    String entityMemberName = XmlConfigUtil.GetAttribute(element, XmlConstants.NAME_IN_ENTITY);
                    if (entityMemberName.Length == 0)
                    {
                        entityMemberName = memberName;
                    }
                    else
                    {
                        config.PutValueObjectMemberName(entityMemberName, memberName);
                    }
                    if (RuntimeValidationActive && !IsPropertyResolvable(entityType, entityPropertyMap, entityMemberName, metaData))
                    {
                        throw new ArgumentException("Entity type property '" + entityType.Name + "." + entityMemberName
                                                    + "' not found while configuring value type '" + valueType.Name + "'");
                    }
                }
            }
        }
Esempio n. 5
0
        protected void HandleIgnoredMembers(ValueObjectConfig config, IMap <String, IList <XElement> > configDetails)
        {
            IList <XElement> memberTags = configDetails.Get(XmlConstants.IGNORE.LocalName);

            if (memberTags == null)
            {
                return;
            }

            for (int j = memberTags.Count; j-- > 0;)
            {
                XElement element    = memberTags[j];
                String   memberName = XmlConfigUtil.GetRequiredAttribute(element, XmlConstants.NAME);
                config.SetValueObjectMemberType(memberName, ValueObjectMemberType.IGNORE);
            }
        }
Esempio n. 6
0
        protected void ConsumeConfigs(IEntityMetaData metaData, IList <XElement> entities)
        {
            for (int i = entities.Count; i-- > 0;)
            {
                XElement item = entities[i];

                IMap <String, IList <XElement> > configs = XmlConfigUtil.ChildrenToElementMap(item);
                IList <XElement> voConfigs = configs.Get(XmlConstants.VALUE_OBJECT.LocalName);
                for (int j = voConfigs.Count; j-- > 0;)
                {
                    XElement voConfig = voConfigs[j];

                    String valueTypeName = XmlConfigUtil.GetRequiredAttribute(voConfig, XmlConstants.CLASS);
                    Type   valueType     = XmlConfigUtil.GetTypeForName(valueTypeName);

                    bool exists = false;
                    foreach (IValueObjectConfig conf in managedValueObjectConfigs)
                    {
                        if (conf.ValueType.Equals(valueType) && conf.EntityType.Equals(metaData.EntityType))
                        {
                            exists = true;
                            break;
                        }
                    }
                    if (exists)
                    {
                        continue;
                    }

                    ValueObjectConfig config = new ValueObjectConfig();
                    config.EntityType = metaData.EntityType;
                    config.ValueType  = valueType;

                    HandleMembers(config, voConfig, metaData);

                    managedValueObjectConfigs.Add(config);
                    ValueObjectConfigExtendable.RegisterValueObjectConfig(config);
                }
            }
        }