static void CreateAttributes(IExtendedMemberInfo extendedMemberInfo, XPCustomMemberInfo memberInfo)
 {
     foreach (AttributeInfoAttribute attributeInfo in extendedMemberInfo.TypeAttributes.Select(typeAttribute => typeAttribute.Create()))
     {
         memberInfo.AddAttribute((Attribute)ReflectionHelper.CreateObject(attributeInfo.Constructor.DeclaringType, attributeInfo.InitializedArgumentValues));
     }
 }
 private void createAttributes(IExtendedMemberInfo extendedMemberInfo, XPCustomMemberInfo customMemberInfo)
 {
     foreach (IPersistentAttributeInfo typeAttribute in extendedMemberInfo.TypeAttributes){
         AttributeInfo attributeInfo = typeAttribute.Create();
         customMemberInfo.AddAttribute((Attribute)Activator.CreateInstance(attributeInfo.Constructor.DeclaringType, attributeInfo.InitializedArgumentValues[0], ReflectionHelper.GetType(attributeInfo.InitializedArgumentValues[2] as string)));
     }
 }
Beispiel #3
0
        public static List <XPCustomMemberInfo> CreateBothPartMembers(this ITypesInfo typesinfo, Type typeToCreateOn, Type otherPartMember, XPDictionary xpDictionary, bool isManyToMany, string association)
        {
            var infos = new List <XPCustomMemberInfo>();
            XPCustomMemberInfo member = isManyToMany
                                            ? CreateCollection(typesinfo, typeToCreateOn, otherPartMember, association, xpDictionary, false)
                                            : CreateMember(typesinfo, otherPartMember, typeToCreateOn, association, xpDictionary, false);

            if (member != null)
            {
                infos.Add(member);
                member = isManyToMany
                             ? CreateCollection(typesinfo, otherPartMember, typeToCreateOn, association, xpDictionary,
                                                false)
                             : CreateCollection(typesinfo, typeToCreateOn, otherPartMember, association, xpDictionary,
                                                false);

                if (member != null)
                {
                    infos.Add(member);
                }
            }

            typesinfo.RefreshInfo(typeToCreateOn);
            typesinfo.RefreshInfo(otherPartMember);

            return(infos);
        }
Beispiel #4
0
        IModelMember GetCalcNode(XPCustomMemberInfo memberInfo, IModelClass modelClass)
        {
            var modelRuntimeCalculatedMember = modelClass.OwnMembers.AddNode <IModelRuntimeCalculatedMember>(memberInfo.Name);

            modelRuntimeCalculatedMember.AliasExpression = ((PersistentAliasAttribute)memberInfo.FindAttributeInfo(typeof(PersistentAliasAttribute))).AliasExpression;
            return(modelRuntimeCalculatedMember);
        }
Beispiel #5
0
        IModelMember GetCollectionNode(XPCustomMemberInfo memberInfo, IModelClass modelClass)
        {
            var modelRuntimeOrphanedColection = modelClass.OwnMembers.AddNode <IModelRuntimeOrphanedColection>(memberInfo.Name);

            modelRuntimeOrphanedColection.CollectionType = modelClass.Application.BOModel[memberInfo.MemberType.GetGenericArguments()[0].FullName];
            modelRuntimeOrphanedColection.Criteria       = ((XpandCollectionMemberInfo)memberInfo).Criteria;
            return(modelRuntimeOrphanedColection);
        }
Beispiel #6
0
 public override void CustomizeTypesInfo(ITypesInfo typesInfo)
 {
     base.CustomizeTypesInfo(typesInfo);
     foreach (var memberInfo in GetDecoratedMembers(typesInfo))
     {
         var providedAssociationAttribute          = (ProvidedAssociationAttribute)memberInfo.FindAttributeInfo(typeof(ProvidedAssociationAttribute));
         AssociationAttribute associationAttribute = GetAssociationAttribute(memberInfo, providedAssociationAttribute);
         XPCustomMemberInfo   customMemberInfo     = CreateMemberInfo(typesInfo, memberInfo, providedAssociationAttribute, associationAttribute);
         AddExtraAttributes(memberInfo, providedAssociationAttribute, customMemberInfo);
     }
 }
Beispiel #7
0
 static void AddAttributes(IModelRuntimeMember runtimeMember, XPCustomMemberInfo memberInfo)
 {
     if (runtimeMember.Size != 0)
     {
         memberInfo.AddAttribute(new SizeAttribute(runtimeMember.Size));
     }
     if (runtimeMember is IModelRuntimeNonPersistentMember && !(runtimeMember is IModelRuntimeCalculatedMember))
     {
         memberInfo.AddAttribute(new NonPersistentAttribute());
     }
 }
 static void AddAttributes(IModelMemberEx modelMemberEx, XPCustomMemberInfo memberInfo)
 {
     if (modelMemberEx.Size != 0)
     {
         memberInfo.AddAttribute(new SizeAttribute(modelMemberEx.Size));
     }
     if (modelMemberEx is IModelMemberNonPersistent && !(modelMemberEx is IModelMemberCalculated))
     {
         memberInfo.AddAttribute(new NonPersistentAttribute());
     }
 }
Beispiel #9
0
        public void An_Associated_Member_Can_Be_Created_To_Any_Perstent_type()
        {
            ITypesInfo info           = XafTypesInfo.Instance;
            Type       typeToCreateOn = typeof(User);

            info.RegisterEntity(typeToCreateOn);
            Type typeOfMember = typeof(Analysis);

            XPCustomMemberInfo member = info.CreateMember(typeToCreateOn, typeOfMember, "association", XpoTypesInfoHelper.GetXpoTypeInfoSource().XPDictionary);

            assertMemberCreation(member, typeOfMember.Name, typeToCreateOn);
        }
 private void addAttributes(IMemberInfo memberInfo, AssociationAttribute associationAttribute, ProvidedAssociationAttribute providedAssociationAttribute, XPCustomMemberInfo customMemberInfo)
 {
     customMemberInfo.AddAttribute(getAssociationAttribute(customMemberInfo.IsCollection, memberInfo.Owner.Type,associationAttribute.Name));
     if (providedAssociationAttribute.AttributesFactoryProperty != null){
         var property = memberInfo.Owner.Type.GetProperty(providedAssociationAttribute.AttributesFactoryProperty, BindingFlags.Static|BindingFlags.Public);
         if (property== null)
             throw new NullReferenceException(string.Format("Static propeprty {0} not found at {1}", providedAssociationAttribute.GetPropertyInfo(x=>x.AttributesFactoryProperty).Name, memberInfo.Owner.Type.FullName));
         var values = (IEnumerable<Attribute>) property.GetValue(null, null);
         foreach (Attribute attribute in values){
             customMemberInfo.AddAttribute(attribute);
         }
     }
 }
        static IEnumerable <XPCustomMemberInfo> CreateCollectionMembers(IObjectSpace objectSpace)
        {
            IEnumerable <IExtendedMemberInfo> xpCollection = GetMembers(objectSpace, XafTypesInfo.Instance.FindBussinessObjectType <IExtendedCollectionMemberInfo>());
            var collection = xpCollection.Cast <IExtendedCollectionMemberInfo>();

            foreach (var info in collection)
            {
                XPCustomMemberInfo member = GetXPCustomMemberInfo(info);
                if (member != null)
                {
                    CreateAttributes(info, member);
                    yield return(member);
                }
            }
        }
Beispiel #12
0
        public void AN_Association_Collection_Can_Be_Created_To_Any_Persistent_Type()
        {
            ITypesInfo info           = XafTypesInfo.Instance;
            Type       typeToCreateOn = typeof(User);

            info.RegisterEntity(typeToCreateOn);
            Type typeOfCollection = typeof(Analysis);

            XPCustomMemberInfo collection = info.CreateCollection(typeToCreateOn, typeOfCollection, "association",
                                                                  XpoTypesInfoHelper.GetXpoTypeInfoSource().XPDictionary);

            AssociationAttribute attribute = assertMemberCreation(collection, typeOfCollection.Name + "s", typeToCreateOn);

            Assert.AreEqual(typeOfCollection.FullName, attribute.ElementTypeName);
        }
Beispiel #13
0
        public List <Type> CreateCollectionMembers(Session session)
        {
            IEnumerable <IExtendedMemberInfo> xpCollection = GetMembers(session, WCTypesInfo.Instance.FindBussinessObjectType <IExtendedCollectionMemberInfo>());
            var collection = xpCollection.Cast <IExtendedCollectionMemberInfo>();
            var types      = new List <Type>();

            foreach (var info in collection)
            {
                XPCustomMemberInfo member = GetXPCustomMemberInfo(info);
                if (member != null)
                {
                    CreateAttributes(info, member);
                    types.Add(info.Owner);
                }
            }
            return(types);
        }
Beispiel #14
0
 protected static bool ValidState(TModelMember modelMemberEx, XPCustomMemberInfo memberInfo, Func <TModelMember, bool> validState)
 {
     if (CheckTag(modelMemberEx))
     {
         return(false);
     }
     if (memberInfo == null && !String.IsNullOrEmpty(modelMemberEx.Name))
     {
         TagMember(modelMemberEx, true);
         if (modelMemberEx.Type != null && (validState.Invoke(modelMemberEx)))
         {
             TagMember(modelMemberEx, false);
             return(true);
         }
     }
     return(false);
 }
Beispiel #15
0
        public static XPCustomMemberInfo CreateMember(this ITypesInfo typesInfo, Type typeToCreateOn, Type typeOfMember, string associationName, XPDictionary dictionary, string propertyName, bool refreshTypesInfo)
        {
            XPCustomMemberInfo member = null;

            if (typeIsRegister(typesInfo, typeToCreateOn))
            {
                XPClassInfo xpClassInfo = dictionary.GetClassInfo(typeToCreateOn);
                if (xpClassInfo.FindMember(propertyName) == null)
                {
                    member = xpClassInfo.CreateMember(propertyName, typeOfMember);
                    member.AddAttribute(new AssociationAttribute(associationName));

                    if (refreshTypesInfo)
                    {
                        typesInfo.RefreshInfo(typeToCreateOn);
                    }
                }
            }
            return(member);
        }
Beispiel #16
0
 IModelMember GetPropertyNode(XPCustomMemberInfo memberInfo, IModelClass modelClass)
 {
     if (memberInfo is XpandCalcMemberInfo)
     {
         return(GetCalcNode(memberInfo, modelClass));
     }
     if (memberInfo is XpandCollectionMemberInfo)
     {
         return(GetCollectionNode(memberInfo, modelClass));
     }
     if (!(memberInfo.IsPersistent))
     {
         return(modelClass.OwnMembers.AddNode <IModelRuntimeNonPersistentMember>(memberInfo.Name));
     }
     if (memberInfo is XpandCustomMemberInfo)
     {
         return(modelClass.OwnMembers.AddNode <IModelRuntimeMember>(memberInfo.Name));
     }
     throw new NotImplementedException(memberInfo.ToString());
 }
 public DynamicDataTableClassInfo(XPDictionary dictionary, DataTable table)
     : base(dictionary)
 {
     if (table.PrimaryKey.Length != 1)
     {
         throw new NotSupportedException();
     }
     baseClassCore = dictionary.QueryClassInfo(typeof(XPDataTableObject));
     tableNameCore = table.TableName;
     foreach (DataColumn column in table.Columns)
     {
         XPCustomMemberInfo member = CreateMember(column.Caption, column.DataType);
         member.AddAttribute(new PersistentAttribute(column.ColumnName));
         member.AddAttribute(new DisplayNameAttribute(column.Caption));
         if (table.PrimaryKey[0] == column)
         {
             member.AddAttribute(new KeyAttribute(column.AutoIncrement));
         }
     }
     dictionary.AddClassInfo(this);
 }
Beispiel #18
0
        static XPCustomMemberInfo CreateCollection(this ITypesInfo typeInfo, Type typeToCreateOn, Type typeOfCollection, string associationName, XPDictionary dictionary, string collectionName, bool refreshTypesInfo,
                                                   bool isManyToMany)
        {
            XPCustomMemberInfo member = null;

            if (typeIsRegister(typeInfo, typeToCreateOn))
            {
                XPClassInfo xpClassInfo = dictionary.GetClassInfo(typeToCreateOn);
                if (xpClassInfo.FindMember(collectionName) == null)
                {
                    member = xpClassInfo.CreateMember(collectionName, typeof(XPCollection), true);
                    member.AddAttribute(new AssociationAttribute(associationName, typeOfCollection)
                    {
                        UseAssociationNameAsIntermediateTableName = isManyToMany
                    });

                    if (refreshTypesInfo)
                    {
                        typeInfo.RefreshInfo(typeToCreateOn);
                    }
                }
            }
            return(member);
        }
 void AddExtraAttributes(XPMemberInfo memberInfo, ProvidedAssociationAttribute providedAssociationAttribute, XPCustomMemberInfo customMemberInfo) {
     if (!(string.IsNullOrEmpty(providedAssociationAttribute.AttributesFactoryProperty)))
         foreach (var attribute in GetAttributes(providedAssociationAttribute.AttributesFactoryProperty, memberInfo.Owner)) {
             customMemberInfo.AddAttribute(attribute);
         }
 }
Beispiel #20
0
 public static void CreateColumn(this IObjectSpace objectSpace, XPCustomMemberInfo customMemberInfo, bool throwUnableToCreateDBObjectException = false)
 {
     CreateDbObject(objectSpace, store => store.CreateColumn(customMemberInfo, throwUnableToCreateDBObjectException));
 }
 public void CreateAttributes(IExtendedMemberInfo extendedMemberInfo, XPCustomMemberInfo memberInfo) {
     foreach (AttributeInfoAttribute attributeInfo in extendedMemberInfo.TypeAttributes.Select(typeAttribute => typeAttribute.Create())) {
         memberInfo.AddAttribute((Attribute)ReflectionHelper.CreateObject(attributeInfo.Constructor.DeclaringType, attributeInfo.InitializedArgumentValues));
     }
 }
 public void CreateAttributes(IExtendedMemberInfo extendedMemberInfo, XPCustomMemberInfo customMemberInfo) {
     foreach (AttributeInfo attributeInfo in extendedMemberInfo.TypeAttributes.Select(typeAttribute => typeAttribute.Create())) {
         customMemberInfo.AddAttribute((Attribute)Activator.CreateInstance(attributeInfo.Constructor.DeclaringType,attributeInfo.InitializedArgumentValues));
     }
 }
Beispiel #23
0
 void AddExtraAttributes(XPMemberInfo memberInfo, ProvidedAssociationAttribute providedAssociationAttribute, XPCustomMemberInfo customMemberInfo)
 {
     if (!(string.IsNullOrEmpty(providedAssociationAttribute.AttributesFactoryProperty)))
     {
         foreach (var attribute in GetAttributes(providedAssociationAttribute.AttributesFactoryProperty, memberInfo.Owner))
         {
             customMemberInfo.AddAttribute(attribute);
         }
     }
 }
 static void AddAttributes(IModelRuntimeMember runtimeMember, XPCustomMemberInfo memberInfo) {
     if (runtimeMember.Size != 0)
         memberInfo.AddAttribute(new SizeAttribute(runtimeMember.Size));
     if (runtimeMember is IModelRuntimeNonPersistentMember && !(runtimeMember is IModelRuntimeCalculatedMember))
         memberInfo.AddAttribute(new NonPersistentAttribute());
 }
Beispiel #25
0
        private static IList <string> GetDynamicClassInfoFromTable(DataTable table, string primaryKeyName, IList <string> displayColumnNames,
                                                                   CaseInsensitiveDictionary <string> filterColumnNamesAndValues, out XPClassInfo classInfo,
                                                                   out ReflectionDictionary reflectionDictionary)
        {
            reflectionDictionary = new ReflectionDictionary();
            classInfo            =
                new XPDataObjectClassInfo(reflectionDictionary.GetClassInfo(typeof(DynamicXpoObject)), table.TableName);
            DataColumn primaryKeyColumn = null;

            if (string.IsNullOrEmpty(primaryKeyName))
            {
                primaryKeyColumn = table.Columns[0];
            }
            else
            {
                foreach (DataColumn col in table.Columns)
                {
                    if (string.Equals(col.ColumnName, primaryKeyName, StringComparison.OrdinalIgnoreCase))
                    {
                        primaryKeyColumn = col;
                        break;
                    }
                }
                if (primaryKeyColumn == null)
                {
                    throw new ArgException("The primary key column named \"{0}\" could not be found in the view \"{1}\"",
                                           primaryKeyName, table.TableName);
                }
            }
            if (CollectionUtils.IsNullOrEmpty(displayColumnNames))
            {
                // Add all columns from the view, ignoring filterColumnNames as displayable, if found
                if (!CollectionUtils.IsNullOrEmpty(filterColumnNamesAndValues))
                {
                    displayColumnNames = new List <string>(table.Columns.Count);
                }
                else
                {
                    displayColumnNames = null;
                }
                bool foundAnyFilterColumns = false;
                foreach (DataColumn col in table.Columns)
                {
                    if (col == primaryKeyColumn)
                    {
                        XPCustomMemberInfo pkMemberInfo = classInfo.CreateMember(col.ColumnName, col.DataType, new KeyAttribute());
                    }
                    else
                    {
                        classInfo.CreateMember(col.ColumnName, col.DataType);
                    }
                    if (displayColumnNames != null)
                    {
                        if (filterColumnNamesAndValues.ContainsKey(col.ColumnName))
                        {
                            foundAnyFilterColumns = true;
                        }
                        else
                        {
                            displayColumnNames.Add(col.ColumnName);
                        }
                    }
                }
                return(foundAnyFilterColumns ? displayColumnNames : null);
            }
            else
            {
                bool          addedPrimaryKeyCol        = false;
                List <string> notFoundFilterColumnNames = null;

                if (!CollectionUtils.IsNullOrEmpty(filterColumnNamesAndValues))
                {
                    notFoundFilterColumnNames = new List <string>(filterColumnNamesAndValues.Keys);
                }

                foreach (string colName in displayColumnNames)
                {
                    DataColumn foundColumn = FindColumn(table, colName);
                    if (foundColumn == null)
                    {
                        throw new ArgException("The display column named \"{0}\" could not be found in the view \"{1}\"",
                                               colName, table.TableName);
                    }
                    if (foundColumn == primaryKeyColumn)
                    {
                        XPCustomMemberInfo pkMemberInfo = classInfo.CreateMember(foundColumn.ColumnName, foundColumn.DataType, new KeyAttribute());
                        addedPrimaryKeyCol = true;
                    }
                    else
                    {
                        classInfo.CreateMember(foundColumn.ColumnName, foundColumn.DataType);
                    }
                    RemoveNameFromList(notFoundFilterColumnNames, foundColumn.ColumnName);
                }
                if (!addedPrimaryKeyCol)
                {
                    classInfo.CreateMember(primaryKeyColumn.ColumnName, primaryKeyColumn.DataType, new KeyAttribute());
                    RemoveNameFromList(notFoundFilterColumnNames, primaryKeyColumn.ColumnName);
                }
                if (!CollectionUtils.IsNullOrEmpty(notFoundFilterColumnNames))
                {
                    for (int i = notFoundFilterColumnNames.Count - 1; i >= 0; --i)
                    {
                        string     colName     = notFoundFilterColumnNames[i];
                        DataColumn foundColumn = FindColumn(table, colName);
                        if (foundColumn != null)
                        {
                            classInfo.CreateMember(foundColumn.ColumnName, foundColumn.DataType);
                            notFoundFilterColumnNames.RemoveAt(i);
                        }
                    }
                }
                return(displayColumnNames);
            }
        }
Beispiel #26
0
 static void AddAttributes(IModelMemberEx modelMemberEx, XPCustomMemberInfo memberInfo) {
     if (modelMemberEx.Size != 0)
         memberInfo.AddAttribute(new SizeAttribute(modelMemberEx.Size));
     if (modelMemberEx is IModelMemberNonPersistent && !(modelMemberEx is IModelMemberCalculated))
         memberInfo.AddAttribute(new NonPersistentAttribute());
 }