package org.ovirt.engine.core.bll.storage.lease;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.CommandBase;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.utils.PermissionSubject;
import org.ovirt.engine.core.bll.validator.storage.StorageDomainValidator;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.action.VmLeaseParameters;
import org.ovirt.engine.core.common.asynctasks.AsyncTaskType;
import org.ovirt.engine.core.common.businessentities.StorageDomain;
import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
import org.ovirt.engine.core.common.vdscommands.VmLeaseVDSParameters;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.StorageDomainDao;
abstract class VmLeaseCommandBase<T extends VmLeaseParameters> extends CommandBase<T> {
@Inject
private StorageDomainDao storageDomainDao;
public VmLeaseCommandBase(T parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
}
public VmLeaseCommandBase(T parameters) {
this(parameters, null);
}
@Override
protected boolean validate() {
StorageDomain domain = storageDomainDao.getForStoragePool(getParameters().getStorageDomainId(),
getParameters().getStoragePoolId());
StorageDomainValidator validator = new StorageDomainValidator(domain);
return validate(validator.isDomainExistAndActive()) && validate(validator.isDataDomain());
}
@Override
protected void executeCommand() {
Guid taskId = persistAsyncTaskPlaceHolder(getParameters().getParentCommand());
VmLeaseVDSParameters params = new VmLeaseVDSParameters(getParameters().getStoragePoolId(),
getParameters().getStorageDomainId(), getParameters().getVmId());
VDSReturnValue returnValue = runVdsCommand(getLeaseAction(), params);
if (returnValue.getSucceeded()) {
getTaskIdList().add(
createTask(taskId,
returnValue.getCreationInfo(),
getActionType(),
VdcObjectType.Storage,
getParameters().getStorageDomainId()));
}
setSucceeded(returnValue.getSucceeded());
}
@Override
public List<PermissionSubject> getPermissionCheckSubjects() {
List<PermissionSubject> permissionCheckSubjects = new ArrayList<>();
permissionCheckSubjects.add(new PermissionSubject(getParameters().getStorageDomainId(),
VdcObjectType.Storage,
getActionType().getActionGroup()));
return permissionCheckSubjects;
}
protected abstract VDSCommandType getLeaseAction();
protected abstract AsyncTaskType getTaskType();
}