package org.ovirt.engine.core.bll;
import java.util.List;
import org.ovirt.engine.core.common.action.RemoveAllVmImagesParameters;
import org.ovirt.engine.core.common.action.RemoveImageParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.action.VdcReturnValueBase;
import org.ovirt.engine.core.common.businessentities.DiskImage;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.LogCompat;
import org.ovirt.engine.core.compat.LogFactoryCompat;
import org.ovirt.engine.core.compat.TransactionScopeOption;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
/**
* This command removes all Vm images and all created snapshots both from Irs
* and Db.
*/
// C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET
// attributes:
@InternalCommandAttribute
public class RemoveAllVmImagesCommand<T extends RemoveAllVmImagesParameters> extends VmCommand<T> {
public RemoveAllVmImagesCommand(T parameters) {
super(parameters);
super.setVmId(parameters.getVmId());
}
@Override
protected void ExecuteVmCommand() {
java.util.ArrayList<Guid> mImagesToBeRemoved = new java.util.ArrayList<Guid>();
List<DiskImage> images = getParameters().Images;
if (images == null) {
images = DbFacade.getInstance().getDiskImageDAO().getAllForVm(getVmId());
}
for (DiskImage image : images) {
if (image.getactive() != null && image.getactive()) {
mImagesToBeRemoved.add(image.getId());
}
}
boolean noImagesRemovedYet = true;
for (DiskImage image : images) {
if (mImagesToBeRemoved.contains(image.getId())) {
RemoveImageParameters tempVar = new RemoveImageParameters(image.getId(), mImagesToBeRemoved,
getVmId());
tempVar.setParentCommand(getParameters().getParentCommand());
tempVar.setParentParemeters(getParameters().getParentParameters());
tempVar.setDiskImage(image);
tempVar.setEntityId(getParameters().getEntityId());
tempVar.setForceDelete(getParameters().getForceDelete());
tempVar.setTransactionScopeOption(TransactionScopeOption.RequiresNew);
tempVar.setParentParemeters(getParameters());
VdcReturnValueBase vdcReturnValue = Backend.getInstance().runInternalAction(VdcActionType.RemoveImage,
tempVar);
if (vdcReturnValue.getSucceeded()) {
getReturnValue().getInternalTaskIdList().addAll(vdcReturnValue.getInternalTaskIdList());
} else {
if (noImagesRemovedYet) {
setSucceeded(false);
getReturnValue().setFault(vdcReturnValue.getFault());
return;
}
log.errorFormat("Can't remove image id: {0} for VM id: {1} due to: {2}.",
image.getId(), getParameters().getVmId(),
vdcReturnValue.getFault().getMessage());
}
noImagesRemovedYet = false;
}
}
setSucceeded(true);
}
@Override
protected void EndVmCommand() {
setSucceeded(true);
}
private static LogCompat log = LogFactoryCompat.getLog(RemoveAllVmImagesCommand.class);
}