private static SelectionSpec[] GenerateSelectionSet(IEnumerable <SelectionSpec> selectionSet, IEnumerator <DynamicPropertyFilterSpecGenerator.ManagedObjectDefinition> moListIterator, int reverseCounter) { List <SelectionSpec> list = (selectionSet != null) ? new List <SelectionSpec>(selectionSet) : new List <SelectionSpec>(); if (reverseCounter != 1) { moListIterator.MoveNext(); TraversalSpec traversalSpec = null; using (List <SelectionSpec> .Enumerator enumerator = list.GetEnumerator()) { while (enumerator.MoveNext()) { TraversalSpec traversalSpec2 = (TraversalSpec)enumerator.Current; if (moListIterator.Current.ObjectType == traversalSpec2.Type && moListIterator.Current.PropertyPath == traversalSpec2.Path) { traversalSpec = traversalSpec2; break; } } } if (traversalSpec != null) { traversalSpec.SelectSet = DynamicPropertyFilterSpecGenerator.GenerateSelectionSet(traversalSpec.SelectSet, moListIterator, --reverseCounter); } else { traversalSpec = new TraversalSpec(); traversalSpec.Type = DynamicPropertyFilterSpecGenerator.FixTypeName(moListIterator.Current.ObjectType); traversalSpec.Path = moListIterator.Current.PropertyPath; traversalSpec.Skip = new bool?(false); traversalSpec.SelectSet = DynamicPropertyFilterSpecGenerator.GenerateSelectionSet(null, moListIterator, --reverseCounter); list.Add(traversalSpec); } return(list.ToArray()); } if (list.Count != 0) { return(list.ToArray()); } return(null); }
public static PropertyFilterSpec GetSearchFilterSpec(IVimClient client, ManagedObjectReference beginEntity, PropertySpec propSpec) { TraversalSpec traversalSpec = new TraversalSpec(); traversalSpec.Name = "resourcePoolTraversalSpec"; traversalSpec.Type = "ResourcePool"; traversalSpec.Path = "resourcePool"; traversalSpec.Skip = new bool?(false); SelectionSpec selectionSpec = new SelectionSpec(); selectionSpec.Name = "resourcePoolTraversalSpec"; traversalSpec.SelectSet = new SelectionSpec[2]; traversalSpec.SelectSet[0] = selectionSpec; selectionSpec = new SelectionSpec(); selectionSpec.Name = "resourcePoolVmTraversalSpec"; traversalSpec.SelectSet[1] = selectionSpec; TraversalSpec traversalSpec2 = new TraversalSpec(); traversalSpec2.Name = "resourcePoolVmTraversalSpec"; traversalSpec2.Type = "ResourcePool"; traversalSpec2.Path = "vm"; traversalSpec2.Skip = new bool?(false); TraversalSpec traversalSpec3 = new TraversalSpec(); traversalSpec3.Name = "computeResourceRpTraversalSpec"; traversalSpec3.Type = "ComputeResource"; traversalSpec3.Path = "resourcePool"; traversalSpec3.Skip = new bool?(false); selectionSpec = new SelectionSpec(); selectionSpec.Name = "resourcePoolTraversalSpec"; traversalSpec3.SelectSet = new SelectionSpec[2]; traversalSpec3.SelectSet[0] = selectionSpec; selectionSpec = new SelectionSpec(); selectionSpec.Name = "resourcePoolVmTraversalSpec"; traversalSpec3.SelectSet[1] = selectionSpec; TraversalSpec traversalSpec4 = new TraversalSpec(); traversalSpec4.Name = "computeResourceHostTraversalSpec"; traversalSpec4.Type = "ComputeResource"; traversalSpec4.Path = "host"; traversalSpec4.Skip = new bool?(false); TraversalSpec traversalSpec5 = new TraversalSpec(); traversalSpec5.Name = "datacenterVmTraversalSpec"; traversalSpec5.Type = "Datacenter"; traversalSpec5.Path = "vmFolder"; traversalSpec5.Skip = new bool?(false); selectionSpec = new SelectionSpec(); selectionSpec.Name = "folderTraversalSpec"; traversalSpec5.SelectSet = new SelectionSpec[1]; traversalSpec5.SelectSet[0] = selectionSpec; TraversalSpec traversalSpec6 = new TraversalSpec(); traversalSpec6.Name = "datacenterHostTraversalSpec"; traversalSpec6.Type = "Datacenter"; traversalSpec6.Path = "hostFolder"; traversalSpec6.Skip = new bool?(false); selectionSpec = new SelectionSpec(); selectionSpec.Name = "folderTraversalSpec"; traversalSpec6.SelectSet = new SelectionSpec[1]; traversalSpec6.SelectSet[0] = selectionSpec; TraversalSpec traversalSpec7 = new TraversalSpec(); traversalSpec7.Name = "hostVmTraversalSpec"; traversalSpec7.Type = "HostSystem"; traversalSpec7.Path = "vm"; traversalSpec7.Skip = new bool?(false); selectionSpec = new SelectionSpec(); selectionSpec.Name = "folderTraversalSpec"; traversalSpec7.SelectSet = new SelectionSpec[1]; traversalSpec7.SelectSet[0] = selectionSpec; TraversalSpec traversalSpec8 = new TraversalSpec(); traversalSpec8.Name = "datacenterDatastoreTraversalSpec"; traversalSpec8.Type = "Datacenter"; traversalSpec8.Path = "datastoreFolder"; traversalSpec8.Skip = new bool?(false); selectionSpec = new SelectionSpec(); selectionSpec.Name = "folderTraversalSpec"; traversalSpec8.SelectSet = new SelectionSpec[1]; traversalSpec8.SelectSet[0] = selectionSpec; TraversalSpec traversalSpec9 = new TraversalSpec(); traversalSpec9.Name = "datacenterNetworkTraversalSpec"; traversalSpec9.Type = "Datacenter"; traversalSpec9.Path = "networkFolder"; traversalSpec9.Skip = new bool?(false); selectionSpec = new SelectionSpec(); selectionSpec.Name = "folderTraversalSpec"; traversalSpec9.SelectSet = new SelectionSpec[1]; traversalSpec9.SelectSet[0] = selectionSpec; TraversalSpec traversalSpec10 = new TraversalSpec(); traversalSpec10.Name = "folderTraversalSpec"; traversalSpec10.Type = "Folder"; traversalSpec10.Path = "childEntity"; traversalSpec10.Skip = new bool?(false); traversalSpec10.SelectSet = new List <SelectionSpec>(new SelectionSpec[] { new SelectionSpec { Name = "folderTraversalSpec" }, new SelectionSpec { Name = "datacenterHostTraversalSpec" }, new SelectionSpec { Name = "datacenterVmTraversalSpec" }, new SelectionSpec { Name = "computeResourceRpTraversalSpec" }, new SelectionSpec { Name = "computeResourceHostTraversalSpec" }, new SelectionSpec { Name = "hostVmTraversalSpec" }, new SelectionSpec { Name = "resourcePoolVmTraversalSpec" } }) { new SelectionSpec { Name = "datacenterDatastoreTraversalSpec" }, new SelectionSpec { Name = "datacenterNetworkTraversalSpec" } }.ToArray(); ObjectSpec objectSpec = new ObjectSpec(); objectSpec.Obj = beginEntity; objectSpec.Skip = new bool?(false); objectSpec.SelectSet = new List <SelectionSpec>(new SelectionSpec[] { traversalSpec10, traversalSpec5, traversalSpec6, traversalSpec4, traversalSpec3, traversalSpec, traversalSpec7, traversalSpec2 }) { traversalSpec8, traversalSpec9 }.ToArray(); return(new PropertyFilterSpec { PropSet = new PropertySpec[] { propSpec }, ObjectSet = new ObjectSpec[] { objectSpec } }); }