package org.ovirt.engine.core.bll; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.RemoveVmFromImportExportParamenters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.storage_domains; import org.ovirt.engine.core.common.queries.GetAllFromExportDomainQueryParamenters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.DbFacade; public class RemoveVmFromImportExportCommand<T extends RemoveVmFromImportExportParamenters> extends RemoveVmCommand<T> { public RemoveVmFromImportExportCommand(T parameters) { super(parameters); super.setVmId(parameters.getVmId()); parameters.setEntityId(parameters.getVmId()); setStorageDomainId(parameters.getStorageDomainId()); } @Override protected boolean canDoAction() { addCanDoActionMessage(VdcBllMessages.VAR__ACTION__REMOVE); addCanDoActionMessage(VdcBllMessages.VAR__TYPE__VM); storage_domains storage = DbFacade.getInstance().getStorageDomainDAO().getForStoragePool( getParameters().getStorageDomainId(), getParameters().getStoragePoolId()); if (storage == null) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_NOT_EXIST); return false; } if (storage.getstatus() == null || storage.getstatus() != StorageDomainStatus.Active) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_STATUS_ILLEGAL); return false; } if (storage.getstorage_domain_type() != StorageDomainType.ImportExport) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_TYPE_ILLEGAL); return false; } GetAllFromExportDomainQueryParamenters tempVar = new GetAllFromExportDomainQueryParamenters( getParameters().getStoragePoolId(), getParameters().getStorageDomainId()); tempVar.setGetAll(true); tempVar.setIds(new java.util.ArrayList<Guid>(java.util.Arrays.asList(new Guid[] { getVmId() }))); VdcQueryReturnValue qretVal = Backend.getInstance().runInternalQuery( VdcQueryType.GetVmsFromExportDomain, tempVar); if (!qretVal.getSucceeded() || qretVal.getReturnValue() == null) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND_ON_EXPORT_DOMAIN); return false; } java.util.ArrayList<VM> vms = (java.util.ArrayList<VM>) qretVal.getReturnValue(); if (vms.size() != 1) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND_ON_EXPORT_DOMAIN); return false; } setVm(vms.get(0)); VM vm = getVmDAO().getById(vms.get(0).getvm_guid()); if (vm != null && vm.getstatus() == VMStatus.ImageLocked) { if(AsyncTaskManager.getInstance().hasTasksForEntityIdAndAction(vm.getvm_guid(), VdcActionType.ExportVm)) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_DURING_EXPORT); return false; } } return true; } @Override protected void ExecuteVmCommand() { RemoveVmInSpm(getParameters().getStoragePoolId(), getVmId(), getParameters().getStorageDomainId()); java.util.ArrayList<DiskImage> images = new java.util.ArrayList<DiskImage>(getVm().getDiskMap().values()); for (DiskImage image : images) { image.setstorage_id(getParameters().getStorageDomainId()); image.setstorage_pool_id(getParameters().getStoragePoolId()); } RemoveVmImages(images); setSucceeded(true); } @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? AuditLogType.IMPORTEXPORT_REMOVE_VM : AuditLogType.IMPORTEXPORT_REMOVE_VM_FAILED; } @Override protected void EndVmCommand() { setCommandShouldBeLogged(false); setSucceeded(true); } }