package org.ovirt.engine.core.bll.storage;
import org.ovirt.engine.core.bll.Backend;
import org.ovirt.engine.core.bll.InternalCommandAttribute;
import org.ovirt.engine.core.common.action.StorageServerConnectionParametersBase;
import org.ovirt.engine.core.common.businessentities.StorageType;
import org.ovirt.engine.core.common.businessentities.storage_pool;
import org.ovirt.engine.core.common.businessentities.storage_server_connections;
import org.ovirt.engine.core.common.vdscommands.ConnectStorageServerVDSCommandParameters;
import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
import org.ovirt.engine.core.dal.VdcBllMessages;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
@InternalCommandAttribute
public class RemoveStorageServerConnectionCommand<T extends StorageServerConnectionParametersBase> extends
StorageServerConnectionCommandBase<T> {
public RemoveStorageServerConnectionCommand(T parameters) {
super(parameters);
}
@Override
protected void executeCommand() {
setSucceeded(Backend
.getInstance()
.getResourceManager()
.RunVdsCommand(
VDSCommandType.DisconnectStorageServer,
new ConnectStorageServerVDSCommandParameters(getParameters().getVdsId(), getParameters()
.getStoragePoolId(), getParameters().getStorageServerConnection().getstorage_type(),
new java.util.ArrayList<storage_server_connections>(java.util.Arrays
.asList(new storage_server_connections[] { getConnection() })))).getSucceeded());
}
@Override
protected boolean canDoAction() {
boolean returnValue = true;
if (getConnection().getstorage_type() == StorageType.LOCALFS) {
storage_pool storagePool = DbFacade.getInstance().getStoragePoolDAO().getForVds(getVds().getvds_id());
if (storagePool == null || storagePool.getstorage_pool_type() != StorageType.LOCALFS) {
returnValue = false;
getReturnValue().getCanDoActionMessages().add(
VdcBllMessages.VDS_CANNOT_REMOVE_LOCAL_STORAGE_ON_NON_LOCAL_HOST.toString());
}
}
return returnValue;
}
protected String getStorageConnection() {
return getConnection().getconnection();
}
}