예제 #1
0
        private ISPNode CreateCollectionNode(ISPNodeCollection parentNode, Type spObejctType)
        {
            ISPNode node = CreateNodeOrDefault(spObejctType.FullName);

            if (node == null)
            {
                node = FindDefaultNode(parentNode, spObejctType);
            }
            return(node);
        }
예제 #2
0
        public IEnumerable <ISPNode> LoadCollectionChildren(ISPNodeCollection parentNode, int batchCount)
        {
            var list = new List <ISPNode>();

            if (parentNode.SPObject == null)
            {
                return(list);
            }

            int count = 0;


            if (parentNode.Pointer == null)
            {
                parentNode.ClearChildren();
                parentNode.TotalCount = 0;
                var collection = (IEnumerable)parentNode.SPObject;
                parentNode.Pointer = collection.GetEnumerator();
                //parentNode.Pointer.Reset();
                parentNode.LoadingChildren = parentNode.Pointer.MoveNext();
            }

            while (count < batchCount && parentNode.LoadingChildren)
            {
                var current = parentNode.Pointer.Current;

                var node = CreateCollectionNode(parentNode, current.GetType());

                if (node != null)
                {
                    node.Initialize(new NullPropertyDescriptor(parentNode.Text), parentNode, parentNode.Pointer.Current, parentNode.TotalCount);
                    if (RunIncludeRules(node))
                    {
                        node.Setup(parentNode);
                        list.Add(node);
                    }
                }

                parentNode.LoadingChildren = parentNode.Pointer.MoveNext();

                count++;
                parentNode.TotalCount++;
            }

            if (parentNode.TotalCount <= batchCount)
            {
                // There are a low number of nodes, therefore sort nodes by Text.
                return(list.OrderBy(p => p.Text));
            }
            // Just add the elements without any sort, because of the high number of nodes.
            return(list);
        }
예제 #3
0
        private ISPNode FindDefaultNode(ISPNodeCollection parentNode, Type spObejctType)
        {
            ISPNode result = null;

            Type spType = null;

            var attr = spObejctType.GetAttribute <ClientCallableTypeAttribute>(true);

            if (attr != null)
            {
                spType = attr.CollectionChildItemType;
            }

            if (spType == null)
            {
                Type[] argTypes = spObejctType.GetBaseGenericArguments();
                if (argTypes != null && argTypes.Length == 1)
                {
                    spType = argTypes[0];
                }
            }

            if (spType != null)
            {
                result = CreateNodeOrDefault(spType.FullName);
            }

            if (result == null && spObejctType != typeof(object))
            {
                result = CreateCollectionNode(parentNode, spObejctType.BaseType);
            }



            return(result);
        }
예제 #4
0
파일: MoreNode.cs 프로젝트: keutmann/SPM
        public MoreNode(ISPNodeCollection parentNode)
        {
            ParentNode = parentNode;

            SPObject = new object();
        }
예제 #5
0
파일: MoreNode.cs 프로젝트: lucaslra/SPM
        public MoreNode(ISPNodeCollection parentNode)
        {
            ParentNode = parentNode;

            SPObject = new object();
        }
예제 #6
0
        public IEnumerable<ISPNode> LoadCollectionChildren(ISPNodeCollection parentNode, int batchCount)
        {
            var list = new List<ISPNode>();
            if (parentNode.SPObject == null) return list;

            int count = 0;

            if (parentNode.Pointer == null)
            {
                parentNode.ClearChildren();
                parentNode.TotalCount = 0;
                var collection = (IEnumerable)parentNode.SPObject;
                parentNode.Pointer = collection.GetEnumerator();
                //parentNode.Pointer.Reset();
                parentNode.LoadingChildren = parentNode.Pointer.MoveNext();
            }

            while (count < batchCount && parentNode.LoadingChildren)
            {

                var current = parentNode.Pointer.Current;

                var node = CreateCollectionNode(parentNode, current.GetType());

                if (node != null)
                {
                    node.Initialize(new NullPropertyDescriptor(parentNode.Text), parentNode, parentNode.Pointer.Current, parentNode.TotalCount);
                    if (RunIncludeRules(node))
                    {
                        node.Setup(parentNode);
                        list.Add(node);
                    }
                }

                parentNode.LoadingChildren = parentNode.Pointer.MoveNext();

                count++;
                parentNode.TotalCount++;

            }

            if (parentNode.TotalCount <= batchCount)
            {
                // There are a low number of nodes, therefore sort nodes by Text.
                return list.OrderBy(p => p.Text);
            }
            // Just add the elements without any sort, because of the high number of nodes.
            return list;
        }
예제 #7
0
        private ISPNode FindDefaultNode(ISPNodeCollection parentNode, Type spObejctType)
        {
            ISPNode result = null;

            Type spType = null;

            var attr = spObejctType.GetAttribute<ClientCallableTypeAttribute>(true);
            if (attr != null)
            {
                spType = attr.CollectionChildItemType;
            }

            if (spType == null)
            {
                Type[] argTypes = spObejctType.GetBaseGenericArguments();
                if (argTypes != null && argTypes.Length == 1)
                {
                    spType = argTypes[0];
                }
            }

            if (spType != null)
            {
                result = CreateNodeOrDefault(spType.FullName);
            }

            if(result == null && spObejctType != typeof(object))
            {
                result = CreateCollectionNode(parentNode, spObejctType.BaseType);
            }

            return result;
        }
예제 #8
0
 private ISPNode CreateCollectionNode(ISPNodeCollection parentNode, Type spObejctType)
 {
     ISPNode node = CreateNodeOrDefault(spObejctType.FullName);
     if (node == null)
     {
         node = FindDefaultNode(parentNode, spObejctType);
     }
     return node;
 }
예제 #9
0
        public IEnumerable<ISPNode> LoadCollectionChildren(ISPNodeCollection parentNode)
        {
            int batchCount = SPExplorerSettings.Current.BatchNodeLoad;

            var list = new List<ISPNode>();
            int count = 0;

            if (parentNode.Pointer == null)
            {
                parentNode.ClearChildren();
                parentNode.TotalCount = 0;
                var collection = (IEnumerable)parentNode.SPObject;
                parentNode.Pointer = collection.GetEnumerator();
                //_pointer.Reset();
                parentNode.MoveNext = parentNode.Pointer.MoveNext();
            }

            while (count <= batchCount && parentNode.MoveNext)
            {
                Type instanceType = parentNode.Pointer.Current.GetType();
                ISPNode node = null;

                if (parentNode.NodeTypes.ContainsKey(instanceType))
                {
                    node = parentNode.NodeTypes[instanceType];
                }
                else
                {
                    if (parentNode.DefaultNode != null)
                    {
                        node = parentNode.DefaultNode;
                    }
                }

                if (node != null)
                {
                    // Always create a new node, because the object has to be unique for each item in the treeview.
                    var instanceNode = (ISPNode) Activator.CreateInstance(node.GetType());
                    instanceNode.NodeProvider = parentNode.NodeProvider;
                    instanceNode.SPObject = parentNode.Pointer.Current;
                    instanceNode.Setup(parentNode.SPObject);
                    list.Add(instanceNode);
                }

                parentNode.MoveNext = parentNode.Pointer.MoveNext();
                count++;
                parentNode.TotalCount++;
            }
            // If there is more nodes in the collection, add a "More" item.
            if (count >= batchCount && parentNode.MoveNext)
            {
                var node = new MoreNode(parentNode);
                node.Setup(parentNode.SPObject);
                list.Add(node);
            }

            if (parentNode.TotalCount <= batchCount)
            {
                // There are a low number of nodes, therefore sort nodes by Text.
                return list.OrderBy(p => p.Text);
            }
            // Just add the elements without any sort, because of the high number of nodes.
            return list;
        }
예제 #10
0
        public IEnumerable <ISPNode> LoadCollectionChildren(ISPNodeCollection parentNode)
        {
            int batchCount = SPExplorerSettings.Current.BatchNodeLoad;

            var list  = new List <ISPNode>();
            int count = 0;

            if (parentNode.Pointer == null)
            {
                parentNode.ClearChildren();
                parentNode.TotalCount = 0;
                var collection = (IEnumerable)parentNode.SPObject;
                parentNode.Pointer = collection.GetEnumerator();
                //_pointer.Reset();
                parentNode.MoveNext = parentNode.Pointer.MoveNext();
            }

            while (count <= batchCount && parentNode.MoveNext)
            {
                Type    instanceType = parentNode.Pointer.Current.GetType();
                ISPNode node         = null;

                if (parentNode.NodeTypes.ContainsKey(instanceType))
                {
                    node = parentNode.NodeTypes[instanceType];
                }
                else
                {
                    if (parentNode.DefaultNode != null)
                    {
                        node = parentNode.DefaultNode;
                    }
                }

                if (node != null)
                {
                    // Always create a new node, because the object has to be unique for each item in the treeview.
                    var instanceNode = (ISPNode)Activator.CreateInstance(node.GetType());
                    instanceNode.NodeProvider = parentNode.NodeProvider;
                    instanceNode.SPObject     = parentNode.Pointer.Current;
                    instanceNode.Setup(parentNode.SPObject);
                    list.Add(instanceNode);
                }

                parentNode.MoveNext = parentNode.Pointer.MoveNext();
                count++;
                parentNode.TotalCount++;
            }
            // If there is more nodes in the collection, add a "More" item.
            if (count >= batchCount && parentNode.MoveNext)
            {
                var node = new MoreNode(parentNode);
                node.Setup(parentNode.SPObject);
                list.Add(node);
            }

            if (parentNode.TotalCount <= batchCount)
            {
                // There are a low number of nodes, therefore sort nodes by Text.
                return(list.OrderBy(p => p.Text));
            }
            // Just add the elements without any sort, because of the high number of nodes.
            return(list);
        }