/// <param name="includeFolders"> /// Normally exclude folders even if in search: CA-27260 /// </param> private static Search OrgViewSearch(Search search, bool includeFolders, QueryFilter addFilter, Grouping grouping) { QueryFilter filter; ObjectTypes types; if (search == null || search.Query == null || search.Query.QueryScope == null) { types = includeFolders ? ObjectTypes.AllIncFolders : ObjectTypes.AllExcFolders; } else { types = includeFolders ? search.Query.QueryScope.ObjectTypes : (search.Query.QueryScope.ObjectTypes & ~ObjectTypes.Folder); } QueryScope scope = new QueryScope(types); if (search == null || search.Query == null || search.Query.QueryFilter == null) { filter = addFilter; } else if (addFilter == null) { filter = search.Query.QueryFilter; } else { filter = new GroupQuery(new QueryFilter[] { search.Query.QueryFilter, addFilter }, GroupQuery.GroupQueryType.And); } return(new Search(new Query(scope, filter), grouping, false, "", null, null, new Sort[] { })); }
public Query(QueryScope scope, QueryFilter filter) { if (scope == null) { this.scope = new QueryScope(ObjectTypes.AllExcFolders); } else { this.scope = scope; } this.filter = filter; // null is OK }
public static Search SearchForFolder(string path) { QueryScope scope = new QueryScope(ObjectTypes.AllIncFolders); QueryFilter innerFilter = new StringPropertyQuery(PropertyNames.uuid, path, StringPropertyQuery.PropertyQueryType.exactmatch, true); QueryFilter filter = new RecursiveXMOPropertyQuery <Folder>(PropertyNames.folder, innerFilter); Query q = new Query(scope, filter); Grouping grouping = new FolderGrouping((Grouping)null); string[] pathParts = Folders.PointToPath(path); string name = ((pathParts.Length == 0 || (pathParts.Length == 1 && pathParts[pathParts.Length - 1] == String.Empty)) ? Messages.FOLDERS : pathParts[pathParts.Length - 1]); return(new Search(q, grouping, false, name, null, false)); }
public Query(XmlNode node) { foreach (XmlNode child in node.ChildNodes) { if (child.NodeType != XmlNodeType.Element) { continue; } else if (child.Name == "QueryScope") { this.scope = new QueryScope(child); } else { this.filter = (QueryFilter)SearchMarshalling.FromXmlNode(child); } } }
/// <summary> /// This gets the default search for the overview panel when an object in the tree is selected. /// Pass null as value and you'll get the default search (this could be the default overview or default treeview search, /// depending on the value of scope). /// </summary> /// <param name="value"></param> /// <returns></returns> public static Search SearchFor(IXenObject value, QueryScope scope) { if (value is Host) { Grouping hostGrouping = new XenModelObjectPropertyGrouping <Host>(PropertyNames.host, null); QueryFilter uuidQuery = new StringPropertyQuery(PropertyNames.uuid, Helpers.GetUuid(value), StringPropertyQuery.PropertyQueryType.exactmatch, true); QueryFilter hostQuery = new RecursiveXMOListPropertyQuery <Host>(PropertyNames.host, uuidQuery); Query query = new Query(scope, hostQuery); return(new Search(query, hostGrouping, false, String.Format(Messages.SEARCH_TITLE_HOST, Helpers.GetName(value)), null, false)); } else if (value is Pool) { Grouping hostGrouping = new XenModelObjectPropertyGrouping <Host>(PropertyNames.host, null); Grouping poolGrouping = new XenModelObjectPropertyGrouping <Pool>(PropertyNames.pool, hostGrouping); QueryFilter uuidQuery = new StringPropertyQuery(PropertyNames.uuid, Helpers.GetUuid(value), StringPropertyQuery.PropertyQueryType.exactmatch, true); QueryFilter poolQuery = new RecursiveXMOPropertyQuery <Pool>(PropertyNames.pool, uuidQuery); Query query = new Query(scope, poolQuery); return(new Search(query, poolGrouping, false, String.Format(Messages.SEARCH_TITLE_POOL, Helpers.GetName(value)), null, false)); } else if (value is Folder) { Folder folder = value as Folder; return(Search.SearchForFolder(folder.opaque_ref)); } else { // This is the default search on the treeview //Grouping storageLinkPoolGrouping = new XenModelObjectPropertyGrouping<StorageLinkPool>(PropertyNames.storageLinkPool, (Grouping)null); //Grouping storageLinkSystemGrouping = new XenModelObjectPropertyGrouping<StorageLinkSystem>(PropertyNames.storageLinkSystem, storageLinkPoolGrouping); //Grouping storageLinkServerGrouping = new XenModelObjectPropertyGrouping<StorageLinkServer>(PropertyNames.storageLinkServer, storageLinkSystemGrouping); Grouping dockervmGrouping = new XenModelObjectPropertyGrouping <VM>(PropertyNames.dockervm, null); Grouping hostGrouping = new XenModelObjectPropertyGrouping <Host>(PropertyNames.host, dockervmGrouping); Grouping poolGrouping = new XenModelObjectPropertyGrouping <Pool>(PropertyNames.pool, hostGrouping); return(new Search(new Query(scope, null), poolGrouping, false, String.Format(Messages.SEARCH_TITLE_OVERVIEW), null, false)); } }
// Make a new search which is the same as the current search but with an additional filter public Search AddFilter(QueryFilter addFilter) { QueryScope scope = (Query == null ? null : Query.QueryScope); QueryFilter filter; if (Query == null || Query.QueryFilter == null) { filter = addFilter; } else if (addFilter == null) { filter = Query.QueryFilter; } else { filter = new GroupQuery(new QueryFilter[] { Query.QueryFilter, addFilter }, GroupQuery.GroupQueryType.And); } return(new Search(new Query(scope, filter), Grouping, ShowSearch, "", "", Columns, Sorting)); }
internal static QueryScope GetOverviewScopeExcludingGivenTypes(ObjectTypes excludedTypes) { QueryScope overviewScope = GetOverviewScope(); return(new QueryScope(overviewScope.ObjectTypes & ~excludedTypes)); }