Skip to content

Commit 84fc8c0

Browse files
committed
CWMSVUE-600 Updating effective data retrieval to not include aliases
1 parent ca0a00f commit 84fc8c0

1 file changed

Lines changed: 43 additions & 1 deletion

File tree

cwms-data-api/src/main/java/cwms/cda/data/dao/RatingSpecDao.java

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import java.time.Instant;
4141
import java.time.ZoneId;
4242
import java.time.ZonedDateTime;
43-
import java.time.temporal.ChronoUnit;
4443
import java.util.ArrayList;
4544
import java.util.Arrays;
4645
import java.util.Calendar;
@@ -66,9 +65,16 @@
6665
import org.jetbrains.annotations.NotNull;
6766
import org.jooq.Condition;
6867
import org.jooq.DSLContext;
68+
import org.jooq.Field;
6969
import org.jooq.Record;
70+
import org.jooq.Record1;
71+
import org.jooq.Record2;
7072
import org.jooq.ResultQuery;
73+
import org.jooq.SelectConditionStep;
74+
import org.jooq.SelectForUpdateStep;
7175
import org.jooq.conf.ParamType;
76+
import org.jooq.impl.DSL;
77+
import static org.jooq.impl.DSL.field;
7278
import usace.cwms.db.dao.util.OracleTypeMap;
7379
import usace.cwms.db.jooq.codegen.packages.CWMS_RATING_PACKAGE;
7480
import usace.cwms.db.jooq.codegen.tables.AV_RATING;
@@ -422,13 +428,17 @@ public void create(String xml, boolean failIfExists) {
422428

423429
public RatingEffectiveDatesMap retrieveSpecEffectiveDates(String officeIdMask, String specIdMask, Instant begin, Instant end) {
424430
return connectionResult(dsl, conn -> {
431+
Set<String> ratingIdsNoAliases = getRatingIds(conn, officeIdMask, "*", false);
425432
//office->spec->dates
426433
NavigableMap<String, NavigableMap<String, NavigableSet<Instant>>> specDateMap = new TreeMap<>();
427434
ResultSet rs = catRatings(conn, officeIdMask, specIdMask, begin, end);
428435
OracleTypeMap.checkMetaData(rs.getMetaData(), RATINGS_COLUMN_LIST, "Ratings");
429436
while(rs.next()) {
430437
String officeId = rs.getString(OFFICE_ID);
431438
String specId = rs.getString(SPECIFICATION_ID);
439+
if(!ratingIdsNoAliases.contains(specId)) { // skip aliased specs
440+
continue;
441+
}
432442
Timestamp timestamp = rs.getTimestamp(EFFECTIVE_DATE, GMT_CALENDAR);
433443
Instant date = timestamp.toInstant();
434444
NavigableSet<Instant> dateList = specDateMap.computeIfAbsent(officeId, k -> new TreeMap<>())
@@ -490,4 +500,36 @@ private ResultSet catRatings(Connection conn, String officeIdMask, String specId
490500

491501
return output;
492502
}
503+
504+
private Set<String> getRatingIds(Connection conn, String office, String templateIdMask, boolean includeAliases) {
505+
AV_RATING_SPEC specView = AV_RATING_SPEC.AV_RATING_SPEC;
506+
Condition condition = DSL.noCondition();
507+
508+
if (office != null) {
509+
condition = condition.and(specView.OFFICE_ID.eq(office));
510+
}
511+
512+
if (templateIdMask != null) {
513+
Condition ratingIdLike = JooqDao.caseInsensitiveLikeRegex(specView.RATING_ID,
514+
templateIdMask);
515+
condition = condition.and(ratingIdLike);
516+
}
517+
518+
if(!includeAliases) {
519+
condition = condition.and(specView.ALIASED_ITEM.isNull());
520+
}
521+
522+
Field<String> idField = field("RATING_ID", String.class);
523+
524+
SelectConditionStep<Record2<String, String>> ratingStep = DSL.using(conn).select(
525+
specView.OFFICE_ID,
526+
specView.RATING_ID.as(idField))
527+
.from(specView)
528+
.where(condition);
529+
530+
SelectForUpdateStep<Record1<String>> query = DSL.using(conn).selectDistinct(idField)
531+
.from(ratingStep)
532+
.orderBy(idField.asc());
533+
return new LinkedHashSet<>(query.fetch(idField));
534+
}
493535
}

0 commit comments

Comments
 (0)