Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
}
Comment on lines -51 to -80
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: These methods were not used


public OdeLogMetadata convertTimMetadataJsonToJava(String value) {

OdeLogMetadata odeTimMetadata = null;
Expand All @@ -95,13 +64,12 @@ public OdeLogMetadata convertTimMetadataJsonToJava(String value) {
((ObjectNode) metaDataNode).replace("receivedMessageDetails", receivedMessageDetailsNode);
}
}
// System.out.println(metaDataNode);
log.trace("MetaDataNode: {}", metaDataNode);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: This was a commented out System.out print and has been changed to a TRACE level log.

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;
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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()]));
Expand All @@ -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;
Expand Down Expand Up @@ -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);
}
Expand All @@ -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");
Expand Down Expand Up @@ -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));
Expand All @@ -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;
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -142,14 +146,14 @@ private List<ActiveTim> 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());
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -379,7 +383,7 @@ public void getAllMilepostsForTim_EndPointNull() {
}

@Test
public void sendTimToSDW_MultipleActiveSatTimsFound() {
public void sendTimToSDW_MultipleActiveSatTimsFound() throws IOException {
// Arrange
List<ActiveTim> activeSatTims = getActiveTims(true);
when(mockActiveTimService.getActiveTimsByClientIdDirection(any(), any(), any())).thenReturn(activeSatTims);
Expand All @@ -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();
Expand All @@ -424,7 +428,7 @@ public void sendTimToSDW_NoActiveSatTimsFound() {
}

@Test
public void sendTimToSDW_SingleActiveSatTimFound() {
public void sendTimToSDW_SingleActiveSatTimFound() throws IOException {
// Arrange
List<ActiveTim> activeSatTims = getActiveTims(true).subList(0, 1);
when(mockActiveTimService.getActiveTimsByClientIdDirection(any(), any(), any())).thenReturn(activeSatTims);
Expand All @@ -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<>());

Expand All @@ -468,7 +472,7 @@ public void sendTimToRsus_NoRsusFound() {
}

@Test
public void sendTimToRsus_RsusFound_NoActiveTIMs() {
public void sendTimToRsus_RsusFound_NoActiveTIMs() throws IOException {
// Arrange
List<WydotRsu> rsus = new ArrayList<>();
WydotRsu rsu = new WydotRsu();
Expand Down Expand Up @@ -499,7 +503,7 @@ public void sendTimToRsus_RsusFound_NoActiveTIMs() {
}

@Test
public void sendTimToRsus_RsusFound_ActiveTIMsExist() {
public void sendTimToRsus_RsusFound_ActiveTIMsExist() throws IOException {
// Arrange
List<WydotRsu> rsus = new ArrayList<>();
WydotRsu rsu = new WydotRsu();
Expand Down
Original file line number Diff line number Diff line change
@@ -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"
}
]
}
4 changes: 2 additions & 2 deletions local-deployment/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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:
Expand Down
5 changes: 4 additions & 1 deletion local-deployment/sample.env
Original file line number Diff line number Diff line change
Expand Up @@ -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
NEO4J_URI=bolt://${DOCKER_HOST_IP}:6687

# log level of asn1_codec instances
ACM_LOG_LEVEL=ERROR
Loading