Eli Mesika has uploaded a new change for review. Change subject: core:enable to filter by search query and user ......................................................................
core:enable to filter by search query and user This patch adds support for user search queries that considers both the search expression as given by the user and the filtering that should apply in order to cope with user permissions. This is done by doing the regular filtering query (SP) followed by the search query (without filtering) , then the intersection of this two results is returned. Change-Id: Ic8beef0abbac999e49a726f1fecd9bcabec2a923 Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1163105 Signed-off-by: emesika <emes...@redhat.com> --- M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCollectionResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNetworksResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendExternalHostProvidersResource.java 10 files changed, 33 insertions(+), 14 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/74/35374/1 diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCollectionResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCollectionResource.java index 3349ffd..cdf9dbc 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCollectionResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCollectionResource.java @@ -10,6 +10,8 @@ import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; +import org.apache.commons.collections.CollectionUtils; + import org.ovirt.engine.api.common.util.QueryHelper; import org.ovirt.engine.api.common.util.StatusUtils; import org.ovirt.engine.api.model.ActionableResource; @@ -109,6 +111,19 @@ return getBackendCollection(entityType, query, queryParams); } + /** + * get the entities according to the filter and intersect them with those resulted from running the search query + * @param query + * @param queryParams + * @param searchType + * @return + */ + protected List<Q> getBackendCollection(VdcQueryType query, VdcQueryParametersBase queryParams, SearchType searchType) { + List<Q> filteredList = getBackendCollection(entityType, query, queryParams); + List<Q> searchList = getBackendCollection(searchType); + return (List<Q>)CollectionUtils.intersection(filteredList, searchList); + } + protected final <T> Response performCreate(VdcActionType task, VdcActionParametersBase taskParams, IResolver<T, Q> entityResolver, diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNetworksResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNetworksResource.java index d613f4f..672e6e6 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNetworksResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendNetworksResource.java @@ -47,7 +47,7 @@ Networks networks; if (isFiltered()) { - networks = mapCollection(getBackendCollection(queryType, getQueryParameters())); + networks = mapCollection(getBackendCollection(queryType, getQueryParameters(), SearchType.Network)); } else { networks = mapCollection(getBackendCollection(SearchType.Network)); } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java index 8081f42..bc5ef88 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java @@ -3,6 +3,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.MessageFormat; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Set; @@ -128,13 +129,16 @@ protected <T> List<T> getBackendCollection(Class<T> clz, VdcQueryType query, VdcQueryParametersBase queryParams) { try { + List<T> results = asCollection(clz, new ArrayList<T>()); VdcQueryReturnValue result = runQuery(query, queryParams); - if (!result.getSucceeded()) { - backendFailure(result.getExceptionString()); - } - List<T> results = asCollection(clz, result.getReturnValue()); - if (results!=null && getMaxResults()!=NO_LIMIT && getMaxResults()<results.size()) { - results = results.subList(0, getMaxResults()); + if (result!=null ) { + if (!result.getSucceeded()) { + backendFailure(result.getExceptionString()); + } + results = asCollection(clz, result.getReturnValue()); + if (getMaxResults() != NO_LIMIT && getMaxResults() < results.size()) { + results = results.subList(0, getMaxResults()); + } } return results; } catch (Exception e) { diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java index 53b6901..8c4d07d 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java @@ -67,7 +67,7 @@ public StorageDomains list() { if (isFiltered()) return mapCollection(getBackendCollection(VdcQueryType.GetAllStorageDomains, - new VdcQueryParametersBase())); + new VdcQueryParametersBase(), SearchType.StorageDomain)); else return mapCollection(getBackendCollection(SearchType.StorageDomain)); } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java index 5067070..a3daf03 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java @@ -53,7 +53,7 @@ public Templates list() { if (isFiltered()) return mapCollection(getBackendCollection(VdcQueryType.GetAllVmTemplates, - new VdcQueryParametersBase())); + new VdcQueryParametersBase(), SearchType.VmTemplate)); else return mapCollection(getBackendCollection(SearchType.VmTemplate)); } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java index 2bcc96d..31715fd 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java @@ -44,7 +44,7 @@ public VmPools list() { if (isFiltered()) { return mapCollection(getBackendCollection(VdcQueryType.GetAllVmPoolsAttachedToUser, - new VdcQueryParametersBase())); + new VdcQueryParametersBase(), SearchType.VmPools)); } else { return mapCollection(getBackendCollection(SearchType.VmPools)); } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java index 620385c..2c821de 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java @@ -82,7 +82,7 @@ @Override public VMs list() { if (isFiltered()) - return mapCollection(getBackendCollection(VdcQueryType.GetAllVms, new VdcQueryParametersBase()), true); + return mapCollection(getBackendCollection(VdcQueryType.GetAllVms, new VdcQueryParametersBase(), SearchType.VM), true); else return mapCollection(getBackendCollection(SearchType.VM), false); } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java index 3d36453..858744e 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendGroupsResource.java @@ -138,7 +138,7 @@ @Override public Groups list() { if (isFiltered()) { - return mapDbGroupCollection(getBackendCollection(VdcQueryType.GetAllDbGroups, new VdcQueryParametersBase())); + return mapDbGroupCollection(getBackendCollection(VdcQueryType.GetAllDbGroups, new VdcQueryParametersBase(), SearchType.DBGroup)); } else { return mapDbGroupCollection(getBackendCollection(SearchType.DBGroup, getSearchPattern())); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java index c3d738e..d5f9807 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendUsersResource.java @@ -159,7 +159,7 @@ public Users list() { if (isFiltered()) { - return mapDbUserCollection(getBackendCollection(VdcQueryType.GetAllDbUsers, new VdcQueryParametersBase())); + return mapDbUserCollection(getBackendCollection(VdcQueryType.GetAllDbUsers, new VdcQueryParametersBase(), SearchType.DBUser)); } else { return mapDbUserCollection(getBackendCollection(SearchType.DBUser, getSearchPattern())); diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendExternalHostProvidersResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendExternalHostProvidersResource.java index 94f3267..cb96456 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendExternalHostProvidersResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/externalhostproviders/BackendExternalHostProvidersResource.java @@ -72,7 +72,7 @@ if (isFiltered()) { return getBackendCollection( VdcQueryType.GetAllProviders, - new GetAllProvidersParameters(ProviderType.FOREMAN) + new GetAllProvidersParameters(ProviderType.FOREMAN), SearchType.Provider ); } else { -- To view, visit http://gerrit.ovirt.org/35374 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic8beef0abbac999e49a726f1fecd9bcabec2a923 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Eli Mesika <emes...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches