package org.ovirt.engine.core.bll; import java.util.List; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.RemoveVmFromPoolParameters; import org.ovirt.engine.core.common.businessentities.image_vm_pool_map; import org.ovirt.engine.core.common.businessentities.vm_pool_map; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.DbFacade; public class RemoveVmFromPoolCommand<T extends RemoveVmFromPoolParameters> extends VmPoolCommandBase<T> { public RemoveVmFromPoolCommand(T parameters) { super(parameters); super.setVmId(parameters.getVmId()); vm_pool_map map = DbFacade.getInstance().getVmPoolDAO().getVmPoolMapByVmGuid(parameters.getVmId()); if (map != null) { setVmPoolId(map.getvm_pool_id()); } } public static boolean CanRemoveVmFromPool(Guid vmId, java.util.ArrayList<String> messages) { boolean returnValue = false; // Check if the vm is in a pool. if (DbFacade.getInstance().getVmPoolDAO().getVmPoolMapByVmGuid(vmId) == null) { // Check if the vm is in a time leased pool. if (DbFacade.getInstance().getVmPoolDAO().getTimeLeasedVmPoolMapByIdForVmPool(vmId, Guid.Empty) == null) { messages.add(VdcBllMessages.VM_POOL_CANNOT_DETACH_VM_NOT_ATTACHED_TO_POOL.toString()); returnValue = true; } } else { returnValue = RemoveVmCommand.IsVmRunning(vmId); if (returnValue) { messages.add(VdcBllMessages.VM_POOL_CANNOT_REMOVE_RUNNING_VM_FROM_POOL.toString()); } } return !returnValue; } @Override protected boolean canDoAction() { return CanRemoveVmFromPool(getParameters().getVmId(), getReturnValue().getCanDoActionMessages()); } @Override protected void executeCommand() { if (getVmPoolId() != null) { List<image_vm_pool_map> list = DbFacade.getInstance().getDiskImageDAO().getImageVmPoolMapByVmId(getVmId()); for (image_vm_pool_map imageMap : list) { DbFacade.getInstance().getDiskImageDAO().removeImageVmPoolMap(imageMap.getimage_guid()); } DbFacade.getInstance().getVmPoolDAO().removeVmFromVmPool(getVmId()); setSucceeded(true); } } @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? AuditLogType.USER_REMOVE_VM_FROM_POOL : AuditLogType.USER_REMOVE_VM_FROM_POOL_FAILED; } }