package org.ovirt.engine.api.restapi.resource; import java.util.List; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.BaseResource; import org.ovirt.engine.api.model.ImageTransfer; import org.ovirt.engine.api.model.ImageTransferDirection; import org.ovirt.engine.api.model.ImageTransfers; import org.ovirt.engine.api.resource.ImageTransferResource; import org.ovirt.engine.api.resource.ImageTransfersResource; import org.ovirt.engine.api.restapi.utils.GuidUtils; import org.ovirt.engine.core.common.action.TransferDiskImageParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.storage.TransferType; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public class BackendImageTransfersResource extends AbstractBackendCollectionResource<ImageTransfer, org.ovirt.engine.core.common.businessentities.storage.ImageTransfer> implements ImageTransfersResource { protected BackendImageTransfersResource() { super(ImageTransfer.class, org.ovirt.engine.core.common.businessentities.storage.ImageTransfer.class); } @Override public Response add(ImageTransfer imageTransfer) { TransferDiskImageParameters params = new TransferDiskImageParameters(); if (imageTransfer.isSetDirection() && imageTransfer.getDirection() == ImageTransferDirection.DOWNLOAD) { // Upload is the default direction, so we set the transfer type only if download was explicitly specified. params.setTransferType(TransferType.Download); } params.setImageId(GuidUtils.asGuid(imageTransfer.getImage().getId())); return performCreate(VdcActionType.TransferDiskImage, params, new QueryIdResolver<Guid>(VdcQueryType.GetImageTransferById, IdQueryParameters.class)); } @Override public ImageTransfers list() { return mapCollection(getBackendCollection(VdcQueryType.GetAllImageTransfers, new VdcQueryParametersBase())); } @Override public ImageTransferResource getImageTransferResource(String id) { return inject(new BackendImageTransferResource(id)); } private ImageTransfers mapCollection(List<org.ovirt.engine.core.common.businessentities.storage.ImageTransfer> imageTransfers) { ImageTransfers mappedImageTransfers = new ImageTransfers(); for (org.ovirt.engine.core.common.businessentities.storage.ImageTransfer imageTransfer : imageTransfers) { mappedImageTransfers.getImageTransfers().add(addLinks(populate(map(imageTransfer), imageTransfer))); } return mappedImageTransfers; } @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; } }