package org.ovirt.engine.core.bll.storage; import java.util.Arrays; 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.storage_server_connections; import org.ovirt.engine.core.common.errors.VdcFault; import org.ovirt.engine.core.common.vdscommands.ConnectStorageServerVDSCommandParameters; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.utils.Pair; @InternalCommandAttribute public class ConnectStorageToVdsCommand<T extends StorageServerConnectionParametersBase> extends StorageServerConnectionCommandBase<T> { public ConnectStorageToVdsCommand(T parameters) { super(parameters); } @Override protected boolean canDoAction() { if (!StorageHelperDirector.getInstance() .getItem(getParameters().getStorageServerConnection().getstorage_type()) .ValidateStoragePoolConnectionsInHost(getVds(), Arrays.asList(getConnection()), getParameters().getStoragePoolId())) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION); return false; } return true; } @Override protected void executeCommand() { Pair<Boolean, Integer> result = Connect(getVds().getvds_id()); setSucceeded(result.getFirst()); if (!result.getFirst()) { setErrorMessageAtReturn(result); } } private void setErrorMessageAtReturn(Pair<Boolean, Integer> result) { VdcFault fault = new VdcFault(); fault.setError(result.getSecond()); if (fault.getError() != null) { fault.setMessage( Backend.getInstance() .getVdsErrorsTranslator() .TranslateErrorTextSingle(fault.getError().toString())); } getReturnValue().setFault(fault); } protected Pair<Boolean, Integer> Connect(Guid vdsId) { java.util.HashMap<String, String> result = (java.util.HashMap<String, String>) Backend .getInstance() .getResourceManager() .RunVdsCommand( VDSCommandType.ConnectStorageServer, new ConnectStorageServerVDSCommandParameters(vdsId, getParameters().getStoragePoolId(), getParameters().getStorageServerConnection().getstorage_type(), new java.util.ArrayList<storage_server_connections>(java.util.Arrays .asList(new storage_server_connections[] { getConnection() })))) .getReturnValue(); return new Pair<Boolean, Integer>(StorageHelperDirector.getInstance() .getItem(getParameters().getStorageServerConnection().getstorage_type()) .IsConnectSucceeded(result, Arrays.asList(getConnection())), Integer.parseInt(result.values().iterator().next())); } }