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
