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 f9341bcf..d420b855 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 @@ -232,117 +232,6 @@ else if (geometry != null) return region; } - public OdeTimPayload convertTimPayloadJsonToJava(String value) { - - OdeTimPayload odeTimPayload = null; - - try { - OdeTravelerInformationMessage.DataFrame[] dataFrames = new OdeTravelerInformationMessage.DataFrame[1]; - OdeTravelerInformationMessage.DataFrame dataFrame = new OdeTravelerInformationMessage.DataFrame(); - List regions = new ArrayList<>(); - - // JsonNode payloadNode = JsonUtils.getJsonNode(value, "payload"); - JsonNode timNode = JsonUtils.getJsonNode(value, "payload").get("data").get("MessageFrame").get("value") - .get("TravelerInformation"); - JsonNode travelerDataFrame = timNode.get("dataFrames").get("TravelerDataFrame"); - JsonNode regionsNode = travelerDataFrame.get("regions"); - - JsonNode sequenceArrNode = null; - JsonNode contentNode = travelerDataFrame.get("content"); - if (contentNode.has(ContentEnum.advisory.getStringValue())) { - sequenceArrNode = contentNode.get(ContentEnum.advisory.getStringValue()).get("SEQUENCE"); - dataFrame.setContent(ContentEnum.advisory.getStringValue()); - } else if (contentNode.has(ContentEnum.speedLimit.getStringValue())) { - sequenceArrNode = contentNode.get(ContentEnum.speedLimit.getStringValue()).get("SEQUENCE"); - dataFrame.setContent(ContentEnum.advisory.getStringValue()); - } else if (contentNode.has(ContentEnum.exitService.getStringValue())) { - sequenceArrNode = contentNode.get(ContentEnum.exitService.getStringValue()).get("SEQUENCE"); - dataFrame.setContent(ContentEnum.advisory.getStringValue()); - } else if (contentNode.has(ContentEnum.genericSign.getStringValue())) { - sequenceArrNode = contentNode.get(ContentEnum.genericSign.getStringValue()).get("SEQUENCE"); - dataFrame.setContent(ContentEnum.advisory.getStringValue()); - } else if (contentNode.has(ContentEnum.workZone.getStringValue())) { - sequenceArrNode = contentNode.get(ContentEnum.workZone.getStringValue()).get("SEQUENCE"); - dataFrame.setContent(ContentEnum.advisory.getStringValue()); - } - - LocalDate now = LocalDate.now(); - LocalDate firstDay = now.with(firstDayOfYear()); - OdeTravelerInformationMessage tim = new OdeTravelerInformationMessage(); - - JsonNode timeStampNode = timNode.get("timeStamp"); - if (timeStampNode != null) { - LocalDateTime timeStampDate = firstDay.atStartOfDay().plus(timeStampNode.asInt(), ChronoUnit.MINUTES); - tim.setTimeStamp(timeStampDate.toString()); - } - tim.setMsgCnt(timNode.get("msgCnt").asInt()); - - JsonNode packetIDNode = timNode.get("packetID"); - if (packetIDNode != null) { - tim.setPacketID(packetIDNode.asText()); - } - - // if ITIS codes are in an array - List itemsList = new ArrayList(); - String item = null; - if (sequenceArrNode != null && sequenceArrNode.isArray()) { - for (final JsonNode objNode : sequenceArrNode) { - if (objNode.get("item").get("itis") != null) - item = mapper.treeToValue(objNode.get("item").get("itis"), String.class); - else if (objNode.get("item").get("text") != null) - item = mapper.treeToValue(objNode.get("item").get("text"), String.class); - - itemsList.add(item); - } - } - - // ADD NON ARRAY ELEMENT - if (sequenceArrNode != null && !sequenceArrNode.isArray()) { - if (sequenceArrNode.get("item").get("itis") != null) - item = mapper.treeToValue(sequenceArrNode.get("item").get("itis"), String.class); - else if (sequenceArrNode.get("item").get("text") != null) - item = mapper.treeToValue(sequenceArrNode.get("item").get("text"), String.class); - - itemsList.add(item); - } - - String[] items = new String[itemsList.size()]; - items = itemsList.toArray(items); - - JsonNode geographicalPathNode = regionsNode.get("GeographicalPath"); - - // geographicalPathNode may be an object or an array; if it is an object, treat - // it as a region - if (geographicalPathNode.isObject()) { - // single region - JsonNode regionNode = geographicalPathNode; - Region region = getRegion(regionNode); - regions.add(region); - } else if (geographicalPathNode.isArray()) { - // multiple regions - for (final JsonNode regionNode : geographicalPathNode) { - Region region = getRegion(regionNode); - regions.add(region); - } - } else { - log.warn("geographicalPathNode is not an object or an array"); - } - - dataFrame.setRegions(regions.toArray(new OdeTravelerInformationMessage.DataFrame.Region[regions.size()])); - dataFrame.setItems(items); - dataFrames[0] = dataFrame; - tim.setDataframes(dataFrames); - odeTimPayload = new OdeTimPayload(); - odeTimPayload.setData(tim); - } catch (IOException e) { - log.error("An IOException occurred while converting TIM JSON to Java", e); - } catch (NullPointerException e) { - log.error("A NullPointerException occurred while converting TIM JSON to Java: {}", e.getMessage()); - } - - return odeTimPayload; - } - public OdeTravelerInformationMessage.DataFrame.Region.Path GetPathData(JsonNode pathNode) { try { if (pathNode == null) @@ -438,7 +327,7 @@ public OdeTravelerInformationMessage.DataFrame.Region.Geometry GetGeometryData(J } } - public OdeTimPayload convertTmcTimTopicJsonToJava(String value) { + public OdeTimPayload convertTimTopicJsonToJava(String value) { OdeTimPayload odeTimPayload = null; @@ -448,7 +337,7 @@ public OdeTimPayload convertTmcTimTopicJsonToJava(String value) { List regions = new ArrayList<>(); OdeTravelerInformationMessage tim = new OdeTravelerInformationMessage(); - JsonNode timNode = JsonUtils.getJsonNode(value, "payload").findValue("data"); + JsonNode timNode = JsonUtils.getJsonNode(value, "payload").findValue("data").findValue("value").findValue("TravelerInformation"); tim.setMsgCnt(timNode.get("msgCnt").asInt()); JsonNode packetIDNode = timNode.get("packetID"); if (packetIDNode != null) { diff --git a/cv-data-service-library/src/test/java/com/trihydro/library/helpers/JsonToJavaConverterTest.java b/cv-data-service-library/src/test/java/com/trihydro/library/helpers/JsonToJavaConverterTest.java index ab4b9fb0..73344b31 100644 --- a/cv-data-service-library/src/test/java/com/trihydro/library/helpers/JsonToJavaConverterTest.java +++ b/cv-data-service-library/src/test/java/com/trihydro/library/helpers/JsonToJavaConverterTest.java @@ -11,12 +11,10 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; import us.dot.its.jpo.ode.model.OdeLogMetadata; import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; import us.dot.its.jpo.ode.model.OdeLogMetadata.SecurityResultCode; -import us.dot.its.jpo.ode.model.OdeLogMsgMetadataLocation; import us.dot.its.jpo.ode.model.OdeMsgMetadata.GeneratedBy; import us.dot.its.jpo.ode.model.OdeTimPayload; import us.dot.its.jpo.ode.model.ReceivedMessageDetails; @@ -45,36 +43,31 @@ public void TestConvertTimMetadataJsonToJava() throws IOException { // create test objects ReceivedMessageDetails receivedMessageDetails = new ReceivedMessageDetails(); - OdeLogMsgMetadataLocation locationData = new OdeLogMsgMetadataLocation(); SerialId serialId; OdeLogMetadata odeTimMetadata = new OdeLogMetadata(); - odeTimMetadata.setRecordGeneratedBy(GeneratedBy.OBU); + odeTimMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - locationData.setElevation("1515"); - locationData.setHeading("0.0000"); - locationData.setLatitude("40.4739533"); - locationData.setLongitude("-104.9689995"); - locationData.setSpeed("0.14"); - - receivedMessageDetails.setLocationData(locationData); - receivedMessageDetails.setRxSource(RxSource.SAT); + receivedMessageDetails.setRxSource(RxSource.NA); odeTimMetadata.setReceivedMessageDetails(receivedMessageDetails); - odeTimMetadata.setSchemaVersion(3); - odeTimMetadata.setSecurityResultCode(SecurityResultCode.unknown); - odeTimMetadata.setPayloadType("us.dot.its.jpo.ode.model.OdeTimPayload"); + odeTimMetadata.setSchemaVersion(9); + odeTimMetadata.setSecurityResultCode(SecurityResultCode.success); + odeTimMetadata.setPayloadType("us.dot.its.jpo.ode.model.OdeMessageFramePayload"); - serialId = new SerialId("f212c298-4021-412a-b7c6-1fdb64a6a227", 1, 4, 2, 0); + serialId = new SerialId("6f204bcf-5db1-4b46-be8a-35149a6b2240", 1, 0, 0, 0); odeTimMetadata.setSerialId(serialId); odeTimMetadata.setSanitized(false); - odeTimMetadata.setRecordGeneratedAt("2017-09-05T20:23:39.194Z[UTC]"); + odeTimMetadata.setOdePacketID("17e610000000000000"); + odeTimMetadata.setOdeTimStartDateTime("2026-01-22T21:10:48.642Z"); + odeTimMetadata.setRecordGeneratedAt("2026-01-22T21:10:48.642Z"); + odeTimMetadata.setAsn1("001F80A97014B901EC9C236B00000000000F775D9B0301EA73E452D1539716C99E9D555100003F0A59B080010007F8AA9979F4D3BB3A0A9266C000000854E3B2C47291F21E85EEF057980028422C1FFE0001FFFC00017FFF80000FFFFF000009FFFFF8000005FFFFFF00000007FF80007FFF00005FFFE00003FFFFC000027FFFFE0000017FFFFFC000000C523E43D138ECB11C6200C00FB0473DFB72A0E997C74007D408E5C376CD4F775D9B00"); - odeTimMetadata.setRecordType(RecordType.rxMsg); + odeTimMetadata.setRecordType(RecordType.timMsg); odeTimMetadata.setLogFileName("rxMsg_TIM.bin"); - odeTimMetadata.setOdeReceivedAt("2017-11-09T13:33:34.039Z[UTC]"); + odeTimMetadata.setOdeReceivedAt("2026-01-22T21:10:48.642Z"); String value = new String(Files.readAllBytes(Paths.get("src/test/resources/rxMsg_TIM_OdeOutput.json"))); @@ -91,175 +84,6 @@ public void TestConvertTimMetadataNullException() throws IOException { Assertions.assertNull(odeTimMetadataTest); } - @Test - public void TestConvertTimPayloadJsonToJava_Path() throws IOException, URISyntaxException { - - // create test objects - OdeTravelerInformationMessage tim = new OdeTravelerInformationMessage(); - - OdeTimPayload odeTimPayload = new OdeTimPayload(); - - OdeTravelerInformationMessage.DataFrame[] dataFrames = new OdeTravelerInformationMessage.DataFrame[1]; - OdeTravelerInformationMessage.DataFrame dataFrame = new OdeTravelerInformationMessage.DataFrame(); - OdeTravelerInformationMessage.DataFrame.Region[] regions = new OdeTravelerInformationMessage.DataFrame.Region[1]; - OdeTravelerInformationMessage.DataFrame.Region region = new OdeTravelerInformationMessage.DataFrame.Region(); - OdeTravelerInformationMessage.DataFrame.Region.Path path = new OdeTravelerInformationMessage.DataFrame.Region.Path(); - - tim.setMsgCnt(0); - tim.setPacketID("EC9C236B0000000000"); - tim.setTimeStamp("2017-10-11T21:32"); - - OdePosition3D anchorPosition = new OdePosition3D(); - anchorPosition.setLatitude((BigDecimal.valueOf(263056840)).multiply(new BigDecimal(".0000001"))); - anchorPosition.setLongitude((BigDecimal.valueOf(-801481510)).multiply(new BigDecimal(".0000001"))); - // anchorPosition.setElevation(new BigDecimal(20)); - - region.setAnchorPosition(anchorPosition); - - OdeTravelerInformationMessage.NodeXY nodeXY0 = new OdeTravelerInformationMessage.NodeXY(); - nodeXY0.setNodeLat((new BigDecimal("405744807")).multiply(new BigDecimal(".0000001"))); - nodeXY0.setNodeLong((new BigDecimal("-1050524251")).multiply(new BigDecimal(".0000001"))); - nodeXY0.setDelta("node-LatLon"); - - OdeTravelerInformationMessage.NodeXY[] nodeXYArr = new OdeTravelerInformationMessage.NodeXY[2]; - nodeXYArr[0] = nodeXY0; - - OdeTravelerInformationMessage.NodeXY nodeXY1 = new OdeTravelerInformationMessage.NodeXY(); - nodeXY1.setNodeLat((new BigDecimal("405735393")).multiply(new BigDecimal(".0000001"))); - nodeXY1.setNodeLong((new BigDecimal("-1050500237")).multiply(new BigDecimal(".0000001"))); - nodeXY1.setDelta("node-LatLon"); - nodeXYArr[1] = nodeXY1; - - path.setNodes(nodeXYArr); - region.setPath(path); - regions[0] = region; - dataFrame.setRegions(regions); - dataFrames[0] = dataFrame; - tim.setDataframes(dataFrames); - - odeTimPayload.setData(tim); - - String value = new String( - Files.readAllBytes(Paths.get(getClass().getResource("/rxMsg_TIM_OdeOutput.json").toURI()))); - OdeTimPayload odeTimPayloadTest = jsonToJava.convertTimPayloadJsonToJava(value); - log.info("PACKETID: {}", getTim(odeTimPayload).getPacketID()); - for (int i = 0; i < 2; i++) { - Assertions.assertEquals( - getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getPath().getNodes()[i].getNodeLat(), - getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getPath().getNodes()[i].getNodeLat()); - Assertions.assertEquals( - getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getPath().getNodes()[i].getNodeLong(), - getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getPath().getNodes()[i] - .getNodeLong()); - Assertions.assertEquals( - getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getPath().getNodes()[i].getDelta(), - getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getPath().getNodes()[i].getDelta()); - } - - Assertions.assertEquals(getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getAnchorPosition(), - getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getAnchorPosition()); - Assertions.assertEquals(getTim(odeTimPayload).getMsgCnt(), getTim(odeTimPayloadTest).getMsgCnt()); - - Assertions.assertEquals(getTim(odeTimPayload).getPacketID(), getTim(odeTimPayloadTest).getPacketID()); - Assertions.assertEquals(getTim(odeTimPayload).getUrlB(), getTim(odeTimPayloadTest).getUrlB()); - - // verify number of regions = 1 - Assertions.assertEquals(1, getTim(odeTimPayloadTest).getDataframes()[0].getRegions().length); - } - - @Test - public void TestConvertTimPayloadJsonToJava_Path_MultipleRegions() throws IOException, URISyntaxException { - - // create test objects - OdeTravelerInformationMessage tim = new OdeTravelerInformationMessage(); - - OdeTimPayload odeTimPayload = new OdeTimPayload(); - - OdeTravelerInformationMessage.DataFrame[] dataFrames = new OdeTravelerInformationMessage.DataFrame[1]; - OdeTravelerInformationMessage.DataFrame dataFrame = new OdeTravelerInformationMessage.DataFrame(); - OdeTravelerInformationMessage.DataFrame.Region[] regions = new OdeTravelerInformationMessage.DataFrame.Region[1]; - OdeTravelerInformationMessage.DataFrame.Region region = new OdeTravelerInformationMessage.DataFrame.Region(); - OdeTravelerInformationMessage.DataFrame.Region.Path path = new OdeTravelerInformationMessage.DataFrame.Region.Path(); - - tim.setMsgCnt(0); - tim.setPacketID("EC9C236B0000000000"); - tim.setTimeStamp("2017-10-11T21:32"); - - OdePosition3D anchorPosition = new OdePosition3D(); - anchorPosition.setLatitude((BigDecimal.valueOf(263056840)).multiply(new BigDecimal(".0000001"))); - anchorPosition.setLongitude((BigDecimal.valueOf(-801481510)).multiply(new BigDecimal(".0000001"))); - // anchorPosition.setElevation(new BigDecimal(20)); - - region.setAnchorPosition(anchorPosition); - - OdeTravelerInformationMessage.NodeXY nodeXY0 = new OdeTravelerInformationMessage.NodeXY(); - nodeXY0.setNodeLat((new BigDecimal("405744807")).multiply(new BigDecimal(".0000001"))); - nodeXY0.setNodeLong((new BigDecimal("-1050524251")).multiply(new BigDecimal(".0000001"))); - nodeXY0.setDelta("node-LatLon"); - - OdeTravelerInformationMessage.NodeXY[] nodeXYArr = new OdeTravelerInformationMessage.NodeXY[2]; - nodeXYArr[0] = nodeXY0; - - OdeTravelerInformationMessage.NodeXY nodeXY1 = new OdeTravelerInformationMessage.NodeXY(); - nodeXY1.setNodeLat((new BigDecimal("405735393")).multiply(new BigDecimal(".0000001"))); - nodeXY1.setNodeLong((new BigDecimal("-1050500237")).multiply(new BigDecimal(".0000001"))); - nodeXY1.setDelta("node-LatLon"); - nodeXYArr[1] = nodeXY1; - - path.setNodes(nodeXYArr); - region.setPath(path); - regions[0] = region; - dataFrame.setRegions(regions); - dataFrames[0] = dataFrame; - tim.setDataframes(dataFrames); - - odeTimPayload.setData(tim); - - String value = new String( - Files.readAllBytes(Paths.get(getClass().getResource("/rxMsg_TIM_OdeOutput_MultipleRegions.json").toURI()))); - OdeTimPayload odeTimPayloadTest = jsonToJava.convertTimPayloadJsonToJava(value); - log.info("PACKETID: {}", getTim(odeTimPayload).getPacketID()); - for (int i = 0; i < 2; i++) { - Assertions.assertEquals( - getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getPath().getNodes()[i].getNodeLat(), - getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getPath().getNodes()[i].getNodeLat()); - Assertions.assertEquals( - getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getPath().getNodes()[i].getNodeLong(), - getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getPath().getNodes()[i] - .getNodeLong()); - Assertions.assertEquals( - getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getPath().getNodes()[i].getDelta(), - getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getPath().getNodes()[i].getDelta()); - } - - Assertions.assertEquals(getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getAnchorPosition(), - getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getAnchorPosition()); - Assertions.assertEquals(getTim(odeTimPayload).getMsgCnt(), getTim(odeTimPayloadTest).getMsgCnt()); - - Assertions.assertEquals(getTim(odeTimPayload).getPacketID(), getTim(odeTimPayloadTest).getPacketID()); - Assertions.assertEquals(getTim(odeTimPayload).getUrlB(), getTim(odeTimPayloadTest).getUrlB()); - - // verify number of regions = 2 - Assertions.assertEquals(2, getTim(odeTimPayloadTest).getDataframes()[0].getRegions().length); - } - - @Test - public void TestConvertTimPayloadJsonToJava_SpeedLimit() throws IOException, URISyntaxException { - // Arrange - String value = new String( - Files.readAllBytes(Paths.get(getClass().getResource("/rxMsg_TIM_SpeedLimit.json").toURI()))); - - // Act - OdeTimPayload odeTimPayloadTest = jsonToJava.convertTimPayloadJsonToJava(value); - - // Assert - Assertions.assertNotNull(odeTimPayloadTest); - Assertions.assertTrue(getTim(odeTimPayloadTest).getDataframes()[0].getItems().length > 0); - Assertions.assertEquals("advisory", getTim(odeTimPayloadTest).getDataframes()[0].getContent()); - Assertions.assertArrayEquals(new String[] { "13609", "268", "12554", "8720" }, - getTim(odeTimPayloadTest).getDataframes()[0].getItems()); - } - @Test public void TestConvertTimPayloadJsonToJava_Geometry() throws IOException, URISyntaxException { @@ -274,26 +98,23 @@ public void TestConvertTimPayloadJsonToJava_Geometry() throws IOException, URISy OdeTravelerInformationMessage.DataFrame.Region region = new OdeTravelerInformationMessage.DataFrame.Region(); OdeTravelerInformationMessage.DataFrame.Region.Geometry geometry = new OdeTravelerInformationMessage.DataFrame.Region.Geometry(); - tim.setMsgCnt(0); - tim.setPacketID("EC9C236B0000000000"); + tim.setMsgCnt(1); + tim.setPacketID("8D442FF4020C6B1A01"); tim.setTimeStamp("2017-10-11T21:32"); OdePosition3D anchorPosition = new OdePosition3D(); - anchorPosition.setLatitude((BigDecimal.valueOf(263056840)).multiply(new BigDecimal(".0000001"))); - anchorPosition.setLongitude((BigDecimal.valueOf(-801481510)).multiply(new BigDecimal(".0000001"))); - // anchorPosition.setElevation(new BigDecimal(20)); + anchorPosition.setLatitude((BigDecimal.valueOf(411535930)).multiply(new BigDecimal(".0000001"))); + anchorPosition.setLongitude((BigDecimal.valueOf(-1046557850)).multiply(new BigDecimal(".0000001"))); region.setAnchorPosition(anchorPosition); - geometry.setDirection("1010101010101010"); - geometry.setExtent(1);// this is an enum - geometry.setLaneWidth(BigDecimal.valueOf(33)); + geometry.setDirection("F0F0"); Circle circle = new Circle(); - circle.setRadius(15); - circle.setUnits(DistanceUnitsEnum.mile); - OdePosition3D position = new OdePosition3D(new BigDecimal("41.678473"), new BigDecimal("-108.782775"), - new BigDecimal("917.1432")); + circle.setRadius(50); + circle.setUnits(DistanceUnitsEnum.meter); + OdePosition3D position = new OdePosition3D(new BigDecimal("411535930"), new BigDecimal("-1046557850"), + new BigDecimal("18240")); circle.setCenter(position); geometry.setCircle(circle); @@ -308,7 +129,7 @@ public void TestConvertTimPayloadJsonToJava_Geometry() throws IOException, URISy String value = new String( Files.readAllBytes(Paths.get(getClass().getResource("/rxMsg_TIM_OdeOutput_Geometry.json").toURI()))); - OdeTimPayload odeTimPayloadTest = jsonToJava.convertTimPayloadJsonToJava(value); + OdeTimPayload odeTimPayloadTest = jsonToJava.convertTimTopicJsonToJava(value); log.info("PACKETID: {}", getTim(odeTimPayload).getPacketID()); // test geometry properties @@ -377,116 +198,116 @@ public void convertBroadcastTimPayloadJsonToJava() throws IOException { @Test public void TestConvertTimPayloadNullException() throws IOException { - OdeTimPayload odeTimPayload = jsonToJava.convertTimPayloadJsonToJava(""); + OdeTimPayload odeTimPayload = jsonToJava.convertTimTopicJsonToJava(""); Assertions.assertNull(odeTimPayload); } @Test - public void TestConvertTmcTimTopicJsonToJava_HandlesVslContentType() throws IOException { + public void TestConvertTimTopicJsonToJava_HandlesVslContentType() throws IOException { // Arrange String tim_vsl_json = new String(Files.readAllBytes(Paths.get("src/test/resources/tim_vsl.json"))); // Act - var tim_vsl = jsonToJava.convertTmcTimTopicJsonToJava(tim_vsl_json); + var tim_vsl = jsonToJava.convertTimTopicJsonToJava(tim_vsl_json); // Assert Assertions.assertNotNull(tim_vsl); Assertions.assertEquals("advisory", getTim(tim_vsl).getDataframes()[0].getContent()); Assertions.assertArrayEquals(new String[] { "268", "12604", "8720" }, getTim(tim_vsl).getDataframes()[0].getItems()); - + // verify number of regions = 1 Assertions.assertEquals(1, getTim(tim_vsl).getDataframes()[0].getRegions().length); } @Test - public void TestConvertTmcTimTopicJsonToJava_HandlesVslContentType_MultipleRegions() throws IOException { + public void TestConvertTimTopicJsonToJava_HandlesVslContentType_MultipleRegions() throws IOException { // Arrange String tim_vsl_json = new String(Files.readAllBytes(Paths.get("src/test/resources/tim_vsl_MultipleRegions.json"))); // Act - var tim_vsl = jsonToJava.convertTmcTimTopicJsonToJava(tim_vsl_json); + var tim_vsl = jsonToJava.convertTimTopicJsonToJava(tim_vsl_json); // Assert Assertions.assertNotNull(tim_vsl); Assertions.assertEquals("advisory", getTim(tim_vsl).getDataframes()[0].getContent()); Assertions.assertArrayEquals(new String[] { "268", "12604", "8720" }, getTim(tim_vsl).getDataframes()[0].getItems()); - + // verify number of regions = 2 Assertions.assertEquals(2, getTim(tim_vsl).getDataframes()[0].getRegions().length); } @Test - public void TestConvertTmcTimTopicJsonToJava_HandlesParkingContentType() throws IOException { + public void TestConvertTimTopicJsonToJava_HandlesParkingContentType() throws IOException { // Arrange String tim_parking_json = new String(Files.readAllBytes(Paths.get("src/test/resources/tim_parking.json"))); // Act - var tim_parking = jsonToJava.convertTmcTimTopicJsonToJava(tim_parking_json); + var tim_parking = jsonToJava.convertTimTopicJsonToJava(tim_parking_json); // Assert Assertions.assertNotNull(tim_parking); Assertions.assertEquals("advisory", getTim(tim_parking).getDataframes()[0].getContent()); Assertions.assertArrayEquals(new String[] { "4104", "11794", "345" }, getTim(tim_parking).getDataframes()[0].getItems()); - + // verify number of regions = 1 Assertions.assertEquals(1, getTim(tim_parking).getDataframes()[0].getRegions().length); } @Test - public void TestConvertTmcTimTopicJsonToJava_HandlesParkingContentType_MultipleRegions() throws IOException { + public void TestConvertTimTopicJsonToJava_HandlesParkingContentType_MultipleRegions() throws IOException { // Arrange String tim_parking_json = new String(Files.readAllBytes(Paths.get("src/test/resources/tim_parking_MultipleRegions.json"))); // Act - var tim_parking = jsonToJava.convertTmcTimTopicJsonToJava(tim_parking_json); + var tim_parking = jsonToJava.convertTimTopicJsonToJava(tim_parking_json); // Assert Assertions.assertNotNull(tim_parking); Assertions.assertEquals("advisory", getTim(tim_parking).getDataframes()[0].getContent()); Assertions.assertArrayEquals(new String[] { "4104", "11794", "345" }, getTim(tim_parking).getDataframes()[0].getItems()); - + // verify number of regions = 2 Assertions.assertEquals(2, getTim(tim_parking).getDataframes()[0].getRegions().length); } @Test - public void TestConvertTmcTimTopicJsonToJava_HandlesConstructionContentType() throws IOException { + public void TestConvertTimTopicJsonToJava_HandlesConstructionContentType() throws IOException { // Arrange String tim_construction_json = new String( Files.readAllBytes(Paths.get("src/test/resources/tim_construction.json"))); // Act - var tim_construction = jsonToJava.convertTmcTimTopicJsonToJava(tim_construction_json); + var tim_construction = jsonToJava.convertTimTopicJsonToJava(tim_construction_json); // Assert Assertions.assertNotNull(tim_construction); Assertions.assertEquals("advisory", getTim(tim_construction).getDataframes()[0].getContent()); Assertions.assertArrayEquals(new String[] { "1537", "12554", "8728" }, getTim(tim_construction).getDataframes()[0].getItems()); - + // verify number of regions = 1 Assertions.assertEquals(1, getTim(tim_construction).getDataframes()[0].getRegions().length); } @Test - public void TestConvertTmcTimTopicJsonToJava_HandlesConstructionContentType_MultipleRegions() throws IOException { + public void TestConvertTimTopicJsonToJava_HandlesConstructionContentType_MultipleRegions() throws IOException { // Arrange String tim_construction_json = new String( Files.readAllBytes(Paths.get("src/test/resources/tim_construction_MultipleRegions.json"))); // Act - var tim_construction = jsonToJava.convertTmcTimTopicJsonToJava(tim_construction_json); + var tim_construction = jsonToJava.convertTimTopicJsonToJava(tim_construction_json); // Assert Assertions.assertNotNull(tim_construction); Assertions.assertEquals("advisory", getTim(tim_construction).getDataframes()[0].getContent()); Assertions.assertArrayEquals(new String[] { "1537", "12554", "8728" }, getTim(tim_construction).getDataframes()[0].getItems()); - + // verify number of regions = 2 Assertions.assertEquals(2, getTim(tim_construction).getDataframes()[0].getRegions().length); } diff --git a/cv-data-service-library/src/test/resources/rxMsg_TIM_OdeOutput.json b/cv-data-service-library/src/test/resources/rxMsg_TIM_OdeOutput.json index 76cb4aa3..212bbfec 100644 --- a/cv-data-service-library/src/test/resources/rxMsg_TIM_OdeOutput.json +++ b/cv-data-service-library/src/test/resources/rxMsg_TIM_OdeOutput.json @@ -1,132 +1,227 @@ { "metadata": { - "recordGeneratedBy": "OBU", + "logFileName": "rxMsg_TIM.bin", + "recordType": "timMsg", + "securityResultCode": "success", "receivedMessageDetails": { - "locationData": { - "elevation": 1515, - "heading": "0.0000", - "latitude": 40.4739533, - "speed": 0.14, - "longitude": -104.9689995 - }, - "rxSource": "SAT" + "rxSource": "NA" }, - "schemaVersion": 3, - "securityResultCode": "unknown", - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", + "payloadType": "us.dot.its.jpo.ode.model.OdeMessageFramePayload", "serialId": { - "recordId": 2, - "serialNumber": 0, - "streamId": "f212c298-4021-412a-b7c6-1fdb64a6a227", + "streamId": "6f204bcf-5db1-4b46-be8a-35149a6b2240", "bundleSize": 1, - "bundleId": 4 + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 }, + "odeReceivedAt": "2026-01-22T21:10:48.642Z", + "schemaVersion": 9, + "maxDurationTime": 0, + "recordGeneratedAt": "2026-01-22T21:10:48.642Z", + "recordGeneratedBy": "RSU", "sanitized": false, - "recordGeneratedAt": "2017-09-05T20:23:39.194Z[UTC]", - "recordType": "rxMsg", - "logFileName": "rxMsg_TIM.bin", - "odeReceivedAt": "2017-11-09T13:33:34.039Z[UTC]" + "odePacketID": "17e610000000000000", + "odeTimStartDateTime": "2026-01-22T21:10:48.642Z", + "asn1": "001F80A97014B901EC9C236B00000000000F775D9B0301EA73E452D1539716C99E9D555100003F0A59B080010007F8AA9979F4D3BB3A0A9266C000000854E3B2C47291F21E85EEF057980028422C1FFE0001FFFC00017FFF80000FFFFF000009FFFFF8000005FFFFFF00000007FF80007FFF00005FFFE00003FFFFC000027FFFFE0000017FFFFFC000000C523E43D138ECB11C6200C00FB0473DFB72A0E997C74007D408E5C376CD4F775D9B00", + "source": "RSU", + "originIp": "172.19.0.1", + "isCertPresent": false }, "payload": { "data": { - "MessageFrame": { - "messageId": 31, - "value": { - "TravelerInformation": { - "timeStamp": 408812, - "packetID": "EC9C236B0000000000", - "dataFrames": { - "TravelerDataFrame": { - "regions": { - "GeographicalPath": { - "anchor": { - "elevation": 20, - "lat": 263056840, - "long": -801481510 - }, - "name": "SXM DFB CSW 10", - "laneWidth": 600, - "directionality": { - "forward": "" - }, - "description": { - "path": { - "offset": { - "xy": { - "nodes": { - "NodeXY": [ - { - "delta": { - "node-LatLon": { - "lon": -1050524251, - "lat": 405744807 - } - } - }, - { - "delta": { - "node-LatLon": { - "lon": -1050500237, - "lat": 405735393 - } - } - } - ] + "messageId": 31, + "value": { + "TravelerInformation": { + "msgCnt": 1, + "timeStamp": 309505, + "packetID": "EC9C236B0000000000", + "urlB": "null", + "dataFrames": [ + { + "doNotUse1": 0, + "frameType": "advisory", + "msgId": { + "roadSignID": { + "position": { + "lat": 416784730, + "long": -1087827750, + "elevation": 9171 + }, + "viewAngle": "AAAA", + "mutcdCode": "warning", + "crc": "0000" + } + }, + "startYear": 2017, + "startTime": 308065, + "durationTime": 1, + "priority": 0, + "doNotUse2": 0, + "regions": [ + { + "name": "Testing TIM", + "id": { + "region": 0, + "id": 33 + }, + "anchor": { + "lat": 412500807, + "long": -1110093847, + "elevation": 20207 + }, + "laneWidth": 700, + "directionality": "both", + "closedPath": false, + "direction": "000A", + "description": { + "path": { + "scale": 0, + "offset": { + "ll": { + "nodes": [ + { + "delta": { + "node-LL1": { + "lon": 2047, + "lat": -2048 + } + } + }, + { + "delta": { + "node-LL2": { + "lon": 8191, + "lat": -8192 + } + } + }, + { + "delta": { + "node-LL3": { + "lon": 32767, + "lat": -32768 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 131071, + "lat": -131072 + } + } + }, + { + "delta": { + "node-LL5": { + "lon": 2097151, + "lat": -2097152 + } + } + }, + { + "delta": { + "node-LL6": { + "lon": 8388607, + "lat": -8388608 + } + } + }, + { + "delta": { + "node-LL1": { + "lon": 2047, + "lat": -2048 + } + } + }, + { + "delta": { + "node-LL2": { + "lon": 8191, + "lat": -8192 + } + } + }, + { + "delta": { + "node-LL3": { + "lon": 32767, + "lat": -32768 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 131071, + "lat": -131072 + } + } + }, + { + "delta": { + "node-LL5": { + "lon": 2097151, + "lat": -2097152 + } + } + }, + { + "delta": { + "node-LL6": { + "lon": 8388607, + "lat": -8388608 + } + } + }, + { + "delta": { + "node-LatLon": { + "lon": -1110093847, + "lat": 412500807 + } + } } - } - }, - "scale": 0 - } - }, - "direction": 1111100000000001 - } - }, - "durationTime": 32000, - "doNotUse3": 0, - "doNotUse4": 0, - "doNotUse1": 0, - "doNotUse2": 0, - "frameType": { - "roadSignage": "" - }, - "msgId": { - "furtherInfoID": "0000" - }, - "startTime": 149760, - "priority": 2, - "content": { - "advisory": { - "SEQUENCE": [ - { - "item": { - "itis": 13609 - } - }, - { - "item": { - "itis": 268 - } - }, - { - "item": { - "itis": 12554 - } - }, - { - "item": { - "itis": 8720 + ] } } - ] + } } } - } - }, - "msgCnt": 0 - } + ], + "doNotUse3": 3, + "doNotUse4": 2, + "content": { + "advisory": [ + { + "item": { + "itis": 125 + } + }, + { + "item": { + "text": "some text" + } + }, + { + "item": { + "itis": 250 + } + }, + { + "item": { + "text": "98765" + } + } + ] + }, + "url": "null" + } + ] } } }, - "dataType": "TravelerInformation" + "dataType": "us.dot.its.jpo.asn.j2735.r2024.TravelerInformation.TravelerInformationMessageFrame" } } \ No newline at end of file diff --git a/cv-data-service-library/src/test/resources/rxMsg_TIM_OdeOutput_Geometry.json b/cv-data-service-library/src/test/resources/rxMsg_TIM_OdeOutput_Geometry.json index 340c1f8b..ec0ae1f8 100644 --- a/cv-data-service-library/src/test/resources/rxMsg_TIM_OdeOutput_Geometry.json +++ b/cv-data-service-library/src/test/resources/rxMsg_TIM_OdeOutput_Geometry.json @@ -1,119 +1,126 @@ { "metadata": { - "recordGeneratedBy": "OBU", - "receivedMessageDetails": { - "locationData": { - "elevation": 1515, - "heading": "0.0000", - "latitude": 40.4739533, - "speed": 0.14, - "longitude": -104.9689995 - }, - "rxSource": "SAT" - }, - "schemaVersion": 3, - "securityResultCode": "unknown", - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", + "payloadType": "us.dot.its.jpo.ode.model.OdeMessageFramePayload", "serialId": { - "recordId": 2, - "serialNumber": 0, - "streamId": "f212c298-4021-412a-b7c6-1fdb64a6a227", + "streamId": "ca9028af-bed7-4345-b103-eab18d83f007", "bundleSize": 1, - "bundleId": 4 + "bundleId": 1, + "recordId": 0, + "serialNumber": 1 }, + "odeReceivedAt": "2026-01-23T16:24:23.932Z", + "schemaVersion": 9, + "maxDurationTime": 8640, + "recordGeneratedAt": "2024-09-25T10:00:00.000Z", + "recordGeneratedBy": "TMC", "sanitized": false, - "recordGeneratedAt": "2017-09-05T20:23:39.194Z[UTC]", - "recordType": "rxMsg", - "logFileName": "rxMsg_TIM.bin", - "odeReceivedAt": "2017-11-09T13:33:34.039Z[UTC]" + "odePacketID": "8D442FF4020C6B1A01", + "odeTimStartDateTime": "2024-09-25T10:00:00.000Z", + "request": { + "ode": { + "version": 3, + "verb": "POST" + }, + "rsus": [ + { + "rsuTarget": "172.0.0.1", + "rsuUsername": "username", + "rsuPassword": "*", + "rsuRetries": 3, + "rsuTimeout": 5000, + "rsuIndex": 21, + "snmpProtocol": "NTCIP1218" + } + ], + "snmp": { + "rsuid": "83", + "msgid": 31, + "mode": 1, + "channel": 183, + "interval": 1000, + "deliverystart": "2024-09-25T10:00:00.0Z", + "deliverystop": "2024-09-30T10:00:00.0Z", + "enable": 1, + "status": 4 + } + }, + "isCertPresent": false }, "payload": { "data": { - "MessageFrame": { - "messageId": 31, - "value": { - "TravelerInformation": { - "timeStamp": 408812, - "packetID": "EC9C236B0000000000", - "dataFrames": { - "TravelerDataFrame": { - "regions": { - "GeographicalPath": { - "anchor": { - "elevation": 20, - "lat": 263056840, - "long": -801481510 - }, - "name": "SXM DFB CSW 10", - "laneWidth": 600, - "directionality": { - "forward": "" - }, - "description": { - "geometry": { - "direction": "1010101010101010", - "extent": "1", - "laneWidth": "33", - "circle": { - "center": { - "lat": "41.678473", - "long": "-108.782775", - "elevation": "917.1432" - }, - "radius": "15", - "units": "7" - } - } - }, - "direction": 1111100000000001 - } - }, - "durationTime": 32000, - "doNotUse3": 0, - "doNotUse4": 0, - "doNotUse1": 0, - "doNotUse2": 0, - "frameType": { - "roadSignage": "" - }, - "msgId": { - "furtherInfoID": "0000" - }, - "startTime": 149760, - "priority": 2, - "content": { - "advisory": { - "SEQUENCE": [ - { - "item": { - "itis": 13609 - } - }, - { - "item": { - "itis": 268 - } - }, - { - "item": { - "itis": 12554 - } - }, - { - "item": { - "itis": 8720 - } + "messageId": 31, + "value": { + "TravelerInformation": { + "msgCnt": 1, + "timeStamp": 386520, + "packetID": "8D442FF4020C6B1A01", + "urlB": "null", + "dataFrames": [ + { + "doNotUse1": 0, + "frameType": "advisory", + "msgId": { + "roadSignID": { + "position": { + "lat": 411535930, + "long": -1046557850 + }, + "viewAngle": "FFFF", + "mutcdCode": "warning" + } + }, + "startYear": 2024, + "startTime": 386520, + "durationTime": 8640, + "priority": 5, + "doNotUse2": 0, + "regions": [ + { + "name": "myregionname", + "id": { + "region": 0, + "id": 0 + }, + "anchor": { + "lat": 411535930, + "long": -1046557850 + }, + "directionality": "both", + "closedPath": false, + "direction": "F0F0", + "description": { + "geometry": { + "direction": "F0F0", + "circle": { + "center": { + "lat": 411535930, + "long": -1046557850, + "elevation": 18240 + }, + "radius": 50, + "units": "meter" } - ] + } } } - } - }, - "msgCnt": 0 - } + ], + "doNotUse3": 0, + "doNotUse4": 0, + "content": { + "advisory": [ + { + "item": { + "itis": 4868 + } + } + ] + }, + "url": "null" + } + ] } } }, - "dataType": "TravelerInformation" + "dataType": "us.dot.its.jpo.asn.j2735.r2024.TravelerInformation.TravelerInformationMessageFrame" } } \ No newline at end of file diff --git a/cv-data-service-library/src/test/resources/rxMsg_TIM_OdeOutput_MultipleRegions.json b/cv-data-service-library/src/test/resources/rxMsg_TIM_OdeOutput_MultipleRegions.json deleted file mode 100644 index a734db6d..00000000 --- a/cv-data-service-library/src/test/resources/rxMsg_TIM_OdeOutput_MultipleRegions.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "metadata": { - "recordGeneratedBy": "OBU", - "receivedMessageDetails": { - "locationData": { - "elevation": 1515, - "heading": "0.0000", - "latitude": 40.4739533, - "speed": 0.14, - "longitude": -104.9689995 - }, - "rxSource": "SAT" - }, - "schemaVersion": 3, - "securityResultCode": "unknown", - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", - "serialId": { - "recordId": 2, - "serialNumber": 0, - "streamId": "f212c298-4021-412a-b7c6-1fdb64a6a227", - "bundleSize": 1, - "bundleId": 4 - }, - "sanitized": false, - "recordGeneratedAt": "2017-09-05T20:23:39.194Z[UTC]", - "recordType": "rxMsg", - "logFileName": "rxMsg_TIM.bin", - "odeReceivedAt": "2017-11-09T13:33:34.039Z[UTC]" - }, - "payload": { - "data": { - "MessageFrame": { - "messageId": 31, - "value": { - "TravelerInformation": { - "timeStamp": 408812, - "packetID": "EC9C236B0000000000", - "dataFrames": { - "TravelerDataFrame": { - "regions": { - "GeographicalPath": [ - { - "anchor": { - "elevation": 20, - "lat": 263056840, - "long": -801481510 - }, - "name": "SXM DFB CSW 10", - "laneWidth": 600, - "directionality": { - "forward": "" - }, - "description": { - "path": { - "offset": { - "xy": { - "nodes": { - "NodeXY": [ - { - "delta": { - "node-LatLon": { - "lon": -1050524251, - "lat": 405744807 - } - } - }, - { - "delta": { - "node-LatLon": { - "lon": -1050500237, - "lat": 405735393 - } - } - } - ] - } - } - }, - "scale": 0 - } - }, - "direction": 1111100000000001 - }, - { - "anchor": { - "elevation": 20, - "lat": 263056840, - "long": -801481510 - }, - "name": "SXM DFB CSW 10", - "laneWidth": 600, - "directionality": { - "forward": "" - }, - "description": { - "path": { - "offset": { - "xy": { - "nodes": { - "NodeXY": [ - { - "delta": { - "node-LatLon": { - "lon": -1050524251, - "lat": 405744807 - } - } - }, - { - "delta": { - "node-LatLon": { - "lon": -1050500237, - "lat": 405735393 - } - } - } - ] - } - } - }, - "scale": 0 - } - }, - "direction": 1111100000000001 - } - ] - }, - "durationTime": 32000, - "doNotUse3": 0, - "doNotUse4": 0, - "doNotUse1": 0, - "doNotUse2": 0, - "frameType": { - "roadSignage": "" - }, - "msgId": { - "furtherInfoID": "0000" - }, - "startTime": 149760, - "priority": 2, - "content": { - "advisory": { - "SEQUENCE": [ - { - "item": { - "itis": 13609 - } - }, - { - "item": { - "itis": 268 - } - }, - { - "item": { - "itis": 12554 - } - }, - { - "item": { - "itis": 8720 - } - } - ] - } - } - } - }, - "msgCnt": 0 - } - } - } - }, - "dataType": "TravelerInformation" - } -} \ No newline at end of file diff --git a/cv-data-service-library/src/test/resources/rxMsg_TIM_SpeedLimit.json b/cv-data-service-library/src/test/resources/rxMsg_TIM_SpeedLimit.json deleted file mode 100644 index 83e6038d..00000000 --- a/cv-data-service-library/src/test/resources/rxMsg_TIM_SpeedLimit.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "metadata": { - "recordGeneratedBy": "OBU", - "receivedMessageDetails": { - "locationData": { - "elevation": 1515, - "heading": "0.0000", - "latitude": 40.4739533, - "speed": 0.14, - "longitude": -104.9689995 - }, - "rxSource": "SAT" - }, - "schemaVersion": 3, - "securityResultCode": "unknown", - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", - "serialId": { - "recordId": 2, - "serialNumber": 0, - "streamId": "f212c298-4021-412a-b7c6-1fdb64a6a227", - "bundleSize": 1, - "bundleId": 4 - }, - "sanitized": false, - "recordGeneratedAt": "2017-09-05T20:23:39.194Z[UTC]", - "recordType": "rxMsg", - "logFileName": "rxMsg_TIM.bin", - "odeReceivedAt": "2017-11-09T13:33:34.039Z[UTC]" - }, - "payload": { - "data": { - "MessageFrame": { - "messageId": 31, - "value": { - "TravelerInformation": { - "timeStamp": 408812, - "packetID": "EC9C236B0000000000", - "dataFrames": { - "TravelerDataFrame": { - "regions": { - "GeographicalPath": { - "anchor": { - "elevation": 20, - "lat": 263056840, - "long": -801481510 - }, - "name": "SXM DFB CSW 10", - "laneWidth": 600, - "directionality": { - "forward": "" - }, - "description": { - "path": { - "offset": { - "xy": { - "nodes": { - "NodeXY": [ - { - "delta": { - "node-LatLon": { - "lon": -1050524251, - "lat": 405744807 - } - } - }, - { - "delta": { - "node-LatLon": { - "lon": -1050500237, - "lat": 405735393 - } - } - } - ] - } - } - }, - "scale": 0 - } - }, - "direction": 1111100000000001 - } - }, - "durationTime": 32000, - "doNotUse3": 0, - "doNotUse4": 0, - "doNotUse1": 0, - "doNotUse2": 0, - "frameType": { - "roadSignage": "" - }, - "msgId": { - "furtherInfoID": "0000" - }, - "startTime": 149760, - "priority": 2, - "content": { - "speedLimit": { - "SEQUENCE": [ - { - "item": { - "itis": 13609 - } - }, - { - "item": { - "itis": 268 - } - }, - { - "item": { - "itis": 12554 - } - }, - { - "item": { - "itis": 8720 - } - } - ] - } - } - } - }, - "msgCnt": 0 - } - } - } - }, - "dataType": "TravelerInformation" - } - } \ No newline at end of file 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 7963c197..03db75fd 100644 --- a/cv-data-service-library/src/test/resources/tim_construction.json +++ b/cv-data-service-library/src/test/resources/tim_construction.json @@ -1,122 +1,123 @@ { - "metadata": { - "request": { - "ode": { "verb": "POST", "version": 3 }, - "sdw": { - "recordId": "BC1AC5E4", - "serviceRegion": { - "nwCorner": { "latitude": 41.77329283, "longitude": -107.1000312 }, - "seCorner": { "latitude": 41.77163046, "longitude": -107.07895106 } - }, - "ttl": "oneyear" - } - }, - "recordGeneratedBy": "TMC", - "schemaVersion": 6, - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", - "odePacketID": "59CE5322A49CED33CB", - "serialId": { - "recordId": 0, - "serialNumber": 917, - "streamId": "9fa59341-9cab-403e-8306-6876238e9fda", - "bundleSize": 1, - "bundleId": 917 + "metadata": { + "payloadType": "us.dot.its.jpo.ode.model.OdeMessageFramePayload", + "serialId": { + "streamId": "ef0b70ca-be5e-4192-a5e1-115116ab7864", + "bundleSize": 1, + "bundleId": 25, + "recordId": 0, + "serialNumber": 25 + }, + "odeReceivedAt": "2026-01-15T21:29:33.019Z", + "schemaVersion": 9, + "maxDurationTime": 7199, + "recordGeneratedAt": "2026-01-15T21:29:32.936Z", + "recordGeneratedBy": "TMC", + "sanitized": false, + "odePacketID": "1B2843F8509412F770", + "odeTimStartDateTime": "2024-03-26T00:00:00.000Z", + "request": { + "ode": { + "version": 3, + "verb": "POST" + }, + "sdw": { + "serviceRegion": { + "nwCorner": { + "latitude": 39.61320660700005, + "longitude": -104.89573620999994 + }, + "seCorner": { + "latitude": 39.60023459400003, + "longitude": -104.88829135999998 + } }, - "sanitized": false, - "recordGeneratedAt": "2021-03-23T18:24:18.410648Z", - "maxDurationTime": 32000, - "odeTimStartDateTime": "2021-03-04T00:00:00.000Z", - "odeReceivedAt": "2021-03-23T18:24:18.438Z" + "ttl": "oneweek", + "recordId": "D4ECADF7" + } + }, + "isCertPresent": false + }, + "payload": { + "data": { + "messageId": 31, + "value": { + "TravelerInformation": { + "msgCnt": 1, + "timeStamp": 22682, + "packetID": "1B2843F8509412F770", + "urlB": "null", + "dataFrames": [ + { + "doNotUse1": 0, + "frameType": "roadSignage", + "msgId": { + "furtherInfoID": "0000" + }, + "startYear": 2024, + "startTime": 122400, + "durationTime": 7199, + "priority": 5, + "doNotUse2": 0, + "regions": [ + { + "name": "I_025A_DEC_SAT-D4ECADF7_RW_test20240326-3-I-12559", + "id": { + "region": 0, + "id": 0 + }, + "anchor": { + "lat": 396133302, + "long": -1048958060 + }, + "laneWidth": 5000, + "directionality": "both", + "closedPath": false, + "direction": "0300", + "description": { + "path": { + "scale": 0, + "offset": { + "ll": { + "nodes": [ + { + "delta": { + "node-LL1": { + "lon": 698, + "lat": -1236 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 74448, + "lat": -129720 + } + } + } + ] + } + } + } + } + } + ], + "doNotUse3": 0, + "doNotUse4": 0, + "content": { + "advisory": [ + { "item": { "itis": 1537 } }, + { "item": { "itis": 12554 } }, + { "item": { "itis": 8728 } } + ] + }, + "url": "null" + } + ] + } + } }, - "payload": { - "data": { - "msgCnt": 1, - "timeStamp": 117744, - "packetID": "59CE5322A49CED33CB", - "urlB": "null", - "dataFrames": [ - { - "doNotUse1": 0, - "frameType": "roadSignage", - "msgId": { - "furtherInfoID": "0000" - }, - "durationTime": 32000, - "startYear": 2021, - "startTime": 89280, - "priority": 5, - "doNotUse2": 0, - "regions": [ - { - "name": "I_I 80_SAT-BC1AC5E4_RW_24869%BUFF0-0", - "id": { - "region": 0, - "id": 0 - }, - "anchor": { "lat": 417732928, "long": -1071000312 }, - "laneWidth": 5000, - "directionality": "both", - "closedPath": false, - "direction": { - "from000-0to022-5degrees": false, - "from022-5to045-0degrees": false, - "from045-0to067-5degrees": false, - "from067-5to090-0degrees": true, - "from090-0to112-5degrees": true, - "from112-5to135-0degrees": false, - "from135-0to157-5degrees": false, - "from157-5to180-0degrees": false, - "from180-0to202-5degrees": false, - "from202-5to225-0degrees": false, - "from225-0to247-5degrees": false, - "from247-5to270-0degrees": false, - "from270-0to292-5degrees": false, - "from292-5to315-0degrees": false, - "from315-0to337-5degrees": false, - "from337-5to360-0degrees": false - }, - "description": { - "path": { - "scale": 0, - "offset": { - "ll": { - "nodes": [ - { "delta": { "node-LL1": { "lon": 0, "lat": 0 } } }, - { - "delta": { - "node-LL4": { "lon": 115529, "lat": -16624 } - } - }, - { - "delta": { - "node-LL4": { "lon": 39044, "lat": 1521 } - } - }, - { - "delta": { - "node-LL4": { "lon": 56228, "lat": 11450 } - } - } - ] - } - } - } - } - } - ], - "doNotUse3": 0, - "doNotUse4": 0, - "content": { - "workZone": [ - { "item": { "itis": 1537 } }, - { "item": { "itis": 12554 } }, - { "item": { "itis": 8728 } } - ] - }, - "url": "null" - } - ] - }, - "dataType": "us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation" - } + "dataType": "us.dot.its.jpo.asn.j2735.r2024.TravelerInformation.TravelerInformationMessageFrame" + } } \ No newline at end of file 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 dfdbc019..b4523499 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 @@ -1,175 +1,213 @@ { "metadata": { + "payloadType": "us.dot.its.jpo.ode.model.OdeMessageFramePayload", + "serialId": { + "streamId": "d5161114-baa9-48f8-a023-e6534df27eb4", + "bundleSize": 1, + "bundleId": 41, + "recordId": 0, + "serialNumber": 41 + }, + "odeReceivedAt": "2026-01-15T21:29:33.019Z", + "schemaVersion": 9, + "maxDurationTime": 7199, + "recordGeneratedAt": "2026-01-15T21:29:32.936Z", + "recordGeneratedBy": "TMC", + "sanitized": false, + "odePacketID": "1B2843400263D4D50E", + "odeTimStartDateTime": "2024-03-26T00:00:00.000Z", "request": { - "ode": { "verb": "POST", "version": 3 }, + "ode": { + "version": 3, + "verb": "POST" + }, "sdw": { - "recordId": "BC1AC5E4", "serviceRegion": { - "nwCorner": { "latitude": 41.77329283, "longitude": -107.1000312 }, - "seCorner": { "latitude": 41.77163046, "longitude": -107.07895106 } + "nwCorner": { + "latitude": 40.73653593400007, + "longitude": -105.01839861199994 + }, + "seCorner": { + "latitude": 39.61320660700005, + "longitude": -104.89573620999994 + } }, - "ttl": "oneyear" + "ttl": "oneweek", + "recordId": "721A7365" } }, - "recordGeneratedBy": "TMC", - "schemaVersion": 6, - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", - "odePacketID": "59CE5322A49CED33CB", - "serialId": { - "recordId": 0, - "serialNumber": 917, - "streamId": "9fa59341-9cab-403e-8306-6876238e9fda", - "bundleSize": 1, - "bundleId": 917 - }, - "sanitized": false, - "recordGeneratedAt": "2021-03-23T18:24:18.410648Z", - "maxDurationTime": 32000, - "odeTimStartDateTime": "2021-03-04T00:00:00.000Z", - "odeReceivedAt": "2021-03-23T18:24:18.438Z" + "isCertPresent": false }, "payload": { "data": { - "msgCnt": 1, - "timeStamp": 117744, - "packetID": "59CE5322A49CED33CB", - "urlB": "null", - "dataFrames": [ - { - "doNotUse1": 0, - "frameType": "roadSignage", - "msgId": { - "furtherInfoID": "0000" - }, - "durationTime": 32000, - "startYear": 2021, - "startTime": 89280, - "priority": 5, - "doNotUse2": 0, - "regions": [ + "messageId": 31, + "value": { + "TravelerInformation": { + "msgCnt": 1, + "timeStamp": 22749, + "packetID": "1B2843400263D4D50E", + "urlB": "null", + "dataFrames": [ { - "closedPath": false, - "anchor": { "lat": 417732928, "long": -1071000312 }, - "name": "I_I 80_SAT-BC1AC5E4_RW_24869%BUFF0-0", - "laneWidth": 5000, - "directionality": "both", - "description": { - "path": { - "offset": { - "ll": { - "nodes": [ - { "delta": { "node-LL1": { "lon": 0, "lat": 0 } } }, - { - "delta": { - "node-LL4": { "lon": 115529, "lat": -16624 } - } - }, - { - "delta": { - "node-LL4": { "lon": 39044, "lat": 1521 } - } - }, - { - "delta": { - "node-LL4": { "lon": 56228, "lat": 11450 } - } + "doNotUse1": 0, + "frameType": "roadSignage", + "msgId": { + "furtherInfoID": "0000" + }, + "startYear": 2024, + "startTime": 122400, + "durationTime": 7199, + "priority": 5, + "doNotUse2": 0, + "regions": [ + { + "name": "I_025A_DEC_SAT-721A7365_RW_test20240326-3-I-12559", + "id": { + "region": 0, + "id": 0 + }, + "anchor": { + "lat": 396130830, + "long": -1048956660 + }, + "laneWidth": 5000, + "directionality": "both", + "closedPath": false, + "direction": "E00F", + "description": { + "path": { + "scale": 0, + "offset": { + "ll": { + "nodes": [ + { + "delta": { + "node-LL1": { + "lon": -702, + "lat": 1236 + } + } + }, + { + "delta": { + "node-LL5": { + "lon": -97591, + "lat": 172251 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": -19501, + "lat": 44134 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": -35318, + "lat": 48928 + } + } + } + ] } - ] + } } + } + }, + { + "name": "Temp", + "id": { + "region": 0, + "id": 0 }, - "scale": 0 - } - }, - "id": { "id": 0, "region": 0 }, - "direction": { - "from000-0to022-5degrees": false, - "from022-5to045-0degrees": false, - "from045-0to067-5degrees": false, - "from067-5to090-0degrees": true, - "from090-0to112-5degrees": true, - "from112-5to135-0degrees": false, - "from135-0to157-5degrees": false, - "from157-5to180-0degrees": false, - "from180-0to202-5degrees": false, - "from202-5to225-0degrees": false, - "from225-0to247-5degrees": false, - "from247-5to270-0degrees": false, - "from270-0to292-5degrees": false, - "from292-5to315-0degrees": false, - "from315-0to337-5degrees": false, - "from337-5to360-0degrees": false - } - }, - { - "id": { - "region": 0, - "id": 0 - }, - "anchor": { "lat": 417732928, "long": -1071000312 }, - "name": "I_I 80_SAT-BC1AC5E4_RW_24869%BUFF0-0", - "laneWidth": 5000, - "directionality": "both", - "closedPath": false, - "direction": { - "from000-0to022-5degrees": false, - "from022-5to045-0degrees": false, - "from045-0to067-5degrees": false, - "from067-5to090-0degrees": true, - "from090-0to112-5degrees": true, - "from112-5to135-0degrees": false, - "from135-0to157-5degrees": false, - "from157-5to180-0degrees": false, - "from180-0to202-5degrees": false, - "from202-5to225-0degrees": false, - "from225-0to247-5degrees": false, - "from247-5to270-0degrees": false, - "from270-0to292-5degrees": false, - "from292-5to315-0degrees": false, - "from315-0to337-5degrees": false, - "from337-5to360-0degrees": false - }, - "description": { - "path": { - "scale": 0, - "offset": { - "ll": { - "nodes": [ - { "delta": { "node-LL1": { "lon": 0, "lat": 0 } } }, - { - "delta": { - "node-LL4": { "lon": 115529, "lat": -16624 } - } - }, - { - "delta": { - "node-LL4": { "lon": 39044, "lat": 1521 } - } - }, - { - "delta": { - "node-LL4": { "lon": 56228, "lat": 11450 } - } + "anchor": { + "lat": 399840592, + "long": -1049882243 + }, + "laneWidth": 5000, + "directionality": "both", + "closedPath": false, + "direction": "E10F", + "description": { + "path": { + "scale": 0, + "offset": { + "ll": { + "nodes": [ + { + "delta": { + "node-LL3": { + "lon": 5667, + "lat": 31904 + } + } + }, + { + "delta": { + "node-LL3": { + "lon": 15679, + "lat": 32740 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 48062, + "lat": 90548 + } + } + }, + { + "delta": { + "node-LL3": { + "lon": 4032, + "lat": 17529 + } + } + }, + { + "delta": { + "node-LL5": { + "lon": 3227, + "lat": 1112951 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 3490, + "lat": 42717 + } + } + } + ] } - ] + } } } } - } + ], + "doNotUse3": 0, + "doNotUse4": 0, + "content": { + "advisory": [ + { "item": { "itis": 1537 } }, + { "item": { "itis": 12554 } }, + { "item": { "itis": 8728 } } + ] + }, + "url": "null" } - ], - "doNotUse3": 0, - "doNotUse4": 0, - "content": { - "workZone": [ - { "item": { "itis": 1537 } }, - { "item": { "itis": 12554 } }, - { "item": { "itis": 8728 } } - ] - }, - "url": "null" + ] } - ] + } }, - "dataType": "us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation" + "dataType": "us.dot.its.jpo.asn.j2735.r2024.TravelerInformation.TravelerInformationMessageFrame" } -} +} \ No newline at end of file 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 16462839..5bf685af 100644 --- a/cv-data-service-library/src/test/resources/tim_parking.json +++ b/cv-data-service-library/src/test/resources/tim_parking.json @@ -1,112 +1,135 @@ { - "metadata": { - "request": { - "ode": { "verb": "POST", "version": 3 }, - "sdw": { - "recordId": "1AF9F730", - "serviceRegion": { - "nwCorner": { "latitude": 41.09852308, "longitude": -105.13317609 }, - "seCorner": { "latitude": 41.09795279, "longitude": -105.11411777 } - }, - "ttl": "oneday" - } - }, - "recordGeneratedBy": "TMC", - "schemaVersion": 6, - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", - "odePacketID": "AE394DB5A033905B26", - "serialId": { - "recordId": 0, - "serialNumber": 922, - "streamId": "9fa59341-9cab-403e-8306-6876238e9fda", - "bundleSize": 1, - "bundleId": 922 + "metadata": { + "payloadType": "us.dot.its.jpo.ode.model.OdeMessageFramePayload", + "serialId": { + "streamId": "96ae544f-85f8-4162-aec5-fc54974fb1c2", + "bundleSize": 1, + "bundleId": 24, + "recordId": 0, + "serialNumber": 24 + }, + "odeReceivedAt": "2026-01-15T21:29:33.019Z", + "schemaVersion": 9, + "maxDurationTime": 120, + "recordGeneratedAt": "2026-01-15T21:29:32.936Z", + "recordGeneratedBy": "TMC", + "sanitized": false, + "odePacketID": "1B28436B7EFB7C7794", + "odeTimStartDateTime": "2026-01-15T22:50:30.311Z", + "request": { + "ode": { + "version": 3, + "verb": "POST" + }, + "sdw": { + "serviceRegion": { + "nwCorner": { + "latitude": 39.61320660700005, + "longitude": -104.89573620999994 + }, + "seCorner": { + "latitude": 39.60023459400003, + "longitude": -104.88829135999998 + } }, - "sanitized": false, - "recordGeneratedAt": "2021-03-23T19:20:48.130840Z", - "maxDurationTime": 120, - "odeTimStartDateTime": "2021-03-23T19:20:47.118Z", - "odeReceivedAt": "2021-03-23T19:20:48.177Z" + "ttl": "oneday", + "recordId": "3B3E7B6F" + } + }, + "isCertPresent": false + }, + "payload": { + "data": { + "messageId": 31, + "value": { + "TravelerInformation": { + "msgCnt": 1, + "timeStamp": 21530, + "packetID": "1B28436B7EFB7C7794", + "urlB": "null", + "dataFrames": [ + { + "doNotUse1": 0, + "frameType": "roadSignage", + "msgId": { + "furtherInfoID": "0000" + }, + "startYear": 2026, + "startTime": 21530, + "durationTime": 120, + "priority": 5, + "doNotUse2": 0, + "regions": [ + { + "name": "I_025A_DEC_SAT-3B3E7B6F_P_test", + "id": { + "region": 0, + "id": 0 + }, + "anchor": { + "lat": 396133302, + "long": -1048958060 + }, + "laneWidth": 5000, + "directionality": "both", + "closedPath": false, + "direction": "0300", + "description": { + "path": { + "scale": 0, + "offset": { + "ll": { + "nodes": [ + { + "delta": { + "node-LL1": { + "lon": 698, + "lat": -1236 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 74448, + "lat": -129720 + } + } + } + ] + } + } + } + } + } + ], + "doNotUse3": 0, + "doNotUse4": 0, + "content": { + "advisory": [ + { + "item": { + "itis": 4104 + } + }, + { + "item": { + "itis": 11794 + } + }, + { + "item": { + "text": "345" + } + } + ] + }, + "url": "null" + } + ] + } + } }, - "payload": { - "data": { - "msgCnt": 1, - "timeStamp": 117800, - "packetID": "AE394DB5A033905B26", - "urlB": null, - "dataFrames": [ - { - "doNotUse1": 0, - "frameType": "roadSignage", - "msgId": { - "furtherInfoID": "0000" - }, - "durationTime": 32000, - "startYear": 2021, - "startTime": 89280, - "priority": 5, - "doNotUse2": 0, - "regions": [ - { - "name": "I_I 25_SAT-A5FB00B7_VSL_V004988-0", - "id": { - "region": 0, - "id": 0 - }, - "anchor": { "lat": 417732928, "long": -1071000312 }, - "laneWidth": 5000, - "directionality": "both", - "closedPath": false, - "direction": { - "from000-0to022-5degrees": false, - "from022-5to045-0degrees": false, - "from045-0to067-5degrees": false, - "from067-5to090-0degrees": true, - "from090-0to112-5degrees": true, - "from112-5to135-0degrees": false, - "from135-0to157-5degrees": false, - "from157-5to180-0degrees": false, - "from180-0to202-5degrees": false, - "from202-5to225-0degrees": false, - "from225-0to247-5degrees": false, - "from247-5to270-0degrees": false, - "from270-0to292-5degrees": false, - "from292-5to315-0degrees": false, - "from315-0to337-5degrees": false, - "from337-5to360-0degrees": false - }, - "description": { - "path": { - "scale": 0, - "offset": { - "ll": { - "nodes": [ - { "node-LL1": { "lon": 0, "lat": 0 } }, - { - "node-LL5": { "lon": 133699, "lat": 163 } - }, - { - "node-LL4": { "lon": 56885, "lat": -5703 } - } ] - } - } - } - } - } - ], - "doNotUse3": 0, - "doNotUse4": 0, - "content": { - "exitService": [ - { "item": { "itis": 4104 } }, - { "item": { "itis": 11794 } }, - { "item": { "text": 345 } } - ] - }, - "url": "null" - } - ] - }, - "dataType": "us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation" - } -} + "dataType": "us.dot.its.jpo.asn.j2735.r2024.TravelerInformation.TravelerInformationMessageFrame" + } +} \ No newline at end of file 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 2f84d98d..6f6e0787 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 @@ -1,166 +1,233 @@ { "metadata": { + "payloadType": "us.dot.its.jpo.ode.model.OdeMessageFramePayload", + "serialId": { + "streamId": "96ae544f-85f8-4162-aec5-fc54974fb1c2", + "bundleSize": 1, + "bundleId": 24, + "recordId": 0, + "serialNumber": 24 + }, + "odeReceivedAt": "2026-01-15T21:29:33.019Z", + "schemaVersion": 9, + "maxDurationTime": 120, + "recordGeneratedAt": "2026-01-15T21:29:32.936Z", + "recordGeneratedBy": "TMC", + "sanitized": false, + "odePacketID": "1B28436B7EFB7C7794", + "odeTimStartDateTime": "2026-01-15T22:50:30.311Z", "request": { - "ode": { "verb": "POST", "version": 3 }, + "ode": { + "version": 3, + "verb": "POST" + }, "sdw": { - "recordId": "1AF9F730", "serviceRegion": { - "nwCorner": { "latitude": 41.09852308, "longitude": -105.13317609 }, - "seCorner": { "latitude": 41.09795279, "longitude": -105.11411777 } + "nwCorner": { + "latitude": 39.61320660700005, + "longitude": -104.89573620999994 + }, + "seCorner": { + "latitude": 39.60023459400003, + "longitude": -104.88829135999998 + } }, - "ttl": "oneday" + "ttl": "oneday", + "recordId": "3B3E7B6F" } }, - "recordGeneratedBy": "TMC", - "schemaVersion": 6, - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", - "odePacketID": "AE394DB5A033905B26", - "serialId": { - "recordId": 0, - "serialNumber": 922, - "streamId": "9fa59341-9cab-403e-8306-6876238e9fda", - "bundleSize": 1, - "bundleId": 922 - }, - "sanitized": false, - "recordGeneratedAt": "2021-03-23T19:20:48.130840Z", - "maxDurationTime": 120, - "odeTimStartDateTime": "2021-03-23T19:20:47.118Z", - "odeReceivedAt": "2021-03-23T19:20:48.177Z" + "isCertPresent": false }, "payload": { "data": { - "timeStamp": 117800, - "packetID": "AE394DB5A033905B26", - "urlB": null, - "dataFrames": [ + "messageId": 31, + "value": { + "TravelerInformation": { + "msgCnt": 1, + "timeStamp": 21530, + "packetID": "1B28436B7EFB7C7794", + "urlB": "null", + "dataFrames": [ { - "regions": [ + "doNotUse1": 0, + "frameType": "roadSignage", + "msgId": { + "furtherInfoID": "0000" + }, + "startYear": 2026, + "startTime": 21530, + "durationTime": 120, + "priority": 5, + "doNotUse2": 0, + "regions": [ { - "closedPath": false, - "anchor": { "lat": 410985067, "long": -1051331761 }, - "name": "I_I 80_SAT-1AF9F730_P_68-0", + "name": "I_025A_DEC_SAT-F8EA5688_VSL_testid-I-8720", + "id": { + "region": 0, + "id": 0 + }, + "anchor": { + "lat": 396130830, + "long": -1048956660 + }, "laneWidth": 5000, "directionality": "both", + "closedPath": false, + "direction": "E00F", "description": { "path": { + "scale": 0, "offset": { "ll": { "nodes": [ - { - "delta": { "node-LL1": { "lon": 0, "lat": 0 } } - }, - { - "delta": { - "node-LL5": { "lon": 133699, "lat": 163 } + { + "delta": { + "node-LL1": { + "lon": -702, + "lat": 1236 } - }, - { - "delta": { - "node-LL4": { "lon": 56885, "lat": -5703 } + } + }, + { + "delta": { + "node-LL5": { + "lon": -97591, + "lat": 172251 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": -19501, + "lat": 44134 } } - ] + }, + { + "delta": { + "node-LL4": { + "lon": -35318, + "lat": 48928 + } + } + }, + { + "delta": { + "node-LL5": { + "lon": -75595, + "lat": 133609 + } + } + } + ] } - }, - "scale": 0 + } } - }, - "id": { "id": 0, "region": 0 }, - "direction": { - "from000-0to022-5degrees": false, - "from022-5to045-0degrees": false, - "from045-0to067-5degrees": false, - "from067-5to090-0degrees": true, - "from090-0to112-5degrees": true, - "from112-5to135-0degrees": false, - "from135-0to157-5degrees": false, - "from157-5to180-0degrees": false, - "from180-0to202-5degrees": false, - "from202-5to225-0degrees": false, - "from225-0to247-5degrees": false, - "from247-5to270-0degrees": false, - "from270-0to292-5degrees": false, - "from292-5to315-0degrees": false, - "from315-0to337-5degrees": false, - "from337-5to360-0degrees": false - } + } }, { - "closedPath": "false", - "anchor": { "lat": 410985067, "long": -1051331761 }, - "name": "I_I 80_SAT-1AF9F730_P_68-0", + "name": "Temp", + "id": { + "region": 0, + "id": 0 + }, + "anchor": { + "lat": 399840592, + "long": -1049882243 + }, "laneWidth": 5000, "directionality": "both", + "closedPath": false, + "direction": "E10F", "description": { "path": { + "scale": 0, "offset": { "ll": { "nodes": [ - { - "delta": { "node-LL1": { "lon": 0, "lat": 0 } } - }, - { - "delta": { - "node-LL5": { "lon": 133699, "lat": 163 } + { + "delta": { + "node-LL3": { + "lon": 5667, + "lat": 31904 + } + } + }, + { + "delta": { + "node-LL3": { + "lon": 15679, + "lat": 32740 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 48062, + "lat": 90548 + } + } + }, + { + "delta": { + "node-LL3": { + "lon": 4032, + "lat": 17529 } - }, - { - "delta": { - "node-LL4": { "lon": 56885, "lat": -5703 } + } + }, + { + "delta": { + "node-LL5": { + "lon": 3227, + "lat": 1112951 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 3490, + "lat": 42717 } } - ] + } + ] } - }, - "scale": 0 + } } - }, - "id": { "id": 0, "region": 0 }, - "direction": { - "from000-0to022-5degrees": false, - "from022-5to045-0degrees": false, - "from045-0to067-5degrees": false, - "from067-5to090-0degrees": true, - "from090-0to112-5degrees": true, - "from112-5to135-0degrees": false, - "from135-0to157-5degrees": false, - "from157-5to180-0degrees": false, - "from180-0to202-5degrees": false, - "from202-5to225-0degrees": false, - "from225-0to247-5degrees": false, - "from247-5to270-0degrees": false, - "from270-0to292-5degrees": false, - "from292-5to315-0degrees": false, - "from315-0to337-5degrees": false, - "from337-5to360-0degrees": false - } + } } ], - "durationTime": 120, - "doNotUse3": 0, - "doNotUse4": 0, - "startYear": 2021, - "msgId": { - "furtherInfoID": "0000" - }, - "priority": 5, - "content": { - "exitService": [ - { "item": { "itis": 4104 } }, - { "item": { "itis": 11794 } }, - { "item": { "text": 345 } } - ] - }, - "url": "null", - "doNotUse1": 0, - "doNotUse2": 0, - "frameType": "roadSignage", - "startTime": 117800 - } - ], - "msgCnt": 1 + "doNotUse3": 0, + "doNotUse4": 0, + "content": { + "advisory": [ + { + "item": { + "itis": 4104 + } + }, + { + "item": { + "itis": 11794 + } + }, + { + "item": { + "text": "345" + } + } + ] + }, + "url": "null" + } + ] + } + } }, - "dataType": "TravelerInformation" + "dataType": "us.dot.its.jpo.asn.j2735.r2024.TravelerInformation.TravelerInformationMessageFrame" } -} +} \ No newline at end of file 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 df0b40fd..a49b6773 100644 --- a/cv-data-service-library/src/test/resources/tim_vsl.json +++ b/cv-data-service-library/src/test/resources/tim_vsl.json @@ -1,105 +1,123 @@ { "metadata": { + "payloadType": "us.dot.its.jpo.ode.model.OdeMessageFramePayload", + "serialId": { + "streamId": "9935aa0b-c880-4d87-b779-e45253e8a543", + "bundleSize": 1, + "bundleId": 19, + "recordId": 0, + "serialNumber": 19 + }, + "odeReceivedAt": "2026-01-15T21:29:33.019Z", + "schemaVersion": 9, + "maxDurationTime": 32000, + "recordGeneratedAt": "2026-01-15T21:29:32.936Z", + "recordGeneratedBy": "TMC", + "sanitized": false, + "odePacketID": "1B284337DA1361FA52", + "odeTimStartDateTime": "2026-01-15T21:29:31.531Z", "request": { - "ode": { "verb": "POST", "version": 3 }, + "ode": { + "version": 3, + "verb": "POST" + }, "sdw": { - "recordId": "A5FB00B7", "serviceRegion": { - "nwCorner": { "latitude": 42.8616018, "longitude": -106.3393164 }, - "seCorner": { "latitude": 42.8616018, "longitude": -106.3393164 } + "nwCorner": { + "latitude": 39.61320660700005, + "longitude": -104.89573620999994 + }, + "seCorner": { + "latitude": 39.60023459400003, + "longitude": -104.88829135999998 + } }, - "ttl": "oneyear" + "ttl": "oneyear", + "recordId": "C29B86EF" } }, - "recordGeneratedBy": "TMC", - "schemaVersion": 6, - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", - "odePacketID": "FCEAC42FC4F3A9E274", - "serialId": { - "recordId": 0, - "serialNumber": 5745, - "streamId": "28dcab17-fb6b-4df5-8139-6cf59e5d64c5", - "bundleSize": 1, - "bundleId": 5745 - }, - "sanitized": false, - "recordGeneratedAt": "2021-03-22T08:41:37.953583Z", - "maxDurationTime": 32000, - "odeTimStartDateTime": "2021-03-22T08:41:36.848Z", - "odeReceivedAt": "2021-03-22T08:41:38.108Z" + "isCertPresent": false }, "payload": { "data": { - "msgCnt": 1, - "timeStamp": 115721, - "packetID": "FCEAC42FC4F3A9E274", - "urlB": "null", - "dataFrames": [ - { - "doNotUse1": 0, - "frameType": "roadSignage", - "msgId": { - "furtherInfoID": "0000" - }, - "durationTime": 32000, - "startYear": 2021, - "startTime": 89280, - "priority": 5, - "doNotUse2": 0, - "regions": [ + "messageId": 31, + "value": { + "TravelerInformation": { + "msgCnt": 1, + "timeStamp": 21449, + "packetID": "1B284337DA1361FA52", + "urlB": "null", + "dataFrames": [ { - "name": "I_I 25_SAT-A5FB00B7_VSL_V004988-0", - "id": { - "region": 0, - "id": 0 - }, - "anchor": { "lat": 417732928, "long": -1071000312 }, - "laneWidth": 5000, - "directionality": "both", - "closedPath": false, - "direction": { - "from000-0to022-5degrees": false, - "from022-5to045-0degrees": false, - "from045-0to067-5degrees": false, - "from067-5to090-0degrees": true, - "from090-0to112-5degrees": true, - "from112-5to135-0degrees": false, - "from135-0to157-5degrees": false, - "from157-5to180-0degrees": false, - "from180-0to202-5degrees": false, - "from202-5to225-0degrees": false, - "from225-0to247-5degrees": false, - "from247-5to270-0degrees": false, - "from270-0to292-5degrees": false, - "from292-5to315-0degrees": false, - "from315-0to337-5degrees": false, - "from337-5to360-0degrees": false + "doNotUse1": 0, + "frameType": "roadSignage", + "msgId": { + "furtherInfoID": "0000" }, - "description": { - "path": { - "scale": 0, - "offset": { - "ll": { - "nodes": [{ "node-LL3": { "lon": -13675, "lat": 10295 } }] + "startYear": 2026, + "startTime": 21449, + "durationTime": 32000, + "priority": 5, + "doNotUse2": 0, + "regions": [ + { + "name": "I_025A_DEC_SAT-C29B86EF_VSL_testid-I-8720", + "id": { + "region": 0, + "id": 0 + }, + "anchor": { + "lat": 396133302, + "long": -1048958060 + }, + "laneWidth": 5000, + "directionality": "both", + "closedPath": false, + "direction": "0300", + "description": { + "path": { + "scale": 0, + "offset": { + "ll": { + "nodes": [ + { + "delta": { + "node-LL1": { + "lon": 698, + "lat": -1236 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 74448, + "lat": -129720 + } + } + } + ] + } + } } } } - } + ], + "doNotUse3": 0, + "doNotUse4": 0, + "content": { + "advisory": [ + { "item": { "itis": 268 } }, + { "item": { "itis": 12604 } }, + { "item": { "itis": 8720 } } + ] + }, + "url": "null" } - ], - "doNotUse3": 0, - "doNotUse4": 0, - "content": { - "speedLimit": [ - { "item": { "itis": 268 } }, - { "item": { "itis": 12604 } }, - { "item": { "itis": 8720 } } - ] - }, - "url": "null" + ] } - ] + } }, - "dataType": "us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation" + "dataType": "us.dot.its.jpo.asn.j2735.r2024.TravelerInformation.TravelerInformationMessageFrame" } -} +} \ No newline at end of file diff --git a/cv-data-service-library/src/test/resources/tim_vsl_MultipleRegions.json b/cv-data-service-library/src/test/resources/tim_vsl_MultipleRegions.json index f741bca1..10215f4c 100644 --- a/cv-data-service-library/src/test/resources/tim_vsl_MultipleRegions.json +++ b/cv-data-service-library/src/test/resources/tim_vsl_MultipleRegions.json @@ -1,150 +1,221 @@ { "metadata": { + "payloadType": "us.dot.its.jpo.ode.model.OdeMessageFramePayload", + "serialId": { + "streamId": "108b58aa-9109-4e4c-91e5-d98ec3f99977", + "bundleSize": 1, + "bundleId": 40, + "recordId": 0, + "serialNumber": 40 + }, + "odeReceivedAt": "2026-01-15T21:29:33.019Z", + "schemaVersion": 9, + "maxDurationTime": 32000, + "recordGeneratedAt": "2026-01-15T21:29:32.936Z", + "recordGeneratedBy": "TMC", + "sanitized": false, + "odePacketID": "1B28434A6D55339705", + "odeTimStartDateTime": "2026-01-16T18:56:54.790Z", "request": { - "ode": { "verb": "POST", "version": 3 }, + "ode": { + "version": 3, + "verb": "POST" + }, "sdw": { - "recordId": "A5FB00B7", "serviceRegion": { - "nwCorner": { "latitude": 42.8616018, "longitude": -106.3393164 }, - "seCorner": { "latitude": 42.8616018, "longitude": -106.3393164 } + "nwCorner": { + "latitude": 40.73653593400007, + "longitude": -105.01839861199994 + }, + "seCorner": { + "latitude": 39.61320660700005, + "longitude": -104.89573620999994 + } }, - "ttl": "oneyear" + "ttl": "oneyear", + "recordId": "F8EA5688" } }, - "recordGeneratedBy": "TMC", - "schemaVersion": 6, - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", - "odePacketID": "FCEAC42FC4F3A9E274", - "serialId": { - "recordId": 0, - "serialNumber": 5745, - "streamId": "28dcab17-fb6b-4df5-8139-6cf59e5d64c5", - "bundleSize": 1, - "bundleId": 5745 - }, - "sanitized": false, - "recordGeneratedAt": "2021-03-22T08:41:37.953583Z", - "maxDurationTime": 32000, - "odeTimStartDateTime": "2021-03-22T08:41:36.848Z", - "odeReceivedAt": "2021-03-22T08:41:38.108Z" + "isCertPresent": false }, "payload": { "data": { - "timeStamp": 115721, - "packetID": "FCEAC42FC4F3A9E274", - "urlB": "null", - "dataFrames": [ - { - "regions": [ + "messageId": 31, + "value": { + "TravelerInformation": { + "msgCnt": 1, + "timeStamp": 22736, + "packetID": "1B28434A6D55339705", + "urlB": "null", + "dataFrames": [ { - "closedPath": "false", - "anchor": { "lat": 428605724, "long": -1063379489 }, - "name": "I_I 25_SAT-A5FB00B7_VSL_V004988-0", - "laneWidth": 5000, - "directionality": "both", - "description": { - "path": { - "offset": { - "ll": { - "nodes": [ - { - "delta": { - "node-LL3": { "lon": -13675, "lat": 10295 } - } + "doNotUse1": 0, + "frameType": "roadSignage", + "msgId": { + "furtherInfoID": "0000" + }, + "startYear": 2026, + "startTime": 22736, + "durationTime": 32000, + "priority": 5, + "doNotUse2": 0, + "regions": [ + { + "name": "I_025A_DEC_SAT-F8EA5688_VSL_testid-I-8720", + "id": { + "region": 0, + "id": 0 + }, + "anchor": { + "lat": 396130830, + "long": -1048956660 + }, + "laneWidth": 5000, + "directionality": "both", + "closedPath": false, + "direction": "E00F", + "description": { + "path": { + "scale": 0, + "offset": { + "ll": { + "nodes": [ + { + "delta": { + "node-LL1": { + "lon": -702, + "lat": 1236 + } + } + }, + { + "delta": { + "node-LL5": { + "lon": -97591, + "lat": 172251 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": -19501, + "lat": 44134 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": -35318, + "lat": 48928 + } + } + }, + { + "delta": { + "node-LL5": { + "lon": -75595, + "lat": 133609 + } + } + } + ] } - ] + } } + } + }, + { + "name": "Temp", + "id": { + "region": 0, + "id": 0 }, - "scale": 0 - } - }, - "id": { "id": 0, "region": 0 }, - "direction": { - "from000-0to022-5degrees": false, - "from022-5to045-0degrees": false, - "from045-0to067-5degrees": false, - "from067-5to090-0degrees": false, - "from090-0to112-5degrees": false, - "from112-5to135-0degrees": false, - "from135-0to157-5degrees": false, - "from157-5to180-0degrees": false, - "from180-0to202-5degrees": false, - "from202-5to225-0degrees": false, - "from225-0to247-5degrees": false, - "from247-5to270-0degrees": false, - "from270-0to292-5degrees": false, - "from292-5to315-0degrees": false, - "from315-0to337-5degrees": true, - "from337-5to360-0degrees": false - } - }, - { - "closedPath": "false", - "anchor": { "lat": 428605724, "long": -1063379489 }, - "name": "I_I 25_SAT-A5FB00B7_VSL_V004988-0", - "laneWidth": 5000, - "directionality": "both", - "description": { - "path": { - "offset": { - "ll": { - "nodes": [ - { - "delta": { - "node-LL3": { "lon": -13675, "lat": 10295 } - } + "anchor": { + "lat": 399840592, + "long": -1049882243 + }, + "laneWidth": 5000, + "directionality": "both", + "closedPath": false, + "direction": "E10F", + "description": { + "path": { + "scale": 0, + "offset": { + "ll": { + "nodes": [ + { + "delta": { + "node-LL3": { + "lon": 5667, + "lat": 31904 + } + } + }, + { + "delta": { + "node-LL3": { + "lon": 15679, + "lat": 32740 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 48062, + "lat": 90548 + } + } + }, + { + "delta": { + "node-LL3": { + "lon": 4032, + "lat": 17529 + } + } + }, + { + "delta": { + "node-LL5": { + "lon": 3227, + "lat": 1112951 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 3490, + "lat": 42717 + } + } + } + ] } - ] + } } - }, - "scale": 0 + } } + ], + "doNotUse3": 0, + "doNotUse4": 0, + "content": { + "advisory": [ + { "item": { "itis": 268 } }, + { "item": { "itis": 12604 } }, + { "item": { "itis": 8720 } } + ] }, - "id": { "id": 0, "region": 0 }, - "direction": { - "from000-0to022-5degrees": false, - "from022-5to045-0degrees": false, - "from045-0to067-5degrees": false, - "from067-5to090-0degrees": false, - "from090-0to112-5degrees": false, - "from112-5to135-0degrees": false, - "from135-0to157-5degrees": false, - "from157-5to180-0degrees": false, - "from180-0to202-5degrees": false, - "from202-5to225-0degrees": false, - "from225-0to247-5degrees": false, - "from247-5to270-0degrees": false, - "from270-0to292-5degrees": false, - "from292-5to315-0degrees": false, - "from315-0to337-5degrees": true, - "from337-5to360-0degrees": false - } + "url": "null" } - ], - "durationTime": 32000, - "doNotUse3": 1, - "doNotUse4": 1, - "startYear": 2021, - "msgId": { - "furtherInfoID": "0000" - }, - "priority": 5, - "content": { - "speedLimit": [ - { "item": { "itis": 268 } }, - { "item": { "itis": 12604 } }, - { "item": { "itis": 8720 } } - ] - }, - "url": "null", - "doNotUse1": 0, - "doNotUse2": 0, - "frameType": "roadSignage", - "startTime": 115721 + ] } - ], - "msgCnt": 1 + } }, - "dataType": "us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation" + "dataType": "us.dot.its.jpo.asn.j2735.r2024.TravelerInformation.TravelerInformationMessageFrame" } -} +} \ No newline at end of file diff --git a/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/LoggerKafkaConsumer.java b/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/LoggerKafkaConsumer.java index b8650fe5..e3ed025b 100644 --- a/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/LoggerKafkaConsumer.java +++ b/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/LoggerKafkaConsumer.java @@ -2,6 +2,8 @@ import com.trihydro.library.helpers.DateTimeHelper; import com.trihydro.library.helpers.DateTimeHelperImpl; + +import java.time.Instant; import java.util.Date; import com.fasterxml.jackson.databind.DeserializationFeature; @@ -26,6 +28,7 @@ import org.springframework.stereotype.Component; import us.dot.its.jpo.ode.model.OdeData; +import us.dot.its.jpo.ode.model.OdeTimPayload; @Component @Slf4j @@ -157,7 +160,7 @@ private void processOdeTimJson(TopicDataWrapper tdw) { log.trace("Starting OdeTimJson processing for message with length: {} bytes", tdw.getData().length()); log.trace("Message content: {}", tdw.getData()); - OdeData odeData = timDataConverter.processTimJson(tdw.getData()); + OdeData odeData = timDataConverter.processTimJson(tdw.getData()); if (odeData == null) { log.error("Failed to parse topic.OdeTimJson message, database insertion skipped"); @@ -215,7 +218,14 @@ private void processOdeTIMCertExpirationTimeJson(TopicDataWrapper tdw) { if (ath != null) { log.debug("Found record in holding table, updating expiration"); - success = activeTimHoldingService.updateTimExpiration(certExpirationModel.getPacketID(), certExpirationModel.getExpirationDate()); + Instant expiration = null; + String expDateStr = certExpirationModel.getExpirationDate(); + + if (expDateStr != null) { + expiration = Instant.parse(expDateStr); // or ZonedDateTime.parse if needed + } + + success = activeTimHoldingService.updateTimExpiration(certExpirationModel.getPacketID(), expiration); if (success) { log.info("Successfully updated expiration date in holding table for packet ID: {}", certExpirationModel.getPacketID()); diff --git a/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/dataConverters/TimDataConverter.java b/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/dataConverters/TimDataConverter.java index 69a22cab..f0360196 100644 --- a/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/dataConverters/TimDataConverter.java +++ b/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/dataConverters/TimDataConverter.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; import com.google.gson.Gson; import com.trihydro.library.helpers.JsonToJavaConverter; @@ -30,7 +29,7 @@ public void InjectDependencies(JsonToJavaConverter _jsonToJava) { jsonToJava = _jsonToJava; } - public OdeData processTimJson(String value) { + public OdeData processTimJson(String value) { var metadata = JsonUtils.getJsonNode(value, "metadata"); if (metadata == null) { @@ -55,21 +54,21 @@ public OdeData processTimJson(String value) { return translateTimJson(value); } - public OdeData translateTimJson(String value) { - OdeData odeData = null; + public OdeData translateTimJson(String value) { + OdeData odeData = null; OdeLogMetadata odeTimMetadata = jsonToJava.convertTimMetadataJsonToJava(value); - OdeTimPayload odeTimPayload = jsonToJava.convertTimPayloadJsonToJava(value); + OdeTimPayload odeTimPayload = jsonToJava.convertTimTopicJsonToJava(value); if (odeTimMetadata != null && odeTimPayload != null) - odeData = new OdeData(odeTimMetadata, odeTimPayload); + odeData = new OdeData<>(odeTimMetadata, odeTimPayload); return odeData; } - public OdeData translateBroadcastTimJson(String value) { - OdeData odeData = null; + public OdeData translateBroadcastTimJson(String value) { + OdeData odeData = null; OdeRequestMsgMetadata odeTimMetadata = jsonToJava.convertBroadcastTimMetadataJsonToJava(value); - OdeTimPayload odeTimPayload = jsonToJava.convertTmcTimTopicJsonToJava(value); + OdeTimPayload odeTimPayload = jsonToJava.convertTimTopicJsonToJava(value); if (odeTimMetadata != null && odeTimPayload != null) - odeData = new OdeData(odeTimMetadata, odeTimPayload); + odeData = new OdeData<>(odeTimMetadata, odeTimPayload); return odeData; } } \ No newline at end of file diff --git a/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/services/ActiveTimHoldingService.java b/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/services/ActiveTimHoldingService.java index d401694a..d3d94398 100644 --- a/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/services/ActiveTimHoldingService.java +++ b/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/services/ActiveTimHoldingService.java @@ -1,10 +1,8 @@ package com.trihydro.loggerkafkaconsumer.app.services; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; +import java.sql.*; + +import java.time.Instant; import com.trihydro.library.model.ActiveTimHolding; import com.trihydro.library.model.Coordinate; @@ -141,7 +139,7 @@ public Boolean deleteActiveTimHolding(Long activeTimHoldingId) { } } - public boolean updateTimExpiration(String packetID, String expDate) { + public boolean updateTimExpiration(String packetID, Instant expDate) { boolean success; String updateStatement = "UPDATE ACTIVE_TIM_HOLDING SET EXPIRATION_DATE = ? WHERE PACKET_ID = ?"; @@ -150,12 +148,15 @@ public boolean updateTimExpiration(String packetID, String expDate) { Connection connection = dbInteractions.getConnectionPool(); PreparedStatement preparedStatement = connection.prepareStatement(updateStatement); ) { - preparedStatement.setObject(1, expDate);// expDate comes in as MST from previously called function - // (GetMinExpiration) - preparedStatement.setObject(2, packetID); + if (expDate == null) { + preparedStatement.setNull(1, Types.TIMESTAMP); // 👈 preserves old behavior + } else { + preparedStatement.setTimestamp(1, Timestamp.from(expDate)); + } - // execute update statement + preparedStatement.setObject(2, packetID); success = dbInteractions.updateOrDelete(preparedStatement); + } catch (Exception e) { log.error("Exception while updating ACTIVE_TIM_HOLDING with packetID: {}", packetID, e); return false; @@ -164,5 +165,4 @@ public boolean updateTimExpiration(String packetID, String expDate) { expDate, success); return success; } - } \ No newline at end of file diff --git a/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/services/TimService.java b/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/services/TimService.java index 4664eca4..e854f115 100644 --- a/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/services/TimService.java +++ b/logger-kafka-consumer/src/main/java/com/trihydro/loggerkafkaconsumer/app/services/TimService.java @@ -99,7 +99,7 @@ public void InjectDependencies(ActiveTimService _ats, TimDbTables _timDbTables, this.dateTimeHelper = dateTimeHelper; } - public void addTimToDatabase(OdeData odeData) { // TODO: identify if this method can be removed + public void addTimToDatabase(OdeData odeData) { // TODO: identify if this method can be removed try { log.info("Called addTimToDatabase"); @@ -156,11 +156,11 @@ public void addTimToDatabase(OdeData odeData) { // TODO: identify if this method /** * Adds an active TIM to the database. This only handles a single TIM at a time. */ - public void addActiveTimToDatabase(OdeData odeData) { + public void addActiveTimToDatabase(OdeData odeData) { log.info("Processing active TIM to add to database"); // Initial validation - OdeTimPayload payload = (OdeTimPayload) odeData.getPayload(); + OdeTimPayload payload = odeData.getPayload(); if (payload == null) { log.warn("Cannot process active TIM: payload is null"); return; diff --git a/logger-kafka-consumer/src/test/java/com/trihydro/loggerkafkaconsumer/app/dataConverters/TimDataConverterTest.java b/logger-kafka-consumer/src/test/java/com/trihydro/loggerkafkaconsumer/app/dataConverters/TimDataConverterTest.java index 79405f92..4a6817dc 100644 --- a/logger-kafka-consumer/src/test/java/com/trihydro/loggerkafkaconsumer/app/dataConverters/TimDataConverterTest.java +++ b/logger-kafka-consumer/src/test/java/com/trihydro/loggerkafkaconsumer/app/dataConverters/TimDataConverterTest.java @@ -18,7 +18,6 @@ import us.dot.its.jpo.ode.model.OdeLogMetadata; import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; import us.dot.its.jpo.ode.model.OdeLogMetadata.SecurityResultCode; -import us.dot.its.jpo.ode.model.OdeLogMsgMetadataLocation; import us.dot.its.jpo.ode.model.OdeMsgMetadata.GeneratedBy; import us.dot.its.jpo.ode.model.OdeTimPayload; import us.dot.its.jpo.ode.model.ReceivedMessageDetails; @@ -30,188 +29,182 @@ @ExtendWith(MockitoExtension.class) public class TimDataConverterTest { - @Spy - private JsonToJavaConverter jsonToJava = new JsonToJavaConverter(); + @Spy + private JsonToJavaConverter jsonToJava = new JsonToJavaConverter(); - @InjectMocks - private TimDataConverter uut; + @InjectMocks + private TimDataConverter uut; - @Test - public void processTimJson() throws IOException { - - String value = new String(Files.readAllBytes(Paths.get("src/test/resources/rxMsg_TIM_OdeOutput.json"))); - - // Arrange - ReceivedMessageDetails receivedMessageDetails = new ReceivedMessageDetails(); - OdeLogMsgMetadataLocation locationData = new OdeLogMsgMetadataLocation(); - SerialId serialId; - - OdeLogMetadata odeTimMetadata = new OdeLogMetadata(); - odeTimMetadata.setRecordGeneratedBy(GeneratedBy.OBU); - - locationData.setElevation("1515"); - locationData.setHeading("0.0000"); - locationData.setLatitude("40.4739533"); - locationData.setLongitude("-104.9689995"); - locationData.setSpeed("0.14"); - - receivedMessageDetails.setLocationData(locationData); - receivedMessageDetails.setRxSource(RxSource.SAT); - - odeTimMetadata.setReceivedMessageDetails(receivedMessageDetails); - odeTimMetadata.setSchemaVersion(3); - odeTimMetadata.setSecurityResultCode(SecurityResultCode.unknown); - odeTimMetadata.setPayloadType("us.dot.its.jpo.ode.model.OdeTimPayload"); - - serialId = new SerialId("f212c298-4021-412a-b7c6-1fdb64a6a227", 1, 4, 2, 0); - odeTimMetadata.setSerialId(serialId); - - odeTimMetadata.setSanitized(false); - odeTimMetadata.setRecordGeneratedAt("2017-09-05T20:23:39.194Z[UTC]"); - - odeTimMetadata.setRecordType(RecordType.rxMsg); - odeTimMetadata.setLogFileName("rxMsg_TIM.bin"); - - odeTimMetadata.setOdeReceivedAt("2017-11-09T13:33:34.039Z[UTC]"); - - // create test objects - OdeTravelerInformationMessage tim = new OdeTravelerInformationMessage(); - - OdeTimPayload odeTimPayload = new OdeTimPayload(); - - OdeTravelerInformationMessage.DataFrame[] dataFrames = new OdeTravelerInformationMessage.DataFrame[1]; - OdeTravelerInformationMessage.DataFrame dataFrame = new OdeTravelerInformationMessage.DataFrame(); - OdeTravelerInformationMessage.DataFrame.Region[] regions = new OdeTravelerInformationMessage.DataFrame.Region[1]; - OdeTravelerInformationMessage.DataFrame.Region region = new OdeTravelerInformationMessage.DataFrame.Region(); - OdeTravelerInformationMessage.DataFrame.Region.Path path = new OdeTravelerInformationMessage.DataFrame.Region.Path(); - - tim.setMsgCnt(0); - tim.setPacketID("EC9C236B0000000000"); - tim.setTimeStamp("2017-10-11T21:32"); - - OdePosition3D anchorPosition = new OdePosition3D(); - anchorPosition.setLatitude((new BigDecimal("263056840")).multiply(new BigDecimal(".0000001"))); - anchorPosition.setLongitude((new BigDecimal("-801481510")).multiply(new BigDecimal(".0000001"))); - // anchorPosition.setElevation(new BigDecimal(20)); - - region.setAnchorPosition(anchorPosition); - - OdeTravelerInformationMessage.NodeXY nodeXY0 = new OdeTravelerInformationMessage.NodeXY(); - nodeXY0.setNodeLat((new BigDecimal("405744807")).multiply(new BigDecimal(".0000001"))); - nodeXY0.setNodeLong((new BigDecimal("-1050524251")).multiply(new BigDecimal(".0000001"))); - nodeXY0.setDelta("node-LatLon"); - - OdeTravelerInformationMessage.NodeXY[] nodeXYArr = new OdeTravelerInformationMessage.NodeXY[2]; - nodeXYArr[0] = nodeXY0; - - OdeTravelerInformationMessage.NodeXY nodeXY1 = new OdeTravelerInformationMessage.NodeXY(); - nodeXY1.setNodeLat((new BigDecimal("405735393")).multiply(new BigDecimal(".0000001"))); - nodeXY1.setNodeLong((new BigDecimal("-1050500237")).multiply(new BigDecimal(".0000001"))); - nodeXY1.setDelta("node-LatLon"); - nodeXYArr[1] = nodeXY1; - - path.setNodes(nodeXYArr); - region.setPath(path); - regions[0] = region; - dataFrame.setRegions(regions); - dataFrames[0] = dataFrame; - tim.setDataframes(dataFrames); - - odeTimPayload.setData(tim); - - // Act - OdeData odeDataTest = uut.processTimJson(value); - OdeLogMetadata odeTimMetadataTest = ((OdeLogMetadata) odeDataTest.getMetadata()); - OdeTimPayload odeTimPayloadTest = (OdeTimPayload) odeDataTest.getPayload(); - - // Assert - Assertions.assertNotNull(odeTimMetadataTest); - Assertions.assertEquals(odeTimMetadata, odeTimMetadataTest); - - for (int i = 0; i < 2; i++) { - Assertions.assertEquals( - getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getPath() - .getNodes()[i].getNodeLat(), - getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getPath() - .getNodes()[i].getNodeLat()); - Assertions.assertEquals( - getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getPath() - .getNodes()[i].getNodeLong(), - getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getPath() - .getNodes()[i].getNodeLong()); - Assertions.assertEquals( - getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getPath() - .getNodes()[i].getDelta(), - getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getPath() - .getNodes()[i].getDelta()); - } - - Assertions.assertEquals(getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getAnchorPosition(), - getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getAnchorPosition()); - Assertions.assertEquals(getTim(odeTimPayload).getMsgCnt(), getTim(odeTimPayloadTest).getMsgCnt()); - Assertions.assertEquals(getTim(odeTimPayload).getPacketID(), getTim(odeTimPayloadTest).getPacketID()); - Assertions.assertEquals(getTim(odeTimPayload).getUrlB(), getTim(odeTimPayloadTest).getUrlB()); - } - - @Test - public void processTimJson_FAIL_Metadata() throws IOException { - // Arrange - String value = new String(Files - .readAllBytes(Paths.get("src/test/resources/rxMsg_TIM_OdeOutput_NullMetadata.json"))); - - // Act - OdeData odeDataTest = uut.processTimJson(value); - - // Assert - Assertions.assertNull(odeDataTest); + @Test + public void processTimJson() throws IOException { + + String value = new String(Files.readAllBytes(Paths.get("src/test/resources/rxMsg_TIM_OdeOutput.json"))); + + // Arrange + ReceivedMessageDetails receivedMessageDetails = new ReceivedMessageDetails(); + SerialId serialId; + + OdeLogMetadata odeTimMetadata = new OdeLogMetadata(); + odeTimMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + + receivedMessageDetails.setRxSource(RxSource.SAT); + + odeTimMetadata.setReceivedMessageDetails(receivedMessageDetails); + odeTimMetadata.setSchemaVersion(9); + odeTimMetadata.setSecurityResultCode(SecurityResultCode.success); + odeTimMetadata.setPayloadType("us.dot.its.jpo.ode.model.OdeTimPayload"); + + serialId = new SerialId("6f204bcf-5db1-4b46-be8a-35149a6b2240", 1, 0, 0, 0); + odeTimMetadata.setSerialId(serialId); + + odeTimMetadata.setSanitized(false); + odeTimMetadata.setOdePacketID("17e610000000000000"); + odeTimMetadata.setOdeTimStartDateTime("2026-01-22T21:10:48.642Z"); + odeTimMetadata.setRecordGeneratedAt("2026-01-22T21:10:48.642Z"); + odeTimMetadata.setAsn1("001F80A97014B901EC9C236B00000000000F775D9B0301EA73E452D1539716C99E9D555100003F0A59B080010007F8AA9979F4D3BB3A0A9266C000000854E3B2C47291F21E85EEF057980028422C1FFE0001FFFC00017FFF80000FFFFF000009FFFFF8000005FFFFFF00000007FF80007FFF00005FFFE00003FFFFC000027FFFFE0000017FFFFFC000000C523E43D138ECB11C6200C00FB0473DFB72A0E997C74007D408E5C376CD4F775D9B00"); + + odeTimMetadata.setRecordType(RecordType.timMsg); + odeTimMetadata.setLogFileName("rxMsg_TIM.bin"); + + odeTimMetadata.setOdeReceivedAt("2026-01-22T21:10:48.642Z"); + + // create test objects + OdeTravelerInformationMessage tim = new OdeTravelerInformationMessage(); + + OdeTimPayload odeTimPayload = new OdeTimPayload(); + + OdeTravelerInformationMessage.DataFrame[] dataFrames = new OdeTravelerInformationMessage.DataFrame[1]; + OdeTravelerInformationMessage.DataFrame dataFrame = new OdeTravelerInformationMessage.DataFrame(); + OdeTravelerInformationMessage.DataFrame.Region[] regions = new OdeTravelerInformationMessage.DataFrame.Region[1]; + OdeTravelerInformationMessage.DataFrame.Region region = new OdeTravelerInformationMessage.DataFrame.Region(); + OdeTravelerInformationMessage.DataFrame.Region.Path path = new OdeTravelerInformationMessage.DataFrame.Region.Path(); + + tim.setMsgCnt(1); + tim.setPacketID("EC9C236B0000000000"); + tim.setTimeStamp("2026-01-22T21:10:48.642Z"); + + OdePosition3D anchorPosition = new OdePosition3D(); + anchorPosition.setLatitude((new BigDecimal("412500807")).multiply(new BigDecimal(".0000001"))); + anchorPosition.setLongitude((new BigDecimal("-1110093847")).multiply(new BigDecimal(".0000001"))); + + region.setAnchorPosition(anchorPosition); + + OdeTravelerInformationMessage.NodeXY nodeXY0 = new OdeTravelerInformationMessage.NodeXY(); + nodeXY0.setNodeLat((new BigDecimal("-2048")).multiply(new BigDecimal(".0000001"))); + nodeXY0.setNodeLong((new BigDecimal("2047")).multiply(new BigDecimal(".0000001"))); + nodeXY0.setDelta("node-LL1"); + + OdeTravelerInformationMessage.NodeXY[] nodeXYArr = new OdeTravelerInformationMessage.NodeXY[2]; + nodeXYArr[0] = nodeXY0; + + OdeTravelerInformationMessage.NodeXY nodeXY1 = new OdeTravelerInformationMessage.NodeXY(); + nodeXY1.setNodeLat((new BigDecimal("-8192")).multiply(new BigDecimal(".0000001"))); + nodeXY1.setNodeLong((new BigDecimal("8191")).multiply(new BigDecimal(".0000001"))); + nodeXY1.setDelta("node-LL2"); + nodeXYArr[1] = nodeXY1; + + path.setNodes(nodeXYArr); + region.setPath(path); + regions[0] = region; + dataFrame.setRegions(regions); + dataFrames[0] = dataFrame; + tim.setDataframes(dataFrames); + + odeTimPayload.setData(tim); + + // Act + OdeData odeDataTest = uut.processTimJson(value); + OdeLogMetadata odeTimMetadataTest = ((OdeLogMetadata) odeDataTest.getMetadata()); + OdeTimPayload odeTimPayloadTest = odeDataTest.getPayload(); + + // Assert + Assertions.assertNotNull(odeTimMetadataTest); + Assertions.assertEquals(odeTimMetadata, odeTimMetadataTest); + + for (int i = 0; i < 2; i++) { + Assertions.assertEquals( + getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getPath() + .getNodes()[i].getNodeLat(), + getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getPath() + .getNodes()[i].getNodeLat()); + Assertions.assertEquals( + getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getPath() + .getNodes()[i].getNodeLong(), + getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getPath() + .getNodes()[i].getNodeLong()); + Assertions.assertEquals( + getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getPath() + .getNodes()[i].getDelta(), + getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getPath() + .getNodes()[i].getDelta()); } - @Test - public void processTimJson_FAIL_Payload() throws IOException { - // Arrange - String value = new String(Files - .readAllBytes(Paths.get("src/test/resources/rxMsg_TIM_OdeOutput_NullPayload.json"))); - - // Act - OdeData odeDataTest = uut.processTimJson(value); - - // Assert - Assertions.assertNull(odeDataTest); - } - - @Test - public void processTimJson_odeTimStartDateTime() throws IOException { - // Arrange - String value = new String( - Files.readAllBytes(Paths.get("src/test/resources/TIM_odeTimStartDateTime.json"))); - - // Act - var data = uut.processTimJson(value); - - // Assert - Assertions.assertNotNull(data); - Assertions.assertNotNull(data.getMetadata()); - Assertions.assertEquals("2020-11-11T07:36:53.035Z", data.getMetadata().getOdeTimStartDateTime()); - } - - @Test - public void processTimJson_odeTimWithRsus() throws IOException { - // Arrange - String value = new String(Files.readAllBytes(Paths.get("src/test/resources/TIM_odeTim_Rsus.json"))); - - // Act - var data = uut.processTimJson(value); - - // Assert - Assertions.assertNotNull(data); - Assertions.assertNotNull(data.getMetadata()); - - } - - /** - * Helper method to get an OdeTravelerInformationMessage object given an OdeTimPayload. - */ - private OdeTravelerInformationMessage getTim(OdeTimPayload odeTimPayload) { - return (OdeTravelerInformationMessage) odeTimPayload.getData(); - } + Assertions.assertEquals(getTim(odeTimPayload).getDataframes()[0].getRegions()[0].getAnchorPosition(), + getTim(odeTimPayloadTest).getDataframes()[0].getRegions()[0].getAnchorPosition()); + Assertions.assertEquals(getTim(odeTimPayload).getMsgCnt(), getTim(odeTimPayloadTest).getMsgCnt()); + Assertions.assertEquals(getTim(odeTimPayload).getPacketID(), getTim(odeTimPayloadTest).getPacketID()); + Assertions.assertEquals(getTim(odeTimPayload).getUrlB(), getTim(odeTimPayloadTest).getUrlB()); + } + + @Test + public void processTimJson_FAIL_Metadata() throws IOException { + // Arrange + String value = new String(Files + .readAllBytes(Paths.get("src/test/resources/rxMsg_TIM_OdeOutput_NullMetadata.json"))); + + // Act + OdeData odeDataTest = uut.processTimJson(value); + + // Assert + Assertions.assertNull(odeDataTest); + } + + @Test + public void processTimJson_FAIL_Payload() throws IOException { + // Arrange + String value = new String(Files + .readAllBytes(Paths.get("src/test/resources/rxMsg_TIM_OdeOutput_NullPayload.json"))); + + // Act + OdeData odeDataTest = uut.processTimJson(value); + + // Assert + Assertions.assertNull(odeDataTest); + } + + @Test + public void processTimJson_odeTimStartDateTime() throws IOException { + // Arrange + String value = new String( + Files.readAllBytes(Paths.get("src/test/resources/TIM_odeTimStartDateTime.json"))); + + // Act + var data = uut.processTimJson(value); + + // Assert + Assertions.assertNotNull(data); + Assertions.assertNotNull(data.getMetadata()); + Assertions.assertEquals("2026-01-15T20:26:17.989Z", data.getMetadata().getOdeTimStartDateTime()); + } + + @Test + public void processTimJson_odeTimWithRsus() throws IOException { + // Arrange + String value = new String(Files.readAllBytes(Paths.get("src/test/resources/TIM_odeTim_Rsus.json"))); + + // Act + var data = uut.processTimJson(value); + + // Assert + Assertions.assertNotNull(data); + Assertions.assertNotNull(data.getMetadata()); + + } + + /** + * Helper method to get an OdeTravelerInformationMessage object given an OdeTimPayload. + */ + private OdeTravelerInformationMessage getTim(OdeTimPayload odeTimPayload) { + return (OdeTravelerInformationMessage) odeTimPayload.getData(); + } } \ No newline at end of file diff --git a/logger-kafka-consumer/src/test/java/com/trihydro/loggerkafkaconsumer/app/services/TimServiceTest.java b/logger-kafka-consumer/src/test/java/com/trihydro/loggerkafkaconsumer/app/services/TimServiceTest.java index 9c8c2605..e91cacbc 100644 --- a/logger-kafka-consumer/src/test/java/com/trihydro/loggerkafkaconsumer/app/services/TimServiceTest.java +++ b/logger-kafka-consumer/src/test/java/com/trihydro/loggerkafkaconsumer/app/services/TimServiceTest.java @@ -101,7 +101,7 @@ public class TimServiceTest extends TestBase { private DateTimeHelper dateTimeHelper; private WydotRsu rsu; - private final Long pathId = -99l; + private final Long pathId = -99L; @BeforeEach public void setupSubTest() { @@ -127,15 +127,15 @@ public void setupSubTest() { @Test public void addActiveTimToDatabase_newRsuTimSUCCESS() { // Arrange - OdeData odeData = getOdeData_requestMsgData(); + var odeData = getOdeData_requestMsgData(); ActiveTim aTim = getActiveTim(); - Long timId = -1l; - Long dataFrameId = -2l; - DataFrame[] dFrames = (getTim((OdeTimPayload) odeData.getPayload())).getDataframes(); + Long timId = -1L; + Long dataFrameId = -2L; + DataFrame[] dFrames = (getTim(odeData.getPayload())).getDataframes(); doReturn(aTim).when(uut).setActiveTimByRegionName(anyString()); doReturn(null).when(uut).getTimId(nullable(String.class), any()); - doReturn(timId).when(uut).AddTim(odeData.getMetadata(), null, (getTim((OdeTimPayload) odeData.getPayload())), + doReturn(timId).when(uut).AddTim(odeData.getMetadata(), null, (getTim(odeData.getPayload())), null, null, null, aTim.getSatRecordId(), dFrames[0].getRegions()[0].getName()); doReturn(dataFrameId).when(mockDataFrameService).AddDataFrame(dFrames[0], timId); doNothing().when(uut).addRegions(any(), any()); @@ -147,7 +147,7 @@ public void addActiveTimToDatabase_newRsuTimSUCCESS() { uut.addActiveTimToDatabase(odeData); // Assert - verify(uut).AddTim(odeData.getMetadata(), null, getTim((OdeTimPayload) odeData.getPayload()), null, null, + verify(uut).AddTim(odeData.getMetadata(), null, getTim(odeData.getPayload()), null, null, null, aTim.getSatRecordId(), dFrames[0].getRegions()[0].getName()); verify(mockDataFrameService).AddDataFrame(dFrames[0], timId); verify(uut).addRegions(dFrames[0], dataFrameId); @@ -155,18 +155,18 @@ public void addActiveTimToDatabase_newRsuTimSUCCESS() { verify(mockActiveTimHoldingService).getRsuActiveTimHolding(aTim.getClientId(), aTim.getDirection(), aTim.getRsuTarget()); verify(mockActiveTimService).insertActiveTim(any()); - verify(mockActiveTimHoldingService).deleteActiveTimHolding(-1l); + verify(mockActiveTimHoldingService).deleteActiveTimHolding(-1L); } @Test public void addActiveTimToDatabase_existingRsuTimSUCCESS() { // Arrange - OdeData odeData = getOdeData_requestMsgData(); + var odeData = getOdeData_requestMsgData(); ActiveTim aTim = getActiveTim(); var ath = getActiveTimHolding(); doReturn(aTim).when(uut).setActiveTimByRegionName(anyString()); - doReturn(-1l).when(uut).getTimId(nullable(String.class), any()); + doReturn(-1L).when(uut).getTimId(nullable(String.class), any()); doReturn(ath).when(mockActiveTimHoldingService).getRsuActiveTimHolding(anyString(), anyString(), anyString()); // Act @@ -179,7 +179,7 @@ public void addActiveTimToDatabase_existingRsuTimSUCCESS() { verify(uut, never()).addDataFrameItis(any(), any()); verify(mockActiveTimHoldingService).getRsuActiveTimHolding(aTim.getClientId(), aTim.getDirection(), aTim.getRsuTarget()); - verify(mockActiveTimHoldingService).deleteActiveTimHolding(-1l); + verify(mockActiveTimHoldingService).deleteActiveTimHolding(-1L); var captor = ArgumentCaptor.forClass(ActiveTim.class); verify(mockActiveTimService).insertActiveTim(captor.capture()); @@ -193,18 +193,18 @@ public void addActiveTimToDatabase_existingRsuTimSUCCESS() { @Test public void addActiveTimToDatabase_newSDXTimSUCCESS() { // Arrange - OdeData odeData = getOdeData_requestMsgData(); + var odeData = getOdeData_requestMsgData(); ActiveTim aTim = getActiveTim(); aTim.setSatRecordId("satRecordId"); aTim.setRsuTarget(null); - ((OdeRequestMsgMetadata) odeData.getMetadata()).getRequest().setRsus(new RSU[0]); - Long timId = -1l; - Long dataFrameId = -2l; - DataFrame[] dFrames = getTim((OdeTimPayload) odeData.getPayload()).getDataframes(); + odeData.getMetadata().getRequest().setRsus(new RSU[0]); + Long timId = -1L; + Long dataFrameId = -2L; + DataFrame[] dFrames = getTim(odeData.getPayload()).getDataframes(); doReturn(aTim).when(uut).setActiveTimByRegionName(anyString()); doReturn(null).when(uut).getTimId(nullable(String.class), any()); - doReturn(timId).when(uut).AddTim(odeData.getMetadata(), null, getTim((OdeTimPayload) odeData.getPayload()), + doReturn(timId).when(uut).AddTim(odeData.getMetadata(), null, getTim(odeData.getPayload()), null, null, null, aTim.getSatRecordId(), dFrames[0].getRegions()[0].getName()); doReturn(dataFrameId).when(mockDataFrameService).AddDataFrame(dFrames[0], timId); doNothing().when(uut).addRegions(any(), any()); @@ -217,7 +217,7 @@ public void addActiveTimToDatabase_newSDXTimSUCCESS() { uut.addActiveTimToDatabase(odeData); // Assert - verify(uut).AddTim(odeData.getMetadata(), null, getTim((OdeTimPayload) odeData.getPayload()), null, null, + verify(uut).AddTim(odeData.getMetadata(), null, getTim(odeData.getPayload()), null, null, null, aTim.getSatRecordId(), dFrames[0].getRegions()[0].getName()); verify(mockDataFrameService).AddDataFrame(dFrames[0], timId); verify(uut).addRegions(dFrames[0], dataFrameId); @@ -226,22 +226,22 @@ public void addActiveTimToDatabase_newSDXTimSUCCESS() { verify(mockActiveTimHoldingService).getSdxActiveTimHolding(aTim.getClientId(), aTim.getDirection(), aTim.getSatRecordId()); verify(mockActiveTimService).insertActiveTim(any()); - verify(mockActiveTimHoldingService).deleteActiveTimHolding(-1l); + verify(mockActiveTimHoldingService).deleteActiveTimHolding(-1L); } @Test public void addActiveTimToDatabase_existingSDXTimSUCCESS() { // Arrange - OdeData odeData = getOdeData_requestMsgData(); + var odeData = getOdeData_requestMsgData(); ActiveTim aTim = getActiveTim(); aTim.setSatRecordId("satRecordId"); aTim.setRsuTarget(null); - ((OdeRequestMsgMetadata) odeData.getMetadata()).getRequest().setRsus(new RSU[0]); + (odeData.getMetadata()).getRequest().setRsus(new RSU[0]); var ath = getActiveTimHolding(); doReturn(aTim).when(uut).setActiveTimByRegionName(anyString()); - doReturn(-1l).when(uut).getTimId(nullable(String.class), any()); + doReturn(-1L).when(uut).getTimId(nullable(String.class), any()); doReturn(false).when(uut).updateTimSatRecordId(anyLong(), anyString()); doReturn(ath).when(mockActiveTimHoldingService).getSdxActiveTimHolding(anyString(), anyString(), anyString()); @@ -255,7 +255,7 @@ public void addActiveTimToDatabase_existingSDXTimSUCCESS() { verify(uut, never()).addDataFrameItis(any(), any()); verify(mockActiveTimHoldingService).getSdxActiveTimHolding(aTim.getClientId(), aTim.getDirection(), aTim.getSatRecordId()); - verify(mockActiveTimHoldingService).deleteActiveTimHolding(-1l); + verify(mockActiveTimHoldingService).deleteActiveTimHolding(-1L); var captor = ArgumentCaptor.forClass(ActiveTim.class); verify(mockActiveTimService).insertActiveTim(captor.capture()); @@ -269,7 +269,7 @@ public void addActiveTimToDatabase_existingSDXTimSUCCESS() { @Test public void addActiveTimToDatabase_existingRsuTimNoATH() { // Arrange - OdeData odeData = getOdeData_requestMsgData(); + var odeData = getOdeData_requestMsgData(); ActiveTim aTim = getActiveTim(); ActiveTim activeTimDb = new ActiveTim(); @@ -280,7 +280,7 @@ public void addActiveTimToDatabase_existingRsuTimNoATH() { activeTimDb.setProjectKey(1234); doReturn(aTim).when(uut).setActiveTimByRegionName(anyString()); - doReturn(-1l).when(uut).getTimId(nullable(String.class), any()); + doReturn(-1L).when(uut).getTimId(nullable(String.class), any()); doReturn(null).when(mockActiveTimHoldingService).getRsuActiveTimHolding(anyString(), anyString(), anyString()); doReturn(activeTimDb).when(mockActiveTimService).getActiveRsuTim(any(), any(), any()); @@ -305,11 +305,11 @@ public void addActiveTimToDatabase_existingRsuTimNoATH() { @Test public void addActiveTimToDatabase_existingSDXTimNoATH() { // Arrange - OdeData odeData = getOdeData_requestMsgData(); + var odeData = getOdeData_requestMsgData(); ActiveTim aTim = getActiveTim(); aTim.setSatRecordId("satRecordId"); aTim.setRsuTarget(null); - ((OdeRequestMsgMetadata) odeData.getMetadata()).getRequest().setRsus(new RSU[0]); + (odeData.getMetadata()).getRequest().setRsus(new RSU[0]); ActiveTim activeTimDb = new ActiveTim(); var start = new Coordinate(BigDecimal.valueOf(0), BigDecimal.valueOf(0)); @@ -319,7 +319,7 @@ public void addActiveTimToDatabase_existingSDXTimNoATH() { activeTimDb.setProjectKey(1234); doReturn(aTim).when(uut).setActiveTimByRegionName(anyString()); - doReturn(-1l).when(uut).getTimId(nullable(String.class), any()); + doReturn(-1L).when(uut).getTimId(nullable(String.class), any()); doReturn(false).when(uut).updateTimSatRecordId(anyLong(), anyString()); // No ActiveTimHolding record doReturn(null).when(mockActiveTimHoldingService).getSdxActiveTimHolding(anyString(), anyString(), anyString()); @@ -349,13 +349,13 @@ public void addActiveTimToDatabase_existingSDXTimNoATH() { @Test public void addTimToDatabase_addTimFAIL() { // Arrange - OdeData odeData = getOdeData(); + var odeData = getOdeData(); doReturn(null).when(uut).AddTim(odeData.getMetadata(), - ((OdeLogMetadata) odeData.getMetadata()).getReceivedMessageDetails(), - getTim((OdeTimPayload) odeData.getPayload()), - ((OdeLogMetadata) odeData.getMetadata()).getRecordType(), - ((OdeLogMetadata) odeData.getMetadata()).getLogFileName(), - ((OdeLogMetadata) odeData.getMetadata()).getSecurityResultCode(), null, null); + (odeData.getMetadata()).getReceivedMessageDetails(), + getTim(odeData.getPayload()), + (odeData.getMetadata()).getRecordType(), + (odeData.getMetadata()).getLogFileName(), + (odeData.getMetadata()).getSecurityResultCode(), null, null); // Act uut.addTimToDatabase(odeData); @@ -377,16 +377,16 @@ public void addTimToDatabase_addTimFAIL() { @Test public void addTimToDatabase_SUCCESS() { // Arrange - OdeData odeData = getOdeData(); - Long timId = -1l; - Long dataFrameId = -2l; - DataFrame[] dFrames = getTim((OdeTimPayload) odeData.getPayload()).getDataframes(); + var odeData = getOdeData(); + Long timId = -1L; + Long dataFrameId = -2L; + DataFrame[] dFrames = getTim(odeData.getPayload()).getDataframes(); doReturn(timId).when(uut).AddTim(odeData.getMetadata(), - ((OdeLogMetadata) odeData.getMetadata()).getReceivedMessageDetails(), - getTim(((OdeTimPayload) odeData.getPayload())), - ((OdeLogMetadata) odeData.getMetadata()).getRecordType(), - ((OdeLogMetadata) odeData.getMetadata()).getLogFileName(), - ((OdeLogMetadata) odeData.getMetadata()).getSecurityResultCode(), null, null); + (odeData.getMetadata()).getReceivedMessageDetails(), + getTim((odeData.getPayload())), + (odeData.getMetadata()).getRecordType(), + (odeData.getMetadata()).getLogFileName(), + (odeData.getMetadata()).getSecurityResultCode(), null, null); doReturn(dataFrameId).when(mockDataFrameService).AddDataFrame(dFrames[0], timId); doReturn(pathId).when(mockPathService).InsertPath(); doReturn(getActiveTim()).when(uut).setActiveTimByRegionName(isA(String.class)); @@ -408,8 +408,8 @@ public void addRegion_pathXYSUCCESS() { // Arrange DataFrame dataFrame = getDataFrames()[0]; Path path = dataFrame.getRegions()[0].getPath(); - Long dataFrameId = -1l; - Long nodeXYId = -2l; + Long dataFrameId = -1L; + Long nodeXYId = -2L; doReturn(pathId).when(mockPathService).InsertPath(); doReturn(nodeXYId).when(mockNodeXYService).AddNodeXY(isA(OdeTravelerInformationMessage.NodeXY.class)); @@ -434,8 +434,8 @@ public void addRegion_pathLLSUCCESS() { for (int i = 0; i < path.getNodes().length; i++) { path.getNodes()[i].setDelta("node-LL"); } - Long dataFrameId = -1l; - Long nodeLLId = -2l; + Long dataFrameId = -1L; + Long nodeLLId = -2L; doReturn(pathId).when(mockPathService).InsertPath(); doReturn(nodeLLId).when(mockNodeLLService).AddNodeLL(isA(OdeTravelerInformationMessage.NodeXY.class)); @@ -456,7 +456,7 @@ public void addRegion_geometrySUCCESS() { DataFrame dataFrame = getDataFrames()[0]; dataFrame.getRegions()[0].setPath(null); dataFrame.getRegions()[0].setGeometry(new Geometry()); - Long dataFrameId = -1l; + Long dataFrameId = -1L; // Act uut.addRegions(dataFrame, dataFrameId); @@ -473,7 +473,7 @@ public void addRegion_geometrySUCCESS() { @Test public void addDataFrameItis_noItemsFAIL() { // Arrange - Long dataFrameId = -1l; + Long dataFrameId = -1L; DataFrame dataFrame = new DataFrame(); // Act uut.addDataFrameItis(dataFrame, dataFrameId); @@ -485,7 +485,7 @@ public void addDataFrameItis_noItemsFAIL() { @Test public void addDataFrameItis_nonNumericSUCCESS() { // Arrange - Long dataFrameId = -1l; + Long dataFrameId = -1L; DataFrame dataFrame = getDataFrames()[0]; // Act uut.addDataFrameItis(dataFrame, dataFrameId); @@ -497,7 +497,7 @@ public void addDataFrameItis_nonNumericSUCCESS() { @Test public void addDataFrameItis_numericSUCCESS() { // Arrange - Long dataFrameId = -1l; + Long dataFrameId = -1L; DataFrame dataFrame = getDataFrames()[0]; dataFrame.setItems(new String[] { "1234" }); doReturn("test").when(uut).getItisCodeId("1234"); @@ -513,7 +513,7 @@ public void addDataFrameItis_numericSUCCESS() { @Test public void addDataFrameItis_numericFAIL() { // Arrange - Long dataFrameId = -1l; + Long dataFrameId = -1L; DataFrame dataFrame = getDataFrames()[0]; dataFrame.setItems(new String[] { "1234" }); doReturn(null).when(uut).getItisCodeId("1234"); @@ -529,7 +529,7 @@ public void addDataFrameItis_numericFAIL() { @Test public void updateTimSatRecordId_FAIL() throws SQLException { // Arrange - Long timId = -1l; + Long timId = -1L; String satRecordId = "asdf"; doThrow(new SQLException()).when(mockPreparedStatement).setString(1, satRecordId); // Act @@ -544,7 +544,7 @@ public void updateTimSatRecordId_FAIL() throws SQLException { @Test public void updateTimSatRecordId_SUCCESS() throws SQLException { // Arrange - Long timId = -1l; + Long timId = -1L; String satRecordId = "asdf"; // Act boolean data = uut.updateTimSatRecordId(timId, satRecordId); @@ -575,7 +575,7 @@ public void setActiveTimByRegionName_RsuSUCCESS() { String regionName = "I_Prairie Center Cir_RSU-10.145.1.100_RC_clientId"; TimType timType = new TimType(); timType.setType("RC"); - timType.setTimTypeId(-1l); + timType.setTimTypeId(-1L); doReturn(timType).when(uut).getTimType("RC"); // Act @@ -597,7 +597,7 @@ public void setActiveTimByRegionName_RsuSUCCESS_TrimmedRegion_RouteCutOffPartly( String regionName = "I_Prairie Center Cir..._RSU-10.145.1.100_RC_clientid-12345"; TimType timType = new TimType(); timType.setType("RC"); - timType.setTimTypeId(-1l); + timType.setTimTypeId(-1L); doReturn(timType).when(uut).getTimType("RC"); // Act @@ -619,7 +619,7 @@ public void setActiveTimByRegionName_SatSUCCESS() { String regionName = "I_Prairie Center Cir_SAT-satId_RC_clientId"; TimType timType = new TimType(); timType.setType("RC"); - timType.setTimTypeId(-1l); + timType.setTimTypeId(-1L); doReturn(timType).when(uut).getTimType("RC"); // Act @@ -649,10 +649,10 @@ public void getTimType_FAIL() { @Test public void getTimType_SUCCESS() { // Arrange - List timTypes = new ArrayList(); + List timTypes = new ArrayList<>(); TimType tt = new TimType(); tt.setType("timTypeName"); - tt.setTimTypeId(-1l); + tt.setTimTypeId(-1L); timTypes.add(tt); doReturn(timTypes).when(mockTts).getTimTypes(); // Act @@ -678,7 +678,7 @@ public void getItisCodeId_FAIL() { @Test public void getItisCodeId_SUCCESS() { // Arrange - List itisCodes = new ArrayList(); + List itisCodes = new ArrayList<>(); ItisCode code = new ItisCode(); code.setItisCode(1234); code.setItisCodeId(-1); @@ -720,7 +720,7 @@ public void updateActiveTimExpiration_FAIL() throws ParseException { private ActiveTimHolding getActiveTimHolding() { ActiveTimHolding ath = new ActiveTimHolding(); - ath.setActiveTimHoldingId(-1l); + ath.setActiveTimHoldingId(-1L); ath.setClientId("clientId"); ath.setDirection("direction"); ath.setStartPoint(new Coordinate(BigDecimal.valueOf(-1), BigDecimal.valueOf(-2))); @@ -737,14 +737,12 @@ private ActiveTim getActiveTim() { return aTim; } - private OdeData getOdeData_requestMsgData() { - OdeData odeData = new OdeData(getReqMsgMetadata(), getMsgPayload()); - return odeData; + private OdeData getOdeData_requestMsgData() { + return new OdeData<>(getReqMsgMetadata(), getMsgPayload()); } - private OdeData getOdeData() { - OdeData odeData = new OdeData(getMetadata(), getMsgPayload()); - return odeData; + private OdeData getOdeData() { + return new OdeData<>(getMetadata(), getMsgPayload()); } private OdeRequestMsgMetadata getReqMsgMetadata() { @@ -785,7 +783,7 @@ private OdeLogMetadata getMetadata() { private SerialId getSerialId() { SerialId serialId = new SerialId(); serialId.setStreamId("streamId"); - serialId.setBundleId(-1l); + serialId.setBundleId(-1L); serialId.setBundleSize(0); serialId.setRecordId(1); return serialId; diff --git a/logger-kafka-consumer/src/test/resources/TIM_odeTimStartDateTime.json b/logger-kafka-consumer/src/test/resources/TIM_odeTimStartDateTime.json index c64e17e1..1c86d10d 100644 --- a/logger-kafka-consumer/src/test/resources/TIM_odeTimStartDateTime.json +++ b/logger-kafka-consumer/src/test/resources/TIM_odeTimStartDateTime.json @@ -1,285 +1,130 @@ { "metadata": { + "payloadType": "us.dot.its.jpo.ode.model.OdeMessageFramePayload", + "serialId": { + "streamId": "cb6f392b-973d-460d-9390-0c79abb2b988", + "bundleSize": 1, + "bundleId": 45, + "recordId": 0, + "serialNumber": 45 + }, + "odeReceivedAt": "2026-01-15T20:26:21.295Z", + "schemaVersion": 9, + "maxDurationTime": 32000, + "recordGeneratedAt": "2026-01-15T20:26:21.188Z", + "recordGeneratedBy": "TMC", + "sanitized": false, + "odePacketID": "1B28434A4CD2E2D3C8", + "odeTimStartDateTime": "2026-01-15T20:26:17.989Z", "request": { "ode": { - "verb": "POST", - "version": 3 + "version": 3, + "verb": "POST" }, "sdw": { - "recordId": "047D5D92", "serviceRegion": { "nwCorner": { - "latitude": 42.0423655, - "longitude": -110.65625591 + "latitude": 39.61320660700005, + "longitude": -104.89573620999994 }, "seCorner": { - "latitude": 41.80934153, - "longitude": -110.53481503 + "latitude": 39.60023459400003, + "longitude": -104.88829135999998 } }, - "ttl": "oneyear" + "ttl": "oneyear", + "recordId": "1B8F8AFB" } }, - "recordGeneratedBy": "TMC", - "schemaVersion": 6, - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", - "odePacketID": "1D6FCDA23022F235E6", - "serialId": { - "recordId": 0, - "serialNumber": 39887, - "streamId": "9a4b7448-d26a-41f9-a80d-97f3ac8c1dd7", - "bundleSize": 1, - "bundleId": 39887 - }, - "sanitized": false, - "recordGeneratedAt": "2020-11-11T07:34:05.151191Z", - "maxDurationTime": 32000, - "odeTimStartDateTime": "2020-11-11T07:36:53.035Z", - "odeReceivedAt": "2020-11-11T07:34:05.220Z" + "isCertPresent": false }, "payload": { "data": { - "timeStamp": 454054, - "packetID": "1D6FCDA23022F235E6", - "urlB": "null", - "dataFrames": [ - { - "regions": { - "GeographicalPath": { - "closedPath": "false", - "anchor": { - "lat": 418082518, - "long": -1105341319 + "messageId": 31, + "value": { + "TravelerInformation": { + "msgCnt": 1, + "timeStamp": 22826, + "packetID": "1B28434A4CD2E2D3C8", + "urlB": "null", + "dataFrames": [ + { + "doNotUse1": 0, + "frameType": "roadSignage", + "msgId": { + "furtherInfoID": "0000" }, - "name": "I_WY 233_SAT-047D5D92_RC_KEMWYO233B", - "laneWidth": 32700, - "directionality": "both", - "description": { - "path": { - "offset": { - "ll": { - "nodes": [ - { - "delta": { - "node-LL3": { - "lon": -8338, - "lat": 10897 - } - } - }, - { - "delta": { - "node-LL5": { - "lon": 1507, - "lat": 169431 - } - } - }, - { - "delta": { - "node-LL5": { - "lon": -260004, - "lat": 152391 - } - } - }, - { - "delta": { - "node-LL5": { - "lon": -30606, - "lat": 230849 - } - } - }, - { - "delta": { - "node-LL4": { - "lon": -116741, - "lat": 76938 - } - } - }, - { - "delta": { - "node-LL5": { - "lon": -237069, - "lat": 63754 - } - } - }, - { - "delta": { - "node-LL4": { - "lon": -110373, - "lat": 80674 - } - } - }, - { - "delta": { - "node-LL5": { - "lon": -139739, - "lat": 122423 - } - } - }, - { - "delta": { - "node-LL5": { - "lon": -14891, - "lat": 173179 - } - } - }, - { - "delta": { - "node-LL4": { - "lon": -15201, - "lat": 51728 - } - } - }, - { - "delta": { - "node-LL5": { - "lon": -207792, - "lat": 174741 - } - } - }, - { - "delta": { - "node-LL5": { - "lon": -81993, - "lat": 147705 - } - } - }, - { - "delta": { - "node-LL4": { - "lon": 26456, - "lat": 68121 - } - } - }, - { - "delta": { - "node-LL4": { - "lon": 58918, - "lat": 74751 - } - } - }, - { - "delta": { - "node-LL4": { - "lon": -56248, - "lat": 74095 - } - } - }, - { - "delta": { - "node-LL5": { - "lon": -10762, - "lat": 220792 - } - } - }, - { - "delta": { - "node-LL4": { - "lon": -5356, - "lat": 70780 - } - } - }, - { - "delta": { - "node-LL4": { - "lon": 41398, - "lat": 125487 - } - } - }, - { - "delta": { - "node-LL4": { - "lon": 36074, - "lat": 63967 - } - } - }, - { - "delta": { - "node-LL5": { - "lon": -12787, - "lat": 188434 - } - } - } - ] - } + "startYear": 2026, + "startTime": 22826, + "durationTime": 32000, + "priority": 5, + "doNotUse2": 0, + "regions": [ + { + "name": "D_025A_DEC_SAT-1B8F8AFB_RC_test-7-21-2024t12.58michigan-B-4868", + "id": { + "region": 0, + "id": 0 + }, + "anchor": { + "lat": 396133302, + "long": -1048958060 }, - "scale": 0 + "laneWidth": 5000, + "directionality": "both", + "closedPath": false, + "direction": "0300", + "description": { + "path": { + "scale": 0, + "offset": { + "ll": { + "nodes": [ + { + "delta": { + "node-LL1": { + "lon": 698, + "lat": -1236 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 74448, + "lat": -129720 + } + } + } + ] + } + } + } + } } + ], + "doNotUse3": 0, + "doNotUse4": 0, + "content": { + "advisory": [ + { + "item": { + "itis": 5906 + } + }, + { + "item": { + "itis": 4868 + } + } + ] }, - "id": { - "id": 0, - "region": 0 - }, - "direction": { - "from000-0to022-5degrees": true, - "from022-5to045-0degrees": true, - "from045-0to067-5degrees": true, - "from067-5to090-0degrees": false, - "from090-0to112-5degrees": false, - "from112-5to135-0degrees": false, - "from135-0to157-5degrees": false, - "from157-5to180-0degrees": false, - "from180-0to202-5degrees": false, - "from202-5to225-0degrees": false, - "from225-0to247-5degrees": false, - "from247-5to270-0degrees": false, - "from270-0to292-5degrees": true, - "from292-5to315-0degrees": true, - "from315-0to337-5degrees": true, - "from337-5to360-0degrees": true - } + "url": "null" } - }, - "durationTime": 32000, - "doNotUse3": 0, - "doNotUse4": 0, - "startYear": 2020, - "msgId": { - "furtherInfoID": "0000" - }, - "priority": 5, - "content": { - "advisory": [ - { - "item": { - "itis": 5906 - } - }, - { - "item": { - "itis": 4868 - } - } - ] - }, - "url": null, - "doNotUse1": 0, - "doNotUse2": 0, - "frameType": "roadSignage", - "startTime": 454054 + ] } - ], - "msgCnt": 16 - } - }, - "dataType": "us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation" -} + } + }, + "dataType": "us.dot.its.jpo.asn.j2735.r2024.TravelerInformation.TravelerInformationMessageFrame" + } +} \ No newline at end of file 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 19c24f50..6bd75224 100644 --- a/logger-kafka-consumer/src/test/resources/TIM_odeTim_Rsus.json +++ b/logger-kafka-consumer/src/test/resources/TIM_odeTim_Rsus.json @@ -4,7 +4,7 @@ "odePacketID": "257559968DC2308890", "odeReceivedAt": "2020-12-14T23:36:41.490Z", "odeTimStartDateTime": "2020-12-14T23:36:40.718Z", - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", + "payloadType": "us.dot.its.jpo.ode.model.OdeMessageFramePayload", "recordGeneratedAt": "2020-12-14T23:36:40.965947Z", "recordGeneratedBy": "TMC", "request": { @@ -44,192 +44,84 @@ }, "payload": { "data": { - "msgCnt": 2, - "packetID": "257559968DC2308890", - "timeStamp": 502536, - "urlB": "null", - "dataFrames": [ - { - "content": { - "advisory": [ - { - "item": {"itis": 4871} - } - ] - }, - "durationTime": 32000, - "frameType": "roadSignage", - "msgId": { - "furtherInfoID": "0000" - }, - "priority": 5, - "regions": [ + "messageId": 31, + "value": { + "TravelerInformation": { + "msgCnt": 1, + "timeStamp": 22826, + "packetID": "1B28434A4CD2E2D3C8", + "urlB": "null", + "dataFrames": [ { - "anchor": { - "lat": 412696444, - "long": -1054796709 + "doNotUse1": 0, + "frameType": "roadSignage", + "msgId": { + "furtherInfoID": "0000" }, - "closedPath": "false", - "description": { - "path": { - "offset": { - "ll": { - "nodes": [ - { - "delta": { - "node-LL3": { - "lat": -10830, - "lon": 12710 - } - } - }, - { - "delta": { - "node-LL3": { - "lat": -20785, - "lon": 26578 - } - } - }, - { - "delta": { - "node-LL3": { - "lat": -6698, - "lon": 16897 - } - } - }, - { - "delta": { - "node-LL4": { - "lat": -5448, - "lon": 56865 - } - } - }, - { - "delta": { - "node-LL3": { - "lat": -14806, - "lon": 32584 - } - } - }, - { - "delta": { - "node-LL3": { - "lat": -15537, - "lon": 32086 - } - } - }, - { - "delta": { - "node-LL4": { - "lat": -18878, - "lon": 51470 - } - } - }, - { - "delta": { - "node-LL4": { - "lat": -55342, - "lon": 88538 - } - } - }, - { - "delta": { - "node-LL3": { - "lat": -23750, - "lon": 21609 - } - } - }, - { - "delta": { - "node-LL4": { - "lat": -117938, - "lon": 73050 - } - } - }, - { - "delta": { - "node-LL4": { - "lat": -56861, - "lon": 14308 - } - } - }, - { - "delta": { - "node-LL3": { - "lat": -28664, - "lon": -2927 - } - } - }, - { - "delta": { - "node-LL4": { - "lat": -41129, - "lon": -17876 - } - } - }, - { - "delta": { - "node-LL3": { - "lat": -14462, - "lon": 667 + "startYear": 2026, + "startTime": 22826, + "durationTime": 32000, + "priority": 5, + "doNotUse2": 0, + "regions": [ + { + "name": "D_025A_DEC_SAT-1B8F8AFB_RC_test-7-21-2024t12.58michigan-B-4868", + "id": { + "region": 0, + "id": 0 + }, + "anchor": { + "lat": 396133302, + "long": -1048958060 + }, + "laneWidth": 5000, + "directionality": "both", + "closedPath": false, + "direction": "0300", + "description": { + "path": { + "scale": 0, + "offset": { + "ll": { + "nodes": [ + { + "delta": { + "node-LL1": { + "lon": 698, + "lat": -1236 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 74448, + "lat": -129720 + } + } } - } + ] } - ] + } } - }, - "scale": 0 + } } + ], + "doNotUse3": 0, + "doNotUse4": 0, + "content": { + "advisory": [ + { + "item": {"itis": 4871} + } + ] }, - "direction": { - "from000-0to022-5degrees": false, - "from022-5to045-0degrees": false, - "from045-0to067-5degrees": false, - "from067-5to090-0degrees": false, - "from090-0to112-5degrees": true, - "from112-5to135-0degrees": true, - "from135-0to157-5degrees": true, - "from157-5to180-0degrees": true, - "from180-0to202-5degrees": false, - "from202-5to225-0degrees": false, - "from225-0to247-5degrees": false, - "from247-5to270-0degrees": false, - "from270-0to292-5degrees": false, - "from292-5to315-0degrees": false, - "from315-0to337-5degrees": false, - "from337-5to360-0degrees": false - }, - "directionality": "both", - "id": { - "id": 0, - "region": 0 - }, - "laneWidth": 5000, - "name": "I_I 80_RSU-10.145.12.27_RC_test-t-12" + "url": "null" } - ], - "doNotUse2": 0, - "doNotUse3": 0, - "doNotUse4": 0, - "doNotUse1": 0, - "startTime": 502536, - "startYear": 2020, - "url": "null" + ] } - ] - } - }, - "dataType": "us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation" + } + }, + "dataType": "us.dot.its.jpo.asn.j2735.r2024.TravelerInformation.TravelerInformationMessageFrame" + } } diff --git a/logger-kafka-consumer/src/test/resources/rxMsg_TIM_OdeOutput.json b/logger-kafka-consumer/src/test/resources/rxMsg_TIM_OdeOutput.json index 76cb4aa3..212bbfec 100644 --- a/logger-kafka-consumer/src/test/resources/rxMsg_TIM_OdeOutput.json +++ b/logger-kafka-consumer/src/test/resources/rxMsg_TIM_OdeOutput.json @@ -1,132 +1,227 @@ { "metadata": { - "recordGeneratedBy": "OBU", + "logFileName": "rxMsg_TIM.bin", + "recordType": "timMsg", + "securityResultCode": "success", "receivedMessageDetails": { - "locationData": { - "elevation": 1515, - "heading": "0.0000", - "latitude": 40.4739533, - "speed": 0.14, - "longitude": -104.9689995 - }, - "rxSource": "SAT" + "rxSource": "NA" }, - "schemaVersion": 3, - "securityResultCode": "unknown", - "payloadType": "us.dot.its.jpo.ode.model.OdeTimPayload", + "payloadType": "us.dot.its.jpo.ode.model.OdeMessageFramePayload", "serialId": { - "recordId": 2, - "serialNumber": 0, - "streamId": "f212c298-4021-412a-b7c6-1fdb64a6a227", + "streamId": "6f204bcf-5db1-4b46-be8a-35149a6b2240", "bundleSize": 1, - "bundleId": 4 + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 }, + "odeReceivedAt": "2026-01-22T21:10:48.642Z", + "schemaVersion": 9, + "maxDurationTime": 0, + "recordGeneratedAt": "2026-01-22T21:10:48.642Z", + "recordGeneratedBy": "RSU", "sanitized": false, - "recordGeneratedAt": "2017-09-05T20:23:39.194Z[UTC]", - "recordType": "rxMsg", - "logFileName": "rxMsg_TIM.bin", - "odeReceivedAt": "2017-11-09T13:33:34.039Z[UTC]" + "odePacketID": "17e610000000000000", + "odeTimStartDateTime": "2026-01-22T21:10:48.642Z", + "asn1": "001F80A97014B901EC9C236B00000000000F775D9B0301EA73E452D1539716C99E9D555100003F0A59B080010007F8AA9979F4D3BB3A0A9266C000000854E3B2C47291F21E85EEF057980028422C1FFE0001FFFC00017FFF80000FFFFF000009FFFFF8000005FFFFFF00000007FF80007FFF00005FFFE00003FFFFC000027FFFFE0000017FFFFFC000000C523E43D138ECB11C6200C00FB0473DFB72A0E997C74007D408E5C376CD4F775D9B00", + "source": "RSU", + "originIp": "172.19.0.1", + "isCertPresent": false }, "payload": { "data": { - "MessageFrame": { - "messageId": 31, - "value": { - "TravelerInformation": { - "timeStamp": 408812, - "packetID": "EC9C236B0000000000", - "dataFrames": { - "TravelerDataFrame": { - "regions": { - "GeographicalPath": { - "anchor": { - "elevation": 20, - "lat": 263056840, - "long": -801481510 - }, - "name": "SXM DFB CSW 10", - "laneWidth": 600, - "directionality": { - "forward": "" - }, - "description": { - "path": { - "offset": { - "xy": { - "nodes": { - "NodeXY": [ - { - "delta": { - "node-LatLon": { - "lon": -1050524251, - "lat": 405744807 - } - } - }, - { - "delta": { - "node-LatLon": { - "lon": -1050500237, - "lat": 405735393 - } - } - } - ] + "messageId": 31, + "value": { + "TravelerInformation": { + "msgCnt": 1, + "timeStamp": 309505, + "packetID": "EC9C236B0000000000", + "urlB": "null", + "dataFrames": [ + { + "doNotUse1": 0, + "frameType": "advisory", + "msgId": { + "roadSignID": { + "position": { + "lat": 416784730, + "long": -1087827750, + "elevation": 9171 + }, + "viewAngle": "AAAA", + "mutcdCode": "warning", + "crc": "0000" + } + }, + "startYear": 2017, + "startTime": 308065, + "durationTime": 1, + "priority": 0, + "doNotUse2": 0, + "regions": [ + { + "name": "Testing TIM", + "id": { + "region": 0, + "id": 33 + }, + "anchor": { + "lat": 412500807, + "long": -1110093847, + "elevation": 20207 + }, + "laneWidth": 700, + "directionality": "both", + "closedPath": false, + "direction": "000A", + "description": { + "path": { + "scale": 0, + "offset": { + "ll": { + "nodes": [ + { + "delta": { + "node-LL1": { + "lon": 2047, + "lat": -2048 + } + } + }, + { + "delta": { + "node-LL2": { + "lon": 8191, + "lat": -8192 + } + } + }, + { + "delta": { + "node-LL3": { + "lon": 32767, + "lat": -32768 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 131071, + "lat": -131072 + } + } + }, + { + "delta": { + "node-LL5": { + "lon": 2097151, + "lat": -2097152 + } + } + }, + { + "delta": { + "node-LL6": { + "lon": 8388607, + "lat": -8388608 + } + } + }, + { + "delta": { + "node-LL1": { + "lon": 2047, + "lat": -2048 + } + } + }, + { + "delta": { + "node-LL2": { + "lon": 8191, + "lat": -8192 + } + } + }, + { + "delta": { + "node-LL3": { + "lon": 32767, + "lat": -32768 + } + } + }, + { + "delta": { + "node-LL4": { + "lon": 131071, + "lat": -131072 + } + } + }, + { + "delta": { + "node-LL5": { + "lon": 2097151, + "lat": -2097152 + } + } + }, + { + "delta": { + "node-LL6": { + "lon": 8388607, + "lat": -8388608 + } + } + }, + { + "delta": { + "node-LatLon": { + "lon": -1110093847, + "lat": 412500807 + } + } } - } - }, - "scale": 0 - } - }, - "direction": 1111100000000001 - } - }, - "durationTime": 32000, - "doNotUse3": 0, - "doNotUse4": 0, - "doNotUse1": 0, - "doNotUse2": 0, - "frameType": { - "roadSignage": "" - }, - "msgId": { - "furtherInfoID": "0000" - }, - "startTime": 149760, - "priority": 2, - "content": { - "advisory": { - "SEQUENCE": [ - { - "item": { - "itis": 13609 - } - }, - { - "item": { - "itis": 268 - } - }, - { - "item": { - "itis": 12554 - } - }, - { - "item": { - "itis": 8720 + ] } } - ] + } } } - } - }, - "msgCnt": 0 - } + ], + "doNotUse3": 3, + "doNotUse4": 2, + "content": { + "advisory": [ + { + "item": { + "itis": 125 + } + }, + { + "item": { + "text": "some text" + } + }, + { + "item": { + "itis": 250 + } + }, + { + "item": { + "text": "98765" + } + } + ] + }, + "url": "null" + } + ] } } }, - "dataType": "TravelerInformation" + "dataType": "us.dot.its.jpo.asn.j2735.r2024.TravelerInformation.TravelerInformationMessageFrame" } } \ No newline at end of file