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