package org.ovirt.engine.api.restapi.resource; import javax.ws.rs.core.Response; import org.ovirt.engine.api.model.Host; import org.ovirt.engine.api.model.StorageConnection; import org.ovirt.engine.api.resource.StorageServerConnectionResource; import org.ovirt.engine.api.restapi.util.ParametersHelper; import org.ovirt.engine.core.common.action.StorageServerConnectionParametersBase; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.StorageServerConnections; import org.ovirt.engine.core.common.businessentities.VdsStatic; import org.ovirt.engine.core.common.queries.NameQueryParameters; import org.ovirt.engine.core.common.queries.StorageServerConnectionQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; public class BackendStorageServerConnectionResource extends AbstractBackendSubResource<StorageConnection, org.ovirt.engine.core.common.businessentities.StorageServerConnections> implements StorageServerConnectionResource { private BackendStorageServerConnectionsResource parent; public static final String HOST = "host"; public BackendStorageServerConnectionResource(String id, BackendStorageServerConnectionsResource parent) { super(id, StorageConnection.class, StorageServerConnections.class); this.parent = parent; } @Override public StorageConnection get() { return performGet(VdcQueryType.GetStorageServerConnectionById, new StorageServerConnectionQueryParametersBase(guid.toString())); } @Override public StorageConnection update(StorageConnection connection) { return performUpdate(connection, new QueryIdResolver<>(VdcQueryType.GetStorageServerConnectionById, StorageServerConnectionQueryParametersBase.class), VdcActionType.UpdateStorageServerConnection, new UpdateParametersProvider()); } @Override public Response remove() { get(); StorageServerConnections connection = new StorageServerConnections(); connection.setId(id); String host = ParametersHelper.getParameter(httpHeaders, uriInfo, HOST); Guid hostId = Guid.Empty; if (host != null) { hostId = getHostId(host); } StorageServerConnectionParametersBase parameters = new StorageServerConnectionParametersBase(connection, hostId, false); return performAction(VdcActionType.RemoveStorageServerConnection, parameters); } private Guid getHostId(String host) { try { return Guid.createGuidFromString(host); } catch (IllegalArgumentException exception) { VdsStatic entity = getEntity( VdsStatic.class, VdcQueryType.GetVdsStaticByName, new NameQueryParameters(host), host ); if (entity != null) { return entity.getId(); } return Guid.Empty; } } public BackendStorageServerConnectionsResource getParent() { return parent; } protected class UpdateParametersProvider implements ParametersProvider<StorageConnection, StorageServerConnections> { @Override public VdcActionParametersBase getParameters(StorageConnection incoming, StorageServerConnections entity) { StorageServerConnections connection = map(incoming, entity); Guid hostId = Guid.Empty; if (incoming.getHost() != null) { hostId = getHostId(incoming.getHost()); } return new StorageServerConnectionParametersBase(connection, hostId, isForce()); } private Guid getHostId(Host host) { // presence of host ID or name already validated return host.isSetId() ? new Guid(host.getId()) : host.isSetName() ? getEntity(VdsStatic.class, VdcQueryType.GetVdsStaticByName, new NameQueryParameters(host.getName()), "Hosts: name=" + host.getName()).getId() : null; } } }