From 9ab904a024818890bd44ed99503a8c3a5454089d Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Sun, 26 Oct 2025 06:57:45 -0700 Subject: [PATCH 1/8] Update to latest OpenDCS main branch (7.5.x). --- gradle/libs.versions.toml | 6 ++--- .../odcsapi/res/ComputationResources.java | 18 +++++++-------- .../odcsapi/res/ComputationResourcesTest.java | 22 +++++++++---------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fe0ac98b4..448b8ec54 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,8 +1,8 @@ [versions] -opendcs = "7.5.1-RC04" +opendcs = "7.5.1-RC08" servlet-api = "4.0.1" #Updating this further will require a change to the jakarta namespace. -slf4j = { strictly = "2.0.12" } +slf4j = { strictly = "2.0.17" } jersey = "2.40" swagger = "2.2.28" @@ -20,7 +20,7 @@ mockito = "4.11.0" byte-buddy = "1.15.3" rest-assured = "5.5.0" hamcrest = "3.0" -tomcat = "9.0.102" +tomcat = "9.0.107" commons-io = "2.11.0" commons-lang = "2.5" diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java b/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java index 9158994ec..33d00a96e 100644 --- a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java +++ b/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java @@ -124,7 +124,7 @@ public Response getComputationRefs( { compFilter.setIntervalCode(interval); } - List computationRefs = map(dai.compEditList(compFilter)); + List computationRefs = map(dai.listCompsForGUI(compFilter)); return Response.status(HttpServletResponse.SC_OK).entity(computationRefs).build(); } catch(DbIoException e) @@ -133,13 +133,13 @@ public Response getComputationRefs( } } - static ArrayList map(ArrayList computations) + static ArrayList map(ArrayList computations) { ArrayList ret = new ArrayList<>(); - for (ComputationInList comp : computations) + for (DbComputation comp : computations) { ApiComputationRef ref = new ApiComputationRef(); - ref.setComputationId(comp.getComputationId().getValue()); + ref.setComputationId(comp.getId().getValue()); if (comp.getAlgorithmId() != null) { ref.setAlgorithmId(comp.getAlgorithmId().getValue()); @@ -149,13 +149,13 @@ static ArrayList map(ArrayList computation ref.setAlgorithmId(DbKey.NullKey.getValue()); } ref.setAlgorithmName(comp.getAlgorithmName()); - ref.setName(comp.getComputationName()); + ref.setName(comp.getName()); ref.setEnabled(comp.isEnabled()); - ref.setDescription(comp.getDescription()); - ref.setProcessName(comp.getProcessName()); - if (comp.getProcessId() != null) + ref.setDescription(comp.getComment()); + ref.setProcessName(comp.getApplicationName()); + if (comp.getAppId() != null) { - ref.setProcessId(comp.getProcessId().getValue()); + ref.setProcessId(comp.getAppId().getValue()); } else { diff --git a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ComputationResourcesTest.java b/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ComputationResourcesTest.java index e6b9fb563..15fa675b4 100644 --- a/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ComputationResourcesTest.java +++ b/opendcs-rest-api/src/test/java/org/opendcs/odcsapi/res/ComputationResourcesTest.java @@ -109,13 +109,13 @@ void testDbComputeMap() @Test void testComputationRefMap() { - ArrayList comps = new ArrayList<>(); - ComputationInList dbComp = new ComputationInList(DbKey.createDbKey(16704L), "Flow Computation", - DbKey.createDbKey(197865L), DbKey.createDbKey(51981L), - true, "Computation to find the flow rate of a body of water"); + ArrayList comps = new ArrayList<>(); + DbComputation dbComp = new DbComputation(DbKey.createDbKey(16704L), "Flow Computation"); + dbComp.setAlgorithmId(DbKey.createDbKey(197865L)); + dbComp.setAppId(DbKey.createDbKey(51981L)); + dbComp.setEnabled(true); + dbComp.setComment("Computation to find the flow rate of a body of water"); dbComp.setAlgorithmName("Flow Algorithm"); - dbComp.setDescription("Computation to determine flow rate"); - dbComp.setProcessId(DbKey.createDbKey(1L)); DbCompAlgorithm dbCompAlgorithm = new DbCompAlgorithm("Flow Algorithm"); dbCompAlgorithm.setId(DbKey.createDbKey(197865L)); dbComp.setEnabled(true); @@ -127,12 +127,12 @@ void testComputationRefMap() assertEquals(1, apiComps.size()); ApiComputationRef apiComp = apiComps.get(0); assertNotNull(apiComp); - assertEquals(dbComp.getComputationId().getValue(), apiComp.getComputationId()); - assertEquals(dbComp.getComputationName(), apiComp.getName()); + assertEquals(dbComp.getId().getValue(), apiComp.getComputationId()); + assertEquals(dbComp.getName(), apiComp.getName()); assertEquals(dbComp.getAlgorithmName(), apiComp.getAlgorithmName()); - assertEquals(dbComp.getDescription(), apiComp.getDescription()); - assertEquals(dbComp.getProcessId().getValue(), apiComp.getProcessId()); - assertEquals(dbComp.getProcessName(), apiComp.getProcessName()); + assertEquals(dbComp.getComment(), apiComp.getDescription()); + assertEquals(dbComp.getAppId().getValue(), apiComp.getProcessId()); + assertEquals(dbComp.getApplicationName(), apiComp.getProcessName()); assertEquals(dbComp.getAlgorithmId().getValue(), apiComp.getAlgorithmId()); } } From fd44f66d0be3282b4b749328408aa2f9d73b2ad4 Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Tue, 28 Oct 2025 23:00:19 +0000 Subject: [PATCH 2/8] Tweak to get test running. --- opendcs-integration-test/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/opendcs-integration-test/build.gradle b/opendcs-integration-test/build.gradle index a553cc976..57948e25c 100644 --- a/opendcs-integration-test/build.gradle +++ b/opendcs-integration-test/build.gradle @@ -187,6 +187,7 @@ tasks.register('integrationTestCWMS', Test) { jvmArgs += "-Dorg.apache.tomcat.util.digester.PROPERTY_SOURCE=org.apache.tomcat.util.digester.EnvironmentPropertySource" jvmArgs += "-Dcatalina.base=${layout.buildDirectory.file("tomcat")}" jvmArgs += "-Dopendcs.test.integration.db=CWMS-Oracle" + jvmArgs += "-Dtestcontainer.cwms.bypass.cwms.pass=dcs_user" def restWar = project(':opendcs-rest-api').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() def guiWar = project(':opendcs-web-client').tasks.named('war').get().archiveFile.get().asFile.getAbsolutePath() jvmArgs += "-Dopendcs.restapi.warfile=${restWar}" From b1aacc76fbbdb0ae40b70f6f6ece2c58f1e9f81f Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Tue, 28 Oct 2025 19:06:06 -0700 Subject: [PATCH 3/8] Updates for latest main. --- opendcs-integration-test/build.gradle | 1 + .../datatypeunit_get_type_list_expected_filtered.json | 7 +++++++ .../java/org/opendcs/odcsapi/res/ComputationResources.java | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/opendcs-integration-test/build.gradle b/opendcs-integration-test/build.gradle index 57948e25c..613685f52 100644 --- a/opendcs-integration-test/build.gradle +++ b/opendcs-integration-test/build.gradle @@ -44,6 +44,7 @@ dependencies { testRuntimeOnly(libs.junit.api) testRuntimeOnly(libs.junit.engine) testRuntimeOnly(libs.junit.params) + testRuntimeOnly(libs.slf4j.jdk14) } configurations.all { diff --git a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected_filtered.json b/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected_filtered.json index b6ae698e6..58cf9eaaa 100644 --- a/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected_filtered.json +++ b/opendcs-integration-test/src/test/resources/org/opendcs/odcsapi/res/it/DEFAULT/datatypeunit_get_type_list_expected_filtered.json @@ -113,6 +113,12 @@ "code": "Ratio", "displayName": "CWMS:Ratio" }, + { + "id": 128, + "standard": "CWMS", + "code": "%-RelativeHumidity", + "displayName": "CWMS:%-RelativeHumidity" + }, { "id": 138, "standard": "CWMS", @@ -257,4 +263,5 @@ "code": "Pres", "displayName": "CWMS:Pres" } + ] \ No newline at end of file diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java b/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java index 33d00a96e..357294e89 100644 --- a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java +++ b/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/ComputationResources.java @@ -124,7 +124,7 @@ public Response getComputationRefs( { compFilter.setIntervalCode(interval); } - List computationRefs = map(dai.listCompsForGUI(compFilter)); + List computationRefs = map(dai.listComps(c -> compFilter.passes(c))); return Response.status(HttpServletResponse.SC_OK).entity(computationRefs).build(); } catch(DbIoException e) @@ -133,7 +133,7 @@ public Response getComputationRefs( } } - static ArrayList map(ArrayList computations) + static ArrayList map(List computations) { ArrayList ret = new ArrayList<>(); for (DbComputation comp : computations) From b3894f8d4479d74285a07c51948dec7d4c778e3e Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Wed, 29 Oct 2025 15:33:31 -0700 Subject: [PATCH 4/8] Bump OpenDCS version for some corrections. --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 448b8ec54..f8fd2e531 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -opendcs = "7.5.1-RC08" +opendcs = "7.5.1-RC09" servlet-api = "4.0.1" #Updating this further will require a change to the jakarta namespace. slf4j = { strictly = "2.0.17" } From 112982e9cea2d6386ddd256604c592c056a7e796 Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Wed, 29 Oct 2025 17:18:55 -0700 Subject: [PATCH 5/8] improve value not found check in Routing. --- .../src/main/java/org/opendcs/odcsapi/res/RoutingResources.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/RoutingResources.java b/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/RoutingResources.java index 898821915..aca9a656b 100644 --- a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/RoutingResources.java +++ b/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/res/RoutingResources.java @@ -198,7 +198,7 @@ public Response getRouting(@Parameter(description = "Routing Spec ID", required } catch(DatabaseException e) { - if(e.getCause() instanceof ValueNotFoundException) + if((e instanceof ValueNotFoundException) || (e.getCause() instanceof ValueNotFoundException)) { throw new DatabaseItemNotFoundException("RoutingSpec with ID " + routingId + " not found"); } From 30d0a4cb290b4cf4437de853c14db39b20f99933 Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Thu, 30 Oct 2025 04:32:10 -0700 Subject: [PATCH 6/8] Additional tweaks --- .../java/org/opendcs/odcsapi/fixtures/TomcatServer.java | 2 +- .../src/test/resources/tomcat/conf/logging.properties | 4 ++-- .../org/opendcs/odcsapi/sec/OpenDcsSecurityContext.java | 6 +++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java b/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java index 32b3410d0..981e3c30f 100644 --- a/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java +++ b/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java @@ -278,7 +278,7 @@ private static void setupClientUser(String dbType) { if(CwmsOracleConfiguration.NAME.equals(dbType)) { - String userPermissions = "begin execute immediate 'grant web_user to ?'; end;"; + String userPermissions = "begin execute immediate 'grant web_user to ' || ?; end;"; String dbOffice = System.getProperty(DB_OFFICE); String setWebUserPermissions = "begin\n" + " cwms_sec.add_user_to_group(?, 'CWMS User Admins',?) ;\n" + diff --git a/opendcs-integration-test/src/test/resources/tomcat/conf/logging.properties b/opendcs-integration-test/src/test/resources/tomcat/conf/logging.properties index 33659648c..2ad3f42d7 100644 --- a/opendcs-integration-test/src/test/resources/tomcat/conf/logging.properties +++ b/opendcs-integration-test/src/test/resources/tomcat/conf/logging.properties @@ -14,7 +14,7 @@ # handlers= java.util.logging.ConsoleHandler -.level=INFO -java.util.logging.ConsoleHandler.level=INFO +.level=FINE +java.util.logging.ConsoleHandler.level=FINE java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter org.apache.tomcat.util.scan.StandardJarScanner.level=SEVERE diff --git a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsSecurityContext.java b/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsSecurityContext.java index e465c6769..c99ee3cd6 100644 --- a/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsSecurityContext.java +++ b/opendcs-rest-api/src/main/java/org/opendcs/odcsapi/sec/OpenDcsSecurityContext.java @@ -43,7 +43,11 @@ public boolean isUserInRole(String role) { return principal.getRoles() .stream() - .anyMatch(e -> e.getRole().equals(role)); + .anyMatch(e -> + { + final String r = e.getRole(); + return r.equals(role); + }); } @Override From ce6eb0be02f5791035cb3d1efb3f6964f6b649fd Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Thu, 30 Oct 2025 17:36:44 +0000 Subject: [PATCH 7/8] Additional CWMS user step so things actually behave. --- .../odcsapi/fixtures/TomcatServer.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java b/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java index 981e3c30f..37d3bb2bb 100644 --- a/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java +++ b/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java @@ -278,6 +278,7 @@ private static void setupClientUser(String dbType) { if(CwmsOracleConfiguration.NAME.equals(dbType)) { + String unlockUser = "begin cwms_sec.unlock_user(?,?); end;"; String userPermissions = "begin execute immediate 'grant web_user to ' || ?; end;"; String dbOffice = System.getProperty(DB_OFFICE); String setWebUserPermissions = "begin\n" + @@ -286,14 +287,19 @@ private static void setupClientUser(String dbType) "end;"; try(Connection connection = DriverManager.getConnection(System.getProperty(DB_URL), "CWMS_20", System.getProperty(DB_PASSWORD)); - PreparedStatement stmt1 = connection.prepareStatement(userPermissions); - PreparedStatement stmt2 = connection.prepareStatement(setWebUserPermissions)) + PreparedStatement unlockUserStmt = connection.prepareStatement(unlockUser); + PreparedStatement userPermissionsStmt = connection.prepareStatement(userPermissions); + PreparedStatement setWebUserPermissionsStmt = connection.prepareStatement(setWebUserPermissions)) { - stmt1.setString(1, System.getProperty(DB_USERNAME)); - stmt1.executeQuery(); - stmt2.setString(1, System.getProperty(DB_USERNAME)); - stmt2.setString(2, dbOffice); - stmt2.executeQuery(); + final String username = System.getProperty(DB_USERNAME); + unlockUserStmt.setString(1, username); + unlockUserStmt.setString(2, dbOffice); + unlockUserStmt.executeQuery(); + userPermissionsStmt.setString(1, username); + userPermissionsStmt.executeQuery(); + setWebUserPermissionsStmt.setString(1, username); + setWebUserPermissionsStmt.setString(2, dbOffice); + setWebUserPermissionsStmt.executeQuery(); } catch(SQLException e) { From 80096e2fe76672a1e31fcea82c37bcca4e6c5624 Mon Sep 17 00:00:00 2001 From: Mike Neilson Date: Thu, 30 Oct 2025 17:39:21 +0000 Subject: [PATCH 8/8] Comment about the new operation --- .../main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java b/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java index 37d3bb2bb..0277ad0e9 100644 --- a/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java +++ b/opendcs-integration-test/src/main/java/org/opendcs/odcsapi/fixtures/TomcatServer.java @@ -278,6 +278,8 @@ private static void setupClientUser(String dbType) { if(CwmsOracleConfiguration.NAME.equals(dbType)) { + // I have no idea why this is suddenly required but it was also affecting operations in + // runtime test environments where the required entries weren't present. String unlockUser = "begin cwms_sec.unlock_user(?,?); end;"; String userPermissions = "begin execute immediate 'grant web_user to ' || ?; end;"; String dbOffice = System.getProperty(DB_OFFICE);