private ISPNode CreateCollectionNode(ISPNodeCollection parentNode, Type spObejctType) { ISPNode node = CreateNodeOrDefault(spObejctType.FullName); if (node == null) { node = FindDefaultNode(parentNode, spObejctType); } return(node); }
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); }
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); }
public MoreNode(ISPNodeCollection parentNode) { ParentNode = parentNode; SPObject = new object(); }
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; }
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; }
private ISPNode CreateCollectionNode(ISPNodeCollection parentNode, Type spObejctType) { ISPNode node = CreateNodeOrDefault(spObejctType.FullName); if (node == null) { node = FindDefaultNode(parentNode, spObejctType); } return node; }
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; }
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); }