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

Add response format - csv or json

parent b3213ca1
No related branches found
No related tags found
2 merge requests!124Production Release | nshmp-ws-static,!123Resolves - Remove GITLAB_TOKEN Requirement and AASHTO-2023 web service -- add CSV response
...@@ -4,9 +4,8 @@ import java.nio.file.Path; ...@@ -4,9 +4,8 @@ import java.nio.file.Path;
import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass; import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass;
import gov.usgs.earthquake.nshmp.netcdf.NetcdfGroundMotions; import gov.usgs.earthquake.nshmp.netcdf.NetcdfGroundMotions;
import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfService.RequestDataSiteClass; import gov.usgs.earthquake.nshmp.netcdf.www.Metadata.ServiceResponseMetadata;
import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfService.ResponseData; import gov.usgs.earthquake.nshmp.netcdf.www.Request.RequestDataSiteClass;
import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfService.ServiceResponseMetadata;
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;
...@@ -64,6 +63,7 @@ public class NetcdfController { ...@@ -64,6 +63,7 @@ public class NetcdfController {
* @param longitude Longitude of site, in decimal degrees * @param longitude Longitude of site, in decimal degrees
* @param latitude Latitude of site, in decimal degrees * @param latitude Latitude of site, in decimal degrees
* @param siteClass Site class * @param siteClass Site class
* @param format Optional - Response return type: CSV or JSON. Default: JSON
*/ */
@Operation( @Operation(
summary = "Returns risk-targeted design response spectra from a slash based call", summary = "Returns risk-targeted design response spectra from a slash based call",
...@@ -72,28 +72,56 @@ public class NetcdfController { ...@@ -72,28 +72,56 @@ public class NetcdfController {
"Enter the latitude and longitude select the site class, and press `Execute`.\n" + "Enter the latitude and longitude select the site class, and press `Execute`.\n" +
"### Service call pattern\n" + "### Service Call Pattern\n" +
"This service call is slashed delimited with pattern: " + "This service call is slashed delimited with pattern: " +
"`/spectra/{longitude}/{latitude}/{siteClass}`\n" + "`/spectra/{longitude}/{latitude}/{siteClass}`\n" +
"<br><br>" + "<br><br>" +
"Example: `/spectra/-118/34/A`", "Example: `/spectra/-118/34/A`\n",
operationId = "aashto-slash") operationId = "aashto-slash")
@ApiResponse( @ApiResponse(
description = "Spatially interpolates data from https://doi.org/10.5066/P9Z206HY", description = "Spatially interpolates data from https://doi.org/10.5066/P9Z206HY",
responseCode = "200", responseCode = "200",
content = @Content( content = {
mediaType = MediaType.APPLICATION_JSON, @Content(
schema = @Schema(implementation = Response.class))) mediaType = MediaType.APPLICATION_JSON,
@Get(uri = "/{longitude}/{latitude}/{siteClass}", produces = MediaType.APPLICATION_JSON) schema = @Schema(implementation = Response.class)),
public HttpResponse<String> doGetSlashBySite( @Content(
mediaType = MediaType.TEXT_CSV)
})
@Get(uri = "/{longitude}/{latitude}/{siteClass}{?format}",
produces = { MediaType.APPLICATION_JSON, MediaType.TEXT_CSV })
public HttpResponse<String> doGetSlashBySiteFormat(
HttpRequest<?> request, HttpRequest<?> request,
@Schema(required = true) @PathVariable @Nullable Double latitude, @Schema(required = true) @PathVariable Double latitude,
@Schema(required = true) @PathVariable @Nullable Double longitude, @Schema(required = true) @PathVariable Double longitude,
@Schema(required = true) @PathVariable @Nullable NehrpSiteClass siteClass) { @Schema(required = true,
var query = new Query(longitude, latitude, siteClass); implementation = NehrpSiteClass.class) @PathVariable NehrpSiteClass siteClass,
@Schema(required = false,
defaultValue = "JSON") @QueryValue @Nullable ResponseFormat format) {
var query = new Query(longitude, latitude, siteClass, format);
return service.handleServiceCall(request, query); return service.handleServiceCall(request, query);
} }
/**
* GET method to return hazard curves using slash delimited.
*
* @param request The HTTP request
* @param longitude The longitude of the site
* @param latitude Latitude of the site
* @param format Optional - Response return type: CSV or JSON. Default: JSON
*/
@Hidden
@Get(uri = "/{longitude}/{latitude}{?format}",
produces = { MediaType.APPLICATION_JSON, MediaType.TEXT_CSV })
public HttpResponse<String> doGetSlashFormat(
HttpRequest<?> request,
@Schema(required = true) @PathVariable Double longitude,
@Schema(required = true) @PathVariable Double latitude,
@Schema(required = false,
defaultValue = "JSON") @QueryValue @Nullable ResponseFormat format) {
return doGetSlashBySiteFormat(request, latitude, longitude, null, format);
}
/** /**
* GET method to return a static curve using URL query. * GET method to return a static curve using URL query.
* *
...@@ -101,6 +129,7 @@ public class NetcdfController { ...@@ -101,6 +129,7 @@ public class NetcdfController {
* @param longitude The longitude of the site * @param longitude The longitude of the site
* @param latitude Latitude of the site * @param latitude Latitude of the site
* @param siteClass The site class (optional) * @param siteClass The site class (optional)
* @param format Optional - Response return type: CSV or JSON. Default: JSON
*/ */
@Hidden @Hidden
@Operation( @Operation(
...@@ -122,30 +151,15 @@ public class NetcdfController { ...@@ -122,30 +151,15 @@ public class NetcdfController {
content = @Content( content = @Content(
mediaType = MediaType.APPLICATION_JSON, mediaType = MediaType.APPLICATION_JSON,
schema = @Schema(implementation = Response.class))) schema = @Schema(implementation = Response.class)))
@Get(uri = "{?longitude,latitude,siteClass}", produces = MediaType.APPLICATION_JSON) @Get(uri = "{?longitude,latitude,siteClass,format}",
produces = { MediaType.APPLICATION_JSON, MediaType.TEXT_CSV })
public HttpResponse<String> doGet( public HttpResponse<String> doGet(
HttpRequest<?> request, HttpRequest<?> request,
@Schema(required = true) @QueryValue @Nullable Double latitude, @Schema(required = true) @QueryValue @Nullable Double latitude,
@Schema(required = true) @QueryValue @Nullable Double longitude, @Schema(required = true) @QueryValue @Nullable Double longitude,
@QueryValue @Nullable NehrpSiteClass siteClass) { @QueryValue @Nullable NehrpSiteClass siteClass,
var query = new Query(longitude, latitude, siteClass); @Schema(defaultValue = "JSON") @QueryValue @Nullable ResponseFormat format) {
return service.handleServiceCall(request, query); var query = new Query(longitude, latitude, siteClass, format);
}
/**
* GET method to return hazard curves using slash delimited.
*
* @param request The HTTP request
* @param longitude The longitude of the site
* @param latitude Latitude of the site
*/
@Hidden
@Get(uri = "/{longitude}/{latitude}", produces = MediaType.APPLICATION_JSON)
public HttpResponse<String> doGetSlash(
HttpRequest<?> request,
@Schema(required = true) @PathVariable @Nullable Double longitude,
@Schema(required = true) @PathVariable @Nullable Double latitude) {
var query = new Query(longitude, latitude, null);
return service.handleServiceCall(request, query); return service.handleServiceCall(request, query);
} }
......
...@@ -6,10 +6,9 @@ import java.util.List; ...@@ -6,10 +6,9 @@ import java.util.List;
import gov.usgs.earthquake.nshmp.gmm.Imt; import gov.usgs.earthquake.nshmp.gmm.Imt;
import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass; import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass;
import gov.usgs.earthquake.nshmp.netcdf.NetcdfHazardCurves; import gov.usgs.earthquake.nshmp.netcdf.NetcdfHazardCurves;
import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfService.RequestDataImt; import gov.usgs.earthquake.nshmp.netcdf.www.Metadata.HazardResponseMetadata;
import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfService.RequestDataSiteClass; import gov.usgs.earthquake.nshmp.netcdf.www.Request.RequestDataImt;
import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfService.ResponseData; import gov.usgs.earthquake.nshmp.netcdf.www.Request.RequestDataSiteClass;
import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfServiceHazardCurves.HazardResponseMetadata;
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;
...@@ -86,14 +85,17 @@ public class NetcdfController { ...@@ -86,14 +85,17 @@ public class NetcdfController {
responseCode = "200", responseCode = "200",
content = @Content( content = @Content(
schema = @Schema(implementation = ResponseByImt.class))) schema = @Schema(implementation = ResponseByImt.class)))
@Get(uri = "/{longitude}/{latitude}/{siteClass}/{imt}", produces = MediaType.APPLICATION_JSON) @Get(uri = "/{longitude}/{latitude}/{siteClass}/{imt}{?format}",
produces = MediaType.APPLICATION_JSON)
public HttpResponse<String> doGetSlashByImt( public HttpResponse<String> doGetSlashByImt(
HttpRequest<?> request, HttpRequest<?> request,
@Schema(required = true) @PathVariable @Nullable Double latitude, @Schema(required = true) @PathVariable Double latitude,
@Schema(required = true) @PathVariable @Nullable Double longitude, @Schema(required = true) @PathVariable Double longitude,
@Schema(required = true) @PathVariable @Nullable NehrpSiteClass siteClass, @Schema(required = true) @PathVariable NehrpSiteClass siteClass,
@Schema(required = true) @PathVariable @Nullable Imt imt) { @Schema(required = true) @PathVariable Imt imt,
return doGet(request, longitude, latitude, siteClass, imt); @Schema(required = false, defaultValue = "JSON",
implementation = ResponseFormat.class) @QueryValue @Nullable ResponseFormat format) {
return doGet(request, longitude, latitude, siteClass, imt, format);
} }
/** /**
...@@ -122,13 +124,15 @@ public class NetcdfController { ...@@ -122,13 +124,15 @@ public class NetcdfController {
responseCode = "200", responseCode = "200",
content = @Content( content = @Content(
schema = @Schema(implementation = ResponseBySiteClass.class))) schema = @Schema(implementation = ResponseBySiteClass.class)))
@Get(uri = "/{longitude}/{latitude}/{siteClass}", produces = MediaType.APPLICATION_JSON) @Get(uri = "/{longitude}/{latitude}/{siteClass}{?format}", produces = MediaType.APPLICATION_JSON)
public HttpResponse<String> doGetSlashBySite( public HttpResponse<String> doGetSlashBySite(
HttpRequest<?> request, HttpRequest<?> request,
@Schema(required = true) @PathVariable @Nullable Double latitude, @Schema(required = true) @PathVariable Double latitude,
@Schema(required = true) @PathVariable @Nullable Double longitude, @Schema(required = true) @PathVariable Double longitude,
@Schema(required = true) @PathVariable @Nullable NehrpSiteClass siteClass) { @Schema(required = true) @PathVariable NehrpSiteClass siteClass,
return doGet(request, longitude, latitude, siteClass, null); @Schema(required = false, defaultValue = "JSON",
implementation = ResponseFormat.class) @QueryValue @Nullable ResponseFormat format) {
return doGet(request, longitude, latitude, siteClass, null, format);
} }
/** /**
...@@ -156,12 +160,14 @@ public class NetcdfController { ...@@ -156,12 +160,14 @@ public class NetcdfController {
responseCode = "200", responseCode = "200",
content = @Content( content = @Content(
schema = @Schema(implementation = Response.class))) schema = @Schema(implementation = Response.class)))
@Get(uri = "/{longitude}/{latitude}", produces = MediaType.APPLICATION_JSON) @Get(uri = "/{longitude}/{latitude}{?format}", produces = MediaType.APPLICATION_JSON)
public HttpResponse<String> doGetSlash( public HttpResponse<String> doGetSlash(
HttpRequest<?> request, HttpRequest<?> request,
@Schema(required = true) @PathVariable @Nullable Double longitude, @Schema(required = true) @PathVariable Double longitude,
@Schema(required = true) @PathVariable @Nullable Double latitude) { @Schema(required = true) @PathVariable Double latitude,
return doGet(request, longitude, latitude, null, null); @Schema(required = false, defaultValue = "JSON",
implementation = ResponseFormat.class) @QueryValue @Nullable ResponseFormat format) {
return doGet(request, longitude, latitude, null, null, format);
} }
/** /**
...@@ -191,14 +197,16 @@ public class NetcdfController { ...@@ -191,14 +197,16 @@ public class NetcdfController {
responseCode = "200", responseCode = "200",
content = @Content( content = @Content(
schema = @Schema(implementation = ResponseByImt.class))) schema = @Schema(implementation = ResponseByImt.class)))
@Get(uri = "{?longitude,latitude,siteClass,imt}", produces = MediaType.APPLICATION_JSON) @Get(uri = "{?longitude,latitude,siteClass,imt,format}", produces = MediaType.APPLICATION_JSON)
public HttpResponse<String> doGet( public HttpResponse<String> doGet(
HttpRequest<?> request, HttpRequest<?> request,
@Schema(required = true) @QueryValue @Nullable Double longitude, @Schema(required = true) @QueryValue @Nullable Double longitude,
@Schema(required = true) @QueryValue @Nullable Double latitude, @Schema(required = true) @QueryValue @Nullable Double latitude,
@QueryValue @Nullable NehrpSiteClass siteClass, @QueryValue @Nullable NehrpSiteClass siteClass,
@QueryValue @Nullable Imt imt) { @QueryValue @Nullable Imt imt,
var query = new HazardQuery(longitude, latitude, siteClass, imt); @Schema(required = false, defaultValue = "JSON",
implementation = ResponseFormat.class) @QueryValue @Nullable ResponseFormat format) {
var query = new HazardQuery(longitude, latitude, siteClass, imt, format);
return service.handleServiceCall(request, query); return service.handleServiceCall(request, query);
} }
......
package gov.usgs.earthquake.nshmp.netcdf.www;
/**
* Web service return format.
*
* @author U.S. Geological Survey
*/
public enum ResponseFormat {
JSON,
CSV;
}
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