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

Merge branch 'map' into 'main'

Resolves - Map Endpoint

Closes #541

See merge request !670
parents 3cfbfc97 0cbd832a
No related branches found
No related tags found
2 merge requests!672Production Release | nshmp-haz,!670Resolves - Map Endpoint
Pipeline #198587 passed
package gov.usgs.earthquake.nshmp.www.source; package gov.usgs.earthquake.nshmp.www.source;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import gov.usgs.earthquake.nshmp.geo.json.FeatureCollection; import gov.usgs.earthquake.nshmp.geo.json.FeatureCollection;
...@@ -15,28 +12,29 @@ import io.micronaut.http.HttpRequest; ...@@ -15,28 +12,29 @@ import io.micronaut.http.HttpRequest;
import jakarta.inject.Singleton; import jakarta.inject.Singleton;
/** /**
* Test sites handler for {@link TestSitesController}. * Handle feature collection services.
* *
* @author U.S. Geological Survey * @author U.S. Geological Survey
*/ */
@Singleton @Singleton
public class TestSitesService { public class FeatureCollectionService {
static final Logger LOG = LoggerFactory.getLogger(TestSitesController.class);
static final String NAME = "Test Sites";
static String handleSites(HttpRequest<?> http, Boolean raw) { static String handleFeatureCollection(
HttpRequest<?> http,
String name,
FeatureCollection fc,
Boolean raw) {
RequestData requestData = new RequestData(raw); RequestData requestData = new RequestData(raw);
FeatureCollection sites = ServletUtil.model().sites().orElseThrow();
if (requestData.raw) { if (requestData.raw) {
return sites.toJson(); return fc.toJson();
} else { } else {
var response = ResponseBody.<RequestData, JsonElement> success() var response = ResponseBody.<RequestData, JsonElement> success()
.name(NAME) .name(name)
.url(http.getUri().toString()) .url(http.getUri().toString())
.metadata(new ResponseMetadata(HazVersion.appVersions())) .metadata(new ResponseMetadata(HazVersion.appVersions()))
.request(requestData) .request(requestData)
.response(sites.toJsonTree()) .response(fc.toJsonTree())
.build(); .build();
return ServletUtil.GSON2.toJson(response); return ServletUtil.GSON2.toJson(response);
......
package gov.usgs.earthquake.nshmp.www.source;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import gov.usgs.earthquake.nshmp.geo.json.FeatureCollection;
import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet;
import gov.usgs.earthquake.nshmp.www.ResponseBody;
import gov.usgs.earthquake.nshmp.www.ServletUtil;
import gov.usgs.earthquake.nshmp.www.source.FeatureCollectionService.RequestData;
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.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;
/**
* Micronaut web service controller for the GeoJSON map boundary associated with
* the current installed model.
*
* <p>See src/main/resources/application.yml nshmp-haz.model-path for installed
* model.
*
* <p>To run the Micronaut jar file with a model: java -jar
* path/to/nshmp-haz.jar --model=<path/to/model>
*
* @author U.S. Geological Survey
*/
@Tag(
name = MapController.NAME,
description = "NSHM map boundary")
@Controller("/map")
public class MapController {
static final Logger LOG = LoggerFactory.getLogger(MapController.class);
static final String NAME = "Map Boundary";
@Inject
private NshmpMicronautServlet servlet;
@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 = ServletUtil.model().map().orElseThrow();
return HttpResponse
.ok(FeatureCollectionService.handleFeatureCollection(http, NAME, map, raw));
} catch (Exception e) {
return ServletUtil.error(
LOG,
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> {};
}
...@@ -10,7 +10,6 @@ import java.util.stream.DoubleStream; ...@@ -10,7 +10,6 @@ import java.util.stream.DoubleStream;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import gov.usgs.earthquake.nshmp.geo.json.FeatureCollection;
import gov.usgs.earthquake.nshmp.gmm.Gmm; import gov.usgs.earthquake.nshmp.gmm.Gmm;
import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass; import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass;
import gov.usgs.earthquake.nshmp.model.HazardModel; import gov.usgs.earthquake.nshmp.model.HazardModel;
...@@ -74,7 +73,6 @@ public class SourceService { ...@@ -74,7 +73,6 @@ public class SourceService {
final Map<NehrpSiteClass, Double> siteClasses; final Map<NehrpSiteClass, Double> siteClasses;
final List<Parameter> imts; final List<Parameter> imts;
final List<Double> bounds; final List<Double> bounds;
final FeatureCollection map;
public SourceModel(HazardModel model) { public SourceModel(HazardModel model) {
name = model.name(); name = model.name();
...@@ -88,7 +86,6 @@ public class SourceService { ...@@ -88,7 +86,6 @@ public class SourceService {
.map(imt -> new Parameter(ServletUtil.imtShortLabel(imt), imt.name())) .map(imt -> new Parameter(ServletUtil.imtShortLabel(imt), imt.name()))
.collect(toList()); .collect(toList());
bounds = DoubleStream.of(model.bounds().toArray()).boxed().collect(toList()); bounds = DoubleStream.of(model.bounds().toArray()).boxed().collect(toList());
map = model.map().orElseThrow();
} }
public String getName() { public String getName() {
......
package gov.usgs.earthquake.nshmp.www.source; package gov.usgs.earthquake.nshmp.www.source;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import gov.usgs.earthquake.nshmp.geo.json.FeatureCollection; import gov.usgs.earthquake.nshmp.geo.json.FeatureCollection;
import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet; import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet;
import gov.usgs.earthquake.nshmp.www.ResponseBody; import gov.usgs.earthquake.nshmp.www.ResponseBody;
import gov.usgs.earthquake.nshmp.www.ServletUtil; import gov.usgs.earthquake.nshmp.www.ServletUtil;
import gov.usgs.earthquake.nshmp.www.source.TestSitesService.RequestData; import gov.usgs.earthquake.nshmp.www.source.FeatureCollectionService.RequestData;
import io.micronaut.core.annotation.Nullable; import io.micronaut.core.annotation.Nullable;
import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpRequest;
...@@ -34,10 +37,12 @@ import jakarta.inject.Inject; ...@@ -34,10 +37,12 @@ import jakarta.inject.Inject;
* @author U.S. Geological Survey * @author U.S. Geological Survey
*/ */
@Tag( @Tag(
name = TestSitesService.NAME, name = TestSitesController.NAME,
description = "NSHM test sites") description = "NSHM test sites")
@Controller("/sites") @Controller("/sites")
public class TestSitesController { public class TestSitesController {
static final Logger LOG = LoggerFactory.getLogger(TestSitesController.class);
static final String NAME = "Test Sites";
@Inject @Inject
private NshmpMicronautServlet servlet; private NshmpMicronautServlet servlet;
...@@ -56,12 +61,14 @@ public class TestSitesController { ...@@ -56,12 +61,14 @@ public class TestSitesController {
HttpRequest<?> http, HttpRequest<?> http,
@QueryValue(defaultValue = "false") @Nullable Boolean raw) { @QueryValue(defaultValue = "false") @Nullable Boolean raw) {
try { try {
return HttpResponse.ok(TestSitesService.handleSites(http, raw)); FeatureCollection sites = ServletUtil.model().sites().orElseThrow();
return HttpResponse
.ok(FeatureCollectionService.handleFeatureCollection(http, NAME, sites, raw));
} catch (Exception e) { } catch (Exception e) {
return ServletUtil.error( return ServletUtil.error(
TestSitesService.LOG, LOG,
e, e,
TestSitesService.NAME, NAME,
http.getUri().toString()); 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