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 5dad11f4..1709b375 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 @@ -11,6 +11,7 @@ import java.util.List; import java.util.Map; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import com.fasterxml.jackson.core.JsonProcessingException; @@ -29,8 +30,6 @@ import us.dot.its.jpo.ode.plugin.SNMP; import us.dot.its.jpo.ode.plugin.ServiceRequest; import us.dot.its.jpo.ode.plugin.SnmpProtocol; -import us.dot.its.jpo.ode.plugin.j2735.J2735SpecialVehicleExtensions; -import us.dot.its.jpo.ode.plugin.j2735.J2735SupplementalVehicleExtensions; import us.dot.its.jpo.ode.plugin.j2735.OdePosition3D; import us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage; import us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage.DataFrame.Region; @@ -40,45 +39,15 @@ import us.dot.its.jpo.ode.util.JsonUtils; @Component +@Slf4j public class JsonToJavaConverter { - private ObjectMapper mapper = new ObjectMapper(); + private final ObjectMapper mapper = new ObjectMapper(); public JsonToJavaConverter() { mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); } - public J2735SpecialVehicleExtensions convertJ2735SpecialVehicleExtensionsJsonToJava(String value, int i) { - - JsonNode part2Node = getPart2Node(value, i); - J2735SpecialVehicleExtensions spve = null; - try { - spve = mapper.treeToValue(part2Node, J2735SpecialVehicleExtensions.class); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - return spve; - } - - public J2735SupplementalVehicleExtensions convertJ2735SupplementalVehicleExtensionsJsonToJava(String value, int i) { - - JsonNode part2Node = getPart2Node(value, i); - J2735SupplementalVehicleExtensions suve = null; - try { - suve = mapper.treeToValue(part2Node, J2735SupplementalVehicleExtensions.class); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } - return suve; - } - - public JsonNode getPart2Node(String value, int i) { - JsonNode part2 = JsonUtils.getJsonNode(value, "payload").get("data").get("partII"); - if (part2 != null) - return part2.get(i).get("value"); - return null; - } - public OdeLogMetadata convertTimMetadataJsonToJava(String value) { OdeLogMetadata odeTimMetadata = null; @@ -95,13 +64,12 @@ public OdeLogMetadata convertTimMetadataJsonToJava(String value) { ((ObjectNode) metaDataNode).replace("receivedMessageDetails", receivedMessageDetailsNode); } } - // System.out.println(metaDataNode); + log.trace("MetaDataNode: {}", metaDataNode); odeTimMetadata = mapper.treeToValue(metaDataNode, OdeLogMetadata.class); } catch (IOException e) { - System.out.println("IOException"); - System.out.println(e.getStackTrace()); + log.error("An IOException occurred while converting TIM metadata JSON to Java", e); } catch (NullPointerException e) { - System.out.println(e.getMessage()); + log.error("A NullPointerException occurred while converting TIM metadata JSON to Java: {}", e.getMessage()); } return odeTimMetadata; @@ -166,10 +134,10 @@ public OdeRequestMsgMetadata convertBroadcastTimMetadataJsonToJava(String value) } } catch (IOException e) { - System.out.println("IOException"); - System.out.println(e.getStackTrace()); + log.error("An IOException occurred while converting Broadcast TIM metadata JSON to Java", e); } catch (NullPointerException e) { - System.out.println(e.getMessage()); + log.error("A NullPointerException occurred while converting Broadcast TIM metadata JSON to Java: {}", + e.getMessage()); } return odeTimMetadata; } @@ -359,7 +327,7 @@ else if (sequenceArrNode.get("item").get("text") != null) regions.add(region); } } else { - System.out.println("warning: geographicalPathNode is not an object or an array"); + log.warn("geographicalPathNode is not an object or an array"); } dataFrame.setRegions(regions.toArray(new OdeTravelerInformationMessage.DataFrame.Region[regions.size()])); @@ -369,9 +337,9 @@ else if (sequenceArrNode.get("item").get("text") != null) odeTimPayload = new OdeTimPayload(); odeTimPayload.setData(tim); } catch (IOException e) { - System.out.println(e.getStackTrace()); + log.error("An IOException occurred while converting TIM JSON to Java", e); } catch (NullPointerException e) { - System.out.println(e.getMessage()); + log.error("A NullPointerException occurred while converting TIM JSON to Java: {}", e.getMessage()); } return odeTimPayload; @@ -523,21 +491,28 @@ public OdeTimPayload convertTmcTimTopicJsonToJava(String value) { String item = null; if (sequenceArrNode != null && sequenceArrNode.isArray()) { for (final JsonNode objNode : sequenceArrNode) { - if (objNode.get("item").get("itis") != null) + 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) + } else if (objNode.get("item").get("text") != null) { item = mapper.treeToValue(objNode.get("item").get("text"), String.class); - if (!itemsList.contains(item)) + } else { + log.warn("'itis' or 'text' not found in item when converting TMC TIM"); + } + if (!itemsList.contains(item)) { itemsList.add(item); + } } } // ADD NON ARRAY ELEMENT if (sequenceArrNode != null && !sequenceArrNode.isArray()) { - if (sequenceArrNode.get("item").get("itis") != null) + 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) + } else if (sequenceArrNode.get("item").get("text") != null) { item = mapper.treeToValue(sequenceArrNode.get("item").get("text"), String.class); + } else { + log.warn("'itis' or 'text' not found in item when converting TMC TIM"); + } itemsList.add(item); } @@ -547,6 +522,9 @@ else if (sequenceArrNode.get("item").get("text") != null) if (frameTypeNode != null && frameTypeNode.fieldNames().hasNext()) { TravelerInfoType frameType = TravelerInfoType.valueOf(frameTypeNode.fieldNames().next()); dataFrame.setFrameType(frameType); + } else { + log.warn("frameType not found in TravelerDataFrame when converting TMC TIM. Defaulting to 'advisory'"); + dataFrame.setFrameType(TravelerInfoType.advisory); } JsonNode startTimeNode = travelerDataFrame.get("startTime"); @@ -576,7 +554,7 @@ else if (sequenceArrNode.get("item").get("text") != null) regions.add(region); } } else { - System.out.println("warning: geographicalPathNode is not an object or an array"); + log.warn("geographicalPathNode is not an object or an array"); } dataFrame.setRegions(regions.toArray(OdeTravelerInformationMessage.DataFrame.Region[]::new)); @@ -587,9 +565,9 @@ else if (sequenceArrNode.get("item").get("text") != null) odeTimPayload = new OdeTimPayload(); odeTimPayload.setData(tim); } catch (IOException e) { - System.out.println(e.getStackTrace()); + log.error("An IOException occurred while converting TMC TIM JSON to Java", e); } catch (NullPointerException e) { - System.out.println(e.getMessage()); + log.error("A NullPointerException occurred while converting TMC TIM JSON to Java: {}", e.getMessage()); } return odeTimPayload; @@ -603,9 +581,9 @@ public OdeTravelerInformationMessage convertBroadcastTimPayloadJsonToJava(String JsonNode timNode = JsonUtils.getJsonNode(value, "payload").get("data"); odeTim = mapper.treeToValue(timNode, OdeTravelerInformationMessage.class); } catch (IOException e) { - System.out.println(e.getStackTrace()); + log.error("An IOException occurred while converting Broadcast TIM JSON to Java", e); } catch (NullPointerException e) { - System.out.println(e.getMessage()); + log.error("A NullPointerException occurred while converting Broadcast TIM JSON to Java: {}", e.getMessage()); } return odeTim; diff --git a/cv-data-service-library/src/test/java/com/trihydro/library/service/WydotTimServiceTest.java b/cv-data-service-library/src/test/java/com/trihydro/library/service/WydotTimServiceTest.java index 9d8e9e11..e14436a2 100644 --- a/cv-data-service-library/src/test/java/com/trihydro/library/service/WydotTimServiceTest.java +++ b/cv-data-service-library/src/test/java/com/trihydro/library/service/WydotTimServiceTest.java @@ -15,7 +15,11 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import java.io.IOException; import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -142,14 +146,14 @@ private List getActiveTims(boolean isSat) { return activeTims; } - private OdeTravelerInformationMessage getMockOdeTravelerInformationMessage() { - String timJson = "{\"msgCnt\":\"1\",\"timeStamp\":\"2017-08-03T22:25:36.297Z\",\"urlB\":\"null\",\"packetID\":\"EC9C236B0000000000\",\"dataframes\":[{\"startDateTime\":\"2017-08-02T22:25:00.000Z\",\"durationTime\":1,\"doNotUse1\":\"0\",\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"priority\":\"0\",\"doNotUse2\":\"3\",\"regions\":[{\"name\":\"Testing TIM\",\"regulatorID\":\"0\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.2500807\",\"longitude\":\"-111.0093847\",\"elevation\":\"2020.6969900289998\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"description\":\"path\",\"path\":{\"scale\":\"0\",\"type\":\"ll\",\"nodes\":[{\"nodeLong\":\"0.0030982\",\"nodeLat\":\"0.0014562\",\"delta\":\"node-LL3\"},{\"nodeLong\":\"-111.0093847\",\"nodeLat\":\"41.2500807\",\"delta\":\"node-LatLon\"}]},\"direction\":\"0000000000001010\"}],\"doNotUse4\":\"2\",\"doNotUse3\":\"3\",\"content\":\"Advisory\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}"; + private OdeTravelerInformationMessage getMockOdeTravelerInformationMessage() throws IOException { + String timJson = + new String(Files.readAllBytes(Paths.get("src/test/resources/com/trihydro/library/service/mockOdeTravelerInformationMessage.json"))); Gson gson = new Gson(); - OdeTravelerInformationMessage mockOdeTravelerInformationMessage = gson.fromJson(timJson, OdeTravelerInformationMessage.class); - return mockOdeTravelerInformationMessage; + return gson.fromJson(timJson, OdeTravelerInformationMessage.class); } - private WydotOdeTravelerInformationMessage getMockWydotOdeTravelerInformationMessage() { + private WydotOdeTravelerInformationMessage getMockWydotOdeTravelerInformationMessage() throws IOException { OdeTravelerInformationMessage mockOdeTravelerInformationMessage = getMockOdeTravelerInformationMessage(); WydotOdeTravelerInformationMessage mockWydotOdeTravelerInformationMessage = new WydotOdeTravelerInformationMessage(); mockWydotOdeTravelerInformationMessage.setMsgCnt(mockOdeTravelerInformationMessage.getMsgCnt()); @@ -191,7 +195,7 @@ private WydotTim getMockWydotTim() { return wydotTim; } - private WydotTravelerInputData getMockWydotTravelerInputDataWithServiceRequest() { + private WydotTravelerInputData getMockWydotTravelerInputDataWithServiceRequest() throws IOException { WydotTravelerInputData wydotTravelerInputData = new WydotTravelerInputData(); wydotTravelerInputData.setTim(getMockOdeTravelerInformationMessage()); ServiceRequest serviceRequest = new ServiceRequest(); @@ -379,7 +383,7 @@ public void getAllMilepostsForTim_EndPointNull() { } @Test - public void sendTimToSDW_MultipleActiveSatTimsFound() { + public void sendTimToSDW_MultipleActiveSatTimsFound() throws IOException { // Arrange List activeSatTims = getActiveTims(true); when(mockActiveTimService.getActiveTimsByClientIdDirection(any(), any(), any())).thenReturn(activeSatTims); @@ -403,7 +407,7 @@ public void sendTimToSDW_MultipleActiveSatTimsFound() { } @Test - public void sendTimToSDW_NoActiveSatTimsFound() { + public void sendTimToSDW_NoActiveSatTimsFound() throws IOException { // Arrange when(mockActiveTimService.getActiveTimsByClientIdDirection(any(), any(), any())).thenReturn(new ArrayList<>()); WydotTim wydotTim = getMockWydotTim(); @@ -424,7 +428,7 @@ public void sendTimToSDW_NoActiveSatTimsFound() { } @Test - public void sendTimToSDW_SingleActiveSatTimFound() { + public void sendTimToSDW_SingleActiveSatTimFound() throws IOException { // Arrange List activeSatTims = getActiveTims(true).subList(0, 1); when(mockActiveTimService.getActiveTimsByClientIdDirection(any(), any(), any())).thenReturn(activeSatTims); @@ -448,7 +452,7 @@ public void sendTimToSDW_SingleActiveSatTimFound() { } @Test - public void sendTimToRsus_NoRsusFound() { + public void sendTimToRsus_NoRsusFound() throws IOException { // Arrange when(mockRsuService.getRsusByLatLong(any(), any(), any(), any())).thenReturn(new ArrayList<>()); @@ -468,7 +472,7 @@ public void sendTimToRsus_NoRsusFound() { } @Test - public void sendTimToRsus_RsusFound_NoActiveTIMs() { + public void sendTimToRsus_RsusFound_NoActiveTIMs() throws IOException { // Arrange List rsus = new ArrayList<>(); WydotRsu rsu = new WydotRsu(); @@ -499,7 +503,7 @@ public void sendTimToRsus_RsusFound_NoActiveTIMs() { } @Test - public void sendTimToRsus_RsusFound_ActiveTIMsExist() { + public void sendTimToRsus_RsusFound_ActiveTIMsExist() throws IOException { // Arrange List rsus = new ArrayList<>(); WydotRsu rsu = new WydotRsu(); diff --git a/cv-data-service-library/src/test/resources/com/trihydro/library/service/mockOdeTravelerInformationMessage.json b/cv-data-service-library/src/test/resources/com/trihydro/library/service/mockOdeTravelerInformationMessage.json new file mode 100644 index 00000000..828c86c3 --- /dev/null +++ b/cv-data-service-library/src/test/resources/com/trihydro/library/service/mockOdeTravelerInformationMessage.json @@ -0,0 +1,71 @@ +{ + "msgCnt": "1", + "timeStamp": "2017-08-03T22:25:36.297Z", + "urlB": "null", + "packetID": "EC9C236B0000000000", + "dataframes": [ + { + "startDateTime": "2017-08-02T22:25:00.000Z", + "durationTime": 1, + "doNotUse1": "0", + "frameType": "advisory", + "msgId": { + "roadSignID": { + "position": { + "latitude": "41.678473", + "longitude": "-108.782775", + "elevation": "917.1432" + }, + "viewAngle": "1010101010101010", + "mutcdCode": "warning", + "crc": "0000" + } + }, + "priority": "0", + "doNotUse2": "3", + "regions": [ + { + "name": "Testing TIM", + "regulatorID": "0", + "segmentID": "33", + "anchorPosition": { + "latitude": "41.2500807", + "longitude": "-111.0093847", + "elevation": "2020.6969900289998" + }, + "laneWidth": "7", + "directionality": "3", + "closedPath": "false", + "description": "path", + "path": { + "scale": "0", + "type": "ll", + "nodes": [ + { + "nodeLong": "0.0030982", + "nodeLat": "0.0014562", + "delta": "node-LL3" + }, + { + "nodeLong": "-111.0093847", + "nodeLat": "41.2500807", + "delta": "node-LatLon" + } + ] + }, + "direction": "0000000000001010" + } + ], + "doNotUse4": "2", + "doNotUse3": "3", + "content": "Advisory", + "items": [ + "125", + "some text", + "250", + "'98765" + ], + "url": "null" + } + ] +} \ No newline at end of file diff --git a/local-deployment/docker-compose.yml b/local-deployment/docker-compose.yml index 94a26ea7..d33ed220 100644 --- a/local-deployment/docker-compose.yml +++ b/local-deployment/docker-compose.yml @@ -91,7 +91,7 @@ services: ACM_CONFIG_FILE: adm.properties ACM_LOG_TO_CONSOLE: "true" ACM_LOG_TO_FILE: "false" - ACM_LOG_LEVEL: ERROR + ACM_LOG_LEVEL: ${ACM_LOG_LEVEL} depends_on: - kafka volumes: @@ -109,7 +109,7 @@ services: ACM_CONFIG_FILE: aem.properties ACM_LOG_TO_CONSOLE: "true" ACM_LOG_TO_FILE: "false" - ACM_LOG_LEVEL: ERROR + ACM_LOG_LEVEL: ${ACM_LOG_LEVEL} depends_on: - kafka volumes: diff --git a/local-deployment/sample.env b/local-deployment/sample.env index 435fd31b..3d2c7497 100644 --- a/local-deployment/sample.env +++ b/local-deployment/sample.env @@ -16,4 +16,7 @@ LOGGING_LEVEL_COM_TRIHYDRO=DEBUG REFRESH_CRON_EXPRESSION="0 0 1 * * *" # URI for the Neo4j database (which is not included in the local deployment) -NEO4J_URI=bolt://${DOCKER_HOST_IP}:6687 \ No newline at end of file +NEO4J_URI=bolt://${DOCKER_HOST_IP}:6687 + +# log level of asn1_codec instances +ACM_LOG_LEVEL=ERROR \ No newline at end of file