From 776e7e105993688c170da8700db3338dd0c1c420 Mon Sep 17 00:00:00 2001 From: kim-perry Date: Wed, 3 Jun 2026 13:20:47 -0700 Subject: [PATCH 1/3] feat: set FrameType to roadSignage for CTW compliance --- .../controller/ActiveTimController.java | 8 +++---- .../controller/ActiveTimControllerTest.java | 4 ++-- .../library/helpers/CreateBaseTimUtil.java | 9 ++++---- .../library/helpers/JsonToJavaConverter.java | 7 +++--- .../library/model/TimUpdateModel.java | 1 - .../library/service/WydotTimService.java | 5 ++-- .../helpers/CreateBaseTimUtilTest.java | 21 ++++++----------- .../library/service/WydotTimServiceTest.java | 23 ++++++++----------- .../resources/broadcastTim_OdeOutput.json | 2 +- .../mockOdeTravelerInformationMessage.json | 2 +- .../src/test/resources/tim_construction.json | 2 +- .../tim_construction_MultipleRegions.json | 2 +- .../src/test/resources/tim_parking.json | 2 +- .../tim_parking_MultipleRegions.json | 2 +- .../src/test/resources/tim_vsl.json | 2 +- .../geojson-from-ode-tim/sampledata.json | 2 +- .../app/services/DataFrameServiceTest.java | 8 +++---- .../resources/TIM_odeTimStartDateTime.json | 2 +- .../src/test/resources/TIM_odeTim_Rsus.json | 2 +- .../controller/WydotTimBaseController.java | 22 +++++++----------- .../controller/WydotTimBowrController.java | 4 +--- .../controller/WydotTimCcController.java | 4 +--- .../WydotTimIncidentController.java | 5 +--- .../controller/WydotTimParkingController.java | 12 +++------- .../controller/WydotTimRcController.java | 4 +--- .../controller/WydotTimRwController.java | 17 ++------------ .../controller/WydotTimVslController.java | 4 +--- 27 files changed, 66 insertions(+), 112 deletions(-) diff --git a/cv-data-controller/src/main/java/com/trihydro/cvdatacontroller/controller/ActiveTimController.java b/cv-data-controller/src/main/java/com/trihydro/cvdatacontroller/controller/ActiveTimController.java index a5a35e9be..1272229e9 100644 --- a/cv-data-controller/src/main/java/com/trihydro/cvdatacontroller/controller/ActiveTimController.java +++ b/cv-data-controller/src/main/java/com/trihydro/cvdatacontroller/controller/ActiveTimController.java @@ -109,8 +109,8 @@ public ResponseEntity> GetExpiringActiveTims() { else { log.warn("Could not set frame type from value {} for active tim id {}. Assuming Advisory.", frameTypeValue, activeTim.getActiveTimId()); - // assume advisory - activeTim.setFrameType(TravelerInfoType.advisory); + // assume roadSignage + activeTim.setFrameType(TravelerInfoType.roadSignage); } // set dataFrame content. it's required for the ODE, so if we didn't record it, @@ -165,8 +165,8 @@ public ResponseEntity GetUpdateModelFromActiveTimId(@PathVariabl } else { log.warn("Could not set frame type from value {} for active tim id {}. Assuming Advisory.", frameTypeValue, activeTimId); - // assume advisory - activeTim.setFrameType(TravelerInfoType.advisory); + // assume roadSignage + activeTim.setFrameType(TravelerInfoType.roadSignage); } // set dataFrame content. it's required for the ODE, so if we didn't record it, diff --git a/cv-data-controller/src/test/java/com/trihydro/cvdatacontroller/controller/ActiveTimControllerTest.java b/cv-data-controller/src/test/java/com/trihydro/cvdatacontroller/controller/ActiveTimControllerTest.java index b52ca03fb..341521f0f 100644 --- a/cv-data-controller/src/test/java/com/trihydro/cvdatacontroller/controller/ActiveTimControllerTest.java +++ b/cv-data-controller/src/test/java/com/trihydro/cvdatacontroller/controller/ActiveTimControllerTest.java @@ -126,7 +126,7 @@ public void GetUpdateModelFromActiveTimId_SUCCESS() throws SQLException { // we only set one property to verify its returned when(mockRs.getLong("ACTIVE_TIM_ID")).thenReturn(999l); when(mockRs.getInt(any())).thenReturn(0); - when(mockRs.getInt("FRAME_TYPE")).thenReturn(FrameType.TravelerInfoType.advisory.ordinal()); + when(mockRs.getInt("FRAME_TYPE")).thenReturn(FrameType.TravelerInfoType.roadSignage.ordinal()); String selectStatement = "SELECT atim.*, tt.type AS tim_type_name, tt.description AS tim_type_description"; selectStatement += ", t.msg_cnt, t.url_b, t.is_satellite, t.sat_record_id, t.packet_id"; @@ -149,7 +149,7 @@ public void GetUpdateModelFromActiveTimId_SUCCESS() throws SQLException { Assertions.assertEquals(HttpStatus.OK, tum.getStatusCode()); Assertions.assertNotNull(tum.getBody()); Assertions.assertEquals(Long.valueOf(999), tum.getBody().getActiveTimId()); - Assertions.assertEquals(FrameType.TravelerInfoType.advisory, tum.getBody().getFrameType()); + Assertions.assertEquals(FrameType.TravelerInfoType.roadSignage, tum.getBody().getFrameType()); verify(mockStatement).executeQuery(selectStatement); } diff --git a/cv-data-service-library/src/main/java/com/trihydro/library/helpers/CreateBaseTimUtil.java b/cv-data-service-library/src/main/java/com/trihydro/library/helpers/CreateBaseTimUtil.java index 52174c1f5..52dcae655 100644 --- a/cv-data-service-library/src/main/java/com/trihydro/library/helpers/CreateBaseTimUtil.java +++ b/cv-data-service-library/src/main/java/com/trihydro/library/helpers/CreateBaseTimUtil.java @@ -43,14 +43,13 @@ public void InjectDependencies(Utility _utility) { * @param wydotTim The WydotTim object containing the data for the TIM. * @param genProps The TimGenerationProps object containing the generation properties. * @param content The ContentEnum object representing the content of the TIM. - * @param frameType The TravelerInfoType object representing the frame type of the TIM. * @param allMileposts The list of Milepost objects representing all mileposts. * @param reducedMileposts The list of Milepost objects representing reduced mileposts. * @param anchor The Milepost object representing the anchor milepost. * @return The WydotTravelerInputData object containing the built TIM. */ public WydotTravelerInputData buildTim(WydotTim wydotTim, TimGenerationProps genProps, ContentEnum content, - TravelerInfoType frameType, List allMileposts, List reducedMileposts, Milepost anchor) { + List allMileposts, List reducedMileposts, Milepost anchor) { // build TIM object with data WydotTravelerInputData timToSend = new WydotTravelerInputData(); @@ -72,7 +71,9 @@ public WydotTravelerInputData buildTim(WydotTim wydotTim, TimGenerationProps gen dataFrame.setPriority(5); dataFrame.setContent(content.getStringValue()); - dataFrame.setFrameType(frameType); + // Per CTW, FrameType should be set to roadSignage when state or local deployment agency is generating the message + // which is all messages coming through the TIMM so always set to roadSignage + dataFrame.setFrameType(TravelerInfoType.roadSignage); dataFrame.setUrl("null"); // add itis codes to tim dataFrame.setItems(wydotTim.getItisCodes().toArray(new String[wydotTim.getItisCodes().size()])); @@ -83,7 +84,7 @@ public WydotTravelerInputData buildTim(WydotTim wydotTim, TimGenerationProps gen anchorPosition.setLongitude(anchor.getLongitude()); // build msgId - MsgId msgId = buildMsgId(anchorPosition, content, frameType); + MsgId msgId = buildMsgId(anchorPosition, content, TravelerInfoType.roadSignage); dataFrame.setMsgId(msgId); // set regions. note that we now support multiple regions in a single TIM package diff --git a/cv-data-service-library/src/main/java/com/trihydro/library/helpers/JsonToJavaConverter.java b/cv-data-service-library/src/main/java/com/trihydro/library/helpers/JsonToJavaConverter.java index 1709b3751..1347409c6 100644 --- a/cv-data-service-library/src/main/java/com/trihydro/library/helpers/JsonToJavaConverter.java +++ b/cv-data-service-library/src/main/java/com/trihydro/library/helpers/JsonToJavaConverter.java @@ -59,7 +59,7 @@ public OdeLogMetadata convertTimMetadataJsonToJava(String value) { // check for null rxSource for Distress Notifications if (receivedMessageDetailsNode != null) { String rxSource = mapper.treeToValue(receivedMessageDetailsNode.get("rxSource"), String.class); - if (rxSource.equals("")) { + if (rxSource.isEmpty()) { ((ObjectNode) receivedMessageDetailsNode).remove("rxSource"); ((ObjectNode) metaDataNode).replace("receivedMessageDetails", receivedMessageDetailsNode); } @@ -463,7 +463,7 @@ public OdeTimPayload convertTmcTimTopicJsonToJava(String value) { JsonNode timeStampNode = timNode.get("timeStamp"); if (timeStampNode != null) { LocalDateTime timeStampDate = firstDay.atStartOfDay().plus(timeStampNode.asInt(), ChronoUnit.MINUTES); - tim.setTimeStamp(timeStampDate.toString() + "Z"); + tim.setTimeStamp(timeStampDate + "Z"); } JsonNode travelerDataFrameArray = timNode.findValue("dataFrames"); @@ -533,9 +533,10 @@ public OdeTimPayload convertTmcTimTopicJsonToJava(String value) { LocalDateTime startDate = firstDay.atStartOfDay().plus(startTimeNode.asInt(), ChronoUnit.MINUTES); - dataFrame.setStartDateTime(startDate.toString() + "Z"); + dataFrame.setStartDateTime(startDate + "Z"); dataFrame.setDurationTime(durationNode.asInt()); dataFrame.setPriority(priorityNode.asInt()); + dataFrame.setFrameType(TravelerInfoType.roadSignage); String[] items = new String[itemsList.size()]; items = itemsList.toArray(items); diff --git a/cv-data-service-library/src/main/java/com/trihydro/library/model/TimUpdateModel.java b/cv-data-service-library/src/main/java/com/trihydro/library/model/TimUpdateModel.java index 7333b268e..7bfdaec4e 100644 --- a/cv-data-service-library/src/main/java/com/trihydro/library/model/TimUpdateModel.java +++ b/cv-data-service-library/src/main/java/com/trihydro/library/model/TimUpdateModel.java @@ -41,7 +41,6 @@ public class TimUpdateModel extends ActiveTim { public BigDecimal getLaneWidth() { return laneWidth; - // DataFrame df;df.setFrameType(frameType); } public String getRegionDirection() { diff --git a/cv-data-service-library/src/main/java/com/trihydro/library/service/WydotTimService.java b/cv-data-service-library/src/main/java/com/trihydro/library/service/WydotTimService.java index f1ab3b7ca..9236f7035 100644 --- a/cv-data-service-library/src/main/java/com/trihydro/library/service/WydotTimService.java +++ b/cv-data-service-library/src/main/java/com/trihydro/library/service/WydotTimService.java @@ -52,7 +52,6 @@ import us.dot.its.jpo.ode.plugin.j2735.OdeGeoRegion; import us.dot.its.jpo.ode.plugin.j2735.OdePosition3D; import us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage.DataFrame; -import us.dot.its.jpo.ode.plugin.j2735.timstorage.FrameType.TravelerInfoType; @Component public class WydotTimService { @@ -113,11 +112,11 @@ public void InjectDependencies(EmailProps _emailProps, OdeProps _odeProps, TimGe DateTimeFormatter utcformatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); public WydotTravelerInputData createTim(WydotTim wydotTim, String timTypeStr, String startDateTime, - String endDateTime, ContentEnum content, TravelerInfoType frameType, List allMileposts, + String endDateTime, ContentEnum content, List allMileposts, List reducedMileposts, Milepost anchor) { // build base TIM - WydotTravelerInputData timToSend = createBaseTimUtil.buildTim(wydotTim, genProps, content, frameType, + WydotTravelerInputData timToSend = createBaseTimUtil.buildTim(wydotTim, genProps, content, allMileposts, reducedMileposts, anchor); if (timToSend == null) { diff --git a/cv-data-service-library/src/test/java/com/trihydro/library/helpers/CreateBaseTimUtilTest.java b/cv-data-service-library/src/test/java/com/trihydro/library/helpers/CreateBaseTimUtilTest.java index 1a445ef04..30e097c97 100644 --- a/cv-data-service-library/src/test/java/com/trihydro/library/helpers/CreateBaseTimUtilTest.java +++ b/cv-data-service-library/src/test/java/com/trihydro/library/helpers/CreateBaseTimUtilTest.java @@ -107,10 +107,9 @@ public void buildTim_EndpointSUCCESS() { wydotTim.setClientId("testclientid"); var content = ContentEnum.advisory; - var frameType = TravelerInfoType.advisory; // Act - var data = uut.buildTim(wydotTim, genProps, content, frameType, allMileposts, milepostsReduced, anchor); + var data = uut.buildTim(wydotTim, genProps, content, allMileposts, milepostsReduced, anchor); // Assert // validate dataFrame @@ -118,6 +117,7 @@ public void buildTim_EndpointSUCCESS() { Assertions.assertNotNull(dataFrame); Assertions.assertEquals("advisory", dataFrame.getContent()); Assertions.assertEquals(32000, dataFrame.getDurationTime()); + Assertions.assertEquals(TravelerInfoType.roadSignage, dataFrame.getFrameType()); var region = dataFrame.getRegions()[0]; Assertions.assertNotNull(region); @@ -125,8 +125,6 @@ public void buildTim_EndpointSUCCESS() { // validate anchor var anchor = region.getAnchorPosition(); Assertions.assertNotNull(anchor); - Assertions.assertEquals(anchor.getLatitude(), anchor.getLatitude()); - Assertions.assertEquals(anchor.getLongitude(), anchor.getLongitude()); // validate path var path = region.getPath(); @@ -156,10 +154,9 @@ public void buildTim_singlePointSUCCESS() { wydotTim.setClientId("testclientid"); var content = ContentEnum.advisory; - var frameType = TravelerInfoType.advisory; // Act - var data = uut.buildTim(wydotTim, genProps, content, frameType, allMileposts, milepostsReduced, anchor); + var data = uut.buildTim(wydotTim, genProps, content, allMileposts, milepostsReduced, anchor); // Assert // validate dataFrame @@ -167,6 +164,7 @@ public void buildTim_singlePointSUCCESS() { Assertions.assertNotNull(dataFrame); Assertions.assertEquals("advisory", dataFrame.getContent()); Assertions.assertEquals(32000, dataFrame.getDurationTime()); + Assertions.assertEquals(TravelerInfoType.roadSignage, dataFrame.getFrameType()); var region = dataFrame.getRegions()[0]; Assertions.assertNotNull(region); @@ -174,8 +172,6 @@ public void buildTim_singlePointSUCCESS() { // validate anchor var anchor = region.getAnchorPosition(); Assertions.assertNotNull(anchor); - Assertions.assertEquals(anchor.getLatitude(), anchor.getLatitude()); - Assertions.assertEquals(anchor.getLongitude(), anchor.getLongitude()); // validate path var path = region.getPath(); @@ -205,10 +201,9 @@ public void buildTim_singleRegion_SUCCESS() { wydotTim.setClientId("testclientid"); var content = ContentEnum.advisory; - var frameType = TravelerInfoType.advisory; // Act - var data = uut.buildTim(wydotTim, genProps, content, frameType, allMileposts, milepostsReduced, anchor); + var data = uut.buildTim(wydotTim, genProps, content, allMileposts, milepostsReduced, anchor); // Assert Assertions.assertEquals(1, data.getTim().getDataframes()[0].getRegions().length); @@ -236,10 +231,9 @@ public void buildTim_twoRegions_SUCCESS() { wydotTim.setClientId("testclientid"); var content = ContentEnum.advisory; - var frameType = TravelerInfoType.advisory; // Act - var data = uut.buildTim(wydotTim, genProps, content, frameType, allMileposts, milepostsReduced, anchor); + var data = uut.buildTim(wydotTim, genProps, content, allMileposts, milepostsReduced, anchor); // Assert Assertions.assertEquals(2, data.getTim().getDataframes()[0].getRegions().length); @@ -279,10 +273,9 @@ public void buildTim_threeRegions_SUCCESS() { wydotTim.setClientId("testclientid"); var content = ContentEnum.advisory; - var frameType = TravelerInfoType.advisory; // Act - var data = uut.buildTim(wydotTim, genProps, content, frameType, allMileposts, milepostsReduced, anchor); + var data = uut.buildTim(wydotTim, genProps, content, allMileposts, milepostsReduced, anchor); // Assert Assertions.assertEquals(3, data.getTim().getDataframes()[0].getRegions().length); diff --git a/cv-data-service-library/src/test/java/com/trihydro/library/service/WydotTimServiceTest.java b/cv-data-service-library/src/test/java/com/trihydro/library/service/WydotTimServiceTest.java index e14436a2f..410d3c978 100644 --- a/cv-data-service-library/src/test/java/com/trihydro/library/service/WydotTimServiceTest.java +++ b/cv-data-service-library/src/test/java/com/trihydro/library/service/WydotTimServiceTest.java @@ -236,10 +236,10 @@ public void createTim_ReturnsNull_WhenBuildTimReturnsNull() { List reducedMileposts = new ArrayList<>(); Milepost anchor = new Milepost(); - when(mockCreateBaseTimUtil.buildTim(any(), any(), any(), any(), any(), any(), any())).thenReturn(null); + when(mockCreateBaseTimUtil.buildTim(any(), any(), any(), any(), any(), any())).thenReturn(null); // Act - WydotTravelerInputData result = uut.createTim(new WydotTim(), timTypeStr, startDateTime, endDateTime, content, frameType, allMileposts, reducedMileposts, anchor); + WydotTravelerInputData result = uut.createTim(new WydotTim(), timTypeStr, startDateTime, endDateTime, content, allMileposts, reducedMileposts, anchor); // Assert assertNull(result); @@ -252,17 +252,16 @@ public void createTim_SetsStartDateTime_WhenProvided() { String startDateTime = "2023-01-01T00:00:00.000Z"; String endDateTime = "2023-01-01T01:00:00.000Z"; ContentEnum content = ContentEnum.workZone; - TravelerInfoType frameType = TravelerInfoType.advisory; List allMileposts = new ArrayList<>(); List reducedMileposts = new ArrayList<>(); Milepost anchor = new Milepost(); WydotTravelerInputData timToSend = getMockWydotTravelerInputDataWithDataFrame(); - when(mockCreateBaseTimUtil.buildTim(any(), any(), any(), any(), any(), any(), any())).thenReturn(timToSend); + when(mockCreateBaseTimUtil.buildTim(any(), any(), any(), any(), any(), any())).thenReturn(timToSend); // Act - WydotTravelerInputData result = uut.createTim(new WydotTim(), timTypeStr, startDateTime, endDateTime, content, frameType, allMileposts, reducedMileposts, anchor); + WydotTravelerInputData result = uut.createTim(new WydotTim(), timTypeStr, startDateTime, endDateTime, content, allMileposts, reducedMileposts, anchor); // Assert assertEquals(startDateTime, result.getTim().getDataframes()[0].getStartDateTime()); @@ -275,18 +274,17 @@ public void createTim_SetsDurationTime_WhenEndDateTimeProvided() { String startDateTime = "2023-01-01T00:00:00.000Z"; String endDateTime = "2023-01-01T01:00:00.000Z"; ContentEnum content = ContentEnum.workZone; - TravelerInfoType frameType = TravelerInfoType.advisory; List allMileposts = new ArrayList<>(); List reducedMileposts = new ArrayList<>(); Milepost anchor = new Milepost(); WydotTravelerInputData timToSend = getMockWydotTravelerInputDataWithDataFrame(); - when(mockCreateBaseTimUtil.buildTim(any(), any(), any(), any(), any(), any(), any())).thenReturn(timToSend); + when(mockCreateBaseTimUtil.buildTim(any(), any(), any(), any(), any(), any())).thenReturn(timToSend); when(mockUtility.getMinutesDurationBetweenTwoDates(anyString(), anyString())).thenReturn(60); // Act - WydotTravelerInputData result = uut.createTim(new WydotTim(), timTypeStr, startDateTime, endDateTime, content, frameType, allMileposts, reducedMileposts, anchor); + WydotTravelerInputData result = uut.createTim(new WydotTim(), timTypeStr, startDateTime, endDateTime, content, allMileposts, reducedMileposts, anchor); // Assert assertEquals(60, result.getTim().getDataframes()[0].getDurationTime()); @@ -306,10 +304,10 @@ public void createTim_SetsDurationTimeTo120_ForParkingTim() { WydotTravelerInputData timToSend = getMockWydotTravelerInputDataWithDataFrame(); - when(mockCreateBaseTimUtil.buildTim(any(), any(), any(), any(), any(), any(), any())).thenReturn(timToSend); + when(mockCreateBaseTimUtil.buildTim(any(), any(), any(), any(), any(), any())).thenReturn(timToSend); // Act - WydotTravelerInputData result = uut.createTim(new WydotTim(), timTypeStr, startDateTime, endDateTime, content, frameType, allMileposts, reducedMileposts, anchor); + WydotTravelerInputData result = uut.createTim(new WydotTim(), timTypeStr, startDateTime, endDateTime, content, allMileposts, reducedMileposts, anchor); // Assert assertEquals(120, result.getTim().getDataframes()[0].getDurationTime()); @@ -322,17 +320,16 @@ public void createTim_SetsRandomPacketId() { String startDateTime = "2023-01-01T00:00:00.000Z"; String endDateTime = "2023-01-01T01:00:00.000Z"; ContentEnum content = ContentEnum.workZone; - TravelerInfoType frameType = TravelerInfoType.advisory; List allMileposts = new ArrayList<>(); List reducedMileposts = new ArrayList<>(); Milepost anchor = new Milepost(); WydotTravelerInputData timToSend = getMockWydotTravelerInputDataWithDataFrame(); - when(mockCreateBaseTimUtil.buildTim(any(), any(), any(), any(), any(), any(), any())).thenReturn(timToSend); + when(mockCreateBaseTimUtil.buildTim(any(), any(), any(), any(), any(), any())).thenReturn(timToSend); // Act - WydotTravelerInputData result = uut.createTim(new WydotTim(), timTypeStr, startDateTime, endDateTime, content, frameType, allMileposts, reducedMileposts, anchor); + WydotTravelerInputData result = uut.createTim(new WydotTim(), timTypeStr, startDateTime, endDateTime, content, allMileposts, reducedMileposts, anchor); // Assert assertNotNull(result.getTim().getPacketID()); diff --git a/cv-data-service-library/src/test/resources/broadcastTim_OdeOutput.json b/cv-data-service-library/src/test/resources/broadcastTim_OdeOutput.json index 6558c2134..c70a0362c 100644 --- a/cv-data-service-library/src/test/resources/broadcastTim_OdeOutput.json +++ b/cv-data-service-library/src/test/resources/broadcastTim_OdeOutput.json @@ -23,7 +23,7 @@ "dataframes": [ { "doNotUse1": 0, - "frameType": "advisory", + "frameType": "roadSignage", "msgId": { "furtherInfoID": "CDEF" }, diff --git a/cv-data-service-library/src/test/resources/com/trihydro/library/service/mockOdeTravelerInformationMessage.json b/cv-data-service-library/src/test/resources/com/trihydro/library/service/mockOdeTravelerInformationMessage.json index 828c86c39..c87360a5a 100644 --- a/cv-data-service-library/src/test/resources/com/trihydro/library/service/mockOdeTravelerInformationMessage.json +++ b/cv-data-service-library/src/test/resources/com/trihydro/library/service/mockOdeTravelerInformationMessage.json @@ -8,7 +8,7 @@ "startDateTime": "2017-08-02T22:25:00.000Z", "durationTime": 1, "doNotUse1": "0", - "frameType": "advisory", + "frameType": "roadSignage", "msgId": { "roadSignID": { "position": { diff --git a/cv-data-service-library/src/test/resources/tim_construction.json b/cv-data-service-library/src/test/resources/tim_construction.json index 8385e897d..943746955 100644 --- a/cv-data-service-library/src/test/resources/tim_construction.json +++ b/cv-data-service-library/src/test/resources/tim_construction.json @@ -37,7 +37,7 @@ "dataFrames": [ { "doNotUse1": 0, - "frameType": "advisory", + "frameType": "roadSignage", "msgId": { "roadSignID": { "position": { "lat": 417732928, "long": -1071000312 }, diff --git a/cv-data-service-library/src/test/resources/tim_construction_MultipleRegions.json b/cv-data-service-library/src/test/resources/tim_construction_MultipleRegions.json index 2b0d145ab..1931ff72c 100644 --- a/cv-data-service-library/src/test/resources/tim_construction_MultipleRegions.json +++ b/cv-data-service-library/src/test/resources/tim_construction_MultipleRegions.json @@ -37,7 +37,7 @@ "dataFrames": [ { "doNotUse1": 0, - "frameType": "advisory", + "frameType": "roadSignage", "msgId": { "roadSignID": { "position": { "lat": 417732928, "long": -1071000312 }, diff --git a/cv-data-service-library/src/test/resources/tim_parking.json b/cv-data-service-library/src/test/resources/tim_parking.json index 519b60e3b..d10aa067b 100644 --- a/cv-data-service-library/src/test/resources/tim_parking.json +++ b/cv-data-service-library/src/test/resources/tim_parking.json @@ -37,7 +37,7 @@ "dataFrames": [ { "doNotUse1": 0, - "frameType": "advisory", + "frameType": "roadSignage", "msgId": { "roadSignID": { "position": { "lat": 417732928, "long": -1071000312 }, diff --git a/cv-data-service-library/src/test/resources/tim_parking_MultipleRegions.json b/cv-data-service-library/src/test/resources/tim_parking_MultipleRegions.json index 594adfcc4..09a8743ae 100644 --- a/cv-data-service-library/src/test/resources/tim_parking_MultipleRegions.json +++ b/cv-data-service-library/src/test/resources/tim_parking_MultipleRegions.json @@ -176,7 +176,7 @@ "url": "null", "doNotUse1": 0, "doNotUse2": 0, - "frameType": "advisory", + "frameType": "roadSignage", "startTime": 117800 } ], diff --git a/cv-data-service-library/src/test/resources/tim_vsl.json b/cv-data-service-library/src/test/resources/tim_vsl.json index fde8dd0cb..37bfedb4d 100644 --- a/cv-data-service-library/src/test/resources/tim_vsl.json +++ b/cv-data-service-library/src/test/resources/tim_vsl.json @@ -37,7 +37,7 @@ "dataFrames": [ { "doNotUse1": 0, - "frameType": "advisory", + "frameType": "roadSignage", "msgId": { "roadSignID": { "position": { "lat": 417732928, "long": -1071000312 }, diff --git a/developer-tools/geojson-from-ode-tim/sampledata.json b/developer-tools/geojson-from-ode-tim/sampledata.json index b8ec7a2fc..9374b8ae3 100644 --- a/developer-tools/geojson-from-ode-tim/sampledata.json +++ b/developer-tools/geojson-from-ode-tim/sampledata.json @@ -22,7 +22,7 @@ "dataframes": [ { "doNotUse1": 0, - "frameType": "advisory", + "frameType": "roadSignage", "msgId": { "roadSignID": { "position": { diff --git a/logger-kafka-consumer/src/test/java/com/trihydro/loggerkafkaconsumer/app/services/DataFrameServiceTest.java b/logger-kafka-consumer/src/test/java/com/trihydro/loggerkafkaconsumer/app/services/DataFrameServiceTest.java index 663951b0d..06e0cbb43 100644 --- a/logger-kafka-consumer/src/test/java/com/trihydro/loggerkafkaconsumer/app/services/DataFrameServiceTest.java +++ b/logger-kafka-consumer/src/test/java/com/trihydro/loggerkafkaconsumer/app/services/DataFrameServiceTest.java @@ -45,11 +45,11 @@ public void AddDataFrame_SUCCESS() throws SQLException, ParseException { Timestamp time = new Timestamp(dt.getTime()); // Act - Long data = uut.AddDataFrame(dFrame, -1l); + Long data = uut.AddDataFrame(dFrame, -1L); // Assert Assertions.assertEquals(Long.valueOf(-1), data); - verify(mockSqlNullHandler).setLongOrNull(mockPreparedStatement, 1, -1l);// TIM_ID + verify(mockSqlNullHandler).setLongOrNull(mockPreparedStatement, 1, -1L);// TIM_ID verify(mockSqlNullHandler).setShortOrNull(mockPreparedStatement, 2, dFrame.getDoNotUse1());// SSP_TIM_RIGHTS & NotUsed verify(mockSqlNullHandler).setIntegerOrNull(mockPreparedStatement, 3, null);// FRAME_TYPE verify(mockSqlNullHandler).setIntegerOrNull(mockPreparedStatement, 4, dFrame.getDurationTime());// DURATION_TIME @@ -69,10 +69,10 @@ public void AddDataFrame_FAIL() throws SQLException, ParseException { // Arrange DataFrame dFrame = new DataFrame(); dFrame.setStartDateTime("2020-02-03T16:00Z"); - doThrow(new SQLException()).when(mockSqlNullHandler).setLongOrNull(mockPreparedStatement, 1, -1l); + doThrow(new SQLException()).when(mockSqlNullHandler).setLongOrNull(mockPreparedStatement, 1, -1L); // Act - Long data = uut.AddDataFrame(dFrame, -1l); + Long data = uut.AddDataFrame(dFrame, -1L); // Assert Assertions.assertEquals(Long.valueOf(0), data); diff --git a/logger-kafka-consumer/src/test/resources/TIM_odeTimStartDateTime.json b/logger-kafka-consumer/src/test/resources/TIM_odeTimStartDateTime.json index 4b66fec03..05f4da32b 100644 --- a/logger-kafka-consumer/src/test/resources/TIM_odeTimStartDateTime.json +++ b/logger-kafka-consumer/src/test/resources/TIM_odeTimStartDateTime.json @@ -298,7 +298,7 @@ "url": null, "doNotUse1": 0, "doNotUse2": 0, - "frameType": "advisory", + "frameType": "roadSignage", "startTime": 454054 } ], diff --git a/logger-kafka-consumer/src/test/resources/TIM_odeTim_Rsus.json b/logger-kafka-consumer/src/test/resources/TIM_odeTim_Rsus.json index 1c0e0c33b..1f2838b76 100644 --- a/logger-kafka-consumer/src/test/resources/TIM_odeTim_Rsus.json +++ b/logger-kafka-consumer/src/test/resources/TIM_odeTim_Rsus.json @@ -58,7 +58,7 @@ ] }, "durationTime": 32000, - "frameType": "advisory", + "frameType": "roadSignage", "msgId": { "roadSignID": { "mutcdCode": "warning", diff --git a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimBaseController.java b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimBaseController.java index 506eb93ce..cb1b23643 100644 --- a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimBaseController.java +++ b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimBaseController.java @@ -50,8 +50,6 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; -import us.dot.its.jpo.ode.plugin.j2735.timstorage.FrameType.TravelerInfoType; - @Component @Slf4j public abstract class WydotTimBaseController { @@ -639,8 +637,7 @@ protected ControllerResult validateInputBowr(WydotTimBowr tim) { } public void processRequest(WydotTim wydotTim, TimType timType, String startDateTime, - String endDateTime, Integer pk, ContentEnum content, - TravelerInfoType frameType) { + String endDateTime, Integer pk, ContentEnum content) { if (wydotTim.getDirection().equalsIgnoreCase("b")) { var iTim = wydotTim.copy(); @@ -648,14 +645,11 @@ public void processRequest(WydotTim wydotTim, TimType timType, String startDateT iTim.setDirection("I"); dTim.setDirection("D"); // I - expireReduceCreateSendTims(iTim, timType, startDateTime, endDateTime, pk, content, - frameType); + expireReduceCreateSendTims(iTim, timType, startDateTime, endDateTime, pk, content); // D - expireReduceCreateSendTims(dTim, timType, startDateTime, endDateTime, pk, content, - frameType); + expireReduceCreateSendTims(dTim, timType, startDateTime, endDateTime, pk, content); } else { - expireReduceCreateSendTims(wydotTim, timType, startDateTime, endDateTime, pk, content, - frameType); + expireReduceCreateSendTims(wydotTim, timType, startDateTime, endDateTime, pk, content); } } @@ -684,7 +678,7 @@ public List getTimTypes() { protected void expireReduceCreateSendTims(WydotTim wydotTim, TimType timType, String startDateTime, String endDateTime, Integer pk, - ContentEnum content, TravelerInfoType frameType) { + ContentEnum content) { // Clear any existing TIMs with the same client id Long timTypeId = timType != null ? timType.getTimTypeId() : null; var existingTims = @@ -726,20 +720,20 @@ protected void expireReduceCreateSendTims(WydotTim wydotTim, TimType timType, var reducedMileposts = milepostReduction.applyMilepostReductionAlgorithm(milepostsAll, configuration.getPathDistanceLimit()); - createSendTims(wydotTim, timType, startDateTime, endDateTime, pk, content, frameType, + createSendTims(wydotTim, timType, startDateTime, endDateTime, pk, content, milepostsAll, reducedMileposts, anchor); } // creates a TIM and sends it to RSUs and Satellite protected void createSendTims(WydotTim wydotTim, TimType timType, String startDateTime, String endDateTime, Integer pk, ContentEnum content, - TravelerInfoType frameType, List allMileposts, + List allMileposts, List reducedMileposts, Milepost anchor) { // create TIM WydotTravelerInputData timToSend = wydotTimService.createTim(wydotTim, timType.getType(), startDateTime, endDateTime, - content, frameType, allMileposts, reducedMileposts, anchor); + content, allMileposts, reducedMileposts, anchor); if (timToSend == null) { return; diff --git a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimBowrController.java b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimBowrController.java index c7ed16e7b..23af42973 100644 --- a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimBowrController.java +++ b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimBowrController.java @@ -31,7 +31,6 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; -import us.dot.its.jpo.ode.plugin.j2735.timstorage.FrameType.TravelerInfoType; @CrossOrigin @RestController @@ -135,8 +134,7 @@ public void run() { // get end time String endTime = wydotTimBowr.getEndDateTime(); - processRequest(tim, getTimType(type), startTime, endTime, null, ContentEnum.advisory, - TravelerInfoType.advisory); + processRequest(tim, getTimType(type), startTime, endTime, null, ContentEnum.advisory); } } }).start(); diff --git a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimCcController.java b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimCcController.java index 9fc7ea454..75df76ad5 100644 --- a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimCcController.java +++ b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimCcController.java @@ -32,7 +32,6 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; -import us.dot.its.jpo.ode.plugin.j2735.timstorage.FrameType.TravelerInfoType; @CrossOrigin @RestController @@ -99,8 +98,7 @@ public void processRequestAsync(List wydotTims) { public void run() { var startTime = getStartTime(); for (WydotTim tim : wydotTims) { - processRequest(tim, getTimType(type), startTime, null, null, ContentEnum.advisory, - TravelerInfoType.advisory); + processRequest(tim, getTimType(type), startTime, null, null, ContentEnum.advisory); } } }).start(); diff --git a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimIncidentController.java b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimIncidentController.java index 6efd15d6b..2eb8ff4e6 100644 --- a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimIncidentController.java +++ b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimIncidentController.java @@ -1,8 +1,6 @@ package com.trihydro.odewrapper.controller; import com.trihydro.library.exceptionhandlers.IdenticalPointsExceptionHandler; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -33,7 +31,6 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; -import us.dot.its.jpo.ode.plugin.j2735.timstorage.FrameType.TravelerInfoType; @CrossOrigin @RestController @@ -122,7 +119,7 @@ public void makeTimsAsync(List wydotTims) { for (WydotTimIncident wydotTim : wydotTims) { // set route wydotTim.setRoute(wydotTim.getHighway()); - processRequest(wydotTim, getTimType(type), startTime, null, wydotTim.getPk(), ContentEnum.advisory, TravelerInfoType.advisory); + processRequest(wydotTim, getTimType(type), startTime, null, wydotTim.getPk(), ContentEnum.advisory); } }).start(); } diff --git a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimParkingController.java b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimParkingController.java index b7b9ddc26..2ade18c02 100644 --- a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimParkingController.java +++ b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimParkingController.java @@ -34,7 +34,6 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; -import us.dot.its.jpo.ode.plugin.j2735.timstorage.FrameType.TravelerInfoType; @CrossOrigin @RestController @@ -93,18 +92,14 @@ public ResponseEntity createParkingTim(@RequestBody TimParkingList timPa public Collection getParkingTims() { // clear TIM - List activeTims = wydotTimService.selectTimsByType("P"); - - return activeTims; + return wydotTimService.selectTimsByType("P"); } @RequestMapping(value = "/parking-tim/{clientId}", method = RequestMethod.GET, headers = "Accept=application/json") public Collection getParkingTimById(@PathVariable String clientId) { // clear TIM - List activeTims = wydotTimService.selectTimByClientId("P", clientId); - - return activeTims; + return wydotTimService.selectTimByClientId("P", clientId); } @RequestMapping(value = "/parking-tim/itis-codes/{id}", method = RequestMethod.GET, headers = "Accept=application/json") @@ -140,8 +135,7 @@ public void processRequestAsync(List wydotTims) { public void run() { var startTime = getStartTime(); for (WydotTimParking wydotTim : wydotTims) { - processRequest(wydotTim, getTimType(type), startTime, null, null, ContentEnum.exitService, - TravelerInfoType.advisory); + processRequest(wydotTim, getTimType(type), startTime, null, null, ContentEnum.exitService); } } }).start(); diff --git a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimRcController.java b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimRcController.java index 86ad03ba8..a691577d5 100644 --- a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimRcController.java +++ b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimRcController.java @@ -33,7 +33,6 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; -import us.dot.its.jpo.ode.plugin.j2735.timstorage.FrameType.TravelerInfoType; @CrossOrigin @RestController @@ -158,8 +157,7 @@ public void processRequestAsync(List wydotTims) { public void run() { var startTime = getStartTime(); for (WydotTim tim : wydotTims) { - processRequest(tim, getTimType(type), startTime, null, null, ContentEnum.advisory, - TravelerInfoType.advisory); + processRequest(tim, getTimType(type), startTime, null, null, ContentEnum.advisory); } } }).start(); diff --git a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimRwController.java b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimRwController.java index 7c014d700..35c530a1f 100644 --- a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimRwController.java +++ b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimRwController.java @@ -39,7 +39,6 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; -import us.dot.its.jpo.ode.plugin.j2735.timstorage.FrameType.TravelerInfoType; @CrossOrigin @RestController @@ -253,20 +252,8 @@ public void processRequestAsync() { new Thread(new Runnable() { public void run() { for (WydotTimRw tim : timsToSend) { - // check for reduce speed, itis code 7443 - if (tim.getItisCodes() != null && tim.getItisCodes().size() == 3 - && tim.getItisCodes().get(0).equals("7443")) { - processRequest(tim, getTimType(type), tim.getSchedStart(), tim.getSchedEnd(), null, - ContentEnum.speedLimit, TravelerInfoType.advisory); - } else if (tim.getItisCodes() != null && tim.getItisCodes().get(0).equals("7186")) { - // prepare to stop - processRequest(tim, getTimType(type), tim.getSchedStart(), tim.getSchedEnd(), null, - ContentEnum.advisory, TravelerInfoType.advisory); - } else { - // the rest are content=workZone - processRequest(tim, getTimType(type), tim.getSchedStart(), tim.getSchedEnd(), null, - ContentEnum.workZone, TravelerInfoType.advisory); - } + processRequest(tim, getTimType(type), tim.getSchedStart(), tim.getSchedEnd(), null, + ContentEnum.speedLimit); } } }).start(); diff --git a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimVslController.java b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimVslController.java index 987a8d78a..9d972f6b2 100644 --- a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimVslController.java +++ b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimVslController.java @@ -34,7 +34,6 @@ import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; -import us.dot.its.jpo.ode.plugin.j2735.timstorage.FrameType.TravelerInfoType; @CrossOrigin @RestController @@ -93,8 +92,7 @@ public void processRequestAsync(List wydotTims) { public void run() { var startTime = getStartTime(); for (WydotTim tim : wydotTims) { - processRequest(tim, getTimType(type), startTime, null, null, ContentEnum.speedLimit, - TravelerInfoType.roadSignage); + processRequest(tim, getTimType(type), startTime, null, null, ContentEnum.speedLimit); } } }).start(); From 97dfdc064dfbab8ab619b18f74778291fdd4bb26 Mon Sep 17 00:00:00 2001 From: kim-perry Date: Fri, 5 Jun 2026 11:38:32 -0700 Subject: [PATCH 2/3] refactor: syntax cleanup --- .../odewrapper/controller/WydotTimRwController.java | 8 +++----- .../odewrapper/controller/WydotTimVslController.java | 10 ++++------ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimRwController.java b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimRwController.java index 12b9d02eb..e7b6728de 100644 --- a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimRwController.java +++ b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimRwController.java @@ -249,11 +249,9 @@ public void makeDecreasingBufferTim(WydotTimRw wydotTim) { public void processRequestAsync() { // An Async task always executes in new thread - new Thread(new Runnable() { - public void run() { - for (WydotTimRw tim : timsToSend) { - processRequest(tim, getTimType(type), tim.getSchedStart(), tim.getSchedEnd(), null); - } + new Thread(() -> { + for (WydotTimRw tim : timsToSend) { + processRequest(tim, getTimType(type), tim.getSchedStart(), tim.getSchedEnd(), null); } }).start(); diff --git a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimVslController.java b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimVslController.java index eeb9ef229..89bda5720 100644 --- a/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimVslController.java +++ b/ode-wrapper/src/main/java/com/trihydro/odewrapper/controller/WydotTimVslController.java @@ -87,12 +87,10 @@ public ResponseEntity createUpdateVslTim(@RequestBody TimVslList timVslL public void processRequestAsync(List wydotTims) { // An Async task always executes in new thread - new Thread(new Runnable() { - public void run() { - var startTime = getStartTime(); - for (WydotTim tim : wydotTims) { - processRequest(tim, getTimType(type), startTime, null, null); - } + new Thread(() -> { + var startTime = getStartTime(); + for (WydotTim tim : wydotTims) { + processRequest(tim, getTimType(type), startTime, null, null); } }).start(); } From 372a8b96ccf7891d6dfe8cf5f26fdb2fc0425e15 Mon Sep 17 00:00:00 2001 From: kim-perry Date: Fri, 5 Jun 2026 14:48:53 -0700 Subject: [PATCH 3/3] remove setting frame type now that it gets defaulted --- .../trihydro/library/helpers/JsonToJavaConverter.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/cv-data-service-library/src/main/java/com/trihydro/library/helpers/JsonToJavaConverter.java b/cv-data-service-library/src/main/java/com/trihydro/library/helpers/JsonToJavaConverter.java index 1428f7ed8..d25a87654 100644 --- a/cv-data-service-library/src/main/java/com/trihydro/library/helpers/JsonToJavaConverter.java +++ b/cv-data-service-library/src/main/java/com/trihydro/library/helpers/JsonToJavaConverter.java @@ -517,16 +517,6 @@ public OdeTimPayload convertTmcTimTopicJsonToJava(String value) { itemsList.add(item); } - // TravelerInfoType.valueOf(); - JsonNode frameTypeNode = travelerDataFrame.get("frameType"); - if (frameTypeNode != null && frameTypeNode.fieldNames().hasNext()) { - TravelerInfoType frameType = TravelerInfoType.valueOf(frameTypeNode.fieldNames().next()); - dataFrame.setFrameType(frameType); - } else { - log.warn("frameType not found in TravelerDataFrame when converting TMC TIM. Defaulting to 'advisory'"); - dataFrame.setFrameType(TravelerInfoType.advisory); - } - JsonNode startTimeNode = travelerDataFrame.get("startTime"); JsonNode durationNode = travelerDataFrame.get("durationTime"); JsonNode priorityNode = travelerDataFrame.get("priority");