From fee2f13f312a9bbdb8a5140ddf4a2d0e6b821f7d Mon Sep 17 00:00:00 2001
From: Brandon Clayton <bclayton@usgs.gov>
Date: Thu, 19 May 2022 10:21:31 -0600
Subject: [PATCH] Move metadta to own class

---
 .../earthquake/nshmp/netcdf/www/Metadata.java | 111 ++++++++++++++++++
 1 file changed, 111 insertions(+)
 create mode 100644 src/lib/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/Metadata.java

diff --git a/src/lib/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/Metadata.java b/src/lib/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/Metadata.java
new file mode 100644
index 0000000..c228a0b
--- /dev/null
+++ b/src/lib/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/Metadata.java
@@ -0,0 +1,111 @@
+package gov.usgs.earthquake.nshmp.netcdf.www;
+
+import gov.usgs.earthquake.nshmp.gmm.Imt;
+import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass;
+import gov.usgs.earthquake.nshmp.netcdf.Netcdf;
+import gov.usgs.earthquake.nshmp.netcdf.data.ScienceBaseMetadata;
+import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfService.SourceModel;
+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.netcdf.www.meta.DoubleParameter;
+
+import io.micronaut.http.HttpRequest;
+
+/**
+ * Web service metadata.
+ *
+ * @author U.S. Geological Survey
+ */
+public class Metadata<T extends Query> {
+  public final String description;
+  public final String[] syntax;
+  public final SourceModel model;
+  public final DoubleParameter longitude;
+  public final DoubleParameter latitude;
+  public final DoubleParameter vs30;
+  public final NetcdfMetadata netcdfMetadata;
+
+  Metadata(HttpRequest<?> request, NetcdfService<T> netcdfService, String description) {
+    var netcdf = netcdfService.netcdf();
+    var url = request.getUri().toString();
+    url = url.endsWith("/") ? url.substring(0, url.length() - 1) : url;
+    this.description = description;
+    syntax = new String[] {
+        url + "/{longitude:number}/{latitude:number}",
+        url + "?longitude={number}&latitude={number}",
+        url + "/{longitude:number}/{latitude:number}/{siteClass:NehrpSiteClass}",
+        url + "?longitude={number}&latitude={number}&siteClass={NehrpSiteClass}",
+    };
+
+    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);
+    model = netcdfService.getSourceModel();
+    vs30 = new DoubleParameter(
+        "Vs30",
+        "m/s",
+        150,
+        1500);
+    netcdfMetadata = new NetcdfMetadata(netcdf);
+  }
+
+  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();
+    }
+  }
+
+  interface ServiceMetadata {
+    RequestData toRequestMetadata(RequestData requestData);
+  }
+
+  static class ServiceResponseMetadata implements ServiceMetadata {
+    public NehrpSiteClass siteClass;
+    public String xLabel;
+    public String yLabel;
+
+    ServiceResponseMetadata(
+        NehrpSiteClass siteClass,
+        String xLabel,
+        String yLabel) {
+      this.siteClass = siteClass;
+      this.xLabel = xLabel;
+      this.yLabel = yLabel;
+    }
+
+    @Override
+    public RequestDataSiteClass toRequestMetadata(RequestData requestData) {
+      return new RequestDataSiteClass(requestData.site, siteClass, requestData.format);
+    }
+  }
+
+  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;
+    }
+
+    @Override
+    public RequestDataImt toRequestMetadata(RequestData requestData) {
+      return new RequestDataImt(requestData.site, siteClass, imt, requestData.format);
+    }
+  }
+}
-- 
GitLab