From be0909a27b2d5ee8819288097de127c1e012ba76 Mon Sep 17 00:00:00 2001 From: Brandon Clayton <bclayton@usgs.gov> Date: Thu, 19 May 2022 10:18:24 -0600 Subject: [PATCH] get service name from netcdf file --- .../netcdf/www/NetcdfServiceHazardCurves.java | 71 +++++++++++-------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceHazardCurves.java b/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceHazardCurves.java index 94a1d74..831ccfc 100644 --- a/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceHazardCurves.java +++ b/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceHazardCurves.java @@ -6,13 +6,16 @@ import java.util.stream.Collectors; import gov.usgs.earthquake.nshmp.data.XySequence; import gov.usgs.earthquake.nshmp.geo.Location; import gov.usgs.earthquake.nshmp.gmm.Imt; -import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass; import gov.usgs.earthquake.nshmp.netcdf.NetcdfHazardCurves; import gov.usgs.earthquake.nshmp.netcdf.NetcdfVersion; import gov.usgs.earthquake.nshmp.netcdf.data.StaticData; import gov.usgs.earthquake.nshmp.netcdf.data.StaticDataHazardCurves; +import gov.usgs.earthquake.nshmp.netcdf.www.Metadata.HazardResponseMetadata; import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfWsUtils.Key; import gov.usgs.earthquake.nshmp.netcdf.www.Query.Service; +import gov.usgs.earthquake.nshmp.netcdf.www.Request.RequestData; +import gov.usgs.earthquake.nshmp.netcdf.www.Request.RequestDataImt; +import gov.usgs.earthquake.nshmp.netcdf.www.Request.RequestDataSiteClass; import gov.usgs.earthquake.nshmp.www.ResponseBody; import gov.usgs.earthquake.nshmp.www.ResponseMetadata; import gov.usgs.earthquake.nshmp.www.WsUtils; @@ -29,7 +32,6 @@ import io.micronaut.http.HttpRequest; public class NetcdfServiceHazardCurves extends NetcdfService<HazardQuery> { static final String SERVICE_DESCRIPTION = "Get static hazard curves from a NetCDF file"; - static final String SERVICE_NAME = "Static Hazard Curves"; static final String X_LABEL = "Ground Motion (g)"; static final String Y_LABEL = "Annual Frequency of Exceedence"; @@ -38,11 +40,11 @@ public class NetcdfServiceHazardCurves extends NetcdfService<HazardQuery> { } @Override - ResponseBody<String, Metadata> getMetadataResponse(HttpRequest<?> request) { - var metadata = new Metadata(request, SERVICE_DESCRIPTION); - return ResponseBody.<String, Metadata> usage() + ResponseBody<String, Metadata<HazardQuery>> getMetadataResponse(HttpRequest<?> request) { + var metadata = new Metadata<HazardQuery>(request, this, SERVICE_DESCRIPTION); + return ResponseBody.<String, Metadata<HazardQuery>> usage() .metadata(new ResponseMetadata(NetcdfVersion.appVersions())) - .name(SERVICE_NAME) + .name(getServiceName()) .request(NetcdfWsUtils.getRequestUrl(request)) .response(metadata) .url(NetcdfWsUtils.getRequestUrl(request)) @@ -62,7 +64,7 @@ public class NetcdfServiceHazardCurves extends NetcdfService<HazardQuery> { @Override String getServiceName() { - return SERVICE_NAME; + return getSourceModel().name; } @Override @@ -82,11 +84,11 @@ public class NetcdfServiceHazardCurves extends NetcdfService<HazardQuery> { WsUtils.checkValue(Key.LATITUDE, request.latitude); WsUtils.checkValue(Key.LONGITUDE, request.longitude); var curves = netcdf().staticData(request.site); - var curvesAsList = toList(request.site, curves); + var curvesAsList = toList(request, curves); return ResponseBody.<RequestData, List<List<ResponseData<HazardResponseMetadata>>>> success() .metadata(new ResponseMetadata(NetcdfVersion.appVersions())) - .name(SERVICE_NAME) + .name(getServiceName()) .request(request) .response(curvesAsList) .url(url) @@ -105,7 +107,7 @@ public class NetcdfServiceHazardCurves extends NetcdfService<HazardQuery> { return ResponseBody.<RequestDataSiteClass, List<ResponseData<HazardResponseMetadata>>> success() .metadata(new ResponseMetadata(NetcdfVersion.appVersions())) - .name(SERVICE_NAME) + .name(getServiceName()) .request(request) .response(curvesAsList) .url(url) @@ -123,7 +125,7 @@ public class NetcdfServiceHazardCurves extends NetcdfService<HazardQuery> { return ResponseBody.<RequestDataSiteClass, ResponseData<HazardResponseMetadata>> success() .metadata(new ResponseMetadata(NetcdfVersion.appVersions())) - .name(SERVICE_NAME) + .name(getServiceName()) .request(request) .response(toResponseData(request, request.imt, curves.get(request.imt))) .url(url) @@ -131,26 +133,43 @@ public class NetcdfServiceHazardCurves extends NetcdfService<HazardQuery> { } @Override - ResponseBody<?, ?> processRequest(HttpRequest<?> httpRequest, HazardQuery query, + String processRequest(HttpRequest<?> httpRequest, HazardQuery query, Service service) { var site = Location.create(query.longitude, query.latitude); var url = NetcdfWsUtils.getRequestUrl(httpRequest); switch (service) { case CURVES: - var requestData = new RequestData(site); - return processCurves(requestData, url); + var requestData = new RequestData(site, query.format); + return toResponseFromListOfList(processCurves(requestData, url)); case CURVES_BY_SITE_CLASS: - var requestDataSiteClass = new RequestDataSiteClass(site, query.siteClass); - return processCurvesSiteClass(requestDataSiteClass, url); + var requestDataSiteClass = new RequestDataSiteClass(site, query.siteClass, query.format); + return toResponseFromList(processCurvesSiteClass(requestDataSiteClass, url)); case CURVES_BY_IMT: - var requestDataImt = new RequestDataImt(site, query.siteClass, query.imt); - return processCurvesImt(requestDataImt, url); + var requestDataImt = new RequestDataImt(site, query.siteClass, query.imt, query.format); + return toResponse(processCurvesImt(requestDataImt, url)); default: throw new RuntimeException("Netcdf service [" + service + "] not found"); } } + private String toResponseFromListOfList( + ResponseBody<RequestData, List<List<ResponseData<HazardResponseMetadata>>>> serviceResponse) { + if (serviceResponse.getRequest().format == ResponseFormat.CSV) { + var csvResponse = + toCsvFromListOfList(serviceResponse.getRequest(), serviceResponse.getResponse()); + return String.format("%s\n\n%s", getServiceName(), csvResponse); + } else { + return NetcdfWsUtils.GSON.toJson(serviceResponse); + } + } + + private String toCsvFromListOfList(RequestData requestData, + List<List<ResponseData<HazardResponseMetadata>>> responseData) { + return responseData.stream().map(responses -> toCsvResponseFromList(requestData, responses)) + .collect(Collectors.joining("\n\n")); + } + List<ResponseData<HazardResponseMetadata>> toList( RequestDataSiteClass request, StaticDataHazardCurves curves) { @@ -160,11 +179,12 @@ public class NetcdfServiceHazardCurves extends NetcdfService<HazardQuery> { } List<List<ResponseData<HazardResponseMetadata>>> toList( - Location site, + RequestData requestData, StaticData<StaticDataHazardCurves> curves) { return curves.entrySet().stream() .map(entry -> { - var request = new RequestDataSiteClass(site, entry.getKey()); + var request = + new RequestDataSiteClass(requestData.site, entry.getKey(), requestData.format); return toList(request, entry.getValue()); }) .collect(Collectors.toList()); @@ -183,17 +203,8 @@ public class NetcdfServiceHazardCurves extends NetcdfService<HazardQuery> { public final List<Imt> imts; HazardSourceModel() { - super(); + super(netcdf()); imts = netcdf().netcdfData().imts().stream().sorted().collect(Collectors.toList()); } } - - static class HazardResponseMetadata extends ServiceResponseMetadata { - public final Imt imt; - - HazardResponseMetadata(NehrpSiteClass siteClass, Imt imt, String xLabel, String yLabel) { - super(siteClass, xLabel, yLabel); - this.imt = imt; - } - } } -- GitLab