package org.ovirt.engine.core.bll.storage.disk.image;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.InternalCommandAttribute;
import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.storage.StorageJobCommand;
import org.ovirt.engine.core.bll.storage.utils.VdsCommandsHelper;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.action.AllocateImageGroupVolumeCommandParameters;
import org.ovirt.engine.core.common.businessentities.storage.BaseDisk;
import org.ovirt.engine.core.common.vdscommands.AllocateVolumeVDSCommandParameters;
import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
import org.ovirt.engine.core.dao.BaseDiskDao;
@NonTransactiveCommandAttribute
@InternalCommandAttribute
public class AllocateImageGroupVolumeCommand<T extends AllocateImageGroupVolumeCommandParameters> extends
StorageJobCommand<T> {
@Inject
private BaseDiskDao baseDiskDao;
public AllocateImageGroupVolumeCommand(T parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
public AllocateImageGroupVolumeCommand(T parameters) {
this(parameters, null);
}
@Override
protected void executeCommand() {
VdsCommandsHelper.runVdsCommandWithFailover(VDSCommandType.AllocateVolume,
new AllocateVolumeVDSCommandParameters(getParameters().getStorageDomainId(),
getParameters().getJobId(),
getParameters().getImageGroupID(),
getParameters().getImageId(),
getParameters().getSize()), getParameters().getStoragePoolId(), this);
setSucceeded(true);
}
public AuditLogType getAuditLogTypeValue() {
if (!getSucceeded()) {
addCustomValue("DiskId", getParameters().getImageGroupID().toString());
addCustomValue("DiskAlias", getDisk().getDiskAlias());
return AuditLogType.DISK_PREALLOCATION_FAILED;
}
return super.getAuditLogTypeValue();
}
private BaseDisk getDisk() {
return baseDiskDao.get(getParameters().getImageGroupID());
}
}