Skip to content

Commit 81f770e

Browse files
authored
Merge pull request #275 from HydrologicEngineeringCenter/feature/CWMSVUE-600_ratings_effective_dates
CWMSVUE-600 Implements retrieval of rating effective dates from new effective-dates endpoint in CDA
2 parents 362cf46 + 0170e14 commit 81f770e

File tree

8 files changed

+5163
-3356
lines changed

8 files changed

+5163
-3356
lines changed

cwms-data-api-client/src/main/java/mil/army/usace/hec/cwms/data/api/client/controllers/RatingController.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
package mil.army.usace.hec.cwms.data.api.client.controllers;
2626

2727
import static mil.army.usace.hec.cwms.data.api.client.controllers.CdaEndpointConstants.ACCEPT_XML_HEADER_V2;
28+
import static mil.army.usace.hec.cwms.data.api.client.controllers.RatingEffectiveDatesEndpointInput.EFFECTIVE_DATES_ENDPOINT;
29+
import mil.army.usace.hec.cwms.data.api.client.model.RatingEffectiveDatesMap;
2830
import mil.army.usace.hec.cwms.http.client.ApiConnectionInfo;
2931
import mil.army.usace.hec.cwms.http.client.HttpRequestBuilderImpl;
3032
import mil.army.usace.hec.cwms.http.client.HttpRequestResponse;
@@ -58,6 +60,17 @@ public String retrieveRatingXml(ApiConnectionInfo apiConnectionInfo, RatingEndpo
5860
}
5961
}
6062

63+
public RatingEffectiveDatesMap retrieveRatingEffectiveDates(ApiConnectionInfo apiConnectionInfo, RatingEffectiveDatesEndpointInput.GetAll input) throws IOException {
64+
HttpRequestExecutor executor = new HttpRequestBuilderImpl(apiConnectionInfo, RATINGS + "/" + EFFECTIVE_DATES_ENDPOINT)
65+
.addEndpointInput(input)
66+
.get()
67+
.withMediaType(ACCEPT_XML_HEADER_V2);
68+
try (HttpRequestResponse response = executor.execute()) {
69+
String body = response.getBody();
70+
return RadarObjectMapper.mapJsonToObject(body, RatingEffectiveDatesMap.class);
71+
}
72+
}
73+
6174
public void storeRatingSetXml(ApiConnectionInfo apiConnectionInfo, RatingEndpointInput.Post input) throws IOException {
6275
new HttpRequestBuilderImpl(apiConnectionInfo, RATINGS)
6376
.addEndpointInput(input)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package mil.army.usace.hec.cwms.data.api.client.controllers;
2+
3+
import java.time.Instant;
4+
import java.time.ZoneId;
5+
import java.util.Optional;
6+
import static mil.army.usace.hec.cwms.data.api.client.controllers.CdaEndpointConstants.ACCEPT_HEADER_V2;
7+
import static mil.army.usace.hec.cwms.data.api.client.controllers.CdaEndpointConstants.ACCEPT_QUERY_HEADER;
8+
import mil.army.usace.hec.cwms.http.client.EndpointInput;
9+
import mil.army.usace.hec.cwms.http.client.HttpRequestBuilder;
10+
11+
public final class RatingEffectiveDatesEndpointInput {
12+
13+
static final String EFFECTIVE_DATES_ENDPOINT = "effective-dates";
14+
static final String OFFICE_MASK_QUERY_PARAMETER = "office-mask";
15+
static final String RATING_ID_MASK_QUERY_PARAMETER = "rating-id-mask";
16+
static final String TIMEZONE_QUERY_PARAMETER = "timezone";
17+
static final String BEGIN_QUERY_PARAMETER = "begin";
18+
static final String END_QUERY_PARAMETER = "end";
19+
20+
public static GetAll getAll() {
21+
return new GetAll();
22+
}
23+
24+
public static final class GetAll extends EndpointInput{
25+
private String officeMask;
26+
private String ratingIdMask;
27+
private Instant begin;
28+
private Instant end;
29+
private ZoneId zoneId;
30+
31+
private GetAll() {
32+
//empty private ctor
33+
}
34+
35+
public GetAll officeMask(String officeMask) {
36+
this.officeMask = officeMask;
37+
return this;
38+
}
39+
40+
public GetAll ratingIdMask(String ratingIdMask) {
41+
this.ratingIdMask = ratingIdMask;
42+
return this;
43+
}
44+
45+
public GetAll zoneId(ZoneId timezone) {
46+
this.zoneId = timezone;
47+
return this;
48+
}
49+
50+
public GetAll begin(Instant begin) {
51+
this.begin = begin;
52+
return this;
53+
}
54+
55+
public GetAll end(Instant end) {
56+
this.end = end;
57+
return this;
58+
}
59+
60+
@Override
61+
protected HttpRequestBuilder addInputParameters(HttpRequestBuilder httpRequestBuilder) {
62+
String beginString = Optional.ofNullable(begin).map(Object::toString).orElse(null);
63+
String endString = Optional.ofNullable(end).map(Object::toString).orElse(null);
64+
String zoneIdString = Optional.ofNullable(this.zoneId).map(ZoneId::getId).orElse(null);
65+
return httpRequestBuilder.addQueryParameter(OFFICE_MASK_QUERY_PARAMETER, officeMask)
66+
.addQueryParameter(RATING_ID_MASK_QUERY_PARAMETER, ratingIdMask)
67+
.addQueryParameter(TIMEZONE_QUERY_PARAMETER, zoneIdString)
68+
.addQueryParameter(BEGIN_QUERY_PARAMETER, beginString)
69+
.addQueryParameter(END_QUERY_PARAMETER, endString)
70+
.addQueryHeader(ACCEPT_QUERY_HEADER, ACCEPT_HEADER_V2);
71+
}
72+
}
73+
}

cwms-data-api-client/src/test/java/mil/army/usace/hec/cwms/data/api/client/controllers/TestRatingController.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
package mil.army.usace.hec.cwms.data.api.client.controllers;
2626

27+
import java.util.Map;
2728
import mil.army.usace.hec.cwms.data.api.client.model.AbstractRatingMetadata;
2829
import mil.army.usace.hec.cwms.data.api.client.model.RatingMetadata;
2930
import mil.army.usace.hec.cwms.data.api.client.model.RatingMetadataList;
@@ -76,6 +77,41 @@ void testUpdateRatingSet() throws IOException {
7677
assertDoesNotThrow(() -> controller.updateRatingSetXml(apiConnectionInfo, input));
7778
}
7879

80+
@Test
81+
public void testRatingsEffectiveDates() throws Exception {
82+
String collect = readJsonFile("radar/v2/json/rating_effective_dates.json");
83+
mockHttpServer.enqueue(collect);
84+
mockHttpServer.start();
85+
RatingController ratingController = new RatingController();
86+
ApiConnectionInfo apiConnectionInfo = buildConnectionInfo();
87+
RatingEffectiveDatesEndpointInput.GetAll ratingEffectiveDatesEndPointInput = RatingEffectiveDatesEndpointInput.getAll();
88+
RatingEffectiveDatesMap ratingeffectiveDatesMap = ratingController.retrieveRatingEffectiveDates(apiConnectionInfo, ratingEffectiveDatesEndPointInput);
89+
assertNotNull(ratingeffectiveDatesMap.getOfficeToSpecDates());
90+
Map<String, List<RatingSpecEffectiveDates>> effectiveDates = ratingeffectiveDatesMap.getOfficeToSpecDates();
91+
assertFalse(effectiveDates.isEmpty());
92+
List<RatingSpecEffectiveDates> lrlEffectiveDates = effectiveDates.get("LRL");
93+
List<RatingSpecEffectiveDates> spkEffectiveDates = effectiveDates.get("SPK");
94+
RatingSpecEffectiveDates baseProd = lrlEffectiveDates.get(0);
95+
assertEquals("Milford.Stage;Flow.BASE.PRODUCTION", baseProd.getRatingSpecId());
96+
List<Instant> baseProdEffectiveDates = baseProd.getEffectiveDates();
97+
assertEquals(2, baseProdEffectiveDates.size());
98+
assertEquals("2020-03-01T00:00:00Z", baseProdEffectiveDates.get(0).toString());
99+
assertEquals("2021-03-01T00:00:00Z", baseProdEffectiveDates.get(1).toString());
100+
101+
RatingSpecEffectiveDates logUsgs = lrlEffectiveDates.get(1);
102+
assertEquals("Milford.Stage;Flow.Logarithmic.USGS-NWIS", logUsgs.getRatingSpecId());
103+
List<Instant> logUsgsEffectiveDates = logUsgs.getEffectiveDates();
104+
assertEquals(2, logUsgsEffectiveDates.size());
105+
assertEquals("2020-03-02T00:00:00Z", logUsgsEffectiveDates.get(0).toString());
106+
assertEquals("2021-03-02T00:00:00Z", logUsgsEffectiveDates.get(1).toString());
107+
108+
RatingSpecEffectiveDates stj = spkEffectiveDates.get(0);
109+
assertEquals("STJ-St_Joseph-Missouri.Stage;Flow.USGS-BASE.Production", stj.getRatingSpecId());
110+
List<Instant> stjEffectiveDates = stj.getEffectiveDates();
111+
assertEquals(1, stjEffectiveDates.size());
112+
assertEquals("2022-01-01T00:00:00Z", stjEffectiveDates.get(0).toString());
113+
}
114+
79115
@Test
80116
void testDeleteRatingSet() throws IOException {
81117
String collect = readJsonFile("radar/v2/xml/rating.xml");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package mil.army.usace.hec.cwms.data.api.client.controllers;
2+
3+
import java.time.ZoneId;
4+
import java.time.ZonedDateTime;
5+
import static mil.army.usace.hec.cwms.data.api.client.controllers.CdaEndpointConstants.ACCEPT_HEADER_V2;
6+
import static mil.army.usace.hec.cwms.data.api.client.controllers.CdaEndpointConstants.ACCEPT_QUERY_HEADER;
7+
import static mil.army.usace.hec.cwms.data.api.client.controllers.RatingEffectiveDatesEndpointInput.END_QUERY_PARAMETER;
8+
import static mil.army.usace.hec.cwms.data.api.client.controllers.RatingEffectiveDatesEndpointInput.OFFICE_MASK_QUERY_PARAMETER;
9+
import static mil.army.usace.hec.cwms.data.api.client.controllers.RatingEffectiveDatesEndpointInput.RATING_ID_MASK_QUERY_PARAMETER;
10+
import static mil.army.usace.hec.cwms.data.api.client.controllers.RatingEffectiveDatesEndpointInput.BEGIN_QUERY_PARAMETER;
11+
import static mil.army.usace.hec.cwms.data.api.client.controllers.RatingEffectiveDatesEndpointInput.TIMEZONE_QUERY_PARAMETER;
12+
import static org.junit.jupiter.api.Assertions.assertEquals;
13+
import org.junit.jupiter.api.Test;
14+
15+
final class TestRatingEffectiveDatesEndpointInput {
16+
17+
@Test
18+
void testGetAll() {
19+
MockHttpRequestBuilder mockHttpRequestBuilder = new MockHttpRequestBuilder();
20+
String ratingId = "BUFF.Stage;Flow.WCDS.Production";
21+
RatingEffectiveDatesEndpointInput.GetAll input = RatingEffectiveDatesEndpointInput.getAll()
22+
.officeMask("SWT")
23+
.ratingIdMask(ratingId)
24+
.zoneId(ZoneId.of("UTC"))
25+
.begin(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant())
26+
.end(ZonedDateTime.of(2022, 2, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant());
27+
28+
input.addInputParameters(mockHttpRequestBuilder);
29+
assertEquals("SWT", mockHttpRequestBuilder.getQueryParameter(OFFICE_MASK_QUERY_PARAMETER));
30+
31+
assertEquals(ratingId, mockHttpRequestBuilder.getQueryParameter(RATING_ID_MASK_QUERY_PARAMETER));
32+
assertEquals("2022-01-01T00:00:00Z", mockHttpRequestBuilder.getQueryParameter(BEGIN_QUERY_PARAMETER));
33+
assertEquals("2022-02-01T00:00:00Z", mockHttpRequestBuilder.getQueryParameter(END_QUERY_PARAMETER));
34+
assertEquals("UTC", mockHttpRequestBuilder.getQueryParameter(TIMEZONE_QUERY_PARAMETER));
35+
assertEquals(ACCEPT_HEADER_V2, mockHttpRequestBuilder.getQueryHeader(ACCEPT_QUERY_HEADER));
36+
}
37+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"office-to-spec-dates":
3+
{
4+
"LRL": [
5+
{
6+
"rating-spec-id": "Milford.Stage;Flow.BASE.PRODUCTION",
7+
"effective-dates": [
8+
"2020-03-01T00:00:00Z",
9+
"2021-03-01T00:00:00Z"
10+
]
11+
},
12+
{
13+
"rating-spec-id": "Milford.Stage;Flow.Logarithmic.USGS-NWIS",
14+
"effective-dates": [
15+
"2020-03-02T00:00:00Z",
16+
"2021-03-02T00:00:00Z"
17+
]
18+
}
19+
],
20+
"SPK": [
21+
{
22+
"rating-spec-id": "STJ-St_Joseph-Missouri.Stage;Flow.USGS-BASE.Production",
23+
"effective-dates": [
24+
"2022-01-01T00:00:00Z"
25+
]
26+
}
27+
]
28+
}
29+
}

0 commit comments

Comments
 (0)