package org.ovirt.engine.core.bll; import org.ovirt.engine.core.common.action.CreateSnapshotFromTemplateParameters; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DiskImageTemplate; import org.ovirt.engine.core.common.businessentities.IImage; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; /** * This command responsible to creating new snapshot. Usually it will be called * during new vm creation. In the case of create snapshot from template new * image created from master image aka image template so new created image * it_guid will be equal to master image guid. * * Parameters: Guid imageId - id of ImageTemplate, snapshot will be created from * Guid containerId - id of VmTemplate, contains ImageTemplate */ // C# TO JAVA CONVERTER TODO TASK: Java annotations will not correspond to .NET // attributes: @InternalCommandAttribute public class CreateSnapshotFromTemplateCommand<T extends CreateSnapshotFromTemplateParameters> extends CreateSnapshotCommand<T> { private DiskImageTemplate mTemplate; /** * Image in this command is ImageTemplate */ @Override protected IImage getImage() { switch (getActionState()) { case EXECUTE: if (mTemplate == null) { VM vm = DbFacade.getInstance().getVmDAO().getById(getImageContainerId()); mTemplate = DbFacade.getInstance() .getDiskImageTemplateDAO() .getByVmTemplateAndId(vm.getvmt_guid(), getImageId()); } return mTemplate; // in case of EndAction, the base definition of Image is the // correct one: default: return super.getImage(); } } public CreateSnapshotFromTemplateCommand(T parameters) { super(parameters); super.setVmId(parameters.getVmId()); super.setImageContainerId(parameters.getVmId()); setImageGroupId(Guid.NewGuid()); } /** * Old image not have to be changed */ @Override protected void ProcessOldImageFromDb() { } @Override protected DiskImage CloneDiskImage(Guid newImageGuid) { DiskImage returnValue = super.CloneDiskImage(newImageGuid); returnValue.setit_guid(getImage().getId()); return returnValue; } @Override protected Guid getDestinationStorageDomainId() { Guid storageDomainId = ((CreateSnapshotFromTemplateParameters) getParameters()).getStorageDomainId(); storageDomainId = (storageDomainId == null) ? Guid.Empty : storageDomainId; return (!storageDomainId.equals(Guid.Empty)) ? storageDomainId : super.getDestinationStorageDomainId(); } @Override protected void executeCommand() { setDiskImage(DbFacade.getInstance().getDiskImageDAO().getSnapshotById(getImage().getId())); super.executeCommand(); } @Override protected void EndWithFailure() { if (getDestinationDiskImage() != null) { if (DbFacade.getInstance().getDiskImageDynamicDAO().get(getDestinationDiskImage().getId()) != null) { DbFacade.getInstance().getDiskImageDynamicDAO().remove(getDestinationDiskImage().getId()); } } super.EndWithFailure(); } }