package org.ovirt.engine.api.restapi.resource; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.BaseResource; import org.ovirt.engine.api.model.ImageTransfer; import org.ovirt.engine.api.resource.ActionResource; import org.ovirt.engine.api.resource.ImageTransferResource; import org.ovirt.engine.core.common.action.TransferImageStatusParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.storage.ImageTransferPhase; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; public class BackendImageTransferResource extends AbstractBackendSubResource<ImageTransfer, org.ovirt.engine.core.common.businessentities.storage.ImageTransfer> implements ImageTransferResource { public BackendImageTransferResource(String id) { super(id, ImageTransfer.class, org.ovirt.engine.core.common.businessentities.storage.ImageTransfer.class); } @Override public ImageTransfer get() { return performGet(VdcQueryType.GetImageTransferById, new IdQueryParameters(guid)); } @Override protected ImageTransfer addLinks(ImageTransfer model, Class<? extends BaseResource> suggestedParent, String... subCollectionMembersToExclude) { super.addLinks(model, suggestedParent, subCollectionMembersToExclude); if (model.isSetImage()) { model.getImage().unsetLinks(); } return model; } @Override public Response extend(Action action) { // For just keeping the upload alive, all we need is to refresh the entity querying. return performAction(VdcActionType.TransferImageStatus, prepareStatusParams(null)); } @Override public Response pause(Action action) { return performAction(VdcActionType.TransferImageStatus, prepareStatusParams(ImageTransferPhase.PAUSED_USER)); } @Override public Response resume(Action action) { return performAction(VdcActionType.TransferImageStatus, prepareStatusParams(ImageTransferPhase.RESUMING)); } @Override public Response doFinalize(Action action) { return performAction(VdcActionType.TransferImageStatus, prepareStatusParams(ImageTransferPhase.FINALIZING_SUCCESS)); } private TransferImageStatusParameters prepareStatusParams(ImageTransferPhase phase) { org.ovirt.engine.core.common.businessentities.storage.ImageTransfer updates = new org.ovirt.engine.core.common.businessentities.storage.ImageTransfer(guid); updates.setPhase(phase); TransferImageStatusParameters params = new TransferImageStatusParameters(); params.setTransferImageCommandId(guid); params.setUpdates(updates); return params; } @Override public ActionResource getActionResource(String action, String oid) { return inject(new BackendActionResource(action, oid)); } }