package org.ovirt.engine.api.restapi.resource;
import java.util.List;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.StorageConnection;
import org.ovirt.engine.api.model.StorageConnections;
import org.ovirt.engine.api.resource.StorageServerConnectionResource;
import org.ovirt.engine.api.resource.StorageServerConnectionsResource;
import org.ovirt.engine.core.common.action.StorageServerConnectionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
import org.ovirt.engine.core.common.queries.StorageServerConnectionQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public class BackendStorageServerConnectionsResource
extends AbstractBackendCollectionResource<StorageConnection, StorageServerConnections>
implements StorageServerConnectionsResource {
private final EntityIdResolver<String> ENTITY_RETRIEVER =
new QueryIdResolver<>(VdcQueryType.GetStorageServerConnectionById,
StorageServerConnectionQueryParametersBase.class);
public BackendStorageServerConnectionsResource() {
super(StorageConnection.class, org.ovirt.engine.core.common.businessentities.StorageServerConnections.class);
}
@Override
public StorageConnections list() {
return mapCollection(getBackendCollection(VdcQueryType.GetAllStorageServerConnections,
new VdcQueryParametersBase()));
}
private StorageConnections mapCollection(List<StorageServerConnections> entities) {
StorageConnections collection = new StorageConnections();
for (org.ovirt.engine.core.common.businessentities.StorageServerConnections entity : entities) {
StorageConnection connection = map(entity);
if (connection != null) {
collection.getStorageConnections().add(addLinks(populate(connection, entity)));
}
}
return collection;
}
@Override
public Response add(StorageConnection storageConn) {
validateParameters(storageConn, "type");
// map to backend object
StorageServerConnections storageConnection =
getMapper(StorageConnection.class, StorageServerConnections.class).map(storageConn, null);
Guid hostId = Guid.Empty;
if (storageConn.getHost() != null) {
hostId = getHostId(storageConn.getHost());
}
switch (storageConnection.getStorageType()) {
case ISCSI:
validateParameters(storageConn, "address", "target", "port");
break;
case NFS:
validateParameters(storageConn, "address", "path");
break;
case LOCALFS:
validateParameters(storageConn, "path");
break;
case POSIXFS:
case GLUSTERFS:
// address is possible, but is optional, non mandatory
validateParameters(storageConn, "path", "vfsType");
break;
default:
break;
}
return performCreate(VdcActionType.AddStorageServerConnection,
getAddParams(storageConnection, hostId),
ENTITY_RETRIEVER);
}
private StorageServerConnectionParametersBase getAddParams(StorageServerConnections entity, Guid hostId) {
StorageServerConnectionParametersBase params = new StorageServerConnectionParametersBase(entity, hostId, false);
params.setVdsId(hostId);
return params;
}
@Override
public StorageServerConnectionResource getStorageConnectionResource(String id) {
return inject(new BackendStorageServerConnectionResource(id, this));
}
}