diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/Netcdf.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/Netcdf.java deleted file mode 100644 index 5c13df52084f3a2bcac317f429588f895edd4007..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/Netcdf.java +++ /dev/null @@ -1,97 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf; - -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.logging.Level; -import java.util.logging.Logger; - -import gov.usgs.earthquake.nshmp.geo.Location; -import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass; -import gov.usgs.earthquake.nshmp.netcdf.data.BoundingData; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfData; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape; -import gov.usgs.earthquake.nshmp.netcdf.data.StaticData; -import gov.usgs.earthquake.nshmp.netcdf.reader.Reader; - -/** - * Abstarct class for NetCDF types: hazard curves and ground motions. - * - * @author U.S. Geological Survey - */ -public abstract class Netcdf<T> { - - protected final Path netcdfPath; - protected final NetcdfDataType dataType; - protected final NetcdfData netcdfData; - protected NetcdfShape netcdfShape; - - private static final Logger LOGGER = Logger.getLogger("ucar"); - - static { - /* Update ucar logger */ - LOGGER.setLevel(Level.SEVERE); - } - - public Netcdf(Path netcdfPath) { - this.netcdfPath = netcdfPath; - - if (Files.notExists(netcdfPath)) { - throw new IllegalArgumentException("Path to Netcdf file [" + netcdfPath + "] does not exist"); - } - - dataType = NetcdfDataType.getDataType(netcdfPath); - var reader = getNetcdfData(netcdfPath); - netcdfData = reader.netcdfData(); - netcdfShape = reader.netcdfShape(); - } - - /** - * Returns the bounding data from a specific site. - * - * @param site The site to get the bounding data - */ - public abstract BoundingData<T> boundingData(Location site); - - /** - * Returns the data type. - */ - public NetcdfDataType dataType() { - return dataType; - } - - /** - * Returns the NetCDF data. - */ - public abstract NetcdfData netcdfData(); - - /** - * Returns the NetCDF path. - */ - public Path netcdfPath() { - return netcdfPath; - } - - /** - * Returns the NetCDF shape` - */ - public NetcdfShape netcdfShape() { - return netcdfShape; - } - - /** - * Returns the static data from a specific site. - * - * @param site The site to get the static data - */ - public abstract StaticData<T> staticData(Location site); - - /** - * Returns the static data from a site and site class. - * - * @param site The site to get the static data - * @param siteClass The site class to get the static data - */ - public abstract T staticData(Location site, NehrpSiteClass siteClass); - - abstract Reader getNetcdfData(Path netcdfPath); -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NetcdfDataType.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NetcdfDataType.java deleted file mode 100644 index d7bb13c55cb393d6fad60b864e903487580fee39..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NetcdfDataType.java +++ /dev/null @@ -1,32 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf; - -import java.io.IOException; -import java.nio.file.Path; - -import gov.usgs.earthquake.nshmp.netcdf.reader.NetcdfUtils.Key; - -import ucar.nc2.dataset.NetcdfDatasets; - -/** - * Supported NetCDF data types. - */ -public enum NetcdfDataType { - - GROUND_MOTIONS, - HAZARD_CURVES; - - /** - * Returns the data type read from a NetCDF file with attribute "dataType". - * - * @param netcdfPath Path to NetCDF file - */ - public static NetcdfDataType getDataType(Path netcdfPath) { - try (var ncd = NetcdfDatasets.openDataset(netcdfPath.toString())) { - var group = ncd.getRootGroup(); - var vDataType = group.attributes().findAttribute(Key.DATA_TYPE); - return NetcdfDataType.valueOf(vDataType.getStringValue()); - } catch (IOException e) { - throw new RuntimeException("Could not read Netcdf file [" + netcdfPath + " ]"); - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NetcdfGroundMotions.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NetcdfGroundMotions.java deleted file mode 100644 index 3a9c943b3b74a5f31ff24cbf626dcb54537f0359..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NetcdfGroundMotions.java +++ /dev/null @@ -1,62 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf; - -import static com.google.common.base.Preconditions.checkArgument; - -import java.io.IOException; -import java.nio.file.Path; - -import gov.usgs.earthquake.nshmp.data.XySequence; -import gov.usgs.earthquake.nshmp.geo.Location; -import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass; -import gov.usgs.earthquake.nshmp.netcdf.data.BoundingData; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfData; -import gov.usgs.earthquake.nshmp.netcdf.data.StaticData; -import gov.usgs.earthquake.nshmp.netcdf.reader.BoundingReaderGroundMotions; -import gov.usgs.earthquake.nshmp.netcdf.reader.ReaderGroundMotions; - -import ucar.nc2.dataset.NetcdfDatasets; - -/** - * NetCDF data for ground motions. - * - * @author U.S. Geological Survey - */ -public class NetcdfGroundMotions extends Netcdf<XySequence> { - - public NetcdfGroundMotions(Path netcdfPath) { - super(netcdfPath); - } - - @Override - public BoundingData<XySequence> boundingData(Location site) { - return new BoundingReaderGroundMotions(this, site).boundingData(); - } - - @Override - public NetcdfData netcdfData() { - return netcdfData; - } - - @Override - public StaticData<XySequence> staticData(Location site) { - return boundingData(site).get(site); - } - - @Override - public XySequence staticData(Location site, NehrpSiteClass siteClass) { - checkArgument( - netcdfData.siteClasses().contains(siteClass), - "Site class [" + siteClass + "] not supported"); - return staticData(site).get(siteClass); - } - - @Override - ReaderGroundMotions getNetcdfData(Path netcdfPath) { - try (var ncd = NetcdfDatasets.openDataset(netcdfPath.toString())) { - var group = ncd.getRootGroup(); - return new ReaderGroundMotions(group); - } catch (IOException e) { - throw new RuntimeException("Could not read Netcdf file [" + netcdfPath + " ]"); - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NetcdfHazardCurves.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NetcdfHazardCurves.java deleted file mode 100644 index 4fedc864f22f334c6599266d233e791a589b3003..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/NetcdfHazardCurves.java +++ /dev/null @@ -1,62 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf; - -import static com.google.common.base.Preconditions.checkArgument; - -import java.io.IOException; -import java.nio.file.Path; - -import gov.usgs.earthquake.nshmp.geo.Location; -import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass; -import gov.usgs.earthquake.nshmp.netcdf.data.BoundingData; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfDataHazardCurves; -import gov.usgs.earthquake.nshmp.netcdf.data.StaticData; -import gov.usgs.earthquake.nshmp.netcdf.data.StaticDataHazardCurves; -import gov.usgs.earthquake.nshmp.netcdf.reader.BoundingReaderHazardCurves; -import gov.usgs.earthquake.nshmp.netcdf.reader.ReaderHazardCurves; - -import ucar.nc2.dataset.NetcdfDatasets; - -/** - * NetCDF data for hazard curves. - * - * @author U.S. Geological Survey - */ -public class NetcdfHazardCurves extends Netcdf<StaticDataHazardCurves> { - - public NetcdfHazardCurves(Path netcdfPath) { - super(netcdfPath); - } - - @Override - public BoundingData<StaticDataHazardCurves> boundingData(Location site) { - return new BoundingReaderHazardCurves(this, site).boundingData(); - } - - @Override - public NetcdfDataHazardCurves netcdfData() { - return (NetcdfDataHazardCurves) netcdfData; - } - - @Override - public StaticData<StaticDataHazardCurves> staticData(Location site) { - return boundingData(site).get(site); - } - - @Override - public StaticDataHazardCurves staticData(Location site, NehrpSiteClass siteClass) { - checkArgument( - netcdfData.siteClasses().contains(siteClass), - "Site class [" + siteClass + "] not supported"); - return staticData(site).get(siteClass); - } - - @Override - ReaderHazardCurves getNetcdfData(Path netcdfPath) { - try (var ncd = NetcdfDatasets.openDataset(netcdfPath.toString())) { - var group = ncd.getRootGroup(); - return new ReaderHazardCurves(group); - } catch (IOException e) { - throw new RuntimeException("Could not read Netcdf file [" + netcdfPath + " ]"); - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/SiteClass.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/SiteClass.java deleted file mode 100644 index 3d38dc3a675277445b9a50ab902750290320b34b..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/SiteClass.java +++ /dev/null @@ -1,104 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf; - -import java.util.Arrays; - -/** - * This should be imported. For now, it is copied from - * nshmp-haz-v2/src/gov.usgs.earthquake.nshmp.site.NehrpSiteClass.java - * - * Placeholder enum for likely move to Nehrp site class identifier instead of - * Vs30. - * - * <p>These site class identifiers map to NEHRP site clases, but the intent is - * that they can be used more generally for models in other parts of the world - * where the GMMs are not necessarily parameterized in terms of vs30 to define - * site response. For instance, NZ/JP site classes might use A, B, C, and D as a - * proxy for the local I, II, III, and IV identifiers. In the U.S., models will - * need to specify the Vs30 value that each site class corresponds to. Although - * the values were consistent over prior models, now that multiple site classes - * are supported (in 2018) across the entire U.S., there have been changes - * proposed for balloting by the BSSC to make the Vs30 definitions of site - * classes consistent in how they are calculated. - * - * @author Peter Powers - */ -public enum SiteClass { - - /* - * Notes on calculation of Vs30 for site class: - * - * Question: Why is it that the soil shear wave velocity shown in the Unified - * Hazard Tool is not equal to the average of the values shown in ASCE 7-10 - * table 20.3-1? - * - * For instance: 259 m/s (Site Class D), from the Unified Hazard Tool, is not - * equal to (600 ft/s + 1200 ft/s)/2 * .3048 = 274 m/s - * - * Answer (Sanaz): we take the geometric mean: sqrt(1200*600)*0.3048 = - * 258.6314 , which rounds to 259m/s. - * - * - */ - - /* OLD Vs30, NEW Vs30 */ - - /* 2000 2000 */ - A("Site class A (Vs30 2000)", 2000), - - /* 1500 1500 (new) */ - AB("Site class AB (Vs30 1500)", 1500), - - /* 1150 1080 */ - B("Site class B (Vs30 1080)", 1080), - - /* 760 760 */ - BC("Site class BC (Vs30 760)", 760), - - /* 537 530 */ - C("Site class C (Vs30 530)", 530), - - /* 360 365 */ - CD("Site class CD (Vs30 365)", 365), - - /* 259 260 */ - D("Site class D (Vs30 260)", 260), - - /* 180 185 */ - DE("Site class DE (Vs30 185)", 185), - - /* 150 150 (new) */ - E("Site class E (Vs30 150)", 150); - - private final String display; - private final int vs30; - - private SiteClass(String display, int vs30) { - this.display = display; - this.vs30 = vs30; - } - - /** - * Returns the Vs30 associated with the {@code SiteClass}. - */ - public int vs30() { - return vs30; - } - - /** - * Returns a {@code SiteClass} associated with the vs30. - * - * @param vs30 The vs30 of the site class - */ - public static SiteClass ofValue(int vs30) { - return Arrays.stream(values()) - .filter(siteClass -> siteClass.vs30 == vs30) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException( - "No matching site class to Vs30 [" + vs30 + "]")); - } - - @Override - public String toString() { - return display; - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/BoundingData.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/BoundingData.java deleted file mode 100644 index 6fcda9d66b1a82164c270f380531c26bc3a8c709..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/BoundingData.java +++ /dev/null @@ -1,45 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.data; - -import static com.google.common.base.Preconditions.checkState; - -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; - -import gov.usgs.earthquake.nshmp.geo.Location; - -/** - * Location to static data mapper. - * - * @author U.S. Geological Survey - */ -public class BoundingData<T> extends LinkedHashMap<Location, StaticData<T>> { - - public BoundingData() {} - - private BoundingData(Map<Location, StaticData<T>> boundingHazards) { - putAll(boundingHazards); - } - - public static <T> Builder<T> builder() { - return new Builder<T>(); - } - - public static class Builder<T> { - Map<Location, StaticData<T>> boundingData; - - private Builder() { - boundingData = new HashMap<>(); - } - - public Builder<T> put(Location location, StaticData<T> staticData) { - boundingData.put(location, staticData); - return this; - } - - public BoundingData<T> build() { - checkState(!boundingData.isEmpty(), "Must add static data"); - return new BoundingData<>(boundingData); - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/NetcdfData.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/NetcdfData.java deleted file mode 100644 index 41b07528eb87a8c6c70f774b008c765736627b6f..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/NetcdfData.java +++ /dev/null @@ -1,156 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.data; - -import static com.google.common.base.Preconditions.checkState; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import gov.usgs.earthquake.nshmp.geo.Bounds; -import gov.usgs.earthquake.nshmp.geo.Location; -import gov.usgs.earthquake.nshmp.geo.Regions; -import gov.usgs.earthquake.nshmp.gmm.Imt; -import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass; - -/** - * Data info from the NetCDF file. - * - * @author U.S. Geological Survey - */ -public class NetcdfData { - private final Bounds bounds; - private final List<Imt> imts; - private final double[] latitudes; - private final double[] longitudes; - private final ScienceBaseMetadata scienceBaseMetadata; - private final List<NehrpSiteClass> siteClasses; - private final Map<NehrpSiteClass, Double> vs30Map; - - protected NetcdfData(Builder builder) { - var minLatitude = Arrays.stream(builder.latitudes).min().getAsDouble(); - var maxLatitude = Arrays.stream(builder.latitudes).max().getAsDouble(); - var minLongitude = Arrays.stream(builder.longitudes).min().getAsDouble(); - var maxLongitude = Arrays.stream(builder.longitudes).max().getAsDouble(); - - bounds = Regions.createRectangular( - "", - Location.create(minLongitude, minLatitude), - Location.create(maxLongitude, maxLatitude)).bounds(); - imts = builder.imts; - latitudes = builder.latitudes; - longitudes = builder.longitudes; - scienceBaseMetadata = builder.scienceBaseMetadata; - siteClasses = builder.siteClasses; - vs30Map = builder.vs30Map; - } - - /** - * Returns the bounds - */ - public Bounds bounds() { - return bounds; - } - - /** - * Return the Imts - */ - public List<Imt> imts() { - return List.copyOf(imts); - } - - /** - * Returns the latitudes. - */ - public double[] latitudes() { - return latitudes.clone(); - } - - /** - * Returns the longitudes. - */ - public double[] longitudes() { - return longitudes.clone(); - } - - /** - * Returns the science base info - */ - public ScienceBaseMetadata scienceBaseMetadata() { - return scienceBaseMetadata; - } - - /** - * Return the site classes - */ - public List<NehrpSiteClass> siteClasses() { - return List.copyOf(siteClasses); - } - - /** - * Returns the VS30 map - */ - public Map<NehrpSiteClass, Double> vs30Map() { - return new TreeMap<>(vs30Map); - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - List<Imt> imts; - double[] latitudes; - double[] longitudes; - List<NehrpSiteClass> siteClasses; - ScienceBaseMetadata scienceBaseMetadata; - Map<NehrpSiteClass, Double> vs30Map; - - Builder() {} - - public Builder imts(List<Imt> imts) { - this.imts = imts; - return this; - } - - public Builder latitudes(double[] latitudes) { - this.latitudes = latitudes; - return this; - } - - public Builder longitudes(double[] longitudes) { - this.longitudes = longitudes; - return this; - } - - public Builder scienceBaseMetadata(ScienceBaseMetadata scienceBaseMetadata) { - this.scienceBaseMetadata = scienceBaseMetadata; - return this; - } - - public Builder siteClasses(List<NehrpSiteClass> siteClasses) { - this.siteClasses = siteClasses; - return this; - } - - public Builder vs30Map(Map<NehrpSiteClass, Double> vs30Map) { - this.vs30Map = vs30Map; - return this; - } - - public NetcdfData build() { - checkBuildState(); - return new NetcdfData(this); - } - - void checkBuildState() { - checkState(!imts.isEmpty(), "Must add imts"); - checkState(!(latitudes.length == 0), "Must add latitude"); - checkState(!(longitudes.length == 0), "Must add longitudes"); - checkState(scienceBaseMetadata != null, "Must set science base metadata"); - checkState(!siteClasses.isEmpty(), "Must add site classes"); - checkState(!vs30Map.isEmpty(), "Must add vs30s"); - } - } - -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/NetcdfDataHazardCurves.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/NetcdfDataHazardCurves.java deleted file mode 100644 index af9df24c6ad72820f09624a47ffae0dd24f9c11d..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/NetcdfDataHazardCurves.java +++ /dev/null @@ -1,101 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.data; - -import static com.google.common.base.Preconditions.checkState; - -import java.util.List; -import java.util.Map; - -import gov.usgs.earthquake.nshmp.gmm.Imt; -import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass; - -/** - * NetCDF data for hazard curves. - * - * @author U.S. Geological Survey - */ -public class NetcdfDataHazardCurves extends NetcdfData { - - private final Map<Imt, double[]> imls; - - NetcdfDataHazardCurves(Builder builder) { - super(builder); - imls = builder.imls; - } - - /** - * Returns the Imls - */ - public Map<Imt, double[]> imls() { - return imls; - } - - /** - * Returns the number of Imls - */ - public int nIml() { - return imls.values().iterator().next().length; - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder extends NetcdfData.Builder { - Map<Imt, double[]> imls; - - Builder() { - super(); - } - - public Builder imls(Map<Imt, double[]> imls) { - this.imls = imls; - return this; - } - - @Override - public Builder imts(List<Imt> imts) { - super.imts(imts); - return this; - } - - @Override - public Builder latitudes(double[] latitudes) { - super.latitudes(latitudes); - return this; - } - - @Override - public Builder longitudes(double[] longitudes) { - super.longitudes(longitudes); - return this; - } - - @Override - public Builder scienceBaseMetadata(ScienceBaseMetadata scienceBaseMetadata) { - super.scienceBaseMetadata(scienceBaseMetadata); - return this; - } - - @Override - public Builder siteClasses(List<NehrpSiteClass> siteClasses) { - super.siteClasses(siteClasses); - return this; - } - - @Override - public Builder vs30Map(Map<NehrpSiteClass, Double> vs30Map) { - super.vs30Map(vs30Map); - return this; - } - - public NetcdfDataHazardCurves build() { - checkBuildState(); - return new NetcdfDataHazardCurves(this); - } - - void checkBuildState() { - super.checkBuildState(); - checkState(!imls.isEmpty(), "Must add imls"); - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/NetcdfShape.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/NetcdfShape.java deleted file mode 100644 index 698207bf4ae2a9d5c1c4cd5b24ad11ac491a8633..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/NetcdfShape.java +++ /dev/null @@ -1,139 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.data; - -import static com.google.common.base.Preconditions.checkState; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -/** - * Create NetCDF shapes and keep track of indices. - * - * @author U.S. Geological Survey - */ -public class NetcdfShape { - - private final Map<IndexKey, Integer> indexMap; - - private NetcdfShape(Builder builder) { - indexMap = builder.indexMap; - } - - /** - * Returns builder to build a NetCDF shape. - */ - public static Builder builder() { - return new Builder(); - } - - /** - * Returns a builder to build an array shape for NetCDF origin and shapes. - */ - public BuildShape buildShape() { - return new BuildShape(); - } - - public class BuildShape { - List<KeySize> keySizes; - Optional<Integer> pad = Optional.empty(); - boolean reduce = false; - - private BuildShape() { - keySizes = new ArrayList<>(); - } - - /** - * Add key and associated size for shape. - * - * @param key The key - * @param size The size - */ - public BuildShape add(IndexKey key, int size) { - checkState(indexMap.containsKey(key), String.format("Key [%s] not found in shape", key)); - keySizes.add(new KeySize(key, size)); - return this; - } - - /** - * Change to padding value of 0. - * - * Not used if reducing shape. - * - * @param value The value to pad the array shape - */ - public BuildShape pad(int value) { - pad = Optional.of(value); - return this; - } - - /** - * Reduce the array to only added keys in builder. - */ - public BuildShape reduce() { - reduce = true; - return this; - } - - /** - * Returns the shape array. - */ - public int[] build() { - if (reduce) { - var reducePad = -1; - return build(reducePad).stream() - .mapToInt(Integer::intValue) - .filter(val -> val != reducePad) - .toArray(); - } else { - return build(pad.orElse(0)).stream().mapToInt(Integer::intValue).toArray(); - } - } - - private List<Integer> build(int pad) { - var shape = new ArrayList<>(Collections.nCopies(indexMap.size(), pad)); - keySizes.forEach(keySize -> { - shape.set(indexMap.get(keySize.indexKey), keySize.size); - }); - - return shape; - } - } - - public static class KeySize { - public final IndexKey indexKey; - public final int size; - - private KeySize(IndexKey indexKey, int size) { - this.indexKey = indexKey; - this.size = size; - } - } - - public static enum IndexKey { - IML, - IMT, - LATITUDE, - LONGITUDE, - SITE_CLASS; - } - - public static class Builder { - Map<IndexKey, Integer> indexMap; - - private Builder() { - indexMap = new HashMap<>(); - } - - public Builder add(IndexKey key, int index) { - indexMap.put(key, index); - return this; - } - - public NetcdfShape build() { - return new NetcdfShape(this); - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/ScienceBaseInfo.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/ScienceBaseInfo.java deleted file mode 100644 index a57b2422537863b90b4404d86dfadfd4eb2b6e2a..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/ScienceBaseInfo.java +++ /dev/null @@ -1,38 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.data; - -public class ScienceBaseInfo { - - final String id; - final String file; - final CatalogFileInfo[] files; - final String scienceBaseVersion; - final String title; - final String url; - - ScienceBaseInfo( - String id, - String file, - CatalogFileInfo[] files, - String scienceBaseVersion, - String title, - String url) { - this.id = id; - this.file = file; - this.files = files; - this.scienceBaseVersion = scienceBaseVersion; - this.title = title; - this.url = url; - } - - static class CatalogFileInfo { - final String file; - final String siteClass; - final String vs30; - - CatalogFileInfo(String file, String siteClass, String vs30) { - this.file = file; - this.siteClass = siteClass; - this.vs30 = vs30; - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/ScienceBaseMetadata.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/ScienceBaseMetadata.java deleted file mode 100644 index 556087b6420b90c137bbc5d126dad2854e149377..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/ScienceBaseMetadata.java +++ /dev/null @@ -1,38 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.data; - -import com.google.common.reflect.TypeToken; -import com.google.gson.Gson; - -import gov.usgs.earthquake.nshmp.netcdf.NetcdfDataType; -import gov.usgs.earthquake.nshmp.netcdf.reader.NetcdfUtils.Key; - -import ucar.nc2.Group; - -public class ScienceBaseMetadata { - - public final String catalogId; - public final NetcdfDataType dataType; - public final String description; - public final double gridStep; - public final String history; - public final String label; - public final String region; - public final ScienceBaseInfo[] scienceBaseInfo; - public final int year; - - static final Gson GSON = new Gson(); - - public ScienceBaseMetadata(Group targetGroup) { - catalogId = targetGroup.findAttribute(Key.ID).getStringValue(); - dataType = NetcdfDataType.valueOf(targetGroup.findAttribute(Key.DATA_TYPE).getStringValue()); - description = targetGroup.findAttribute(Key.DESCRIPTION).getStringValue(); - gridStep = targetGroup.findAttribute(Key.GRID_STEP).getNumericValue().doubleValue(); - history = targetGroup.findAttribute(Key.HISTORY).getStringValue(); - label = targetGroup.findAttribute(Key.LABEL).getStringValue(); - region = targetGroup.findAttribute(Key.REGION).getStringValue(); - scienceBaseInfo = GSON.fromJson( - targetGroup.findAttribute(Key.SCIENCE_BASE_INFO).getStringValue(), - new TypeToken<ScienceBaseInfo[]>() {}.getType()); - year = targetGroup.findAttribute(Key.YEAR).getNumericValue().intValue(); - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/StaticData.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/StaticData.java deleted file mode 100644 index 21642ae253a2c6c1974a48a8a8779e7aeb2505e6..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/StaticData.java +++ /dev/null @@ -1,46 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.data; - -import static com.google.common.base.Preconditions.checkState; - -import java.util.EnumMap; - -import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass; - -/** - * NEHRP site class to data mapper. - * - * @author U.S. Geological Survey - */ -public class StaticData<T> extends EnumMap<NehrpSiteClass, T> { - - public StaticData() { - super(NehrpSiteClass.class); - } - - StaticData(EnumMap<NehrpSiteClass, T> data) { - super(NehrpSiteClass.class); - putAll(data); - } - - public static <T> Builder<T> builder() { - return new Builder<T>(); - } - - public static class Builder<T> { - EnumMap<NehrpSiteClass, T> data; - - private Builder() { - data = new EnumMap<>(NehrpSiteClass.class); - } - - public Builder<T> put(NehrpSiteClass siteClass, T data) { - this.data.put(siteClass, data); - return this; - } - - public StaticData<T> build() { - checkState(!data.isEmpty(), "Must add data"); - return new StaticData<T>(data); - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/StaticDataHazardCurves.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/StaticDataHazardCurves.java deleted file mode 100644 index e630a1eed18bc099d7265af88932976432754eb9..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/data/StaticDataHazardCurves.java +++ /dev/null @@ -1,47 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.data; - -import static com.google.common.base.Preconditions.checkState; - -import java.util.EnumMap; - -import gov.usgs.earthquake.nshmp.data.XySequence; -import gov.usgs.earthquake.nshmp.gmm.Imt; - -/** - * IMT to XySequence mapper. - * - * @auther U.S. Geological Survey - */ -public class StaticDataHazardCurves extends EnumMap<Imt, XySequence> { - - public StaticDataHazardCurves() { - super(Imt.class); - } - - private StaticDataHazardCurves(EnumMap<Imt, XySequence> staticHazard) { - super(Imt.class); - putAll(staticHazard); - } - - public static Builder builder() { - return new Builder(); - } - - public static class Builder { - EnumMap<Imt, XySequence> staticHazard; - - private Builder() { - staticHazard = new EnumMap<>(Imt.class); - } - - public Builder put(Imt imt, XySequence xySequence) { - staticHazard.put(imt, xySequence); - return this; - } - - public StaticDataHazardCurves build() { - checkState(!staticHazard.isEmpty(), "Must add hazards"); - return new StaticDataHazardCurves(staticHazard); - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReader.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReader.java deleted file mode 100644 index 83f5c2e3cfab7d21a6a56b1678b7b6667cc80cb1..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReader.java +++ /dev/null @@ -1,135 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.reader; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -import gov.usgs.earthquake.nshmp.geo.Location; -import gov.usgs.earthquake.nshmp.geo.LocationList; -import gov.usgs.earthquake.nshmp.netcdf.Netcdf; -import gov.usgs.earthquake.nshmp.netcdf.data.BoundingData; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfData; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape.IndexKey; -import gov.usgs.earthquake.nshmp.netcdf.data.StaticData; - -import ucar.ma2.Array; - -/** - * Abstract class to read in NetCDF file and create the bounding locations and - * associated data. - * - * @author U.S. Geological Survey - */ -public abstract class BoundingReader<T> { - - private final NetcdfData netcdfData; - private BoundingData<T> boundingData; - private List<BoundingLocation> boundingLocations = new ArrayList<>(); - - BoundingReader(Netcdf<T> netcdf, Location site) { - this.netcdfData = netcdf.netcdfData(); - boundingLocations = setBoundingLocations(netcdf, site); - boundingData = setBoundingData(netcdf, site, boundingLocations); - } - - /** - * Returns the bounding data associated with a location - */ - public BoundingData<T> boundingData() { - return boundingData; - } - - /** - * Returns the bounding locations - */ - LocationList boundingLocations() { - var locations = boundingLocations.stream() - .map(boundingLocation -> boundingLocation.location) - .collect(Collectors.toList()); - - return LocationList.copyOf(locations); - } - - abstract StaticData<T> calculateTargetData( - List<BoundingLocation> boundingLocations, - BoundingData<T> boundingData, - double fracLon, - double fracLat); - - abstract BoundingData<T> extractDataAt( - Netcdf<T> netcdf, - List<BoundingLocation> boundingLocations, - int idxLonLL, - int idxLatLL); - - /** - * Get data for target point - * - * @param d1 data at first point (p1) - * @param d2 data at second point (p2) - * @param frac fractional distance between p1 and p2 to target point - */ - abstract StaticData<T> getTargetData(StaticData<T> d1, StaticData<T> d2, double frac); - - /* - * Read hazard curves from netCDF variable into map of hazards by SiteClass - * and Imt - * - * TODO: if target is on a grid point (or on a grid lat or lon), no need to - * read 4 bounding points ? - */ - abstract StaticData<T> mapDataFromArray( - Netcdf<T> netcdf, - Array array); - - /** - * Set the bounding data - */ - abstract BoundingData<T> setBoundingData( - Netcdf<T> netcdf, - Location site, - List<BoundingLocation> boundingLocations); - - static class BoundingLocation { - final Location location; - final int[] origin; - - BoundingLocation( - NetcdfShape netcdfShape, - Location location, - int longitudeIndex, - int latitudeIndex) { - this.location = location; - origin = netcdfShape.buildShape() - .add(IndexKey.LATITUDE, latitudeIndex) - .add(IndexKey.LONGITUDE, longitudeIndex) - .build(); - } - } - - private List<BoundingLocation> setBoundingLocations(Netcdf<T> netcdf, Location site) { - var boundingLocations = new ArrayList<BoundingLocation>(); - var longitudes = netcdfData.longitudes(); - var latitudes = netcdfData.latitudes(); - - var idxLonLL = NetcdfUtils.getIdxLTEQ(longitudes, site.longitude); - var idxLatLL = NetcdfUtils.getIdxLTEQ(latitudes, site.latitude); - - var lonLeft = longitudes[idxLonLL]; - var lonRight = longitudes[idxLonLL + 1]; - var latLower = latitudes[idxLatLL]; - var latUpper = latitudes[idxLatLL + 1]; - - boundingLocations.add( - new BoundingLocation(netcdf.netcdfShape(), Location.create(lonLeft, latLower), 0, 0)); - boundingLocations.add( - new BoundingLocation(netcdf.netcdfShape(), Location.create(lonLeft, latUpper), 0, 1)); - boundingLocations.add( - new BoundingLocation(netcdf.netcdfShape(), Location.create(lonRight, latUpper), 1, 1)); - boundingLocations.add( - new BoundingLocation(netcdf.netcdfShape(), Location.create(lonRight, latLower), 1, 0)); - - return boundingLocations; - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderGroundMotions.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderGroundMotions.java deleted file mode 100644 index 1923bfd08d08719360b9832e3a879fbdb5bc35fa..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderGroundMotions.java +++ /dev/null @@ -1,194 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.reader; - -import java.io.IOException; -import java.util.List; - -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.netcdf.Netcdf; -import gov.usgs.earthquake.nshmp.netcdf.NetcdfGroundMotions; -import gov.usgs.earthquake.nshmp.netcdf.data.BoundingData; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape.IndexKey; -import gov.usgs.earthquake.nshmp.netcdf.data.StaticData; -import gov.usgs.earthquake.nshmp.netcdf.reader.NetcdfUtils.Key; - -import ucar.ma2.Array; -import ucar.ma2.DataType; -import ucar.ma2.InvalidRangeException; -import ucar.nc2.dataset.NetcdfDatasets; - -/** - * Creates the bounding locations and data associated with a specific site for - * ground motions. - * - * @author U.S. Geological Survey - */ -public class BoundingReaderGroundMotions extends BoundingReader<XySequence> { - - public static final double PGA_VALUE = 0.001; - public static final double PGV_VALUE = 0.0001; - - public BoundingReaderGroundMotions(NetcdfGroundMotions netcdf, Location site) { - super(netcdf, site); - } - - @Override - StaticData<XySequence> calculateTargetData( - List<BoundingLocation> boundingLocations, - BoundingData<XySequence> boundingData, - double fracLon, - double fracLat) { - var westTarget = getTargetData( - boundingData.get(boundingLocations.get(0).location), - boundingData.get(boundingLocations.get(1).location), - fracLat); - - var eastTarget = getTargetData( - boundingData.get(boundingLocations.get(3).location), - boundingData.get(boundingLocations.get(2).location), - fracLat); - - return getTargetData(westTarget, eastTarget, fracLon); - } - - @Override - BoundingData<XySequence> extractDataAt( - Netcdf<XySequence> netcdf, - List<BoundingLocation> boundingLocations, - int idxLonLL, - int idxLatLL) { - try (var ncd = NetcdfDatasets.openDataset(netcdf.netcdfPath().toString())) { - var netcdfData = netcdf.netcdfData(); - var boundingData = BoundingData.<XySequence> builder(); - var targetGroup = ncd.getRootGroup(); - var netcdfShape = netcdf.netcdfShape(); - - // Build origin array, e.g. [lon, lat, 0, 0] - var targetOrigin = netcdfShape.buildShape() - .add(IndexKey.LATITUDE, idxLatLL) - .add(IndexKey.LONGITUDE, idxLonLL) - .build(); - - // Build target shape array, e.g. [2, 2, nImt, nSiteClass] - var targetShape = netcdfShape.buildShape() - .add(IndexKey.SITE_CLASS, netcdfData.siteClasses().size()) - .add(IndexKey.LATITUDE, 2) - .add(IndexKey.LONGITUDE, 2) - .add(IndexKey.IMT, netcdfData.imts().size()) - .build(); - - var groundMotionArray = targetGroup - .findVariableLocal(Key.GROUND_MOTION) - .read(targetOrigin, targetShape); - - // Main data shape, e.g. [1, 1, nImt, nSiteClass] - var shape = netcdfShape.buildShape() - .add(IndexKey.SITE_CLASS, netcdfData.siteClasses().size()) - .add(IndexKey.LATITUDE, 1) - .add(IndexKey.LONGITUDE, 1) - .add(IndexKey.IMT, netcdfData.imts().size()) - .build(); - - for (var boundingLocation : boundingLocations) { - boundingData.put( - boundingLocation.location, - mapDataFromArray(netcdf, groundMotionArray.section(boundingLocation.origin, shape))); - } - - return boundingData.build(); - } catch (IOException | InvalidRangeException e) { - throw new RuntimeException( - "Could not read Netcdf file [" + netcdf.netcdfPath() + "]. " + e.getMessage()); - } - } - - @Override - StaticData<XySequence> getTargetData( - StaticData<XySequence> d1, - StaticData<XySequence> d2, - double frac) { - NetcdfUtils.checkBoundingGroundMotion(d1, d2); - return frac == 0.0 ? d1 - : frac == 1.0 ? d2 : NetcdfUtils.linearInterpolateGroundMotions(d1, d2, frac); - } - - @Override - StaticData<XySequence> mapDataFromArray( - Netcdf<XySequence> netcdf, - Array array) { - var netcdfData = netcdf.netcdfData(); - var staticData = StaticData.<XySequence> builder(); - - for (int iSiteClass = 0; iSiteClass < netcdfData.siteClasses().size(); iSiteClass++) { - var siteClass = netcdfData.siteClasses().get(iSiteClass); - - var imts = netcdfData.imts(); - var periods = imts.stream() - .mapToDouble(imt -> { - if (imt == Imt.PGA) { - return PGA_VALUE; - } else if (imt == Imt.PGV) { - return PGV_VALUE; - } - return imt.period(); - }) - .toArray(); - - // Build origin array, e.g [0, siteClass] - var origin = netcdf.netcdfShape().buildShape() - .add(IndexKey.IMT, 0) - .add(IndexKey.SITE_CLASS, iSiteClass) - .reduce() - .build(); - - // Build shape array, e.g. [nImts, 1] - var shape = netcdf.netcdfShape().buildShape() - .add(IndexKey.IMT, imts.size()) - .add(IndexKey.SITE_CLASS, 1) - .reduce() - .build(); - - try { - var xySequence = XySequence.create( - periods, - (double[]) array.section(origin, shape).reduce().get1DJavaArray(DataType.DOUBLE)); - - staticData.put(siteClass, xySequence); - } catch (InvalidRangeException e) { - throw new RuntimeException(e.getMessage()); - } - } - - return staticData.build(); - } - - @Override - BoundingData<XySequence> setBoundingData( - Netcdf<XySequence> netcdf, - Location site, - List<BoundingLocation> boundingLocations) { - var netcdfGroundMotions = (NetcdfGroundMotions) netcdf; - var netcdfData = netcdfGroundMotions.netcdfData(); - var longitudes = netcdfData.longitudes(); - var latitudes = netcdfData.latitudes(); - var idxLonLL = NetcdfUtils.getIdxLTEQ(longitudes, site.longitude); - var idxLatLL = NetcdfUtils.getIdxLTEQ(latitudes, site.latitude); - - var groundMotions = - extractDataAt(netcdfGroundMotions, boundingLocations, idxLonLL, idxLatLL); - var fracLon = NetcdfUtils.calcGridFrac(longitudes, idxLonLL, site.longitude); - var fracLat = NetcdfUtils.calcGridFrac(latitudes, idxLatLL, site.latitude); - - var builder = BoundingData.<XySequence> builder(); - groundMotions.forEach((key, value) -> builder.put(key, value)); - builder.put( - site, - calculateTargetData(boundingLocations, groundMotions, fracLon, fracLat)) - .build(); - var boundingData = builder.build(); - - NetcdfUtils.checkBoundingGroundMotions(boundingData, boundingLocations.get(0).location); - return boundingData; - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderHazardCurves.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderHazardCurves.java deleted file mode 100644 index 596769d81ff0b96e95879f454ab6b1491cc35e2f..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/BoundingReaderHazardCurves.java +++ /dev/null @@ -1,186 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.reader; - -import java.io.IOException; -import java.util.List; - -import gov.usgs.earthquake.nshmp.data.XySequence; -import gov.usgs.earthquake.nshmp.geo.Location; -import gov.usgs.earthquake.nshmp.netcdf.Netcdf; -import gov.usgs.earthquake.nshmp.netcdf.NetcdfHazardCurves; -import gov.usgs.earthquake.nshmp.netcdf.data.BoundingData; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape.IndexKey; -import gov.usgs.earthquake.nshmp.netcdf.data.StaticData; -import gov.usgs.earthquake.nshmp.netcdf.data.StaticDataHazardCurves; -import gov.usgs.earthquake.nshmp.netcdf.reader.NetcdfUtils.Key; - -import ucar.ma2.Array; -import ucar.ma2.DataType; -import ucar.ma2.InvalidRangeException; -import ucar.nc2.dataset.NetcdfDatasets; - -/** - * Creates the bounding locations and data associated with a specific site for - * hazard curves. - * - * @author U.S. Geological Survey - */ -public class BoundingReaderHazardCurves extends BoundingReader<StaticDataHazardCurves> { - - public BoundingReaderHazardCurves(NetcdfHazardCurves netcdf, Location site) { - super(netcdf, site); - } - - @Override - StaticData<StaticDataHazardCurves> calculateTargetData( - List<BoundingLocation> boundingLocations, - BoundingData<StaticDataHazardCurves> hazards, - double fracLon, - double fracLat) { - var westTarget = getTargetData( - hazards.get(boundingLocations.get(0).location), - hazards.get(boundingLocations.get(1).location), - fracLat); - - var eastTarget = getTargetData( - hazards.get(boundingLocations.get(3).location), - hazards.get(boundingLocations.get(2).location), - fracLat); - - return getTargetData(westTarget, eastTarget, fracLon); - } - - @Override - BoundingData<StaticDataHazardCurves> extractDataAt( - Netcdf<StaticDataHazardCurves> netcdf, - List<BoundingLocation> boundingLocations, - int idxLonLL, - int idxLatLL) { - try (var ncd = NetcdfDatasets.openDataset(netcdf.netcdfPath().toString())) { - var netcdfData = ((NetcdfHazardCurves) netcdf).netcdfData(); - var boundingData = BoundingData.<StaticDataHazardCurves> builder(); - var targetGroup = ncd.getRootGroup(); - var netcdfShape = netcdf.netcdfShape(); - - // Build origin array, e.g. [lon, lat, 0, 0, 0] - var targetOrigin = netcdfShape.buildShape() - .add(IndexKey.LATITUDE, idxLatLL) - .add(IndexKey.LONGITUDE, idxLonLL) - .build(); - - // Build target shape array, e.g. [2, 2, nIML, nIMT, nSiteClass] - var targetShape = netcdfShape.buildShape() - .add(IndexKey.LONGITUDE, 2) - .add(IndexKey.LATITUDE, 2) - .add(IndexKey.IML, netcdfData.nIml()) - .add(IndexKey.IMT, netcdfData.imts().size()) - .add(IndexKey.SITE_CLASS, netcdfData.siteClasses().size()) - .build(); - - var aHazards = targetGroup.findVariableLocal(Key.HAZARD).read(targetOrigin, targetShape); - - // Build final shape array, e.g. [1, 1, nIML, nIMT, nSiteClass] - var shape = netcdfShape.buildShape() - .add(IndexKey.LONGITUDE, 1) - .add(IndexKey.LATITUDE, 1) - .add(IndexKey.IML, netcdfData.nIml()) - .add(IndexKey.IMT, netcdfData.imts().size()) - .add(IndexKey.SITE_CLASS, netcdfData.siteClasses().size()) - .build(); - - for (var boundingLocation : boundingLocations) { - boundingData.put( - boundingLocation.location, - mapDataFromArray(netcdf, aHazards.section(boundingLocation.origin, shape))); - } - - return boundingData.build(); - } catch (IOException | InvalidRangeException e) { - throw new RuntimeException("Could not read Netcdf file [" + netcdf.netcdfPath() + "]"); - } - } - - @Override - StaticData<StaticDataHazardCurves> getTargetData( - StaticData<StaticDataHazardCurves> d1, - StaticData<StaticDataHazardCurves> d2, - double frac) { - NetcdfUtils.checkBoundingHazard(d1, d2); - return frac == 0.0 ? d1 - : frac == 1.0 ? d2 : NetcdfUtils.linearInterpolateHazardCurves(d1, d2, frac); - } - - @Override - StaticData<StaticDataHazardCurves> mapDataFromArray( - Netcdf<StaticDataHazardCurves> netcdf, - Array hazards) { - var netcdfData = ((NetcdfHazardCurves) netcdf).netcdfData(); - var vsImtHazardMap = StaticData.<StaticDataHazardCurves> builder(); - - for (int iSiteClass = 0; iSiteClass < netcdfData.siteClasses().size(); iSiteClass++) { - var siteClass = netcdfData.siteClasses().get(iSiteClass); - var imtHazardMap = StaticDataHazardCurves.builder(); - - for (int iImt = 0; iImt < netcdfData.imts().size(); iImt++) { - var imt = netcdfData.imts().get(iImt); - - // Build origin array, e.g [0, imt, siteClass] - var origin = netcdf.netcdfShape().buildShape() - .add(IndexKey.IML, 0) - .add(IndexKey.IMT, iImt) - .add(IndexKey.SITE_CLASS, iSiteClass) - .reduce() - .build(); - - // Build shape array, e.g. [nIML, 1, 1] - var shape = netcdf.netcdfShape().buildShape() - .add(IndexKey.IML, netcdfData.nIml()) - .add(IndexKey.IMT, 1) - .add(IndexKey.SITE_CLASS, 1) - .reduce() - .build(); - - try { - var xySequence = XySequence.create( - netcdfData.imls().get(imt), - (double[]) hazards.section(origin, shape).reduce().get1DJavaArray(DataType.DOUBLE)); - - imtHazardMap.put(imt, xySequence); - } catch (InvalidRangeException e) { - throw new RuntimeException(e.getMessage()); - } - } - - vsImtHazardMap.put(siteClass, imtHazardMap.build()); - } - - return vsImtHazardMap.build(); - } - - @Override - BoundingData<StaticDataHazardCurves> setBoundingData( - Netcdf<StaticDataHazardCurves> netcdf, - Location site, - List<BoundingLocation> boundingLocations) { - var netcdfHazard = (NetcdfHazardCurves) netcdf; - var netcdfData = netcdfHazard.netcdfData(); - var longitudes = netcdfData.longitudes(); - var latitudes = netcdfData.latitudes(); - var idxLonLL = NetcdfUtils.getIdxLTEQ(longitudes, site.longitude); - var idxLatLL = NetcdfUtils.getIdxLTEQ(latitudes, site.latitude); - - var hazards = extractDataAt(netcdfHazard, boundingLocations, idxLonLL, idxLatLL); - var fracLon = NetcdfUtils.calcGridFrac(longitudes, idxLonLL, site.longitude); - var fracLat = NetcdfUtils.calcGridFrac(latitudes, idxLatLL, site.latitude); - - var builder = BoundingData.<StaticDataHazardCurves> builder(); - hazards.forEach((key, value) -> builder.put(key, value)); - builder.put( - site, - calculateTargetData(boundingLocations, hazards, fracLon, fracLat)) - .build(); - var boundingData = builder.build(); - - NetcdfUtils.checkBoundingHazards(boundingData, boundingLocations.get(0).location); - return boundingData; - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfUtils.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfUtils.java deleted file mode 100644 index abedf45dfe5658fc40f45029b96c3b23bddf2bd7..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/NetcdfUtils.java +++ /dev/null @@ -1,340 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.reader; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; - -import java.io.IOException; -import java.util.Arrays; - -import com.google.common.math.DoubleMath; - -import gov.usgs.earthquake.nshmp.data.XySequence; -import gov.usgs.earthquake.nshmp.geo.Location; -import gov.usgs.earthquake.nshmp.geo.LocationList; -import gov.usgs.earthquake.nshmp.netcdf.data.BoundingData; -import gov.usgs.earthquake.nshmp.netcdf.data.StaticData; -import gov.usgs.earthquake.nshmp.netcdf.data.StaticDataHazardCurves; - -import ucar.ma2.DataType; -import ucar.nc2.Group; - -public class NetcdfUtils { - - // Tolerance for longitude/latitude comparisons - static final double LOCATION_TOLERANCE = 0.000001; - - /** - * Creates a border going clockwise of the given longitudes and latitudes. - * - * @param longitudes The longitudes - * @param latitudes The latitudes - * @return - */ - public static LocationList buildBorder(double[] longitudes, double[] latitudes) { - var builder = LocationList.builder(); - - for (var lat : latitudes) { - builder.add(longitudes[0], lat); - } - - // omit duplicate points at corners - for (var i = 1; i < longitudes.length; i++) { - builder.add(longitudes[i], latitudes[latitudes.length - 1]); - } - - for (var i = latitudes.length - 2; i >= 0; i--) { - builder.add(longitudes[longitudes.length - 1], latitudes[i]); - } - - for (var i = longitudes.length - 2; i >= 0; i--) { - builder.add(longitudes[i], latitudes[0]); - } - - return builder.build(); - } - - /* - * Calculate fractional distance from a1 to t, between a1 and a2 - */ - static double calcFrac(double a1, double a2, double t) { - if (Math.abs(t - a1) < LOCATION_TOLERANCE) { - // target value == a1 - return 0.0; - } else if (Math.abs(t - a2) < LOCATION_TOLERANCE) { - // target value == a2 - return 1.0; - } else { - // calculate fractional distance to t between a[i] and a[i+1] - return (t - a1) / (a2 - a1); - } - } - - /* - * Calculate fractional distance from a[i] to t, between a[i] and a[i+1] - */ - static double calcGridFrac(double[] a, int i, double t) { - return calcFrac(a[i], a[i + 1], t); - } - - /** - * Check whether bounding ground motions contain the same: Site classes, IMTs - * per each site class, and ground motions. - * - * @param a static data A - * @param b static B - */ - static void checkBoundingGroundMotion( - StaticData<XySequence> a, - StaticData<XySequence> b) { - checkState(a.size() == b.size(), "Maps are not the same size"); - checkState(a.keySet().containsAll(b.keySet()), "Site classes do not match"); - a.keySet().forEach(key -> checkXySequence(a.get(key), b.get(key))); - } - - /** - * Checks bounding hazard maps contain the same: Site classes, IMTs per each - * site class, and ground motions per each IMT - * - * @param boundingData The bounding ground motions - */ - static void checkBoundingGroundMotions( - BoundingData<XySequence> boundingData, - Location location) { - checkArgument(boundingData.containsKey(location), "Location not in bounding hazards"); - boundingData.keySet().stream() - .filter(loc -> loc.equals(location)) - .forEach(key -> { - checkBoundingGroundMotion(boundingData.get(location), boundingData.get(key)); - }); - } - - /** - * Check whether bounding hazards contain the same: Site classes, IMTs per - * each site class, and ground motions per each IMT - * - * @param a Bounding hazard map A - * @param b Bounding hazard map B - */ - static void checkBoundingHazard( - StaticData<StaticDataHazardCurves> a, - StaticData<StaticDataHazardCurves> b) { - checkState(a.size() == b.size(), "Maps are not the same size"); - checkState(a.keySet().containsAll(b.keySet()), "Site classes do not match"); - a.keySet().forEach(key -> checkHazards(a.get(key), b.get(key))); - } - - /** - * Checks bounding hazard maps contain the same: Site classes, IMTs per each - * site class, and ground motions per each IMT - * - * @param boundingData The bounding hazards - */ - static void checkBoundingHazards( - BoundingData<StaticDataHazardCurves> boundingData, - Location location) { - checkArgument(boundingData.containsKey(location), "Location not in bounding hazards"); - boundingData.keySet().stream() - .filter(loc -> loc.equals(location)) - .forEach(key -> { - checkBoundingHazard(boundingData.get(location), boundingData.get(key)); - }); - } - - /** - * Check whether hazards contain the same: IMTs and ground motions per each - * IMT - * - * @param a Hazard A - * @param b Hazard B - */ - static void checkHazards( - StaticDataHazardCurves a, - StaticDataHazardCurves b) { - checkState(a.size() == b.size(), "Maps are not the same size"); - checkState(a.keySet().containsAll(b.keySet()), "IMTs do not match"); - a.keySet().forEach(key -> checkXySequence(a.get(key), b.get(key))); - } - - /** - * Check that the X values are identical. - * - * @param a Sequence A - * @param b Sequence B - */ - static void checkXySequence(XySequence a, XySequence b) { - checkState( - Arrays.equals(a.xValues().toArray(), b.xValues().toArray()), - "Hazard curves xValues are not the same"); - } - - /** - * Get a 1D array from a netCDF group. - * - * @param group The netCDF group - * @param key The key to read from the group - * @param dataType The data type to read - * @throws IOException - */ - static Object get1DArray(Group group, String key, DataType dataType) throws IOException { - var var = group.findVariableLocal(key); - checkNotNull( - var, - String.format("Could not find variable [%s] in group [%s]", key, group.getFullName())); - - return var.read().get1DJavaArray(dataType); - } - - /** - * Returns a {@code double[]} from a netCDF group - * - * @param group The netCDF group - * @param key The key to read from the group - * @throws IOException - */ - static double[] getDoubleArray(Group group, String key) throws IOException { - return (double[]) get1DArray(group, key, DataType.DOUBLE); - } - - /* - * find index of first element in a (sorted ascending) that is less than or - * equal to target value t. If target value is equal to the maximum value in a - * (the last element), an index of a.length - 1 is returned. - */ - static int getIdxLTEQ(double[] a, double t) { - // assumes array is in sorted order (a[i] < a[i+1]) - // make sure target is within the range of the array - var n = a.length; - - if (t < a[0] || t > a[n - 1]) { - // should never get here thanks to NshmpNetcdfCoordinates.checkCoords() - throw new IllegalArgumentException( - String.format("Target [%.4f] outside of valid range: %.4f <= t <= %.4f", t, a[0], - a[n - 1])); - } - - // if (t == a[0]) { - if (DoubleMath.fuzzyEquals(a[0], t, LOCATION_TOLERANCE)) { - return 0; - } - // if (t == a[n - 1]) { - if (DoubleMath.fuzzyEquals(a[n - 1], t, LOCATION_TOLERANCE)) { - return n - 2; // return second to last index number - } - - var idx = Arrays.binarySearch(a, t); - if (idx < 0) { - // "exact" match not found, so use index of first value less than target - // this is insertion_point - 1 - // returned idx = -insertion_point - 1 - idx = -1 * (idx + 1) - 1; - // array[idx] <= target - } - - return idx; - } - - /** - * Returns a {@code int[]} from a netCDF group - * - * @param group The netCDF group - * @param key The key to read from the group - * @throws IOException - */ - static int[] getIntArray(Group group, String key) throws IOException { - return (int[]) get1DArray(group, key, DataType.INT); - } - - /** - * Returns a {@code String[]} from a netCDF group - * - * @param group The netCDF group - * @param key The key to read from the group - * @throws IOException - */ - static String[] getStringArray(Group group, String key) throws IOException { - return (String[]) get1DArray(group, key, DataType.STRING); - } - - /* - * Linear interpolation of data values to a target point - */ - static StaticData<StaticDataHazardCurves> linearInterpolateHazardCurves( - StaticData<StaticDataHazardCurves> v1, - StaticData<StaticDataHazardCurves> v2, - double frac) { - checkBoundingHazard(v1, v2); - - var targetMap = StaticData.<StaticDataHazardCurves> builder(); - - v1.keySet().forEach(siteClass -> { - var imtHazards = StaticDataHazardCurves.builder(); - var v1StaticHazards = v1.get(siteClass); - var v2StaticHazards = v2.get(siteClass); - - v1StaticHazards.keySet().forEach(imt -> { - var v1Haz = v1StaticHazards.get(imt).yValues().toArray(); - var v2Haz = v2StaticHazards.get(imt).yValues().toArray(); - var target = new double[v1Haz.length]; - - for (int i = 0; i < v1Haz.length; i++) { - target[i] = v1Haz[i] * (1 - frac) + v2Haz[i] * frac; - } - - var xValues = v1StaticHazards.get(imt).xValues().toArray(); - imtHazards.put(imt, XySequence.create(xValues, target)); - }); - - targetMap.put(siteClass, imtHazards.build()); - }); - - return targetMap.build(); - } - - /* - * Linear interpolation of data values to a target point - */ - static StaticData<XySequence> linearInterpolateGroundMotions( - StaticData<XySequence> v1, - StaticData<XySequence> v2, - double frac) { - checkBoundingGroundMotion(v1, v2); - - var targetMap = StaticData.<XySequence> builder(); - - v1.keySet().forEach(siteClass -> { - var v1Data = v1.get(siteClass).yValues().toArray(); - var v2Data = v2.get(siteClass).yValues().toArray(); - var target = new double[v1Data.length]; - - for (int i = 0; i < v1Data.length; i++) { - target[i] = v1Data[i] * (1 - frac) + v2Data[i] * frac; - } - - var xValues = v1.get(siteClass).xValues().toArray(); - targetMap.put(siteClass, XySequence.create(xValues, target)); - }); - - return targetMap.build(); - } - - public static class Key { - public static final String DESCRIPTION = "description"; - public static final String GRID_STEP = "gridStep"; - public static final String ID = "id"; - public static final String LABEL = "label"; - public static final String DATA_TYPE = "dataType"; - public static final String GROUND_MOTION = "groundMotion"; - public static final String HAZARD = "hazard"; - public static final String HISTORY = "history"; - public static final String IMLS = "iml"; - public static final String IMT = "imt"; - public static final String LAT = "lat"; - public static final String LON = "lon"; - public static final String REGION = "region"; - public static final String SCIENCE_BASE_INFO = "scienceBaseInfo"; - public static final String SITE_CLASS = "siteClass"; - public static final String VS30 = "vs30"; - public static final String YEAR = "year"; - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/Reader.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/Reader.java deleted file mode 100644 index 80f176fe02cb3a9ee6398e51e4b32a64cd4b645a..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/Reader.java +++ /dev/null @@ -1,106 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.reader; - -import java.io.IOException; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import com.google.common.reflect.TypeToken; -import com.google.gson.Gson; - -import gov.usgs.earthquake.nshmp.Maths; -import gov.usgs.earthquake.nshmp.gmm.Imt; -import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfData; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape; -import gov.usgs.earthquake.nshmp.netcdf.data.ScienceBaseMetadata; -import gov.usgs.earthquake.nshmp.netcdf.reader.NetcdfUtils.Key; - -import ucar.ma2.DataType; -import ucar.nc2.Group; - -/** - * Read in NetCDF file. - * - * @author U.S. Geological Survey - */ -public abstract class Reader { - - Group targetGroup; - NetcdfData netcdfData; - private NetcdfShape netcdfShape; - - static final String FLAG_KEY = "flag_key"; - static final Gson GSON = new Gson(); - - public Reader(Group targetGroup) throws IOException { - this.targetGroup = targetGroup; - netcdfData = readData(targetGroup); - netcdfShape = buildNetcdfShape(targetGroup); - } - - public NetcdfShape netcdfShape() { - return netcdfShape; - } - - public NetcdfData netcdfData() { - return netcdfData; - } - - abstract NetcdfShape buildNetcdfShape(Group group); - - NetcdfData readData(Group targetGroup) throws IOException { - var vSiteClass = targetGroup.findVariableLocal(Key.SITE_CLASS); - var vImts = targetGroup.findVariableLocal(Key.IMT); - var vVs30 = targetGroup.findVariableLocal(Key.VS30); - var stringStringMapType = new TypeToken<Map<String, String>>() {}.getType(); - - // get list of IMT enums - Map<String, String> imtFlagKeys = GSON - .fromJson(vImts.findAttribute(FLAG_KEY) - .getValues().toString(), stringStringMapType); - var imts = Arrays.stream((int[]) vImts.read().get1DJavaArray(DataType.INT)) - .boxed() - .map(imtInt -> imtFlagKeys.get(Integer.toString((imtInt)))) - .map(imt -> Imt.valueOf(imt)) - .collect(Collectors.toUnmodifiableList()); - - // get list of SiteClass enums - Map<String, String> siteClassFlagKeys = GSON - .fromJson(vSiteClass.findAttribute(FLAG_KEY) - .getValues().toString(), stringStringMapType); - List<NehrpSiteClass> siteClasses = - Arrays.stream((int[]) vSiteClass.read().get1DJavaArray(DataType.INT)).boxed() - .map(siteClassInt -> siteClassFlagKeys.get(Integer.toString(siteClassInt))) - .map(siteClass -> NehrpSiteClass.valueOf(siteClass)) - .collect(Collectors.toUnmodifiableList()); - - // Get vs30 map - Map<String, Double> vs30FlagKeys = GSON - .fromJson(vVs30.findAttribute(FLAG_KEY).getValues().toString(), - new TypeToken<Map<String, Double>>() {}.getType()); - Map<NehrpSiteClass, Double> vs30Map = vs30FlagKeys.entrySet().stream() - .collect(Collectors.toUnmodifiableMap(entry -> NehrpSiteClass.valueOf(entry.getKey()), - Map.Entry::getValue)); - - var latitudes = Arrays.stream(NetcdfUtils.getDoubleArray(targetGroup, Key.LAT)) - // TODO: Dynamic set location precision from NetCDF - .map(lat -> Maths.round(lat, 3)) - .toArray(); - - var longitudes = Arrays.stream(NetcdfUtils.getDoubleArray(targetGroup, Key.LON)) - // TODO: Dynamic set location precision from NetCDF - .map(lon -> Maths.round(lon, 3)) - .toArray(); - - return NetcdfData.builder() - .imts(imts) - .latitudes(latitudes) - .longitudes(longitudes) - .scienceBaseMetadata(new ScienceBaseMetadata(targetGroup)) - .siteClasses(siteClasses) - .vs30Map(vs30Map) - .build(); - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/ReaderGroundMotions.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/ReaderGroundMotions.java deleted file mode 100644 index f45da139d717469be4fc52160892913a4d392736..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/ReaderGroundMotions.java +++ /dev/null @@ -1,32 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.reader; - -import java.io.IOException; - -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape.IndexKey; -import gov.usgs.earthquake.nshmp.netcdf.reader.NetcdfUtils.Key; - -import ucar.nc2.Group; - -/** - * Read in ground motions NetCDF files - * - * @author U.S. Geological Survey - */ -public class ReaderGroundMotions extends Reader { - - public ReaderGroundMotions(Group targetGroup) throws IOException { - super(targetGroup); - } - - @Override - NetcdfShape buildNetcdfShape(Group group) { - var vData = group.findVariableLocal(Key.GROUND_MOTION); - return NetcdfShape.builder() - .add(IndexKey.IMT, vData.findDimensionIndex(Key.IMT)) - .add(IndexKey.LATITUDE, vData.findDimensionIndex(Key.LAT)) - .add(IndexKey.LONGITUDE, vData.findDimensionIndex(Key.LON)) - .add(IndexKey.SITE_CLASS, vData.findDimensionIndex(Key.SITE_CLASS)) - .build(); - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/ReaderHazardCurves.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/ReaderHazardCurves.java deleted file mode 100644 index b90c086be3d7e1cbe9756a2c69b2d58885daea6c..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/reader/ReaderHazardCurves.java +++ /dev/null @@ -1,99 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.reader; - -import java.io.IOException; -import java.util.Arrays; -import java.util.Collections; -import java.util.EnumMap; -import java.util.List; -import java.util.Map; - -import gov.usgs.earthquake.nshmp.gmm.Imt; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfDataHazardCurves; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape; -import gov.usgs.earthquake.nshmp.netcdf.data.NetcdfShape.IndexKey; -import gov.usgs.earthquake.nshmp.netcdf.reader.NetcdfUtils.Key; - -import ucar.ma2.DataType; -import ucar.ma2.InvalidRangeException; -import ucar.nc2.Group; -import ucar.nc2.Variable; - -/** - * Read in hazard curve NetCDF files. - * - * @author U.S. Geological Survey - */ -public class ReaderHazardCurves extends Reader { - - public ReaderHazardCurves(Group targetGroup) throws IOException { - super(targetGroup); - } - - @Override - public NetcdfDataHazardCurves netcdfData() { - return (NetcdfDataHazardCurves) netcdfData; - } - - @Override - NetcdfDataHazardCurves readData(Group targetGroup) throws IOException { - var coords = super.readData(targetGroup); - var vImls = targetGroup.findVariableLocal(Key.IMLS); - - // get map of IMLs - var imls = mapImls(vImls, coords.imts()); - - return NetcdfDataHazardCurves.builder() - .imls(imls) - .imts(coords.imts()) - .latitudes(coords.latitudes()) - .longitudes(coords.longitudes()) - .scienceBaseMetadata(coords.scienceBaseMetadata()) - .siteClasses(coords.siteClasses()) - .vs30Map(coords.vs30Map()) - .build(); - } - - @Override - NetcdfShape buildNetcdfShape(Group group) { - var vData = group.findVariableLocal(Key.HAZARD); - return NetcdfShape.builder() - .add(IndexKey.IML, vData.findDimensionIndex(Key.IMLS)) - .add(IndexKey.IMT, vData.findDimensionIndex(Key.IMT)) - .add(IndexKey.LATITUDE, vData.findDimensionIndex(Key.LAT)) - .add(IndexKey.LONGITUDE, vData.findDimensionIndex(Key.LON)) - .add(IndexKey.SITE_CLASS, vData.findDimensionIndex(Key.SITE_CLASS)) - .build(); - } - - /* - * convert 2D Iml variable (dimensions Imt, Iml) to map of Imls by Imt - * - * TODO: use MultiMap or SetMultiMap (etc.) to store unique IML sets? Could - * then also initialize the underlying XySequence objects for reading in the - * hazard curves... - */ - private Map<Imt, double[]> mapImls(Variable vImls, List<Imt> imts) { - var nIml = vImls.getShape(1); - Map<Imt, double[]> imtImlMap = new EnumMap<Imt, double[]>(Imt.class); - - for (int j = 0; j < imts.size(); j++) { - var imt = imts.get(j); - - // set origin and shape of double[] Imls to read - var origin = new int[] { j, 0 }; - var shape = new int[] { 1, nIml }; - - try { - imtImlMap.put( - imt, - (double[]) vImls.read(origin, shape).reduce().get1DJavaArray(DataType.DOUBLE)); - } catch (IOException | InvalidRangeException e) { - var msg = "Failed read attempt for vImls with origin: " + - Arrays.toString(origin) + ", shape: " + Arrays.toString(shape); - throw new RuntimeException(msg); - } - } - - return Collections.unmodifiableMap(imtImlMap); - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/Application.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/Application.java deleted file mode 100644 index f17109b94566a6f0b44329ee9e9bd604e2ddbec7..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/Application.java +++ /dev/null @@ -1,21 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.www; - -import io.micronaut.runtime.Micronaut; -import io.swagger.v3.oas.annotations.OpenAPIDefinition; -import io.swagger.v3.oas.annotations.info.Info; - -@OpenAPIDefinition( - info = @Info( - title = "NSHMP Static Data Services", - description = "### Get static curves\n" + - "See the service usage for supported longitudes, " + - "latitudes, and site classes")) -public class Application { - - public static void main(String[] args) { - Micronaut.build(args) - .mainClass(Application.class) - .start(); - } - -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfController.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfController.java deleted file mode 100644 index 81ac818c3b102ab400864839c54d5a8454d4e19b..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfController.java +++ /dev/null @@ -1,167 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.www; - -import java.nio.file.Path; - -import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass; -import gov.usgs.earthquake.nshmp.netcdf.NetcdfDataType; -import gov.usgs.earthquake.nshmp.netcdf.NetcdfGroundMotions; -import gov.usgs.earthquake.nshmp.netcdf.NetcdfHazardCurves; -import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet; - -import io.micronaut.context.annotation.Value; -import io.micronaut.context.event.StartupEvent; -import io.micronaut.core.annotation.Nullable; -import io.micronaut.http.HttpRequest; -import io.micronaut.http.HttpResponse; -import io.micronaut.http.MediaType; -import io.micronaut.http.annotation.Controller; -import io.micronaut.http.annotation.Get; -import io.micronaut.http.annotation.PathVariable; -import io.micronaut.http.annotation.QueryValue; -import io.micronaut.runtime.event.annotation.EventListener; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.inject.Inject; - -/** - * Micronaut controller for getting static hazards or ground motions from a - * NetCDF file. - * - * @see NetcdfService - * - * @author U.S. Geological Survey - */ -@Tag(name = "Static Data") -@Controller("/curves") -public class NetcdfController { - - @Inject - private NshmpMicronautServlet servlet; - - @Value("${nshmp-ws-static.netcdf-file}") - Path netcdfPath; - - NetcdfService service; - - /** - * Read in data type and return the appropriate service to use. - */ - @EventListener - void startup(StartupEvent event) { - var dataType = NetcdfDataType.getDataType(netcdfPath); - - switch (dataType) { - case GROUND_MOTIONS: - var netcdfGroundMotions = new NetcdfGroundMotions(netcdfPath); - service = new NetcdfServiceGroundMotions(netcdfGroundMotions); - break; - case HAZARD_CURVES: - var netcdfHazard = new NetcdfHazardCurves(netcdfPath); - service = new NetcdfServiceHazardCurves(netcdfHazard); - break; - default: - throw new RuntimeException("Data type [" + dataType + "] not supported"); - } - } - - /** - * GET method to return a static curve using URL query. - * - * @param request The HTTP request - * @param longitude The longitude of the site - * @param latitude Latitude of the site - * @param siteClass The site class (optional) - */ - @Operation( - summary = "Returns curve(s) given a longitude, latitude, and/or a site class", - description = "Retrieve static curve(s) from a NSHM NetCDF file.\n\n" + - "For supported longitudes, latitudes, and site classes see the usage information.", - operationId = "netcdf_data_doGetHazard") - @ApiResponse( - description = "Returns a static curve from the NetCDF file", - responseCode = "200", - content = @Content( - schema = @Schema(type = "string"))) - @Get(uri = "{?longitude,latitude,siteClass}", produces = MediaType.APPLICATION_JSON) - public HttpResponse<String> doGet( - HttpRequest<?> request, - @Schema(required = true) @QueryValue @Nullable Double longitude, - @Schema(required = true) @QueryValue @Nullable Double latitude, - @QueryValue @Nullable NehrpSiteClass siteClass) { - var query = new Query(longitude, latitude, siteClass); - return service.handleServiceCall(request, query); - } - - /** - * GET method to return static curves using slash delimited. - * - * @param request The HTTP request - * @param longitude The longitude of the site - * @param latitude Latitude of the site - * @param siteClass The site class - */ - @Operation( - summary = "Returns static curves given a longitude, latitude, and site class.", - description = "Retrieve static curves from a NetCDF file.\n\n" + - "For supported longitudes, latitudes, and site classes see the usage information.", - operationId = "netcdf_data_doGetHazardSlashWithSiteClass") - @ApiResponse( - description = "Returns static curves from the NetCDF file", - responseCode = "200", - content = @Content( - schema = @Schema(type = "string"))) - @Get(uri = "/{longitude}/{latitude}/{siteClass}", produces = MediaType.APPLICATION_JSON) - public HttpResponse<String> doGetSlashBySite( - HttpRequest<?> request, - @Schema(required = true) @PathVariable @Nullable Double longitude, - @Schema(required = true) @PathVariable @Nullable Double latitude, - @Schema(required = true) @PathVariable @Nullable NehrpSiteClass siteClass) { - return doGet(request, longitude, latitude, siteClass); - } - - /** - * 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 - */ - @Operation( - summary = "Returns static curves given a longitude and latitude.", - description = "Retrieve static curves from a NetCDF file.\n\n" + - "For supported longitudes and latitudes see the usage information.", - operationId = "netcdf_data_doGetHazardSlash") - @ApiResponse( - description = "Returns static curves from the NSHM NetCDF file", - responseCode = "200", - content = @Content( - schema = @Schema(type = "string"))) - @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) { - return doGet(request, longitude, latitude, null); - } - - static class Query { - final Double longitude; - final Double latitude; - final NehrpSiteClass siteClass; - - Query(Double longitude, Double latitude, NehrpSiteClass siteClass) { - this.longitude = longitude; - this.latitude = latitude; - this.siteClass = siteClass; - } - } - - static enum Service { - BOUNDING, - CURVES, - CURVES_BY_SITE_CLASS, - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java deleted file mode 100644 index 0453caa34d443a271a73fe8cc824611deaaa54e1..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java +++ /dev/null @@ -1,229 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.www; - -import static gov.usgs.earthquake.nshmp.netcdf.www.NetcdfWsUtils.GSON; - -import java.util.Map; -import java.util.logging.Logger; - -import gov.usgs.earthquake.nshmp.Maths; -import gov.usgs.earthquake.nshmp.data.XySequence; -import gov.usgs.earthquake.nshmp.geo.Location; -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.NetcdfController.Query; -import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfController.Service; -import gov.usgs.earthquake.nshmp.netcdf.www.meta.DoubleParameter; -import gov.usgs.earthquake.nshmp.www.Response; - -import io.micronaut.http.HttpRequest; -import io.micronaut.http.HttpResponse; - -/** - * Abstract service handler for {@code NetcdfController}. - * - * @see NetcdfController - * - * @author U.S. Geological Survey - */ -public abstract class NetcdfService { - - protected static final Logger LOGGER = Logger.getLogger(NetcdfService.class.getName()); - - Netcdf<?> netcdf; - - protected NetcdfService(Netcdf<?> netcdf) { - this.netcdf = netcdf; - } - - /** - * Returns the metadata response. - * - * @param httpRequest The HTTP request - */ - abstract Response<String, Metadata> getMetadataResponse(HttpRequest<?> httpRequest); - - /** - * Returns the service name - */ - abstract String getServiceName(); - - /** - * 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 <T> Response<RequestData, T> 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 <T> Response<RequestDataSiteClass, T> processCurvesSiteClass( - RequestDataSiteClass request, - String url); - - /** - * Process the service request and returns the reponse. - * - * @param httpRequest The HTTP request - * @param query The HTTP query - * @param service The NetCDF service - */ - abstract Response<?, ?> processRequest(HttpRequest<?> httpRequest, Query query, Service service); - - /** - * Handler of HTTP request, returns the service response. - * - * @param httpRequest The HTTP request - * @param query The service query - */ - HttpResponse<String> handleServiceCall(HttpRequest<?> httpRequest, Query query) { - try { - var url = httpRequest.getUri().toString(); - LOGGER.info("Request: " + url); - LOGGER.fine("Query:\n" + GSON.toJson(query)); - - if (query.longitude == null && query.latitude == null) { - return metadata(httpRequest); - } - var service = getService(query); - Response<?, ?> svcResponse = processRequest(httpRequest, query, service); - var response = GSON.toJson(svcResponse); - LOGGER.fine("Result:\n" + response); - return HttpResponse.ok(response); - } catch (Exception e) { - var url = httpRequest.getUri().toString(); - return NetcdfWsUtils.handleError(e, getServiceName(), url); - } - } - - private Service getService(Query query) { - if (query.siteClass != null) { - return Service.CURVES_BY_SITE_CLASS; - } else { - return Service.CURVES; - } - } - - private HttpResponse<String> metadata(HttpRequest<?> httpRequest) { - var svcResponse = getMetadataResponse(httpRequest); - var response = GSON.toJson(svcResponse); - LOGGER.fine("Result:\n" + response); - return HttpResponse.ok(response); - } - - class Metadata { - final String description; - final String[] syntax; - final SourceModel model; - final DoubleParameter longitude; - final DoubleParameter latitude; - final DoubleParameter vs30; - final NetcdfMetadata netcdfMetadata; - - Metadata(HttpRequest<?> request, String description) { - 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 bounds = netcdf().netcdfData().bounds(); - longitude = new DoubleParameter( - "Longitude", - "°", - Maths.round(bounds.min.longitude, 3), - Maths.round(bounds.max.longitude, 3)); - latitude = new DoubleParameter( - "Latitude", - "°", - Maths.round(bounds.min.latitude, 3), - Maths.round(bounds.max.latitude, 3)); - model = new SourceModel(); - vs30 = new DoubleParameter( - "Vs30", - "m/s", - 150, - 1500); - netcdfMetadata = new NetcdfMetadata(); - } - } - - class NetcdfMetadata { - final String netcdfFile; - final ScienceBaseMetadata scienceBaseMetadata; - - NetcdfMetadata() { - var fileName = netcdf.netcdfPath().getFileName(); - netcdfFile = fileName == null ? netcdf().netcdfPath().toString() : fileName.toString(); - scienceBaseMetadata = netcdf().netcdfData().scienceBaseMetadata(); - } - } - - class SourceModel { - final String name; - final Map<NehrpSiteClass, Double> siteClasses; - - SourceModel() { - name = netcdf().netcdfData().scienceBaseMetadata().label; - siteClasses = netcdf().netcdfData().vs30Map(); - } - } - - static class ResponseMetadata extends RequestDataSiteClass { - final String xLabel; - final String yLabel; - - ResponseMetadata( - String xLabel, - String yLabel, - Location site, - NehrpSiteClass siteClass) { - super(site, siteClass); - this.xLabel = xLabel; - this.yLabel = yLabel; - } - } - - static class ResponseData<T extends ResponseMetadata> { - final T metadata; - final XySequence data; - - ResponseData(T metadata, XySequence data) { - this.metadata = metadata; - this.data = data; - } - } - - static class RequestData { - Location site; - - RequestData(Location site) { - this.site = site; - } - } - - static class RequestDataSiteClass extends RequestData { - NehrpSiteClass siteClass; - - RequestDataSiteClass(Location site, NehrpSiteClass siteClass) { - super(site); - this.siteClass = siteClass; - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceGroundMotions.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceGroundMotions.java deleted file mode 100644 index 4624d09c6d4c9aa816e29c6462d119c7d269f31f..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceGroundMotions.java +++ /dev/null @@ -1,136 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.www; - -import java.util.List; -import java.util.Map; -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.NetcdfGroundMotions; -import gov.usgs.earthquake.nshmp.netcdf.data.StaticData; -import gov.usgs.earthquake.nshmp.netcdf.reader.BoundingReaderGroundMotions; -import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfController.Query; -import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfController.Service; -import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfWsUtils.Key; -import gov.usgs.earthquake.nshmp.www.Response; -import gov.usgs.earthquake.nshmp.www.WsUtils; -import gov.usgs.earthquake.nshmp.www.meta.Status; - -import io.micronaut.http.HttpRequest; - -/** - * Handles service calls for ground motions. - * - * @see NetcdfController - * - * @author U.S. Geological Survey - */ -public class NetcdfServiceGroundMotions extends NetcdfService { - - static final String SERVICE_DESCRIPTION = "Get static ground motions from a NetCDF file"; - static final String SERVICE_NAME = "Static Ground Motions"; - static final String X_LABEL = "Period (s)"; - static final String Y_LABEL = "Median Ground Motion (g)"; - - protected NetcdfServiceGroundMotions(NetcdfGroundMotions netcdf) { - super(netcdf); - } - - @Override - Response<String, Metadata> getMetadataResponse(HttpRequest<?> request) { - var metadata = new Metadata(request, SERVICE_DESCRIPTION); - var url = request.getUri().toString(); - return new Response<>(Status.USAGE, SERVICE_NAME, url, metadata, url); - } - - @Override - String getServiceName() { - return SERVICE_NAME; - } - - @Override - NetcdfGroundMotions netcdf() { - return (NetcdfGroundMotions) netcdf; - } - - @Override - Response<?, ?> processRequest(HttpRequest<?> httpRequest, Query query, Service service) { - var site = Location.create(query.longitude, query.latitude); - var requestData = new RequestData(site); - var url = httpRequest.getUri().toString(); - - switch (service) { - case CURVES: - return processCurves(requestData, url); - case CURVES_BY_SITE_CLASS: - requestData = new RequestDataSiteClass(site, query.siteClass); - return processCurvesSiteClass( - (RequestDataSiteClass) requestData, url); - default: - throw new RuntimeException("Netcdf service [" + service + "] not found"); - } - } - - @Override - Response<RequestDataSiteClass, ResponseData<ResponseMetadata>> processCurvesSiteClass( - RequestDataSiteClass request, - String url) { - WsUtils.checkValue(Key.LATITUDE, request.site.latitude); - WsUtils.checkValue(Key.LONGITUDE, request.site.longitude); - WsUtils.checkValue(Key.SITE_CLASS, request.siteClass); - var curves = netcdf().staticData(request.site, request.siteClass); - var responseData = toResponseData(request, curves); - return new Response<>(Status.SUCCESS, SERVICE_NAME, request, responseData, url); - } - - @Override - Response<RequestData, List<ResponseData<ResponseMetadata>>> processCurves(RequestData request, - String url) { - WsUtils.checkValue(Key.LATITUDE, request.site.latitude); - WsUtils.checkValue(Key.LONGITUDE, request.site.longitude); - var curves = netcdf().staticData(request.site); - var responseData = toList(request.site, curves); - return new Response<>(Status.SUCCESS, SERVICE_NAME, request, responseData, url); - } - - List<ResponseData<ResponseMetadata>> toList( - Location site, - StaticData<XySequence> curves) { - return curves.entrySet().stream() - .map(entry -> { - var request = new RequestDataSiteClass(site, entry.getKey()); - return toResponseData(request, entry.getValue()); - }) - .collect(Collectors.toList()); - } - - ResponseData<ResponseMetadata> toResponseData( - RequestDataSiteClass request, - XySequence curves) { - var metadata = new ResponseMetadataGroundMotions( - X_LABEL, - Y_LABEL, - request.site, - request.siteClass); - return new ResponseData<>(metadata, curves); - } - - static class ResponseMetadataGroundMotions extends ResponseMetadata { - Map<String, Double> imtValues; - - ResponseMetadataGroundMotions( - String xLabel, - String yLabel, - Location site, - NehrpSiteClass siteClass) { - super(xLabel, yLabel, site, siteClass); - imtValues = Map.of( - Imt.PGA.name(), - BoundingReaderGroundMotions.PGA_VALUE, - Imt.PGV.name(), - BoundingReaderGroundMotions.PGV_VALUE); - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceHazardCurves.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceHazardCurves.java deleted file mode 100644 index 51c5842d2fe0fd2beab761ed80e0ab5cd8fa1f62..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceHazardCurves.java +++ /dev/null @@ -1,141 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.www; - -import java.util.List; -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.data.StaticData; -import gov.usgs.earthquake.nshmp.netcdf.data.StaticDataHazardCurves; -import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfController.Query; -import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfController.Service; -import gov.usgs.earthquake.nshmp.netcdf.www.NetcdfWsUtils.Key; -import gov.usgs.earthquake.nshmp.www.Response; -import gov.usgs.earthquake.nshmp.www.WsUtils; -import gov.usgs.earthquake.nshmp.www.meta.Status; - -import io.micronaut.http.HttpRequest; - -/** - * Handles service calls for hazard curves. - * - * @see NetcdfController - * - * @author U.S. Geological Survey - */ -public class NetcdfServiceHazardCurves extends NetcdfService { - - 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"; - - NetcdfServiceHazardCurves(NetcdfHazardCurves netcdf) { - super(netcdf); - } - - @Override - Response<String, Metadata> getMetadataResponse(HttpRequest<?> request) { - var metadata = new Metadata(request, SERVICE_DESCRIPTION); - var url = request.getUri().toString(); - return new Response<>(Status.USAGE, SERVICE_NAME, url, metadata, url); - } - - @Override - String getServiceName() { - return SERVICE_NAME; - } - - @Override - NetcdfHazardCurves netcdf() { - return (NetcdfHazardCurves) netcdf; - } - - @Override - Response<RequestData, List<List<ResponseData<ResponseMetadataHazard>>>> processCurves( - RequestData request, - String url) { - WsUtils.checkValue(Key.LATITUDE, request.site.latitude); - WsUtils.checkValue(Key.LONGITUDE, request.site.longitude); - var curves = netcdf().staticData(request.site); - var curvesAsList = toList(request.site, curves); - return new Response<>(Status.SUCCESS, SERVICE_NAME, request, curvesAsList, url); - } - - @Override - Response<RequestDataSiteClass, List<ResponseData<ResponseMetadataHazard>>> processCurvesSiteClass( - RequestDataSiteClass request, - String url) { - WsUtils.checkValue(Key.LATITUDE, request.site.latitude); - WsUtils.checkValue(Key.LONGITUDE, request.site.longitude); - WsUtils.checkValue(Key.SITE_CLASS, request.siteClass); - var curves = netcdf().staticData(request.site, request.siteClass); - var curvesAsList = toList(request, curves); - return new Response<>(Status.SUCCESS, SERVICE_NAME, request, curvesAsList, url); - } - - @Override - Response<?, ?> processRequest(HttpRequest<?> httpRequest, Query query, Service service) { - var site = Location.create(query.longitude, query.latitude); - var requestData = new RequestData(site); - var url = httpRequest.getUri().toString(); - - switch (service) { - case CURVES: - return processCurves(requestData, url); - case CURVES_BY_SITE_CLASS: - requestData = new RequestDataSiteClass(site, query.siteClass); - return processCurvesSiteClass( - (RequestDataSiteClass) requestData, url); - default: - throw new RuntimeException("Netcdf service [" + service + "] not found"); - } - } - - List<ResponseData<ResponseMetadataHazard>> toList( - RequestDataSiteClass request, - StaticDataHazardCurves curves) { - return curves.entrySet().stream() - .map((entry) -> { - return toResponseData(request, entry.getKey(), entry.getValue()); - }) - .collect(Collectors.toList()); - } - - List<List<ResponseData<ResponseMetadataHazard>>> toList( - Location site, - StaticData<StaticDataHazardCurves> curves) { - return curves.entrySet().stream() - .map(entry -> { - var request = new RequestDataSiteClass(site, entry.getKey()); - return toList(request, entry.getValue()); - }) - .collect(Collectors.toList()); - } - - ResponseData<ResponseMetadataHazard> toResponseData( - RequestDataSiteClass request, - Imt imt, - XySequence curves) { - var metadata = - new ResponseMetadataHazard(X_LABEL, Y_LABEL, request.site, request.siteClass, imt); - return new ResponseData<>(metadata, curves); - } - - static class ResponseMetadataHazard extends ResponseMetadata { - final Imt imt; - - ResponseMetadataHazard( - String xLabel, - String yLabel, - Location site, - NehrpSiteClass siteClass, - Imt imt) { - super(xLabel, yLabel, site, siteClass); - this.imt = imt; - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfWsUtils.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfWsUtils.java deleted file mode 100644 index 79dafabeadec0284ad344845b51910568287f8f0..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfWsUtils.java +++ /dev/null @@ -1,79 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.www; - -import static com.google.common.base.CaseFormat.UPPER_CAMEL; -import static com.google.common.base.CaseFormat.UPPER_UNDERSCORE; - -import java.lang.reflect.Type; -import java.util.logging.Logger; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - -import gov.usgs.earthquake.nshmp.Maths; -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.www.Response; -import gov.usgs.earthquake.nshmp.www.WsUtils.EnumSerializer; -import gov.usgs.earthquake.nshmp.www.WsUtils.NaNSerializer; -import gov.usgs.earthquake.nshmp.www.meta.Status; - -import io.micronaut.http.HttpResponse; - -public class NetcdfWsUtils { - static final Gson GSON; - - private static final Logger LOGGER = Logger.getLogger(NetcdfWsUtils.class.getName()); - - static { - GSON = new GsonBuilder() - .registerTypeAdapter(Imt.class, new EnumSerializer<Imt>()) - .registerTypeAdapter(NehrpSiteClass.class, new EnumSerializer<NehrpSiteClass>()) - .registerTypeAdapter(Double.class, new NaNSerializer()) - .registerTypeAdapter(Location.class, new LocationSerializer()) - .disableHtmlEscaping() - .serializeNulls() - .setPrettyPrinting() - .create(); - } - - public static HttpResponse<String> handleError( - Throwable e, - String name, - String url) { - var msg = e.getMessage() + " (see logs)"; - var svcResponse = new Response<>(Status.ERROR, name, url, msg, url); - var response = GSON.toJson(svcResponse); - LOGGER.severe(name + " -\n" + response); - e.printStackTrace(); - return HttpResponse.serverError(response); - } - - static enum Key { - LATITUDE, - LONGITUDE, - SITE_CLASS, - IMT; - - @Override - public String toString() { - return UPPER_UNDERSCORE.to(UPPER_CAMEL, name()); - } - } - - public static final class LocationSerializer implements JsonSerializer<Location> { - - @Override - public JsonElement serialize(Location location, Type type, JsonSerializationContext context) { - JsonObject jObj = new JsonObject(); - jObj.addProperty("longitude", Maths.round(location.longitude, 5)); - jObj.addProperty("latitude", Maths.round(location.latitude, 5)); - - return jObj; - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/SwaggerController.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/SwaggerController.java deleted file mode 100644 index ec3e9dfc765f07f26416d4678e715ac009e5720c..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/SwaggerController.java +++ /dev/null @@ -1,46 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.www; - -import java.nio.charset.StandardCharsets; -import java.util.stream.Collectors; - -import com.google.common.io.Resources; - -import gov.usgs.earthquake.nshmp.www.NshmpMicronautServlet; - -import io.micronaut.http.HttpRequest; -import io.micronaut.http.HttpResponse; -import io.micronaut.http.MediaType; -import io.micronaut.http.annotation.Controller; -import io.micronaut.http.annotation.Get; -import io.swagger.v3.oas.annotations.Hidden; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.inject.Inject; - -/** - * Expose OpenAPI YAML file. - * - * @author U.S. Geological Survey - */ -@Tag( - name = "Swagger", - description = "Swagger OpenAPI YAML") -@Hidden -@Controller("/swagger") -public class SwaggerController { - - @Inject - private NshmpMicronautServlet servlet; - - @Get(produces = MediaType.TEXT_EVENT_STREAM) - public HttpResponse<String> doGet(HttpRequest<?> request) { - try { - var url = Resources.getResource("META-INF/swagger/nshmp-ws-static.yml"); - var yml = Resources.readLines(url, StandardCharsets.UTF_8) - .stream() - .collect(Collectors.joining("\n")); - return HttpResponse.ok(yml); - } catch (Exception e) { - return NetcdfWsUtils.handleError(e, "Swagger", request.getUri().getPath()); - } - } -} diff --git a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/meta/DoubleParameter.java b/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/meta/DoubleParameter.java deleted file mode 100644 index 6a4bd319d258a4b28f2a585c7231213739de187d..0000000000000000000000000000000000000000 --- a/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/meta/DoubleParameter.java +++ /dev/null @@ -1,16 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf.www.meta; - -public final class DoubleParameter { - - private final String name; - private final String units; - private final double min; - private final double max; - - public DoubleParameter(String name, String units, double min, double max) { - this.name = name; - this.units = units; - this.min = min; - this.max = max; - } -} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml deleted file mode 100644 index 448a7d535a1b583240dcdbd0dacac534c08ad192..0000000000000000000000000000000000000000 --- a/src/main/resources/application.yml +++ /dev/null @@ -1,17 +0,0 @@ -micronaut: - io: - watch: - paths: src - restart: true - router: - static-resources: - swagger: - enabled: true - paths: classpath:swagger - mapping: /** - -nshmp-ws-static: - # Hazard example - netcdf-file: ${netcdf:src/main/resources/hazard-example.nc} - # Ground motions example - # netcdf-file: ${netcdf:src/main/resources/rtsa-example.nc} diff --git a/src/main/resources/eclipse.importorder b/src/main/resources/eclipse.importorder deleted file mode 100644 index 2ef1b480f52563e1089abcb404d3476e8a89931b..0000000000000000000000000000000000000000 --- a/src/main/resources/eclipse.importorder +++ /dev/null @@ -1,7 +0,0 @@ -#Organize Import Order -0=java -1=javax -2=org -3=com -4=gov -5=ucar diff --git a/src/main/resources/hazard-example.nc b/src/main/resources/hazard-example.nc deleted file mode 100644 index 521866c0689b6ad029a2bfd7f3461ad9e69363f4..0000000000000000000000000000000000000000 Binary files a/src/main/resources/hazard-example.nc and /dev/null differ diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml deleted file mode 100644 index f74e41693090ae1b24cabe0642f4ec814564c4a1..0000000000000000000000000000000000000000 --- a/src/main/resources/logback.xml +++ /dev/null @@ -1,17 +0,0 @@ -<configuration> - - <appender name="STDOUT" - class="ch.qos.logback.core.ConsoleAppender"> - <withJansi>true</withJansi> - <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder - by default --> - <encoder> - <pattern>%cyan(%d{HH:mm:ss.SSS}) %gray([%thread]) - %highlight(%-5level) %magenta(%logger{36}) - %msg%n</pattern> - </encoder> - </appender> - - <root level="info"> - <appender-ref ref="STDOUT" /> - </root> -</configuration> diff --git a/src/main/resources/nshmp.eclipse-format.xml b/src/main/resources/nshmp.eclipse-format.xml deleted file mode 100644 index 181dbd16d380cb5688372df1ca124177b8c583f0..0000000000000000000000000000000000000000 --- a/src/main/resources/nshmp.eclipse-format.xml +++ /dev/null @@ -1,916 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<profiles version="13"> - <profile kind="CodeFormatterProfile" name="nshmp" version="13"> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" - value="common_lines" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" - value="common_lines" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" - value="1" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" - value="common_lines" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" - value="true" /> - <setting id="org.eclipse.jdt.core.formatter.indentation.size" - value="2" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" - value="common_lines" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" - value="insert" /> - <setting id="org.eclipse.jdt.core.formatter.disabling_tag" - value="@formatter:off" /> - <setting - id="org.eclipse.jdt.core.formatter.continuation_indentation" - value="2" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" - value="81" /> - <setting - id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" - value="1" /> - <setting - id="org.eclipse.jdt.core.formatter.blank_lines_after_package" - value="1" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" - value="common_lines" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" - value="true" /> - <setting id="org.eclipse.jdt.core.formatter.enabling_tag" - value="@formatter:on" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" - value="2" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" - value="0" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" - value="false" /> - <setting - id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" - value="error" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" - value="end_of_line" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.line_length" value="80" /> - <setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" - value="end_of_line" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" - value="0" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" - value="common_lines" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.brace_position_for_block" - value="end_of_line" /> - <setting - id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" - value="end_of_line" /> - <setting - id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" - value="end_of_line" /> - <setting id="org.eclipse.jdt.core.formatter.compact_else_if" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" - value="0" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" - value="16" /> - <setting - id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" - value="error" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" - value="32" /> - <setting - id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" - value="1" /> - <setting - id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" - value="common_lines" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.format_line_comments" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_assignment" - value="80" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" - value="80" /> - <setting - id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" - value="0" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" - value="end_of_line" /> - <setting - id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" - value="end_of_line" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.format_header" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" - value="insert" /> - <setting - id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" - value="enabled" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" - value="0" /> - <setting - id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" - value="2147483647" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" - value="end_of_line" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" - value="80" /> - <setting - id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" - value="common_lines" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" - value="false" /> - <setting id="org.eclipse.jdt.core.compiler.source" value="1.8" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" - value="insert" /> - <setting id="org.eclipse.jdt.core.formatter.tabulation.size" - value="2" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.format_source_code" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.blank_lines_before_field" - value="0" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" - value="2" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.blank_lines_before_method" - value="1" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" - value="80" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" - value="80" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.8" /> - <setting - id="org.eclipse.jdt.core.formatter.brace_position_for_switch" - value="end_of_line" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.format_html" value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" - value="common_lines" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" - value="0" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" - value="1" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" - value="1" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.format_block_comments" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" - value="16" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" - value="end_of_line" /> - <setting - id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" - value="do not insert" /> - <setting id="org.eclipse.jdt.core.compiler.compliance" - value="1.8" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" - value="common_lines" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" - value="end_of_line" /> - <setting - id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" - value="end_of_line" /> - <setting - id="org.eclipse.jdt.core.formatter.blank_lines_before_package" - value="0" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" - value="0" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.join_lines_in_comments" - value="true" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" - value="insert" /> - <setting - id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" - value="false" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" - value="do not insert" /> - <setting id="org.eclipse.jdt.core.formatter.tabulation.char" - value="space" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" - value="1" /> - <setting id="org.eclipse.jdt.core.formatter.lineSplit" - value="100" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" - value="do not insert" /> - <setting - id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" - value="insert" /> - </profile> -</profiles> diff --git a/src/main/resources/rtsa-example.nc b/src/main/resources/rtsa-example.nc deleted file mode 100644 index 0b4e8d883e15107bd60ed7fc8bde3a9da0066427..0000000000000000000000000000000000000000 Binary files a/src/main/resources/rtsa-example.nc and /dev/null differ diff --git a/src/main/resources/swagger/favicon.ico b/src/main/resources/swagger/favicon.ico deleted file mode 100644 index 0c3e87c87b8ecc9900a3b6368598be574e9d0716..0000000000000000000000000000000000000000 Binary files a/src/main/resources/swagger/favicon.ico and /dev/null differ diff --git a/src/main/resources/swagger/index.css b/src/main/resources/swagger/index.css deleted file mode 100644 index 65f90aca32b0c4145e7f2e7fa437cb2448e84b59..0000000000000000000000000000000000000000 --- a/src/main/resources/swagger/index.css +++ /dev/null @@ -1,73 +0,0 @@ -html, -body { - height: 100%; - overflow: hidden; -} - -body { - color: #333; - font-family: 'Roboto', 'Helvetica Neue', Helvetica, Arial, sans-serif; - margin: 0; - overflow: scroll; -} - -#swagger-ui { - padding-top: 1em; - padding-bottom: 50px; -} - -.nshmp-template-header, -.nshmp-template-footer { - background-color: #3d5e80; - box-shadow: 0 1px 8px rgba(0, 0, 0, 0.5); - height: 30px; - padding: 10px; - position: fixed; - width: 100vw; - z-index: 4; -} - -/* ---- Header ---- */ - -.nshmp-template-header { - top: 0; -} - -.nshmp-template-header .nshmp-template-header--logo { - height: 28px; - overflow: hidden; - -} - -.nshmp-template-header--logo .usgs-logo { - display: inline-block; - height: 100%; - position: relative; - -} - -.nshmp-template-header--logo .usgs-logo img { - border: none; - height: 140%; - max-width: 100%; -} - -/* ---- Footer ---- */ - -.nshmp-template-footer { - bottom: 0; - font-size: large; - text-align: center; -} - -.nshmp-template-footer a { - color: white; - cursor: pointer; - line-height: 30px; - padding: 0 1em; - text-decoration: none; -} - -.nshmp-template-footer a:visited { - color: white; -} diff --git a/src/main/resources/swagger/index.html b/src/main/resources/swagger/index.html deleted file mode 100644 index 5bd722b5c63c977af1306b9b58e7b4d85308c8b3..0000000000000000000000000000000000000000 --- a/src/main/resources/swagger/index.html +++ /dev/null @@ -1,54 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <title>NSHMP Static Data Services</title> - <meta charset="UTF-8" /> - <link - rel="icon" - type="image/x-icon" - href="favicon.ico" - /> - <script src="https://unpkg.com/swagger-ui-dist/swagger-ui-bundle.js"></script> - <script src="https://unpkg.com/swagger-ui-dist/swagger-ui-standalone-preset.js"></script> - <link - rel="stylesheet" - type="text/css" - href="https://unpkg.com/swagger-ui-dist/swagger-ui.css" - /> - <link - rel="stylesheet" - type="text/css" - href="https://unpkg.com/swagger-ui-themes@3.0.0/themes/3.x/theme-material.css" - /> - <link - rel="stylesheet" - type="text/css" - href="index.css" - /> - </head> - - <body> - <header class="nshmp-template-header"> - <div class="nshmp-template-header--logo"> - <a href="" class="usgs-logo"> - <img alt="USGS" src="usgs-logo.svg" /> - </a> - </div> - </header> - - <div id="swagger-ui"></div> - - <footer class="nshmp-template-footer"> - <a href="https://code.usgs.gov/ghsc/nshmp/nshmp-ws-static/-/blob/main/LICENSE.md"> - License - </a> - - <a href="https://code.usgs.gov/ghsc/nshmp/nshmp-ws-static/-/blob/main/DISCLAIMER.md"> - Disclaimer - </a> - - </footer> - - <script src="index.js"></script> - </body> -</html> diff --git a/src/main/resources/swagger/index.js b/src/main/resources/swagger/index.js deleted file mode 100644 index 06e5a1326e3df94485c3d6879f3d3d773b4dcecf..0000000000000000000000000000000000000000 --- a/src/main/resources/swagger/index.js +++ /dev/null @@ -1,38 +0,0 @@ -window.onload = function() { - let contextPath = window.location.pathname; - contextPath = contextPath.endsWith('/') ? contextPath.slice(0, -1) : contextPath; - - const ui = SwaggerUIBundle({ - url: `./swagger`, - dom_id: '#swagger-ui', - tagsSorter: 'alpha', - presets: [SwaggerUIBundle.presets.apis, SwaggerUIStandalonePreset], - plugins: [SwaggerUIBundle.plugins.DownloadUrl, updateContextPath(contextPath)], - validatorUrl: null, - deepLinking: true - }); - - window.ui = ui; -}; - -function updateContextPath(contextPath) { - return { - statePlugins: { - spec: { - wrapActions: { - updateJsonSpec: (oriAction) => (...args) => { - const [spec] = args; - if (spec && spec.paths) { - const newPaths = {}; - Object.entries(spec.paths).forEach( - ([path, value]) => (newPaths[contextPath + path] = value) - ); - spec.paths = newPaths; - } - oriAction(...args); - }, - }, - }, - }, - }; -} diff --git a/src/main/resources/swagger/usgs-logo.svg b/src/main/resources/swagger/usgs-logo.svg deleted file mode 100644 index d33f18c4c10451bc3a3540afabb67f420775b8cf..0000000000000000000000000000000000000000 --- a/src/main/resources/swagger/usgs-logo.svg +++ /dev/null @@ -1 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="2353" height="869" viewBox="40.2 28.7 2353.3 869.2"><style>.a{fill:#FFF;}</style><path d="M1135.8 38.7v425.7c0 89.8-50.7 184.6-203.7 184.6 -138 0-204.6-71.5-204.6-184.6V38.7h125.6v417.4c0 74 31.6 103.1 77.3 103.1 54.9 0 79.8-36.6 79.8-103.1V38.7H1135.8z" class="a"/><path d="M1339.9 649c-155.5 0-184.6-91.5-177.9-195.4h125.6c0 57.4 2.5 105.6 71.5 105.6 42.4 0 63.2-27.4 63.2-68.2 0-108.1-252.8-114.7-252.8-293.5 0-94 44.9-168.8 197.9-168.8 122.2 0 182.9 54.9 174.6 180.4h-122.2c0-44.9-7.5-90.6-58.2-90.6 -40.7 0-64.8 22.5-64.8 64 0 113.9 252.8 103.9 252.8 292.7C1549.5 630.7 1435.6 649 1339.9 649z" class="a"/><path d="M2184 649c-155.5 0-184.6-91.5-177.9-195.4h125.6c0 57.4 2.5 105.6 71.5 105.6 42.4 0 63.2-27.4 63.2-68.2 0-108.1-252.8-114.7-252.8-293.5 0-94 44.9-168.8 197.9-168.8 122.2 0 182.9 54.9 174.6 180.4h-122.2c0-44.9-7.5-90.6-58.2-90.6 -40.7 0-64.9 22.5-64.9 64 0 113.9 252.8 103.9 252.8 292.7C2393.6 630.7 2279.6 649 2184 649z" class="a"/><path d="M1784 415.3h73.9v132.5l-6.1 2.3c-19.1 6.7-41.6 11.6-62.4 11.6 -71.5 0-89.8-33.3-89.8-221.2 0-116.4 0-222 78.2-222 60.8 0 73.6 41 74.8 90.6h125.1c1-116.5-74-180.4-192.3-180.4 -205.4 0-212.9 153.8-212.9 305.2 0 227.8 24.7 316.2 235.9 316.2 49 0 127-11.1 163-20.9 2.2-0.6 6.1-3 6.1-6.1 0-16.4 0-298.4 0-298.4h-193.3V415.3L1784 415.3z" class="a"/><path d="M71.3 823.1c-1.2 4.8-2 9.5-1.2 12.8 1 3.4 3.8 5 9.6 5s11.7-3.8 13.2-10.9c4.8-22.5-48.3-17.4-41.2-51.2 4.9-22.9 29-29.8 48.1-29.8 20.1 0 36.3 9.7 29.8 32.5h-29c1.6-7.3 1.7-11.7 0-13.6 -1.5-1.9-3.9-2.3-7.1-2.3 -6.5 0-11 4.2-12.5 11.3 -3.6 16.8 48.7 15.9 41.4 49.9 -3.9 18.5-22 32.3-46.5 32.3 -25.8 0-41.6-6.5-33.7-36.1H71.3L71.3 823.1z" class="a"/><path d="M197.9 789c3.3-15.7 0.5-21-8.8-21 -12.6 0-16 11.1-20.7 33.2 -6.9 32.3-5.6 39.2 5.3 39.2 9.2 0 15.4-8.4 18.4-22.2h29.6c-6.1 28.7-24.3 41.1-52 41.1 -38.2 0-38.3-23.3-31.2-56.4 6.2-28.9 15.6-53.7 54.6-53.7 27.3 0 40.2 12.2 34.3 39.9H197.9z" class="a"/><path d="M258.7 857.1h-29.6l22.5-106h29.6L258.7 857.1zM289.9 710.4l-5 23.3H255.4l5-23.3H289.9z" class="a"/><path d="M1643.2 857.1h-29.6l22.5-106h29.6L1643.2 857.1zM1674.4 710.4l-5 23.3h-29.6l4.9-23.3H1674.4z" class="a"/><path d="M315.8 808.9c-2.7 12.6-6.3 31.5 6.7 31.5 10.5 0 14.7-10.1 16.6-18.9h30c-2.9 11.5-8.7 21-17.2 27.5 -8.3 6.5-19.6 10.3-33.5 10.3 -38.2 0-38.3-23.3-31.2-56.4 6.2-28.9 15.6-53.7 54.6-53.7 39.9 0 38.8 25.8 30.5 59.8H315.8zM346.4 792.3c2.2-10.3 5.7-25-8.3-25 -13.6 0-16.8 15.9-18.7 25H346.4z" class="a"/><path d="M428.3 761.9h0.4c7.9-9.4 16.6-12.8 27.7-12.8 14.1 0 24.7 8.4 21.5 23.1l-18.1 85h-29.6l15.5-73c2-9.4 1.9-16.8-7.6-16.8 -9.4 0-12.7 7.3-14.7 16.8l-15.5 73H378.4l22.5-106h29.6L428.3 761.9z" class="a"/><path d="M545.7 789c3.3-15.7 0.5-21-8.8-21 -12.6 0-16 11.1-20.7 33.2 -6.9 32.3-5.6 39.2 5.3 39.2 9.2 0 15.4-8.4 18.4-22.2h29.6c-6.1 28.7-24.3 41.1-52 41.1 -38.2 0-38.3-23.3-31.2-56.4 6.2-28.9 15.6-53.7 54.6-53.7 27.3 0 40.2 12.2 34.3 39.9H545.7z" class="a"/><path d="M613.3 808.9c-2.7 12.6-6.3 31.5 6.7 31.5 10.5 0 14.7-10.1 16.6-18.9h30c-2.9 11.5-8.7 21-17.2 27.5 -8.3 6.5-19.6 10.3-33.5 10.3 -38.2 0-38.3-23.3-31.2-56.4 6.2-28.9 15.6-53.7 54.6-53.7 39.9 0 38.8 25.8 30.5 59.8H613.3zM643.9 792.3c2.2-10.3 5.7-25-8.3-25 -13.6 0-16.8 15.9-18.7 25H643.9z" class="a"/><path d="M794.1 729.3c-11.8-0.8-15.3 3.8-17.6 14.5l-2.1 7.4h13.8l-3.9 18.3h-13.8l-18.6 87.7h-29.6l18.6-87.7h-13.2l3.9-18.3h13.4c5.9-26.5 11.3-41.2 42.6-41.2 3.6 0 6.9 0.2 10.4 0.4L794.1 729.3z" class="a"/><path d="M784.8 802.8c6.2-28.9 15.6-53.7 54.6-53.7 39 0 38 24.8 31.8 53.7 -7 33.2-17 56.4-55.2 56.4C777.8 859.2 777.7 836 784.8 802.8zM842 801.1c4.7-22 6-33.2-6.6-33.2 -12.6 0-16 11.1-20.7 33.2 -6.9 32.3-5.6 39.2 5.3 39.2C830.9 840.4 835.1 833.4 842 801.1z" class="a"/><path d="M924.3 751.2l-2.9 13.6h0.4c8-12.2 18.9-15.7 30.8-15.7l-5.6 26.4c-25.7-1.7-29.3 13.4-31.5 23.9l-12.3 57.7h-29.6l22.5-106h28.1V751.2z" class="a"/><path d="M1065.3 837.4c-1.4 6.5-2 13.2-2.7 19.7h-27.5l1.7-14.1h-0.4c-8.6 10.9-18.3 16.2-31.1 16.2 -20.6 0-24.9-15.3-20.9-33.8 7.5-35 34.8-36.5 62.2-36.1l1.7-8.2c1.9-9 2-15.5-8.7-15.5 -10.3 0-12.8 7.8-14.6 16.2h-29c2.7-12.8 8.4-21 16.4-25.8 7.8-5 17.8-6.9 29.2-6.9 37.6 0 39 16.2 34.8 35.5L1065.3 837.4zM1013.5 824.2c-1.6 7.6-2.3 16.8 7.3 16.8 17.4 0 19.7-23.5 22.1-35C1028.2 806.6 1017.5 805.3 1013.5 824.2z" class="a"/><path d="M1182.4 789c3.3-15.7 0.5-21-8.8-21 -12.6 0-16 11.1-20.7 33.2 -6.9 32.3-5.6 39.2 5.3 39.2 9.2 0 15.4-8.4 18.4-22.2h29.6c-6.1 28.7-24.3 41.1-52 41.1 -38.2 0-38.3-23.3-31.2-56.4 6.2-28.9 15.6-53.7 54.6-53.7 27.3 0 40.2 12.2 34.3 39.9H1182.4z" class="a"/><path d="M1396.7 837.4c-1.4 6.5-2 13.2-2.7 19.7h-27.5l1.7-14.1h-0.4c-8.6 10.9-18.3 16.2-31.1 16.2 -20.6 0-24.9-15.3-20.9-33.8 7.5-35 34.8-36.5 62.2-36.1l1.7-8.2c1.9-9 2-15.5-8.7-15.5 -10.3 0-12.8 7.8-14.6 16.2h-29c2.7-12.8 8.5-21 16.4-25.8 7.8-5 17.8-6.9 29.2-6.9 37.6 0 38.9 16.2 34.8 35.5L1396.7 837.4zM1344.9 824.2c-1.6 7.6-2.3 16.8 7.3 16.8 17.4 0 19.7-23.5 22.1-35C1359.6 806.6 1348.9 805.3 1344.9 824.2z" class="a"/><path d="M1461.6 761.9h0.4c7.9-9.4 16.6-12.8 27.7-12.8 14.1 0 24.7 8.4 21.5 23.1l-18.1 85h-29.6l15.5-73c2-9.4 1.9-16.8-7.6-16.8 -9.4 0-12.7 7.3-14.7 16.8l-15.5 73h-29.6l22.5-106h29.6L1461.6 761.9z" class="a"/><path d="M1614.9 751.2l-23.5 110.4c-1.6 7.3-7.3 36.3-48 36.3 -22 0-39.7-5.7-34.9-31.5h29c-0.9 4.4-1.1 8.2 0.2 10.7 1.3 2.7 4.4 4.2 9 4.2 7.3 0 12.4-6.9 14.7-17.6l4.3-20.4h-0.4c-6.1 8.2-15.4 12.4-25.1 12.4 -32.5 0-24.7-29.8-19.6-53.7 5-23.3 11.7-52.9 42.5-52.9 10.5 0 18.5 4.6 20.6 14.5h0.4l2.6-12.4H1614.9zM1554.9 837.4c10.7 0 14.5-11.1 19.3-33.6 4.9-23.3 6.7-36.5-4.2-36.5 -11.1 0-14.7 7.8-21.5 40.1C1546.3 817.3 1540.6 837.4 1554.9 837.4z" class="a"/><path d="M1714 761.9h0.4c7.9-9.4 16.6-12.8 27.7-12.8 14.1 0 24.7 8.4 21.5 23.1l-18.1 85h-29.6l15.5-73c2-9.4 1.9-16.8-7.6-16.8 -9.4 0-12.7 7.3-14.7 16.8l-15.5 73h-29.6l22.5-106h29.6L1714 761.9z" class="a"/><path d="M1867.3 751.2l-23.5 110.4c-1.6 7.3-7.3 36.3-48 36.3 -22 0-39.7-5.7-34.8-31.5h29c-0.9 4.4-1.1 8.2 0.2 10.7 1.3 2.7 4.4 4.2 9 4.2 7.3 0 12.4-6.9 14.7-17.6l4.3-20.4h-0.4c-6.1 8.2-15.4 12.4-25.1 12.4 -32.5 0-24.7-29.8-19.6-53.7 4.9-23.3 11.7-52.9 42.5-52.9 10.5 0 18.5 4.6 20.6 14.5h0.4l2.6-12.4H1867.3zM1807.2 837.4c10.7 0 14.5-11.1 19.3-33.6 5-23.3 6.7-36.5-4.2-36.5 -11.1 0-14.7 7.8-21.5 40.1C1798.7 817.3 1793 837.4 1807.2 837.4z" class="a"/><path d="M1913.5 751.2h29.4l-2.4 79.7h0.4l35.3-79.7h31.4l0.4 79.7h0.4l32.2-79.7h28.4l-50.3 106h-31l-3-70.3h-0.4l-35.5 70.3h-31.4L1913.5 751.2z" class="a"/><path d="M2063 802.8c6.2-28.9 15.6-53.7 54.6-53.7 39 0 38 24.8 31.8 53.7 -7 33.2-17 56.4-55.2 56.4C2056.1 859.2 2056 836 2063 802.8zM2120.2 801.1c4.7-22 6-33.2-6.6-33.2 -12.6 0-16 11.1-20.7 33.2 -6.9 32.3-5.6 39.2 5.3 39.2C2109.2 840.4 2113.4 833.4 2120.2 801.1z" class="a"/><path d="M2204.2 751.2l-2.9 13.6h0.4c8-12.2 18.9-15.7 30.8-15.7l-5.6 26.4c-25.7-1.7-29.3 13.4-31.5 23.9l-12.3 57.7h-29.6l22.5-106h28.1V751.2z" class="a"/><path d="M1291 749.1c-11.1 0-19.8 3.4-27.7 12.8h-0.4l10.9-51.5h-29.6l-31.2 146.8h29.6l15.5-73c2-9.4 5.2-16.8 14.7-16.8 9.4 0 9.6 7.3 7.6 16.8l-15.5 73h29.6l18.1-85C1315.6 757.5 1305 749.1 1291 749.1z" class="a"/><polygon points="2253.5 710.4 2222.3 857.1 2251.9 857.1 2283.1 710.4 " class="a"/><path d="M2352.4 710.4l-10.8 50.9h-0.4c-4.2-9-10.8-12.2-21.6-12.2 -29.8 0-36 32.9-40.5 54.3 -4.6 21.8-12.9 55.8 17.7 55.8 11.3 0 20.3-3.6 27.9-13.9h0.4l-2.5 11.8h28.1l31.2-146.8H2352.4L2352.4 710.4zM2332.6 803.2c-5.7 26.6-9.9 37.8-20 37.8 -10.7 0-10.2-11.1-4.6-37.8 4.5-21.2 7.4-35.9 20.2-35.9C2340.5 767.3 2337.2 782 2332.6 803.2z" class="a"/><path d="M203.5 239.7l2.1 2c58.8 49.3 122.3 44.5 170.7 12.3 30.5-20.3 168.4-112 246.3-163.8V38.5H41.7v136.7C77.1 169.1 134.2 175.1 203.5 239.7z" class="a"/><path d="M422 467.2l-68.6-65.8c-9.6-8.8-17.9-15.2-19.7-16.6 -56.1-39.4-108.4-27.4-130.9-19 -6.8 2.7-13.3 6.5-18 9.4L41.7 470.9v173.5h580.9V519.5C609.8 527.6 531.1 570.2 422 467.2z" class="a"/><path d="M198.3 255.2c-3.1-2.9-6.5-6-9.6-8.5 -68.6-53.1-133.4-27.1-147.1-20.6v59.7l33.6-22.6c0 0 51.8-38.4 132.4 1L198.3 255.2z" class="a"/><path d="M278.6 332.4c-3-2.7-6.1-5.4-9.1-8.3 -60.9-51.5-119.7-38.4-144.1-29.4 -6.9 2.8-13.5 6.5-18.2 9.4l-6.6 4.4h0l-58.9 39.4v61.5l109.6-73.8c0 0 51.2-38 131 0.3L278.6 332.4z" class="a"/><path d="M622.7 396.8c-22.8 15.4-46.1 31.1-55.3 37.2 -20.7 13.8-68.5 48.1-148.1 10.1l9.4 9c3.5 3.2 7.8 6.8 12.4 10.4 57.2 42.7 118.2 36.6 164 6.2 6.3-4.2 12.1-8.1 17.6-11.7V396.8z" class="a"/><path d="M622.7 273.6c-50.2 33.7-117.9 79.3-130.6 87.8 -20.7 13.8-69.2 48.6-147.1 11.4l9 8.7c1 0.9 2 1.9 3.1 2.8l-0.1 0.1 0 0 0.1-0.1c60.5 51.2 127 43.3 172.7 12.8 25.8-17.2 62.4-42 92.9-62.6L622.7 273.6 622.7 273.6z" class="a"/><path d="M622.7 151c-72.3 48.5-191 128-205.4 137.6 -20.8 14-70 49.2-146.9 12.5l9.3 9c5.6 5 13 11.3 21 16.5 53.2 34 108.9 28 154.3-2.3 32.6-21.8 112.8-75.1 167.7-111.5L622.7 151 622.7 151z" class="a"/></svg> \ No newline at end of file diff --git a/src/test/java/gov/usgs/earthquake/nshmp/netcdf/SiteClassTests.java b/src/test/java/gov/usgs/earthquake/nshmp/netcdf/SiteClassTests.java deleted file mode 100644 index 67f4f1cb2c9e53d212763590bad0b9c58f1875bf..0000000000000000000000000000000000000000 --- a/src/test/java/gov/usgs/earthquake/nshmp/netcdf/SiteClassTests.java +++ /dev/null @@ -1,41 +0,0 @@ -package gov.usgs.earthquake.nshmp.netcdf; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -import org.junit.jupiter.api.Test; - -class SiteClassTests { - - @Test - final void testVs30() { - assertEquals(2000, SiteClass.A.vs30()); - assertEquals(1500, SiteClass.AB.vs30()); - assertEquals(1080, SiteClass.B.vs30()); - assertEquals(760, SiteClass.BC.vs30()); - assertEquals(530, SiteClass.C.vs30()); - assertEquals(365, SiteClass.CD.vs30()); - assertEquals(260, SiteClass.D.vs30()); - assertEquals(185, SiteClass.DE.vs30()); - assertEquals(150, SiteClass.E.vs30()); - } - - @Test - final void testOfValue() { - assertEquals(SiteClass.A, SiteClass.ofValue(2000)); - assertEquals(SiteClass.AB, SiteClass.ofValue(1500)); - assertEquals(SiteClass.B, SiteClass.ofValue(1080)); - assertEquals(SiteClass.BC, SiteClass.ofValue(760)); - assertEquals(SiteClass.C, SiteClass.ofValue(530)); - assertEquals(SiteClass.CD, SiteClass.ofValue(365)); - assertEquals(SiteClass.D, SiteClass.ofValue(260)); - assertEquals(SiteClass.DE, SiteClass.ofValue(185)); - assertEquals(SiteClass.E, SiteClass.ofValue(150)); - - assertThrows(IllegalArgumentException.class, - () -> { - SiteClass.ofValue(0); - }); - } - -} diff --git a/src/test/resources/invalid-netcdf-file.nc b/src/test/resources/invalid-netcdf-file.nc deleted file mode 100644 index 24d309ee84916c2518cfd90f8acbb2741cc34795..0000000000000000000000000000000000000000 --- a/src/test/resources/invalid-netcdf-file.nc +++ /dev/null @@ -1 +0,0 @@ -invalid netcdf file diff --git a/src/test/resources/map-netcdf-test-0p05.geojson b/src/test/resources/map-netcdf-test-0p05.geojson deleted file mode 100644 index 819addfaddbb0da515d7f47c0bf94e657394d4c7..0000000000000000000000000000000000000000 --- a/src/test/resources/map-netcdf-test-0p05.geojson +++ /dev/null @@ -1,50 +0,0 @@ -{ - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "id": "Extents", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [-105.31, 39.15], - [-105.31, 39.31], - [-105.10, 39.31], - [-105.10, 39.15], - [-105.31, 39.15] - ] - ] - }, - "properties": { - "fill": "#AA0078", - "stroke": "#AA0078", - "title": "Conterminous US Map Extents" - } - }, - { - "type": "Feature", - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [-105.31, 39.15], - [-105.25, 39.25], - [-105.30, 39.25], - [-105.30, 39.31], - [-105.22, 39.30], - [-105.15, 39.30], - [-105.15, 39.25], - [-105.10, 39.25], - [-105.13, 39.15], - [-105.31, 39.15] - ] - ] - }, - "properties": { - "spacing": 0.05, - "title": "Conterminous US netCDF Test Region" - } - } - ] -} diff --git a/src/test/resources/nshmp-conus-test-fv.0.3.nc b/src/test/resources/nshmp-conus-test-fv.0.3.nc deleted file mode 100644 index 1cff28e4aabc1888e673b28fe86f0a8c4444e7af..0000000000000000000000000000000000000000 Binary files a/src/test/resources/nshmp-conus-test-fv.0.3.nc and /dev/null differ diff --git a/src/test/resources/nshmp-conus-test-fv.0.4.nc b/src/test/resources/nshmp-conus-test-fv.0.4.nc deleted file mode 100644 index 3d1966c875908dba6b6c2a5d83e06a8456600750..0000000000000000000000000000000000000000 Binary files a/src/test/resources/nshmp-conus-test-fv.0.4.nc and /dev/null differ diff --git a/src/test/resources/nshmp-conus-test-fv.1.0.nc b/src/test/resources/nshmp-conus-test-fv.1.0.nc deleted file mode 100644 index ac2e5d506110070fbba0ac34edb9748d38df4c15..0000000000000000000000000000000000000000 Binary files a/src/test/resources/nshmp-conus-test-fv.1.0.nc and /dev/null differ