package org.ovirt.engine.core.bll.storage.ovfstore;
import org.ovirt.engine.core.bll.InternalCommandAttribute;
import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
import org.ovirt.engine.core.bll.UploadStreamParameters;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.storage.disk.image.ImageSpmCommand;
import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
import org.ovirt.engine.core.common.businessentities.storage.VolumeType;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.common.vdscommands.UploadStreamVDSCommandParameters;
import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
@NonTransactiveCommandAttribute
@InternalCommandAttribute
public class UploadStreamCommand<T extends UploadStreamParameters> extends ImageSpmCommand<T> {
public UploadStreamCommand(T parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
@Override
protected VDSReturnValue executeVdsCommand() {
UploadStreamVDSCommandParameters vdsCommandParameters =
new UploadStreamVDSCommandParameters(
getVdsId(),
getParameters().getStoragePoolId(),
getParameters().getStorageDomainId(),
getParameters().getImageGroupID(),
getParameters().getImageId(),
getParameters().getStreamLength(),
getParameters().getInputStream());
return runVdsCommand(VDSCommandType.UploadStream, vdsCommandParameters);
}
@Override
protected boolean commandSpecificValidate() {
DiskImage targetDisk = getDiskImage();
//Currently we'd like to support only preallocated disks to avoid possible extend on vdsm side.
if (targetDisk.getVolumeType() != VolumeType.Preallocated) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_DISK_VOLUME_TYPE_UNSUPPORTED,
String.format("$volumeType %1$s", targetDisk.getVolumeType().toString()),
String.format("$supportedVolumeTypes %1$s", VolumeType.Preallocated));
}
return true;
}
@Override
protected AsyncTaskType getTaskType() {
return AsyncTaskType.downloadImageFromStream;
}
}