Allon Mureinik has uploaded a new change for review.

Change subject: engine: Remove instanceof from GetDomainListQuery
......................................................................

engine: Remove instanceof from GetDomainListQuery

Runtime type checking is no way of passing parameters - if the internal
domain should not be filtered, we can just pass false.

This patch changes GetDomainListQuery to exclusively use the
GetDomainListParameters class instead of allowing
VdcQueryParameterBase to infer not filtering the internal domain.

In addition, this patch introduces a test for GetDomainListQuery to
ensure that no functionality was compromised.

Advantages of this approach:
1. Explicit is better than implicit - the code is more readable, and
   its more obvious what the caller is doing.
2. Better performance - runtime type checking is expensive, where as
   function calls are cheap.

Change-Id: I2e59b5053792e6a68030b8dcef604d9e5acdce80
Signed-off-by: Allon Mureinik <amure...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDomainListQuery.java
A 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDomainListQueryTest.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceBase.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java
5 files changed, 63 insertions(+), 14 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/69/18869/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDomainListQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDomainListQuery.java
index c70ed23..aaf1de8 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDomainListQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetDomainListQuery.java
@@ -5,21 +5,15 @@
 
 import org.ovirt.engine.core.bll.adbroker.LdapBrokerUtils;
 import org.ovirt.engine.core.common.queries.GetDomainListParameters;
-import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 
-public class GetDomainListQuery<P extends VdcQueryParametersBase> extends 
QueriesCommandBase<P> {
+public class GetDomainListQuery<P extends GetDomainListParameters> extends 
QueriesCommandBase<P> {
     public GetDomainListQuery(P parameters) {
         super(parameters);
     }
 
     @Override
     protected void executeQueryCommand() {
-        boolean filterInternalDomain = false;
-        // get concrete parameters object
-        if (getParameters() instanceof GetDomainListParameters) {
-            filterInternalDomain = 
((GetDomainListParameters)getParameters()).getFilterInternalDomain();
-        }
-        List<String> domains = 
LdapBrokerUtils.getDomainsList(filterInternalDomain);
+        List<String> domains = 
LdapBrokerUtils.getDomainsList(getParameters().getFilterInternalDomain());
         Collections.sort(domains);
         getQueryReturnValue().setReturnValue(domains);
     }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDomainListQueryTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDomainListQueryTest.java
new file mode 100644
index 0000000..05ac392
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetDomainListQueryTest.java
@@ -0,0 +1,55 @@
+package org.ovirt.engine.core.bll;
+
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.doReturn;
+import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.common.queries.GetDomainListParameters;
+import org.ovirt.engine.core.utils.MockConfigRule;
+
+/**
+ * A test case for the {@link GetDomainListQuery} class.
+ */
+public class GetDomainListQueryTest extends 
AbstractQueryTest<GetDomainListParameters, 
GetDomainListQuery<GetDomainListParameters>> {
+
+    @ClassRule
+    public static final MockConfigRule mcr = new MockConfigRule(
+            mockConfig(ConfigValues.AdminDomain, "internal"),
+            mockConfig(ConfigValues.DomainName, "zzz,aaa")
+            );
+
+    @Test
+    public void testImplicitNoFilter() {
+        getQuery().executeQueryCommand();
+        assertTrue("Wrong filtered domains", CollectionUtils.isEqualCollection(
+                (Collection<String>) 
getQuery().getQueryReturnValue().getReturnValue(),
+                Arrays.asList("aaa", "internal", "zzz")));
+    }
+
+    @Test
+    public void testFilter() {
+        doReturn(true).when(getQueryParameters()).getFilterInternalDomain();
+        getQuery().executeQueryCommand();
+        assertTrue("Wrong filtered domains", CollectionUtils.isEqualCollection(
+                (Collection<String>) 
getQuery().getQueryReturnValue().getReturnValue(),
+                Arrays.asList("aaa", "zzz")));
+    }
+
+    @Test
+    public void testExplicitNoFilter() {
+        doReturn(false).when(getQueryParameters()).getFilterInternalDomain();
+        getQuery().executeQueryCommand();
+        assertTrue("Wrong filtered domains", CollectionUtils.isEqualCollection(
+                (Collection<String>) 
getQuery().getQueryReturnValue().getReturnValue(),
+                Arrays.asList("aaa", "internal", "zzz")));
+    }
+}
+
+
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainsResource.java
index e549310..9f74bbe 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDomainsResource.java
@@ -12,7 +12,7 @@
 import org.ovirt.engine.api.resource.DomainResource;
 import org.ovirt.engine.api.resource.DomainsResource;
 import org.ovirt.engine.api.restapi.model.Directory;
-import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.GetDomainListParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.Guid;
 
@@ -62,7 +62,7 @@
         return getBackendCollection(
                 String.class,
                 VdcQueryType.GetDomainList,
-                new VdcQueryParametersBase());
+                new GetDomainListParameters());
     }
 
     public Domain lookupDirectoryById(String id, boolean addlinks) {
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceBase.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceBase.java
index a202294..3f6500c 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceBase.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceBase.java
@@ -19,8 +19,8 @@
 import org.ovirt.engine.core.common.businessentities.DbUser;
 import org.ovirt.engine.core.common.businessentities.LdapUser;
 import org.ovirt.engine.core.common.interfaces.SearchType;
+import org.ovirt.engine.core.common.queries.GetDomainListParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
-import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.common.users.VdcUser;
 import org.ovirt.engine.core.compat.Guid;
@@ -85,7 +85,7 @@
             List<String> domains = getBackendCollection(
                String.class,
                VdcQueryType.GetDomainList,
-               new VdcQueryParametersBase());
+               new GetDomainListParameters());
             for (String domain :domains) {
                 Guid domainId = new Guid(domain.getBytes(), true);
                 if (domainId.toString().equals(user.getDomain().getId())) {
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java
index 0ca4317..25d5172 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendUsersResourceTest.java
@@ -23,9 +23,9 @@
 import org.ovirt.engine.core.common.businessentities.DbUser;
 import org.ovirt.engine.core.common.businessentities.LdapUser;
 import org.ovirt.engine.core.common.interfaces.SearchType;
+import org.ovirt.engine.core.common.queries.GetDomainListParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.SearchParameters;
-import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.Guid;
@@ -134,7 +134,7 @@
     @Test
     public void testAddUser_4() throws Exception {
         setUpEntityQueryExpectations(VdcQueryType.GetDomainList,
-                VdcQueryParametersBase.class,
+                GetDomainListParameters.class,
                 new String[] { },
                 new Object[] { },
                 setUpDomains());


-- 
To view, visit http://gerrit.ovirt.org/18869
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2e59b5053792e6a68030b8dcef604d9e5acdce80
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Allon Mureinik <amure...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to