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

Reply via email to