Skip to content
Snippets Groups Projects
Commit ce53fde4 authored by Clayton, Brandon Scott's avatar Clayton, Brandon Scott
Browse files

add test sites service and controller

parent 0a16c77c
No related branches found
No related tags found
2 merge requests!136Production Release | nshmp-ws-static,!134Resolves - Test Sites Endpoint
package gov.usgs.earthquake.nshmp.netcdf.www;
import java.nio.file.Path;
import gov.usgs.earthquake.nshmp.geo.json.FeatureCollection;
import gov.usgs.earthquake.nshmp.netcdf.NetcdfDataFilesHazardCurves;
import gov.usgs.earthquake.nshmp.netcdf.www.TestSitesService.RequestData;
import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet;
import gov.usgs.earthquake.nshmp.www.ResponseBody;
import io.micronaut.context.annotation.Value;
import io.micronaut.context.event.StartupEvent;
import io.micronaut.core.annotation.Nullable;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.HttpResponse;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.annotation.PathVariable;
import io.micronaut.http.annotation.QueryValue;
import io.micronaut.runtime.event.annotation.EventListener;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.inject.Inject;
@Tag(name = TestSitesService.NAME)
@Controller("/sites")
public class TestSitesController {
@Inject
private NshmpMicronautServlet servlet;
/**
* The path to a hazard NetCDF file
*/
@Value("${nshmp-ws-static.netcdf-path}")
Path netcdfPath;
NetcdfServiceHazardCurves service;
/**
* Read in data type and return the appropriate service to use.
*/
@EventListener
void startup(StartupEvent event) {
var netcdfDataFiles = new NetcdfDataFilesHazardCurves(netcdfPath);
service = new NetcdfServiceHazardCurves(netcdfDataFiles);
}
@Operation(
summary = "Get the GeoJSON Feature Collection of test sites",
description = "Returns the feature collection of test sites",
operationId = "test-sites")
@ApiResponse(
description = "NSHM test sites",
responseCode = "200",
content = @Content(
schema = @Schema(implementation = Response.class)))
@Get(uri = "{?raw}", produces = MediaType.APPLICATION_JSON)
public HttpResponse<String> doGet(
HttpRequest<?> http,
@QueryValue(defaultValue = "false") @Nullable Boolean raw) {
try {
return HttpResponse.ok(TestSitesService.handleSites(http, service.netcdf(), raw));
} catch (Exception e) {
return NetcdfWsUtils.handleError(e, TestSitesService.NAME, http.getUri().toString());
}
}
@Operation(
summary = "Get the GeoJSON Feature Collection of test sites",
description = "Returns the feature collection of test sites",
operationId = "test-sites-slash")
@ApiResponse(
description = "NSHM test sites",
responseCode = "200",
content = @Content(
schema = @Schema(implementation = Response.class)))
@Get(uri = "/{raw}", produces = MediaType.APPLICATION_JSON)
public HttpResponse<String> doGetSlash(
HttpRequest<?> http,
@PathVariable(defaultValue = "false") @Nullable Boolean raw) {
return doGet(http, raw);
}
// Swagger schema
private static class Response extends ResponseBody<RequestData, FeatureCollection> {};
}
package gov.usgs.earthquake.nshmp.netcdf.www;
import com.google.gson.JsonElement;
import gov.usgs.earthquake.nshmp.geo.json.FeatureCollection;
import gov.usgs.earthquake.nshmp.netcdf.NetcdfHazardCurves;
import gov.usgs.earthquake.nshmp.netcdf.NetcdfVersion;
import gov.usgs.earthquake.nshmp.www.ResponseBody;
import gov.usgs.earthquake.nshmp.www.ResponseMetadata;
import io.micronaut.http.HttpRequest;
import jakarta.inject.Singleton;
/**
* Test sites handler for {@link TestSitesController}.
*
* @author U.S. Geological Survey
*/
@Singleton
public class TestSitesService {
static final String NAME = "Test Sites";
static String handleSites(HttpRequest<?> http, NetcdfHazardCurves netcdf, Boolean raw) {
RequestData requestData = new RequestData(raw);
FeatureCollection sites = netcdf.netcdfData().sites();
if (requestData.raw) {
return sites.toJson();
} else {
var response = ResponseBody.<RequestData, JsonElement> success()
.name(NAME)
.url(http.getUri().toString())
.metadata(new ResponseMetadata(NetcdfVersion.appVersions()))
.request(requestData)
.response(sites.toJsonTree())
.build();
return NetcdfWsUtils.GSON.toJson(response);
}
}
static class RequestData {
public boolean raw;
RequestData(Boolean raw) {
this.raw = raw == null ? false : raw;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment