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

Merge branch 'map' into 'main'

Resolves - Map Endpoint

Closes #68

See merge request !135
parents dba4b552 ce089d66
No related branches found
No related tags found
2 merge requests!136Production Release | nshmp-ws-static,!135Resolves - Map Endpoint
Pipeline #198588 passed
......@@ -3,7 +3,6 @@ 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;
......@@ -12,27 +11,29 @@ import io.micronaut.http.HttpRequest;
import jakarta.inject.Singleton;
/**
* Test sites handler for {@link TestSitesController}.
* Handle feature collection services.
*
* @author U.S. Geological Survey
*/
@Singleton
public class TestSitesService {
static final String NAME = "Test Sites";
public class FeatureCollectionService {
static String handleSites(HttpRequest<?> http, NetcdfHazardCurves netcdf, Boolean raw) {
static String handleFeatureCollection(
HttpRequest<?> http,
String name,
FeatureCollection fc,
Boolean raw) {
RequestData requestData = new RequestData(raw);
FeatureCollection sites = netcdf.netcdfData().sites();
if (requestData.raw) {
return sites.toJson();
return fc.toJson();
} else {
var response = ResponseBody.<RequestData, JsonElement> success()
.name(NAME)
.name(name)
.url(http.getUri().toString())
.metadata(new ResponseMetadata(NetcdfVersion.appVersions()))
.request(requestData)
.response(sites.toJsonTree())
.response(fc.toJsonTree())
.build();
return NetcdfWsUtils.GSON.toJson(response);
......
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.FeatureCollectionService.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 = MapController.NAME)
@Controller("/map")
public class MapController {
static final String NAME = "Map Boundary";
@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 map boundary",
description = "Returns the feature collection of NSHM map boundary",
operationId = "map")
@ApiResponse(
description = "NSHM map boundary",
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 {
FeatureCollection map = service.netcdf().netcdfData().map();
return HttpResponse
.ok(FeatureCollectionService.handleFeatureCollection(http, NAME, map, raw));
} catch (Exception e) {
return NetcdfWsUtils.handleError(e, NAME, http.getUri().toString());
}
}
@Operation(
summary = "Get the GeoJSON map boundary",
description = "Returns the feature collection of NSHM map boundary",
operationId = "map-slash")
@ApiResponse(
description = "NSHM map boundary",
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> {};
}
......@@ -3,8 +3,6 @@ package gov.usgs.earthquake.nshmp.netcdf.www;
import java.util.List;
import java.util.stream.Collectors;
import com.google.gson.JsonElement;
import gov.usgs.earthquake.nshmp.data.XySequence;
import gov.usgs.earthquake.nshmp.geo.Location;
import gov.usgs.earthquake.nshmp.gmm.Imt;
......@@ -220,12 +218,10 @@ public class NetcdfServiceHazardCurves extends
static class HazardSourceModel extends SourceModel {
public final List<Imt> imts;
public final JsonElement map;
HazardSourceModel(NetcdfHazardCurves netcdf) {
super(netcdf);
imts = netcdf.netcdfData().imts().stream().sorted().collect(Collectors.toList());
map = netcdf.netcdfData().map().toJsonTree();
}
}
}
......@@ -4,7 +4,7 @@ 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.netcdf.www.FeatureCollectionService.RequestData;
import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet;
import gov.usgs.earthquake.nshmp.www.ResponseBody;
......@@ -26,9 +26,10 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.inject.Inject;
@Tag(name = TestSitesService.NAME)
@Tag(name = TestSitesController.NAME)
@Controller("/sites")
public class TestSitesController {
static final String NAME = "Test Sites";
@Inject
private NshmpMicronautServlet servlet;
......@@ -64,9 +65,11 @@ public class TestSitesController {
HttpRequest<?> http,
@QueryValue(defaultValue = "false") @Nullable Boolean raw) {
try {
return HttpResponse.ok(TestSitesService.handleSites(http, service.netcdf(), raw));
FeatureCollection sites = service.netcdf().netcdfData().sites();
return HttpResponse
.ok(FeatureCollectionService.handleFeatureCollection(http, NAME, sites, raw));
} catch (Exception e) {
return NetcdfWsUtils.handleError(e, TestSitesService.NAME, http.getUri().toString());
return NetcdfWsUtils.handleError(e, NAME, http.getUri().toString());
}
}
......
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