diff --git a/src/aashto/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceGroundMotions.java b/src/aashto/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceGroundMotions.java index 9792bd361dbef44b89d0a40c1544533d93b8d029..42d3e4a2e707994878ac8b2ee09780d06113c388 100644 --- a/src/aashto/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceGroundMotions.java +++ b/src/aashto/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceGroundMotions.java @@ -53,6 +53,11 @@ public class NetcdfServiceGroundMotions extends NetcdfService { return SERVICE_NAME; } + @Override + SourceModel getSourceModel() { + return new SourceModel(); + } + @Override NetcdfGroundMotions netcdf() { return (NetcdfGroundMotions) netcdf; diff --git a/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceHazardCurves.java b/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceHazardCurves.java index 1077ff6bd74cda602647bec0655e21de2a127317..fb78a99665f0bd5eeef9c2fdf01e44dba7dd35f0 100644 --- a/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceHazardCurves.java +++ b/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfServiceHazardCurves.java @@ -51,6 +51,11 @@ public class NetcdfServiceHazardCurves extends NetcdfService { return SERVICE_NAME; } + @Override + SourceModel getSourceModel() { + return new HazardSourceModel(); + } + @Override NetcdfHazardCurves netcdf() { return (NetcdfHazardCurves) netcdf; @@ -91,19 +96,38 @@ public class NetcdfServiceHazardCurves extends NetcdfService { .build(); } + ResponseBody<RequestDataSiteClass, ResponseData<ResponseMetadata>> processCurvesImt( + RequestDataImt request, + String url) { + WsUtils.checkValue(Key.LATITUDE, request.latitude); + WsUtils.checkValue(Key.LONGITUDE, request.longitude); + WsUtils.checkValue(Key.SITE_CLASS, request.siteClass); + WsUtils.checkValue(Key.IMT, request.imt); + var curves = netcdf().staticData(request.site, request.siteClass); + + return ResponseBody.<RequestDataSiteClass, ResponseData<ResponseMetadata>> usage() + .name(SERVICE_NAME) + .request(request) + .response(toResponseData(request, curves.get(request.imt))) + .url(url) + .build(); + } + @Override ResponseBody<?, ?> 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: + var requestData = new RequestData(site); return processCurves(requestData, url); case CURVES_BY_SITE_CLASS: - requestData = new RequestDataSiteClass(site, query.siteClass); - return processCurvesSiteClass( - (RequestDataSiteClass) requestData, url); + var requestDataSiteClass = new RequestDataSiteClass(site, query.siteClass); + return processCurvesSiteClass(requestDataSiteClass, url); + case CURVES_BY_IMT: + var requestDataImt = new RequestDataImt(site, query.siteClass, query.imt); + return processCurvesImt(requestDataImt, url); default: throw new RuntimeException("Netcdf service [" + service + "] not found"); } @@ -114,7 +138,7 @@ public class NetcdfServiceHazardCurves extends NetcdfService { StaticDataHazardCurves curves) { return curves.entrySet().stream() .map((entry) -> { - return toResponseData(request, entry.getKey(), entry.getValue()); + return toResponseData(request, entry.getValue()); }) .collect(Collectors.toList()); } @@ -132,10 +156,18 @@ public class NetcdfServiceHazardCurves extends NetcdfService { ResponseData<ResponseMetadata> toResponseData( RequestDataSiteClass request, - Imt imt, XySequence curves) { var metadata = new ResponseMetadata(X_LABEL, Y_LABEL); return new ResponseData<>(metadata, curves); } + + class HazardSourceModel extends SourceModel { + public final List<Imt> imts; + + HazardSourceModel() { + super(); + imts = netcdf().netcdfData().imts().stream().sorted().collect(Collectors.toList()); + } + } }