package org.ovirt.engine.core.bll; import java.util.List; import org.ovirt.engine.core.common.action.RestoreAllSnapshotsParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.action.VmOperationParameterBase; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.stateless_vm_image_map; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; @InternalCommandAttribute public class RestoreStatelessVmCommand<T extends VmOperationParameterBase> extends VmCommand<T> { /** * Constructor for command creation when compensation is applied on startup * * @param commandId */ protected RestoreStatelessVmCommand(Guid commandId) { super(commandId); } public RestoreStatelessVmCommand(T parameters) { super(parameters); setVmId(parameters.getVmId()); } @Override protected void executeCommand() { boolean returnVal = true; List<stateless_vm_image_map> statelessMap = DbFacade.getInstance().getDiskImageDAO().getAllStatelessVmImageMapsForVm( getVmId()); List<DiskImage> imagesList = new java.util.ArrayList<DiskImage>(statelessMap.size()); for (stateless_vm_image_map sMap : statelessMap) { imagesList.add(DbFacade.getInstance().getDiskImageDAO().getSnapshotById(sMap.getimage_guid())); /** * remove from db */ DbFacade.getInstance().getDiskImageDAO().removeStatelessVmImageMap(sMap.getimage_guid()); } if (imagesList.size() > 0) { /** * restore all snapshots */ RestoreAllSnapshotsParameters tempVar = new RestoreAllSnapshotsParameters(getVm().getvm_guid(), Guid.Empty); tempVar.setShouldBeLogged(false); tempVar.setImagesList(imagesList); VdcReturnValueBase vdcReturn = Backend.getInstance().runInternalAction(VdcActionType.RestoreAllSnapshots, tempVar); returnVal = vdcReturn.getSucceeded(); } setSucceeded(returnVal); } }