From 4c5845c74b444daa538bc856e6e23fe1a45f55e6 Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 21 Jul 2022 09:47:29 -0600
Subject: [PATCH] add metadata

---
 .../nshmp/netcdf/www/NetcdfService.java       | 74 +++++++++++--------
 1 file changed, 44 insertions(+), 30 deletions(-)

diff --git a/src/lib/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java b/src/lib/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java
index 243ab94..ff23fae 100644
--- a/src/lib/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java
+++ b/src/lib/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java
@@ -12,10 +12,12 @@ import gov.usgs.earthquake.nshmp.Text;
 import gov.usgs.earthquake.nshmp.Text.Delimiter;
 import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass;
 import gov.usgs.earthquake.nshmp.netcdf.Netcdf;
+import gov.usgs.earthquake.nshmp.netcdf.NetcdfDataFiles;
+import gov.usgs.earthquake.nshmp.netcdf.data.ScienceBaseMetadata;
 import gov.usgs.earthquake.nshmp.netcdf.www.Metadata.ServiceResponseMetadata;
 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.RequestDataSiteClass;
+import gov.usgs.earthquake.nshmp.netcdf.www.meta.DoubleParameter;
 import gov.usgs.earthquake.nshmp.www.ResponseBody;
 
 import io.micronaut.http.HttpRequest;
@@ -32,10 +34,10 @@ public abstract class NetcdfService<T extends Query> {
 
   protected static final Logger LOGGER = Logger.getLogger(NetcdfService.class.getName());
 
-  Netcdf<?> netcdf;
+  protected NetcdfDataFiles<?> netcdfDataFiles;
 
-  protected NetcdfService(Netcdf<?> netcdf) {
-    this.netcdf = netcdf;
+  protected NetcdfService(NetcdfDataFiles<?> netcdfDataFiles) {
+    this.netcdfDataFiles = netcdfDataFiles;
   }
 
   /**
@@ -50,35 +52,10 @@ public abstract class NetcdfService<T extends Query> {
    */
   abstract String getServiceName();
 
-  /**
-   * Returns the source model
-   */
-  abstract SourceModel getSourceModel();
-
   /**
    * Returns the netcdf object associated with the specific data type.
    */
-  abstract Netcdf<?> netcdf();
-
-  /**
-   * Returns the static curves at a specific location.
-   *
-   * @param <T> The response type
-   * @param request The request data
-   * @param url The URL for the service call
-   */
-  abstract <U> ResponseBody<RequestData, U> processCurves(RequestData request, String url);
-
-  /**
-   * Returns the static curves at a specific location and site class.
-   *
-   * @param <T> The response type
-   * @param request The request data
-   * @param url The URL for the service call
-   */
-  abstract <U> ResponseBody<RequestDataSiteClass, U> processCurvesSiteClass(
-      RequestDataSiteClass request,
-      String url);
+  abstract NetcdfDataFiles<?> netcdfDataFiles();
 
   /**
    * Process the service request and returns the string response.
@@ -127,6 +104,15 @@ public abstract class NetcdfService<T extends Query> {
     }
   }
 
+  /**
+   * Returns the source models.
+   */
+  List<SourceModel> getSourceModels() {
+    return netcdfDataFiles().stream()
+        .map(SourceModel::new)
+        .collect(Collectors.toList());
+  }
+
   <U extends ServiceResponseMetadata> String toCsvResponse(
       RequestData requestData,
       ResponseData<U> responseData) {
@@ -192,13 +178,41 @@ public abstract class NetcdfService<T extends Query> {
     return lines.stream().collect(Collectors.joining(Text.NEWLINE));
   }
 
+  static class NetcdfMetadata {
+    public final String netcdfFile;
+    public final ScienceBaseMetadata scienceBaseMetadata;
+
+    NetcdfMetadata(Netcdf<?> netcdf) {
+      var fileName = netcdf.netcdfPath().getFileName();
+      netcdfFile = fileName == null ? netcdf.netcdfPath().toString() : fileName.toString();
+      scienceBaseMetadata = netcdf.netcdfData().scienceBaseMetadata();
+    }
+  }
+
   static class SourceModel {
     public final String name;
     public final Map<NehrpSiteClass, Double> siteClasses;
+    public final DoubleParameter longitude;
+    public final DoubleParameter latitude;
+    public final NetcdfMetadata netcdfMetadata;
 
     SourceModel(Netcdf<?> netcdf) {
       name = netcdf.netcdfData().scienceBaseMetadata().label;
       siteClasses = netcdf.netcdfData().vs30Map();
+      var min = netcdf.netcdfData().minimumBounds();
+      var max = netcdf.netcdfData().maximumBounds();
+
+      longitude = new DoubleParameter(
+          "Longitude",
+          "°",
+          min.longitude,
+          max.longitude);
+      latitude = new DoubleParameter(
+          "Latitude",
+          "°",
+          min.latitude,
+          max.latitude);
+      netcdfMetadata = new NetcdfMetadata(netcdf);
     }
   }
 }
-- 
GitLab