Arik Hadas has uploaded a new change for review.

Change subject: core: [cleanup] introduce GetAllFromExportDomainQuery class
......................................................................

core: [cleanup] introduce GetAllFromExportDomainQuery class

This patch changes hierarchy which is logically wrong and reduces the
amount of code duplication:

Before this patch GetTemplatesFromExportDomainQuery inherited
GetVmsFromExportDomainQuery which is wrong since there's no kind-of
relationship between those classes, and there was duplicated code
between those two classes.

GetAllFromExportDomainQuery is added as a parent for the above classes -
they both are kind-of query that returns all from export domain thus the
relations are logically ok, and the new class contains code which is
join for both classes.

This hierarchy will make it easier to add query for instance-types from
export domain later.

Change-Id: I2544cb879898ef90d64feb8a16dcfb8cf103b409
Signed-off-by: Arik Hadas <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetAllFromExportDomainQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetTemplatesFromExportDomainQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetVmsFromExportDomainQuery.java
3 files changed, 94 insertions(+), 75 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/93/14593/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetAllFromExportDomainQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetAllFromExportDomainQuery.java
new file mode 100644
index 0000000..fa8ae51
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetAllFromExportDomainQuery.java
@@ -0,0 +1,70 @@
+package org.ovirt.engine.core.bll.storage;
+
+import java.util.List;
+
+import org.ovirt.engine.core.bll.Backend;
+import org.ovirt.engine.core.bll.QueriesCommandBase;
+import org.ovirt.engine.core.common.AuditLogType;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
+import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
+import org.ovirt.engine.core.common.businessentities.StorageDomainType;
+import 
org.ovirt.engine.core.common.queries.GetAllFromExportDomainQueryParameters;
+import org.ovirt.engine.core.common.vdscommands.GetVmsInfoVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
+import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
+
+public abstract class GetAllFromExportDomainQuery <T, P extends 
GetAllFromExportDomainQueryParameters>
+        extends QueriesCommandBase<P> {
+
+    public GetAllFromExportDomainQuery(P parameters) {
+        super(parameters);
+    }
+
+    protected abstract T buildFromOVFs(List<String> ovfList);
+
+    protected abstract T emptyResult();
+
+    @Override
+    protected final void executeQueryCommand() {
+        StorageDomainStatic storage = getStorage();
+        T returnValue = getAllFromStorage(storage);
+        getQueryReturnValue().setReturnValue(returnValue);
+    }
+
+    private StorageDomainStatic getStorage() {
+        return DbFacade.getInstance().getStorageDomainStaticDao()
+                .get(getParameters().getStorageDomainId());
+    }
+
+    private T getAllFromStorage(StorageDomainStatic storage) {
+        return storage.getStorageDomainType() == 
StorageDomainType.ImportExport ?
+                buildFromOVFs((List<String>) 
executeVerb(storage).getReturnValue())
+                : emptyResult();
+    }
+
+    protected VDSReturnValue executeVerb(StorageDomainStatic storage) {
+        try {
+            GetVmsInfoVDSCommandParameters tempVar = new 
GetVmsInfoVDSCommandParameters(
+                    getParameters().getStoragePoolId());
+            tempVar.setStorageDomainId(getParameters().getStorageDomainId());
+            tempVar.setVmIdList(getParameters().getIds());
+            return Backend.getInstance().getResourceManager()
+                    .RunVdsCommand(VDSCommandType.GetVmsInfo, tempVar);
+        } catch (RuntimeException e) {
+            AuditLogableBase logable = new AuditLogableBase();
+            logable.addCustomValue("StorageDomainName", 
storage.getStorageName());
+            AuditLogDirector.log(logable, 
AuditLogType.IMPORTEXPORT_GET_VMS_INFO_FAILED);
+            throw e;
+        }
+    }
+
+    protected boolean isValidExportDomain() {
+        StorageDomain domain = 
DbFacade.getInstance().getStorageDomainDao().getForStoragePool(
+                getParameters().getStorageDomainId(),
+                getParameters().getStoragePoolId());
+        return domain != null && domain.getStorageDomainType() == 
StorageDomainType.ImportExport;
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetTemplatesFromExportDomainQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetTemplatesFromExportDomainQuery.java
index 14f80fa..0541965 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetTemplatesFromExportDomainQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetTemplatesFromExportDomainQuery.java
@@ -1,47 +1,33 @@
 package org.ovirt.engine.core.bll.storage;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
-import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
-import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.queries.DiskImageList;
 import 
org.ovirt.engine.core.common.queries.GetAllFromExportDomainQueryParameters;
-import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
 import org.ovirt.engine.core.utils.ovf.OvfManager;
 import org.ovirt.engine.core.utils.ovf.OvfReaderException;
 
 public class GetTemplatesFromExportDomainQuery<P extends 
GetAllFromExportDomainQueryParameters>
-        extends GetVmsFromExportDomainQuery<P> {
+        extends GetAllFromExportDomainQuery<Map<VmTemplate, DiskImageList>, P> 
{
+
     public GetTemplatesFromExportDomainQuery(P parameters) {
         super(parameters);
     }
 
     @Override
-    protected void executeQueryCommand() {
-        StorageDomainStatic storage = 
DbFacade.getInstance().getStorageDomainStaticDao().get(
-                getParameters().getStorageDomainId());
-        if (storage.getStorageDomainType() == StorageDomainType.ImportExport) {
-            VDSReturnValue retVal = executeVerb(storage);
-            buildOvfReturnValue(retVal.getReturnValue());
-        } else {
-            java.util.HashMap<VmTemplate, java.util.ArrayList<DiskImage>> 
templates =
-                    new java.util.HashMap<VmTemplate, 
java.util.ArrayList<DiskImage>>();
-            getQueryReturnValue().setReturnValue(templates);
-        }
-    }
-
-    @Override
-    protected void buildOvfReturnValue(Object obj) {
-        ArrayList<String> ovfList = (ArrayList<String>) obj;
+    protected Map<VmTemplate, DiskImageList> buildFromOVFs(List<String> 
ovfList) {
         OvfManager ovfManager = new OvfManager();
-        java.util.HashMap<VmTemplate, DiskImageList> templates = new 
java.util.HashMap<VmTemplate, DiskImageList>();
+        HashMap<VmTemplate, DiskImageList> templates = new HashMap<VmTemplate, 
DiskImageList>();
 
         if (isValidExportDomain()) {
             VmTemplate template = null;
@@ -72,6 +58,11 @@
             }
         }
 
-        getQueryReturnValue().setReturnValue(templates);
+        return templates;
+    }
+
+    @Override
+    protected Map<VmTemplate, DiskImageList> emptyResult() {
+        return Collections.emptyMap();
     }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetVmsFromExportDomainQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetVmsFromExportDomainQuery.java
index 91b48fe..ac2935d 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetVmsFromExportDomainQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/GetVmsFromExportDomainQuery.java
@@ -1,78 +1,31 @@
 package org.ovirt.engine.core.bll.storage;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
-import org.ovirt.engine.core.bll.Backend;
 import org.ovirt.engine.core.bll.ImportVmCommand;
-import org.ovirt.engine.core.bll.QueriesCommandBase;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
-import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.VM;
-import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
-import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import 
org.ovirt.engine.core.common.queries.GetAllFromExportDomainQueryParameters;
-import org.ovirt.engine.core.common.vdscommands.GetVmsInfoVDSCommandParameters;
-import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
-import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
 import org.ovirt.engine.core.utils.ovf.OvfManager;
 import org.ovirt.engine.core.utils.ovf.OvfReaderException;
 
 public class GetVmsFromExportDomainQuery<P extends 
GetAllFromExportDomainQueryParameters>
-        extends QueriesCommandBase<P> {
+        extends GetAllFromExportDomainQuery<List<VM>, P> {
+
     public GetVmsFromExportDomainQuery(P parameters) {
         super(parameters);
     }
 
     @Override
-    protected void executeQueryCommand() {
-        StorageDomainStatic storage = 
DbFacade.getInstance().getStorageDomainStaticDao().get(
-                getParameters().getStorageDomainId());
-        if (storage.getStorageDomainType() == StorageDomainType.ImportExport) {
-            VDSReturnValue retVal = null;
-            retVal = executeVerb(storage);
-            buildOvfReturnValue(retVal.getReturnValue());
-        } else {
-            getQueryReturnValue().setReturnValue(new 
java.util.ArrayList<VM>());
-        }
-    }
-
-    protected VDSReturnValue executeVerb(StorageDomainStatic storage) {
-        try {
-            GetVmsInfoVDSCommandParameters tempVar = new 
GetVmsInfoVDSCommandParameters(
-                    getParameters().getStoragePoolId());
-            tempVar.setStorageDomainId(getParameters().getStorageDomainId());
-            tempVar.setVmIdList(getParameters().getIds());
-            VDSReturnValue retVal = Backend.getInstance().getResourceManager()
-                    .RunVdsCommand(VDSCommandType.GetVmsInfo, tempVar);
-            return retVal;
-        } catch (RuntimeException e) {
-            AuditLogableBase logable = new AuditLogableBase();
-            logable.addCustomValue("StorageDomainName", 
storage.getStorageName());
-            AuditLogDirector.log(logable, 
AuditLogType.IMPORTEXPORT_GET_VMS_INFO_FAILED);
-            throw e;
-        }
-    }
-
-    protected boolean isValidExportDomain() {
-        StorageDomain domain = 
DbFacade.getInstance().getStorageDomainDao().getForStoragePool(
-                getParameters().getStorageDomainId(),
-                getParameters().getStoragePoolId());
-        if (domain != null && domain.getStorageDomainType() == 
StorageDomainType.ImportExport) {
-            return true;
-        }
-        return false;
-    }
-
-    protected void buildOvfReturnValue(Object obj) {
-        ArrayList<String> ovfList = (ArrayList<String>) obj;
+    protected List<VM> buildFromOVFs(List<String> ovfList) {
         OvfManager ovfManager = new OvfManager();
         ArrayList<VM> vms = new ArrayList<VM>();
 
@@ -112,6 +65,11 @@
             }
         }
 
-        getQueryReturnValue().setReturnValue(vms);
+        return vms;
+    }
+
+    @Override
+    protected List<VM> emptyResult() {
+        return Collections.emptyList();
     }
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2544cb879898ef90d64feb8a16dcfb8cf103b409
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Arik Hadas <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to