diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 4a6dc79da..8a3c971bb 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -12,3 +12,17 @@ The developers also wish to acknowledge the following leaders and contributors: * Oakridge National Laboratories: Jason Carter and Aaron Ferber Thanks to the ITS Joint Program Office for their support of the effort. + +The J2735 Traveler Information classes were generated using asn1jvm, which is a new ASN.1 compiler targeting Java. The asn1jvm tool is currently capable of compiling the 2016 version of the J2735 ASN.1 specification to Java classes which are capable of serializing and deserializing XER and JER. The output of the tool includes classes with Jackson annotations for each type in the specification, and a runtime library containing base classes for ASN.1 types and custom Jackson serializers and deserialers. The raw output of the tool and associated runtime library are here: https://github.com/iyourshaw/j2735-2016-java + +The generated classes were edited for compatibility with the 2020 version of the specification as follows: + +* TimDatFrame.java, fields renamed: + * sspTimRights -> notUsed + * sspLocationRights -> notUsed1 + * sspMsgRights1 -> notUsed2 + * sspMsgRights2 -> notUsed3 + * duratonTime -> durationTime +* Classes were moved to Java packages to be consistent with the module organization scheme in the 2020+ versions of J2735, and with Java package naming conventions (lowercase), and existing ODE package naming. Specifically, instead being in a `DSRC` package, the TIM-related classes were moved to `us.dot.its.jpo.ode.plugin.j2735.travelerinformation`, and `us.dot.its.jpo.ode.plugin.j2735.common` packages. + +The top level TravelerInformation class was also edited, by changing its base class to `us.dot.its.jpo.ode.plugin.asn1.Asn1Object` to enable it to plug directily into the existing `OdeData`/`OdeMsgPayload` data structure. \ No newline at end of file diff --git a/checkstyle.xml b/checkstyle.xml index 7a51e8d22..f17b829fb 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -27,6 +27,15 @@ + + + + + + + Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + *

http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ -package us.dot.its.jpo.ode.util; -import org.json.JSONObject; -import org.json.XML; +package us.dot.its.jpo.ode.util; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; @@ -24,147 +22,235 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper.Builder; +import org.json.JSONObject; +import org.json.XML; +/** + * Utility class for XML manipulation. + */ public class XmlUtils { - public static class XmlUtilsException extends Exception { - - private static final long serialVersionUID = 1L; - - public XmlUtilsException(String string) { - super(string); - } - - public XmlUtilsException(String string, Exception e) { - super(string, e); - } - - } - - private XmlMapper xmlMapper = new XmlMapper(); - private static XmlMapper staticXmlMapper = new XmlMapper(); - - static { - var builder = new Builder(staticXmlMapper); - builder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - builder.defaultUseWrapper(true); - staticXmlMapper = builder.build(); - } - - public XmlUtils() { - super(); - var builder = new Builder(xmlMapper); - builder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - builder.defaultUseWrapper(true); - xmlMapper = builder.build(); - } - - public String toXml(Object o) throws JsonProcessingException { - String xml = xmlMapper.writeValueAsString(o); - return xml; - } - - // public static String toXml(Object o) throws XmlUtilsException { - // try { - // JSONObject root = new JSONObject(); - // JSONObject object = new JSONObject(o); - // root.put(o.getClass().getSimpleName(), object); - // return XML.toString(root); - // } catch (JSONException e) { - // throw new XmlUtilsException("Error encoding object to XML", e); - // } - // } - - public Object fromXml(String xml, Class clazz) throws XmlUtilsException { - try { - return xmlMapper.readValue(xml, clazz); - } catch (Exception e) { - throw new XmlUtilsException("Error decoding " + xml + " to " + clazz.getName(), e); - } - } - - /** - * Embeds the arrayNode into an ObjectNode with the given childKey. By default a - * JSON array such as {"parent":[1, 2, 3,]} will be converted to: - * 123. - * This is not often desired as there is no paren object to encompass the array. - * By calling this method given childKey = "child" and arrayNode = [1, 2, 3,], - * method will return {"parent":{"child":[1, 2, 3,]}} which as a result will be - * encoded to - * 123. - * Which is a more representative of the JSON ObjectNode. - * - * @param childKey: The key to be given to the child array object - * @param arrayNode: The array node to be embedded in a ObjectNode - * @return OBjectNode representation of the given arrayNode redy to be converted - * to XML - */ - public static ObjectNode createEmbeddedJsonArrayForXmlConversion(String childKey, JsonNode arrayNode) { - ObjectNode childNode = staticXmlMapper.createObjectNode(); - childNode.set(childKey, arrayNode); - return childNode; - } - - public static String toXmlStatic(Object o) throws XmlUtilsException { - String xml; - try { - xml = staticXmlMapper.writeValueAsString(o); - } catch (Exception e) { - throw new XmlUtilsException("Error encoding object to XML", e); - } - return xml; - } - - public static Object fromXmlS(String xml, Class clazz) throws XmlUtilsException { - try { - return staticXmlMapper.readValue(xml, clazz); - } catch (Exception e) { - throw new XmlUtilsException("Error decoding " + xml + " to " + clazz.getName(), e); - } - } - - public static ObjectNode toObjectNode(String xml) throws XmlUtilsException { - try { - JSONObject jsonObject = XML.toJSONObject(xml, true); - String jsonString = jsonObject.toString(); - return JsonUtils.toObjectNode(jsonString); - - /* - * Due to issues with XmlMapper converting "xml arrays" to a valid DOM - * collection we could not use it in this context. Hence the above workaround - * was adopted. See: - * https://github.com/FasterXML/jackson-dataformat-xml/issues/187 - * https://github.com/FasterXML/jackson-dataformat-xml/issues/205 - */ - // return (ObjectNode) staticXmlMapper.readTree(xml); - } catch (Exception e) { - throw new XmlUtilsException("Error decoding " + xml + "to ObjectNode", e); - } - } - - public static JSONObject toJSONObject(String xml) throws XmlUtilsException { - try { - return XML.toJSONObject(xml, true); - } catch (Exception e) { - throw new XmlUtilsException("Error decoding " + xml + "to JSONObject", e); - } - } - - public static JsonNode getJsonNode(String tree, String fieldName) throws XmlUtilsException { - JsonNode jsonNode; - try { - jsonNode = staticXmlMapper.readTree(tree); - } catch (Exception e) { - throw new XmlUtilsException("Error getting field name " + fieldName + " from " + tree, e); - } - return jsonNode.get(fieldName); - } - - public XmlMapper getXmlMapper() { - return xmlMapper; - } - - public static XmlMapper getStaticXmlMapper() { - return staticXmlMapper; - } + /** + * Custom XML exception for handling XML parsing errors. + */ + public static class XmlUtilsException extends Exception { + + private static final long serialVersionUID = 1L; + + public XmlUtilsException(String string) { + super(string); + } + + public XmlUtilsException(String string, Exception e) { + super(string, e); + } + + } + + private XmlMapper xmlMapper = new XmlMapper(); + private static XmlMapper staticXmlMapper = new XmlMapper(); + + static { + var builder = new Builder(staticXmlMapper); + builder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + builder.defaultUseWrapper(true); + staticXmlMapper = builder.build(); + } + + /** + * Instantiates the XML utility as an object instead of using static methods. + */ + public XmlUtils() { + super(); + var builder = new Builder(xmlMapper); + builder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + builder.defaultUseWrapper(true); + xmlMapper = builder.build(); + } + + public String toXml(Object o) throws JsonProcessingException { + String xml = xmlMapper.writeValueAsString(o); + return xml; + } + + // public static String toXml(Object o) throws XmlUtilsException { + // try { + // JSONObject root = new JSONObject(); + // JSONObject object = new JSONObject(o); + // root.put(o.getClass().getSimpleName(), object); + // return XML.toString(root); + // } catch (JSONException e) { + // throw new XmlUtilsException("Error encoding object to XML", e); + // } + // } + + /** + * Attempt to convert an XML String into the specified class type. + * + * @param xml The XML String value + * @param clazz The class type + * @return The deserialized object that is of type clazz + */ + public Object fromXml(String xml, Class clazz) throws XmlUtilsException { + try { + return xmlMapper.readValue(xml, clazz); + } catch (Exception e) { + throw new XmlUtilsException("Error decoding " + xml + " to " + clazz.getName(), e); + } + } + + /** + * Embeds the arrayNode into an ObjectNode with the given childKey. By default a + * JSON array such as {"parent":[1, 2, 3,]} will be converted to: + * 123. + * This is not often desired as there is no paren object to encompass the array. + * By calling this method given childKey = "child" and arrayNode = [1, 2, 3,], + * method will return {"parent":{"child":[1, 2, 3,]}} which as a result will be + * encoded to + * 123. + * Which is a more representative of the JSON ObjectNode. + * + * @param childKey The key to be given to the child array object + * @param arrayNode The array node to be embedded in a ObjectNode + * @return OBjectNode representation of the given arrayNode redy to be converted + * to XML + */ + public static ObjectNode createEmbeddedJsonArrayForXmlConversion(String childKey, + JsonNode arrayNode) { + ObjectNode childNode = staticXmlMapper.createObjectNode(); + childNode.set(childKey, arrayNode); + return childNode; + } + + /** + * Find a component of an XML string by specifying the tag name. + * + * @param xml The XML String to be searched + * @param tagName The tag name to be identified + * @return The XML String only consisting of the tag and its children + */ + public static String findXmlContentString(String xml, String tagName) { + // Construct the start and end tag strings + String startTag = "<" + tagName + ">"; + String endTag = ""; + + // Find the start index of the start tag + int startIndex = xml.indexOf(startTag); + if (startIndex == -1) { + // Tag not found + return null; + } + + // Find the end index of the end tag, after the start tag + int endIndex = xml.indexOf(endTag, startIndex); + if (endIndex == -1) { + // End tag not found + return null; + } + + // Add the length of the end tag to get the complete end index + endIndex += endTag.length(); + + return xml.substring(startIndex, endIndex); + } + + /** + * Static method to attempt to serialize an object into XML. + * + * @param o The object to be serialized + * @return The serialized XML String + * @throws XmlUtilsException Throws an exception when failing to serialize the object + */ + public static String toXmlStatic(Object o) throws XmlUtilsException { + String xml; + try { + xml = staticXmlMapper.writeValueAsString(o); + } catch (Exception e) { + throw new XmlUtilsException("Error encoding object to XML", e); + } + return xml; + } + + /** + * Static method to attempt to deserialize an XML String into a specified object type. + * + * @param xml The xml String to be deserialized + * @param clazz The class type + * @return The deserialized object of class type clazz + * @throws XmlUtilsException Throws an exception when failing to deserialize the XML String + */ + public static Object fromXmlS(String xml, Class clazz) throws XmlUtilsException { + try { + return staticXmlMapper.readValue(xml, clazz); + } catch (Exception e) { + throw new XmlUtilsException("Error decoding " + xml + " to " + clazz.getName(), e); + } + } + + /** + * Static method to attempt to transform an XML String into an ObjectNode. + * + * @param xml The xml String to be transformed + * @return An ObjectNode representing the XML + * @throws XmlUtilsException Throws an exception when failing to transform into an ObjectNode + */ + public static ObjectNode toObjectNode(String xml) throws XmlUtilsException { + try { + JSONObject jsonObject = XML.toJSONObject(xml, true); + String jsonString = jsonObject.toString(); + return JsonUtils.toObjectNode(jsonString); + + /* + * Due to issues with XmlMapper converting "xml arrays" to a valid DOM + * collection we could not use it in this context. Hence the above workaround + * was adopted. See: + * https://github.com/FasterXML/jackson-dataformat-xml/issues/187 + * https://github.com/FasterXML/jackson-dataformat-xml/issues/205 + */ + // return (ObjectNode) staticXmlMapper.readTree(xml); + } catch (Exception e) { + throw new XmlUtilsException("Error decoding " + xml + "to ObjectNode", e); + } + } + + /** + * Static method to attempt to transform an XML String into a JSONObject. + * + * @param xml The xml String to be transformed + * @return A JSONObject representing the XML + * @throws XmlUtilsException Throws an exception when failing to transform into an JSONObject + */ + public static JSONObject toJSONObject(String xml) throws XmlUtilsException { + try { + return XML.toJSONObject(xml, true); + } catch (Exception e) { + throw new XmlUtilsException("Error decoding " + xml + "to JSONObject", e); + } + } + + /** + * Get a specific JSON node from an XML String based on a field name. + * + * @param tree The xml String to be parsed + * @param fieldName The field name to be parsed for + * @return The JsonNode for the specified field name + * @throws XmlUtilsException Throws an exception when failing to parse the XML String + */ + public static JsonNode getJsonNode(String tree, String fieldName) throws XmlUtilsException { + JsonNode jsonNode; + try { + jsonNode = staticXmlMapper.readTree(tree); + } catch (Exception e) { + throw new XmlUtilsException("Error getting field name " + fieldName + " from " + tree, e); + } + return jsonNode.get(fieldName); + } + + public XmlMapper getXmlMapper() { + return xmlMapper; + } + + public static XmlMapper getStaticXmlMapper() { + return staticXmlMapper; + } } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimData.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimData.java index 1f1fac5f4..22d99af05 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimData.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimData.java @@ -15,6 +15,9 @@ ******************************************************************************/ package us.dot.its.jpo.ode.model; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import static com.fasterxml.jackson.annotation.JsonTypeInfo.*; + public class OdeTimData extends OdeData { private static final long serialVersionUID = 2057040404896561615L; @@ -29,4 +32,16 @@ public OdeTimData(OdeMsgMetadata metadata, OdeMsgPayload payload) { super(metadata, payload); } + @Override + @JsonTypeInfo(use = Id.CLASS, include = As.EXISTING_PROPERTY, defaultImpl = OdeTimMetadata.class) + public void setMetadata(OdeMsgMetadata metadata) { + super.setMetadata(metadata); + } + + @Override + @JsonTypeInfo(use = Id.CLASS, include = As.EXISTING_PROPERTY, defaultImpl = OdeTimPayload.class) + public void setPayload(OdeMsgPayload payload) { + super.setPayload(payload); + } + } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimPayload.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimPayload.java index b5e9e0e7b..b6d34dfe7 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimPayload.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimPayload.java @@ -1,32 +1,47 @@ /******************************************************************************* * Copyright 2018 572682 * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + *

http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.model; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + import us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage; +import us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation; +/** + * ODE TIM payload class for both J2735 TravelerInformation and ODE + * TIM Creator OdeTravelerInformationMessage. + */ public class OdeTimPayload extends OdeMsgPayload { - private static final long serialVersionUID = 7061315628111448390L; + private static final long serialVersionUID = 7061315628111448390L; + + public OdeTimPayload() { + this(new OdeTravelerInformationMessage()); + } - public OdeTimPayload() { - this(new OdeTravelerInformationMessage()); - } + public OdeTimPayload(OdeTravelerInformationMessage tim) { + super(tim); + this.setData(tim); + } - public OdeTimPayload(OdeTravelerInformationMessage tim) { - super(tim); - this.setData(tim); - } + @JsonCreator + public OdeTimPayload(@JsonProperty("data") TravelerInformation tim) { + super(tim); + this.setData(tim); + } } diff --git a/jpo-ode-core/src/main/resources/schemas/schema-map.json b/jpo-ode-core/src/main/resources/schemas/schema-map.json index 85495546a..89c102e49 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-map.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-map.json @@ -1,4 +1,4 @@ -{ +{ "$schema": "http://json-schema.org/draft-04/schema#", "properties": { "metadata": { @@ -791,185 +791,177 @@ "nodeList": { "properties": { "nodes": { - "properties": { - "NodeXY": { - "items": [ - { + "type": "array", + "items": [ + { + "properties": { + "attributes": { + "properties": { + "dElevation": { + "type": "number" + }, + "dWidth": { + "type": "null" + }, + "data": { + "type": "null" + }, + "disabled": { + "type": "null" + }, + "enabled": { + "type": "null" + }, + "localNode": { + "type": "null" + } + }, + "required": [ + "dElevation" + ], + "type": [ + "object", + "null" + ] + }, + "delta": { "properties": { - "attributes": { + "nodeLatLon": { "properties": { - "dElevation": { + "lat": { "type": "number" }, - "dWidth": { - "type": "null" - }, - "data": { - "type": "null" - }, - "disabled": { - "type": "null" - }, - "enabled": { - "type": "null" - }, - "localNode": { - "type": "null" + "lon": { + "type": "number" } }, "required": [ - "dElevation" + "lon", + "lat" ], "type": [ "object", "null" ] }, - "delta": { + "nodeXY1": { "properties": { - "nodeLatLon": { - "properties": { - "lat": { - "type": "number" - }, - "lon": { - "type": "number" - } - }, - "required": [ - "lon", - "lat" - ], - "type": [ - "object", - "null" - ] + "x": { + "type": "number" }, - "nodeXY1": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY2": { + "properties": { + "x": { + "type": "number" }, - "nodeXY2": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY3": { + "properties": { + "x": { + "type": "number" }, - "nodeXY3": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY4": { + "properties": { + "x": { + "type": "number" }, - "nodeXY4": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY5": { + "properties": { + "x": { + "type": "number" }, - "nodeXY5": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY6": { + "properties": { + "x": { + "type": "number" }, - "nodeXY6": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" } }, - "type": "object" + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] } }, - "required": [ - "delta" - ], "type": "object" } + }, + "required": [ + "delta" ], - "type": "array" + "type": "object" } - }, - "required": [ - "NodeXY" - ], - "type": "object" + ] } }, "required": [ @@ -1821,185 +1813,177 @@ "nodeList": { "properties": { "nodes": { - "properties": { - "NodeXY": { - "items": [ - { + "type": "array", + "items": [ + { + "properties": { + "attributes": { + "properties": { + "dElevation": { + "type": "number" + }, + "dWidth": { + "type": "null" + }, + "data": { + "type": "null" + }, + "disabled": { + "type": "null" + }, + "enabled": { + "type": "null" + }, + "localNode": { + "type": "null" + } + }, + "required": [ + "dElevation" + ], + "type": [ + "object", + "null" + ] + }, + "delta": { "properties": { - "attributes": { + "nodeLatLon": { "properties": { - "dElevation": { + "lat": { "type": "number" }, - "dWidth": { - "type": "null" - }, - "data": { - "type": "null" - }, - "disabled": { - "type": "null" - }, - "enabled": { - "type": "null" - }, - "localNode": { - "type": "null" + "lon": { + "type": "number" } }, "required": [ - "dElevation" + "lon", + "lat" ], "type": [ "object", "null" ] }, - "delta": { + "nodeXY1": { "properties": { - "nodeLatLon": { - "properties": { - "lat": { - "type": "number" - }, - "lon": { - "type": "number" - } - }, - "required": [ - "lon", - "lat" - ], - "type": [ - "object", - "null" - ] + "x": { + "type": "number" }, - "nodeXY1": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY2": { + "properties": { + "x": { + "type": "number" }, - "nodeXY2": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY3": { + "properties": { + "x": { + "type": "number" }, - "nodeXY3": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY4": { + "properties": { + "x": { + "type": "number" }, - "nodeXY4": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY5": { + "properties": { + "x": { + "type": "number" }, - "nodeXY5": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY6": { + "properties": { + "x": { + "type": "number" }, - "nodeXY6": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" } }, - "type": "object" + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] } }, - "required": [ - "delta" - ], "type": "object" } + }, + "required": [ + "delta" ], - "type": "array" + "type": "object" } - }, - "required": [ - "NodeXY" - ], - "type": "object" + ] } }, "required": [ diff --git a/jpo-ode-core/src/main/resources/schemas/schema-tim.json b/jpo-ode-core/src/main/resources/schemas/schema-tim.json index 14ccfb46e..9076ee5c3 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-tim.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-tim.json @@ -22,7 +22,7 @@ "type": "string" }, "maxDurationTime": { - "type": "string" + "type": "number" }, "odePacketID": { "type": "string" @@ -40,7 +40,12 @@ "type": "string" }, "receivedMessageDetails": { - "type": "string" + "type": "object", + "properties": { + "rxSource": { + "type": "string" + } + } }, "recordGeneratedAt": { "type": "string" @@ -52,10 +57,10 @@ "type": "string" }, "sanitized": { - "type": "string" + "type": "boolean" }, "schemaVersion": { - "type": "string" + "type": "number" }, "securityResultCode": { "type": "string" @@ -255,10 +260,10 @@ "type": "object", "properties": { "nwCorner": { - "$ref": "#/$defs/OdePosition3D" + "$ref": "#/$defs/Position3D" }, "seCorner": { - "$ref": "#/$defs/OdePosition3D" + "$ref": "#/$defs/Position3D" } }, "required": [ @@ -285,16 +290,16 @@ "type": "object", "properties": { "bundleId": { - "type": "string" + "type": "number" }, "bundleSize": { - "type": "string" + "type": "number" }, "recordId": { - "type": "string" + "type": "number" }, "serialNumber": { - "type": "string" + "type": "number" }, "streamId": { "type": "string" @@ -312,15 +317,7 @@ "type": "object", "properties": { "data": { - "type": "object", - "properties": { - "MessageFrame": { - "$ref": "#/$defs/OdeTimMessageFrame" - } - }, - "required": [ - "MessageFrame" - ] + "$ref": "#/$defs/TravelerInformation" }, "dataType": { "type": "string" @@ -331,34 +328,11 @@ "dataType" ] }, - "OdeTimMessageFrame": { - "type": "object", - "properties": { - "messageId": { - "type": "string" - }, - "value": { - "type": "object", - "properties": { - "TravelerInformation": { - "$ref": "#/$defs/J2735Tim" - } - }, - "required": [ - "TravelerInformation" - ] - } - }, - "required": [ - "messageId", - "value" - ] - }, - "J2735Tim": { + "TravelerInformation": { "type": "object", "properties": { "timeStamp": { - "type": "string" + "type": "number" }, "packetID": { "type": "string" @@ -367,22 +341,15 @@ "type": "string" }, "dataFrames": { - "oneOf": [ - { - "type": "array", - "prefixItems": [ - { - "$ref": "#/$defs/OdeTimDataFrame" - } - ] - }, + "type": "array", + "prefixItems": [ { - "$ref": "#/$defs/OdeTimDataFrame" + "$ref": "#/$defs/TravelerDataFrame" } ] }, "msgCnt": { - "type": "string" + "type": "number" } }, "required": [ @@ -390,37 +357,19 @@ "msgCnt" ] }, - "OdeTimDataFrame": { - "type": "object", - "properties": { - "TravelerDataFrame": { - "oneOf": [ - { - "type": "array", - "prefixItems": [ - { - "$ref": "#/$defs/J2735TravelerDataFrame" - } - ] - }, - { - "$ref": "#/$defs/J2735TravelerDataFrame" - } - ] - } - }, - "required": [ - "TravelerDataFrame" - ] - }, - "J2735TravelerDataFrame": { + "TravelerDataFrame": { "type": "object", "properties": { "notUsed": { - "type": "string" + "type": "number" }, "frameType": { - "$ref": "#/$defs/J2735DF_FrameType" + "enum": [ + "unknown", + "advisory", + "roadSignage", + "commercialSignage" + ] }, "msgId": { "oneOf": [ @@ -436,48 +385,49 @@ ] }, { - "$ref": "#/$defs/J2735DF_MsgId_RoadSignId" + "type": "object", + "properties": { + "roadSignID": { + "$ref": "#/$defs/RoadSignID" + } + }, + "required": [ + "roadSignID" + ] } ] }, "startYear": { - "type": "string" + "type": "number" }, "startTime": { - "type": "string" + "type": "number" }, "durationTime": { - "type": "string" + "type": "number" }, "priority": { - "type": "string" + "type": "number" }, "notUsed1": { - "type": "string" + "type": "number" }, "regions": { - "oneOf": [ - { - "type": "array", - "prefixItems": [ - { - "$ref": "#/$defs/J2735DF_Regions" - } - ] - }, + "type": "array", + "prefixItems": [ { - "$ref": "#/$defs/J2735DF_Regions" + "$ref": "#/$defs/GeographicalPath" } ] }, "notUsed2": { - "type": "string" + "type": "number" }, "notUsed3": { - "type": "string" + "type": "number" }, "content": { - "$ref": "#/$defs/J2735DF_Content" + "$ref": "#/$defs/ContentChoice" }, "url": { "type": "string" @@ -497,925 +447,1041 @@ "content" ] }, - "J2735DF_FrameType": { - "oneOf": [ - { - "type": "object", - "properties": { - "unknown": { - "type": "string" - } - }, - "required": [ - "unknown" - ] + "RoadSignID": { + "type": "object", + "properties": { + "position": { + "$ref": "#/$defs/Position3D" }, - { - "type": "object", - "properties": { - "advisory": { - "type": "string" - } - }, - "required": [ - "advisory" - ] + "viewAngle": { + "$ref": "#/$defs/HeadingSlice" }, - { - "type": "object", - "properties": { - "roadSignage": { - "type": "string" - } - }, - "required": [ - "roadSignage" + "mutcdCode": { + "enum": [ + "none", + "regulatory", + "warning", + "maintenance", + "motoristService", + "guide", + "rec" ] }, - { - "type": "object", - "properties": { - "commercialSignage": { - "type": "string" - } - }, - "required": [ - "commercialSignage" - ] - } - ] - }, - "J2735DF_MsgId_RoadSignId": { - "type": "object", - "properties": { - "roadSignID": { - "type": "object", - "properties": { - "position": { - "$ref": "#/$defs/J2735Position3D" - }, - "viewAngle": { - "type": "string" - }, - "mutcdCode": { - "$ref": "#/$defs/J2735MUTCDCode" - } - }, - "required": [ - "position", - "viewAngle" - ] + "crc": { + "type": "string" } }, "required": [ - "roadSignID" + "position", + "viewAngle" ] }, - "J2735DF_Regions": { + "HeadingSlice": { "type": "object", "properties": { - "GeographicalPath": { - "oneOf": [ - { - "type": "array", - "prefixItems": [ - { - "$ref": "#/$defs/J2735DF_GeographicalPath" - } - ] - }, - { - "$ref": "#/$defs/J2735DF_GeographicalPath" - } - ] + "from000-0to022-5degrees": { + "type": "boolean" + }, + "from022-5to045-0degrees": { + "type": "boolean" + }, + "from045-0to067-5degrees": { + "type": "boolean" + }, + "from067-5to090-0degrees": { + "type": "boolean" + }, + "from090-0to112-5degrees": { + "type": "boolean" + }, + "from112-5to135-0degrees": { + "type": "boolean" + }, + "from135-0to157-5degrees": { + "type": "boolean" + }, + "from157-5to180-0degrees": { + "type": "boolean" + }, + "from180-0to202-5degrees": { + "type": "boolean" + }, + "from202-5to225-0degrees": { + "type": "boolean" + }, + "from225-0to247-5degrees": { + "type": "boolean" + }, + "from247-5to270-0degrees": { + "type": "boolean" + }, + "from270-0to292-5degrees": { + "type": "boolean" + }, + "from292-5to315-0degrees": { + "type": "boolean" + }, + "from315-0to337-5degrees": { + "type": "boolean" + }, + "from337-5to360-0degrees": { + "type": "boolean" } }, "required": [ - "GeographicalPath" + "from000-0to022-5degrees", + "from022-5to045-0degrees", + "from045-0to067-5degrees", + "from067-5to090-0degrees", + "from090-0to112-5degrees", + "from112-5to135-0degrees", + "from135-0to157-5degrees", + "from157-5to180-0degrees", + "from180-0to202-5degrees", + "from202-5to225-0degrees", + "from225-0to247-5degrees", + "from247-5to270-0degrees", + "from270-0to292-5degrees", + "from292-5to315-0degrees", + "from315-0to337-5degrees", + "from337-5to360-0degrees" ] }, - "J2735DF_GeographicalPath": { + "GeographicalPath": { "type": "object", "properties": { "name": { "type": "string" }, "id": { - "$ref": "#/$defs/J2735RoadSegmentReferenceID" + "$ref": "#/$defs/RoadSegmentReferenceID" }, "anchor": { - "$ref": "#/$defs/J2735Position3D" + "$ref": "#/$defs/Position3D" }, "laneWidth": { - "type": "string" + "type": "number" }, "directionality": { - "$ref": "#/$defs/J2735DirectionOfUse" + "$ref": "#/$defs/DirectionOfUse" }, "closedPath": { - "$ref": "#/$defs/BooleanObject" + "type": "boolean" }, "direction": { - "type": "string" + "$ref": "#/$defs/HeadingSlice" }, "description": { - "$ref": "#/$defs/J2735DF_Regions_Description" + "$ref": "#/$defs/DescriptionChoice" } }, "required": [ "description" ] }, - "J2735DirectionOfUse": { + "DirectionOfUse": { + "enum": [ + "unavailable", + "forward", + "reverse", + "both" + ] + }, + "DescriptionChoice": { "oneOf": [ { "type": "object", "properties": { - "unavailable": { - "type": "string" + "path": { + "$ref": "#/$defs/OffsetSystem" } }, "required": [ - "unavailable" + "path" ] }, { "type": "object", "properties": { - "forward": { - "type": "string" + "geometry": { + "$ref": "#/$defs/GeometricProjection" } }, "required": [ - "forward" + "geometry" ] }, { "type": "object", "properties": { - "reverse": { - "type": "string" + "oldRegion": { + "$ref": "#/$defs/ValidRegion" + } + }, + "required": [ + "oldRegion" + ] + } + ] + }, + "OffsetSystem": { + "type": "object", + "properties": { + "scale": { + "type": "number" + }, + "offset": { + "$ref": "#/$defs/OffsetChoice" + } + }, + "required": [ + "offset" + ] + }, + "OffsetChoice": { + "oneOf": [ + { + "type": "object", + "properties": { + "xy": { + "$ref": "#/$defs/NodeListXY" } }, "required": [ - "reverse" + "xy" ] }, { "type": "object", "properties": { - "both": { - "type": "string" + "ll": { + "$ref": "#/$defs/NodeListLL" } }, "required": [ - "both" + "ll" ] } ] }, - "J2735DF_Regions_Description": { + "NodeListXY": { "oneOf": [ { "type": "object", "properties": { - "path": { - "oneOf": [ - { - "type": "array", - "prefixItems": [ - { - "$ref": "#/$defs/J2735OffsetSystem" - } - ] - }, + "nodes": { + "type": "array", + "prefixItems": [ { - "$ref": "#/$defs/J2735OffsetSystem" + "$ref": "#/$defs/NodeXY" } ] } }, "required": [ - "path" + "nodes" ] }, { "type": "object", "properties": { - "geometry": { - "oneOf": [ - { - "type": "array", - "prefixItems": [ - { - "$ref": "#/$defs/J2735GeometricProjection" - } - ] - }, - { - "$ref": "#/$defs/J2735GeometricProjection" - } - ] + "computed": { + "$ref": "#/$defs/ComputedLane" } }, "required": [ - "geometry" + "computed" ] } ] }, - "J2735OffsetSystem": { + "NodeListLL": { "type": "object", "properties": { - "scale": { - "type": "string" - }, - "offset": { - "oneOf": [ - { - "type": "object", - "properties": { - "xy": { - "$ref": "#/$defs/J2735NodeListXY" - } - }, - "required": [ - "xy" - ] - }, + "nodes": { + "type": "array", + "prefixItems": [ { - "type": "object", - "properties": { - "ll": { - "$ref": "#/$defs/J2735NodeListLL" - } - }, - "required": [ - "ll" - ] + "$ref": "#/$defs/NodeLL" } ] } }, "required": [ - "offset" + "nodes" ] }, - "J2735NodeListXY": { + "NodeXY": { "type": "object", "properties": { - "nodes": { - "type": "object", - "properties": { - "NodeXY": { - "type": "array", - "prefixItems": [ - { - "$ref": "#/$defs/J2735NodeXY" - } - ] - } - }, - "required": [ - "NodeXY" - ] + "delta": { + "$ref": "#/$defs/NodeOffsetPointXY" + }, + "attributes": { + "$ref": "#/$defs/NodeAttributeSet" } }, "required": [ - "nodes" + "delta" ] }, - "J2735NodeListLL": { - "type": "object", - "properties": { - "nodes": { + "NodeOffsetPointXY": { + "oneOf": [ + { "type": "object", "properties": { - "NodeLL": { - "type": "array", - "prefixItems": [ - { - "$ref": "#/$defs/J2735NodeLL" - } - ] + "nodeXY1": { + "$ref": "#/$defs/NodeXYPoint" } }, "required": [ - "NodeLL" + "nodeXY1" ] - } - }, - "required": [ - "nodes" - ] - }, - "J2735NodeXY": { - "type": "object", - "properties": { - "delta": { - "oneOf": [ - { - "type": "object", - "properties": { - "node-XY1": { - "$ref": "#/$defs/J2735NodeXYDelta" - } - }, - "required": [ - "node-XY1" - ] - }, - { - "type": "object", - "properties": { - "node-XY2": { - "$ref": "#/$defs/J2735NodeXYDelta" - } - }, - "required": [ - "node-XY2" - ] - }, - { - "type": "object", - "properties": { - "node-XY3": { - "$ref": "#/$defs/J2735NodeXYDelta" - } - }, - "required": [ - "node-XY3" - ] - }, - { - "type": "object", - "properties": { - "node-XY4": { - "$ref": "#/$defs/J2735NodeXYDelta" - } - }, - "required": [ - "node-XY4" - ] - }, - { - "type": "object", - "properties": { - "node-XY5": { - "$ref": "#/$defs/J2735NodeXYDelta" - } - }, - "required": [ - "node-XY5" - ] - }, - { - "type": "object", - "properties": { - "node-XY6": { - "$ref": "#/$defs/J2735NodeXYDelta" - } - }, - "required": [ - "node-XY6" - ] - }, - { - "type": "object", - "properties": { - "node-LatLon": { - "$ref": "#/$defs/J2735NodeLLDelta" - } - }, - "required": [ - "node-LatLon" - ] + }, + { + "type": "object", + "properties": { + "nodeXY2": { + "$ref": "#/$defs/NodeXYPoint" } + }, + "required": [ + "nodeXY2" + ] + }, + { + "type": "object", + "properties": { + "nodeXY3": { + "$ref": "#/$defs/NodeXYPoint" + } + }, + "required": [ + "nodeXY3" + ] + }, + { + "type": "object", + "properties": { + "nodeXY4": { + "$ref": "#/$defs/NodeXYPoint" + } + }, + "required": [ + "nodeXY4" + ] + }, + { + "type": "object", + "properties": { + "nodeXY5": { + "$ref": "#/$defs/NodeXYPoint" + } + }, + "required": [ + "nodeXY5" + ] + }, + { + "type": "object", + "properties": { + "nodeXY6": { + "$ref": "#/$defs/NodeXYPoint" + } + }, + "required": [ + "nodeXY6" + ] + }, + { + "type": "object", + "properties": { + "nodeLatLon": { + "$ref": "#/$defs/NodeLLmD" + } + }, + "required": [ + "nodeLatLon" ] } - }, - "required": [ - "delta" ] }, - "J2735NodeLL": { + "NodeAttributeSet": { "type": "object", "properties": { - "delta": { - "oneOf": [ + "localNode": { + "type": "array", + "prefixItems": [ { - "type": "object", - "properties": { - "node-LL1": { - "$ref": "#/$defs/J2735NodeLLDelta" - } - }, - "required": [ - "node-LL1" - ] - }, - { - "type": "object", - "properties": { - "node-LL2": { - "$ref": "#/$defs/J2735NodeLLDelta" - } - }, - "required": [ - "node-LL2" - ] - }, - { - "type": "object", - "properties": { - "node-LL3": { - "$ref": "#/$defs/J2735NodeLLDelta" - } - }, - "required": [ - "node-LL3" - ] - }, - { - "type": "object", - "properties": { - "node-LL4": { - "$ref": "#/$defs/J2735NodeLLDelta" - } - }, - "required": [ - "node-LL4" - ] - }, + "$ref": "#/$defs/NodeAttributeXY" + } + ] + }, + "disabled": { + "type": "array", + "prefixItems": [ { - "type": "object", - "properties": { - "node-LL5": { - "$ref": "#/$defs/J2735NodeLLDelta" - } - }, - "required": [ - "node-LL5" - ] - }, + "$ref": "#/$defs/SegmentAttributeXY" + } + ] + }, + "enabled": { + "type": "array", + "prefixItems": [ { - "type": "object", - "properties": { - "node-LL6": { - "$ref": "#/$defs/J2735NodeLLDelta" - } - }, - "required": [ - "node-LL6" - ] - }, + "$ref": "#/$defs/SegmentAttributeXY" + } + ] + }, + "data": { + "type": "array", + "prefixItems": [ { - "type": "object", - "properties": { - "node-LatLon": { - "$ref": "#/$defs/J2735NodeLLDelta" - } - }, - "required": [ - "node-LatLon" - ] + "$ref": "#/$defs/LaneDataAttribute" } ] + }, + "dWidth": { + "type": "number" + }, + "dElevation": { + "type": "number" } - }, - "required": [ - "delta" + } + }, + "NodeAttributeXY": { + "enum": [ + "reserved", + "stopLine", + "roundedCapStyleA", + "roundedCapStyleB", + "mergePoint", + "divergePoint", + "downstreamStopLine", + "downstreamStartNode", + "closedToTraffic", + "safeIsland", + "curbPresentAtStepOff", + "hydrantPresent" ] }, - "J2735NodeXYDelta": { + "SegmentAttributeXY": { + "enum": [ + "reserved", + "doNotBlock", + "whiteLine", + "mergingLaneLeft", + "mergingLaneRight", + "curbOnLeft", + "curbOnRight", + "loadingzoneOnLeft", + "loadingzoneOnRight", + "turnOutPointOnLeft", + "turnOutPointOnRight", + "adjacentParkingOnLeft", + "adjacentParkingOnRight", + "adjacentBikeLaneOnLeft", + "adjacentBikeLaneOnRight", + "sharedBikeLane", + "bikeBoxInFront", + "transitStopOnLeft", + "transitStopOnRight", + "transitStopInLane", + "sharedWithTrackedVehicle", + "safeIsland", + "lowCurbsPresent", + "rumbleStripPresent", + "audibleSignalingPresent", + "adaptiveTimingPresent", + "rfSignalRequestPresent", + "partialCurbIntrusion", + "taperToLeft", + "taperToRight", + "taperToCenterLine", + "parallelParking", + "headInParking", + "freeParking", + "timeRestrictionsOnParking", + "costToPark", + "midBlockCurbPresent", + "unEvenPavementPresent" + ] + }, + "LaneDataAttribute": { "type": "object", "properties": { - "x": { - "type": "string" + "pathEndPointAngle": { + "type": "number" }, - "y": { - "type": "string" + "laneCrownPointCenter": { + "type": "number" + }, + "laneCrownPointLeft": { + "type": "number" + }, + "laneCrownPointRight": { + "type": "number" + }, + "laneAngle": { + "type": "number" + }, + "speedLimits": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/RegulatorySpeedLimit" + } + ] } }, "required": [ - "x", - "y" + "pathEndPointAngle", + "laneCrownPointCenter", + "laneCrownPointLeft", + "laneCrownPointRight", + "laneAngle", + "speedLimits" ] }, - "J2735NodeLLDelta": { + "RegulatorySpeedLimit": { "type": "object", "properties": { - "lat": { - "type": "string" + "type": { + "enum": [ + "unknown", + "maxSpeedInSchoolZone", + "maxSpeedInSchoolZoneWhenChildrenArePresent", + "maxSpeedInConstructionZone", + "vehicleMinSpeed", + "vehicleMaxSpeed", + "vehicleNightMaxSpeed", + "truckMinSpeed", + "truckMaxSpeed", + "truckNightMaxSpeed", + "vehiclesWithTrailersMinSpeed", + "vehiclesWithTrailersMaxSpeed", + "vehiclesWithTrailersNightMaxSpeed" + ] }, - "lon": { - "type": "string" + "speed": { + "type": "number" } }, "required": [ - "lon", - "lat" + "type", + "speed" ] }, - "J2735GeometricProjection": { + "NodeLL": { "type": "object", "properties": { - "direction": { - "type": "string" - }, - "extent": { - "type": "string" - }, - "laneWidth": { - "type": "string" + "delta": { + "$ref": "#/$defs/NodeOffsetPointLL" }, - "circle": { - "type": "object", - "properties": { - "center": { - "$ref": "#/$defs/J2735Position3D" - }, - "radius": { - "type": "string" - }, - "units": { - "$ref": "#/$defs/J2735DistanceUnits" - } - }, - "required": [ - "center", - "radius", - "units" - ] + "attributes": { + "$ref": "#/$defs/NodeAttributeSet" } }, "required": [ - "direction", - "circle" + "delta" ] }, - "J2735DF_Content": { + "NodeOffsetPointLL": { "oneOf": [ { "type": "object", "properties": { - "advisory": { - "$ref": "#/$defs/J2735DF_ContentSequence" + "nodeLL1": { + "$ref": "#/$defs/NodeLLmD" } }, "required": [ - "advisory" + "nodeLL1" ] }, { "type": "object", "properties": { - "workZone": { - "$ref": "#/$defs/J2735DF_ContentSequence" + "nodeLL2": { + "$ref": "#/$defs/NodeLLmD" } }, "required": [ - "workZone" + "nodeLL2" ] }, { "type": "object", "properties": { - "genericSign": { - "$ref": "#/$defs/J2735DF_ContentSequence" + "nodeLL3": { + "$ref": "#/$defs/NodeLLmD" } }, "required": [ - "genericSign" + "nodeLL3" ] }, { "type": "object", "properties": { - "speedLimit": { - "$ref": "#/$defs/J2735DF_ContentSequence" + "nodeLL4": { + "$ref": "#/$defs/NodeLLmD" } }, "required": [ - "speedLimit" + "nodeLL4" ] }, { "type": "object", "properties": { - "exitService": { - "$ref": "#/$defs/J2735DF_ContentSequence" + "nodeLL5": { + "$ref": "#/$defs/NodeLLmD" } }, "required": [ - "exitService" + "nodeLL5" ] - } - ] - }, - "J2735DF_ContentSequence": { - "oneOf": [ + }, { "type": "object", "properties": { - "SEQUENCE": { - "type": "array", - "prefixItems": [ - { - "$ref": "#/$defs/J2735DF_ContentSequenceItem" - } - ] + "nodeLL6": { + "$ref": "#/$defs/NodeLLmD" } }, "required": [ - "SEQUENCE" + "nodeLL6" ] }, { "type": "object", "properties": { - "SEQUENCE": { - "$ref": "#/$defs/J2735DF_ContentSequenceItem" + "nodeLatLon": { + "$ref": "#/$defs/NodeLLmD" } }, "required": [ - "SEQUENCE" + "nodeLatLon" ] } ] }, - "J2735DF_ContentSequenceItem": { + "NodeXYPoint": { "type": "object", "properties": { - "item": { - "type": "object", - "properties": { - "itis": { - "type": "string" - } - }, - "required": [ - "itis" - ] + "x": { + "type": "number" + }, + "y": { + "type": "number" } }, "required": [ - "item" + "x", + "y" ] }, - "J2735Position3D": { + "NodeLLmD": { "type": "object", "properties": { "lat": { - "type": "string" + "type": "number" }, - "long": { - "type": "string" - }, - "elevation": { - "type": [ - "string", - "null" - ] + "lon": { + "type": "number" } }, "required": [ - "lat", - "long" + "lon", + "lat" ] }, - "OdePosition3D": { + "ComputedLane": { "type": "object", "properties": { - "latitude": { - "type": "string" + "referenceLaneId": { + "type": "number" }, - "longitude": { - "type": "string" + "offsetXaxis": { + "$ref": "#/$defs/OffsetXaxisChoice" }, - "elevation": { - "type": [ - "string", - "null" - ] + "offsetYaxis": { + "$ref": "#/$defs/OffsetYaxisChoice" + }, + "rotateXY": { + "type": "number" + }, + "scaleXaxis": { + "type": "number" + }, + "scaleYaxis": { + "type": "number" } }, "required": [ - "latitude", - "longitude" + "referenceLaneId", + "offsetXaxis", + "offsetYaxis" ] }, - "J2735MUTCDCode": { + "OffsetXaxisChoice": { "oneOf": [ { "type": "object", "properties": { - "none": { - "type": "string" + "small": { + "type": "number" } }, "required": [ - "none" + "small" ] }, { "type": "object", "properties": { - "regulatory": { - "type": "string" + "large": { + "type": "number" } }, "required": [ - "regulatory" + "large" ] - }, + } + ] + }, + "OffsetYaxisChoice": { + "oneOf": [ { "type": "object", "properties": { - "warning": { - "type": "string" + "small": { + "type": "number" } }, "required": [ - "warning" + "small" ] }, { "type": "object", "properties": { - "maintenance": { - "type": "string" + "large": { + "type": "number" } }, "required": [ - "maintenance" + "large" ] + } + ] + }, + "GeometricProjection": { + "type": "object", + "properties": { + "direction": { + "$ref": "#/$defs/HeadingSlice" + }, + "extent": { + "$ref": "#/$defs/Extent" }, + "laneWidth": { + "type": "number" + }, + "circle": { + "$ref": "#/$defs/Circle" + } + }, + "required": [ + "direction", + "circle" + ] + }, + "Circle": { + "type": "object", + "properties": { + "center": { + "$ref": "#/$defs/Position3D" + }, + "radius": { + "type": "number" + }, + "units": { + "$ref": "#/$defs/DistanceUnits" + } + }, + "required": [ + "center", + "radius", + "units" + ] + }, + "ValidRegion": { + "type": "object", + "properties": { + "direction": { + "$ref": "#/$defs/HeadingSlice" + }, + "extent": { + "$ref": "#/$defs/Extent" + }, + "area": { + "$ref": "#/$defs/AreaChoice" + } + }, + "required": [ + "direction", + "extent", + "area" + ] + }, + "Extent": { + "enum": [ + "useInstantlyOnly", + "useFor3meters", + "useFor10meters", + "useFor50meters", + "useFor100meters", + "useFor500meters", + "useFor1000meters", + "useFor5000meters", + "useFor10000meters", + "useFor50000meters", + "useFor100000meters", + "useFor500000meters", + "useFor1000000meters", + "useFor5000000meters", + "useFor10000000meters", + "forever" + ] + }, + "AreaChoice": { + "oneOf": [ { "type": "object", "properties": { - "motoristService": { - "type": "string" + "shapePointSet": { + "$ref": "#/$defs/ShapePointSet" } }, "required": [ - "motoristService" + "shapePointSet" ] }, { "type": "object", "properties": { - "guide": { - "type": "string" + "circle": { + "$ref": "#/$defs/Circle" } }, "required": [ - "guide" + "circle" ] }, { "type": "object", "properties": { - "rec": { - "type": "string" + "regionPointSet": { + "$ref": "#/$defs/RegionPointSet" } }, "required": [ - "rec" + "regionPointSet" ] } ] }, - "J2735RoadSegmentReferenceID": { + "ShapePointSet": { "type": "object", "properties": { - "id": { - "type": "string" + "anchor": { + "$ref": "#/$defs/Position3D" }, - "region": { - "type": "string" + "laneWidth": { + "type": "number" + }, + "directionality": { + "$ref": "#/$defs/DirectionOfUse" + }, + "nodeList": { + "$ref": "#/$defs/NodeListXY" } }, "required": [ - "id" + "nodeList" ] }, - "J2735DistanceUnits": { - "oneOf": [ - { - "type": "object", - "properties": { - "centimeter": { - "type": "string" - } - }, - "required": [ - "centimeter" - ] + "RegionPointSet": { + "type": "object", + "properties": { + "anchor": { + "$ref": "#/$defs/Position3D" }, - { - "type": "object", - "properties": { - "cm2-5": { - "type": "string" - } - }, - "required": [ - "cm2-5" - ] + "scale": { + "type": "number" }, - { - "type": "object", - "properties": { - "decimeter": { - "type": "string" + "nodeList": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/RegionList" } - }, - "required": [ - "decimeter" ] + } + }, + "required": [ + "nodeList" + ] + }, + "RegionList": { + "type": "object", + "properties": { + "xOffset": { + "type": "number" + }, + "yOffset": { + "type": "number" }, + "zOffset": { + "type": "number" + } + }, + "required": [ + "xOffset", + "yOffset" + ] + }, + "ContentChoice": { + "oneOf": [ { "type": "object", "properties": { - "meter": { - "type": "string" + "advisory": { + "$ref": "#/$defs/ContentSequence" } }, "required": [ - "meter" + "advisory" ] }, { "type": "object", "properties": { - "kilometer": { - "type": "string" + "workZone": { + "$ref": "#/$defs/ContentSequence" } }, "required": [ - "kilometer" + "workZone" ] }, { "type": "object", "properties": { - "foot": { - "type": "string" + "genericSign": { + "$ref": "#/$defs/ContentSequence" } }, "required": [ - "foot" + "genericSign" ] }, { "type": "object", "properties": { - "yard": { - "type": "string" + "speedLimit": { + "$ref": "#/$defs/ContentSequence" } }, "required": [ - "yard" + "speedLimit" ] }, { "type": "object", "properties": { - "mile": { - "type": "string" + "exitService": { + "$ref": "#/$defs/ContentSequence" } }, "required": [ - "mile" + "exitService" ] } ] }, - "BooleanObject": { - "oneOf": [ + "ContentSequence": { + "type": "array", + "prefixItems": [ { + "$ref": "#/$defs/ContentSequenceItem" + } + ] + }, + "ContentSequenceItem": { + "type": "object", + "properties": { + "item": { "type": "object", "properties": { - "true": { - "type": "string" + "itis": { + "type": ["string", "number"] } }, "required": [ - "true" + "itis" ] + } + }, + "required": [ + "item" + ] + + }, + "Position3D": { + "type": "object", + "properties": { + "lat": { + "type": "number" }, - { - "type": "object", - "properties": { - "false": { - "type": "string" - } - }, - "required": [ - "false" - ] + "long": { + "type": "number" + }, + "elevation": { + "type": "number" } + }, + "required": [ + "lat", + "long" + ] + }, + "RoadSegmentReferenceID": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "region": { + "type": "number" + } + }, + "required": [ + "id" + ] + }, + "DistanceUnits": { + "enum": [ + "centimeter", + "cm2-5", + "decimeter", + "meter", + "kilometer", + "foot", + "yard", + "mile" ] } } diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java index 9a626ccff..6a92a0ce7 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java @@ -1,36 +1,40 @@ package us.dot.its.jpo.ode.model; +import static org.junit.Assert.assertEquals; + import com.fasterxml.jackson.databind.JsonNode; import com.networknt.schema.JsonSchema; import com.networknt.schema.JsonSchemaFactory; import com.networknt.schema.SpecVersion; import com.networknt.schema.ValidationMessage; - -import us.dot.its.jpo.ode.util.JsonUtils; - +import java.io.File; +import java.nio.file.Files; import java.util.Set; - import org.junit.jupiter.api.Test; +import us.dot.its.jpo.ode.util.JsonUtils; -import static org.junit.Assert.*; - +/** + * Tests for verifying the TIM schema is functional with the TIM JSON output. + */ public class OdeTimDataTest { - private static final String SCHEMA_VERSION = "7"; - private static final String ASN1_STRING = "005f498718cca69ec1a04600000100105d9b46ec5be401003a0103810040038081d4001f80d07016da410000000000000bbc2b0f775d9b0309c271431fa166ee0a27fff93f136b8205a0a107fb2ef979f4c5bfaeec97e4ad70c2fb36cd9730becdb355cc2fd2a7556b160b98b46ab98ae62c185fa55efb468d5b4000000004e2863f42cddc144ff7980040401262cdd7b809c509f5c62cdd35519c507b9062cdcee129c505cf262cdca5ff9c50432c62cdc5d3d9c502e3e62cdc13e79c501e9262cdbca2d9c5013ee62cdb80359c500e6a62cdb36299c500bc862cdaec1d9c50093c62cdaa2109c5006ea1080203091a859eeebb36006001830001aad27f4ff7580001aad355e39b5880a30029d6585009ef808332d8d9f80c3855151b38c772f765007967ec1170bcb7937f5cb880a25a52863493bcb87570dbcb5abc6bfb2faec606cfa34eb95a24790b2017366d3aabe7729e"; - - private static final String json = String.format("{\"metadata\":{\"securityResultCode\":\"\",\"recordGeneratedBy\":\"RSU\",\"schemaVersion\":\"%s\",\"odePacketID\":\"\",\"sanitized\":\"false\",\"asn1\":\"%s\",\"recordType\":\"timMsg\",\"recordGeneratedAt\":\"\",\"maxDurationTime\":\"0\",\"odeTimStartDateTime\":\"\",\"receivedMessageDetails\":\"\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\":{\"recordId\":\"0\",\"serialNumber\":\"0\",\"streamId\":\"11ad5323-ec81-4694-8cd0-eb88ca08728e\",\"bundleSize\":\"1\",\"bundleId\":\"0\"},\"logFileName\":\"\",\"odeReceivedAt\":\"2022-12-24T02:24:38.248417Z\",\"originIp\":\"172.18.0.1\"},\"payload\":{\"data\":{\"MessageFrame\":{\"messageId\":\"31\",\"value\":{\"TravelerInformation\":{\"timeStamp\":\"449089\",\"packetID\":\"0000000000000BBC2B\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":{\"regions\":{\"GeographicalPath\":{\"closedPath\":{\"false\":\"\"},\"anchor\":{\"lat\":\"411269876\",\"long\":\"-1047269563\"},\"name\":\"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456\",\"laneWidth\":\"32700\",\"directionality\":{\"both\":\"\"},\"description\":{\"path\":{\"offset\":{\"xy\":{\"nodes\":{\"NodeXY\":[{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047287423\",\"lat\":\"411264686\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047305390\",\"lat\":\"411260104\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047323629\",\"lat\":\"411256185\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047342080\",\"lat\":\"411252886\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047360706\",\"lat\":\"411250207\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047379480\",\"lat\":\"411248201\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047398354\",\"lat\":\"411246839\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047417290\",\"lat\":\"411246133\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047436246\",\"lat\":\"411245796\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047455202\",\"lat\":\"411245470\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047474159\",\"lat\":\"411245173\"}}}]}}},\"scale\":\"0\"}},\"id\":{\"id\":\"0\",\"region\":\"0\"},\"direction\":\"0000000000010000\"}},\"durationTime\":\"1440\",\"notUsed2\":\"0\",\"notUsed3\":\"0\",\"startYear\":\"2018\",\"msgId\":{\"roadSignID\":{\"viewAngle\":\"1111111111111111\",\"mutcdCode\":{\"warning\":\"\"},\"position\":{\"lat\":\"411269876\",\"long\":\"-1047269563\"}}},\"priority\":\"5\",\"content\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":\"777\"}},{\"item\":{\"itis\":\"13579\"}}]}},\"url\":\"null\",\"notUsed\":\"0\",\"notUsed1\":\"0\",\"frameType\":{\"advisory\":\"\"},\"startTime\":\"448260\"}},\"msgCnt\":\"1\"}}}},\"dataType\":\"TravelerInformation\"}}", SCHEMA_VERSION, ASN1_STRING); - - // - // Note that OdeTimData does not have annotations to support deserialization, so serialization/deserialization is not tested here. - // - - @Test - public void shouldValidateJson() throws Exception { - // Load json schema from resource - JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V202012); - final JsonSchema schema = factory.getSchema(getClass().getClassLoader().getResource("schemas/schema-tim.json").toURI()); - final JsonNode node = (JsonNode)JsonUtils.fromJson(json, JsonNode.class); - Set validationMessages = schema.validate(node); - assertEquals(String.format("Json validation errors: %s", validationMessages), 0, validationMessages.size()); - } + @Test + public void shouldValidateJson() throws Exception { + // Load test JSON + String jsonFilePath = + "src/test/resources/CVMessages/TIM_test.json"; + File jsonFile = new File(jsonFilePath); + byte[] jsonData = Files.readAllBytes(jsonFile.toPath()); + String json = new String(jsonData); + + // Load JSON schema from resource + JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V202012); + final JsonSchema schema = factory + .getSchema(getClass().getClassLoader().getResource("schemas/schema-tim.json").toURI()); + final JsonNode node = (JsonNode) JsonUtils.fromJson(json, JsonNode.class); + Set validationMessages = schema.validate(node); + assertEquals( + String.format("Json validation errors: %s", validationMessages), + 0, + validationMessages.size()); + } } diff --git a/jpo-ode-core/src/test/resources/CVMessages/TIM_test.json b/jpo-ode-core/src/test/resources/CVMessages/TIM_test.json new file mode 100644 index 000000000..3e096b913 --- /dev/null +++ b/jpo-ode-core/src/test/resources/CVMessages/TIM_test.json @@ -0,0 +1 @@ +{"metadata":{"logFileName":"","recordType":"timMsg","securityResultCode":"success","receivedMessageDetails":{"rxSource":"NA"},"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"streamId":"8af76b08-89bf-422e-b674-0f0ee065666f","bundleSize":1,"bundleId":0,"recordId":0,"serialNumber":0},"odeReceivedAt":"2024-12-06T10:39:42.806Z","schemaVersion":7,"maxDurationTime":0,"recordGeneratedAt":"","recordGeneratedBy":"RSU","sanitized":false,"odePacketID":"","odeTimStartDateTime":"","asn1":"001F830A752544F94F4354455420535452124C16B4FA27D64F431A94AC28F232828FF05260B5CA82DDFB227A687CA09CFDE87C4B0ED1C8800280204A865BB2C265D1E4F5D3A877C07F8093FC3D820142C4EB15C7AC09CE3356F45A90200118358186A148D3F13220B227C18569099E2D1232A28B5F2579208E479151D45D438BEFF80DB0C08CED3F45A50103103102088C1A44A152889AFA7F62218940E831C20F35EA1232777BF31146022C71408809E5EB7BA1D52835D8A040D83367520C4AB397658B07E21393A041060D049E825C15FCF56AFF05260B58E40024126EDBD550F6D519709FDE4CF880201602008CEE4ACA5DE274975513846DD7AD77F839305AD383175AA8A497954C284E668FFE4F0710D80802810030EAC2535BCD6AE047899B1CE75405C8E6936419C672A85F8900C50B428CA3188CA4E1101B485DEE47349B20CE339542FC5654852A1484C9C0A0B6DEBB81DB91CD26C8338CE550BF31188B6041101F08134A407147800DFCF8E5FE0A4C16B2BF3A3A253269429B3B8198F71B71F8C902002C008005DD1174A86649950714134C54C82F4C0012B9C982D69B5BEADBF1C99BEFD660C6A4200201A7A1ECCA540B60B0AA27F8093AC4BF831472A28ECD2E0203575E8F15F5000818817507D68CC505CF4497E8219CA2288A03C81503120AEB852B7507D68CC505CF4497E2121346A090E8061520293D37841E41530E9BF4214E93C326CF8502830F0C081FF9D71FE064C1BAA780A12351A24D300B6FD25F085703880101600022BE028AC1105C1D5CB0F0E001A42F7F849305AD3E9B408EB43464DC861E6234918C8667857300022C400087E511D765E294CF3507435289D7EBBC2849A4982D69F494982D524C16B4FA36827A1D6C31DFDBE55A627F819307EA49F19AA77C773D119EA690CE094883E0100588001E1832A00950E876B85589726EF3EDFE0E4C16B4F8EB0ECDE8A23F3F9E839831CE316170D2000858080178162BF959EDACD55B2CD3721A1EDFE064C1AEC1B3F02442FEC92E119DFAF82D6EC3884002C0004A9FEDD617613A307F791C6D74FB1A27C451F6139305AD394982D582367260B5A600","originIp":"172.18.0.1"},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation","data":{"msgCnt":82,"timeStamp":345337,"packetID":"4F4354455420535452","urlB":"IA5St","dataFrames":[{"notUsed":29,"frameType":"commercialSignage","msgId":{"furtherInfoID":"4F43"},"startYear":425,"startTime":306216,"durationTime":31001,"priority":2,"notUsed1":1,"regions":[{"name":"IA5","id":{"region":38149,"id":48118},"anchor":{"lat":-567387419,"elevation":53848,"long":-1717691068},"laneWidth":15175,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":true,"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":false,"from337-5to360-0degrees":false},"description":{"oldRegion":{"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":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor50000meters","area":{"circle":{"center":{"lat":-686654332,"elevation":38736,"long":1616508908},"radius":3832,"units":"centimeter"}}}}},{"name":"I","id":{"region":64573,"id":33281},"anchor":{"lat":-714161321,"elevation":48475,"long":-1285139143},"laneWidth":26805,"directionality":"unavailable","closedPath":true,"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":true,"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":1,"offset":{"ll":{"nodes":[{"delta":{"node-LL4":{"lon":-127947,"lat":-120550}},"attributes":{"localNode":["downstreamStopLine","closedToTraffic"],"disabled":["adjacentParkingOnLeft","transitStopOnLeft","parallelParking","mergingLaneLeft","curbOnLeft"],"enabled":["midBlockCurbPresent","transitStopInLane","taperToCenterLine","lowCurbsPresent"],"data":[{"pathEndPointAngle":-8,"laneCrownPointLeft":35,"laneAngle":62,"speedLimits":[{"type":"truckMaxSpeed","speed":5822},{"type":"truckNightMaxSpeed","speed":3017}]}],"dWidth":162,"dElevation":424}},{"delta":{"node-LatLon":{"lon":-998896073,"lat":735850714}},"attributes":{"localNode":["hydrantPresent","safeIsland","closedToTraffic","stopLine","reserved"],"disabled":["loadingzoneOnRight","adjacentParkingOnRight","headInParking"],"enabled":["costToPark","mergingLaneLeft","midBlockCurbPresent","unEvenPavementPresent","curbOnLeft"],"data":[{"laneAngle":-82,"speedLimits":[{"type":"truckMinSpeed","speed":2097}]}],"dWidth":264,"dElevation":-269}},{"delta":{"node-LL4":{"lon":86161,"lat":20207}},"attributes":{"localNode":["roundedCapStyleA","divergePoint","roundedCapStyleB","reserved"],"disabled":["adjacentParkingOnLeft","adjacentBikeLaneOnRight"],"enabled":["headInParking","timeRestrictionsOnParking"],"data":[{"laneCrownPointCenter":-68}],"dWidth":245,"dElevation":247}},{"delta":{"node-LL1":{"lon":-172,"lat":525}},"attributes":{"localNode":["closedToTraffic","roundedCapStyleA"],"disabled":["partialCurbIntrusion"],"enabled":["adaptiveTimingPresent"],"dWidth":206,"dElevation":144}},{"delta":{"node-LL5":{"lon":-873243,"lat":1464496}},"attributes":{"localNode":["stopLine","downstreamStartNode"],"disabled":["taperToRight","doNotBlock"],"enabled":["bikeBoxInFront"],"data":[{"pathEndPointAngle":25,"laneAngle":137}],"dWidth":414,"dElevation":181}}]}}}}},{"name":"IA5","id":{"region":7296,"id":1154},"anchor":{"lat":29950376,"elevation":16367,"long":270580409},"laneWidth":4926,"directionality":"unavailable","closedPath":true,"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":true,"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":{"geometry":{"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":true,"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},"extent":"useFor10000meters","laneWidth":26482,"circle":{"center":{"lat":598135630,"elevation":32186,"long":664850545},"radius":3930,"units":"mile"}}}},{"name":"IA5S","id":{"region":1582,"id":46417},"anchor":{"lat":-283655839,"elevation":57976,"long":-685153664},"laneWidth":7235,"directionality":"forward","closedPath":true,"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":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},"description":{"oldRegion":{"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":true,"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},"extent":"useFor1000meters","area":{"shapePointSet":{"anchor":{"lat":581272185,"elevation":9059,"long":1108489970},"laneWidth":20085,"directionality":"forward","nodeList":{"nodes":[{"delta":{"node-LatLon":{"lon":-605370079,"lat":829743521}},"attributes":{"localNode":["mergePoint","reserved"],"disabled":["turnOutPointOnRight","adjacentParkingOnLeft","freeParking","costToPark"],"enabled":["costToPark","adjacentParkingOnRight"],"data":[{"laneCrownPointRight":4,"laneAngle":-167}],"dWidth":144,"dElevation":239}},{"delta":{"node-LatLon":{"lon":-605370079,"lat":829743521}},"attributes":{"localNode":["hydrantPresent","divergePoint"],"disabled":["freeParking","unEvenPavementPresent"],"enabled":["freeParking","adaptiveTimingPresent","taperToLeft"],"data":[{"speedLimits":[{"type":"vehiclesWithTrailersMaxSpeed","speed":3517}]}],"dWidth":-36,"dElevation":-453}},{"delta":{"node-LatLon":{"lon":-605370079,"lat":829743521}},"attributes":{"localNode":["roundedCapStyleA","downstreamStopLine","mergePoint","hydrantPresent"],"disabled":["doNotBlock","whiteLine","bikeBoxInFront","sharedBikeLane"],"enabled":["bikeBoxInFront","transitStopInLane","unEvenPavementPresent","adjacentBikeLaneOnRight"],"data":[{"pathEndPointAngle":-95,"laneAngle":60}],"dWidth":463,"dElevation":57}}]}}}}}},{"name":"IA5","id":{"region":11251,"id":41890},"anchor":{"lat":385181606,"elevation":46812,"long":1670812734},"laneWidth":16153,"directionality":"unavailable","closedPath":true,"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":true,"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":{"geometry":{"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":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useInstantlyOnly","laneWidth":6004,"circle":{"center":{"lat":-509239964,"elevation":9413,"long":772185922},"radius":1224,"units":"cm2-5"}}}}],"notUsed2":15,"notUsed3":9,"content":{"exitService":[{"item":{"itis":599}}]},"url":"IA5S"},{"notUsed":11,"frameType":"commercialSignage","msgId":{"roadSignID":{"position":{"lat":634998835,"elevation":50308,"long":313588249},"viewAngle":{"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":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"mutcdCode":"maintenance","crc":"4F43"}},"startYear":3481,"startTime":305174,"durationTime":24752,"priority":5,"notUsed1":10,"regions":[{"name":"I","id":{"region":44107,"id":63537},"anchor":{"lat":-419185997,"elevation":51107,"long":-533287210},"laneWidth":25278,"directionality":"reverse","closedPath":true,"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":true,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"path":{"scale":8,"offset":{"ll":{"nodes":[{"delta":{"node-LatLon":{"lon":900792217,"lat":448269129}},"attributes":{"localNode":["roundedCapStyleA","roundedCapStyleB","downstreamStartNode","divergePoint"],"disabled":["timeRestrictionsOnParking","sharedWithTrackedVehicle"],"enabled":["taperToCenterLine"],"data":[{"pathEndPointAngle":24,"laneCrownPointCenter":9}],"dWidth":225,"dElevation":-213}},{"delta":{"node-LatLon":{"lon":900792217,"lat":448269129}},"attributes":{"localNode":["stopLine","mergePoint"],"disabled":["rfSignalRequestPresent"],"enabled":["turnOutPointOnLeft","loadingzoneOnLeft","headInParking","adjacentParkingOnRight","safeIsland"],"data":[{"pathEndPointAngle":-109,"laneCrownPointRight":83}],"dWidth":-31,"dElevation":-482}},{"delta":{"node-LL1":{"lon":-1370,"lat":-1581}},"attributes":{"localNode":["mergePoint","divergePoint","downstreamStartNode","safeIsland"],"disabled":["adaptiveTimingPresent","partialCurbIntrusion","parallelParking","curbOnLeft","doNotBlock"],"enabled":["curbOnRight","sharedBikeLane"],"data":[{"laneCrownPointLeft":-121}],"dWidth":505,"dElevation":348}}]}}}}},{"name":"IA","id":{"region":30031,"id":322},"anchor":{"lat":-454547095,"elevation":59458,"long":353479827},"laneWidth":23566,"directionality":"unavailable","closedPath":true,"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":true,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"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},"extent":"useFor10meters","laneWidth":24321,"circle":{"center":{"lat":-539150408,"elevation":45059,"long":-814772254},"radius":1157,"units":"mile"}}}},{"name":"IA5St","id":{"region":46088,"id":60227},"anchor":{"lat":-476956537,"elevation":4505,"long":759386724},"laneWidth":28846,"directionality":"forward","closedPath":true,"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},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"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":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor100meters","laneWidth":8084,"circle":{"center":{"lat":-405703383,"elevation":9512,"long":-508985739},"radius":2519,"units":"mile"}}}}],"notUsed2":11,"notUsed3":23,"content":{"exitService":[{"item":{"text":"I"}},{"item":{"text":"IA5St"}},{"item":{"text":"IA5"}}]},"url":"IA5St"},{"notUsed":13,"frameType":"unknown","msgId":{"furtherInfoID":"4F43"},"startYear":2776,"startTime":408571,"durationTime":15957,"priority":5,"notUsed1":6,"regions":[{"name":"IA","id":{"region":62756,"id":63693},"anchor":{"lat":424936826,"elevation":35858,"long":-1208779998},"laneWidth":18563,"directionality":"both","closedPath":true,"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":true,"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":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"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":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor5000meters","laneWidth":17158,"circle":{"center":{"lat":442482548,"elevation":43319,"long":-804103995},"radius":1951,"units":"meter"}}}},{"name":"IA5S","id":{"region":51032,"id":30319},"anchor":{"lat":-559743245,"elevation":46636,"long":1697199162},"laneWidth":5901,"directionality":"unavailable","closedPath":true,"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":true,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"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":true,"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},"extent":"useFor500meters","laneWidth":28716,"circle":{"center":{"lat":707126893,"elevation":35728,"long":-77527193},"radius":3343,"units":"meter"}}}},{"name":"IA","id":{"region":23939,"id":26592},"anchor":{"lat":-328004279,"elevation":45419,"long":88284632},"laneWidth":15118,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"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":{"oldRegion":{"direction":{"from000-0to022-5degrees":true,"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":false,"from337-5to360-0degrees":false},"extent":"useFor50000meters","area":{"circle":{"center":{"lat":171361070,"elevation":57912,"long":1462406911},"radius":3502,"units":"kilometer"}}}}}],"notUsed2":31,"notUsed3":12,"content":{"speedLimit":[{"item":{"itis":40721}},{"item":{"itis":36784}},{"item":{"text":"IA5S"}},{"item":{"text":"IA5"}},{"item":{"itis":49435}}]},"url":"IA5S"}]}}} \ No newline at end of file diff --git a/jpo-ode-plugins/pom.xml b/jpo-ode-plugins/pom.xml index 50b5281d1..68716dae1 100644 --- a/jpo-ode-plugins/pom.xml +++ b/jpo-ode-plugins/pom.xml @@ -45,5 +45,8 @@ logback-core 1.4.14 + + + diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/annotations/Asn1ParameterizedTypes.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/annotations/Asn1ParameterizedTypes.java new file mode 100644 index 000000000..a877ec076 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/annotations/Asn1ParameterizedTypes.java @@ -0,0 +1,86 @@ +package us.dot.its.jpo.ode.plugin.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Annotation to specify how to deserialize an ASN1 parameterized type, which + * is represented by an abstract generic class in Java. Modeled after the + * JsonTypeInfo and + * JsonSubTypes annotations in Jackson, but adding the ability to specify that + * the + * id field is an integer, not restricted to being a string like in Jackson. + * + * @author Ivan Yourshaw + */ +@Target({ ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +public @interface Asn1ParameterizedTypes { + + /** + * Id property. + * + * @return Name of the property used to determine which type to deserialize + */ + String idProperty(); + + /** + * Type id property. + * + * @return Type of the id property, which may be integer or string + */ + IdType idType(); + + /** + * Name of the value property. + * + * @return Name of the value property containing the payload which can be + * various types + * depending on the generic type parameters. + */ + String valueProperty(); + + /** + * Value property. + * + * @return Array of value types mapped to ids. + */ + Type[] value(); + + /** + * Id type enumeration. + */ + enum IdType { + INTEGER, + STRING + } + + /** + * Annotation to specify the type corresponding to an id. + */ + @interface Type { + /** + * Int id property. + * + * @return The id if it is an integer + */ + int intId() default -1; + + /** + * String id property. + * + * @return The id if it is a string + */ + String stringId() default ""; + + /** + * Class value property. + * + * @return The specific class to deserialize to + */ + Class value(); + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/annotations/Asn1Property.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/annotations/Asn1Property.java new file mode 100644 index 000000000..666434f8f --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/annotations/Asn1Property.java @@ -0,0 +1,64 @@ +package us.dot.its.jpo.ode.plugin.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Provides metadata for a property of an Asn.1 class: components of + * Asn1Sequence, or alternatives of Asn1Choice. + * + * @author Ivan Yourshaw + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Asn1Property { + /** + * Tag number property. + * + * @return Tag number indicating the canonical order of serialization + */ + int tag(); + + /** + * Name property. + * + * @return Name of the original non-normalized property. Not required if the + * Java property name is the same as + * the ASN.1 name. + */ + String name() default ""; + + /** + * Extensions present property. + * + * @return True if the property is an extension, false if part of the root + */ + boolean extension() default false; + + /** + * Optional field property. + * + * @return True if the ASN.1 OPTIONAL marker is present + */ + boolean optional() default false; + + /** + * Default value property. + * + * @return Default value specified by the ASN.1 DEFAULT marker. String can be + * converted to an integer for int types. + */ + String defaultValue() default ""; + + /** + * Open type property. + * + * @return Indicates that the property is an ASN1 Open Type, so UPER encoding + * needs to use a length determinant + * as described in T-REC-X.691 (2021/2) section 11.2. + */ + boolean openType() default false; + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/annotations/package-info.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/annotations/package-info.java new file mode 100644 index 000000000..90d4dfd11 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/annotations/package-info.java @@ -0,0 +1,4 @@ +/** + * Annotations for ASN.1 types + */ +package us.dot.its.jpo.ode.plugin.annotations; \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735ComputedLane.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735ComputedLane.java index 59f073f6f..b4d55ca59 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735ComputedLane.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735ComputedLane.java @@ -5,9 +5,9 @@ public class J2735ComputedLane extends Asn1Object { private static final long serialVersionUID = 1L; - private Integer referenceLaneId; - private Integer offsetXaxis; // could have an object with min and max inside of it - private Integer offsetYaxis; // could have an object with min and max inside of it + private Integer referenceLaneId; + private Integer offsetXaxis; + private Integer offsetYaxis; private Integer rotateXY; private Integer scaleXaxis; private Integer scaleYaxis; diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735DirectionOfUse.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735DirectionOfUse.java deleted file mode 100644 index c343ca295..000000000 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735DirectionOfUse.java +++ /dev/null @@ -1,22 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.plugin.j2735; - -public enum J2735DirectionOfUse { - FORWARD, - REVERSE, - BOTH -} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735LaneDataAttribute.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735LaneDataAttribute.java index 5a33a4440..f1614f7cc 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735LaneDataAttribute.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735LaneDataAttribute.java @@ -7,50 +7,50 @@ public class J2735LaneDataAttribute extends Asn1Object { * */ private static final long serialVersionUID = 1L; - private Integer pathEndPointAngle; - private Integer laneCrownPointCenter; - private Integer laneCrownPointLeft; - private Integer laneCrownPointRight; - private Integer laneAngle; + private int pathEndPointAngle; + private int laneCrownPointCenter; + private int laneCrownPointLeft; + private int laneCrownPointRight; + private int laneAngle; private J2735SpeedLimitList speedLimits; - public Integer getPathEndPointAngle() { + public int getPathEndPointAngle() { return pathEndPointAngle; } - public void setPathEndPointAngle(Integer pathEndPointAngle) { + public void setPathEndPointAngle(int pathEndPointAngle) { this.pathEndPointAngle = pathEndPointAngle; } - public Integer getLaneCrownPointCenter() { + public int getLaneCrownPointCenter() { return laneCrownPointCenter; } - public void setLaneCrownPointCenter(Integer laneCrownPointCenter) { + public void setLaneCrownPointCenter(int laneCrownPointCenter) { this.laneCrownPointCenter = laneCrownPointCenter; } - public Integer getLaneCrownPointLeft() { + public int getLaneCrownPointLeft() { return laneCrownPointLeft; } - public void setLaneCrownPointLeft(Integer laneCrownPointLeft) { + public void setLaneCrownPointLeft(int laneCrownPointLeft) { this.laneCrownPointLeft = laneCrownPointLeft; } - public Integer getLaneCrownPointRight() { + public int getLaneCrownPointRight() { return laneCrownPointRight; } - public void setLaneCrownPointRight(Integer laneCrownPointRight) { + public void setLaneCrownPointRight(int laneCrownPointRight) { this.laneCrownPointRight = laneCrownPointRight; } - public Integer getLaneAngle() { + public int getLaneAngle() { return laneAngle; } - public void setLaneAngle(Integer laneAngle) { + public void setLaneAngle(int laneAngle) { this.laneAngle = laneAngle; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735LaneDataAttributeList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735LaneDataAttributeList.java deleted file mode 100644 index 130ad4809..000000000 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735LaneDataAttributeList.java +++ /dev/null @@ -1,23 +0,0 @@ -package us.dot.its.jpo.ode.plugin.j2735; - -import java.util.ArrayList; -import java.util.List; - -import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; - -public class J2735LaneDataAttributeList extends Asn1Object { - /** - * - */ - private static final long serialVersionUID = 1L; - private List localNode = new ArrayList<>(); - - public List getLocalNode() { - return localNode; - } - - public void setLocalNode(List localNode) { - this.localNode = localNode; - } - -} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735MsgId.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735MsgId.java new file mode 100644 index 000000000..1b729cee5 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735MsgId.java @@ -0,0 +1,26 @@ +package us.dot.its.jpo.ode.plugin.j2735; + +import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; + +public class J2735MsgId extends Asn1Object { + private static final long serialVersionUID = 1L; + + private String furtherInfoID; + private J2735RoadSignId roadSignID; + + public String getFurtherInfoId() { + return furtherInfoID; + } + + public void setFurtherInfoId(String furtherInfoID) { + this.furtherInfoID = furtherInfoID; + } + + public J2735RoadSignId getRoadSignID() { + return roadSignID; + } + + public void setRoadSignID(J2735RoadSignId roadSignID) { + this.roadSignID = roadSignID; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735MutcdCode.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735MutcdCode.java new file mode 100644 index 000000000..744f1aa36 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735MutcdCode.java @@ -0,0 +1,11 @@ +package us.dot.its.jpo.ode.plugin.j2735; + +public enum J2735MutcdCode { + none, + regulatory, + warning, + maintenance, + motoristService, + guide, + rec, +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeAttributeSet.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeAttributeSet.java new file mode 100644 index 000000000..3b0493ef8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeAttributeSet.java @@ -0,0 +1,63 @@ +package us.dot.its.jpo.ode.plugin.j2735; + +import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; + +public class J2735NodeAttributeSet extends Asn1Object { + private static final long serialVersionUID = 1L; + + private J2735NodeAttribute[] localNode; + private J2735SegmentAttribute[] disabled; + private J2735SegmentAttribute[] enabled; + private J2735LaneDataAttribute[] data; + private Integer dWidth; + private Integer dElevation; + + public J2735NodeAttribute[] getLocalNode() { + return localNode; + } + + public void setLocalNode(J2735NodeAttribute[] localNode) { + this.localNode = localNode; + } + + public J2735SegmentAttribute[] getDisabled() { + return disabled; + } + + public void setDisabled(J2735SegmentAttribute[] disabled) { + this.disabled = disabled; + } + + public J2735SegmentAttribute[] getEnabled() { + return enabled; + } + + public void setEnabled(J2735SegmentAttribute[] enabled) { + this.enabled = enabled; + } + + public J2735LaneDataAttribute[] getData() { + return data; + } + + public void setData(J2735LaneDataAttribute[] data) { + this.data = data; + } + + public Integer getdWidth() { + return dWidth; + } + + public void setdWidth(Integer dWidth) { + this.dWidth = dWidth; + } + + public Integer getdElevation() { + return dElevation; + } + + public void setdElevation(Integer dElevation) { + this.dElevation = dElevation; + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeAttributeSetXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeAttributeSetXY.java deleted file mode 100644 index 7c8ef06dd..000000000 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeAttributeSetXY.java +++ /dev/null @@ -1,65 +0,0 @@ -package us.dot.its.jpo.ode.plugin.j2735; - -import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; - -public class J2735NodeAttributeSetXY extends Asn1Object { - /** - * - */ - private static final long serialVersionUID = 1L; - private J2735NodeAttributeXYList localNode; - private J2735SegmentAttributeXYList disabled; - private J2735SegmentAttributeXYList enabled; - private J2735LaneDataAttributeList data; - private Integer dWidth; - private Integer dElevation; - - public J2735NodeAttributeXYList getLocalNode() { - return localNode; - } - - public void setLocalNode(J2735NodeAttributeXYList localNode) { - this.localNode = localNode; - } - - public J2735SegmentAttributeXYList getDisabled() { - return disabled; - } - - public void setDisabled(J2735SegmentAttributeXYList disabled) { - this.disabled = disabled; - } - - public J2735SegmentAttributeXYList getEnabled() { - return enabled; - } - - public void setEnabled(J2735SegmentAttributeXYList enabled) { - this.enabled = enabled; - } - - public J2735LaneDataAttributeList getData() { - return data; - } - - public void setData(J2735LaneDataAttributeList data) { - this.data = data; - } - - public Integer getdWidth() { - return dWidth; - } - - public void setdWidth(Integer dWidth) { - this.dWidth = dWidth; - } - - public Integer getdElevation() { - return dElevation; - } - - public void setdElevation(Integer dElevation) { - this.dElevation = dElevation; - } - -} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeAttributeXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeAttributeXY.java deleted file mode 100644 index f584e05a9..000000000 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeAttributeXY.java +++ /dev/null @@ -1,20 +0,0 @@ -package us.dot.its.jpo.ode.plugin.j2735; - -import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; - -public class J2735NodeAttributeXY extends Asn1Object { - /** - * - */ - private static final long serialVersionUID = 1L; - private J2735NodeAttribute nodeAttrList; - - public J2735NodeAttribute getNodeAttrList() { - return nodeAttrList; - } - - public void setNodeAttrList(J2735NodeAttribute nodeAttrList) { - this.nodeAttrList = nodeAttrList; - } - -} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeAttributeXYList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeAttributeXYList.java deleted file mode 100644 index ab5e46e8f..000000000 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeAttributeXYList.java +++ /dev/null @@ -1,23 +0,0 @@ -package us.dot.its.jpo.ode.plugin.j2735; - -import java.util.ArrayList; -import java.util.List; - -import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; - -public class J2735NodeAttributeXYList extends Asn1Object { - /** - * - */ - private static final long serialVersionUID = 1L; - private List localNode = new ArrayList<>(); - - public List getLocalNode() { - return localNode; - } - - public void setLocalNode(List localNode) { - this.localNode = localNode; - } - -} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeListXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeListXY.java index 9be72df3d..5d3d493d0 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeListXY.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeListXY.java @@ -1,7 +1,5 @@ package us.dot.its.jpo.ode.plugin.j2735; -import com.fasterxml.jackson.annotation.JsonProperty; - import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; public class J2735NodeListXY extends Asn1Object { @@ -9,16 +7,15 @@ public class J2735NodeListXY extends Asn1Object { * */ private static final long serialVersionUID = 1L; - private J2735NodeSetXY nodes; + private J2735NodeXY[] nodes; private J2735ComputedLane computed; - @JsonProperty("nodes") - public J2735NodeSetXY getNodes() { + public J2735NodeXY[] getNodes() { return nodes; } - public void setNodes(J2735NodeSetXY nodeList) { - this.nodes = nodeList; + public void setNodes(J2735NodeXY[] nodes) { + this.nodes = nodes; } public J2735ComputedLane getComputed() { diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeSetXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeSetXY.java deleted file mode 100644 index 536814d54..000000000 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeSetXY.java +++ /dev/null @@ -1,25 +0,0 @@ -package us.dot.its.jpo.ode.plugin.j2735; - -import java.util.ArrayList; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonProperty; - -import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; - -public class J2735NodeSetXY extends Asn1Object { - /** - * - */ - private static final long serialVersionUID = 1L; - private List NodeXY = new ArrayList<>(); - - @JsonProperty("NodeXY") - public List getNodes() { - return NodeXY; - } - public void setNodes(List NodeXY) { - this.NodeXY = NodeXY; - } - -} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeXY.java index 1de3ef308..4f03460ec 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeXY.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735NodeXY.java @@ -3,23 +3,24 @@ import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; public class J2735NodeXY extends Asn1Object { - /** - * - */ - private static final long serialVersionUID = 1L; - private J2735NodeOffsetPointXY delta ; - private J2735NodeAttributeSetXY attributes ; - public J2735NodeOffsetPointXY getDelta() { - return delta; - } - public void setDelta(J2735NodeOffsetPointXY delta) { - this.delta = delta; - } - public J2735NodeAttributeSetXY getAttributes() { - return attributes; - } - public void setAttributes(J2735NodeAttributeSetXY attributes) { - this.attributes = attributes; - } - + private static final long serialVersionUID = 1L; + + private J2735NodeOffsetPointXY delta; + private J2735NodeAttributeSet attributes; + + public J2735NodeOffsetPointXY getDelta() { + return delta; + } + + public void setDelta(J2735NodeOffsetPointXY delta) { + this.delta = delta; + } + + public J2735NodeAttributeSet getAttributes() { + return attributes; + } + + public void setAttributes(J2735NodeAttributeSet attributes) { + this.attributes = attributes; + } } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735RoadSignId.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735RoadSignId.java new file mode 100644 index 000000000..c45059b70 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735RoadSignId.java @@ -0,0 +1,42 @@ +package us.dot.its.jpo.ode.plugin.j2735; + +import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; + +public class J2735RoadSignId extends Asn1Object { + private OdePosition3D position; + private String viewAngle; + private J2735MutcdCode mutcdCode; + private String crc; + + public OdePosition3D getPosition() { + return position; + } + + public void setPosition(OdePosition3D position) { + this.position = position; + } + + public String getViewAngle() { + return viewAngle; + } + + public void setViewAngle(String viewAngle) { + this.viewAngle = viewAngle; + } + + public J2735MutcdCode getMutcdCode() { + return mutcdCode; + } + + public void setMutcdCode(J2735MutcdCode mutcdCode) { + this.mutcdCode = mutcdCode; + } + + public String getCrc() { + return crc; + } + + public void setCrc(String crc) { + this.crc = crc; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735SegmentAttributeXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735SegmentAttribute.java similarity index 97% rename from jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735SegmentAttributeXY.java rename to jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735SegmentAttribute.java index dd8b41e92..6c6319f1f 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735SegmentAttributeXY.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735SegmentAttribute.java @@ -1,6 +1,6 @@ package us.dot.its.jpo.ode.plugin.j2735; -public enum J2735SegmentAttributeXY { +public enum J2735SegmentAttribute { reserved , doNotBlock , whiteLine , diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735SegmentAttributeXYList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735SegmentAttributeXYList.java deleted file mode 100644 index eb4cbd207..000000000 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/J2735SegmentAttributeXYList.java +++ /dev/null @@ -1,23 +0,0 @@ -package us.dot.its.jpo.ode.plugin.j2735; - -import java.util.ArrayList; -import java.util.List; - -import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; - -public class J2735SegmentAttributeXYList extends Asn1Object { - /** - * - */ - private static final long serialVersionUID = 1L; - private List segAttrList = new ArrayList<>(); - - public List getSegAttrList() { - return segAttrList; - } - - public void setSegAttrList(List segAttrList) { - this.segAttrList = segAttrList; - } - -} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/DegreesLat.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/DegreesLat.java new file mode 100644 index 000000000..4c66201d8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/DegreesLat.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = DegreesLat.DegreesLatDeserializer.class) +public class DegreesLat extends Asn1Integer { + + public DegreesLat() { + super(-90L, 90L); + } + + @JsonCreator + public DegreesLat(long value) { + this(); + this.value = value; + } + + public static class DegreesLatDeserializer extends IntegerDeserializer { + public DegreesLatDeserializer() { + super(DegreesLat.class); + } + + @Override + protected DegreesLat construct() { + return new DegreesLat(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/DegreesLong.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/DegreesLong.java new file mode 100644 index 000000000..806a15a72 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/DegreesLong.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = DegreesLong.DegreesLongDeserializer.class) +public class DegreesLong extends Asn1Integer { + + public DegreesLong() { + super(-180L, 180L); + } + + @JsonCreator + public DegreesLong(long value) { + this(); + this.value = value; + } + + public static class DegreesLongDeserializer extends IntegerDeserializer { + public DegreesLongDeserializer() { + super(DegreesLong.class); + } + + @Override + protected DegreesLong construct() { + return new DegreesLong(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Elevation.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Elevation.java new file mode 100644 index 000000000..9b27d5a6d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Elevation.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Elevation.ElevationDeserializer.class) +public class Elevation extends Asn1Integer { + + public Elevation() { + super(-32768L, 32767L); + } + + @JsonCreator + public Elevation(long value) { + this(); + this.value = value; + } + + public static class ElevationDeserializer extends IntegerDeserializer { + public ElevationDeserializer() { + super(Elevation.class); + } + + @Override + protected Elevation construct() { + return new Elevation(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LaneDataAttribute_addGrpB.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LaneDataAttribute_addGrpB.java new file mode 100644 index 000000000..139ba44bb --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LaneDataAttribute_addGrpB.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +public class LaneDataAttribute_addGrpB extends Asn1Sequence { + + LaneDataAttribute_addGrpB() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LaneDataAttribute_addGrpBReg_LaneDataAttribute.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LaneDataAttribute_addGrpBReg_LaneDataAttribute.java new file mode 100644 index 000000000..21b1949a6 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LaneDataAttribute_addGrpBReg_LaneDataAttribute.java @@ -0,0 +1,48 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonRootName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_LaneDataAttribute; + +@JsonRootName("Reg_LaneDataAttribute") +public class LaneDataAttribute_addGrpBReg_LaneDataAttribute extends Reg_LaneDataAttribute { + + public LaneDataAttribute_addGrpBReg_LaneDataAttribute() { + super(2, "LaneDataAttribute_addGrpB"); + } + + @Override + @JsonSerialize(using = LaneDataAttribute_addGrpBReg_LaneDataAttributeValueSerializer.class) + public LaneDataAttribute_addGrpB getRegExtValue() { + return super.getRegExtValue(); + } + + @Override + @JsonDeserialize(using = LaneDataAttribute_addGrpBReg_LaneDataAttributeValueDeserializer.class) + public void setRegExtValue(LaneDataAttribute_addGrpB value) { + super.setRegExtValue(value); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LaneDataAttribute_addGrpBReg_LaneDataAttributeValueDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LaneDataAttribute_addGrpBReg_LaneDataAttributeValueDeserializer.java new file mode 100644 index 000000000..190be26c6 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LaneDataAttribute_addGrpBReg_LaneDataAttributeValueDeserializer.java @@ -0,0 +1,34 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import us.dot.its.jpo.ode.plugin.serialization.OpenTypeDeserializer; + +public class LaneDataAttribute_addGrpBReg_LaneDataAttributeValueDeserializer + extends + OpenTypeDeserializer { + + public LaneDataAttribute_addGrpBReg_LaneDataAttributeValueDeserializer() { + super(LaneDataAttribute_addGrpB.class, "LaneDataAttribute_addGrpB"); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LaneDataAttribute_addGrpBReg_LaneDataAttributeValueSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LaneDataAttribute_addGrpBReg_LaneDataAttributeValueSerializer.java new file mode 100644 index 000000000..0c965b5d7 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LaneDataAttribute_addGrpBReg_LaneDataAttributeValueSerializer.java @@ -0,0 +1,34 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import us.dot.its.jpo.ode.plugin.serialization.OpenTypeSerializer; + +public class LaneDataAttribute_addGrpBReg_LaneDataAttributeValueSerializer + extends + OpenTypeSerializer { + + public LaneDataAttribute_addGrpBReg_LaneDataAttributeValueSerializer() { + super(LaneDataAttribute_addGrpB.class, "regExtValue", "LaneDataAttribute_addGrpB"); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LatitudeDMS.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LatitudeDMS.java new file mode 100644 index 000000000..7d22d8885 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LatitudeDMS.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = LatitudeDMS.LatitudeDMSDeserializer.class) +public class LatitudeDMS extends Asn1Integer { + + public LatitudeDMS() { + super(-32400000L, 32400000L); + } + + @JsonCreator + public LatitudeDMS(long value) { + this(); + this.value = value; + } + + public static class LatitudeDMSDeserializer extends IntegerDeserializer { + public LatitudeDMSDeserializer() { + super(LatitudeDMS.class); + } + + @Override + protected LatitudeDMS construct() { + return new LatitudeDMS(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LatitudeDMS2.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LatitudeDMS2.java new file mode 100644 index 000000000..87f3ece8a --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LatitudeDMS2.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class LatitudeDMS2 extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "d") + @JsonProperty("d") + private DegreesLat d; + @Asn1Property(tag = 1, name = "m") + @JsonProperty("m") + private MinutesAngle m; + @Asn1Property(tag = 2, name = "s") + @JsonProperty("s") + private SecondsAngle s; + + LatitudeDMS2() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LongitudeDMS.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LongitudeDMS.java new file mode 100644 index 000000000..446d42a29 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LongitudeDMS.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = LongitudeDMS.LongitudeDMSDeserializer.class) +public class LongitudeDMS extends Asn1Integer { + + public LongitudeDMS() { + super(-64800000L, 64800000L); + } + + @JsonCreator + public LongitudeDMS(long value) { + this(); + this.value = value; + } + + public static class LongitudeDMSDeserializer extends IntegerDeserializer { + public LongitudeDMSDeserializer() { + super(LongitudeDMS.class); + } + + @Override + protected LongitudeDMS construct() { + return new LongitudeDMS(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LongitudeDMS2.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LongitudeDMS2.java new file mode 100644 index 000000000..0910002ee --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/LongitudeDMS2.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class LongitudeDMS2 extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "d") + @JsonProperty("d") + private DegreesLong d; + @Asn1Property(tag = 1, name = "m") + @JsonProperty("m") + private MinutesAngle m; + @Asn1Property(tag = 2, name = "s") + @JsonProperty("s") + private SecondsAngle s; + + LongitudeDMS2() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/MinutesAngle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/MinutesAngle.java new file mode 100644 index 000000000..64185accd --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/MinutesAngle.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = MinutesAngle.MinutesAngleDeserializer.class) +public class MinutesAngle extends Asn1Integer { + + public MinutesAngle() { + super(0L, 59L); + } + + @JsonCreator + public MinutesAngle(long value) { + this(); + this.value = value; + } + + public static class MinutesAngleDeserializer extends IntegerDeserializer { + public MinutesAngleDeserializer() { + super(MinutesAngle.class); + } + + @Override + protected MinutesAngle construct() { + return new MinutesAngle(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/NodeOffsetPointXY_addGrpB.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/NodeOffsetPointXY_addGrpB.java new file mode 100644 index 000000000..6f95a8624 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/NodeOffsetPointXY_addGrpB.java @@ -0,0 +1,48 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; + +@Getter +@Setter +@JsonInclude(Include.NON_NULL) +public class NodeOffsetPointXY_addGrpB extends Asn1Choice { + + @Asn1Property(tag = 0, name = "posA") + @JsonProperty("posA") + private Node_LLdms_48b posA; + @Asn1Property(tag = 1, name = "posB") + @JsonProperty("posB") + private Node_LLdms_80b posB; + + NodeOffsetPointXY_addGrpB() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXY.java new file mode 100644 index 000000000..f0761bbe0 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXY.java @@ -0,0 +1,48 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonRootName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_NodeOffsetPointXY; + +@JsonRootName("Reg_NodeOffsetPointXY") +public class NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXY extends Reg_NodeOffsetPointXY { + + public NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXY() { + super(2, "NodeOffsetPointXY_addGrpB"); + } + + @Override + @JsonSerialize(using = NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXYValueSerializer.class) + public NodeOffsetPointXY_addGrpB getRegExtValue() { + return super.getRegExtValue(); + } + + @Override + @JsonDeserialize(using = NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXYValueDeserializer.class) + public void setRegExtValue(NodeOffsetPointXY_addGrpB value) { + super.setRegExtValue(value); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXYValueDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXYValueDeserializer.java new file mode 100644 index 000000000..ff088be19 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXYValueDeserializer.java @@ -0,0 +1,34 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import us.dot.its.jpo.ode.plugin.serialization.OpenTypeDeserializer; + +public class NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXYValueDeserializer + extends + OpenTypeDeserializer { + + public NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXYValueDeserializer() { + super(NodeOffsetPointXY_addGrpB.class, "NodeOffsetPointXY_addGrpB"); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXYValueSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXYValueSerializer.java new file mode 100644 index 000000000..7badc4375 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXYValueSerializer.java @@ -0,0 +1,34 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import us.dot.its.jpo.ode.plugin.serialization.OpenTypeSerializer; + +public class NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXYValueSerializer + extends + OpenTypeSerializer { + + public NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXYValueSerializer() { + super(NodeOffsetPointXY_addGrpB.class, "regExtValue", "NodeOffsetPointXY_addGrpB"); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Node_LLdms_48b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Node_LLdms_48b.java new file mode 100644 index 000000000..148dc3911 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Node_LLdms_48b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LLdms_48b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private LongitudeDMS lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private LatitudeDMS lat; + + Node_LLdms_48b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Node_LLdms_80b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Node_LLdms_80b.java new file mode 100644 index 000000000..ec3f30e2a --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Node_LLdms_80b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LLdms_80b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private LongitudeDMS2 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private LatitudeDMS2 lat; + + Node_LLdms_80b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Position3D_addGrpB.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Position3D_addGrpB.java new file mode 100644 index 000000000..4d142da73 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Position3D_addGrpB.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Position3D_addGrpB extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "latitude") + @JsonProperty("latitude") + private LatitudeDMS2 latitude; + @Asn1Property(tag = 1, name = "longitude") + @JsonProperty("longitude") + private LongitudeDMS2 longitude; + @Asn1Property(tag = 2, name = "elevation") + @JsonProperty("elevation") + private Elevation elevation; + + Position3D_addGrpB() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Position3D_addGrpBReg_Position3D.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Position3D_addGrpBReg_Position3D.java new file mode 100644 index 000000000..5835c0fa2 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Position3D_addGrpBReg_Position3D.java @@ -0,0 +1,48 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonRootName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_Position3D; + +@JsonRootName("Reg_Position3D") +public class Position3D_addGrpBReg_Position3D extends Reg_Position3D { + + public Position3D_addGrpBReg_Position3D() { + super(2, "Position3D_addGrpB"); + } + + @Override + @JsonSerialize(using = Position3D_addGrpBReg_Position3DValueSerializer.class) + public Position3D_addGrpB getRegExtValue() { + return super.getRegExtValue(); + } + + @Override + @JsonDeserialize(using = Position3D_addGrpBReg_Position3DValueDeserializer.class) + public void setRegExtValue(Position3D_addGrpB value) { + super.setRegExtValue(value); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Position3D_addGrpBReg_Position3DValueDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Position3D_addGrpBReg_Position3DValueDeserializer.java new file mode 100644 index 000000000..07b4b9cbb --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Position3D_addGrpBReg_Position3DValueDeserializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import us.dot.its.jpo.ode.plugin.serialization.OpenTypeDeserializer; + +public class Position3D_addGrpBReg_Position3DValueDeserializer extends OpenTypeDeserializer { + + public Position3D_addGrpBReg_Position3DValueDeserializer() { + super(Position3D_addGrpB.class, "Position3D_addGrpB"); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Position3D_addGrpBReg_Position3DValueSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Position3D_addGrpBReg_Position3DValueSerializer.java new file mode 100644 index 000000000..75716ef60 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/Position3D_addGrpBReg_Position3DValueSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import us.dot.its.jpo.ode.plugin.serialization.OpenTypeSerializer; + +public class Position3D_addGrpBReg_Position3DValueSerializer extends OpenTypeSerializer { + + public Position3D_addGrpBReg_Position3DValueSerializer() { + super(Position3D_addGrpB.class, "regExtValue", "Position3D_addGrpB"); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/SecondsAngle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/SecondsAngle.java new file mode 100644 index 000000000..85e834711 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpb/SecondsAngle.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpb; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = SecondsAngle.SecondsAngleDeserializer.class) +public class SecondsAngle extends Asn1Integer { + + public SecondsAngle() { + super(0L, 5999L); + } + + @JsonCreator + public SecondsAngle(long value) { + this(); + this.value = value; + } + + public static class SecondsAngleDeserializer extends IntegerDeserializer { + public SecondsAngleDeserializer() { + super(SecondsAngle.class); + } + + @Override + protected SecondsAngle construct() { + return new SecondsAngle(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Altitude.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Altitude.java new file mode 100644 index 000000000..373260db5 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Altitude.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpc; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Altitude extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "value") + @JsonProperty("value") + private AltitudeValue value; + @Asn1Property(tag = 1, name = "confidence") + @JsonProperty("confidence") + private AltitudeConfidence confidence; + + Altitude() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/AltitudeConfidence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/AltitudeConfidence.java new file mode 100644 index 000000000..e31e49a18 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/AltitudeConfidence.java @@ -0,0 +1,56 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpc; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = AltitudeConfidenceSerializer.class) +@JsonDeserialize(using = AltitudeConfidenceDeserializer.class) +public enum AltitudeConfidence implements Asn1Enumerated { + ALT_000_01(0, "alt-000-01"), ALT_000_02(1, "alt-000-02"), ALT_000_05(2, "alt-000-05"), ALT_000_10(3, + "alt-000-10"), ALT_000_20(4, "alt-000-20"), ALT_000_50(5, "alt-000-50"), ALT_001_00(6, + "alt-001-00"), ALT_002_00(7, "alt-002-00"), ALT_005_00(8, "alt-005-00"), ALT_010_00(9, + "alt-010-00"), ALT_020_00(10, "alt-020-00"), ALT_050_00(11, "alt-050-00"), ALT_100_00(12, + "alt-100-00"), ALT_200_00(13, + "alt-200-00"), OUTOFRANGE(14, "outOfRange"), UNAVAILABLE(15, "unavailable"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private AltitudeConfidence(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 15; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/AltitudeConfidenceDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/AltitudeConfidenceDeserializer.java new file mode 100644 index 000000000..7c2abec91 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/AltitudeConfidenceDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpc; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class AltitudeConfidenceDeserializer extends EnumeratedDeserializer { + + AltitudeConfidenceDeserializer() { + super(AltitudeConfidence.class); + } + + @Override + protected AltitudeConfidence[] listEnumValues() { + return AltitudeConfidence.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/AltitudeConfidenceSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/AltitudeConfidenceSerializer.java new file mode 100644 index 000000000..3b61bfe57 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/AltitudeConfidenceSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpc; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class AltitudeConfidenceSerializer extends EnumeratedSerializer { + + AltitudeConfidenceSerializer() { + super(AltitudeConfidence.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/AltitudeValue.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/AltitudeValue.java new file mode 100644 index 000000000..a5daab0bc --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/AltitudeValue.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpc; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = AltitudeValue.AltitudeValueDeserializer.class) +public class AltitudeValue extends Asn1Integer { + + public AltitudeValue() { + super(-100000L, 800001L); + } + + @JsonCreator + public AltitudeValue(long value) { + this(); + this.value = value; + } + + public static class AltitudeValueDeserializer extends IntegerDeserializer { + public AltitudeValueDeserializer() { + super(AltitudeValue.class); + } + + @Override + protected AltitudeValue construct() { + return new AltitudeValue(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Position3D_addGrpC.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Position3D_addGrpC.java new file mode 100644 index 000000000..95bef32f1 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Position3D_addGrpC.java @@ -0,0 +1,47 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpc; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Position3D_addGrpC extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "altitude") + @JsonProperty("altitude") + private Altitude altitude; + + Position3D_addGrpC() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Position3D_addGrpCReg_Position3D.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Position3D_addGrpCReg_Position3D.java new file mode 100644 index 000000000..c8f51150b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Position3D_addGrpCReg_Position3D.java @@ -0,0 +1,48 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpc; + +import com.fasterxml.jackson.annotation.JsonRootName; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_Position3D; + +@JsonRootName("Reg_Position3D") +public class Position3D_addGrpCReg_Position3D extends Reg_Position3D { + + public Position3D_addGrpCReg_Position3D() { + super(3, "Position3D_addGrpC"); + } + + @Override + @JsonSerialize(using = Position3D_addGrpCReg_Position3DValueSerializer.class) + public Position3D_addGrpC getRegExtValue() { + return super.getRegExtValue(); + } + + @Override + @JsonDeserialize(using = Position3D_addGrpCReg_Position3DValueDeserializer.class) + public void setRegExtValue(Position3D_addGrpC value) { + super.setRegExtValue(value); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Position3D_addGrpCReg_Position3DValueDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Position3D_addGrpCReg_Position3DValueDeserializer.java new file mode 100644 index 000000000..63b9c925a --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Position3D_addGrpCReg_Position3DValueDeserializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpc; + +import us.dot.its.jpo.ode.plugin.serialization.OpenTypeDeserializer; + +public class Position3D_addGrpCReg_Position3DValueDeserializer extends OpenTypeDeserializer { + + public Position3D_addGrpCReg_Position3DValueDeserializer() { + super(Position3D_addGrpC.class, "Position3D_addGrpC"); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Position3D_addGrpCReg_Position3DValueSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Position3D_addGrpCReg_Position3DValueSerializer.java new file mode 100644 index 000000000..089b586f9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/addgrpc/Position3D_addGrpCReg_Position3DValueSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.addgrpc; + +import us.dot.its.jpo.ode.plugin.serialization.OpenTypeSerializer; + +public class Position3D_addGrpCReg_Position3DValueSerializer extends OpenTypeSerializer { + + public Position3D_addGrpCReg_Position3DValueSerializer() { + super(Position3D_addGrpC.class, "regExtValue", "Position3D_addGrpC"); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/ComputedLaneBuilder.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/ComputedLaneBuilder.java new file mode 100644 index 000000000..d143367f3 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/ComputedLaneBuilder.java @@ -0,0 +1,55 @@ +package us.dot.its.jpo.ode.plugin.j2735.builders; + +import com.fasterxml.jackson.databind.JsonNode; + +import us.dot.its.jpo.ode.plugin.j2735.J2735ComputedLane; + +public class ComputedLaneBuilder { + private ComputedLaneBuilder() { + throw new UnsupportedOperationException(); + } + + public static J2735ComputedLane genericComputedLane(JsonNode computed) { + J2735ComputedLane computedLane = new J2735ComputedLane(); + + JsonNode referenceLaneId = computed.get("referenceLaneId"); + if (referenceLaneId != null) { + computedLane.setReferenceLaneId(referenceLaneId.asInt()); + } + + JsonNode offsetXaxis = computed.get("offsetXaxis"); + if (offsetXaxis != null) { + if (offsetXaxis.get("small") != null) { + computedLane.setOffsetXaxis(offsetXaxis.get("small").asInt()); + } else if (offsetXaxis.get("large") != null) { + computedLane.setOffsetXaxis(offsetXaxis.get("large").asInt()); + } + } + + JsonNode offsetYaxis = computed.get("offsetYaxis"); + if (offsetYaxis != null) { + if (offsetYaxis.get("small") != null) { + computedLane.setOffsetYaxis(offsetYaxis.get("small").asInt()); + } else if (offsetYaxis.get("large") != null) { + computedLane.setOffsetYaxis(offsetYaxis.get("large").asInt()); + } + } + + JsonNode rotateXY = computed.get("rotateXY"); + if (rotateXY != null) { + computedLane.setRotateXY(rotateXY.asInt()); + } + + JsonNode scaleXaxis = computed.get("scaleXaxis"); + if (scaleXaxis != null) { + computedLane.setScaleXaxis(scaleXaxis.asInt()); + } + + JsonNode scaleYaxis = computed.get("scaleYaxis"); + if (scaleYaxis != null) { + computedLane.setScaleYaxis(scaleYaxis.asInt()); + } + + return computedLane; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/ContentBuilder.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/ContentBuilder.java new file mode 100644 index 000000000..1c998705f --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/ContentBuilder.java @@ -0,0 +1,105 @@ +package us.dot.its.jpo.ode.plugin.j2735.builders; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import com.fasterxml.jackson.databind.JsonNode; + +import us.dot.its.jpo.ode.plugin.j2735.timstorage.Content; +import us.dot.its.jpo.ode.plugin.j2735.timstorage.ITIS_CodesAndText; +import us.dot.its.jpo.ode.plugin.j2735.timstorage.Items; +import us.dot.its.jpo.ode.plugin.j2735.timstorage.Item; + +public class ContentBuilder { + private ContentBuilder() { + throw new UnsupportedOperationException(); + } + + private static Items genericItems(JsonNode sequence) { + Items itemsObj = new Items(); + + JsonNode item = sequence.get("item"); + if (item != null) { + Item itemObj = new Item(); + + JsonNode itis = item.get("itis"); + if (itis != null) { + itemObj.setItis(itis.asText()); + } + + JsonNode text = item.get("text"); + if (text != null) { + itemObj.setText(text.asText()); + } + + itemsObj.setItem(itemObj); + } + + return itemsObj; + } + + private static Items[] genericSequence(JsonNode contentType) { + Items[] sequenceObj = null; + + JsonNode sequence = contentType.get("SEQUENCE"); + if (sequence != null) { + List iList = new ArrayList<>(); + + if (sequence.isArray()) { + Iterator elements = sequence.elements(); + + while (elements.hasNext()) { + iList.add(genericItems(elements.next())); + } + } else { + iList.add(genericItems(sequence)); + } + + sequenceObj = iList.toArray(new Items[0]); + } + + return sequenceObj; + } + + public static Content genericContent(JsonNode content) { + Content contentObj = new Content(); + + JsonNode advisory = content.get("advisory"); + if (advisory != null) { + ITIS_CodesAndText adivsoryObj = new ITIS_CodesAndText(); + adivsoryObj.setSEQUENCE(genericSequence(advisory)); + contentObj.setAdvisory(adivsoryObj); + } + + JsonNode workZone = content.get("workZone"); + if (workZone != null) { + ITIS_CodesAndText workZoneObj = new ITIS_CodesAndText(); + workZoneObj.setSEQUENCE(genericSequence(workZone)); + contentObj.setWorkZone(workZoneObj); + } + + JsonNode genericSign = content.get("genericSign"); + if (genericSign != null) { + ITIS_CodesAndText genericSignObj = new ITIS_CodesAndText(); + genericSignObj.setSEQUENCE(genericSequence(genericSign)); + contentObj.setGenericSign(genericSignObj); + } + + JsonNode speedLimit = content.get("speedLimit"); + if (speedLimit != null) { + ITIS_CodesAndText speedLimitObj = new ITIS_CodesAndText(); + speedLimitObj.setSEQUENCE(genericSequence(speedLimit)); + contentObj.setSpeedLimit(speedLimitObj); + } + + JsonNode exitService = content.get("exitService"); + if (exitService != null) { + ITIS_CodesAndText exitServiceObj = new ITIS_CodesAndText(); + exitServiceObj.setSEQUENCE(genericSequence(exitService)); + contentObj.setExitService(exitServiceObj); + } + + return contentObj; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/GenericLaneBuilder.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/GenericLaneBuilder.java index 30d6eaf59..d7dd7ec10 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/GenericLaneBuilder.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/GenericLaneBuilder.java @@ -106,7 +106,7 @@ public static J2735GenericLane genericGenericLane(JsonNode laneSetNode) { JsonNode nodeList = laneSetNode.get("nodeList"); if (nodeList != null) { - genericLane.setNodeList(NodeListBuilder.genericNodeList(nodeList)); + genericLane.setNodeList(NodeListXYBuilder.genericNodeListXY(nodeList)); } JsonNode connectsTo = laneSetNode.get("connectsTo"); diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/LaneDataAttributeBuilder.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/LaneDataAttributeBuilder.java new file mode 100644 index 000000000..072f66bf8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/LaneDataAttributeBuilder.java @@ -0,0 +1,47 @@ +package us.dot.its.jpo.ode.plugin.j2735.builders; + +import com.fasterxml.jackson.databind.JsonNode; + +import us.dot.its.jpo.ode.plugin.j2735.J2735LaneDataAttribute; + +public class LaneDataAttributeBuilder { + private LaneDataAttributeBuilder() { + throw new UnsupportedOperationException(); + } + + public static J2735LaneDataAttribute genericLaneDataAttribute(JsonNode data) { + J2735LaneDataAttribute laneDataAttribute = new J2735LaneDataAttribute(); + + JsonNode pathEndPointAngle = data.get("pathEndPointAngle"); + if (pathEndPointAngle != null) { + laneDataAttribute.setPathEndPointAngle(pathEndPointAngle.asInt()); + } + + JsonNode laneCrownPointCenter = data.get("laneCrownPointCenter"); + if (laneCrownPointCenter != null) { + laneDataAttribute.setLaneCrownPointCenter(laneCrownPointCenter.asInt()); + } + + JsonNode laneCrownPointLeft = data.get("laneCrownPointLeft"); + if (laneCrownPointLeft != null) { + laneDataAttribute.setLaneCrownPointLeft(laneCrownPointLeft.asInt()); + } + + JsonNode laneCrownPointRight = data.get("laneCrownPointRight"); + if (laneCrownPointRight != null) { + laneDataAttribute.setLaneCrownPointRight(laneCrownPointRight.asInt()); + } + + JsonNode laneAngle = data.get("laneAngle"); + if (laneAngle != null) { + laneDataAttribute.setLaneAngle(laneAngle.asInt()); + } + + JsonNode speedLimits = data.get("speedLimits"); + if (speedLimits != null) { + laneDataAttribute.setSpeedLimits(SpeedLimitListBuilder.genericSpeedLimitList(speedLimits)); + } + + return laneDataAttribute; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/NodeBuilder.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/NodeBuilder.java deleted file mode 100644 index 2516205a4..000000000 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/NodeBuilder.java +++ /dev/null @@ -1,89 +0,0 @@ -package us.dot.its.jpo.ode.plugin.j2735.builders; - -import java.math.BigDecimal; - -import com.fasterxml.jackson.databind.JsonNode; - -import us.dot.its.jpo.ode.plugin.j2735.J2735NodeLLmD64b; -import us.dot.its.jpo.ode.plugin.j2735.J2735NodeOffsetPointXY; -import us.dot.its.jpo.ode.plugin.j2735.J2735NodeXY; -import us.dot.its.jpo.ode.plugin.j2735.J2735Node_XY; -import us.dot.its.jpo.ode.plugin.j2735.J2735NodeAttributeSetXY; - - -public class NodeBuilder { - - public static J2735NodeXY genericNode(JsonNode NodeJson) { - J2735NodeXY nodeXY = new J2735NodeXY(); - if (NodeJson.get("delta") != null) { - J2735NodeOffsetPointXY pointoffsetXY = new J2735NodeOffsetPointXY(); - JsonNode NodeOffsetNode = NodeJson.get("delta"); - if(NodeOffsetNode.get("node-XY1") != null) - { - BigDecimal x =BigDecimal.valueOf( NodeOffsetNode.get("node-XY1").get("x").asInt()); - BigDecimal y =BigDecimal.valueOf( NodeOffsetNode.get("node-XY1").get("y").asInt()); - J2735Node_XY point = new J2735Node_XY(x,y); - pointoffsetXY.setNodeXY1(point); - } - if(NodeOffsetNode.get("node-XY2") != null) - { - BigDecimal x =BigDecimal.valueOf( NodeOffsetNode.get("node-XY2").get("x").asInt()); - BigDecimal y =BigDecimal.valueOf( NodeOffsetNode.get("node-XY2").get("y").asInt()); - J2735Node_XY point = new J2735Node_XY(x,y); - pointoffsetXY.setNodeXY2(point); - } - if(NodeOffsetNode.get("node-XY3") != null) - { - BigDecimal x =BigDecimal.valueOf( NodeOffsetNode.get("node-XY3").get("x").asInt()); - BigDecimal y =BigDecimal.valueOf( NodeOffsetNode.get("node-XY3").get("y").asInt()); - J2735Node_XY point = new J2735Node_XY(x,y); - pointoffsetXY.setNodeXY3(point); - } - if(NodeOffsetNode.get("node-XY4") != null) - { - BigDecimal x =BigDecimal.valueOf( NodeOffsetNode.get("node-XY4").get("x").asInt()); - BigDecimal y =BigDecimal.valueOf( NodeOffsetNode.get("node-XY4").get("y").asInt()); - J2735Node_XY point = new J2735Node_XY(x,y); - pointoffsetXY.setNodeXY4(point); - } - if(NodeOffsetNode.get("node-XY5") != null) - { - BigDecimal x =BigDecimal.valueOf( NodeOffsetNode.get("node-XY5").get("x").asInt()); - BigDecimal y =BigDecimal.valueOf( NodeOffsetNode.get("node-XY5").get("y").asInt()); - J2735Node_XY point = new J2735Node_XY(x,y); - pointoffsetXY.setNodeXY5(point); - } - if(NodeOffsetNode.get("node-XY6") != null) - { - BigDecimal x =BigDecimal.valueOf( NodeOffsetNode.get("node-XY6").get("x").asInt()); - BigDecimal y =BigDecimal.valueOf( NodeOffsetNode.get("node-XY6").get("y").asInt()); - J2735Node_XY point = new J2735Node_XY(x,y); - pointoffsetXY.setNodeXY6(point); - } - if(NodeOffsetNode.get("node-LatLon") != null) - { - BigDecimal lon =BigDecimal.valueOf( NodeOffsetNode.get("node-LatLon").get("lon").asInt()); - BigDecimal lat =BigDecimal.valueOf( NodeOffsetNode.get("node-LatLon").get("lat").asInt()); - J2735NodeLLmD64b point = new J2735NodeLLmD64b(lon,lat); - pointoffsetXY.setNodeLatLon(point); - } - nodeXY.setDelta(pointoffsetXY); - } - - if (NodeJson.get("attributes") != null) { - J2735NodeAttributeSetXY attributeSetXY = new J2735NodeAttributeSetXY(); - JsonNode attributes = NodeJson.get("attributes"); - - // TODO: finish attributes with all of the lists - - if(attributes.get("dElevation") != null) - { - attributeSetXY.setdElevation(attributes.get("dElevation").asInt()); - } - - nodeXY.setAttributes(attributeSetXY); - } - return nodeXY; - } - -} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/NodeListBuilder.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/NodeListBuilder.java deleted file mode 100644 index 264aa6f89..000000000 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/NodeListBuilder.java +++ /dev/null @@ -1,40 +0,0 @@ -package us.dot.its.jpo.ode.plugin.j2735.builders; - -import java.util.Iterator; - -import com.fasterxml.jackson.databind.JsonNode; - -import us.dot.its.jpo.ode.plugin.j2735.J2735NodeListXY; -import us.dot.its.jpo.ode.plugin.j2735.J2735NodeSetXY; - -public class NodeListBuilder { - private NodeListBuilder() { - throw new UnsupportedOperationException(); - } - - public static J2735NodeListXY genericNodeList(JsonNode nodeListNode) { - J2735NodeListXY nodeList = new J2735NodeListXY(); - - if (nodeListNode.get("nodes") != null) { - J2735NodeSetXY nodeSet = new J2735NodeSetXY(); - - JsonNode nodeXY = nodeListNode.get("nodes").get("NodeXY"); - if (nodeXY != null && nodeXY.isArray()) { - Iterator elements = nodeXY.elements(); - - while (elements.hasNext()) { - nodeSet.getNodes().add(NodeBuilder.genericNode(elements.next())); - } - } else if (nodeXY != null) { - nodeSet.getNodes().add(NodeBuilder.genericNode(nodeXY)); - } - - nodeList.setNodes(nodeSet); - } else if (nodeListNode.get("computed") != null) { - // TODO - } - - return nodeList; - } - -} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/NodeListXYBuilder.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/NodeListXYBuilder.java new file mode 100644 index 000000000..b6a320bff --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/NodeListXYBuilder.java @@ -0,0 +1,48 @@ +package us.dot.its.jpo.ode.plugin.j2735.builders; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import com.fasterxml.jackson.databind.JsonNode; + +import us.dot.its.jpo.ode.plugin.j2735.J2735ComputedLane; +import us.dot.its.jpo.ode.plugin.j2735.J2735NodeListXY; +import us.dot.its.jpo.ode.plugin.j2735.J2735NodeXY; + +public class NodeListXYBuilder { + private NodeListXYBuilder() { + throw new UnsupportedOperationException(); + } + + public static J2735NodeListXY genericNodeListXY(JsonNode nodeListNode) { + J2735NodeListXY nodeList = new J2735NodeListXY(); + + if (nodeListNode.get("nodes") != null) { + JsonNode nodeXY = nodeListNode.get("nodes").get("NodeXY"); + if (nodeXY != null) { + List nxyList = new ArrayList<>(); + + if (nodeXY.isArray()) { + Iterator elements = nodeXY.elements(); + + while (elements.hasNext()) { + nxyList.add(NodeXYBuilder.genericNodeXY(elements.next())); + } + } else { + nxyList.add(NodeXYBuilder.genericNodeXY(nodeXY)); + } + + nodeList.setNodes(nxyList.toArray(new J2735NodeXY[0])); + } + } else if (nodeListNode.get("computed") != null) { + JsonNode computedLane = nodeListNode.get("computed"); + if (computedLane != null) { + nodeList.setComputed(ComputedLaneBuilder.genericComputedLane(computedLane)); + } + } + + return nodeList; + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/NodeXYBuilder.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/NodeXYBuilder.java new file mode 100644 index 000000000..a17da3c71 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/NodeXYBuilder.java @@ -0,0 +1,187 @@ +package us.dot.its.jpo.ode.plugin.j2735.builders; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import com.fasterxml.jackson.databind.JsonNode; + +import us.dot.its.jpo.ode.plugin.j2735.J2735NodeLLmD64b; +import us.dot.its.jpo.ode.plugin.j2735.J2735NodeOffsetPointXY; +import us.dot.its.jpo.ode.plugin.j2735.J2735NodeXY; +import us.dot.its.jpo.ode.plugin.j2735.J2735Node_XY; +import us.dot.its.jpo.ode.plugin.j2735.J2735SegmentAttribute; +import us.dot.its.jpo.ode.plugin.j2735.J2735LaneDataAttribute; +import us.dot.its.jpo.ode.plugin.j2735.J2735NodeAttribute; +import us.dot.its.jpo.ode.plugin.j2735.J2735NodeAttributeSet; + + +public class NodeXYBuilder { + private NodeXYBuilder() { + throw new UnsupportedOperationException(); + } + + public static J2735NodeXY genericNodeXY(JsonNode NodeJson) { + J2735NodeXY nodeXY = new J2735NodeXY(); + if (NodeJson.get("delta") != null) { + J2735NodeOffsetPointXY pointoffsetXY = new J2735NodeOffsetPointXY(); + JsonNode NodeOffsetNode = NodeJson.get("delta"); + if(NodeOffsetNode.get("node-XY1") != null) + { + BigDecimal x =BigDecimal.valueOf( NodeOffsetNode.get("node-XY1").get("x").asInt()); + BigDecimal y =BigDecimal.valueOf( NodeOffsetNode.get("node-XY1").get("y").asInt()); + J2735Node_XY point = new J2735Node_XY(x,y); + pointoffsetXY.setNodeXY1(point); + } + if(NodeOffsetNode.get("node-XY2") != null) + { + BigDecimal x =BigDecimal.valueOf( NodeOffsetNode.get("node-XY2").get("x").asInt()); + BigDecimal y =BigDecimal.valueOf( NodeOffsetNode.get("node-XY2").get("y").asInt()); + J2735Node_XY point = new J2735Node_XY(x,y); + pointoffsetXY.setNodeXY2(point); + } + if(NodeOffsetNode.get("node-XY3") != null) + { + BigDecimal x =BigDecimal.valueOf( NodeOffsetNode.get("node-XY3").get("x").asInt()); + BigDecimal y =BigDecimal.valueOf( NodeOffsetNode.get("node-XY3").get("y").asInt()); + J2735Node_XY point = new J2735Node_XY(x,y); + pointoffsetXY.setNodeXY3(point); + } + if(NodeOffsetNode.get("node-XY4") != null) + { + BigDecimal x =BigDecimal.valueOf( NodeOffsetNode.get("node-XY4").get("x").asInt()); + BigDecimal y =BigDecimal.valueOf( NodeOffsetNode.get("node-XY4").get("y").asInt()); + J2735Node_XY point = new J2735Node_XY(x,y); + pointoffsetXY.setNodeXY4(point); + } + if(NodeOffsetNode.get("node-XY5") != null) + { + BigDecimal x =BigDecimal.valueOf( NodeOffsetNode.get("node-XY5").get("x").asInt()); + BigDecimal y =BigDecimal.valueOf( NodeOffsetNode.get("node-XY5").get("y").asInt()); + J2735Node_XY point = new J2735Node_XY(x,y); + pointoffsetXY.setNodeXY5(point); + } + if(NodeOffsetNode.get("node-XY6") != null) + { + BigDecimal x =BigDecimal.valueOf( NodeOffsetNode.get("node-XY6").get("x").asInt()); + BigDecimal y =BigDecimal.valueOf( NodeOffsetNode.get("node-XY6").get("y").asInt()); + J2735Node_XY point = new J2735Node_XY(x,y); + pointoffsetXY.setNodeXY6(point); + } + if(NodeOffsetNode.get("node-LatLon") != null) + { + BigDecimal lon =BigDecimal.valueOf( NodeOffsetNode.get("node-LatLon").get("lon").asInt()); + BigDecimal lat =BigDecimal.valueOf( NodeOffsetNode.get("node-LatLon").get("lat").asInt()); + J2735NodeLLmD64b point = new J2735NodeLLmD64b(lon,lat); + pointoffsetXY.setNodeLatLon(point); + } + nodeXY.setDelta(pointoffsetXY); + } + + if (NodeJson.get("attributes") != null) { + J2735NodeAttributeSet attributeSet = new J2735NodeAttributeSet(); + JsonNode attributes = NodeJson.get("attributes"); + + JsonNode localNode = attributes.get("localNode"); + if (localNode != null) { + JsonNode nodeAttributeXY = localNode.get("NodeAttributeXY"); + if (nodeAttributeXY != null) { + List naList = new ArrayList<>(); + + if (nodeAttributeXY.isArray()) { + Iterator elements = nodeAttributeXY.elements(); + + while (elements.hasNext()) { + String nodeAttributeValue = elements.next().fields().next().getKey(); + naList.add(J2735NodeAttribute.valueOf(nodeAttributeValue)); + } + } else { + String nodeAttributeValue = nodeAttributeXY.fields().next().getKey(); + naList.add(J2735NodeAttribute.valueOf(nodeAttributeValue)); + } + + attributeSet.setLocalNode(naList.toArray(new J2735NodeAttribute[0])); + } + } + + JsonNode disabled = attributes.get("disabled"); + if (disabled != null) { + JsonNode segmentAttributeXY = disabled.get("SegmentAttributeXY"); + if (segmentAttributeXY != null) { + List saList = new ArrayList<>(); + + if (segmentAttributeXY.isArray()) { + Iterator elements = segmentAttributeXY.elements(); + + while (elements.hasNext()) { + String segmentAttributeValue = elements.next().fields().next().getKey(); + saList.add(J2735SegmentAttribute.valueOf(segmentAttributeValue)); + } + } else { + String segmentAttributeValue = segmentAttributeXY.fields().next().getKey(); + saList.add(J2735SegmentAttribute.valueOf(segmentAttributeValue)); + } + + attributeSet.setDisabled(saList.toArray(new J2735SegmentAttribute[0])); + } + } + + JsonNode enabled = attributes.get("enabled"); + if (enabled != null) { + JsonNode segmentAttributeXY = enabled.get("SegmentAttributeXY"); + if (segmentAttributeXY != null) { + List saList = new ArrayList<>(); + + if (segmentAttributeXY.isArray()) { + Iterator elements = segmentAttributeXY.elements(); + + while (elements.hasNext()) { + String segmentAttributeValue = elements.next().fields().next().getKey(); + saList.add(J2735SegmentAttribute.valueOf(segmentAttributeValue)); + } + } else { + String segmentAttributeValue = segmentAttributeXY.fields().next().getKey(); + saList.add(J2735SegmentAttribute.valueOf(segmentAttributeValue)); + } + + attributeSet.setEnabled(saList.toArray(new J2735SegmentAttribute[0])); + } + } + + JsonNode data = attributes.get("data"); + if (data != null) { + JsonNode laneDataAttribute = data.get("LaneDataAttribute"); + if (laneDataAttribute != null) { + List ldaList = new ArrayList<>(); + + if (laneDataAttribute.isArray()) { + Iterator elements = laneDataAttribute.elements(); + + while (elements.hasNext()) { + ldaList.add(LaneDataAttributeBuilder.genericLaneDataAttribute(elements.next())); + } + } else { + ldaList.add(LaneDataAttributeBuilder.genericLaneDataAttribute(laneDataAttribute)); + } + + attributeSet.setData(ldaList.toArray(new J2735LaneDataAttribute[0])); + } + } + + if(attributes.get("dWidth") != null) + { + attributeSet.setdWidth(attributes.get("dWidth").asInt()); + } + + if(attributes.get("dElevation") != null) + { + attributeSet.setdElevation(attributes.get("dElevation").asInt()); + } + + nodeXY.setAttributes(attributeSet); + } + return nodeXY; + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/Position3DBuilder.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/Position3DBuilder.java index 034bef985..7a9b2146b 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/Position3DBuilder.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/Position3DBuilder.java @@ -36,7 +36,10 @@ private Position3DBuilder() { public static DsrcPosition3D dsrcPosition3D(JsonNode pos) { Long latitude = pos.get("lat").asLong(); Long longitude = pos.get("long").asLong(); - Long elevation = pos.get(ELEVATION).asLong(); + Long elevation = null; + if (pos.get(ELEVATION) != null) { + elevation = pos.get(ELEVATION).asLong(); + } return new DsrcPosition3D(latitude, longitude, elevation); diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/RoadSignIdBuilder.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/RoadSignIdBuilder.java new file mode 100644 index 000000000..0ec65cca6 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/RoadSignIdBuilder.java @@ -0,0 +1,41 @@ +package us.dot.its.jpo.ode.plugin.j2735.builders; + +import com.fasterxml.jackson.databind.JsonNode; + +import us.dot.its.jpo.ode.plugin.j2735.DsrcPosition3D; +import us.dot.its.jpo.ode.plugin.j2735.J2735MutcdCode; +import us.dot.its.jpo.ode.plugin.j2735.J2735RoadSignId; + +public class RoadSignIdBuilder { + private RoadSignIdBuilder() { + throw new UnsupportedOperationException(); + } + + public static J2735RoadSignId genericRoadSignId(JsonNode roadSignId) { + J2735RoadSignId genericRoadSignId = new J2735RoadSignId(); + + JsonNode position = roadSignId.get("position"); + if (position != null) { + DsrcPosition3D dsrcPosition3d = Position3DBuilder.dsrcPosition3D(position); + genericRoadSignId.setPosition(Position3DBuilder.odePosition3D(dsrcPosition3d)); + } + + JsonNode viewAngle = roadSignId.get("viewAngle"); + if (viewAngle != null) { + genericRoadSignId.setViewAngle(viewAngle.asText()); + } + + JsonNode mutcdCode = roadSignId.get("mutcdCode"); + if (mutcdCode != null) { + String mutcdCodeValue = mutcdCode.fields().next().getKey(); + genericRoadSignId.setMutcdCode(J2735MutcdCode.valueOf(mutcdCodeValue)); + } + + JsonNode crc = roadSignId.get("crc"); + if (crc != null) { + genericRoadSignId.setCrc(crc.asText()); + } + + return genericRoadSignId; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Angle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Angle.java new file mode 100644 index 000000000..86182260b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Angle.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Angle.AngleDeserializer.class) +public class Angle extends Asn1Integer { + + public Angle() { + super(0L, 28800L); + } + + @JsonCreator + public Angle(long value) { + this(); + this.value = value; + } + + public static class AngleDeserializer extends IntegerDeserializer { + public AngleDeserializer() { + super(Angle.class); + } + + @Override + protected Angle construct() { + return new Angle(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ComputedLane.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ComputedLane.java new file mode 100644 index 000000000..b93094c46 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ComputedLane.java @@ -0,0 +1,107 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_ComputedLane; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class ComputedLane extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "referenceLaneId") + @JsonProperty("referenceLaneId") + private LaneID referenceLaneId; + @Asn1Property(tag = 1, name = "offsetXaxis") + @JsonProperty("offsetXaxis") + private OffsetXaxisChoice offsetXaxis; + @Asn1Property(tag = 2, name = "offsetYaxis") + @JsonProperty("offsetYaxis") + private OffsetYaxisChoice offsetYaxis; + @Asn1Property(tag = 3, name = "rotateXY", optional = true) + @JsonProperty("rotateXY") + private Angle rotateXY; + @Asn1Property(tag = 4, name = "scaleXaxis", optional = true) + @JsonProperty("scaleXaxis") + private Scale_B12 scaleXaxis; + @Asn1Property(tag = 5, name = "scaleYaxis", optional = true) + @JsonProperty("scaleYaxis") + private Scale_B12 scaleYaxis; + @Asn1Property(tag = 6, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class OffsetXaxisChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "small") + @JsonProperty("small") + private DrivenLineOffsetSm small; + @Asn1Property(tag = 1, name = "large") + @JsonProperty("large") + private DrivenLineOffsetLg large; + + OffsetXaxisChoice() { + super(false); + } + } + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class OffsetYaxisChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "small") + @JsonProperty("small") + private DrivenLineOffsetSm small; + @Asn1Property(tag = 1, name = "large") + @JsonProperty("large") + private DrivenLineOffsetLg large; + + OffsetYaxisChoice() { + super(false); + } + } + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_ComputedLane.class, 1L, 4L); + } + } + + ComputedLane() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DYear.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DYear.java new file mode 100644 index 000000000..bf4ce23f5 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DYear.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = DYear.DYearDeserializer.class) +public class DYear extends Asn1Integer { + + public DYear() { + super(0L, 4095L); + } + + @JsonCreator + public DYear(long value) { + this(); + this.value = value; + } + + public static class DYearDeserializer extends IntegerDeserializer { + public DYearDeserializer() { + super(DYear.class); + } + + @Override + protected DYear construct() { + return new DYear(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DeltaAngle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DeltaAngle.java new file mode 100644 index 000000000..e28d2e173 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DeltaAngle.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = DeltaAngle.DeltaAngleDeserializer.class) +public class DeltaAngle extends Asn1Integer { + + public DeltaAngle() { + super(-150L, 150L); + } + + @JsonCreator + public DeltaAngle(long value) { + this(); + this.value = value; + } + + public static class DeltaAngleDeserializer extends IntegerDeserializer { + public DeltaAngleDeserializer() { + super(DeltaAngle.class); + } + + @Override + protected DeltaAngle construct() { + return new DeltaAngle(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DescriptiveName.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DescriptiveName.java new file mode 100644 index 000000000..a292428b2 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DescriptiveName.java @@ -0,0 +1,39 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import us.dot.its.jpo.ode.plugin.types.IA5String; + +public class DescriptiveName extends IA5String { + + public DescriptiveName() { + super(1, 63); + } + + @JsonCreator + public DescriptiveName(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DrivenLineOffsetLg.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DrivenLineOffsetLg.java new file mode 100644 index 000000000..046a5b74b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DrivenLineOffsetLg.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = DrivenLineOffsetLg.DrivenLineOffsetLgDeserializer.class) +public class DrivenLineOffsetLg extends Asn1Integer { + + public DrivenLineOffsetLg() { + super(-32767L, 32767L); + } + + @JsonCreator + public DrivenLineOffsetLg(long value) { + this(); + this.value = value; + } + + public static class DrivenLineOffsetLgDeserializer extends IntegerDeserializer { + public DrivenLineOffsetLgDeserializer() { + super(DrivenLineOffsetLg.class); + } + + @Override + protected DrivenLineOffsetLg construct() { + return new DrivenLineOffsetLg(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DrivenLineOffsetSm.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DrivenLineOffsetSm.java new file mode 100644 index 000000000..af6fd6530 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DrivenLineOffsetSm.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = DrivenLineOffsetSm.DrivenLineOffsetSmDeserializer.class) +public class DrivenLineOffsetSm extends Asn1Integer { + + public DrivenLineOffsetSm() { + super(-2047L, 2047L); + } + + @JsonCreator + public DrivenLineOffsetSm(long value) { + this(); + this.value = value; + } + + public static class DrivenLineOffsetSmDeserializer extends IntegerDeserializer { + public DrivenLineOffsetSmDeserializer() { + super(DrivenLineOffsetSm.class); + } + + @Override + protected DrivenLineOffsetSm construct() { + return new DrivenLineOffsetSm(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Elevation.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Elevation.java new file mode 100644 index 000000000..8cc6ad4d3 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Elevation.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Elevation.ElevationDeserializer.class) +public class Elevation extends Asn1Integer { + + public Elevation() { + super(-4096L, 61439L); + } + + @JsonCreator + public Elevation(long value) { + this(); + this.value = value; + } + + public static class ElevationDeserializer extends IntegerDeserializer { + public ElevationDeserializer() { + super(Elevation.class); + } + + @Override + protected Elevation construct() { + return new Elevation(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Extent.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Extent.java new file mode 100644 index 000000000..4cac2a61e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Extent.java @@ -0,0 +1,61 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = ExtentSerializer.class) +@JsonDeserialize(using = ExtentDeserializer.class) +public enum Extent implements Asn1Enumerated { + USEINSTANTLYONLY(0, "useInstantlyOnly"), USEFOR3METERS(1, "useFor3meters"), USEFOR10METERS(2, + "useFor10meters"), USEFOR50METERS(3, "useFor50meters"), USEFOR100METERS(4, + "useFor100meters"), USEFOR500METERS(5, "useFor500meters"), USEFOR1000METERS(6, + "useFor1000meters"), USEFOR5000METERS(7, "useFor5000meters"), USEFOR10000METERS(8, + "useFor10000meters"), USEFOR50000METERS(9, "useFor50000meters"), USEFOR100000METERS( + 10, "useFor100000meters"), USEFOR500000METERS(11, + "useFor500000meters"), USEFOR1000000METERS(12, + "useFor1000000meters"), USEFOR5000000METERS(13, + "useFor5000000meters"), USEFOR10000000METERS(14, + "useFor10000000meters"), FOREVER(15, + "forever"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private Extent(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 15; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ExtentDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ExtentDeserializer.java new file mode 100644 index 000000000..e976def33 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ExtentDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class ExtentDeserializer extends EnumeratedDeserializer { + + ExtentDeserializer() { + super(Extent.class); + } + + @Override + protected Extent[] listEnumValues() { + return Extent.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ExtentSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ExtentSerializer.java new file mode 100644 index 000000000..b527d6de2 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ExtentSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class ExtentSerializer extends EnumeratedSerializer { + + ExtentSerializer() { + super(Extent.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/FurtherInfoID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/FurtherInfoID.java new file mode 100644 index 000000000..8e77ca552 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/FurtherInfoID.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import us.dot.its.jpo.ode.plugin.types.Asn1OctetString; + +public class FurtherInfoID extends Asn1OctetString { + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return value; + } + + public FurtherInfoID() { + super(2, 2); + } + + @JsonCreator + public FurtherInfoID(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSlice.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSlice.java new file mode 100644 index 000000000..11c739dc5 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSlice.java @@ -0,0 +1,168 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.types.Asn1Bitstring; + +@JsonDeserialize(using = HeadingSliceDeserializer.class) +public class HeadingSlice extends Asn1Bitstring { + + public boolean isFrom000_0to022_5degrees() { + return get(0); + } + + public void setFrom000_0to022_5degrees(boolean from000_0to022_5degrees) { + set(0, from000_0to022_5degrees); + } + + public boolean isFrom022_5to045_0degrees() { + return get(1); + } + + public void setFrom022_5to045_0degrees(boolean from022_5to045_0degrees) { + set(1, from022_5to045_0degrees); + } + + public boolean isFrom045_0to067_5degrees() { + return get(2); + } + + public void setFrom045_0to067_5degrees(boolean from045_0to067_5degrees) { + set(2, from045_0to067_5degrees); + } + + public boolean isFrom067_5to090_0degrees() { + return get(3); + } + + public void setFrom067_5to090_0degrees(boolean from067_5to090_0degrees) { + set(3, from067_5to090_0degrees); + } + + public boolean isFrom090_0to112_5degrees() { + return get(4); + } + + public void setFrom090_0to112_5degrees(boolean from090_0to112_5degrees) { + set(4, from090_0to112_5degrees); + } + + public boolean isFrom112_5to135_0degrees() { + return get(5); + } + + public void setFrom112_5to135_0degrees(boolean from112_5to135_0degrees) { + set(5, from112_5to135_0degrees); + } + + public boolean isFrom135_0to157_5degrees() { + return get(6); + } + + public void setFrom135_0to157_5degrees(boolean from135_0to157_5degrees) { + set(6, from135_0to157_5degrees); + } + + public boolean isFrom157_5to180_0degrees() { + return get(7); + } + + public void setFrom157_5to180_0degrees(boolean from157_5to180_0degrees) { + set(7, from157_5to180_0degrees); + } + + public boolean isFrom180_0to202_5degrees() { + return get(8); + } + + public void setFrom180_0to202_5degrees(boolean from180_0to202_5degrees) { + set(8, from180_0to202_5degrees); + } + + public boolean isFrom202_5to225_0degrees() { + return get(9); + } + + public void setFrom202_5to225_0degrees(boolean from202_5to225_0degrees) { + set(9, from202_5to225_0degrees); + } + + public boolean isFrom225_0to247_5degrees() { + return get(10); + } + + public void setFrom225_0to247_5degrees(boolean from225_0to247_5degrees) { + set(10, from225_0to247_5degrees); + } + + public boolean isFrom247_5to270_0degrees() { + return get(11); + } + + public void setFrom247_5to270_0degrees(boolean from247_5to270_0degrees) { + set(11, from247_5to270_0degrees); + } + + public boolean isFrom270_0to292_5degrees() { + return get(12); + } + + public void setFrom270_0to292_5degrees(boolean from270_0to292_5degrees) { + set(12, from270_0to292_5degrees); + } + + public boolean isFrom292_5to315_0degrees() { + return get(13); + } + + public void setFrom292_5to315_0degrees(boolean from292_5to315_0degrees) { + set(13, from292_5to315_0degrees); + } + + public boolean isFrom315_0to337_5degrees() { + return get(14); + } + + public void setFrom315_0to337_5degrees(boolean from315_0to337_5degrees) { + set(14, from315_0to337_5degrees); + } + + public boolean isFrom337_5to360_0degrees() { + return get(15); + } + + public void setFrom337_5to360_0degrees(boolean from337_5to360_0degrees) { + set(15, from337_5to360_0degrees); + } + + public HeadingSlice() { + super(16, false, + new String[]{"from000-0to022-5degrees", "from022-5to045-0degrees", "from045-0to067-5degrees", + "from067-5to090-0degrees", "from090-0to112-5degrees", "from112-5to135-0degrees", + "from135-0to157-5degrees", "from157-5to180-0degrees", "from180-0to202-5degrees", + "from202-5to225-0degrees", "from225-0to247-5degrees", "from247-5to270-0degrees", + "from270-0to292-5degrees", "from292-5to315-0degrees", "from315-0to337-5degrees", + "from337-5to360-0degrees"}); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSliceDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSliceDeserializer.java new file mode 100644 index 000000000..9cff89dcb --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSliceDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.BitStringDeserializer; + +public class HeadingSliceDeserializer extends BitStringDeserializer { + + HeadingSliceDeserializer() { + super(HeadingSlice.class); + } + + @Override + protected HeadingSlice construct() { + return new HeadingSlice(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneDataAttribute.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneDataAttribute.java new file mode 100644 index 000000000..338070217 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneDataAttribute.java @@ -0,0 +1,76 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_LaneDataAttribute; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@Getter +@Setter +@JsonInclude(Include.NON_NULL) +public class LaneDataAttribute extends Asn1Choice { + + @Asn1Property(tag = 0, name = "pathEndPointAngle") + @JsonProperty("pathEndPointAngle") + private DeltaAngle pathEndPointAngle; + @Asn1Property(tag = 1, name = "laneCrownPointCenter") + @JsonProperty("laneCrownPointCenter") + private RoadwayCrownAngle laneCrownPointCenter; + @Asn1Property(tag = 2, name = "laneCrownPointLeft") + @JsonProperty("laneCrownPointLeft") + private RoadwayCrownAngle laneCrownPointLeft; + @Asn1Property(tag = 3, name = "laneCrownPointRight") + @JsonProperty("laneCrownPointRight") + private RoadwayCrownAngle laneCrownPointRight; + @Asn1Property(tag = 4, name = "laneAngle") + @JsonProperty("laneAngle") + private MergeDivergeNodeAngle laneAngle; + @Asn1Property(tag = 5, name = "speedLimits") + @JsonProperty("speedLimits") + @JacksonXmlElementWrapper(localName = "speedLimits") + @JacksonXmlProperty(localName = "RegulatorySpeedLimit") + private SpeedLimitList speedLimits; + @Asn1Property(tag = 6, name = "regional") + @JsonProperty("regional") + private SequenceOfRegional regional; + + LaneDataAttribute() { + super(true); + } + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_LaneDataAttribute.class, 1L, 4L); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneDataAttributeList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneDataAttributeList.java new file mode 100644 index 000000000..f36ecf60b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneDataAttributeList.java @@ -0,0 +1,58 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.serialization.SequenceOfChoiceDeserializer; +import us.dot.its.jpo.ode.plugin.serialization.SequenceOfChoiceSerializer; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class LaneDataAttributeList extends Asn1SequenceOf { + + LaneDataAttributeList() { + super(LaneDataAttribute.class, 1L, 8L); + } + + public static class LaneDataAttributeListSerializer + extends + SequenceOfChoiceSerializer { + public LaneDataAttributeListSerializer() { + super(LaneDataAttribute.class, LaneDataAttributeList.class); + } + } + + public static class LaneDataAttributeListDeserializer + extends + SequenceOfChoiceDeserializer { + public LaneDataAttributeListDeserializer() { + super(LaneDataAttribute.class, LaneDataAttributeList.class); + } + + @Override + protected LaneDataAttributeList construct() { + return new LaneDataAttributeList(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneID.java new file mode 100644 index 000000000..2cdc7d309 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneID.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = LaneID.LaneIDDeserializer.class) +public class LaneID extends Asn1Integer { + + public LaneID() { + super(0L, 255L); + } + + @JsonCreator + public LaneID(long value) { + this(); + this.value = value; + } + + public static class LaneIDDeserializer extends IntegerDeserializer { + public LaneIDDeserializer() { + super(LaneID.class); + } + + @Override + protected LaneID construct() { + return new LaneID(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneWidth.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneWidth.java new file mode 100644 index 000000000..1f9ab714b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneWidth.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = LaneWidth.LaneWidthDeserializer.class) +public class LaneWidth extends Asn1Integer { + + public LaneWidth() { + super(0L, 32767L); + } + + @JsonCreator + public LaneWidth(long value) { + this(); + this.value = value; + } + + public static class LaneWidthDeserializer extends IntegerDeserializer { + public LaneWidthDeserializer() { + super(LaneWidth.class); + } + + @Override + protected LaneWidth construct() { + return new LaneWidth(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Latitude.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Latitude.java new file mode 100644 index 000000000..bfe2934cc --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Latitude.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Latitude.LatitudeDeserializer.class) +public class Latitude extends Asn1Integer { + + public Latitude() { + super(-900000000L, 900000001L); + } + + @JsonCreator + public Latitude(long value) { + this(); + this.value = value; + } + + public static class LatitudeDeserializer extends IntegerDeserializer { + public LatitudeDeserializer() { + super(Latitude.class); + } + + @Override + protected Latitude construct() { + return new Latitude(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Longitude.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Longitude.java new file mode 100644 index 000000000..cced10041 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Longitude.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Longitude.LongitudeDeserializer.class) +public class Longitude extends Asn1Integer { + + public Longitude() { + super(-1799999999L, 1800000001L); + } + + @JsonCreator + public Longitude(long value) { + this(); + this.value = value; + } + + public static class LongitudeDeserializer extends IntegerDeserializer { + public LongitudeDeserializer() { + super(Longitude.class); + } + + @Override + protected Longitude construct() { + return new Longitude(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MergeDivergeNodeAngle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MergeDivergeNodeAngle.java new file mode 100644 index 000000000..745000a76 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MergeDivergeNodeAngle.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = MergeDivergeNodeAngle.MergeDivergeNodeAngleDeserializer.class) +public class MergeDivergeNodeAngle extends Asn1Integer { + + public MergeDivergeNodeAngle() { + super(-180L, 180L); + } + + @JsonCreator + public MergeDivergeNodeAngle(long value) { + this(); + this.value = value; + } + + public static class MergeDivergeNodeAngleDeserializer extends IntegerDeserializer { + public MergeDivergeNodeAngleDeserializer() { + super(MergeDivergeNodeAngle.class); + } + + @Override + protected MergeDivergeNodeAngle construct() { + return new MergeDivergeNodeAngle(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MinuteOfTheYear.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MinuteOfTheYear.java new file mode 100644 index 000000000..9fafa1ee4 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MinuteOfTheYear.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = MinuteOfTheYear.MinuteOfTheYearDeserializer.class) +public class MinuteOfTheYear extends Asn1Integer { + + public MinuteOfTheYear() { + super(0L, 527040L); + } + + @JsonCreator + public MinuteOfTheYear(long value) { + this(); + this.value = value; + } + + public static class MinuteOfTheYearDeserializer extends IntegerDeserializer { + public MinuteOfTheYearDeserializer() { + super(MinuteOfTheYear.class); + } + + @Override + protected MinuteOfTheYear construct() { + return new MinuteOfTheYear(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MsgCount.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MsgCount.java new file mode 100644 index 000000000..db6e65709 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MsgCount.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = MsgCount.MsgCountDeserializer.class) +public class MsgCount extends Asn1Integer { + + public MsgCount() { + super(0L, 127L); + } + + @JsonCreator + public MsgCount(long value) { + this(); + this.value = value; + } + + public static class MsgCountDeserializer extends IntegerDeserializer { + public MsgCountDeserializer() { + super(MsgCount.class); + } + + @Override + protected MsgCount construct() { + return new MsgCount(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeSetXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeSetXY.java new file mode 100644 index 000000000..bf41d4a69 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeSetXY.java @@ -0,0 +1,81 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_NodeAttributeSetXY; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class NodeAttributeSetXY extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "localNode", optional = true) + @JsonProperty("localNode") + @JsonDeserialize(using = NodeAttributeXYList.NodeAttributeXYListDeserializer.class) + private NodeAttributeXYList localNode; + @Asn1Property(tag = 1, name = "disabled", optional = true) + @JsonProperty("disabled") + @JsonDeserialize(using = SegmentAttributeXYList.SegmentAttributeXYListDeserializer.class) + private SegmentAttributeXYList disabled; + @Asn1Property(tag = 2, name = "enabled", optional = true) + @JsonProperty("enabled") + @JsonDeserialize(using = SegmentAttributeXYList.SegmentAttributeXYListDeserializer.class) + private SegmentAttributeXYList enabled; + @Asn1Property(tag = 3, name = "data", optional = true) + @JsonProperty("data") + @JsonSerialize(using = LaneDataAttributeList.LaneDataAttributeListSerializer.class) + @JsonDeserialize(using = LaneDataAttributeList.LaneDataAttributeListDeserializer.class) + private LaneDataAttributeList data; + @Asn1Property(tag = 4, name = "dWidth", optional = true) + @JsonProperty("dWidth") + private Offset_B10 dWidth; + @Asn1Property(tag = 5, name = "dElevation", optional = true) + @JsonProperty("dElevation") + private Offset_B10 dElevation; + @Asn1Property(tag = 6, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_NodeAttributeSetXY.class, 1L, 4L); + } + } + + NodeAttributeSetXY() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXY.java new file mode 100644 index 000000000..b6a1fa214 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXY.java @@ -0,0 +1,55 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = NodeAttributeXYSerializer.class) +@JsonDeserialize(using = NodeAttributeXYDeserializer.class) +public enum NodeAttributeXY implements Asn1Enumerated { + RESERVED(0, "reserved"), STOPLINE(1, "stopLine"), ROUNDEDCAPSTYLEA(2, "roundedCapStyleA"), ROUNDEDCAPSTYLEB(3, + "roundedCapStyleB"), MERGEPOINT(4, "mergePoint"), DIVERGEPOINT(5, "divergePoint"), DOWNSTREAMSTOPLINE(6, + "downstreamStopLine"), DOWNSTREAMSTARTNODE(7, "downstreamStartNode"), CLOSEDTOTRAFFIC(8, + "closedToTraffic"), SAFEISLAND(9, "safeIsland"), CURBPRESENTATSTEPOFF(10, + "curbPresentAtStepOff"), HYDRANTPRESENT(11, "hydrantPresent"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private NodeAttributeXY(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 11; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYDeserializer.java new file mode 100644 index 000000000..fc9c89a7d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class NodeAttributeXYDeserializer extends EnumeratedDeserializer { + + NodeAttributeXYDeserializer() { + super(NodeAttributeXY.class); + } + + @Override + protected NodeAttributeXY[] listEnumValues() { + return NodeAttributeXY.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYList.java new file mode 100644 index 000000000..268bcbce9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYList.java @@ -0,0 +1,54 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.serialization.SequenceOfEnumeratedDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class NodeAttributeXYList extends Asn1SequenceOf { + + NodeAttributeXYList() { + super(NodeAttributeXY.class, 1L, 8L); + } + + public static class NodeAttributeXYListDeserializer + extends + SequenceOfEnumeratedDeserializer { + public NodeAttributeXYListDeserializer() { + super(NodeAttributeXYList.class, NodeAttributeXY.class); + } + + @Override + protected NodeAttributeXY[] listEnumValues() { + return NodeAttributeXY.values(); + } + + @Override + protected NodeAttributeXYList construct() { + return new NodeAttributeXYList(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYSerializer.java new file mode 100644 index 000000000..a7136a038 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class NodeAttributeXYSerializer extends EnumeratedSerializer { + + NodeAttributeXYSerializer() { + super(NodeAttributeXY.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeListXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeListXY.java new file mode 100644 index 000000000..f282ae0dd --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeListXY.java @@ -0,0 +1,52 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; + +@Getter +@Setter +@JsonInclude(Include.NON_NULL) +public class NodeListXY extends Asn1Choice { + + @Asn1Property(tag = 0, name = "nodes") + @JsonProperty("nodes") + @JacksonXmlElementWrapper(localName = "nodes") + @JacksonXmlProperty(localName = "NodeXY") + private NodeSetXY nodes; + @Asn1Property(tag = 1, name = "computed") + @JsonProperty("computed") + private ComputedLane computed; + + NodeListXY() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeOffsetPointXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeOffsetPointXY.java new file mode 100644 index 000000000..15e9580f8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeOffsetPointXY.java @@ -0,0 +1,67 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_NodeOffsetPointXY; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; + +@Getter +@Setter +@JsonInclude(Include.NON_NULL) +public class NodeOffsetPointXY extends Asn1Choice { + + @Asn1Property(tag = 0, name = "node-XY1") + @JsonProperty("node-XY1") + private Node_XY_20b node_XY1; + @Asn1Property(tag = 1, name = "node-XY2") + @JsonProperty("node-XY2") + private Node_XY_22b node_XY2; + @Asn1Property(tag = 2, name = "node-XY3") + @JsonProperty("node-XY3") + private Node_XY_24b node_XY3; + @Asn1Property(tag = 3, name = "node-XY4") + @JsonProperty("node-XY4") + private Node_XY_26b node_XY4; + @Asn1Property(tag = 4, name = "node-XY5") + @JsonProperty("node-XY5") + private Node_XY_28b node_XY5; + @Asn1Property(tag = 5, name = "node-XY6") + @JsonProperty("node-XY6") + private Node_XY_32b node_XY6; + @Asn1Property(tag = 6, name = "node-LatLon") + @JsonProperty("node-LatLon") + private Node_LLmD_64b node_LatLon; + @Asn1Property(tag = 7, name = "regional") + @JsonProperty("regional") + private Reg_NodeOffsetPointXY regional; + + NodeOffsetPointXY() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeSetXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeSetXY.java new file mode 100644 index 000000000..84aee9819 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeSetXY.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class NodeSetXY extends Asn1SequenceOf { + + NodeSetXY() { + super(NodeXY.class, 2L, 63L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeXY.java new file mode 100644 index 000000000..7f03d2dd8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeXY.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class NodeXY extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "delta") + @JsonProperty("delta") + private NodeOffsetPointXY delta; + @Asn1Property(tag = 1, name = "attributes", optional = true) + @JsonProperty("attributes") + private NodeAttributeSetXY attributes; + + NodeXY() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_LLmD_64b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_LLmD_64b.java new file mode 100644 index 000000000..c2821a4be --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_LLmD_64b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LLmD_64b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private Longitude lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private Latitude lat; + + Node_LLmD_64b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_20b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_20b.java new file mode 100644 index 000000000..e3f6e6839 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_20b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_XY_20b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "x") + @JsonProperty("x") + private Offset_B10 x; + @Asn1Property(tag = 1, name = "y") + @JsonProperty("y") + private Offset_B10 y; + + Node_XY_20b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_22b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_22b.java new file mode 100644 index 000000000..a3db0c627 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_22b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_XY_22b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "x") + @JsonProperty("x") + private Offset_B11 x; + @Asn1Property(tag = 1, name = "y") + @JsonProperty("y") + private Offset_B11 y; + + Node_XY_22b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_24b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_24b.java new file mode 100644 index 000000000..031a838d9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_24b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_XY_24b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "x") + @JsonProperty("x") + private Offset_B12 x; + @Asn1Property(tag = 1, name = "y") + @JsonProperty("y") + private Offset_B12 y; + + Node_XY_24b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_26b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_26b.java new file mode 100644 index 000000000..5673f4500 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_26b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_XY_26b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "x") + @JsonProperty("x") + private Offset_B13 x; + @Asn1Property(tag = 1, name = "y") + @JsonProperty("y") + private Offset_B13 y; + + Node_XY_26b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_28b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_28b.java new file mode 100644 index 000000000..4e564c216 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_28b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_XY_28b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "x") + @JsonProperty("x") + private Offset_B14 x; + @Asn1Property(tag = 1, name = "y") + @JsonProperty("y") + private Offset_B14 y; + + Node_XY_28b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_32b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_32b.java new file mode 100644 index 000000000..a5daac524 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_32b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_XY_32b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "x") + @JsonProperty("x") + private Offset_B16 x; + @Asn1Property(tag = 1, name = "y") + @JsonProperty("y") + private Offset_B16 y; + + Node_XY_32b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B12.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B12.java new file mode 100644 index 000000000..136a05af4 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B12.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = OffsetLL_B12.OffsetLL_B12Deserializer.class) +public class OffsetLL_B12 extends Asn1Integer { + + public OffsetLL_B12() { + super(-2048L, 2047L); + } + + @JsonCreator + public OffsetLL_B12(long value) { + this(); + this.value = value; + } + + public static class OffsetLL_B12Deserializer extends IntegerDeserializer { + public OffsetLL_B12Deserializer() { + super(OffsetLL_B12.class); + } + + @Override + protected OffsetLL_B12 construct() { + return new OffsetLL_B12(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B14.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B14.java new file mode 100644 index 000000000..82a886edc --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B14.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = OffsetLL_B14.OffsetLL_B14Deserializer.class) +public class OffsetLL_B14 extends Asn1Integer { + + public OffsetLL_B14() { + super(-8192L, 8191L); + } + + @JsonCreator + public OffsetLL_B14(long value) { + this(); + this.value = value; + } + + public static class OffsetLL_B14Deserializer extends IntegerDeserializer { + public OffsetLL_B14Deserializer() { + super(OffsetLL_B14.class); + } + + @Override + protected OffsetLL_B14 construct() { + return new OffsetLL_B14(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B16.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B16.java new file mode 100644 index 000000000..3a3bd1626 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B16.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = OffsetLL_B16.OffsetLL_B16Deserializer.class) +public class OffsetLL_B16 extends Asn1Integer { + + public OffsetLL_B16() { + super(-32768L, 32767L); + } + + @JsonCreator + public OffsetLL_B16(long value) { + this(); + this.value = value; + } + + public static class OffsetLL_B16Deserializer extends IntegerDeserializer { + public OffsetLL_B16Deserializer() { + super(OffsetLL_B16.class); + } + + @Override + protected OffsetLL_B16 construct() { + return new OffsetLL_B16(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B18.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B18.java new file mode 100644 index 000000000..962e8d970 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B18.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = OffsetLL_B18.OffsetLL_B18Deserializer.class) +public class OffsetLL_B18 extends Asn1Integer { + + public OffsetLL_B18() { + super(-131072L, 131071L); + } + + @JsonCreator + public OffsetLL_B18(long value) { + this(); + this.value = value; + } + + public static class OffsetLL_B18Deserializer extends IntegerDeserializer { + public OffsetLL_B18Deserializer() { + super(OffsetLL_B18.class); + } + + @Override + protected OffsetLL_B18 construct() { + return new OffsetLL_B18(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B22.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B22.java new file mode 100644 index 000000000..07e064f6d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B22.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = OffsetLL_B22.OffsetLL_B22Deserializer.class) +public class OffsetLL_B22 extends Asn1Integer { + + public OffsetLL_B22() { + super(-2097152L, 2097151L); + } + + @JsonCreator + public OffsetLL_B22(long value) { + this(); + this.value = value; + } + + public static class OffsetLL_B22Deserializer extends IntegerDeserializer { + public OffsetLL_B22Deserializer() { + super(OffsetLL_B22.class); + } + + @Override + protected OffsetLL_B22 construct() { + return new OffsetLL_B22(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B24.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B24.java new file mode 100644 index 000000000..c37701e28 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B24.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = OffsetLL_B24.OffsetLL_B24Deserializer.class) +public class OffsetLL_B24 extends Asn1Integer { + + public OffsetLL_B24() { + super(-8388608L, 8388607L); + } + + @JsonCreator + public OffsetLL_B24(long value) { + this(); + this.value = value; + } + + public static class OffsetLL_B24Deserializer extends IntegerDeserializer { + public OffsetLL_B24Deserializer() { + super(OffsetLL_B24.class); + } + + @Override + protected OffsetLL_B24 construct() { + return new OffsetLL_B24(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B10.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B10.java new file mode 100644 index 000000000..2ab269382 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B10.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Offset_B10.Offset_B10Deserializer.class) +public class Offset_B10 extends Asn1Integer { + + public Offset_B10() { + super(-512L, 511L); + } + + @JsonCreator + public Offset_B10(long value) { + this(); + this.value = value; + } + + public static class Offset_B10Deserializer extends IntegerDeserializer { + public Offset_B10Deserializer() { + super(Offset_B10.class); + } + + @Override + protected Offset_B10 construct() { + return new Offset_B10(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B11.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B11.java new file mode 100644 index 000000000..0d3c7f4a6 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B11.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Offset_B11.Offset_B11Deserializer.class) +public class Offset_B11 extends Asn1Integer { + + public Offset_B11() { + super(-1024L, 1023L); + } + + @JsonCreator + public Offset_B11(long value) { + this(); + this.value = value; + } + + public static class Offset_B11Deserializer extends IntegerDeserializer { + public Offset_B11Deserializer() { + super(Offset_B11.class); + } + + @Override + protected Offset_B11 construct() { + return new Offset_B11(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B12.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B12.java new file mode 100644 index 000000000..a2762e17a --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B12.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Offset_B12.Offset_B12Deserializer.class) +public class Offset_B12 extends Asn1Integer { + + public Offset_B12() { + super(-2048L, 2047L); + } + + @JsonCreator + public Offset_B12(long value) { + this(); + this.value = value; + } + + public static class Offset_B12Deserializer extends IntegerDeserializer { + public Offset_B12Deserializer() { + super(Offset_B12.class); + } + + @Override + protected Offset_B12 construct() { + return new Offset_B12(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B13.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B13.java new file mode 100644 index 000000000..c022692d7 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B13.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Offset_B13.Offset_B13Deserializer.class) +public class Offset_B13 extends Asn1Integer { + + public Offset_B13() { + super(-4096L, 4095L); + } + + @JsonCreator + public Offset_B13(long value) { + this(); + this.value = value; + } + + public static class Offset_B13Deserializer extends IntegerDeserializer { + public Offset_B13Deserializer() { + super(Offset_B13.class); + } + + @Override + protected Offset_B13 construct() { + return new Offset_B13(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B14.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B14.java new file mode 100644 index 000000000..c11562014 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B14.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Offset_B14.Offset_B14Deserializer.class) +public class Offset_B14 extends Asn1Integer { + + public Offset_B14() { + super(-8192L, 8191L); + } + + @JsonCreator + public Offset_B14(long value) { + this(); + this.value = value; + } + + public static class Offset_B14Deserializer extends IntegerDeserializer { + public Offset_B14Deserializer() { + super(Offset_B14.class); + } + + @Override + protected Offset_B14 construct() { + return new Offset_B14(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B16.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B16.java new file mode 100644 index 000000000..a43cb611d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B16.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Offset_B16.Offset_B16Deserializer.class) +public class Offset_B16 extends Asn1Integer { + + public Offset_B16() { + super(-32768L, 32767L); + } + + @JsonCreator + public Offset_B16(long value) { + this(); + this.value = value; + } + + public static class Offset_B16Deserializer extends IntegerDeserializer { + public Offset_B16Deserializer() { + super(Offset_B16.class); + } + + @Override + protected Offset_B16 construct() { + return new Offset_B16(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Position3D.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Position3D.java new file mode 100644 index 000000000..fa2e7d007 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Position3D.java @@ -0,0 +1,65 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_Position3D; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Position3D extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lat") + @JsonProperty("lat") + private Latitude lat; + @Asn1Property(tag = 1, name = "long") + @JsonProperty("long") + private Longitude long_; + @Asn1Property(tag = 2, name = "elevation", optional = true) + @JsonProperty("elevation") + private Elevation elevation; + @Asn1Property(tag = 3, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_Position3D.class, 1L, 4L); + } + } + + Position3D() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegionId.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegionId.java new file mode 100644 index 000000000..2a7f9ee57 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegionId.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = RegionId.RegionIdDeserializer.class) +public class RegionId extends Asn1Integer { + + public RegionId() { + super(0L, 255L); + } + + @JsonCreator + public RegionId(long value) { + this(); + this.value = value; + } + + public static class RegionIdDeserializer extends IntegerDeserializer { + public RegionIdDeserializer() { + super(RegionId.class); + } + + @Override + protected RegionId construct() { + return new RegionId(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegionalExtension.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegionalExtension.java new file mode 100644 index 000000000..46ddec790 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegionalExtension.java @@ -0,0 +1,66 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +abstract public class RegionalExtension extends Asn1Sequence { + + @JsonIgnore + final protected RegionId regionId; + @JsonIgnore + final protected String name; + private TValue regExtValue; + public final static String INFORMATION_OBJECT_CLASS = "REG_EXT_ID_AND_TYPE"; + + public RegionId getRegionId() { + return regionId; + } + + public String getName() { + return name; + } + + @JsonProperty("regionId") + public String getIdString() { + return regionId.toString(); + } + + public TValue getRegExtValue() { + return regExtValue; + } + + public void setRegExtValue(TValue regExtValue) { + this.regExtValue = regExtValue; + } + + public RegionalExtension(int id, String name) { + super(true); + var theId = new RegionId(); + theId.setValue(id); + this.regionId = theId; + this.name = name; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegulatorySpeedLimit.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegulatorySpeedLimit.java new file mode 100644 index 000000000..a1420bfa3 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegulatorySpeedLimit.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class RegulatorySpeedLimit extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "type") + @JsonProperty("type") + private SpeedLimitType type; + @Asn1Property(tag = 1, name = "speed") + @JsonProperty("speed") + private Velocity speed; + + RegulatorySpeedLimit() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadRegulatorID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadRegulatorID.java new file mode 100644 index 000000000..aaa28cee9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadRegulatorID.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = RoadRegulatorID.RoadRegulatorIDDeserializer.class) +public class RoadRegulatorID extends Asn1Integer { + + public RoadRegulatorID() { + super(0L, 65535L); + } + + @JsonCreator + public RoadRegulatorID(long value) { + this(); + this.value = value; + } + + public static class RoadRegulatorIDDeserializer extends IntegerDeserializer { + public RoadRegulatorIDDeserializer() { + super(RoadRegulatorID.class); + } + + @Override + protected RoadRegulatorID construct() { + return new RoadRegulatorID(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadSegmentID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadSegmentID.java new file mode 100644 index 000000000..b0b71f2fe --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadSegmentID.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = RoadSegmentID.RoadSegmentIDDeserializer.class) +public class RoadSegmentID extends Asn1Integer { + + public RoadSegmentID() { + super(0L, 65535L); + } + + @JsonCreator + public RoadSegmentID(long value) { + this(); + this.value = value; + } + + public static class RoadSegmentIDDeserializer extends IntegerDeserializer { + public RoadSegmentIDDeserializer() { + super(RoadSegmentID.class); + } + + @Override + protected RoadSegmentID construct() { + return new RoadSegmentID(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadSegmentReferenceID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadSegmentReferenceID.java new file mode 100644 index 000000000..67240b99e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadSegmentReferenceID.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class RoadSegmentReferenceID extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "region", optional = true) + @JsonProperty("region") + private RoadRegulatorID region; + @Asn1Property(tag = 1, name = "id") + @JsonProperty("id") + private RoadSegmentID id; + + RoadSegmentReferenceID() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadwayCrownAngle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadwayCrownAngle.java new file mode 100644 index 000000000..7e8499597 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadwayCrownAngle.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = RoadwayCrownAngle.RoadwayCrownAngleDeserializer.class) +public class RoadwayCrownAngle extends Asn1Integer { + + public RoadwayCrownAngle() { + super(-128L, 127L); + } + + @JsonCreator + public RoadwayCrownAngle(long value) { + this(); + this.value = value; + } + + public static class RoadwayCrownAngleDeserializer extends IntegerDeserializer { + public RoadwayCrownAngleDeserializer() { + super(RoadwayCrownAngle.class); + } + + @Override + protected RoadwayCrownAngle construct() { + return new RoadwayCrownAngle(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SSPindex.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SSPindex.java new file mode 100644 index 000000000..44bf449eb --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SSPindex.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = SSPindex.SSPindexDeserializer.class) +public class SSPindex extends Asn1Integer { + + public SSPindex() { + super(0L, 31L); + } + + @JsonCreator + public SSPindex(long value) { + this(); + this.value = value; + } + + public static class SSPindexDeserializer extends IntegerDeserializer { + public SSPindexDeserializer() { + super(SSPindex.class); + } + + @Override + protected SSPindex construct() { + return new SSPindex(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Scale_B12.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Scale_B12.java new file mode 100644 index 000000000..3aae74343 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Scale_B12.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Scale_B12.Scale_B12Deserializer.class) +public class Scale_B12 extends Asn1Integer { + + public Scale_B12() { + super(-2048L, 2047L); + } + + @JsonCreator + public Scale_B12(long value) { + this(); + this.value = value; + } + + public static class Scale_B12Deserializer extends IntegerDeserializer { + public Scale_B12Deserializer() { + super(Scale_B12.class); + } + + @Override + protected Scale_B12 construct() { + return new Scale_B12(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXY.java new file mode 100644 index 000000000..763cb2586 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXY.java @@ -0,0 +1,103 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = SegmentAttributeXYSerializer.class) +@JsonDeserialize(using = SegmentAttributeXYDeserializer.class) +public enum SegmentAttributeXY implements Asn1Enumerated { + RESERVED(0, "reserved"), DONOTBLOCK(1, "doNotBlock"), WHITELINE(2, "whiteLine"), MERGINGLANELEFT(3, + "mergingLaneLeft"), MERGINGLANERIGHT(4, "mergingLaneRight"), CURBONLEFT(5, "curbOnLeft"), CURBONRIGHT(6, + "curbOnRight"), LOADINGZONEONLEFT(7, "loadingzoneOnLeft"), LOADINGZONEONRIGHT(8, + "loadingzoneOnRight"), TURNOUTPOINTONLEFT(9, "turnOutPointOnLeft"), TURNOUTPOINTONRIGHT(10, + "turnOutPointOnRight"), ADJACENTPARKINGONLEFT(11, + "adjacentParkingOnLeft"), ADJACENTPARKINGONRIGHT(12, + "adjacentParkingOnRight"), ADJACENTBIKELANEONLEFT(13, + "adjacentBikeLaneOnLeft"), ADJACENTBIKELANEONRIGHT(14, + "adjacentBikeLaneOnRight"), SHAREDBIKELANE(15, + "sharedBikeLane"), BIKEBOXINFRONT(16, + "bikeBoxInFront"), TRANSITSTOPONLEFT( + 17, + "transitStopOnLeft"), TRANSITSTOPONRIGHT( + 18, + "transitStopOnRight"), TRANSITSTOPINLANE( + 19, + "transitStopInLane"), SHAREDWITHTRACKEDVEHICLE( + 20, + "sharedWithTrackedVehicle"), SAFEISLAND( + 21, + "safeIsland"), LOWCURBSPRESENT( + 22, + "lowCurbsPresent"), RUMBLESTRIPPRESENT( + 23, + "rumbleStripPresent"), AUDIBLESIGNALINGPRESENT( + 24, + "audibleSignalingPresent"), ADAPTIVETIMINGPRESENT( + 25, + "adaptiveTimingPresent"), RFSIGNALREQUESTPRESENT( + 26, + "rfSignalRequestPresent"), PARTIALCURBINTRUSION( + 27, + "partialCurbIntrusion"), TAPERTOLEFT( + 28, + "taperToLeft"), TAPERTORIGHT( + 29, + "taperToRight"), TAPERTOCENTERLINE( + 30, + "taperToCenterLine"), PARALLELPARKING( + 31, + "parallelParking"), HEADINPARKING( + 32, + "headInParking"), FREEPARKING( + 33, + "freeParking"), TIMERESTRICTIONSONPARKING( + 34, + "timeRestrictionsOnParking"), COSTTOPARK( + 35, + "costToPark"), MIDBLOCKCURBPRESENT( + 36, + "midBlockCurbPresent"), UNEVENPAVEMENTPRESENT( + 37, + "unEvenPavementPresent"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private SegmentAttributeXY(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 37; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYDeserializer.java new file mode 100644 index 000000000..685cb5c21 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class SegmentAttributeXYDeserializer extends EnumeratedDeserializer { + + SegmentAttributeXYDeserializer() { + super(SegmentAttributeXY.class); + } + + @Override + protected SegmentAttributeXY[] listEnumValues() { + return SegmentAttributeXY.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYList.java new file mode 100644 index 000000000..59ba04c61 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYList.java @@ -0,0 +1,54 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.serialization.SequenceOfEnumeratedDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class SegmentAttributeXYList extends Asn1SequenceOf { + + SegmentAttributeXYList() { + super(SegmentAttributeXY.class, 1L, 8L); + } + + public static class SegmentAttributeXYListDeserializer + extends + SequenceOfEnumeratedDeserializer { + public SegmentAttributeXYListDeserializer() { + super(SegmentAttributeXYList.class, SegmentAttributeXY.class); + } + + @Override + protected SegmentAttributeXY[] listEnumValues() { + return SegmentAttributeXY.values(); + } + + @Override + protected SegmentAttributeXYList construct() { + return new SegmentAttributeXYList(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYSerializer.java new file mode 100644 index 000000000..44a56038e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class SegmentAttributeXYSerializer extends EnumeratedSerializer { + + SegmentAttributeXYSerializer() { + super(SegmentAttributeXY.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitList.java new file mode 100644 index 000000000..26a3907d9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitList.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class SpeedLimitList extends Asn1SequenceOf { + + SpeedLimitList() { + super(RegulatorySpeedLimit.class, 1L, 9L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitType.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitType.java new file mode 100644 index 000000000..2d78ff819 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitType.java @@ -0,0 +1,59 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = SpeedLimitTypeSerializer.class) +@JsonDeserialize(using = SpeedLimitTypeDeserializer.class) +public enum SpeedLimitType implements Asn1Enumerated { + UNKNOWN(0, "unknown"), MAXSPEEDINSCHOOLZONE(1, "maxSpeedInSchoolZone"), MAXSPEEDINSCHOOLZONEWHENCHILDRENAREPRESENT( + 2, "maxSpeedInSchoolZoneWhenChildrenArePresent"), MAXSPEEDINCONSTRUCTIONZONE(3, + "maxSpeedInConstructionZone"), VEHICLEMINSPEED(4, "vehicleMinSpeed"), VEHICLEMAXSPEED(5, + "vehicleMaxSpeed"), VEHICLENIGHTMAXSPEED(6, "vehicleNightMaxSpeed"), TRUCKMINSPEED(7, + "truckMinSpeed"), TRUCKMAXSPEED(8, "truckMaxSpeed"), TRUCKNIGHTMAXSPEED(9, + "truckNightMaxSpeed"), VEHICLESWITHTRAILERSMINSPEED(10, + "vehiclesWithTrailersMinSpeed"), VEHICLESWITHTRAILERSMAXSPEED(11, + "vehiclesWithTrailersMaxSpeed"), VEHICLESWITHTRAILERSNIGHTMAXSPEED( + 12, "vehiclesWithTrailersNightMaxSpeed"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private SpeedLimitType(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 12; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitTypeDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitTypeDeserializer.java new file mode 100644 index 000000000..f7bcb8f59 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitTypeDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class SpeedLimitTypeDeserializer extends EnumeratedDeserializer { + + SpeedLimitTypeDeserializer() { + super(SpeedLimitType.class); + } + + @Override + protected SpeedLimitType[] listEnumValues() { + return SpeedLimitType.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitTypeSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitTypeSerializer.java new file mode 100644 index 000000000..902011806 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitTypeSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class SpeedLimitTypeSerializer extends EnumeratedSerializer { + + SpeedLimitTypeSerializer() { + super(SpeedLimitType.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Velocity.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Velocity.java new file mode 100644 index 000000000..bf1cb2bcf --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Velocity.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Velocity.VelocityDeserializer.class) +public class Velocity extends Asn1Integer { + + public Velocity() { + super(0L, 8191L); + } + + @JsonCreator + public Velocity(long value) { + this(); + this.value = value; + } + + public static class VelocityDeserializer extends IntegerDeserializer { + public VelocityDeserializer() { + super(Velocity.class); + } + + @Override + protected Velocity construct() { + return new Velocity(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodes.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodes.java new file mode 100644 index 000000000..0c2aee157 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodes.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.itis; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = ITIScodes.ITIScodesDeserializer.class) +public class ITIScodes extends Asn1Integer { + + public ITIScodes() { + super(0L, 65535L); + } + + @JsonCreator + public ITIScodes(long value) { + this(); + this.value = value; + } + + public static class ITIScodesDeserializer extends IntegerDeserializer { + public ITIScodesDeserializer() { + super(ITIScodes.class); + } + + @Override + protected ITIScodes construct() { + return new ITIScodes(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodesAndText.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodesAndText.java new file mode 100644 index 000000000..49932c026 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodesAndText.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.itis; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class ITIScodesAndText extends Asn1SequenceOf { + + ITIScodesAndText() { + super(ITIScodesAndTextSequence.class, 1L, 100L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodesAndTextSequence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodesAndTextSequence.java new file mode 100644 index 000000000..ff7f8459e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodesAndTextSequence.java @@ -0,0 +1,64 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.itis; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class ITIScodesAndTextSequence extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "item") + @JsonProperty("item") + private ItemChoice item; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ItemChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "itis") + @JsonProperty("itis") + private ITIScodes itis; + @Asn1Property(tag = 1, name = "text") + @JsonProperty("text") + private ITIStext text; + + ItemChoice() { + super(false); + } + } + + ITIScodesAndTextSequence() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIStext.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIStext.java new file mode 100644 index 000000000..c5fa99f4f --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIStext.java @@ -0,0 +1,39 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.itis; + +import com.fasterxml.jackson.annotation.JsonCreator; +import us.dot.its.jpo.ode.plugin.types.IA5String; + +public class ITIStext extends IA5String { + + public ITIStext() { + super(1, 500); + } + + @JsonCreator + public ITIStext(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_ComputedLane.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_ComputedLane.java new file mode 100644 index 000000000..8c3920fb7 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_ComputedLane.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_ComputedLane extends RegionalExtension { + + public Reg_ComputedLane(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_GeographicalPath.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_GeographicalPath.java new file mode 100644 index 000000000..98d8ab03c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_GeographicalPath.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_GeographicalPath extends RegionalExtension { + + public Reg_GeographicalPath(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_GeometricProjection.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_GeometricProjection.java new file mode 100644 index 000000000..b6697ef74 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_GeometricProjection.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_GeometricProjection extends RegionalExtension { + + public Reg_GeometricProjection(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_LaneDataAttribute.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_LaneDataAttribute.java new file mode 100644 index 000000000..f40f2063c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_LaneDataAttribute.java @@ -0,0 +1,47 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.As; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes.IdType; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; +import us.dot.its.jpo.ode.plugin.j2735.addgrpb.LaneDataAttribute_addGrpBReg_LaneDataAttribute; + +@JsonInclude(Include.NON_NULL) +@JsonTypeInfo(use = Id.NAME, include = As.EXISTING_PROPERTY, property = "regionId") +@JsonSubTypes({ + @JsonSubTypes.Type(value = LaneDataAttribute_addGrpBReg_LaneDataAttribute.class, name = "2")}) +@Asn1ParameterizedTypes(idProperty = "regionId", idType = IdType.INTEGER, valueProperty = "regExtValue", value = { + @Asn1ParameterizedTypes.Type(value = LaneDataAttribute_addGrpBReg_LaneDataAttribute.class, intId = 2)}) +abstract public class Reg_LaneDataAttribute extends RegionalExtension { + + public Reg_LaneDataAttribute(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeAttributeSetLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeAttributeSetLL.java new file mode 100644 index 000000000..c15b304da --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeAttributeSetLL.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_NodeAttributeSetLL extends RegionalExtension { + + public Reg_NodeAttributeSetLL(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeAttributeSetXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeAttributeSetXY.java new file mode 100644 index 000000000..0b32ef5b8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeAttributeSetXY.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_NodeAttributeSetXY extends RegionalExtension { + + public Reg_NodeAttributeSetXY(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeOffsetPointLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeOffsetPointLL.java new file mode 100644 index 000000000..278223d23 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeOffsetPointLL.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_NodeOffsetPointLL extends RegionalExtension { + + public Reg_NodeOffsetPointLL(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeOffsetPointXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeOffsetPointXY.java new file mode 100644 index 000000000..727bc3433 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeOffsetPointXY.java @@ -0,0 +1,47 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.As; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes.IdType; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; +import us.dot.its.jpo.ode.plugin.j2735.addgrpb.NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXY; + +@JsonInclude(Include.NON_NULL) +@JsonTypeInfo(use = Id.NAME, include = As.EXISTING_PROPERTY, property = "regionId") +@JsonSubTypes({ + @JsonSubTypes.Type(value = NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXY.class, name = "2")}) +@Asn1ParameterizedTypes(idProperty = "regionId", idType = IdType.INTEGER, valueProperty = "regExtValue", value = { + @Asn1ParameterizedTypes.Type(value = NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXY.class, intId = 2)}) +abstract public class Reg_NodeOffsetPointXY extends RegionalExtension { + + public Reg_NodeOffsetPointXY(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_Position3D.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_Position3D.java new file mode 100644 index 000000000..b585b9da1 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_Position3D.java @@ -0,0 +1,49 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.As; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes.IdType; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; +import us.dot.its.jpo.ode.plugin.j2735.addgrpb.Position3D_addGrpBReg_Position3D; +import us.dot.its.jpo.ode.plugin.j2735.addgrpc.Position3D_addGrpCReg_Position3D; + +@JsonInclude(Include.NON_NULL) +@JsonTypeInfo(use = Id.NAME, include = As.EXISTING_PROPERTY, property = "regionId") +@JsonSubTypes({@JsonSubTypes.Type(value = Position3D_addGrpBReg_Position3D.class, name = "2"), + @JsonSubTypes.Type(value = Position3D_addGrpCReg_Position3D.class, name = "3")}) +@Asn1ParameterizedTypes(idProperty = "regionId", idType = IdType.INTEGER, valueProperty = "regExtValue", value = { + @Asn1ParameterizedTypes.Type(value = Position3D_addGrpBReg_Position3D.class, intId = 2), + @Asn1ParameterizedTypes.Type(value = Position3D_addGrpCReg_Position3D.class, intId = 3)}) +abstract public class Reg_Position3D extends RegionalExtension { + + public Reg_Position3D(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_TravelerInformation.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_TravelerInformation.java new file mode 100644 index 000000000..6921451e9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_TravelerInformation.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_TravelerInformation extends RegionalExtension { + + public Reg_TravelerInformation(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Circle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Circle.java new file mode 100644 index 000000000..44835164e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Circle.java @@ -0,0 +1,54 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.Position3D; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Circle extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "center") + @JsonProperty("center") + private Position3D center; + @Asn1Property(tag = 1, name = "radius") + @JsonProperty("radius") + private Radius_B12 radius; + @Asn1Property(tag = 2, name = "units") + @JsonProperty("units") + private DistanceUnits units; + + Circle() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUse.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUse.java new file mode 100644 index 000000000..902b5e200 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUse.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = DirectionOfUseSerializer.class) +@JsonDeserialize(using = DirectionOfUseDeserializer.class) +public enum DirectionOfUse implements Asn1Enumerated { + UNAVAILABLE(0, "unavailable"), FORWARD(1, "forward"), REVERSE(2, "reverse"), BOTH(3, "both"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private DirectionOfUse(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 3; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUseDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUseDeserializer.java new file mode 100644 index 000000000..f4c534505 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUseDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class DirectionOfUseDeserializer extends EnumeratedDeserializer { + + DirectionOfUseDeserializer() { + super(DirectionOfUse.class); + } + + @Override + protected DirectionOfUse[] listEnumValues() { + return DirectionOfUse.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUseSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUseSerializer.java new file mode 100644 index 000000000..2dfb054c4 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUseSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class DirectionOfUseSerializer extends EnumeratedSerializer { + + DirectionOfUseSerializer() { + super(DirectionOfUse.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnits.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnits.java new file mode 100644 index 000000000..e68c69632 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnits.java @@ -0,0 +1,52 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = DistanceUnitsSerializer.class) +@JsonDeserialize(using = DistanceUnitsDeserializer.class) +public enum DistanceUnits implements Asn1Enumerated { + CENTIMETER(0, "centimeter"), CM2_5(1, "cm2-5"), DECIMETER(2, "decimeter"), METER(3, "meter"), KILOMETER(4, + "kilometer"), FOOT(5, "foot"), YARD(6, "yard"), MILE(7, "mile"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private DistanceUnits(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 7; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnitsDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnitsDeserializer.java new file mode 100644 index 000000000..d516cef3a --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnitsDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class DistanceUnitsDeserializer extends EnumeratedDeserializer { + + DistanceUnitsDeserializer() { + super(DistanceUnits.class); + } + + @Override + protected DistanceUnits[] listEnumValues() { + return DistanceUnits.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnitsSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnitsSerializer.java new file mode 100644 index 000000000..7fdcc3f1e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnitsSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class DistanceUnitsSerializer extends EnumeratedSerializer { + + DistanceUnitsSerializer() { + super(DistanceUnits.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ExitService.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ExitService.java new file mode 100644 index 000000000..3077251ad --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ExitService.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class ExitService extends Asn1SequenceOf { + + ExitService() { + super(ExitServiceSequence.class, 1L, 16L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ExitServiceSequence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ExitServiceSequence.java new file mode 100644 index 000000000..ee43415f2 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ExitServiceSequence.java @@ -0,0 +1,65 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.itis.ITIScodes; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class ExitServiceSequence extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "item") + @JsonProperty("item") + private ItemChoice item; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ItemChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "itis") + @JsonProperty("itis") + private ITIScodes itis; + @Asn1Property(tag = 1, name = "text") + @JsonProperty("text") + private ITIStextPhrase text; + + ItemChoice() { + super(false); + } + } + + ExitServiceSequence() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GenericSignage.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GenericSignage.java new file mode 100644 index 000000000..f4138128b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GenericSignage.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class GenericSignage extends Asn1SequenceOf { + + GenericSignage() { + super(GenericSignageSequence.class, 1L, 16L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GenericSignageSequence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GenericSignageSequence.java new file mode 100644 index 000000000..d795ed5fd --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GenericSignageSequence.java @@ -0,0 +1,65 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.itis.ITIScodes; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class GenericSignageSequence extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "item") + @JsonProperty("item") + private ItemChoice item; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ItemChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "itis") + @JsonProperty("itis") + private ITIScodes itis; + @Asn1Property(tag = 1, name = "text") + @JsonProperty("text") + private ITIStextPhrase text; + + ItemChoice() { + super(false); + } + } + + GenericSignageSequence() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GeographicalPath.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GeographicalPath.java new file mode 100644 index 000000000..3c0e9ebeb --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GeographicalPath.java @@ -0,0 +1,102 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.*; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_GeographicalPath; +import us.dot.its.jpo.ode.plugin.types.Asn1Boolean; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class GeographicalPath extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "name", optional = true) + @JsonProperty("name") + private DescriptiveName name; + @Asn1Property(tag = 1, name = "id", optional = true) + @JsonProperty("id") + private RoadSegmentReferenceID id; + @Asn1Property(tag = 2, name = "anchor", optional = true) + @JsonProperty("anchor") + private Position3D anchor; + @Asn1Property(tag = 3, name = "laneWidth", optional = true) + @JsonProperty("laneWidth") + private LaneWidth laneWidth; + @Asn1Property(tag = 4, name = "directionality", optional = true) + @JsonProperty("directionality") + private DirectionOfUse directionality; + @Asn1Property(tag = 5, name = "closedPath", optional = true) + @JsonProperty("closedPath") + private Asn1Boolean closedPath; + @Asn1Property(tag = 6, name = "direction", optional = true) + @JsonProperty("direction") + private HeadingSlice direction; + @Asn1Property(tag = 7, name = "description", optional = true) + @JsonProperty("description") + private DescriptionChoice description; + @Asn1Property(tag = 8, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class DescriptionChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "path") + @JsonProperty("path") + private OffsetSystem path; + @Asn1Property(tag = 1, name = "geometry") + @JsonProperty("geometry") + private GeometricProjection geometry; + @Asn1Property(tag = 2, name = "oldRegion") + @JsonProperty("oldRegion") + private ValidRegion oldRegion; + + DescriptionChoice() { + super(true); + } + } + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_GeographicalPath.class, 1L, 4L); + } + } + + GeographicalPath() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GeometricProjection.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GeometricProjection.java new file mode 100644 index 000000000..4b7aae252 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GeometricProjection.java @@ -0,0 +1,71 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.Extent; +import us.dot.its.jpo.ode.plugin.j2735.common.HeadingSlice; +import us.dot.its.jpo.ode.plugin.j2735.common.LaneWidth; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_GeometricProjection; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class GeometricProjection extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "direction") + @JsonProperty("direction") + private HeadingSlice direction; + @Asn1Property(tag = 1, name = "extent", optional = true) + @JsonProperty("extent") + private Extent extent; + @Asn1Property(tag = 2, name = "laneWidth", optional = true) + @JsonProperty("laneWidth") + private LaneWidth laneWidth; + @Asn1Property(tag = 3, name = "circle") + @JsonProperty("circle") + private Circle circle; + @Asn1Property(tag = 4, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_GeometricProjection.class, 1L, 4L); + } + } + + GeometricProjection() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ITIStextPhrase.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ITIStextPhrase.java new file mode 100644 index 000000000..db066f0c9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ITIStextPhrase.java @@ -0,0 +1,39 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import us.dot.its.jpo.ode.plugin.types.IA5String; + +public class ITIStextPhrase extends IA5String { + + public ITIStextPhrase() { + super(1, 16); + } + + @JsonCreator + public ITIStextPhrase(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCode.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCode.java new file mode 100644 index 000000000..f14d62179 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCode.java @@ -0,0 +1,52 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = MUTCDCodeSerializer.class) +@JsonDeserialize(using = MUTCDCodeDeserializer.class) +public enum MUTCDCode implements Asn1Enumerated { + NONE(0, "none"), REGULATORY(1, "regulatory"), WARNING(2, "warning"), MAINTENANCE(3, + "maintenance"), MOTORISTSERVICE(4, "motoristService"), GUIDE(5, "guide"), REC(6, "rec"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private MUTCDCode(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 6; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCodeDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCodeDeserializer.java new file mode 100644 index 000000000..31f24e527 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCodeDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class MUTCDCodeDeserializer extends EnumeratedDeserializer { + + MUTCDCodeDeserializer() { + super(MUTCDCode.class); + } + + @Override + protected MUTCDCode[] listEnumValues() { + return MUTCDCode.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCodeSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCodeSerializer.java new file mode 100644 index 000000000..d9418e9ad --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCodeSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class MUTCDCodeSerializer extends EnumeratedSerializer { + + MUTCDCodeSerializer() { + super(MUTCDCode.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MinutesDuration.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MinutesDuration.java new file mode 100644 index 000000000..ea4e0e390 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MinutesDuration.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = MinutesDuration.MinutesDurationDeserializer.class) +public class MinutesDuration extends Asn1Integer { + + public MinutesDuration() { + super(0L, 32000L); + } + + @JsonCreator + public MinutesDuration(long value) { + this(); + this.value = value; + } + + public static class MinutesDurationDeserializer extends IntegerDeserializer { + public MinutesDurationDeserializer() { + super(MinutesDuration.class); + } + + @Override + protected MinutesDuration construct() { + return new MinutesDuration(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MsgCRC.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MsgCRC.java new file mode 100644 index 000000000..54d976060 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MsgCRC.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import us.dot.its.jpo.ode.plugin.types.Asn1OctetString; + +public class MsgCRC extends Asn1OctetString { + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return value; + } + + public MsgCRC() { + super(2, 2); + } + + @JsonCreator + public MsgCRC(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLL.java new file mode 100644 index 000000000..02f729046 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLL.java @@ -0,0 +1,55 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = NodeAttributeLLSerializer.class) +@JsonDeserialize(using = NodeAttributeLLDeserializer.class) +public enum NodeAttributeLL implements Asn1Enumerated { + RESERVED(0, "reserved"), STOPLINE(1, "stopLine"), ROUNDEDCAPSTYLEA(2, "roundedCapStyleA"), ROUNDEDCAPSTYLEB(3, + "roundedCapStyleB"), MERGEPOINT(4, "mergePoint"), DIVERGEPOINT(5, "divergePoint"), DOWNSTREAMSTOPLINE(6, + "downstreamStopLine"), DOWNSTREAMSTARTNODE(7, "downstreamStartNode"), CLOSEDTOTRAFFIC(8, + "closedToTraffic"), SAFEISLAND(9, "safeIsland"), CURBPRESENTATSTEPOFF(10, + "curbPresentAtStepOff"), HYDRANTPRESENT(11, "hydrantPresent"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private NodeAttributeLL(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 11; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLDeserializer.java new file mode 100644 index 000000000..7621e8150 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class NodeAttributeLLDeserializer extends EnumeratedDeserializer { + + NodeAttributeLLDeserializer() { + super(NodeAttributeLL.class); + } + + @Override + protected NodeAttributeLL[] listEnumValues() { + return NodeAttributeLL.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLList.java new file mode 100644 index 000000000..f8a63b584 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLList.java @@ -0,0 +1,54 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.serialization.SequenceOfEnumeratedDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class NodeAttributeLLList extends Asn1SequenceOf { + + NodeAttributeLLList() { + super(NodeAttributeLL.class, 1L, 8L); + } + + public static class NodeAttributeLLListDeserializer + extends + SequenceOfEnumeratedDeserializer { + public NodeAttributeLLListDeserializer() { + super(NodeAttributeLLList.class, NodeAttributeLL.class); + } + + @Override + protected NodeAttributeLL[] listEnumValues() { + return NodeAttributeLL.values(); + } + + @Override + protected NodeAttributeLLList construct() { + return new NodeAttributeLLList(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLSerializer.java new file mode 100644 index 000000000..508fcb134 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class NodeAttributeLLSerializer extends EnumeratedSerializer { + + NodeAttributeLLSerializer() { + super(NodeAttributeLL.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeSetLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeSetLL.java new file mode 100644 index 000000000..405183c27 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeSetLL.java @@ -0,0 +1,83 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.LaneDataAttributeList; +import us.dot.its.jpo.ode.plugin.j2735.common.Offset_B10; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_NodeAttributeSetLL; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class NodeAttributeSetLL extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "localNode", optional = true) + @JsonProperty("localNode") + @JsonDeserialize(using = NodeAttributeLLList.NodeAttributeLLListDeserializer.class) + private NodeAttributeLLList localNode; + @Asn1Property(tag = 1, name = "disabled", optional = true) + @JsonProperty("disabled") + @JsonDeserialize(using = SegmentAttributeLLList.SegmentAttributeLLListDeserializer.class) + private SegmentAttributeLLList disabled; + @Asn1Property(tag = 2, name = "enabled", optional = true) + @JsonProperty("enabled") + @JsonDeserialize(using = SegmentAttributeLLList.SegmentAttributeLLListDeserializer.class) + private SegmentAttributeLLList enabled; + @Asn1Property(tag = 3, name = "data", optional = true) + @JsonProperty("data") + @JsonSerialize(using = LaneDataAttributeList.LaneDataAttributeListSerializer.class) + @JsonDeserialize(using = LaneDataAttributeList.LaneDataAttributeListDeserializer.class) + private LaneDataAttributeList data; + @Asn1Property(tag = 4, name = "dWidth", optional = true) + @JsonProperty("dWidth") + private Offset_B10 dWidth; + @Asn1Property(tag = 5, name = "dElevation", optional = true) + @JsonProperty("dElevation") + private Offset_B10 dElevation; + @Asn1Property(tag = 6, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_NodeAttributeSetLL.class, 1L, 4L); + } + } + + NodeAttributeSetLL() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeLL.java new file mode 100644 index 000000000..7247ae614 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeLL.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class NodeLL extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "delta") + @JsonProperty("delta") + private NodeOffsetPointLL delta; + @Asn1Property(tag = 1, name = "attributes", optional = true) + @JsonProperty("attributes") + private NodeAttributeSetLL attributes; + + NodeLL() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeListLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeListLL.java new file mode 100644 index 000000000..c5f98d200 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeListLL.java @@ -0,0 +1,49 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; + +@Getter +@Setter +@JsonInclude(Include.NON_NULL) +public class NodeListLL extends Asn1Choice { + + @Asn1Property(tag = 0, name = "nodes") + @JsonProperty("nodes") + @JacksonXmlElementWrapper(localName = "nodes") + @JacksonXmlProperty(localName = "NodeLL") + private NodeSetLL nodes; + + NodeListLL() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeOffsetPointLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeOffsetPointLL.java new file mode 100644 index 000000000..c3f131082 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeOffsetPointLL.java @@ -0,0 +1,68 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.Node_LLmD_64b; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_NodeOffsetPointLL; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; + +@Getter +@Setter +@JsonInclude(Include.NON_NULL) +public class NodeOffsetPointLL extends Asn1Choice { + + @Asn1Property(tag = 0, name = "node-LL1") + @JsonProperty("node-LL1") + private Node_LL_24B node_LL1; + @Asn1Property(tag = 1, name = "node-LL2") + @JsonProperty("node-LL2") + private Node_LL_28B node_LL2; + @Asn1Property(tag = 2, name = "node-LL3") + @JsonProperty("node-LL3") + private Node_LL_32B node_LL3; + @Asn1Property(tag = 3, name = "node-LL4") + @JsonProperty("node-LL4") + private Node_LL_36B node_LL4; + @Asn1Property(tag = 4, name = "node-LL5") + @JsonProperty("node-LL5") + private Node_LL_44B node_LL5; + @Asn1Property(tag = 5, name = "node-LL6") + @JsonProperty("node-LL6") + private Node_LL_48B node_LL6; + @Asn1Property(tag = 6, name = "node-LatLon") + @JsonProperty("node-LatLon") + private Node_LLmD_64b node_LatLon; + @Asn1Property(tag = 7, name = "regional") + @JsonProperty("regional") + private Reg_NodeOffsetPointLL regional; + + NodeOffsetPointLL() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeSetLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeSetLL.java new file mode 100644 index 000000000..beb77e1fc --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeSetLL.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class NodeSetLL extends Asn1SequenceOf { + + NodeSetLL() { + super(NodeLL.class, 2L, 63L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_24B.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_24B.java new file mode 100644 index 000000000..d18ddfbce --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_24B.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B12; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LL_24B extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private OffsetLL_B12 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private OffsetLL_B12 lat; + + Node_LL_24B() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_28B.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_28B.java new file mode 100644 index 000000000..eb8294ef1 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_28B.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B14; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LL_28B extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private OffsetLL_B14 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private OffsetLL_B14 lat; + + Node_LL_28B() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_32B.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_32B.java new file mode 100644 index 000000000..8d128491a --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_32B.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B16; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LL_32B extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private OffsetLL_B16 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private OffsetLL_B16 lat; + + Node_LL_32B() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_36B.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_36B.java new file mode 100644 index 000000000..439cf372f --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_36B.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B18; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LL_36B extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private OffsetLL_B18 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private OffsetLL_B18 lat; + + Node_LL_36B() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_44B.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_44B.java new file mode 100644 index 000000000..571ca2a98 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_44B.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B22; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LL_44B extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private OffsetLL_B22 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private OffsetLL_B22 lat; + + Node_LL_44B() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_48B.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_48B.java new file mode 100644 index 000000000..b93dec8cd --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_48B.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B24; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LL_48B extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private OffsetLL_B24 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private OffsetLL_B24 lat; + + Node_LL_48B() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/OffsetSystem.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/OffsetSystem.java new file mode 100644 index 000000000..ded65d7f4 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/OffsetSystem.java @@ -0,0 +1,68 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.NodeListXY; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class OffsetSystem extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "scale", optional = true) + @JsonProperty("scale") + private Zoom scale; + @Asn1Property(tag = 1, name = "offset") + @JsonProperty("offset") + private OffsetChoice offset; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class OffsetChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "xy") + @JsonProperty("xy") + private NodeListXY xy; + @Asn1Property(tag = 1, name = "ll") + @JsonProperty("ll") + private NodeListLL ll; + + OffsetChoice() { + super(false); + } + } + + OffsetSystem() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Radius_B12.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Radius_B12.java new file mode 100644 index 000000000..5d75071dd --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Radius_B12.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Radius_B12.Radius_B12Deserializer.class) +public class Radius_B12 extends Asn1Integer { + + public Radius_B12() { + super(0L, 4095L); + } + + @JsonCreator + public Radius_B12(long value) { + this(); + this.value = value; + } + + public static class Radius_B12Deserializer extends IntegerDeserializer { + public Radius_B12Deserializer() { + super(Radius_B12.class); + } + + @Override + protected Radius_B12 construct() { + return new Radius_B12(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionList.java new file mode 100644 index 000000000..d74e70b05 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionList.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class RegionList extends Asn1SequenceOf { + + RegionList() { + super(RegionOffsets.class, 1L, 64L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionOffsets.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionOffsets.java new file mode 100644 index 000000000..f4f392fd6 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionOffsets.java @@ -0,0 +1,54 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B16; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class RegionOffsets extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "xOffset") + @JsonProperty("xOffset") + private OffsetLL_B16 xOffset; + @Asn1Property(tag = 1, name = "yOffset") + @JsonProperty("yOffset") + private OffsetLL_B16 yOffset; + @Asn1Property(tag = 2, name = "zOffset", optional = true) + @JsonProperty("zOffset") + private OffsetLL_B16 zOffset; + + RegionOffsets() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionPointSet.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionPointSet.java new file mode 100644 index 000000000..ad261e6bb --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionPointSet.java @@ -0,0 +1,58 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.Position3D; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class RegionPointSet extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "anchor", optional = true) + @JsonProperty("anchor") + private Position3D anchor; + @Asn1Property(tag = 1, name = "scale", optional = true) + @JsonProperty("scale") + private Zoom scale; + @Asn1Property(tag = 2, name = "nodeList") + @JsonProperty("nodeList") + @JacksonXmlElementWrapper(localName = "nodeList") + @JacksonXmlProperty(localName = "RegionOffsets") + private RegionList nodeList; + + RegionPointSet() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RoadSignID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RoadSignID.java new file mode 100644 index 000000000..bf8582829 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RoadSignID.java @@ -0,0 +1,58 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.HeadingSlice; +import us.dot.its.jpo.ode.plugin.j2735.common.Position3D; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class RoadSignID extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "position") + @JsonProperty("position") + private Position3D position; + @Asn1Property(tag = 1, name = "viewAngle") + @JsonProperty("viewAngle") + private HeadingSlice viewAngle; + @Asn1Property(tag = 2, name = "mutcdCode", optional = true) + @JsonProperty("mutcdCode") + private MUTCDCode mutcdCode; + @Asn1Property(tag = 3, name = "crc", optional = true) + @JsonProperty("crc") + private MsgCRC crc; + + RoadSignID() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLL.java new file mode 100644 index 000000000..cd1cb6fbd --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLL.java @@ -0,0 +1,103 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = SegmentAttributeLLSerializer.class) +@JsonDeserialize(using = SegmentAttributeLLDeserializer.class) +public enum SegmentAttributeLL implements Asn1Enumerated { + RESERVED(0, "reserved"), DONOTBLOCK(1, "doNotBlock"), WHITELINE(2, "whiteLine"), MERGINGLANELEFT(3, + "mergingLaneLeft"), MERGINGLANERIGHT(4, "mergingLaneRight"), CURBONLEFT(5, "curbOnLeft"), CURBONRIGHT(6, + "curbOnRight"), LOADINGZONEONLEFT(7, "loadingzoneOnLeft"), LOADINGZONEONRIGHT(8, + "loadingzoneOnRight"), TURNOUTPOINTONLEFT(9, "turnOutPointOnLeft"), TURNOUTPOINTONRIGHT(10, + "turnOutPointOnRight"), ADJACENTPARKINGONLEFT(11, + "adjacentParkingOnLeft"), ADJACENTPARKINGONRIGHT(12, + "adjacentParkingOnRight"), ADJACENTBIKELANEONLEFT(13, + "adjacentBikeLaneOnLeft"), ADJACENTBIKELANEONRIGHT(14, + "adjacentBikeLaneOnRight"), SHAREDBIKELANE(15, + "sharedBikeLane"), BIKEBOXINFRONT(16, + "bikeBoxInFront"), TRANSITSTOPONLEFT( + 17, + "transitStopOnLeft"), TRANSITSTOPONRIGHT( + 18, + "transitStopOnRight"), TRANSITSTOPINLANE( + 19, + "transitStopInLane"), SHAREDWITHTRACKEDVEHICLE( + 20, + "sharedWithTrackedVehicle"), SAFEISLAND( + 21, + "safeIsland"), LOWCURBSPRESENT( + 22, + "lowCurbsPresent"), RUMBLESTRIPPRESENT( + 23, + "rumbleStripPresent"), AUDIBLESIGNALINGPRESENT( + 24, + "audibleSignalingPresent"), ADAPTIVETIMINGPRESENT( + 25, + "adaptiveTimingPresent"), RFSIGNALREQUESTPRESENT( + 26, + "rfSignalRequestPresent"), PARTIALCURBINTRUSION( + 27, + "partialCurbIntrusion"), TAPERTOLEFT( + 28, + "taperToLeft"), TAPERTORIGHT( + 29, + "taperToRight"), TAPERTOCENTERLINE( + 30, + "taperToCenterLine"), PARALLELPARKING( + 31, + "parallelParking"), HEADINPARKING( + 32, + "headInParking"), FREEPARKING( + 33, + "freeParking"), TIMERESTRICTIONSONPARKING( + 34, + "timeRestrictionsOnParking"), COSTTOPARK( + 35, + "costToPark"), MIDBLOCKCURBPRESENT( + 36, + "midBlockCurbPresent"), UNEVENPAVEMENTPRESENT( + 37, + "unEvenPavementPresent"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private SegmentAttributeLL(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 37; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLDeserializer.java new file mode 100644 index 000000000..e301cda4a --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class SegmentAttributeLLDeserializer extends EnumeratedDeserializer { + + SegmentAttributeLLDeserializer() { + super(SegmentAttributeLL.class); + } + + @Override + protected SegmentAttributeLL[] listEnumValues() { + return SegmentAttributeLL.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLList.java new file mode 100644 index 000000000..9736b4f0d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLList.java @@ -0,0 +1,54 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.serialization.SequenceOfEnumeratedDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class SegmentAttributeLLList extends Asn1SequenceOf { + + SegmentAttributeLLList() { + super(SegmentAttributeLL.class, 1L, 8L); + } + + public static class SegmentAttributeLLListDeserializer + extends + SequenceOfEnumeratedDeserializer { + public SegmentAttributeLLListDeserializer() { + super(SegmentAttributeLLList.class, SegmentAttributeLL.class); + } + + @Override + protected SegmentAttributeLL[] listEnumValues() { + return SegmentAttributeLL.values(); + } + + @Override + protected SegmentAttributeLLList construct() { + return new SegmentAttributeLLList(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLSerializer.java new file mode 100644 index 000000000..8c933cc0c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class SegmentAttributeLLSerializer extends EnumeratedSerializer { + + SegmentAttributeLLSerializer() { + super(SegmentAttributeLL.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ShapePointSet.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ShapePointSet.java new file mode 100644 index 000000000..f0852af82 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ShapePointSet.java @@ -0,0 +1,59 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.LaneWidth; +import us.dot.its.jpo.ode.plugin.j2735.common.NodeListXY; +import us.dot.its.jpo.ode.plugin.j2735.common.Position3D; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class ShapePointSet extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "anchor", optional = true) + @JsonProperty("anchor") + private Position3D anchor; + @Asn1Property(tag = 1, name = "laneWidth", optional = true) + @JsonProperty("laneWidth") + private LaneWidth laneWidth; + @Asn1Property(tag = 2, name = "directionality", optional = true) + @JsonProperty("directionality") + private DirectionOfUse directionality; + @Asn1Property(tag = 3, name = "nodeList") + @JsonProperty("nodeList") + private NodeListXY nodeList; + + ShapePointSet() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SignPrority.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SignPrority.java new file mode 100644 index 000000000..69fdf27c8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SignPrority.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = SignPrority.SignProrityDeserializer.class) +public class SignPrority extends Asn1Integer { + + public SignPrority() { + super(0L, 7L); + } + + @JsonCreator + public SignPrority(long value) { + this(); + this.value = value; + } + + public static class SignProrityDeserializer extends IntegerDeserializer { + public SignProrityDeserializer() { + super(SignPrority.class); + } + + @Override + protected SignPrority construct() { + return new SignPrority(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SpeedLimit.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SpeedLimit.java new file mode 100644 index 000000000..b7d83248c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SpeedLimit.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class SpeedLimit extends Asn1SequenceOf { + + SpeedLimit() { + super(SpeedLimitSequence.class, 1L, 16L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SpeedLimitSequence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SpeedLimitSequence.java new file mode 100644 index 000000000..427028322 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SpeedLimitSequence.java @@ -0,0 +1,65 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.itis.ITIScodes; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class SpeedLimitSequence extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "item") + @JsonProperty("item") + private ItemChoice item; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ItemChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "itis") + @JsonProperty("itis") + private ITIScodes itis; + @Asn1Property(tag = 1, name = "text") + @JsonProperty("text") + private ITIStextPhrase text; + + ItemChoice() { + super(false); + } + } + + SpeedLimitSequence() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrame.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrame.java new file mode 100644 index 000000000..442e9a683 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrame.java @@ -0,0 +1,216 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.DYear; +import us.dot.its.jpo.ode.plugin.j2735.common.FurtherInfoID; +import us.dot.its.jpo.ode.plugin.j2735.common.MinuteOfTheYear; +import us.dot.its.jpo.ode.plugin.j2735.common.SSPindex; +import us.dot.its.jpo.ode.plugin.j2735.itis.ITIScodesAndText; +import us.dot.its.jpo.ode.plugin.serialization.NestedSequenceOfDeserializer; +import us.dot.its.jpo.ode.plugin.serialization.NestedSequenceOfSerializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/* + * EDITED -> notUsed, notUsed1, notUsed2, notUsed3, durationTime fields. + */ + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class TravelerDataFrame extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "notUsed") + @JsonProperty("notUsed") + private SSPindex notUsed; + @Asn1Property(tag = 1, name = "frameType") + @JsonProperty("frameType") + private TravelerInfoType frameType; + @Asn1Property(tag = 2, name = "msgId") + @JsonProperty("msgId") + private MsgIdChoice msgId; + @Asn1Property(tag = 3, name = "startYear", optional = true) + @JsonProperty("startYear") + private DYear startYear; + @Asn1Property(tag = 4, name = "startTime") + @JsonProperty("startTime") + private MinuteOfTheYear startTime; + @Asn1Property(tag = 5, name = "durationTime") + @JsonProperty("durationTime") + private MinutesDuration durationTime; + @Asn1Property(tag = 6, name = "priority") + @JsonProperty("priority") + private SignPrority priority; + @Asn1Property(tag = 7, name = "notUsed1") + @JsonProperty("notUsed1") + private SSPindex notUsed1; + @Asn1Property(tag = 8, name = "regions") + @JsonProperty("regions") + private SequenceOfRegions regions; + @Asn1Property(tag = 9, name = "notUsed2") + @JsonProperty("notUsed2") + private SSPindex notUsed2; + @Asn1Property(tag = 10, name = "notUsed3") + @JsonProperty("notUsed3") + private SSPindex notUsed3; + @Asn1Property(tag = 11, name = "content") + @JsonProperty("content") + private ContentChoice content; + @Asn1Property(tag = 12, name = "url", optional = true) + @JsonProperty("url") + private URL_Short url; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class MsgIdChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "furtherInfoID") + @JsonProperty("furtherInfoID") + private FurtherInfoID furtherInfoID; + @Asn1Property(tag = 1, name = "roadSignID") + @JsonProperty("roadSignID") + private RoadSignID roadSignID; + + MsgIdChoice() { + super(false); + } + } + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegions extends Asn1SequenceOf { + SequenceOfRegions() { + super(GeographicalPath.class, 1L, 16L); + } + } + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ContentChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "advisory") + @JsonProperty("advisory") + @JsonDeserialize(using = AdvisoryDeserializer.class) + @JsonSerialize(using = AdvisorySerializer.class) + private ITIScodesAndText advisory; + @Asn1Property(tag = 1, name = "workZone") + @JsonProperty("workZone") + @JsonDeserialize(using = WorkZoneDeserializer.class) + @JsonSerialize(using = WorkZoneSerializer.class) + private WorkZone workZone; + @Asn1Property(tag = 2, name = "genericSign") + @JsonProperty("genericSign") + @JsonDeserialize(using = GenericSignDeserializer.class) + @JsonSerialize(using = GenericSignSerializer.class) + private GenericSignage genericSign; + @Asn1Property(tag = 3, name = "speedLimit") + @JsonProperty("speedLimit") + @JsonDeserialize(using = SpeedLimitDeserializer.class) + @JsonSerialize(using = SpeedLimitSerializer.class) + private SpeedLimit speedLimit; + @Asn1Property(tag = 4, name = "exitService") + @JsonProperty("exitService") + @JsonDeserialize(using = ExitServiceDeserializer.class) + @JsonSerialize(using = ExitServiceSerializer.class) + private ExitService exitService; + + ContentChoice() { + super(false); + } + } + + TravelerDataFrame() { + super(true); + } + + public static class AdvisoryDeserializer extends NestedSequenceOfDeserializer { + public AdvisoryDeserializer() { + super(ITIScodesAndText.class, "SEQUENCE"); + } + } + + public static class AdvisorySerializer extends NestedSequenceOfSerializer { + public AdvisorySerializer() { + super(ITIScodesAndText.class, "SEQUENCE"); + } + } + + public static class WorkZoneDeserializer extends NestedSequenceOfDeserializer { + public WorkZoneDeserializer() { + super(WorkZone.class, "SEQUENCE"); + } + } + + public static class WorkZoneSerializer extends NestedSequenceOfSerializer { + public WorkZoneSerializer() { + super(WorkZone.class, "SEQUENCE"); + } + } + + public static class GenericSignDeserializer extends NestedSequenceOfDeserializer { + public GenericSignDeserializer() { + super(GenericSignage.class, "SEQUENCE"); + } + } + + public static class GenericSignSerializer extends NestedSequenceOfSerializer { + public GenericSignSerializer() { + super(GenericSignage.class, "SEQUENCE"); + } + } + + public static class SpeedLimitDeserializer extends NestedSequenceOfDeserializer { + public SpeedLimitDeserializer() { + super(SpeedLimit.class, "SEQUENCE"); + } + } + + public static class SpeedLimitSerializer extends NestedSequenceOfSerializer { + public SpeedLimitSerializer() { + super(SpeedLimit.class, "SEQUENCE"); + } + } + + public static class ExitServiceDeserializer extends NestedSequenceOfDeserializer { + public ExitServiceDeserializer() { + super(ExitService.class, "SEQUENCE"); + } + } + + public static class ExitServiceSerializer extends NestedSequenceOfSerializer { + public ExitServiceSerializer() { + super(ExitService.class, "SEQUENCE"); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrame.java.bak b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrame.java.bak new file mode 100644 index 000000000..b109ee671 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrame.java.bak @@ -0,0 +1,218 @@ +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.j2735.common.DYear; +import us.dot.its.jpo.ode.plugin.j2735.common.FurtherInfoID; +import us.dot.its.jpo.ode.plugin.j2735.common.MinuteOfTheYear; +import us.dot.its.jpo.ode.plugin.j2735.common.SSPindex; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import java.util.List; +import java.util.Optional; +import us.dot.its.jpo.ode.plugin.types.Asn1Type; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; +import us.dot.its.jpo.ode.plugin.j2735.itis.ITIScodesAndText; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.NestedSequenceOfDeserializer; +import us.dot.its.jpo.ode.plugin.serialization.NestedSequenceOfSerializer; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +/* + * EDITED -> notUsed, notUsed1, notUsed2, notUsed3, durationTime fields. + */ + +/** + * + ******************************************************************************* + * + * This source file was generated by a tool. Beware manual edits might be + * overwritten in future releases. asn1jvm v1.0-SNAPSHOT + * + ******************************************************************************* + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + ****************************************************************************** + * + */ +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class TravelerDataFrame extends Asn1Sequence { + + @Asn1Property(tag = 0) + @JsonDeserialize(using = SSPindex.SSPindexDeserializer.class) + private SSPindex notUsed; + @Asn1Property(tag = 1) + private TravelerInfoType frameType; + @Asn1Property(tag = 2) + private MsgIdChoice msgId; + @Asn1Property(tag = 3, optional = true) + @JsonDeserialize(using = DYear.DYearDeserializer.class) + private DYear startYear; + @Asn1Property(tag = 4) + @JsonDeserialize(using = MinuteOfTheYear.MinuteOfTheYearDeserializer.class) + private MinuteOfTheYear startTime; + @Asn1Property(tag = 5) + @JsonDeserialize(using = MinutesDuration.MinutesDurationDeserializer.class) + private MinutesDuration durationTime; + @Asn1Property(tag = 6) + @JsonDeserialize(using = SignPrority.SignProrityDeserializer.class) + private SignPrority priority; + @Asn1Property(tag = 7) + @JsonDeserialize(using = SSPindex.SSPindexDeserializer.class) + private SSPindex notUsed1; + @Asn1Property(tag = 8) + private SequenceOfRegions regions; + @Asn1Property(tag = 9) + @JsonDeserialize(using = SSPindex.SSPindexDeserializer.class) + private SSPindex notUsed2; + @Asn1Property(tag = 10) + @JsonDeserialize(using = SSPindex.SSPindexDeserializer.class) + private SSPindex notUsed3; + @Asn1Property(tag = 11) + private ContentChoice content; + @Asn1Property(tag = 12, optional = true) + private URL_Short url; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class MsgIdChoice extends Asn1Choice { + @Asn1Property(tag = 0) + private FurtherInfoID furtherInfoID; + @Asn1Property(tag = 1) + private RoadSignID roadSignID; + + MsgIdChoice() { + super(false); + } + + @Override + protected List> listTypes() { + return null; + } + } + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegions extends Asn1SequenceOf { + SequenceOfRegions() { + super(GeographicalPath.class, 1L, 16L); + } + } + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ContentChoice extends Asn1Choice { + @Asn1Property(tag = 0) + @JsonDeserialize(using = AdvisoryDeserializer.class) + @JsonSerialize(using = AdvisorySerializer.class) + private ITIScodesAndText advisory; + @Asn1Property(tag = 1) + @JsonDeserialize(using = WorkZoneDeserializer.class) + @JsonSerialize(using = WorkZoneSerializer.class) + private WorkZone workZone; + @Asn1Property(tag = 2) + @JsonDeserialize(using = GenericSignDeserializer.class) + @JsonSerialize(using = GenericSignSerializer.class) + private GenericSignage genericSign; + @Asn1Property(tag = 3) + @JsonDeserialize(using = SpeedLimitDeserializer.class) + @JsonSerialize(using = SpeedLimitSerializer.class) + private SpeedLimit speedLimit; + @Asn1Property(tag = 4) + @JsonDeserialize(using = ExitServiceDeserializer.class) + @JsonSerialize(using = ExitServiceSerializer.class) + private ExitService exitService; + + ContentChoice() { + super(false); + } + + @Override + protected List> listTypes() { + return null; + } + } + + TravelerDataFrame() { + super(true); + } + + public static class AdvisoryDeserializer extends NestedSequenceOfDeserializer { + public AdvisoryDeserializer() { + super(ITIScodesAndText.class, "SEQUENCE"); + } + } + + public static class AdvisorySerializer extends NestedSequenceOfSerializer { + public AdvisorySerializer() { + super(ITIScodesAndText.class, "SEQUENCE"); + } + } + + public static class WorkZoneDeserializer extends NestedSequenceOfDeserializer { + public WorkZoneDeserializer() { + super(WorkZone.class, "SEQUENCE"); + } + } + + public static class WorkZoneSerializer extends NestedSequenceOfSerializer { + public WorkZoneSerializer() { + super(WorkZone.class, "SEQUENCE"); + } + } + + public static class GenericSignDeserializer extends NestedSequenceOfDeserializer { + public GenericSignDeserializer() { + super(GenericSignage.class, "SEQUENCE"); + } + } + + public static class GenericSignSerializer extends NestedSequenceOfSerializer { + public GenericSignSerializer() { + super(GenericSignage.class, "SEQUENCE"); + } + } + + public static class SpeedLimitDeserializer extends NestedSequenceOfDeserializer { + public SpeedLimitDeserializer() { + super(SpeedLimit.class, "SEQUENCE"); + } + } + + public static class SpeedLimitSerializer extends NestedSequenceOfSerializer { + public SpeedLimitSerializer() { + super(SpeedLimit.class, "SEQUENCE"); + } + } + + public static class ExitServiceDeserializer extends NestedSequenceOfDeserializer { + public ExitServiceDeserializer() { + super(ExitService.class, "SEQUENCE"); + } + } + + public static class ExitServiceSerializer extends NestedSequenceOfSerializer { + public ExitServiceSerializer() { + super(ExitService.class, "SEQUENCE"); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrameList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrameList.java new file mode 100644 index 000000000..c2e61d33e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrameList.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class TravelerDataFrameList extends Asn1SequenceOf { + + TravelerDataFrameList() { + super(TravelerDataFrame.class, 1L, 8L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoType.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoType.java new file mode 100644 index 000000000..98b67f24e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoType.java @@ -0,0 +1,52 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = TravelerInfoTypeSerializer.class) +@JsonDeserialize(using = TravelerInfoTypeDeserializer.class) +public enum TravelerInfoType implements Asn1Enumerated { + UNKNOWN(0, "unknown"), ADVISORY(1, "advisory"), ROADSIGNAGE(2, "roadSignage"), COMMERCIALSIGNAGE(3, + "commercialSignage"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private TravelerInfoType(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 3; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoTypeDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoTypeDeserializer.java new file mode 100644 index 000000000..a3ee44c96 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoTypeDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class TravelerInfoTypeDeserializer extends EnumeratedDeserializer { + + TravelerInfoTypeDeserializer() { + super(TravelerInfoType.class); + } + + @Override + protected TravelerInfoType[] listEnumValues() { + return TravelerInfoType.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoTypeSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoTypeSerializer.java new file mode 100644 index 000000000..f12fca3eb --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoTypeSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class TravelerInfoTypeSerializer extends EnumeratedSerializer { + + TravelerInfoTypeSerializer() { + super(TravelerInfoType.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInformation.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInformation.java new file mode 100644 index 000000000..3c87e3e17 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInformation.java @@ -0,0 +1,79 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +import us.dot.its.jpo.ode.plugin.j2735.common.MinuteOfTheYear; +import us.dot.its.jpo.ode.plugin.j2735.common.MsgCount; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_TravelerInformation; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/* + * EDITED - Changed base class to Asn1Object, removed call to super constructor. + */ + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class TravelerInformation extends Asn1Object { + + @Asn1Property(tag = 0, name = "msgCnt") + @JsonProperty("msgCnt") + private MsgCount msgCnt; + @Asn1Property(tag = 1, name = "timeStamp", optional = true) + @JsonProperty("timeStamp") + private MinuteOfTheYear timeStamp; + @Asn1Property(tag = 2, name = "packetID", optional = true) + @JsonProperty("packetID") + private UniqueMSGID packetID; + @Asn1Property(tag = 3, name = "urlB", optional = true) + @JsonProperty("urlB") + private URL_Base urlB; + @Asn1Property(tag = 4, name = "dataFrames") + @JsonProperty("dataFrames") + @JacksonXmlElementWrapper(localName = "dataFrames") + @JacksonXmlProperty(localName = "TravelerDataFrame") + private TravelerDataFrameList dataFrames; + @Asn1Property(tag = 5, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_TravelerInformation.class, 1L, 4L); + } + } + + +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInformation.java.bak b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInformation.java.bak new file mode 100644 index 000000000..acc409ab7 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInformation.java.bak @@ -0,0 +1,79 @@ +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_TravelerInformation; +import us.dot.its.jpo.ode.plugin.j2735.common.MinuteOfTheYear; +import us.dot.its.jpo.ode.plugin.j2735.common.MsgCount; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; + +/* + * EDITED - Changed base class to Asn1Object + */ + +/** + * EDITED - Change base class to Asn1Object + ******************************************************************************* + * + * This source file was generated by a tool. Beware manual edits might be + * overwritten in future releases. asn1jvm v1.0-SNAPSHOT + * + ******************************************************************************* + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + ****************************************************************************** + * + */ +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class TravelerInformation extends Asn1Object { + + @Asn1Property(tag = 0) + @JsonDeserialize(using = MsgCount.MsgCountDeserializer.class) + private MsgCount msgCnt; + @Asn1Property(tag = 1, optional = true) + @JsonDeserialize(using = MinuteOfTheYear.MinuteOfTheYearDeserializer.class) + private MinuteOfTheYear timeStamp; + @Asn1Property(tag = 2, optional = true) + private UniqueMSGID packetID; + @Asn1Property(tag = 3, optional = true) + private URL_Base urlB; + @Asn1Property(tag = 4) + @JacksonXmlElementWrapper(localName = "dataFrames") + @JacksonXmlProperty(localName = "TravelerDataFrame") + private TravelerDataFrameList dataFrames; + @Asn1Property(tag = 5, optional = true) + private SequenceOfRegional regional; + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_TravelerInformation.class, 1L, 4L); + } + } + +// TravelerInformation() { +// super(true); +// } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/URL_Base.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/URL_Base.java new file mode 100644 index 000000000..f04bade78 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/URL_Base.java @@ -0,0 +1,39 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import us.dot.its.jpo.ode.plugin.types.IA5String; + +public class URL_Base extends IA5String { + + public URL_Base() { + super(1, 45); + } + + @JsonCreator + public URL_Base(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/URL_Short.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/URL_Short.java new file mode 100644 index 000000000..05c0d6ce3 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/URL_Short.java @@ -0,0 +1,39 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import us.dot.its.jpo.ode.plugin.types.IA5String; + +public class URL_Short extends IA5String { + + public URL_Short() { + super(1, 15); + } + + @JsonCreator + public URL_Short(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/UniqueMSGID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/UniqueMSGID.java new file mode 100644 index 000000000..c894f2f21 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/UniqueMSGID.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import us.dot.its.jpo.ode.plugin.types.Asn1OctetString; + +public class UniqueMSGID extends Asn1OctetString { + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return value; + } + + public UniqueMSGID() { + super(9, 9); + } + + @JsonCreator + public UniqueMSGID(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ValidRegion.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ValidRegion.java new file mode 100644 index 000000000..477b4c4c0 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ValidRegion.java @@ -0,0 +1,75 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.Extent; +import us.dot.its.jpo.ode.plugin.j2735.common.HeadingSlice; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class ValidRegion extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "direction") + @JsonProperty("direction") + private HeadingSlice direction; + @Asn1Property(tag = 1, name = "extent", optional = true) + @JsonProperty("extent") + private Extent extent; + @Asn1Property(tag = 2, name = "area") + @JsonProperty("area") + private AreaChoice area; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class AreaChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "shapePointSet") + @JsonProperty("shapePointSet") + private ShapePointSet shapePointSet; + @Asn1Property(tag = 1, name = "circle") + @JsonProperty("circle") + private Circle circle; + @Asn1Property(tag = 2, name = "regionPointSet") + @JsonProperty("regionPointSet") + private RegionPointSet regionPointSet; + + AreaChoice() { + super(false); + } + } + + ValidRegion() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/WorkZone.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/WorkZone.java new file mode 100644 index 000000000..8feaeda66 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/WorkZone.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class WorkZone extends Asn1SequenceOf { + + WorkZone() { + super(WorkZoneSequence.class, 1L, 16L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/WorkZoneSequence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/WorkZoneSequence.java new file mode 100644 index 000000000..9bbf80a9b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/WorkZoneSequence.java @@ -0,0 +1,65 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.itis.ITIScodes; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class WorkZoneSequence extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "item") + @JsonProperty("item") + private ItemChoice item; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ItemChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "itis") + @JsonProperty("itis") + private ITIScodes itis; + @Asn1Property(tag = 1, name = "text") + @JsonProperty("text") + private ITIStextPhrase text; + + ItemChoice() { + super(false); + } + } + + WorkZoneSequence() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Zoom.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Zoom.java new file mode 100644 index 000000000..60c53f968 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Zoom.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Zoom.ZoomDeserializer.class) +public class Zoom extends Asn1Integer { + + public Zoom() { + super(0L, 15L); + } + + @JsonCreator + public Zoom(long value) { + this(); + this.value = value; + } + + public static class ZoomDeserializer extends IntegerDeserializer { + public ZoomDeserializer() { + super(Zoom.class); + } + + @Override + protected Zoom construct() { + return new Zoom(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BitStringDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BitStringDeserializer.java new file mode 100644 index 000000000..21b3a13ae --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BitStringDeserializer.java @@ -0,0 +1,49 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import java.io.IOException; +import java.util.Map; +import us.dot.its.jpo.ode.plugin.types.Asn1Bitstring; + +/** + * Deserialize an ASN.1 Bitstring from XER or JER. + * + *

Note that this deserializer expects ODE JSON, not standard JER. + * + * @param The bitstring type. + * @author Ivan Yourshaw + */ +public abstract class BitStringDeserializer extends StdDeserializer { + + protected abstract T construct(); + + protected BitStringDeserializer(Class valueClass) { + super(valueClass); + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + T bitstring = construct(); + if (jsonParser.getCodec() instanceof XmlMapper) { + // XML: binary + String str = jsonParser.getText(); + bitstring.fromBinaryString(str); + } else { + // ODE JSON dialect: read verbose map + TypeReference> boolMapType = new TypeReference<>() { + }; + Map map = jsonParser.readValueAs(boolMapType); + for (var keyValue : map.entrySet()) { + bitstring.set(keyValue.getKey(), keyValue.getValue()); + } + } + return bitstring; + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BitstringSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BitstringSerializer.java new file mode 100644 index 000000000..b86c73dc4 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BitstringSerializer.java @@ -0,0 +1,40 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1Bitstring; + +/** + * Serializer for ASN.1 Bitstring types to XER or JER + * + *

Note that this serializer writes ODE JSON, not standard JER. + * + * @author Ivan Yourshaw + */ +public class BitstringSerializer extends StdSerializer { + + protected BitstringSerializer() { + super(Asn1Bitstring.class); + } + + @Override + public void serialize(Asn1Bitstring asn1Bitstring, JsonGenerator jsonGenerator, + SerializerProvider serializerProvider) throws IOException { + if (serializerProvider instanceof XmlSerializerProvider) { + // XER serializes bitstrings as binary strings + jsonGenerator.writeString(asn1Bitstring.binaryString()); + } else { + // ODE JSON dialect serializes bitstrings as verbose maps + jsonGenerator.writeStartObject(); + for (int i = 0; i < asn1Bitstring.size(); i++) { + String name = asn1Bitstring.name(i); + boolean isSet = asn1Bitstring.get(i); + jsonGenerator.writeBooleanField(name, isSet); + } + jsonGenerator.writeEndObject(); + } + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BooleanDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BooleanDeserializer.java new file mode 100644 index 000000000..a8ad54e6d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BooleanDeserializer.java @@ -0,0 +1,50 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1Boolean; + +/** + * Deserializer for ASN.1 Boolean types to XER or JER + * + * @author Ivan Yourshaw + */ +@SuppressWarnings({ "unchecked" }) +public class BooleanDeserializer extends StdDeserializer { + + protected Asn1Boolean construct() { + return new Asn1Boolean(); + } + + public BooleanDeserializer() { + super(Asn1Boolean.class); + } + + protected BooleanDeserializer(Class valueType) { + super(Asn1Boolean.class); + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + Asn1Boolean result = construct(); + if (jsonParser.getCodec() instanceof XmlMapper) { + // XML: unwrap empty element + TreeNode node = jsonParser.getCodec().readTree(jsonParser); + var iterator = node.fieldNames(); + if (iterator.hasNext()) { + String str = node.fieldNames().next(); + result.setValue(Boolean.parseBoolean(str)); + } + } else { + // JSON + result.setValue(jsonParser.getBooleanValue()); + } + return (T) result; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BooleanSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BooleanSerializer.java new file mode 100644 index 000000000..a4e3b9100 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BooleanSerializer.java @@ -0,0 +1,35 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1Boolean; + +/** + * Serializer for ASN.1 Boolean types to XER or JER + * + * @author Ivan Yourshaw + */ +public class BooleanSerializer extends StdSerializer { + + protected BooleanSerializer() { + super(Asn1Boolean.class); + } + + @Override + public void serialize(Asn1Boolean asn1Boolean, JsonGenerator jsonGenerator, + SerializerProvider serializerProvider) + throws IOException { + if (serializerProvider instanceof XmlSerializerProvider) { + // XER uses and for booleans + jsonGenerator.writeStartObject(); + jsonGenerator.writeRaw(String.format("<%s/>", asn1Boolean.getValue())); + jsonGenerator.writeEndObject(); + } else { + // JER + jsonGenerator.writeBoolean(asn1Boolean.getValue()); + } + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/CharacterStringSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/CharacterStringSerializer.java new file mode 100644 index 000000000..532aa387c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/CharacterStringSerializer.java @@ -0,0 +1,25 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1CharacterString; + +/** + * Serializer for ASN.1 character string types to XER or JER + * + * @author Ivan Yourshaw + */ +public class CharacterStringSerializer extends StdSerializer { + + protected CharacterStringSerializer() { + super(Asn1CharacterString.class); + } + + @Override + public void serialize(Asn1CharacterString asn1CharacterString, JsonGenerator jsonGenerator, + SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeString(asn1CharacterString.getValue()); + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/EnumeratedDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/EnumeratedDeserializer.java new file mode 100644 index 000000000..bcb07ac83 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/EnumeratedDeserializer.java @@ -0,0 +1,55 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import java.io.IOException; +import java.util.Objects; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +/** + * Base class for ENUMERATED value deserializers to produce both XER and JER. + * + * @param The ENUMERATED type + * @author Ivan Yourshaw + */ +public abstract class EnumeratedDeserializer & Asn1Enumerated> + extends StdDeserializer { + + protected abstract T[] listEnumValues(); + + protected EnumeratedDeserializer(Class valueClass) { + super(valueClass); + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + String name = null; + if (jsonParser.getCodec() instanceof XmlMapper) { + // XML + // The enum in BASIC-XER is an empty element, so Jackson thinks it's an object + // with a key + // of that name with no value + TreeNode node = jsonParser.getCodec().readTree(jsonParser); + var iterator = node.fieldNames(); + if (iterator.hasNext()) { + name = node.fieldNames().next(); + } + } else { + // JSON + // Behaves normally: The enum name is the text + name = jsonParser.getText(); + } + for (T enumValue : listEnumValues()) { + if (Objects.equals(enumValue.getName(), name)) { + return enumValue; + } + } + + return null; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/EnumeratedSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/EnumeratedSerializer.java new file mode 100644 index 000000000..dd314cff1 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/EnumeratedSerializer.java @@ -0,0 +1,53 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +/** + * Base class for ENUMERATED value serializers to produce both XER and JER. + * + * @param The ENUMERATED type + * @author Ivan Yourshaw + */ +@SuppressWarnings({ "rawtypes" }) +public class EnumeratedSerializer extends StdSerializer { + + protected EnumeratedSerializer(Class t) { + super(t); + } + + @Override + public void serialize(T t, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) + throws IOException { + if (serializerProvider instanceof XmlSerializerProvider) { + jsonGenerator.writeStartObject(); + + // + // BASIC-XER's weird way of writing enums. + // + // Ref. ITU-T X.693 (02/2021) Sec. 8.3.7 which says: + // + // The "XMLEnumeratedValue" specified in Rec. ITU-T X.680 | ISO/IEC 8824-1, + // 20.8, shall only be + // "EmptyElementEnumerated" + // + // and ITU-T X.680 (02/2021) Sec. 20.8 which says: + // + // EmptyElementEnumerated ::= "<" & identifier "/>" + // + jsonGenerator.writeRaw(String.format("<%s/>", t.getName())); + + jsonGenerator.writeEndObject(); + } else { + // + // JER: Just write the enum value as a string like a normal person. + // Does not handle TEXT encoding instructions per X.697 sec 22.2 + // + jsonGenerator.writeString(t.getName()); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/IntegerDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/IntegerDeserializer.java new file mode 100644 index 000000000..1f1c2afb6 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/IntegerDeserializer.java @@ -0,0 +1,49 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.node.NumericNode; +import com.fasterxml.jackson.databind.node.TextNode; +import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +/** + * Base class for INTEGER value deserializers to produce both XER and JER. + * + * @param The INTEGER type + * @author Ivan Yourshaw + */ +public abstract class IntegerDeserializer extends StdDeserializer { + + protected final Class thisClass; + + protected abstract T construct(); + + protected IntegerDeserializer(Class vc) { + super(vc); + this.thisClass = vc; + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JacksonException { + T result = construct(); + if (jsonParser instanceof FromXmlParser xmlParser) { + TreeNode node = xmlParser.getCodec().readTree(xmlParser); + if (node instanceof NumericNode numNode) { + result.setValue(numNode.longValue()); + } else if (node instanceof TextNode textNode) { + // Sometimes happens, since XML values are ambiguous between text and numbers + String textValue = textNode.textValue(); + long value = Long.parseLong(textValue); + result.setValue(value); + } + } else { + result.setValue(jsonParser.readValueAs(Long.class)); + } + return result; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/NestedSequenceOfDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/NestedSequenceOfDeserializer.java new file mode 100644 index 000000000..267ffd5f5 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/NestedSequenceOfDeserializer.java @@ -0,0 +1,63 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/** + * Deserializer for nested, anonymous SEQUENCE-OF types. Handles XER's way of + * wrapping these. + * + * @param The Sequence Of type + * @author Ivan Yourshaw + */ +public class NestedSequenceOfDeserializer> extends StdDeserializer { + + protected final Class thisClass; + protected final String wrapped; + + protected NestedSequenceOfDeserializer(Class vc, String wrapped) { + super(vc); + this.thisClass = vc; + this.wrapped = wrapped; + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + T result = null; + if (jsonParser instanceof FromXmlParser xmlParser) { + // For XML, we need to remove the wrapper and distinguish between single items + // and arrays + XmlMapper xmlMapper = (XmlMapper) xmlParser.getCodec(); + TreeNode node = xmlParser.getCodec().readTree(xmlParser); + + if (node instanceof ObjectNode objectNode) { + JsonNode unwrapped = objectNode.findValue(wrapped); + if (unwrapped instanceof ObjectNode unwrappedObject) { + + // Single item not identified as array, so put it in an array + ArrayNode arrayNode = xmlMapper.createArrayNode(); + arrayNode.add(unwrappedObject); + result = xmlMapper.convertValue(arrayNode, thisClass); + + } else if (unwrapped instanceof ArrayNode arrayNode) { + + result = xmlMapper.convertValue(arrayNode, thisClass); + } + } + } else { + result = jsonParser.getCodec().readValue(jsonParser, thisClass); + } + return result; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/NestedSequenceOfSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/NestedSequenceOfSerializer.java new file mode 100644 index 000000000..154aafc73 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/NestedSequenceOfSerializer.java @@ -0,0 +1,57 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator; +import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider; +import java.io.IOException; +import javax.xml.namespace.QName; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/** + * Serializer for nested, anonymous SEQUENCT-OF types. + * + * @param The Sequence-of type + * @author Ivan Yourshaw + */ +public class NestedSequenceOfSerializer> extends StdSerializer { + + protected final QName wrapped; + + protected NestedSequenceOfSerializer(Class t, String wrapped) { + super(t); + this.wrapped = new QName(wrapped); + } + + @Override + public void serialize(T t, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) + throws IOException { + if (serializerProvider instanceof XmlSerializerProvider) { + // Wrapped XER + var xmlGen = (ToXmlGenerator) jsonGenerator; + for (var item : t) { + + xmlGen.writeRaw(String.format("<%s>", wrapped)); + var mapper = SerializationUtil.xmlMapper(); + String itemXml = mapper.writeValueAsString(item); + + // Horrible hack to write the item value without being wrapped by the class + // name. + // Probably a better way exists, but this works. + String itemClassName = item.getClass().getSimpleName(); + String startElement = String.format("<%s>", itemClassName); + String endElement = String.format("", itemClassName); + String strippedXml = itemXml.replace(startElement, "").replace(endElement, ""); + + xmlGen.writeRaw(strippedXml); + + xmlGen.writeRaw(String.format("", wrapped)); + } + + } else { + // Pass through JER + jsonGenerator.writeObject(t); + } + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/OpenTypeDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/OpenTypeDeserializer.java new file mode 100644 index 000000000..0b1858a27 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/OpenTypeDeserializer.java @@ -0,0 +1,50 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1Type; + +import static us.dot.its.jpo.ode.plugin.utils.XmlUtils.*; + +/** + * See description in {@link OpenTypeSerializer}. + * + * @author Ivan Yourshaw + */ +public abstract class OpenTypeDeserializer extends StdDeserializer { + + protected final Class thisClass; + protected final String wrapped; + + protected OpenTypeDeserializer(Class vc, String wrapped) { + super(vc); + thisClass = vc; + this.wrapped = wrapped; + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JacksonException { + T result = null; + if (jsonParser instanceof FromXmlParser xmlParser) { + // XML: Unwrap + XmlMapper xmlMapper = (XmlMapper)xmlParser.getCodec(); + TreeNode node = xmlParser.getCodec().readTree(xmlParser); + String xml = xmlMapper.writeValueAsString(node); + var tokens = tokenize(xml); + var unwrapped = unwrap(tokens); + result = xmlMapper.readValue(stringifyTokens(unwrapped), thisClass); + } else { + // JSON: pass through + result = jsonParser.getCodec().readValue(jsonParser, thisClass); + } + return result; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/OpenTypeSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/OpenTypeSerializer.java new file mode 100644 index 000000000..a672b47fc --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/OpenTypeSerializer.java @@ -0,0 +1,81 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator; +import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider; +import java.io.IOException; +import javax.xml.namespace.QName; +import us.dot.its.jpo.ode.plugin.types.Asn1Type; + +/** + * Serializer for ASN.1 "open types" which are fields without a specific type, + * for dealing with parameterized fields with value sets of different types that + * can be plugged in. In this Java implementation these are represented by type + * parameters + * in abstract types. + * + *

For example, the contents of the "value" field in a J2735 MessageFrame. + * + *

XER wraps open types with the type name like: + * + *

{@code
+ *
+ *     
+ *         19
+ *         
+ *             
+ *                 ...
+ *             
+ *         
+ *     
+ *
+ *  }
+ * + *

See XMLOpenTypeFieldValue: ITU-T Rec. X.681 (02/2021) Section 14.6. + * + *

JER does not wrap them: + * + *

{@code
+ *
+ *     {
+ *         "messageId": 19,
+ *         "value": {
+ *             ...
+ *         }
+ *     }
+ *
+ * }
+ * + *

See "Encoding of open type values", ITU-T Rec X.697 (02/2021), Sec 41. + * + * @author Ivan Yourshaw + */ +public abstract class OpenTypeSerializer extends StdSerializer { + + protected final QName wrapper; + protected final QName wrapped; + + protected OpenTypeSerializer(Class t, String wrapper, String wrapped) { + super(t); + this.wrapper = new QName(wrapper); + this.wrapped = new QName(wrapped); + } + + @Override + public void serialize(T t, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) + throws IOException { + if (serializerProvider instanceof XmlSerializerProvider) { + // Wrapped XER + var xmlGen = (ToXmlGenerator) jsonGenerator; + xmlGen.startWrappedValue(wrapper, wrapped); + xmlGen.writeObject(t); + xmlGen.finishWrappedValue(wrapper, wrapped); + } else { + // Pass through JER + jsonGenerator.writeObject(t); + } + + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/ParameterizedTypeDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/ParameterizedTypeDeserializer.java new file mode 100644 index 000000000..fe9a57e63 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/ParameterizedTypeDeserializer.java @@ -0,0 +1,71 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import static us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes.IdType.INTEGER; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.node.ObjectNode; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +/** + * Deserialize a parameterized SEQUENCE type. + * Determines the subtype to deserialize to using the + * {@link Asn1ParameterizedTypes} annotation that + * must be present. + * + * @param The Sequence Type + * + * @author Ivan Yourshaw + */ +@SuppressWarnings({ "unchecked" }) +public abstract class ParameterizedTypeDeserializer + extends StdDeserializer { + + protected final Class thisClass; + + protected ParameterizedTypeDeserializer(Class vc) { + super(vc); + thisClass = vc; + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + final var typeAnnot = thisClass.getAnnotation(Asn1ParameterizedTypes.class); + if (typeAnnot == null) { + throw new RuntimeException("Missing Asn1ParameterizedTypes annotation."); + } + final String idPropName = typeAnnot.idProperty(); + final Asn1ParameterizedTypes.IdType idType = typeAnnot.idType(); + final Asn1ParameterizedTypes.Type[] types = typeAnnot.value(); + if (types == null || types.length == 0) { + throw new RuntimeException("No Types are defined in the Asn1ParameterizedTypes annotation."); + } + TreeNode node = jsonParser.getCodec().readTree(jsonParser); + if (node instanceof ObjectNode objectNode) { + JsonNode idPropNode = objectNode.findValue(idPropName); + final Object id = (idType == INTEGER) ? idPropNode.asInt() : idPropNode.asText(); + Class subType = getSubtypeForId(id, idType, types); + return (T) jsonParser.getCodec().readValue(jsonParser, subType); + } else { + throw new RuntimeException("Not instance of object"); + } + } + + private Class getSubtypeForId(final Object id, Asn1ParameterizedTypes.IdType idType, + Asn1ParameterizedTypes.Type[] types) { + for (var theType : types) { + Object idValue = (idType == INTEGER) ? theType.intId() : theType.stringId(); + if (id.equals(idValue)) { + return theType.value(); + } + } + throw new RuntimeException(String.format("Id %s not found in list of types", id)); + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfChoiceDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfChoiceDeserializer.java new file mode 100644 index 000000000..cb3a1b618 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfChoiceDeserializer.java @@ -0,0 +1,64 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import static us.dot.its.jpo.ode.plugin.utils.XmlUtils.*; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser; +import java.io.IOException; +import lombok.SneakyThrows; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/** + * Deserializer for SEQUENCE-OF CHOICE types. + * These are unwrapped in XER, but wrapped in JER. + * @param The Asn1Choice type + * @param The Asn1SequenceOf type + */ +public abstract class SequenceOfChoiceDeserializer> + extends StdDeserializer { + + protected final Class choiceClass; + protected final Class sequenceOfClass; + + protected abstract T construct(); + + protected SequenceOfChoiceDeserializer(Class choiceClass, Class sequenceOfClass) { + super(sequenceOfClass); + this.choiceClass = choiceClass; + this.sequenceOfClass = sequenceOfClass; + } + + @SneakyThrows + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + T result = construct(); + if (jsonParser instanceof FromXmlParser xmlParser) { + // XML: expects unwrapped choice items + // unwrap and deserialize each choice item + XmlMapper xmlMapper = (XmlMapper)xmlParser.getCodec(); + TreeNode node = xmlMapper.readTree(xmlParser); + String xml = xmlMapper.writeValueAsString(node); + var tokens = tokenize(xml); + var unwrapped = unwrap(tokens); + var grouped = groupTopLevelTokens(unwrapped); + for (var group : grouped) { + var wrappedGroup = wrap(group, choiceClass.getSimpleName()); + S choice = xmlMapper.readValue(stringifyTokens(wrappedGroup), choiceClass); + result.add(choice); + } + } else { + // JSON: expects wrapped choice items, pass through as normal + result = jsonParser.getCodec().readValue(jsonParser, sequenceOfClass); + } + return result; + } + + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfChoiceSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfChoiceSerializer.java new file mode 100644 index 000000000..29c6077a5 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfChoiceSerializer.java @@ -0,0 +1,54 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import static us.dot.its.jpo.ode.plugin.utils.XmlUtils.*; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator; +import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider; +import java.io.IOException; +import lombok.SneakyThrows; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/** + * Serializer for SEQUENCE-OF CHOICE types. + * These are unwrapped in XER, but wrapped in JER. + * @param The Asn1Choice type + * @param The Asn1SequenceOf type + */ +public class SequenceOfChoiceSerializer> + extends StdSerializer { + + protected final Class choiceClass; + protected final Class sequenceOfClass; + + protected SequenceOfChoiceSerializer(Class choiceClass, Class sequenceOfClass) { + super(sequenceOfClass); + this.choiceClass = choiceClass; + this.sequenceOfClass = sequenceOfClass; + } + + @SneakyThrows + @Override + public void serialize(T sequenceOf, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + if (serializerProvider instanceof XmlSerializerProvider xmlProvider) { + // XER: Choice items not wrapped + var xmlGen = (ToXmlGenerator)jsonGenerator; + var mapper = SerializationUtil.xmlMapper(); + + for (var choiceItem : sequenceOf) { + String choiceXml = mapper.writeValueAsString(choiceItem); + String unwrappedXml = stringifyTokens(unwrap(tokenize(choiceXml))); + xmlGen.writeRaw(unwrappedXml); + } + + } else { + // JER: Normal, choice items are wrapped + jsonGenerator.writeObject(sequenceOf); + } + } + + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfEnumeratedDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfEnumeratedDeserializer.java new file mode 100644 index 000000000..c798fc5e8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfEnumeratedDeserializer.java @@ -0,0 +1,60 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser; +import java.io.IOException; +import java.util.Objects; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/** + * Base class for deserializers for SEQUENCE-OF ENUMERATED types. + * + * @param The Sequence Of ENUMERATED type. + * @author Ivan Yourshaw + */ +public abstract class SequenceOfEnumeratedDeserializer & Asn1Enumerated, + T extends Asn1SequenceOf> extends StdDeserializer { + + protected final Class thisClass; + protected final Class enumClass; + + protected abstract S[] listEnumValues(); + + protected abstract T construct(); + + protected SequenceOfEnumeratedDeserializer(Class sequenceOfEnumType, Class enumType) { + super(sequenceOfEnumType); + this.thisClass = sequenceOfEnumType; + this.enumClass = enumType; + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + T result = null; + if (jsonParser instanceof FromXmlParser xmlParser) { + // Unwrapped enum items + result = construct(); + TreeNode node = xmlParser.getCodec().readTree(xmlParser); + + var fieldNameIterator = node.fieldNames(); + while (fieldNameIterator.hasNext()) { + String name = fieldNameIterator.next(); + + for (S enumValue : listEnumValues()) { + if (Objects.equals(enumValue.getName(), name)) { + result.add(enumValue); + } + } + } + } else { + result = jsonParser.getCodec().readValue(jsonParser, thisClass); + } + return result; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SerializationUtil.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SerializationUtil.java new file mode 100644 index 000000000..bad8dd867 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SerializationUtil.java @@ -0,0 +1,23 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; + +/** + * Utility class to perform serialization and deserialization with static JSON and XML mappers. + * + * @author Ivan Yourshaw + */ +public class SerializationUtil { + + private static final ObjectMapper jsonMapper = new ObjectMapper(); + private static final XmlMapper xmlMapper = new XmlMapper(); + + public static ObjectMapper jsonMapper() { + return jsonMapper; + } + + public static XmlMapper xmlMapper() { + return xmlMapper; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/package-info.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/package-info.java new file mode 100644 index 000000000..ba7a7c48b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/package-info.java @@ -0,0 +1,4 @@ +/** + * Jackson serializers and deserializers for XER and JER. + */ +package us.dot.its.jpo.ode.plugin.serialization; \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Bitstring.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Bitstring.java new file mode 100644 index 000000000..e14381551 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Bitstring.java @@ -0,0 +1,167 @@ +package us.dot.its.jpo.ode.plugin.types; + +import static us.dot.its.jpo.ode.plugin.utils.BitUtils.reverseBits; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.BitSet; +import java.util.HexFormat; +import us.dot.its.jpo.ode.plugin.serialization.BitstringSerializer; + +/** + * Base class for an ASN.1 bitstring. + */ +@JsonSerialize(using = BitstringSerializer.class) +public abstract class Asn1Bitstring implements Asn1Type { + + @JsonIgnore + final BitSet bits; + + @JsonIgnore + final int size; + + @JsonIgnore + final boolean hasExtensionMarker; + + @JsonIgnore + final String[] names; + + /** + * Creates a Asn1Bitstring with the specified number of items and name values. + * + * @param size The length of the bitstring. + * @param hasExtensionMarker Presence of any ASN.1 bitstring extension values. + * @param names The String name values corresponding to each bit in the bitstring. + */ + public Asn1Bitstring(int size, boolean hasExtensionMarker, String[] names) { + this.size = size; + this.hasExtensionMarker = hasExtensionMarker; + this.bits = new BitSet(size); + this.names = names; + } + + public int size() { + return size; + } + + public boolean hasExtensionMarker() { + return hasExtensionMarker; + } + + public boolean get(int bitIndex) { + return bits.get(bitIndex); + } + + public void set(int bitIndex, boolean value) { + bits.set(bitIndex, value); + } + + /** + * Set the corresponding bit from the bitstring based on the name value. + * + * @param name The name String value for the corresponding bit in the bitstring. + * @param value The value for the bit to be set. + */ + public void set(String name, boolean value) { + for (int i = 0; i < size; i++) { + if (name(i).equals(name)) { + set(i, value); + return; + } + } + throw new IllegalArgumentException("Unknown name " + name); + } + + /** + * Gets the String value of the bitstring represented in binary. + */ + public String binaryString() { + char[] chars = new char[size]; + for (int i = 0; i < size; i++) { + chars[i] = get(i) ? '1' : '0'; + } + return new String(chars); + } + + public String hexString() { + HexFormat hex = HexFormat.of(); + return hex.formatHex(reverseBits(bits.toByteArray())); + } + + /** + * Sets the Asn1Bitstring values from a String binary representation of a bitstring. + * + * @param str The bitstring represented in binary. + */ + public void fromBinaryString(String str) { + if (str == null) { + bits.clear(); + return; + } + char[] chars = str.toCharArray(); + if (chars.length < size) { + throw new IllegalArgumentException("Not enough characters in string " + str); + } + for (int i = 0; i < size; i++) { + char c = chars[i]; + set(i, c == '1'); + } + } + + /** + * Sets the Asn1Bitstring values from a String hex representation of a bitstring. + * + * @param str The bitstring represented in hex. + */ + public void fromHexString(String str) { + System.out.println(str); + if (str == null) { + bits.clear(); + return; + } + HexFormat hex = HexFormat.of(); + byte[] bytes = reverseBits(hex.parseHex(str)); + System.out.println(bytes.length); + BitSet newBits = BitSet.valueOf(bytes); + System.out.println(newBits); + + bits.clear(); + bits.or(newBits); + System.out.println(binaryString()); + } + + /** + * Get the name representing the requested index. + * + * @param index The index value of the bitstring being requested. + */ + public String name(int index) { + if (index < 0 || index >= size()) { + throw new IllegalArgumentException( + String.format("Index %s out of range %s-%s", index, 0, size())); + } + return names[index]; + } + + @Override + public int hashCode() { + return bits.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (obj instanceof Asn1Bitstring bitstring) { + return bits.equals(bitstring.bits); + } else { + return false; + } + } + + @Override + public String toString() { + return binaryString(); + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Boolean.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Boolean.java new file mode 100644 index 000000000..371845a5c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Boolean.java @@ -0,0 +1,59 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.Objects; +import us.dot.its.jpo.ode.plugin.serialization.BooleanDeserializer; +import us.dot.its.jpo.ode.plugin.serialization.BooleanSerializer; + +/** + * Class representing an ASN.1 boolean. + */ +@JsonSerialize(using = BooleanSerializer.class) +@JsonDeserialize(using = BooleanDeserializer.class) +public class Asn1Boolean implements Asn1Type { + + public Asn1Boolean() { + } + + @JsonCreator + public Asn1Boolean(boolean value) { + this.value = value; + } + + private boolean value; + + @JsonValue + public boolean getValue() { + return value; + } + + public void setValue(boolean value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Asn1Boolean that = (Asn1Boolean) o; + return value == that.value; + } + + @Override + public int hashCode() { + return Objects.hashCode(value); + } + + @Override + public String toString() { + return Boolean.toString(value); + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1CharacterString.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1CharacterString.java new file mode 100644 index 000000000..7249096ac --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1CharacterString.java @@ -0,0 +1,50 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Base class for an ASN.1 character string. + */ +public abstract class Asn1CharacterString implements Asn1Type { + + protected final int minLength; + protected final int maxLength; + protected String value; + + public Asn1CharacterString(int minLength, int maxLength) { + this.minLength = minLength; + this.maxLength = maxLength; + } + + @JsonValue + public String getValue() { + return value; + } + + /** + * Sets the character string to value. + * + * @param value The String value that the Asn1CharacterString will be set to. + */ + public void setValue(String value) { + if (!validate(value)) { + throw new IllegalArgumentException( + String.format("String '%s' has invalid length. Must be between %d and %s", + value, minLength, maxLength)); + } + this.value = value; + } + + protected boolean validate(String valueA) { + if (valueA == null) { + return true; + } + return valueA.length() >= minLength && valueA.length() <= maxLength; + } + + @Override + public String toString() { + return value; + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Choice.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Choice.java new file mode 100644 index 000000000..531d6380d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Choice.java @@ -0,0 +1,30 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import us.dot.its.jpo.ode.plugin.serialization.SerializationUtil; + +/** + * Base class for an ASN.1 choice. + */ +public abstract class Asn1Choice implements Asn1Type { + + @JsonIgnore + final boolean hasExtensionMarker; + + public Asn1Choice(boolean hasExtensionMarker) { + this.hasExtensionMarker = hasExtensionMarker; + } + + @Override + public String toString() { + ObjectMapper mapper = SerializationUtil.jsonMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + System.err.println(e.getMessage()); + return ""; + } + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Enumerated.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Enumerated.java new file mode 100644 index 000000000..0728eecb6 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Enumerated.java @@ -0,0 +1,15 @@ +package us.dot.its.jpo.ode.plugin.types; + +/** + * Class for an ASN.1 enumerated object. + */ +public interface Asn1Enumerated extends Asn1Type { + int getIndex(); + + String getName(); + + boolean hasExtensionMarker(); + + int maxIndex(); + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Integer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Integer.java new file mode 100644 index 000000000..b27348b93 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Integer.java @@ -0,0 +1,77 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; + +/** + * A constrained integer type with lower bound and upper bound. + * Unconstrained integer types and extensibility markers in integer constraints + * are not supported. + */ +public class Asn1Integer implements Asn1Type, Comparable { + + protected long value; + + @JsonIgnore + final long lowerBound; + + @JsonIgnore + final long upperBound; + + public Asn1Integer(long lowerBound, long upperBound) { + this.lowerBound = lowerBound; + this.upperBound = upperBound; + } + + @JsonValue + public long getValue() { + return value; + } + + public void setValue(long value) { + this.value = value; + } + + public int intValue() { + return (int) value; + } + + @Override + public int compareTo(Asn1Integer other) { + if (other == null) { + return -1; + } + return Long.compare(value, other.value); + } + + public long getLowerBound() { + return lowerBound; + } + + public long getUpperBound() { + return upperBound; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Asn1Integer that = (Asn1Integer) o; + return value == that.value; + } + + @Override + public int hashCode() { + return Objects.hashCode(value); + } + + @Override + public String toString() { + return Long.toString(value); + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1OctetString.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1OctetString.java new file mode 100644 index 000000000..e2f21e537 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1OctetString.java @@ -0,0 +1,31 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Class for an ASN.1 octet string. + */ +public class Asn1OctetString implements Asn1Type { + + protected final int minLength; + protected final int maxLength; + protected String value; + + @JsonValue + public String getValue() { + return value; + } + + public Asn1OctetString(int minLength, int maxLength) { + this.minLength = minLength; + this.maxLength = maxLength; + } + + public boolean validate(String aValue) { + if (aValue == null) return true; + // Size of hex format string can be 2 * byte size + // TODO validate valid hex string digit are + return aValue.length() >= 2 * minLength && aValue.length() <= 2 * maxLength; + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Sequence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Sequence.java new file mode 100644 index 000000000..ce18cfcfa --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Sequence.java @@ -0,0 +1,35 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import us.dot.its.jpo.ode.plugin.serialization.SerializationUtil; + +/** + * Base class for an ASN.1 sequence. + */ +public abstract class Asn1Sequence implements Asn1Type { + + @JsonIgnore + final boolean extensionMarker; + + public Asn1Sequence(boolean hasExtensionMarker) { + this.extensionMarker = hasExtensionMarker; + } + + @JsonIgnore + public boolean hasExtensionMarker() { + return extensionMarker; + } + + @Override + public String toString() { + ObjectMapper mapper = SerializationUtil.jsonMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + System.err.println(e.getMessage()); + return ""; + } + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1SequenceOf.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1SequenceOf.java new file mode 100644 index 000000000..96d6f1d13 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1SequenceOf.java @@ -0,0 +1,50 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import java.util.ArrayList; + +/** + * Base class for an ASN.1 sequence-of. + */ +public abstract class Asn1SequenceOf + extends ArrayList + implements Asn1Type { + + final Class itemClass; + final long sizeLowerBound; + final long sizeUpperBound; + + /** + * Creates a Asn1SequenceOf with the specified generic object type along with + * an upper and lower number of items in the sequence-of array. + * + * @param itemClass The type of object the SequenceOf consists of. + * @param sizeLowerBound The lowest allowed number of items inside the Asn1SequenceOf array. + * @param sizeUpperBound The highest allowed number of items inside the Asn1SequenceOf array. + */ + public Asn1SequenceOf(Class itemClass, long sizeLowerBound, long sizeUpperBound) { + this.itemClass = itemClass; + this.sizeLowerBound = sizeLowerBound; + this.sizeUpperBound = sizeUpperBound; + } + + @JsonIgnore + public Class getItemClass() { + return itemClass; + } + + @JsonIgnore + public long getSizeLowerBound() { + return sizeLowerBound; + } + + @JsonIgnore + public long getSizeUpperBound() { + return sizeUpperBound; + } + + @SuppressWarnings("unchecked") + public boolean add(Asn1Type item) { + return super.add((T) item); + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Type.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Type.java new file mode 100644 index 000000000..55009634c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Type.java @@ -0,0 +1,8 @@ +package us.dot.its.jpo.ode.plugin.types; + +/** + * Interface implemented by all ASN.1 type classes. + */ +public interface Asn1Type { + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/IA5String.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/IA5String.java new file mode 100644 index 000000000..11f549558 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/IA5String.java @@ -0,0 +1,13 @@ +package us.dot.its.jpo.ode.plugin.types; + +/** + * Character range = 0..127, UPER encoded with 7 bits per character + * Ref: ITU-T X.691 (02/2021) Section 30 + */ +public class IA5String extends Asn1CharacterString { + + public IA5String(int minLength, int maxLength) { + super(minLength, maxLength); + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/UnknownType.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/UnknownType.java new file mode 100644 index 000000000..3152fc04c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/UnknownType.java @@ -0,0 +1,10 @@ +package us.dot.its.jpo.ode.plugin.types; + +/** + * Placeholder for unknown types in the generated source. + * If classes of this type exist, it means the ASN.1 specification has an unsupported feature. + * + * @author Ivan Yourshaw + */ +public class UnknownType implements Asn1Type { +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/package-info.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/package-info.java new file mode 100644 index 000000000..098180aaa --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/package-info.java @@ -0,0 +1,4 @@ +/** + * Base classes and interfaces for ASN.1 types. + */ +package us.dot.its.jpo.ode.plugin.types; \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/utils/BitUtils.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/utils/BitUtils.java new file mode 100644 index 000000000..69d7f4761 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/utils/BitUtils.java @@ -0,0 +1,31 @@ +package us.dot.its.jpo.ode.plugin.utils; + +/** + * Utility class containing static methods for bit manipulation. + */ +public class BitUtils { + + /** + * Reverse bits in a single byte. + * + * @return The reversed byte. + */ + public static byte reverseBits(final byte b) { + var reversedInt = Integer.reverse((int) b << 24) & 0xff; + return (byte) reversedInt; + } + + /** + * Reverse bits in a byte array. + * + * @return The reversed byte array. + */ + public static byte[] reverseBits(final byte[] bytes) { + byte[] reversed = new byte[bytes.length]; + for (int i = 0; i < bytes.length; i++) { + reversed[i] = reverseBits(bytes[i]); + } + return reversed; + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/utils/XmlUtils.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/utils/XmlUtils.java new file mode 100644 index 000000000..b668107d3 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/utils/XmlUtils.java @@ -0,0 +1,169 @@ +package us.dot.its.jpo.ode.plugin.utils; + +import java.io.StringReader; +import java.util.ArrayList; +import java.util.Formatter; +import java.util.List; +import javax.xml.namespace.QName; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.SneakyThrows; + +/** + * XMl Utilities + */ +public class XmlUtils { + + @SneakyThrows + public static List tokenize(String xml) { + var factory = XMLInputFactory.newInstance(); + XMLStreamReader reader = factory.createXMLStreamReader(new StringReader(xml)); + return readTokens(reader); + } + + public static List readTokens(XMLStreamReader xmlReader) throws XMLStreamException { + var tokens = new ArrayList(); + var firstToken = addToken(xmlReader, tokens); + while (xmlReader.hasNext()) { + xmlReader.next(); + var thisToken = addToken(xmlReader, tokens); + if (firstToken == null) { + firstToken = thisToken; + } + if (thisToken != null && thisToken.isLast && thisToken.text.equals(firstToken.text)){ + break; + } + } + return mergeEmptyElements(tokens); + } + + @SneakyThrows + public static List readTokens(XMLStreamReader xmlReader, String endElement) { + var tokens = new ArrayList(); + addToken(xmlReader, tokens); + + while (xmlReader.hasNext()) { + xmlReader.next(); + XmlToken token = addToken(xmlReader, tokens); + if (token != null && token.isLast && token.text.equals(endElement)) { + tokens.removeLast(); + break; + } + } + return mergeEmptyElements(tokens); + } + + private static XmlToken addToken(XMLStreamReader xmlReader, List tokens) { + XmlToken token = null; + if (xmlReader.hasName()) { + QName name = xmlReader.getName(); + if (xmlReader.isStartElement()) { + token = new XmlToken(name.getLocalPart(), true, false); + tokens.add(token); + } else if (xmlReader.isEndElement()) { + token = new XmlToken(name.getLocalPart(), false, true); + tokens.add(token); + } + } else if (xmlReader.hasText() && !xmlReader.isWhiteSpace()) { + token = new XmlToken(xmlReader.getText(), false, false); + tokens.add(token); + } + return token; + } + + // Merge adjacent elements with no text between into empty elements to + // match the asn.1 style for enumerations and booleans. + private static List mergeEmptyElements(final List xmlTokens) { + final var mergedList = new ArrayList(); + int i = 0; + while (i < xmlTokens.size()) { + XmlToken token1 = xmlTokens.get(i); + if (i == xmlTokens.size() - 1) { + mergedList.add(token1); + break; + } + XmlToken token2 = xmlTokens.get(i + 1); + if (token1.isFirst && token2.isLast && token1.text.equals(token2.text)) { + // Combine into empty element and skip 2 + mergedList.add(new XmlToken(token1.text, true, true)); + i += 2; + } else { + // Don't change + mergedList.add(token1); + i++; + } + } + return mergedList; + } + + public static String stringifyTokens(List tokens) { + var f = new Formatter(); + for (XmlToken token : tokens) { + final String text = token.text; + if (token.isFirst && token.isLast) { + // Empty element + f.format("<%s/>", text); + } else if (token.isFirst) { + // Start element + f.format("<%s>", text); + } else if (token.isLast) { + // End element + f.format("", text); + } else { + // Text value + f.format(text); + } + } + return f.toString(); + } + + public static List> groupTopLevelTokens(final List tokens) { + XmlToken topLevel = null; + var tokenLists = new ArrayList>(); + List tokenList = null; + for (XmlToken token : tokens) { + if (topLevel == null && token.isFirst) { + // Start list + topLevel = token; + tokenList = new ArrayList(); + tokenList.add(token); + } else if (topLevel != null && token.isLast && token.text.equals(topLevel.text)) { + // complete list + tokenList.add(token); + topLevel = null; + tokenLists.add(tokenList); + } else if (tokenList != null) { + tokenList.add(token); + } + } + return tokenLists; + } + + public static List unwrap(final List tokens) { + // Remove first and last + if (tokens.size() > 2) { + return tokens.subList(1, tokens.size() - 1); + } else { + return tokens; + } + } + + public static List wrap(final List tokens, String wrapper) { + var wrapped = new ArrayList(); + wrapped.add(new XmlToken(wrapper, true, false)); + wrapped.addAll(tokens); + wrapped.add(new XmlToken(wrapper, false, true)); + return wrapped; + } + + @AllArgsConstructor + @Data + public static class XmlToken { + String text; + boolean isFirst; + boolean isLast; + } +} diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735DirectionOfUseTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735DirectionOfUseTest.java deleted file mode 100644 index e9d81dfa3..000000000 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735DirectionOfUseTest.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.plugin.j2735; - -import static org.junit.Assert.assertNotNull; - -import org.junit.jupiter.api.Test; - -public class J2735DirectionOfUseTest { - @Test - public void checkForward() { - assertNotNull(J2735DirectionOfUse.FORWARD); - } - - @Test - public void checkReverse() { - assertNotNull(J2735DirectionOfUse.REVERSE); - } - - @Test - public void checkBoth() { - assertNotNull(J2735DirectionOfUse.BOTH); - } -} diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/MAPBuilderTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/MAPBuilderTest.java index fd48970dc..b1a45becb 100644 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/MAPBuilderTest.java +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/MAPBuilderTest.java @@ -3,28 +3,50 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import org.junit.jupiter.api.Test; - import com.fasterxml.jackson.databind.JsonNode; - +import org.junit.jupiter.api.Test; import us.dot.its.jpo.ode.plugin.j2735.J2735MAP; import us.dot.its.jpo.ode.util.XmlUtils; import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; +/** + * Testing the Map POJO builder classes. + */ public class MAPBuilderTest { - @Test - public void shouldTranslateMap() { + @Test + public void shouldTranslateMap() { + String mapXml = """ + us.dot.its.jpo.ode.model.OdeAsn1Payload + d07badec-84f0-48d8-8d4c-898fceaf4ecc1 + 000 + 2020-11-30T23:45:24.913657Z6 + 0 + false + mapTxsuccess + unsecuredData + MessageFrameUPER + V2XMessageFrame + 18 + 412 + 1561 + 389284111-772410713 + 100 + 000000000000000000 + 4324 + 4324 + + + """; - JsonNode jsonMap = null; - try { - jsonMap = XmlUtils.toObjectNode( - "us.dot.its.jpo.ode.model.OdeAsn1Payloadd07badec-84f0-48d8-8d4c-898fceaf4ecc10002020-11-30T23:45:24.913657Z60falsemapTxsuccessunsecuredDataMessageFrameUPERV2XMessageFrame184121561389284111-77241071310000000000000000000043244324"); - } catch (XmlUtilsException e) { - fail("XML parsing error:" + e); - } - J2735MAP actualMap = MAPBuilder.genericMAP(jsonMap.findValue("MapData")); - String expected = "{\"msgIssueRevision\":4,\"layerType\":\"mixedContent\",\"layerID\":12,\"intersections\":{\"intersectionGeometry\":[{\"id\":{\"id\":156},\"revision\":1,\"refPoint\":{\"latitude\":38.9284111,\"longitude\":-77.2410713},\"laneSet\":{\"GenericLane\":[{\"laneID\":1,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}}},\"nodeList\":{\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY2\":{\"x\":43,\"y\":24}}},{\"delta\":{\"nodeXY2\":{\"x\":43,\"y\":24}}}]}}}]}}]}}"; - System.out.println(actualMap.toJson()); - assertEquals(expected, actualMap.toJson()); - } + JsonNode jsonMap = null; + try { + jsonMap = XmlUtils.toObjectNode(mapXml); + } catch (XmlUtilsException e) { + fail("XML parsing error:" + e); + } + J2735MAP actualMap = MAPBuilder.genericMAP(jsonMap.findValue("MapData")); + String expected = """ + {\"msgIssueRevision\":4,\"layerType\":\"mixedContent\",\"layerID\":12,\"intersections\":{\"intersectionGeometry\":[{\"id\":{\"id\":156},\"revision\":1,\"refPoint\":{\"latitude\":38.9284111,\"longitude\":-77.2410713},\"laneSet\":{\"GenericLane\":[{\"laneID\":1,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}}},\"nodeList\":{\"nodes\":[{\"delta\":{\"nodeXY2\":{\"x\":43,\"y\":24}}},{\"delta\":{\"nodeXY2\":{\"x\":43,\"y\":24}}}]}}]}}]}}"""; + assertEquals(expected, actualMap.toJson()); + } } diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSliceTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSliceTest.java new file mode 100644 index 000000000..eb4a1a966 --- /dev/null +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSliceTest.java @@ -0,0 +1,39 @@ +package us.dot.its.jpo.ode.plugin.j2735.common; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; + +/** + * Test serializing and deserializing a HeadingSlice bitstring to ODE JSON. + */ +public class HeadingSliceTest { + + private static final ObjectMapper mapper = new ObjectMapper(); + + @Test + public void testDeserializeJson() throws JsonProcessingException { + HeadingSlice hs = mapper.readValue(EXPECTED_JSON, HeadingSlice.class); + assertNotNull(hs); + for (int i = 0; i < hs.size(); i++) { + assertTrue(hs.get(i)); + } + } + + @Test + public void testSerializeJson() throws JsonProcessingException { + var hs = new HeadingSlice(); + for (int i = 0; i < hs.size(); i++) { + hs.set(i, true); + } + String json = mapper.writeValueAsString(hs); + assertEquals(EXPECTED_JSON, json); + } + + private static final String EXPECTED_JSON = """ + {"from000-0to022-5degrees":true,"from022-5to045-0degrees":true,"from045-0to067-5degrees":true,"from067-5to090-0degrees":true,"from090-0to112-5degrees":true,"from112-5to135-0degrees":true,"from135-0to157-5degrees":true,"from157-5to180-0degrees":true,"from180-0to202-5degrees":true,"from202-5to225-0degrees":true,"from225-0to247-5degrees":true,"from247-5to270-0degrees":true,"from270-0to292-5degrees":true,"from292-5to315-0degrees":true,"from315-0to337-5degrees":true,"from337-5to360-0degrees":true}"""; +} diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeSetLLTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeSetLLTest.java new file mode 100644 index 000000000..c3af40e40 --- /dev/null +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeSetLLTest.java @@ -0,0 +1,41 @@ +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import us.dot.its.jpo.ode.plugin.j2735.common.Offset_B10; + +/** + * Test serializing and deserializing a NodeAttributeSetLL to and from ODE JSON. + */ +public class NodeAttributeSetLLTest { + + private static final ObjectMapper mapper = new ObjectMapper(); + + @Test + public void testDeserializeJson_dWidth_dElevation() throws JsonProcessingException { + final NodeAttributeSetLL nasll = mapper.readValue( + DWITDH_DELEVATION_ONLY_JSON, NodeAttributeSetLL.class); + assertNotNull(nasll); + final long dElevation = nasll.getDElevation().getValue(); + assertEquals(424, dElevation); + final long dWidth = nasll.getDWidth().getValue(); + assertEquals(162, dWidth); + } + + @Test + public void testSerializeJson_dWidth_dElevation() throws JsonProcessingException { + final var nasll = new NodeAttributeSetLL(); + nasll.setDElevation(new Offset_B10(424L)); + nasll.setDWidth(new Offset_B10(162L)); + final String jsonResult = mapper.writeValueAsString(nasll); + assertEquals(DWITDH_DELEVATION_ONLY_JSON, jsonResult); + } + + private static final String DWITDH_DELEVATION_ONLY_JSON = """ + {"dWidth":162,"dElevation":424}"""; + +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeTimJsonTopology.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeTimJsonTopology.java index 8307eb97b..6c6e2b1c0 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeTimJsonTopology.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeTimJsonTopology.java @@ -15,9 +15,11 @@ /** - * The OdeTimJsonTopology class sets up and manages a Kafka Streams topology for processing TIM - * (Traveler Information Message) JSON data from the OdeTimJson Kafka topic. This class creates a - * K-Table that houses TMC-generated TIMs which can be queried by UUID. + * The OdeTimJsonTopology class sets up and manages a Kafka Streams topology + * for processing TIM (Traveler Information Message) JSON data from the + * OdeTimJson Kafka topic. + * This class creates a K-Table that houses TMC-generated TIMs which can be + * queried by UUID. **/ @Slf4j public class OdeTimJsonTopology { @@ -74,11 +76,10 @@ public Topology buildTopology(String topic) { } /** - * Retrieves the value associated with a given UUID from the TIM JSON data store. + * Query the K-Table by a specified UUID. * - * @param uuid the unique identifier used to query the value from the store - * @return the value associated with the given UUID, or null if the UUID does not exist in the store - */ + * @param uuid The specified UUID to query for. + **/ public String query(String uuid) { return (String) streams.store( StoreQueryParameters.fromNameAndType("timjson-store", QueryableStoreTypes.keyValueStore())) diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeTimDataCreatorHelper.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeTimDataCreatorHelper.java new file mode 100644 index 000000000..0eddd3a73 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeTimDataCreatorHelper.java @@ -0,0 +1,85 @@ +package us.dot.its.jpo.ode.coder; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import lombok.extern.slf4j.Slf4j; + +import us.dot.its.jpo.ode.context.AppContext; +import us.dot.its.jpo.ode.model.OdeMsgMetadata; +import us.dot.its.jpo.ode.model.OdeTimData; +import us.dot.its.jpo.ode.model.OdeTimMetadata; +import us.dot.its.jpo.ode.model.OdeTimPayload; +import us.dot.its.jpo.ode.model.ReceivedMessageDetails; +import us.dot.its.jpo.ode.model.RxSource; +import us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation; +import us.dot.its.jpo.ode.util.JsonUtils; +import us.dot.its.jpo.ode.util.XmlUtils; +import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; + +/** + * Helper class for deserializing TIM messages in XML/XER format into POJOs. + */ +@Slf4j +public class OdeTimDataCreatorHelper { + + /** + * Deserializes XML/XER from the UDP decoded pipeline. + * + * @param consumedData The XML/XER as a String. + */ + public static OdeTimData createOdeTimDataFromDecoded(String consumedData) + throws XmlUtilsException { + ObjectNode consumed = XmlUtils.toObjectNode(consumedData); + + JsonNode metadataNode = consumed.findValue(AppContext.METADATA_STRING); + if (metadataNode instanceof ObjectNode) { + ObjectNode object = (ObjectNode) metadataNode; + object.remove(AppContext.ENCODINGS_STRING); + + // Map header file does not have a location and use predefined set required + // RxSource + ReceivedMessageDetails receivedMessageDetails = new ReceivedMessageDetails(); + receivedMessageDetails.setRxSource(RxSource.NA); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode; + try { + jsonNode = objectMapper.readTree(receivedMessageDetails.toJson()); + object.set(AppContext.RECEIVEDMSGDETAILS_STRING, jsonNode); + } catch (Exception e) { + log.error("Failed to read JSON node: {}", e.getMessage()); + } + } + + OdeTimMetadata metadata = (OdeTimMetadata) JsonUtils.fromJson(metadataNode.toString(), + OdeTimMetadata.class); + + if (metadata != null && metadata.getSchemaVersion() <= 4) { + metadata.setReceivedMessageDetails(null); + } + + String travelerInformationXml = XmlUtils.findXmlContentString(consumedData, + "TravelerInformation"); + TravelerInformation timObject = (TravelerInformation) XmlUtils.fromXmlS(travelerInformationXml, + TravelerInformation.class); + OdeTimPayload payload = new OdeTimPayload(timObject); + return new OdeTimData(metadata, payload); + } + + /** + * Deserializes XML/XER from the TIM creator endpoint. + * + * @param consumedData The XML/XER as a String. + * @param metadata The pre-built ODE metadata object with unique TIM creator data. + */ + public static OdeTimData createOdeTimDataFromCreator(String consumedData, OdeMsgMetadata metadata) + throws XmlUtilsException { + String travelerInformationXml = XmlUtils.findXmlContentString(consumedData, + "TravelerInformation"); + TravelerInformation timObject = (TravelerInformation) XmlUtils.fromXmlS(travelerInformationXml, + TravelerInformation.class); + OdeTimPayload payload = new OdeTimPayload(timObject); + return new OdeTimData(metadata, payload); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1DecodedDataRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1DecodedDataRouter.java index c5772cba4..3a1e9619b 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1DecodedDataRouter.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1DecodedDataRouter.java @@ -1,172 +1,206 @@ /******************************************************************************* * Copyright 2018 572682 * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + *

http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.services.asn1; import lombok.extern.slf4j.Slf4j; import org.json.JSONObject; -import us.dot.its.jpo.ode.coder.*; +import us.dot.its.jpo.ode.coder.OdeBsmDataCreatorHelper; +import us.dot.its.jpo.ode.coder.OdePsmDataCreatorHelper; +import us.dot.its.jpo.ode.coder.OdeSpatDataCreatorHelper; +import us.dot.its.jpo.ode.coder.OdeSrmDataCreatorHelper; +import us.dot.its.jpo.ode.coder.OdeSsmDataCreatorHelper; +import us.dot.its.jpo.ode.coder.OdeTimDataCreatorHelper; import us.dot.its.jpo.ode.context.AppContext; -import us.dot.its.jpo.ode.kafka.topics.JsonTopics; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; import us.dot.its.jpo.ode.kafka.topics.PojoTopics; import us.dot.its.jpo.ode.model.OdeAsn1Data; import us.dot.its.jpo.ode.model.OdeBsmData; import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; import us.dot.its.jpo.ode.plugin.j2735.J2735DSRCmsgID; -import us.dot.its.jpo.ode.traveler.TimTransmogrifier; import us.dot.its.jpo.ode.util.XmlUtils; import us.dot.its.jpo.ode.wrapper.AbstractSubscriberProcessor; import us.dot.its.jpo.ode.wrapper.MessageProducer; import us.dot.its.jpo.ode.wrapper.serdes.OdeBsmSerializer; +/** + * The Asn1DecodedDataRouter is responsible for routing all decoded messages + * from the topic.Asn1DecoderOutput Kafka topic to become deserialized POJOs + * and be written back to Kafka. + **/ @Slf4j public class Asn1DecodedDataRouter extends AbstractSubscriberProcessor { - private final PojoTopics pojoTopics; - private final JsonTopics jsonTopics; - private final MessageProducer bsmProducer; - private final MessageProducer timProducer; - private final MessageProducer spatProducer; - private final MessageProducer ssmProducer; - private final MessageProducer srmProducer; - private final MessageProducer psmProducer; + private final PojoTopics pojoTopics; + private final JsonTopics jsonTopics; + private final MessageProducer bsmProducer; + private final MessageProducer timProducer; + private final MessageProducer spatProducer; + private final MessageProducer ssmProducer; + private final MessageProducer srmProducer; + private final MessageProducer psmProducer; - public Asn1DecodedDataRouter(OdeKafkaProperties odeKafkaProperties, PojoTopics pojoTopics, JsonTopics jsonTopics) { - super(); + /** + * Creates a copy of Asn1DecodedDataRouter to actively consume from Kafka and write the + * deserialized output to the specified POJO and JSON topics. + * + * @param odeKafkaProperties The Kafka properties used to consume and produce to Kafka + * @param pojoTopics The specified POJO topics to write the deserialized POJO output to + * @param jsonTopics The specified JSON topics to write the deserialized JSON output to + **/ + public Asn1DecodedDataRouter(OdeKafkaProperties odeKafkaProperties, PojoTopics pojoTopics, + JsonTopics jsonTopics) { + super(); - this.pojoTopics = pojoTopics; - this.jsonTopics = jsonTopics; - this.bsmProducer = new MessageProducer<>(odeKafkaProperties.getBrokers(), - odeKafkaProperties.getKafkaType(), - null, - OdeBsmSerializer.class.getName(), - odeKafkaProperties.getDisabledTopics()); - this.timProducer = MessageProducer.defaultStringMessageProducer(odeKafkaProperties.getBrokers(), - odeKafkaProperties.getKafkaType(), - odeKafkaProperties.getDisabledTopics()); - this.spatProducer = MessageProducer.defaultStringMessageProducer(odeKafkaProperties.getBrokers(), - odeKafkaProperties.getKafkaType(), - odeKafkaProperties.getDisabledTopics()); - this.ssmProducer = MessageProducer.defaultStringMessageProducer(odeKafkaProperties.getBrokers(), - odeKafkaProperties.getKafkaType(), - odeKafkaProperties.getDisabledTopics()); - this.srmProducer = MessageProducer.defaultStringMessageProducer(odeKafkaProperties.getBrokers(), - odeKafkaProperties.getKafkaType(), - odeKafkaProperties.getDisabledTopics()); - this.psmProducer = MessageProducer.defaultStringMessageProducer(odeKafkaProperties.getBrokers(), - odeKafkaProperties.getKafkaType(), - odeKafkaProperties.getDisabledTopics()); - } + this.pojoTopics = pojoTopics; + this.jsonTopics = jsonTopics; + this.bsmProducer = new MessageProducer<>( + odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), + null, + OdeBsmSerializer.class.getName(), + odeKafkaProperties.getDisabledTopics()); + this.timProducer = MessageProducer.defaultStringMessageProducer( + odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), + odeKafkaProperties.getDisabledTopics()); + this.spatProducer = MessageProducer.defaultStringMessageProducer( + odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), + odeKafkaProperties.getDisabledTopics()); + this.ssmProducer = MessageProducer.defaultStringMessageProducer( + odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), + odeKafkaProperties.getDisabledTopics()); + this.srmProducer = MessageProducer.defaultStringMessageProducer( + odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), + odeKafkaProperties.getDisabledTopics()); + this.psmProducer = MessageProducer.defaultStringMessageProducer( + odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), + odeKafkaProperties.getDisabledTopics()); + } - @Override - public Object process(String consumedData) { - try { - JSONObject consumed = XmlUtils.toJSONObject(consumedData).getJSONObject(OdeAsn1Data.class.getSimpleName()); - J2735DSRCmsgID messageId = J2735DSRCmsgID.valueOf( - consumed.getJSONObject(AppContext.PAYLOAD_STRING) - .getJSONObject(AppContext.DATA_STRING) - .getJSONObject("MessageFrame") - .getInt("messageId") - ); + @Override + public Object process(String consumedData) { + try { + JSONObject consumed = XmlUtils.toJSONObject(consumedData).getJSONObject( + OdeAsn1Data.class.getSimpleName()); + J2735DSRCmsgID messageId = J2735DSRCmsgID.valueOf( + consumed.getJSONObject(AppContext.PAYLOAD_STRING) + .getJSONObject(AppContext.DATA_STRING) + .getJSONObject("MessageFrame") + .getInt("messageId")); - RecordType recordType = RecordType - .valueOf(consumed.getJSONObject(AppContext.METADATA_STRING).getString("recordType")); + RecordType recordType = RecordType + .valueOf(consumed.getJSONObject(AppContext.METADATA_STRING).getString("recordType")); - switch (messageId) { - case BasicSafetyMessage -> routeBSM(consumedData, recordType); - case TravelerInformation -> routeTIM(consumed, recordType); - case SPATMessage -> routeSPAT(consumedData, recordType); - case MAPMessage -> log.debug("MAP data processing no longer supported in this router."); - case SSMMessage -> routeSSM(consumedData, recordType); - case SRMMessage -> routeSRM(consumedData, recordType); - case PersonalSafetyMessage -> routePSM(consumedData, recordType); - case null, default -> log.warn("Unknown message type: {}", messageId); - } - } catch (Exception e) { - log.error("Failed to route received data: {}", consumedData, e); - } - return null; + switch (messageId) { + case BasicSafetyMessage -> routeBSM(consumedData, recordType); + case TravelerInformation -> routeTIM(consumedData, recordType); + case SPATMessage -> routeSPAT(consumedData, recordType); + case MAPMessage -> log.debug("MAP data processing no longer supported in this router."); + case SSMMessage -> routeSSM(consumedData, recordType); + case SRMMessage -> routeSRM(consumedData, recordType); + case PersonalSafetyMessage -> routePSM(consumedData, recordType); + case null, default -> log.warn("Unknown message type: {}", messageId); + } + } catch (Exception e) { + log.error("Failed to route received data: {}", consumedData, e); } + return null; + } - private void routePSM(String consumedData, RecordType recordType) throws XmlUtils.XmlUtilsException { - String odePsmData = OdePsmDataCreatorHelper.createOdePsmData(consumedData).toString(); - if (recordType == RecordType.psmTx) { - psmProducer.send(pojoTopics.getTxPsm(), getRecord().key(), odePsmData); - } - // Send all PSMs also to OdePsmJson - psmProducer.send(jsonTopics.getPsm(), getRecord().key(), odePsmData); - log.debug("Submitted to PSM Pojo topic {}", jsonTopics.getPsm()); + private void routePSM(String consumedData, RecordType recordType) + throws XmlUtils.XmlUtilsException { + String odePsmData = OdePsmDataCreatorHelper.createOdePsmData(consumedData).toString(); + if (recordType == RecordType.psmTx) { + psmProducer.send(pojoTopics.getTxPsm(), getRecord().key(), odePsmData); } + // Send all PSMs also to OdePsmJson + psmProducer.send(jsonTopics.getPsm(), getRecord().key(), odePsmData); + log.debug("Submitted to PSM Pojo topic {}", jsonTopics.getPsm()); + } - private void routeSRM(String consumedData, RecordType recordType) throws XmlUtils.XmlUtilsException { - String odeSrmData = OdeSrmDataCreatorHelper.createOdeSrmData(consumedData).toString(); - if (recordType == RecordType.srmTx) { - srmProducer.send(pojoTopics.getTxSrm(), getRecord().key(), odeSrmData); - } - // Send all SRMs also to OdeSrmJson - srmProducer.send(jsonTopics.getSrm(), getRecord().key(), odeSrmData); - log.debug("Submitted to SRM Pojo topic {}", jsonTopics.getSrm()); + private void routeSRM(String consumedData, RecordType recordType) + throws XmlUtils.XmlUtilsException { + String odeSrmData = OdeSrmDataCreatorHelper.createOdeSrmData(consumedData).toString(); + if (recordType == RecordType.srmTx) { + srmProducer.send(pojoTopics.getTxSrm(), getRecord().key(), odeSrmData); } + // Send all SRMs also to OdeSrmJson + srmProducer.send(jsonTopics.getSrm(), getRecord().key(), odeSrmData); + log.debug("Submitted to SRM Pojo topic {}", jsonTopics.getSrm()); + } - private void routeSSM(String consumedData, RecordType recordType) throws XmlUtils.XmlUtilsException { - String odeSsmData = OdeSsmDataCreatorHelper.createOdeSsmData(consumedData).toString(); - if (recordType == RecordType.ssmTx) { - ssmProducer.send(pojoTopics.getSsm(), getRecord().key(), odeSsmData); - } - // Send all SSMs also to OdeSsmJson - ssmProducer.send(jsonTopics.getSsm(), getRecord().key(), odeSsmData); - log.debug("Submitted to SSM Pojo topic {}", jsonTopics.getSsm()); + private void routeSSM(String consumedData, RecordType recordType) + throws XmlUtils.XmlUtilsException { + String odeSsmData = OdeSsmDataCreatorHelper.createOdeSsmData(consumedData).toString(); + if (recordType == RecordType.ssmTx) { + ssmProducer.send(pojoTopics.getSsm(), getRecord().key(), odeSsmData); } + // Send all SSMs also to OdeSsmJson + ssmProducer.send(jsonTopics.getSsm(), getRecord().key(), odeSsmData); + log.debug("Submitted to SSM Pojo topic {}", jsonTopics.getSsm()); + } - private void routeSPAT(String consumedData, RecordType recordType) throws XmlUtils.XmlUtilsException { - String odeSpatData = OdeSpatDataCreatorHelper.createOdeSpatData(consumedData).toString(); - switch (recordType) { - case dnMsg -> spatProducer.send(jsonTopics.getDnMessage(), getRecord().key(), odeSpatData); - case rxMsg -> spatProducer.send(jsonTopics.getRxSpat(), getRecord().key(), odeSpatData); - case spatTx -> spatProducer.send(pojoTopics.getTxSpat(), getRecord().key(), odeSpatData); - default -> log.trace("Consumed SPAT data with record type: {}", recordType); - } - // Send all SPATs also to OdeSpatJson - spatProducer.send(jsonTopics.getSpat(), getRecord().key(), odeSpatData); - log.debug("Submitted to SPAT Pojo topic {}", jsonTopics.getSpat()); + private void routeSPAT(String consumedData, RecordType recordType) + throws XmlUtils.XmlUtilsException { + String odeSpatData = OdeSpatDataCreatorHelper.createOdeSpatData(consumedData).toString(); + switch (recordType) { + case dnMsg -> spatProducer.send(jsonTopics.getDnMessage(), getRecord().key(), odeSpatData); + case rxMsg -> spatProducer.send(jsonTopics.getRxSpat(), getRecord().key(), odeSpatData); + case spatTx -> spatProducer.send(pojoTopics.getTxSpat(), getRecord().key(), odeSpatData); + default -> log.trace("Consumed SPAT data with record type: {}", recordType); } + // Send all SPATs also to OdeSpatJson + spatProducer.send(jsonTopics.getSpat(), getRecord().key(), odeSpatData); + log.debug("Submitted to SPAT Pojo topic {}", jsonTopics.getSpat()); + } - private void routeTIM(JSONObject consumed, RecordType recordType) { - String odeTimData = TimTransmogrifier.createOdeTimData(consumed).toString(); - switch (recordType) { - case dnMsg -> timProducer.send(jsonTopics.getDnMessage(), getRecord().key(), odeTimData); - case rxMsg -> timProducer.send(jsonTopics.getRxTim(), getRecord().key(), odeTimData); - default -> log.trace("Consumed TIM data with record type: {}", recordType); - } - // Send all TIMs also to OdeTimJson - timProducer.send(jsonTopics.getTim(), getRecord().key(), odeTimData); - log.debug("Submitted to TIM Pojo topic: {}", jsonTopics.getTim()); + private void routeTIM(String consumedData, RecordType recordType) + throws XmlUtils.XmlUtilsException { + String odeTimData = OdeTimDataCreatorHelper.createOdeTimDataFromDecoded( + consumedData).toString(); + switch (recordType) { + case dnMsg -> timProducer.send(jsonTopics.getDnMessage(), getRecord().key(), odeTimData); + case rxMsg -> timProducer.send(jsonTopics.getRxTim(), getRecord().key(), odeTimData); + default -> log.trace("Consumed TIM data with record type: {}", recordType); } + // Send all TIMs also to OdeTimJson + timProducer.send(jsonTopics.getTim(), getRecord().key(), odeTimData); + log.debug("Submitted to TIM Pojo topic: {}", jsonTopics.getTim()); + } - private void routeBSM(String consumedData, RecordType recordType) throws XmlUtils.XmlUtilsException { - // ODE-518/ODE-604 Demultiplex the messages to appropriate topics based on the "recordType" - OdeBsmData odeBsmData = OdeBsmDataCreatorHelper.createOdeBsmData(consumedData); - switch (recordType) { - case bsmLogDuringEvent -> bsmProducer.send(pojoTopics.getBsmDuringEvent(), getRecord().key(), odeBsmData); - case rxMsg -> bsmProducer.send(pojoTopics.getRxBsm(), getRecord().key(), odeBsmData); - case bsmTx -> bsmProducer.send(pojoTopics.getTxBsm(), getRecord().key(), odeBsmData); - default -> log.trace("Consumed BSM data with record type: {}", recordType); - } - // Send all BSMs also to OdeBsmPojo - bsmProducer.send(pojoTopics.getBsm(), getRecord().key(), odeBsmData); - log.debug("Submitted to BSM Pojo topic {}", pojoTopics.getBsm()); + private void routeBSM(String consumedData, RecordType recordType) + throws XmlUtils.XmlUtilsException { + // ODE-518/ODE-604 Demultiplex the messages to appropriate topics based on the + // "recordType" + OdeBsmData odeBsmData = OdeBsmDataCreatorHelper.createOdeBsmData(consumedData); + switch (recordType) { + case bsmLogDuringEvent -> bsmProducer.send(pojoTopics.getBsmDuringEvent(), + getRecord().key(), odeBsmData); + case rxMsg -> bsmProducer.send(pojoTopics.getRxBsm(), getRecord().key(), odeBsmData); + case bsmTx -> bsmProducer.send(pojoTopics.getTxBsm(), getRecord().key(), odeBsmData); + default -> log.trace("Consumed BSM data with record type: {}", recordType); } + // Send all BSMs also to OdeBsmPojo + bsmProducer.send(pojoTopics.getBsm(), getRecord().key(), odeBsmData); + log.debug("Submitted to BSM Pojo topic {}", pojoTopics.getBsm()); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java index 7a4d2193f..297dcaade 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java @@ -1,20 +1,24 @@ /******************************************************************************* * Copyright 2018 572682 * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + *

http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.services.asn1; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; import lombok.extern.slf4j.Slf4j; import org.json.JSONArray; import org.json.JSONException; @@ -22,9 +26,9 @@ import us.dot.its.jpo.ode.OdeTimJsonTopology; import us.dot.its.jpo.ode.context.AppContext; import us.dot.its.jpo.ode.eventlog.EventLogger; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; import us.dot.its.jpo.ode.kafka.topics.JsonTopics; -import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.topics.SDXDepositorTopics; import us.dot.its.jpo.ode.model.OdeAsn1Data; import us.dot.its.jpo.ode.plugin.ServiceRequest; @@ -39,401 +43,460 @@ import us.dot.its.jpo.ode.wrapper.AbstractSubscriberProcessor; import us.dot.its.jpo.ode.wrapper.MessageProducer; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; - +/** + * The Asn1EncodedDataRouter is responsible for routing encoded TIM messages + * that are consumed from the Kafka topic.Asn1EncoderOutput topic and decide + * whether to route to the SDX or an RSU. + **/ @Slf4j public class Asn1EncodedDataRouter extends AbstractSubscriberProcessor { - private static final String BYTES = "bytes"; - private static final String MESSAGE_FRAME = "MessageFrame"; - private static final String ERROR_ON_SDX_DEPOSIT = "Error on SDX deposit."; + private static final String BYTES = "bytes"; + private static final String MESSAGE_FRAME = "MessageFrame"; + private static final String ERROR_ON_SDX_DEPOSIT = "Error on SDX deposit."; - public static class Asn1EncodedDataRouterException extends Exception { - private static final long serialVersionUID = 1L; + /** + * Exception for Asn1EncodedDataRouter specific failures. + */ + public static class Asn1EncodedDataRouterException extends Exception { + private static final long serialVersionUID = 1L; - public Asn1EncodedDataRouterException(String string) { - super(string); - } - } - - private final Asn1CoderTopics asn1CoderTopics; - private final JsonTopics jsonTopics; - - private final MessageProducer stringMsgProducer; - private final OdeTimJsonTopology odeTimJsonTopology; - private final Asn1CommandManager asn1CommandManager; - private final boolean dataSigningEnabledSDW; - private final boolean dataSigningEnabledRSU; - - public Asn1EncodedDataRouter(OdeKafkaProperties odeKafkaProperties, - Asn1CoderTopics asn1CoderTopics, - JsonTopics jsonTopics, - SDXDepositorTopics sdxDepositorTopics, - RsuProperties rsuProperties, - SecurityServicesProperties securityServicesProperties) { - super(); - - this.asn1CoderTopics = asn1CoderTopics; - this.jsonTopics = jsonTopics; - - this.stringMsgProducer = MessageProducer.defaultStringMessageProducer(odeKafkaProperties.getBrokers(), - odeKafkaProperties.getKafkaType(), - odeKafkaProperties.getDisabledTopics()); - - this.asn1CommandManager = new Asn1CommandManager(odeKafkaProperties, sdxDepositorTopics, rsuProperties, securityServicesProperties); - this.dataSigningEnabledSDW = securityServicesProperties.getIsSdwSigningEnabled(); - this.dataSigningEnabledRSU = securityServicesProperties.getIsRsuSigningEnabled(); - - odeTimJsonTopology = new OdeTimJsonTopology(odeKafkaProperties, jsonTopics.getTim()); + public Asn1EncodedDataRouterException(String string) { + super(string); } - - @Override - public Object process(String consumedData) { - try { - log.debug("Consumed: {}", consumedData); - JSONObject consumedObj = XmlUtils.toJSONObject(consumedData).getJSONObject(OdeAsn1Data.class.getSimpleName()); - - /* - * When receiving the 'rsus' in xml, since there is only one 'rsu' and - * there is no construct for array in xml, the rsus does not translate - * to an array of 1 element. The following workaround, resolves this - * issue. - */ - JSONObject metadata = consumedObj.getJSONObject(AppContext.METADATA_STRING); - - if (metadata.has(TimTransmogrifier.REQUEST_STRING)) { - JSONObject request = metadata.getJSONObject(TimTransmogrifier.REQUEST_STRING); - if (request.has(TimTransmogrifier.RSUS_STRING)) { - Object rsus = request.get(TimTransmogrifier.RSUS_STRING); - if (rsus instanceof JSONObject) { - JSONObject rsusIn = (JSONObject) request.get(TimTransmogrifier.RSUS_STRING); - if (rsusIn.has(TimTransmogrifier.RSUS_STRING)) { - Object rsu = rsusIn.get(TimTransmogrifier.RSUS_STRING); - JSONArray rsusOut = new JSONArray(); - if (rsu instanceof JSONArray) { - log.debug("Multiple RSUs exist in the request: {}", request); - JSONArray rsusInArray = (JSONArray) rsu; - for (int i = 0; i < rsusInArray.length(); i++) { - rsusOut.put(rsusInArray.get(i)); - } - request.put(TimTransmogrifier.RSUS_STRING, rsusOut); - } else if (rsu instanceof JSONObject) { - log.debug("Single RSU exists in the request: {}", request); - rsusOut.put(rsu); - request.put(TimTransmogrifier.RSUS_STRING, rsusOut); - } else { - log.debug("No RSUs exist in the request: {}", request); - request.remove(TimTransmogrifier.RSUS_STRING); - } - } - } + } + + private final Asn1CoderTopics asn1CoderTopics; + private final JsonTopics jsonTopics; + + private final MessageProducer stringMsgProducer; + private final OdeTimJsonTopology odeTimJsonTopology; + private final Asn1CommandManager asn1CommandManager; + private final boolean dataSigningEnabledSDW; + private final boolean dataSigningEnabledRSU; + + /** + * Instantiates the Asn1EncodedDataRouter to actively consume from Kafka and route the + * the encoded TIM messages to the SDX and RSUs. + * + * @param odeKafkaProperties The Kafka properties used to consume and produce to Kafka + * @param asn1CoderTopics The specified ASN1 Coder topics + * @param jsonTopics The specified JSON topics to write to + * @param sdxDepositorTopics The SDX depositor topics to write to + * @param rsuProperties The RSU properties to use + * @param securityServicesProperties The security services properties to use + **/ + public Asn1EncodedDataRouter(OdeKafkaProperties odeKafkaProperties, + Asn1CoderTopics asn1CoderTopics, + JsonTopics jsonTopics, + SDXDepositorTopics sdxDepositorTopics, + RsuProperties rsuProperties, + SecurityServicesProperties securityServicesProperties) { + super(); + + this.asn1CoderTopics = asn1CoderTopics; + this.jsonTopics = jsonTopics; + + this.stringMsgProducer = MessageProducer.defaultStringMessageProducer( + odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), + odeKafkaProperties.getDisabledTopics()); + + this.asn1CommandManager = new Asn1CommandManager( + odeKafkaProperties, + sdxDepositorTopics, + rsuProperties, + securityServicesProperties); + this.dataSigningEnabledSDW = securityServicesProperties.getIsSdwSigningEnabled(); + this.dataSigningEnabledRSU = securityServicesProperties.getIsRsuSigningEnabled(); + + odeTimJsonTopology = new OdeTimJsonTopology(odeKafkaProperties, jsonTopics.getTim()); + } + + @Override + public Object process(String consumedData) { + try { + log.debug("Consumed: {}", consumedData); + JSONObject consumedObj = XmlUtils.toJSONObject(consumedData).getJSONObject( + OdeAsn1Data.class.getSimpleName()); + + /* + * When receiving the 'rsus' in xml, since there is only one 'rsu' and + * there is no construct for array in xml, the rsus does not translate + * to an array of 1 element. The following workaround, resolves this + * issue. + */ + JSONObject metadata = consumedObj.getJSONObject(AppContext.METADATA_STRING); + + if (metadata.has(TimTransmogrifier.REQUEST_STRING)) { + JSONObject request = metadata.getJSONObject(TimTransmogrifier.REQUEST_STRING); + if (request.has(TimTransmogrifier.RSUS_STRING)) { + Object rsus = request.get(TimTransmogrifier.RSUS_STRING); + if (rsus instanceof JSONObject) { + JSONObject rsusIn = (JSONObject) request.get(TimTransmogrifier.RSUS_STRING); + if (rsusIn.has(TimTransmogrifier.RSUS_STRING)) { + Object rsu = rsusIn.get(TimTransmogrifier.RSUS_STRING); + JSONArray rsusOut = new JSONArray(); + if (rsu instanceof JSONArray) { + log.debug("Multiple RSUs exist in the request: {}", request); + JSONArray rsusInArray = (JSONArray) rsu; + for (int i = 0; i < rsusInArray.length(); i++) { + rsusOut.put(rsusInArray.get(i)); } - - // Convert JSON to POJO - ServiceRequest servicerequest = getServicerequest(consumedObj); - - processEncodedTim(servicerequest, consumedObj); - } else { - throw new Asn1EncodedDataRouterException("Invalid or missing '" - + TimTransmogrifier.REQUEST_STRING + "' object in the encoder response"); - } - } catch (Exception e) { - String msg = "Error in processing received message from ASN.1 Encoder module: " + consumedData; - if (log.isDebugEnabled()) { - // print error message and stack trace - EventLogger.logger.error(msg, e); - log.error(msg, e); - } else { - // print error message only - EventLogger.logger.error(msg); - log.error(msg); + request.put(TimTransmogrifier.RSUS_STRING, rsusOut); + } else if (rsu instanceof JSONObject) { + log.debug("Single RSU exists in the request: {}", request); + rsusOut.put(rsu); + request.put(TimTransmogrifier.RSUS_STRING, rsusOut); + } else { + log.debug("No RSUs exist in the request: {}", request); + request.remove(TimTransmogrifier.RSUS_STRING); + } } + } } - return null; - } - - public ServiceRequest getServicerequest(JSONObject consumedObj) { - String sr = consumedObj.getJSONObject(AppContext.METADATA_STRING).getJSONObject(TimTransmogrifier.REQUEST_STRING).toString(); - log.debug("ServiceRequest: {}", sr); // Convert JSON to POJO - ServiceRequest serviceRequest = null; - try { - serviceRequest = (ServiceRequest) JsonUtils.fromJson(sr, ServiceRequest.class); - - } catch (Exception e) { - String errMsg = "Malformed JSON."; - EventLogger.logger.error(errMsg, e); - log.error(errMsg, e); - } - - return serviceRequest; + ServiceRequest servicerequest = getServicerequest(consumedObj); + + processEncodedTim(servicerequest, consumedObj); + } else { + throw new Asn1EncodedDataRouterException("Invalid or missing '" + + TimTransmogrifier.REQUEST_STRING + "' object in the encoder response"); + } + } catch (Exception e) { + String msg = "Error in processing received message from ASN.1 Encoder module: " + + consumedData; + if (log.isDebugEnabled()) { + // print error message and stack trace + EventLogger.logger.error(msg, e); + log.error(msg, e); + } else { + // print error message only + EventLogger.logger.error(msg); + log.error(msg); + } } - - public void processEncodedTim(ServiceRequest request, JSONObject consumedObj) { - - JSONObject dataObj = consumedObj.getJSONObject(AppContext.PAYLOAD_STRING).getJSONObject(AppContext.DATA_STRING); - JSONObject metadataObj = consumedObj.getJSONObject(AppContext.METADATA_STRING); - - // CASE 1: no SDW in metadata (SNMP deposit only) - // - sign MF - // - send to RSU - // CASE 2: SDW in metadata but no ASD in body (send back for another - // encoding) - // - sign MF - // - send to RSU - // - craft ASD object - // - publish back to encoder stream - // CASE 3: If SDW in metadata and ASD in body (double encoding complete) - // - send to SDX - - if (!dataObj.has(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING)) { - log.debug("Unsigned message received"); - // We don't have ASD, therefore it must be just a MessageFrame that needs to be signed - // No support for unsecured MessageFrame only payload. - // Cases 1 & 2 - // Sign and send to RSUs - - JSONObject mfObj = dataObj.getJSONObject(MESSAGE_FRAME); - - String hexEncodedTim = mfObj.getString(BYTES); - log.debug("Encoded message - phase 1: {}", hexEncodedTim); - //use Asnc1 library to decode the encoded tim returned from ASNC1; another class two blockers: decode the tim and decode the message-sign - - // Case 1: SNMP-deposit - if (dataSigningEnabledRSU && request.getRsus() != null) { - hexEncodedTim = signTIMAndProduceToExpireTopic(hexEncodedTim, consumedObj); - } else { - // if header is present, strip it - if (isHeaderPresent(hexEncodedTim)) { - String header = hexEncodedTim.substring(0, hexEncodedTim.indexOf("001F") + 4); - log.debug("Stripping header from unsigned message: {}", header); - hexEncodedTim = stripHeader(hexEncodedTim); - mfObj.remove(BYTES); - mfObj.put(BYTES, hexEncodedTim); - dataObj.remove(MESSAGE_FRAME); - dataObj.put(MESSAGE_FRAME, mfObj); - consumedObj.remove(AppContext.PAYLOAD_STRING); - consumedObj.put(AppContext.PAYLOAD_STRING, dataObj); - } - } - - if (null != request.getSnmp() && null != request.getRsus() && null != hexEncodedTim) { - log.info("Sending message to RSUs..."); - asn1CommandManager.sendToRsus(request, hexEncodedTim); - } - - hexEncodedTim = mfObj.getString(BYTES); - - // Case 2: SDX-deposit - if (dataSigningEnabledSDW && request.getSdw() != null) { - hexEncodedTim = signTIMAndProduceToExpireTopic(hexEncodedTim, consumedObj); - } - - // Deposit encoded & signed TIM to TMC-filtered topic if TMC-generated - depositToFilteredTopic(metadataObj, hexEncodedTim); - if (request.getSdw() != null) { - // Case 2 only - - log.debug("Publishing message for round 2 encoding!"); - String xmlizedMessage = asn1CommandManager.packageSignedTimIntoAsd(request, hexEncodedTim); - - stringMsgProducer.send(asn1CoderTopics.getEncoderInput(), null, xmlizedMessage); - } - - } else { - //We have encoded ASD. It could be either UNSECURED or secured. - if (dataSigningEnabledSDW && request.getSdw() != null) { - log.debug("Signed message received. Depositing it to SDW."); - // We have a ASD with signed MessageFrame - // Case 3 - JSONObject asdObj = dataObj.getJSONObject(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING); - try { - JSONObject deposit = new JSONObject(); - deposit.put("estimatedRemovalDate", request.getSdw().getEstimatedRemovalDate()); - deposit.put("encodedMsg", asdObj.getString(BYTES)); - asn1CommandManager.depositToSdw(deposit.toString()); - } catch (JSONException | Asn1CommandManagerException e) { - String msg = ERROR_ON_SDX_DEPOSIT; - log.error(msg, e); - } - } else { - log.debug("Unsigned ASD received. Depositing it to SDW."); - //We have ASD with UNSECURED MessageFrame - processEncodedTimUnsecured(request, consumedObj); - } - } + return null; + } + + /** + * Gets the service request based on the consumed JSONObject. + * + * @param consumedObj The object to retrieve the service request for + * @return The service request + */ + public ServiceRequest getServicerequest(JSONObject consumedObj) { + String sr = consumedObj.getJSONObject(AppContext.METADATA_STRING).getJSONObject( + TimTransmogrifier.REQUEST_STRING).toString(); + log.debug("ServiceRequest: {}", sr); + + // Convert JSON to POJO + ServiceRequest serviceRequest = null; + try { + serviceRequest = (ServiceRequest) JsonUtils.fromJson(sr, ServiceRequest.class); + + } catch (Exception e) { + String errMsg = "Malformed JSON."; + EventLogger.logger.error(errMsg, e); + log.error(errMsg, e); } - public void processEncodedTimUnsecured(ServiceRequest request, JSONObject consumedObj) { - // Send TIMs and record results - HashMap responseList = new HashMap<>(); - - JSONObject dataObj = consumedObj - .getJSONObject(AppContext.PAYLOAD_STRING) - .getJSONObject(AppContext.DATA_STRING); - - if (null != request.getSdw()) { - JSONObject asdObj = null; - if (dataObj.has(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING)) { - asdObj = dataObj.getJSONObject(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING); - } else { - log.error("ASD structure present in metadata but not in JSONObject!"); - } - - if (null != asdObj) { - String asdBytes = asdObj.getString(BYTES); - - try { - JSONObject deposit = new JSONObject(); - deposit.put("estimatedRemovalDate", request.getSdw().getEstimatedRemovalDate()); - deposit.put("encodedMsg", asdBytes); - asn1CommandManager.depositToSdw(deposit.toString()); - log.info("SDX deposit successful."); - } catch (Exception e) { - String msg = ERROR_ON_SDX_DEPOSIT; - log.error(msg, e); - EventLogger.logger.error(msg, e); - } - - } else if (log.isErrorEnabled()) { // Added to avoid Sonar's "Invoke method(s) only conditionally." code smell - String msg = "ASN.1 Encoder did not return ASD encoding {}"; - EventLogger.logger.error(msg, consumedObj); - log.error(msg, consumedObj); - } + return serviceRequest; + } + + /** + * Process the signed encoded TIM message. + * + * @param request The service request + * @param consumedObj The consumed JSON object + */ + public void processEncodedTim(ServiceRequest request, JSONObject consumedObj) { + + JSONObject dataObj = consumedObj.getJSONObject(AppContext.PAYLOAD_STRING).getJSONObject( + AppContext.DATA_STRING); + JSONObject metadataObj = consumedObj.getJSONObject(AppContext.METADATA_STRING); + + // CASE 1: no SDW in metadata (SNMP deposit only) + // - sign MF + // - send to RSU + // CASE 2: SDW in metadata but no ASD in body (send back for another + // encoding) + // - sign MF + // - send to RSU + // - craft ASD object + // - publish back to encoder stream + // CASE 3: If SDW in metadata and ASD in body (double encoding complete) + // - send to SDX + + if (!dataObj.has(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING)) { + log.debug("Unsigned message received"); + // We don't have ASD, therefore it must be just a MessageFrame that needs to be + // signed + // No support for unsecured MessageFrame only payload. + // Cases 1 & 2 + // Sign and send to RSUs + + JSONObject mfObj = dataObj.getJSONObject(MESSAGE_FRAME); + + String hexEncodedTim = mfObj.getString(BYTES); + log.debug("Encoded message - phase 1: {}", hexEncodedTim); + // use Asnc1 library to decode the encoded tim returned from ASNC1; another + // class two blockers: decode the tim and decode the message-sign + + // Case 1: SNMP-deposit + if (dataSigningEnabledRSU && request.getRsus() != null) { + hexEncodedTim = signTIMAndProduceToExpireTopic(hexEncodedTim, consumedObj); + } else { + // if header is present, strip it + if (isHeaderPresent(hexEncodedTim)) { + String header = hexEncodedTim.substring(0, hexEncodedTim.indexOf("001F") + 4); + log.debug("Stripping header from unsigned message: {}", header); + hexEncodedTim = stripHeader(hexEncodedTim); + mfObj.remove(BYTES); + mfObj.put(BYTES, hexEncodedTim); + dataObj.remove(MESSAGE_FRAME); + dataObj.put(MESSAGE_FRAME, mfObj); + consumedObj.remove(AppContext.PAYLOAD_STRING); + consumedObj.put(AppContext.PAYLOAD_STRING, dataObj); } - - if (dataObj.has(MESSAGE_FRAME)) { - JSONObject mfObj = dataObj.getJSONObject(MESSAGE_FRAME); - String encodedTim = mfObj.getString(BYTES); - - // if header is present, strip it - if (isHeaderPresent(encodedTim)) { - String header = encodedTim.substring(0, encodedTim.indexOf("001F") + 4); - log.debug("Stripping header from unsigned message: {}", header); - encodedTim = stripHeader(encodedTim); - mfObj.remove(BYTES); - mfObj.put(BYTES, encodedTim); - dataObj.remove(MESSAGE_FRAME); - dataObj.put(MESSAGE_FRAME, mfObj); - consumedObj.remove(AppContext.PAYLOAD_STRING); - consumedObj.put(AppContext.PAYLOAD_STRING, dataObj); - } - - log.debug("Encoded message - phase 2: {}", encodedTim); - - // only send message to rsu if snmp, rsus, and message frame fields are present - if (null != request.getSnmp() && null != request.getRsus() && null != encodedTim) { - log.debug("Encoded message phase 3: {}", encodedTim); - asn1CommandManager.sendToRsus(request, encodedTim); - } + } + + if (null != request.getSnmp() && null != request.getRsus() && null != hexEncodedTim) { + log.info("Sending message to RSUs..."); + asn1CommandManager.sendToRsus(request, hexEncodedTim); + } + + hexEncodedTim = mfObj.getString(BYTES); + + // Case 2: SDX-deposit + if (dataSigningEnabledSDW && request.getSdw() != null) { + hexEncodedTim = signTIMAndProduceToExpireTopic(hexEncodedTim, consumedObj); + } + + // Deposit encoded & signed TIM to TMC-filtered topic if TMC-generated + depositToFilteredTopic(metadataObj, hexEncodedTim); + if (request.getSdw() != null) { + // Case 2 only + + log.debug("Publishing message for round 2 encoding!"); + String xmlizedMessage = asn1CommandManager.packageSignedTimIntoAsd(request, hexEncodedTim); + + stringMsgProducer.send(asn1CoderTopics.getEncoderInput(), null, xmlizedMessage); + } + + } else { + // We have encoded ASD. It could be either UNSECURED or secured. + if (dataSigningEnabledSDW && request.getSdw() != null) { + log.debug("Signed message received. Depositing it to SDW."); + // We have a ASD with signed MessageFrame + // Case 3 + JSONObject asdObj = dataObj.getJSONObject( + Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING); + try { + JSONObject deposit = new JSONObject(); + deposit.put("estimatedRemovalDate", request.getSdw().getEstimatedRemovalDate()); + deposit.put("encodedMsg", asdObj.getString(BYTES)); + asn1CommandManager.depositToSdw(deposit.toString()); + } catch (JSONException | Asn1CommandManagerException e) { + String msg = ERROR_ON_SDX_DEPOSIT; + log.error(msg, e); } - - log.info("TIM deposit response {}", responseList); + } else { + log.debug("Unsigned ASD received. Depositing it to SDW."); + // We have ASD with UNSECURED MessageFrame + processEncodedTimUnsecured(request, consumedObj); + } } + } + + /** + * Process the unsigned encoded TIM message. + * + * @param request The service request + * @param consumedObj The consumed JSON object + */ + public void processEncodedTimUnsecured(ServiceRequest request, JSONObject consumedObj) { + // Send TIMs and record results + HashMap responseList = new HashMap<>(); + JSONObject metadataObj = consumedObj.getJSONObject(AppContext.METADATA_STRING); + + JSONObject dataObj = consumedObj + .getJSONObject(AppContext.PAYLOAD_STRING) + .getJSONObject(AppContext.DATA_STRING); + + if (null != request.getSdw()) { + JSONObject asdObj = null; + if (dataObj.has(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING)) { + asdObj = dataObj.getJSONObject(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING); + } else { + log.error("ASD structure present in metadata but not in JSONObject!"); + } + + if (null != asdObj) { + String asdBytes = asdObj.getString(BYTES); - public String signTIMAndProduceToExpireTopic(String encodedTIM, JSONObject consumedObj) { - log.debug("Sending message for signature! "); - String base64EncodedTim = CodecUtils.toBase64( - CodecUtils.fromHex(encodedTIM)); - JSONObject metadataObjs = consumedObj.getJSONObject(AppContext.METADATA_STRING); - // get max duration time and convert from minutes to milliseconds (unsigned - // integer valid 0 to 2^32-1 in units of - // milliseconds.) from metadata - int maxDurationTime = Integer.valueOf(metadataObjs.get("maxDurationTime").toString()) * 60 * 1000; - String timpacketID = metadataObjs.getString("odePacketID"); - String timStartDateTime = metadataObjs.getString("odeTimStartDateTime"); - String signedResponse = asn1CommandManager.sendForSignature(base64EncodedTim, maxDurationTime); try { - String hexEncodedTim = CodecUtils.toHex( - CodecUtils.fromBase64( - JsonUtils.toJSONObject(JsonUtils.toJSONObject(signedResponse).getString("result")).getString("message-signed"))); - - JSONObject timWithExpiration = new JSONObject(); - timWithExpiration.put("packetID", timpacketID); - timWithExpiration.put("startDateTime", timStartDateTime); - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - try { - JSONObject jsonResult = JsonUtils - .toJSONObject((JsonUtils.toJSONObject(signedResponse).getString("result"))); - // messageExpiry uses unit of seconds - long messageExpiry = Long.parseLong(jsonResult.getString("message-expiry")); - timWithExpiration.put("expirationDate", dateFormat.format(new Date(messageExpiry * 1000))); - } catch (Exception e) { - log.error("Unable to get expiration date from signed messages response ", e); - timWithExpiration.put("expirationDate", "null"); - } - - try { - Date parsedtimTimeStamp = dateFormat.parse(timStartDateTime); - Date requiredExpirationDate = new Date(); - requiredExpirationDate.setTime(parsedtimTimeStamp.getTime() + maxDurationTime); - timWithExpiration.put("requiredExpirationDate", dateFormat.format(requiredExpirationDate)); - } catch (Exception e) { - log.error("Unable to parse requiredExpirationDate ", e); - timWithExpiration.put("requiredExpirationDate", "null"); - } - //publish to Tim expiration kafka - stringMsgProducer.send(jsonTopics.getTimCertExpiration(), null, - timWithExpiration.toString()); - - return hexEncodedTim; - - } catch (JsonUtilsException e1) { - log.error("Unable to parse signed message response ", e1); + JSONObject deposit = new JSONObject(); + deposit.put("estimatedRemovalDate", request.getSdw().getEstimatedRemovalDate()); + deposit.put("encodedMsg", asdBytes); + asn1CommandManager.depositToSdw(deposit.toString()); + log.info("SDX deposit successful."); + } catch (Exception e) { + String msg = ERROR_ON_SDX_DEPOSIT; + log.error(msg, e); + EventLogger.logger.error(msg, e); } - return encodedTIM; - } - /** - * Checks if header is present in encoded message - */ - private boolean isHeaderPresent(String encodedTim) { - return encodedTim.indexOf("001F") > 0; + } else if (log.isErrorEnabled()) { + // Added to avoid Sonar's "Invoke method(s) only conditionally." code smell + String msg = "ASN.1 Encoder did not return ASD encoding {}"; + EventLogger.logger.error(msg, consumedObj); + log.error(msg, consumedObj); + } } - /** - * Strips header from unsigned message (all bytes before 001F hex value) - */ - private String stripHeader(String encodedUnsignedTim) { - String toReturn = ""; - // find 001F hex value - int index = encodedUnsignedTim.indexOf("001F"); - if (index == -1) { - log.warn("No '001F' hex value found in encoded message"); - return encodedUnsignedTim; - } - // strip everything before 001F - toReturn = encodedUnsignedTim.substring(index); - return toReturn; + if (dataObj.has(MESSAGE_FRAME)) { + JSONObject mfObj = dataObj.getJSONObject(MESSAGE_FRAME); + String encodedTim = mfObj.getString(BYTES); + + // Deposit encoded TIM to TMC-filtered topic if TMC-generated + depositToFilteredTopic(metadataObj, encodedTim); + + // if header is present, strip it + if (isHeaderPresent(encodedTim)) { + String header = encodedTim.substring(0, encodedTim.indexOf("001F") + 4); + log.debug("Stripping header from unsigned message: {}", header); + encodedTim = stripHeader(encodedTim); + mfObj.remove(BYTES); + mfObj.put(BYTES, encodedTim); + dataObj.remove(MESSAGE_FRAME); + dataObj.put(MESSAGE_FRAME, mfObj); + consumedObj.remove(AppContext.PAYLOAD_STRING); + consumedObj.put(AppContext.PAYLOAD_STRING, dataObj); + } + + log.debug("Encoded message - phase 2: {}", encodedTim); + + // only send message to rsu if snmp, rsus, and message frame fields are present + if (null != request.getSnmp() && null != request.getRsus() && null != encodedTim) { + log.debug("Encoded message phase 3: {}", encodedTim); + asn1CommandManager.sendToRsus(request, encodedTim); + } } - private void depositToFilteredTopic(JSONObject metadataObj, String hexEncodedTim) { - try { - String generatedBy = metadataObj.getString("recordGeneratedBy"); - String streamId = metadataObj.getJSONObject("serialId").getString("streamId"); - if (!generatedBy.equalsIgnoreCase("TMC")) { - log.debug("Not a TMC-generated TIM. Skipping deposit to TMC-filtered topic."); - return; - } - - String timString = odeTimJsonTopology.query(streamId); - if (timString != null) { - // Set ASN1 data in TIM metadata - JSONObject timJSON = new JSONObject(timString); - JSONObject metadataJSON = timJSON.getJSONObject("metadata"); - metadataJSON.put("asn1", hexEncodedTim); - timJSON.put("metadata", metadataJSON); - - // Send the message w/ asn1 data to the TMC-filtered topic - stringMsgProducer.send(jsonTopics.getTimTmcFiltered(), null, timJSON.toString()); - } - } catch (JSONException e) { - log.error("Error while fetching recordGeneratedBy field: {}", e.getMessage()); - } catch (Exception e) { - log.error("Error while updating TIM: {}", e.getMessage()); - } + log.info("TIM deposit response {}", responseList); + } + + /** + * Sign the encoded TIM message and write to Kafka with an expiration time. + * + * @param encodedTIM The encoded TIM message to be signed + * @param consumedObj The JSON object to be consumed + * @return The String representation of the encodedTim payload + */ + public String signTIMAndProduceToExpireTopic(String encodedTIM, JSONObject consumedObj) { + log.debug("Sending message for signature! "); + String base64EncodedTim = CodecUtils.toBase64( + CodecUtils.fromHex(encodedTIM)); + JSONObject metadataObjs = consumedObj.getJSONObject(AppContext.METADATA_STRING); + // get max duration time and convert from minutes to milliseconds (unsigned + // integer valid 0 to 2^32-1 in units of + // milliseconds.) from metadata + int maxDurationTime = Integer.valueOf(metadataObjs.get("maxDurationTime").toString()) + * 60 * 1000; + String timpacketID = metadataObjs.getString("odePacketID"); + String timStartDateTime = metadataObjs.getString("odeTimStartDateTime"); + String signedResponse = asn1CommandManager.sendForSignature(base64EncodedTim, maxDurationTime); + try { + final String hexEncodedTim = CodecUtils.toHex( + CodecUtils.fromBase64( + JsonUtils.toJSONObject(JsonUtils.toJSONObject(signedResponse).getString("result")) + .getString("message-signed"))); + + JSONObject timWithExpiration = new JSONObject(); + timWithExpiration.put("packetID", timpacketID); + timWithExpiration.put("startDateTime", timStartDateTime); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + try { + JSONObject jsonResult = JsonUtils + .toJSONObject((JsonUtils.toJSONObject(signedResponse).getString("result"))); + // messageExpiry uses unit of seconds + long messageExpiry = Long.parseLong(jsonResult.getString("message-expiry")); + timWithExpiration.put("expirationDate", dateFormat.format(new Date(messageExpiry * 1000))); + } catch (Exception e) { + log.error("Unable to get expiration date from signed messages response ", e); + timWithExpiration.put("expirationDate", "null"); + } + + try { + Date parsedtimTimeStamp = dateFormat.parse(timStartDateTime); + Date requiredExpirationDate = new Date(); + requiredExpirationDate.setTime(parsedtimTimeStamp.getTime() + maxDurationTime); + timWithExpiration.put("requiredExpirationDate", dateFormat.format(requiredExpirationDate)); + } catch (Exception e) { + log.error("Unable to parse requiredExpirationDate ", e); + timWithExpiration.put("requiredExpirationDate", "null"); + } + // publish to Tim expiration kafka + stringMsgProducer.send(jsonTopics.getTimCertExpiration(), null, + timWithExpiration.toString()); + + return hexEncodedTim; + + } catch (JsonUtilsException e1) { + log.error("Unable to parse signed message response ", e1); + } + return encodedTIM; + } + + /** + * Checks if header is present in encoded message. + */ + private boolean isHeaderPresent(String encodedTim) { + return encodedTim.indexOf("001F") > 0; + } + + /** + * Strips header from unsigned message (all bytes before 001F hex value). + */ + private String stripHeader(String encodedUnsignedTim) { + String toReturn = ""; + // find 001F hex value + int index = encodedUnsignedTim.indexOf("001F"); + if (index == -1) { + log.warn("No '001F' hex value found in encoded message"); + return encodedUnsignedTim; + } + // strip everything before 001F + toReturn = encodedUnsignedTim.substring(index); + return toReturn; + } + + private void depositToFilteredTopic(JSONObject metadataObj, String hexEncodedTim) { + try { + String generatedBy = metadataObj.getString("recordGeneratedBy"); + String streamId = metadataObj.getJSONObject("serialId").getString("streamId"); + if (!generatedBy.equalsIgnoreCase("TMC")) { + log.debug("Not a TMC-generated TIM. Skipping deposit to TMC-filtered topic."); + return; + } + + String timString = odeTimJsonTopology.query(streamId); + if (timString != null) { + // Set ASN1 data in TIM metadata + JSONObject timJSON = new JSONObject(timString); + JSONObject metadataJSON = timJSON.getJSONObject("metadata"); + metadataJSON.put("asn1", hexEncodedTim); + timJSON.put("metadata", metadataJSON); + + // Send the message w/ asn1 data to the TMC-filtered topic + stringMsgProducer.send(jsonTopics.getTimTmcFiltered(), null, timJSON.toString()); + } + } catch (JSONException e) { + log.error("Error while fetching recordGeneratedBy field: {}", e.getMessage()); + } catch (Exception e) { + log.error("Error while updating TIM: {}", e.getMessage()); } + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDepositController.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDepositController.java index 16f56d56c..76071de23 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDepositController.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDepositController.java @@ -1,34 +1,49 @@ /******************************************************************************* * Copyright 2018 572682 * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + *

http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.traveler; import com.fasterxml.jackson.databind.node.ObjectNode; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.format.DateTimeParseException; +import java.util.Date; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; import lombok.extern.slf4j.Slf4j; -import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; -import us.dot.its.jpo.ode.context.AppContext; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; +import us.dot.its.jpo.ode.coder.OdeTimDataCreatorHelper; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; import us.dot.its.jpo.ode.kafka.topics.JsonTopics; -import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.topics.PojoTopics; import us.dot.its.jpo.ode.model.OdeMsgMetadata.GeneratedBy; -import us.dot.its.jpo.ode.model.*; +import us.dot.its.jpo.ode.model.OdeMsgPayload; +import us.dot.its.jpo.ode.model.OdeObject; +import us.dot.its.jpo.ode.model.OdeRequestMsgMetadata; +import us.dot.its.jpo.ode.model.OdeTimData; +import us.dot.its.jpo.ode.model.OdeTravelerInputData; +import us.dot.its.jpo.ode.model.SerialId; import us.dot.its.jpo.ode.plugin.ServiceRequest; import us.dot.its.jpo.ode.plugin.ServiceRequest.OdeInternal; import us.dot.its.jpo.ode.plugin.ServiceRequest.OdeInternal.RequestVerb; @@ -45,264 +60,289 @@ import us.dot.its.jpo.ode.wrapper.MessageProducer; import us.dot.its.jpo.ode.wrapper.serdes.OdeTimSerializer; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.format.DateTimeParseException; -import java.util.Date; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; - +/** + * The REST controller for handling TIM creation requests. + */ @RestController @Slf4j public class TimDepositController { - private static final TimIngestTracker INGEST_MONITOR = TimIngestTracker.getInstance(); - - private static final String ERRSTR = "error"; - private static final String WARNING = "warning"; - private static final String SUCCESS = "success"; + private static final TimIngestTracker INGEST_MONITOR = TimIngestTracker.getInstance(); - private final Asn1CoderTopics asn1CoderTopics; - private final PojoTopics pojoTopics; - private final JsonTopics jsonTopics; + private static final String ERRSTR = "error"; + private static final String WARNING = "warning"; + private static final String SUCCESS = "success"; - private final SerialId serialIdJ2735; - private final SerialId serialIdOde; + private final Asn1CoderTopics asn1CoderTopics; + private final PojoTopics pojoTopics; + private final JsonTopics jsonTopics; - private final MessageProducer stringMsgProducer; - private final MessageProducer timProducer; + private final SerialId serialIdJ2735; + private final SerialId serialIdOde; - private final boolean dataSigningEnabledSDW; + private final MessageProducer stringMsgProducer; + private final MessageProducer timProducer; - public static class TimDepositControllerException extends Exception { + private final boolean dataSigningEnabledSDW; - private static final long serialVersionUID = 1L; + /** + * Unique exception for the TimDepositController to handle error state responses to the client. + */ + public static class TimDepositControllerException extends Exception { - public TimDepositControllerException(String errMsg) { - super(errMsg); - } + private static final long serialVersionUID = 1L; + public TimDepositControllerException(String errMsg) { + super(errMsg); } - @Autowired - public TimDepositController(OdeKafkaProperties odeKafkaProperties, - Asn1CoderTopics asn1CoderTopics, - PojoTopics pojoTopics, - JsonTopics jsonTopics, - TimIngestTrackerProperties ingestTrackerProperties, - SecurityServicesProperties securityServicesProperties) { - super(); - - this.asn1CoderTopics = asn1CoderTopics; - this.pojoTopics = pojoTopics; - this.jsonTopics = jsonTopics; - this.serialIdJ2735 = new SerialId(); - this.serialIdOde = new SerialId(); - - this.stringMsgProducer = MessageProducer.defaultStringMessageProducer(odeKafkaProperties.getBrokers(), - odeKafkaProperties.getKafkaType(), odeKafkaProperties.getDisabledTopics()); - this.timProducer = new MessageProducer<>(odeKafkaProperties.getBrokers(), odeKafkaProperties.getKafkaType(), - null, OdeTimSerializer.class.getName(), odeKafkaProperties.getDisabledTopics()); - - this.dataSigningEnabledSDW = securityServicesProperties.getIsSdwSigningEnabled(); - - // start the TIM ingest monitoring service if enabled - if (ingestTrackerProperties.isTrackingEnabled()) { - log.info("TIM ingest monitoring enabled."); - - ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); - - scheduledExecutorService.scheduleAtFixedRate( - new TimIngestWatcher(ingestTrackerProperties.getInterval()), - ingestTrackerProperties.getInterval(), - ingestTrackerProperties.getInterval(), - java.util.concurrent.TimeUnit.SECONDS); - } else { - log.info("TIM ingest monitoring disabled."); - } + } + + /** + * Spring Autowired constructor for the REST controller to properly initialize. + */ + @Autowired + public TimDepositController(OdeKafkaProperties odeKafkaProperties, + Asn1CoderTopics asn1CoderTopics, + PojoTopics pojoTopics, + JsonTopics jsonTopics, + TimIngestTrackerProperties ingestTrackerProperties, + SecurityServicesProperties securityServicesProperties) { + super(); + + this.asn1CoderTopics = asn1CoderTopics; + this.pojoTopics = pojoTopics; + this.jsonTopics = jsonTopics; + this.serialIdJ2735 = new SerialId(); + this.serialIdOde = new SerialId(); + + this.stringMsgProducer = MessageProducer.defaultStringMessageProducer( + odeKafkaProperties.getBrokers(), odeKafkaProperties.getKafkaType(), + odeKafkaProperties.getDisabledTopics()); + this.timProducer = new MessageProducer<>(odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), null, + OdeTimSerializer.class.getName(), odeKafkaProperties.getDisabledTopics()); + + this.dataSigningEnabledSDW = securityServicesProperties.getIsSdwSigningEnabled(); + + // start the TIM ingest monitoring service if enabled + if (ingestTrackerProperties.isTrackingEnabled()) { + log.info("TIM ingest monitoring enabled."); + + ScheduledExecutorService scheduledExecutorService = Executors + .newSingleThreadScheduledExecutor(); + + scheduledExecutorService.scheduleAtFixedRate( + new TimIngestWatcher(ingestTrackerProperties.getInterval()), + ingestTrackerProperties.getInterval(), + ingestTrackerProperties.getInterval(), + java.util.concurrent.TimeUnit.SECONDS); + } else { + log.info("TIM ingest monitoring disabled."); + } + } + + /** + * Send a TIM with the appropriate deposit type, ODE.PUT or ODE.POST + * + * @param jsonString The value of the JSON message + * @param verb The HTTP verb being requested + * @return The request completion status + */ + public synchronized ResponseEntity depositTim(String jsonString, RequestVerb verb) { + + if (null == jsonString || jsonString.isEmpty()) { + String errMsg = "Empty request."; + log.error(errMsg); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); } - /** - * Send a TIM with the appropriate deposit type, ODE.PUT or ODE.POST - * - * @param jsonString - * @param verb - * @return - */ - public synchronized ResponseEntity depositTim(String jsonString, RequestVerb verb) { - - if (null == jsonString || jsonString.isEmpty()) { - String errMsg = "Empty request."; - log.error(errMsg); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); - } - - OdeTravelerInputData odeTID; - ServiceRequest request; - try { - // Convert JSON to POJO - odeTID = (OdeTravelerInputData) JsonUtils.jacksonFromJson(jsonString, OdeTravelerInputData.class, true); - if (odeTID == null) { - String errMsg = "Malformed or non-compliant JSON syntax."; - log.error(errMsg); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); - } - - request = odeTID.getRequest(); - if (request == null) { - throw new TimDepositControllerException("Request element is required as of version 3."); - } - - if (request.getOde() == null) { - request.setOde(new OdeInternal()); - } - - request.getOde().setVerb(verb); - - } catch (TimDepositControllerException e) { - String errMsg = "Missing or invalid argument: " + e.getMessage(); - log.error(errMsg, e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); - } catch (JsonUtilsException e) { - String errMsg = "Malformed or non-compliant JSON syntax."; - log.error(errMsg, e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); - } - - // Add metadata to message and publish to kafka - OdeTravelerInformationMessage tim = odeTID.getTim(); - OdeMsgPayload timDataPayload = new OdeMsgPayload(tim); - OdeRequestMsgMetadata timMetadata = new OdeRequestMsgMetadata(timDataPayload, request); - - // set packetID in tim Metadata - timMetadata.setOdePacketID(tim.getPacketID()); - // set maxDurationTime in tim Metadata and set latest startDatetime in tim - // metadata - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - if (null != tim.getDataframes() && tim.getDataframes().length > 0) { - int maxDurationTime = 0; - Date latestStartDateTime = null; - for (DataFrame dataFrameItem : tim.getDataframes()) { - maxDurationTime = Math.max(maxDurationTime, dataFrameItem.getDurationTime()); - try { - latestStartDateTime = (latestStartDateTime == null || (latestStartDateTime != null - && latestStartDateTime.before(dateFormat.parse(dataFrameItem.getStartDateTime()))) - ? dateFormat.parse(dataFrameItem.getStartDateTime()) - : latestStartDateTime); - } catch (ParseException e) { - log.error("Invalid dateTime parse: ", e); - } - } - timMetadata.setMaxDurationTime(maxDurationTime); - timMetadata.setOdeTimStartDateTime(dateFormat.format(latestStartDateTime)); - } - // Setting the SerialId to OdeBradcastTim serialId to be changed to - // J2735BroadcastTim serialId after the message has been published to - // OdeTimBrodcast topic - timMetadata.setSerialId(serialIdOde); - timMetadata.setRecordGeneratedBy(GeneratedBy.TMC); + OdeTravelerInputData odeTID; + ServiceRequest request; + try { + // Convert JSON to POJO + odeTID = (OdeTravelerInputData) JsonUtils.jacksonFromJson(jsonString, + OdeTravelerInputData.class, true); + if (odeTID == null) { + String errMsg = "Malformed or non-compliant JSON syntax."; + log.error(errMsg); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + } + + request = odeTID.getRequest(); + if (request == null) { + throw new TimDepositControllerException("Request element is required as of version 3."); + } + + if (request.getOde() == null) { + request.setOde(new OdeInternal()); + } + + request.getOde().setVerb(verb); + + } catch (TimDepositControllerException e) { + String errMsg = "Missing or invalid argument: " + e.getMessage(); + log.error(errMsg, e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + } catch (JsonUtilsException e) { + String errMsg = "Malformed or non-compliant JSON syntax."; + log.error(errMsg, e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + } + // Add metadata to message and publish to kafka + OdeTravelerInformationMessage tim = odeTID.getTim(); + OdeMsgPayload timDataPayload = new OdeMsgPayload(tim); + OdeRequestMsgMetadata timMetadata = new OdeRequestMsgMetadata(timDataPayload, request); + + // set packetID in tim Metadata + timMetadata.setOdePacketID(tim.getPacketID()); + // set maxDurationTime in tim Metadata and set latest startDatetime in tim + // metadata + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + if (null != tim.getDataframes() && tim.getDataframes().length > 0) { + int maxDurationTime = 0; + Date latestStartDateTime = null; + for (DataFrame dataFrameItem : tim.getDataframes()) { + maxDurationTime = Math.max(maxDurationTime, dataFrameItem.getDurationTime()); try { - timMetadata.setRecordGeneratedAt(DateTimeUtils.isoDateTime(DateTimeUtils.isoDateTime(tim.getTimeStamp()))); - } catch (DateTimeParseException e) { - String errMsg = "Invalid timestamp in tim record: " + tim.getTimeStamp(); - log.error(errMsg, e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + latestStartDateTime = (latestStartDateTime == null || (latestStartDateTime != null + && latestStartDateTime.before(dateFormat.parse(dataFrameItem.getStartDateTime()))) + ? dateFormat.parse(dataFrameItem.getStartDateTime()) + : latestStartDateTime); + } catch (ParseException e) { + log.error("Invalid dateTime parse: ", e); } + } + timMetadata.setMaxDurationTime(maxDurationTime); + timMetadata.setOdeTimStartDateTime(dateFormat.format(latestStartDateTime)); + } + // Setting the SerialId to OdeBradcastTim serialId to be changed to + // J2735BroadcastTim serialId after the message has been published to + // OdeTimBrodcast topic + timMetadata.setSerialId(serialIdOde); + timMetadata.setRecordGeneratedBy(GeneratedBy.TMC); + + try { + timMetadata.setRecordGeneratedAt(DateTimeUtils.isoDateTime( + DateTimeUtils.isoDateTime(tim.getTimeStamp()))); + } catch (DateTimeParseException e) { + String errMsg = "Invalid timestamp in tim record: " + tim.getTimeStamp(); + log.error(errMsg, e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + } - OdeTimData odeTimData = new OdeTimData(timMetadata, timDataPayload); - timProducer.send(pojoTopics.getTimBroadcast(), null, odeTimData); - - String obfuscatedTimData = TimTransmogrifier.obfuscateRsuPassword(odeTimData.toJson()); - stringMsgProducer.send(jsonTopics.getTimBroadcast(), null, obfuscatedTimData); - - // Now that the message has been published to OdeBroadcastTim topic, it should be - // changed to J2735BroadcastTim serialId - timMetadata.setSerialId(serialIdJ2735); + OdeTimData odeTimData = new OdeTimData(timMetadata, timDataPayload); + timProducer.send(pojoTopics.getTimBroadcast(), null, odeTimData); - // Short circuit - // If the TIM has no RSU/SNMP or SDW structures, we are done - if ((request.getRsus() == null || request.getSnmp() == null) && request.getSdw() == null) { - String warningMsg = "Warning: TIM contains no RSU, SNMP, or SDW fields. Message only published to broadcast streams."; - log.warn(warningMsg); - return ResponseEntity.status(HttpStatus.OK).body(JsonUtils.jsonKeyValue(WARNING, warningMsg)); - } + String obfuscatedTimData = TimTransmogrifier.obfuscateRsuPassword(odeTimData.toJson()); + stringMsgProducer.send(jsonTopics.getTimBroadcast(), null, obfuscatedTimData); - // Craft ASN-encodable TIM - ObjectNode encodableTid; - try { - encodableTid = JsonUtils.toObjectNode(odeTID.toJson()); - TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(encodableTid); + // Now that the message has been published to OdeBroadcastTim topic, it should + // be + // changed to J2735BroadcastTim serialId + timMetadata.setSerialId(serialIdJ2735); - log.debug("Encodable Traveler Information Data: {}", encodableTid); + // Short circuit + // If the TIM has no RSU/SNMP or SDW structures, we are done + if ((request.getRsus() == null || request.getSnmp() == null) && request.getSdw() == null) { + String warningMsg = "Warning: TIM contains no RSU, SNMP, or SDW fields. " + + "Message only published to broadcast streams."; + log.warn(warningMsg); + return ResponseEntity.status(HttpStatus.OK).body(JsonUtils.jsonKeyValue(WARNING, warningMsg)); + } - } catch (JsonUtilsException e) { - String errMsg = "Error converting to encodable TravelerInputData."; - log.error(errMsg, e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); - } + // Craft ASN-encodable TIM + ObjectNode encodableTid; + try { + encodableTid = JsonUtils.toObjectNode(odeTID.toJson()); + TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(encodableTid); - try { - String xmlMsg; - DdsAdvisorySituationData asd = null; - if (!this.dataSigningEnabledSDW) { - // We need to send data UNSECURED, so we should try to build the ASD as well as - // MessageFrame - asd = TimTransmogrifier.buildASD(odeTID.getRequest()); - } - xmlMsg = TimTransmogrifier.convertToXml(asd, encodableTid, timMetadata, serialIdJ2735); - log.debug("XML representation: {}", xmlMsg); - - JSONObject jsonMsg = XmlUtils.toJSONObject(xmlMsg); - - String j2735Tim = TimTransmogrifier.createOdeTimData(jsonMsg.getJSONObject(AppContext.ODE_ASN1_DATA)) - .toString(); - - stringMsgProducer.send(asn1CoderTopics.getEncoderInput(), null, xmlMsg); - - String obfuscatedJ2735Tim = TimTransmogrifier.obfuscateRsuPassword(j2735Tim); - // publish Broadcast TIM to a J2735 compliant topic. - stringMsgProducer.send(jsonTopics.getJ2735TimBroadcast(), null, obfuscatedJ2735Tim); - // publish J2735 TIM also to general un-filtered TIM topic - // with streamID as key - stringMsgProducer.send(jsonTopics.getTim(), serialIdJ2735.getStreamId(), obfuscatedJ2735Tim); - - serialIdOde.increment(); - serialIdJ2735.increment(); - } catch (JsonUtils.JsonUtilsException | XmlUtils.XmlUtilsException | TimTransmogrifierException e) { - String errMsg = "Error sending data to ASN.1 Encoder module: " + e.getMessage(); - log.error(errMsg, e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); - } + log.debug("Encodable Traveler Information Data: {}", encodableTid); - INGEST_MONITOR.incrementTotalMessagesReceived(); - return ResponseEntity.status(HttpStatus.OK).body(JsonUtils.jsonKeyValue(SUCCESS, "true")); + } catch (JsonUtilsException e) { + String errMsg = "Error converting to encodable TravelerInputData."; + log.error(errMsg, e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); } - /** - * Update an already-deposited TIM - * - * @param jsonString TIM in JSON - * @return list of success/failures - */ - @PutMapping(value = "/tim", produces = "application/json") - @CrossOrigin - public ResponseEntity putTim(@RequestBody String jsonString) { - - return depositTim(jsonString, ServiceRequest.OdeInternal.RequestVerb.PUT); + try { + String xmlMsg; + DdsAdvisorySituationData asd = null; + if (!this.dataSigningEnabledSDW) { + // We need to send data UNSECURED, so we should try to build the ASD as well as + // MessageFrame + asd = TimTransmogrifier.buildASD(odeTID.getRequest()); + } + xmlMsg = TimTransmogrifier.convertToXml(asd, encodableTid, timMetadata, serialIdJ2735); + + if (xmlMsg != null) { + log.debug("XML representation: {}", xmlMsg); + + // Convert XML into ODE TIM JSON object and obfuscate RSU password + OdeTimData odeTimObj = OdeTimDataCreatorHelper.createOdeTimDataFromCreator( + xmlMsg, timMetadata); + String j2735Tim = odeTimObj.toString(); + String obfuscatedJ2735Tim = TimTransmogrifier.obfuscateRsuPassword(j2735Tim); + + // publish Broadcast TIM to a J2735 compliant topic. + stringMsgProducer.send(jsonTopics.getJ2735TimBroadcast(), null, obfuscatedJ2735Tim); + + // publish J2735 TIM also to general un-filtered TIM topic with streamID as key + stringMsgProducer.send(jsonTopics.getTim(), serialIdJ2735.getStreamId(), + obfuscatedJ2735Tim); + + // Write XML to the encoder input topic at the end to ensure the correct order + // of operations to pair + // each message to an OdeTimJson streamId key + stringMsgProducer.send(asn1CoderTopics.getEncoderInput(), null, xmlMsg); + } + + serialIdOde.increment(); + serialIdJ2735.increment(); + } catch (JsonUtils.JsonUtilsException + | XmlUtils.XmlUtilsException + | TimTransmogrifierException e) { + String errMsg = "Error sending data to ASN.1 Encoder module: " + e.getMessage(); + log.error(errMsg, e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); } - /** - * Deposit a new TIM - * - * @param jsonString TIM in JSON - * @return list of success/failures - */ - @PostMapping(value = "/tim", produces = "application/json") - @CrossOrigin - public ResponseEntity postTim(@RequestBody String jsonString) { - - return depositTim(jsonString, ServiceRequest.OdeInternal.RequestVerb.POST); - } + INGEST_MONITOR.incrementTotalMessagesReceived(); + return ResponseEntity.status(HttpStatus.OK).body(JsonUtils.jsonKeyValue(SUCCESS, "true")); + } + + /** + * Update an already-deposited TIM. + * + * @param jsonString TIM in JSON + * @return list of success/failures + */ + @PutMapping(value = "/tim", produces = "application/json") + @CrossOrigin + public ResponseEntity putTim(@RequestBody String jsonString) { + + return depositTim(jsonString, ServiceRequest.OdeInternal.RequestVerb.PUT); + } + + /** + * Deposit a new TIM. + * + * @param jsonString TIM in JSON + * @return list of success/failures + */ + @PostMapping(value = "/tim", produces = "application/json") + @CrossOrigin + public ResponseEntity postTim(@RequestBody String jsonString) { + + return depositTim(jsonString, ServiceRequest.OdeInternal.RequestVerb.POST); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimTransmogrifier.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimTransmogrifier.java index 5ab4561d0..dc7646717 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimTransmogrifier.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimTransmogrifier.java @@ -1,7 +1,5 @@ package us.dot.its.jpo.ode.traveler; -import org.json.JSONObject; - import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -235,16 +233,4 @@ public static JsonNode buildEncodingNode(String name, String type, EncodingRule Asn1Encoding mfEnc = new Asn1Encoding(name, type, rule); return JsonUtils.toObjectNode(mfEnc.toJson()); } - - public static JSONObject createOdeTimData(JSONObject timData) { - - JSONObject metadata = timData.getJSONObject(AppContext.METADATA_STRING); - metadata.put("payloadType", OdeTimPayload.class.getName()); - metadata.remove(AppContext.ENCODINGS_STRING); - - JSONObject payload = timData.getJSONObject(AppContext.PAYLOAD_STRING); - payload.put(AppContext.DATA_TYPE_STRING, TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION); - return timData; - } - } diff --git a/jpo-ode-svcs/src/main/resources/application.yaml b/jpo-ode-svcs/src/main/resources/application.yaml index da87eeae7..938cc5a15 100644 --- a/jpo-ode-svcs/src/main/resources/application.yaml +++ b/jpo-ode-svcs/src/main/resources/application.yaml @@ -125,7 +125,7 @@ ode: buffer-size: 500 receiver-port: 44900 tim: - buffer-size: 500 + buffer-size: 2048 receiver-port: 47900 file-importer: buffer-size: 500 diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeTimDataCreatorHelperTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeTimDataCreatorHelperTest.java new file mode 100644 index 000000000..0abc02d69 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeTimDataCreatorHelperTest.java @@ -0,0 +1,34 @@ +package us.dot.its.jpo.ode.coder; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.File; +import java.nio.file.Files; +import org.junit.jupiter.api.Test; +import us.dot.its.jpo.ode.model.OdeTimData; +import us.dot.its.jpo.ode.util.XmlUtils; + +class OdeTimDataCreatorHelperTest { + @Test + public void testCreateOdeTimDataFromDecoded() throws Exception { + String xmlFilePath = + "src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER.xml"; + File xmlFile = new File(xmlFilePath); + byte[] xmlData = Files.readAllBytes(xmlFile.toPath()); + String xmlString = new String(xmlData); + + XmlUtils.toObjectNode(xmlString); + + String jsonFilePath = + "src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_JSON.json"; + File jsonFile = new File(jsonFilePath); + byte[] jsonData = Files.readAllBytes(jsonFile.toPath()); + String expectedJsonString = new String(jsonData); + OdeTimData timData; + + timData = OdeTimDataCreatorHelper.createOdeTimDataFromDecoded(xmlString); + + assertEquals(expectedJsonString, timData.toString()); + + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java index 8911c5bcf..06c7f1023 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java @@ -195,8 +195,9 @@ public void testSuccessfulTimIngestIsTracked(@Capturing TimTransmogrifier captur assertEquals(priorIngestCount + 1, TimIngestTracker.getInstance().getTotalMessagesReceived()); } + // This serves as an integration test without mocking the TimTransmogrifier and XmlUtils @Test - public void testSuccessfulRsuMessageReturnsSuccessMessagePost(@Capturing TimTransmogrifier capturingTimTransmogrifier, @Capturing XmlUtils capturingXmlUtils) { + public void testSuccessfulRsuMessageReturnsSuccessMessagePost() { String timToSubmit = "{\"request\": {\"rsus\": [{\"latitude\": 30.123456, \"longitude\": -100.12345, \"rsuId\": 123, \"route\": \"myroute\", \"milepost\": 10, \"rsuTarget\": \"172.0.0.1\", \"rsuRetries\": 3, \"rsuTimeout\": 5000, \"rsuIndex\": 7, \"rsuUsername\": \"myusername\", \"rsuPassword\": \"mypassword\"}], \"snmp\": {\"rsuid\": \"83\", \"msgid\": 31, \"mode\": 1, \"channel\": 183, \"interval\": 2000, \"deliverystart\": \"2024-05-13T14:30:00Z\", \"deliverystop\": \"2024-05-13T22:30:00Z\", \"enable\": 1, \"status\": 4}}, \"tim\": {\"msgCnt\": \"1\", \"timeStamp\": \"2024-05-10T19:01:22Z\", \"packetID\": \"123451234512345123\", \"urlB\": \"null\", \"dataframes\": [{\"startDateTime\": \"2024-05-13T20:30:05.014Z\", \"durationTime\": \"30\", \"sspTimRights\": \"1\", \"frameType\": \"advisory\", \"msgId\": {\"roadSignID\": {\"mutcdCode\": \"warning\", \"viewAngle\": \"1111111111111111\", \"position\": {\"latitude\": 30.123456, \"longitude\": -100.12345}}}, \"priority\": \"5\", \"sspLocationRights\": \"1\", \"regions\": [{\"name\": \"I_myroute_RSU_172.0.0.1\", \"anchorPosition\": {\"latitude\": 30.123456, \"longitude\": -100.12345}, \"laneWidth\": \"50\", \"directionality\": \"3\", \"closedPath\": \"false\", \"description\": \"path\", \"path\": {\"scale\": 0, \"nodes\": [{\"delta\": \"node-LL\", \"nodeLat\": 0.0, \"nodeLong\": 0.0}, {\"delta\": \"node-LL\", \"nodeLat\": 0.0, \"nodeLong\": 0.0}], \"type\": \"ll\"}, \"direction\": \"0000000000010000\"}], \"sspMsgTypes\": \"1\", \"sspMsgContent\": \"1\", \"content\": \"workZone\", \"items\": [\"771\"], \"url\": \"null\"}]}}"; ResponseEntity actualResponse = testTimDepositController.postTim(timToSubmit); assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimTransmogrifierTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimTransmogrifierTest.java index af719d9ab..efa926b66 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimTransmogrifierTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimTransmogrifierTest.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import org.json.JSONObject; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -250,7 +249,7 @@ void testConvertToXMLMessageFrame() staticOdeMsgMetadata.setSchemaVersion(Integer.parseInt(schemaVersion)); String actualXML = TimTransmogrifier.convertToXml(null, encodableTID, staticOdeMsgMetadata, staticSerialId); - var expected = String.format("us.dot.its.jpo.ode.model.OdeTimPayload6c33f802-418d-4b67-89d1-326b4fc8b1e31000%s%s0false42.537903-83.47790342.305753-82.842753thirtyminutes2017-06-01T17:47:11-05:002018-03-01T17:47:11-05:15MessageFrameMessageFrameUPERMessageFrame31", DateTimeUtils.now(), schemaVersion); + var expected = String.format("us.dot.its.jpo.ode.model.OdeTimPayload6c33f802-418d-4b67-89d1-326b4fc8b1e31000%s%s0false42.537903-83.47790342.305753-82.842753thirtyminutes2017-06-01T17:47:11-05:002018-03-01T17:47:11-05:15MessageFrameMessageFrameUPER31MessageFrame", DateTimeUtils.now(), schemaVersion); assertEquals(expected, actualXML); } @@ -304,18 +303,6 @@ void testConvertToXML_VerifyPositionElementNotInCircleElementAfterConversion() t Assertions.assertEquals(expectedXml, actualXML); } - @Test - void testCreateOdeTimData() throws JsonUtilsException { - - JSONObject testObject = JsonUtils - .toJSONObject("{\"metadata\":{\"object\":\"value\"},\"payload\":{\"object\":\"value\"}}"); - JSONObject actualOdeTimData = TimTransmogrifier.createOdeTimData(testObject); - - assertEquals( - "{\"metadata\":{\"payloadType\":\"us.dot.its.jpo.ode.model.OdeTimPayload\",\"object\":\"value\"},\"payload\":{\"dataType\":\"TravelerInformation\",\"object\":\"value\"}}", - actualOdeTimData.toString()); - } - @Test void testConstructorIsPrivate() throws NoSuchMethodException { diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_JSON.json b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_JSON.json new file mode 100644 index 000000000..ed0fa1a8a --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_JSON.json @@ -0,0 +1 @@ +{"metadata":{"logFileName":"","recordType":"timMsg","securityResultCode":"success","receivedMessageDetails":{"rxSource":"NA"},"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"streamId":"8af76b08-89bf-422e-b674-0f0ee065666f","bundleSize":1,"bundleId":0,"recordId":0,"serialNumber":0},"odeReceivedAt":"2024-12-06T10:39:42.806Z","schemaVersion":7,"maxDurationTime":0,"recordGeneratedAt":"","recordGeneratedBy":"RSU","sanitized":false,"odePacketID":"","odeTimStartDateTime":"","asn1":"001F830A752544F94F4354455420535452124C16B4FA27D64F431A94AC28F232828FF05260B5CA82DDFB227A687CA09CFDE87C4B0ED1C8800280204A865BB2C265D1E4F5D3A877C07F8093FC3D820142C4EB15C7AC09CE3356F45A90200118358186A148D3F13220B227C18569099E2D1232A28B5F2579208E479151D45D438BEFF80DB0C08CED3F45A50103103102088C1A44A152889AFA7F62218940E831C20F35EA1232777BF31146022C71408809E5EB7BA1D52835D8A040D83367520C4AB397658B07E21393A041060D049E825C15FCF56AFF05260B58E40024126EDBD550F6D519709FDE4CF880201602008CEE4ACA5DE274975513846DD7AD77F839305AD383175AA8A497954C284E668FFE4F0710D80802810030EAC2535BCD6AE047899B1CE75405C8E6936419C672A85F8900C50B428CA3188CA4E1101B485DEE47349B20CE339542FC5654852A1484C9C0A0B6DEBB81DB91CD26C8338CE550BF31188B6041101F08134A407147800DFCF8E5FE0A4C16B2BF3A3A253269429B3B8198F71B71F8C902002C008005DD1174A86649950714134C54C82F4C0012B9C982D69B5BEADBF1C99BEFD660C6A4200201A7A1ECCA540B60B0AA27F8093AC4BF831472A28ECD2E0203575E8F15F5000818817507D68CC505CF4497E8219CA2288A03C81503120AEB852B7507D68CC505CF4497E2121346A090E8061520293D37841E41530E9BF4214E93C326CF8502830F0C081FF9D71FE064C1BAA780A12351A24D300B6FD25F085703880101600022BE028AC1105C1D5CB0F0E001A42F7F849305AD3E9B408EB43464DC861E6234918C8667857300022C400087E511D765E294CF3507435289D7EBBC2849A4982D69F494982D524C16B4FA36827A1D6C31DFDBE55A627F819307EA49F19AA77C773D119EA690CE094883E0100588001E1832A00950E876B85589726EF3EDFE0E4C16B4F8EB0ECDE8A23F3F9E839831CE316170D2000858080178162BF959EDACD55B2CD3721A1EDFE064C1AEC1B3F02442FEC92E119DFAF82D6EC3884002C0004A9FEDD617613A307F791C6D74FB1A27C451F6139305AD394982D582367260B5A600","originIp":"172.18.0.1"},"payload":{"data":{"msgCnt":82,"timeStamp":345337,"packetID":"4F4354455420535452","urlB":"IA5St","dataFrames":[{"notUsed":29,"frameType":"commercialSignage","msgId":{"furtherInfoID":"4F43"},"startYear":425,"startTime":306216,"durationTime":31001,"priority":2,"notUsed1":1,"regions":[{"name":"IA5","id":{"region":38149,"id":48118},"anchor":{"lat":-567387419,"long":-1717691068,"elevation":53848},"laneWidth":15175,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":true,"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":false,"from337-5to360-0degrees":false},"description":{"oldRegion":{"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":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor50000meters","area":{"circle":{"center":{"lat":-686654332,"long":1616508908,"elevation":38736},"radius":3832,"units":"centimeter"}}}}},{"name":"I","id":{"region":64573,"id":33281},"anchor":{"lat":-714161321,"long":-1285139143,"elevation":48475},"laneWidth":26805,"directionality":"unavailable","closedPath":true,"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":true,"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":1,"offset":{"ll":{"nodes":[{"delta":{"node-LL4":{"lon":-127947,"lat":-120550}},"attributes":{"localNode":["downstreamStopLine","closedToTraffic"],"disabled":["adjacentParkingOnLeft","transitStopOnLeft","parallelParking","mergingLaneLeft","curbOnLeft"],"enabled":["midBlockCurbPresent","transitStopInLane","taperToCenterLine","lowCurbsPresent"],"data":[{"laneAngle":101},{"laneAngle":62},{"speedLimits":[{"type":"truckMaxSpeed","speed":5822},{"type":"truckNightMaxSpeed","speed":3017}]},{"pathEndPointAngle":-8},{"laneCrownPointLeft":35}],"dWidth":162,"dElevation":424}},{"delta":{"node-LatLon":{"lon":-998896073,"lat":735850714}},"attributes":{"localNode":["hydrantPresent","safeIsland","closedToTraffic","stopLine","reserved"],"disabled":["loadingzoneOnRight","adjacentParkingOnRight","headInParking"],"enabled":["costToPark","mergingLaneLeft","midBlockCurbPresent","unEvenPavementPresent","curbOnLeft"],"data":[{"speedLimits":[{"type":"maxSpeedInSchoolZoneWhenChildrenArePresent","speed":3453},{"type":"truckMinSpeed","speed":7876}]},{"speedLimits":[{"type":"truckMinSpeed","speed":2097}]},{"laneAngle":-82}],"dWidth":264,"dElevation":-269}},{"delta":{"node-LL4":{"lon":86161,"lat":20207}},"attributes":{"localNode":["roundedCapStyleA","divergePoint","roundedCapStyleB","reserved"],"disabled":["adjacentParkingOnLeft","adjacentBikeLaneOnRight"],"enabled":["headInParking","timeRestrictionsOnParking"],"data":[{"laneCrownPointCenter":-68}],"dWidth":245,"dElevation":247}},{"delta":{"node-LL1":{"lon":-172,"lat":525}},"attributes":{"localNode":["closedToTraffic","roundedCapStyleA"],"disabled":["partialCurbIntrusion"],"enabled":["adaptiveTimingPresent"],"dWidth":206,"dElevation":144}},{"delta":{"node-LL5":{"lon":-873243,"lat":1464496}},"attributes":{"localNode":["stopLine","downstreamStartNode"],"disabled":["taperToRight","doNotBlock"],"enabled":["bikeBoxInFront"],"data":[{"pathEndPointAngle":58},{"pathEndPointAngle":1},{"pathEndPointAngle":25},{"laneAngle":137}],"dWidth":414,"dElevation":181}}]}}}}},{"name":"IA5","id":{"region":7296,"id":1154},"anchor":{"lat":29950376,"long":270580409,"elevation":16367},"laneWidth":4926,"directionality":"unavailable","closedPath":true,"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":true,"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":{"geometry":{"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":true,"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},"extent":"useFor10000meters","laneWidth":26482,"circle":{"center":{"lat":598135630,"long":664850545,"elevation":32186},"radius":3930,"units":"mile"}}}},{"name":"IA5S","id":{"region":1582,"id":46417},"anchor":{"lat":-283655839,"long":-685153664,"elevation":57976},"laneWidth":7235,"directionality":"forward","closedPath":true,"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":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},"description":{"oldRegion":{"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":true,"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},"extent":"useFor1000meters","area":{"shapePointSet":{"anchor":{"lat":581272185,"long":1108489970,"elevation":9059},"laneWidth":20085,"directionality":"forward","nodeList":{"nodes":[{"delta":{"node-LatLon":{"lon":-605370079,"lat":829743521}},"attributes":{"localNode":["mergePoint","reserved"],"disabled":["turnOutPointOnRight","adjacentParkingOnLeft","freeParking","costToPark"],"enabled":["costToPark","adjacentParkingOnRight"],"data":[{"laneCrownPointRight":-87},{"laneCrownPointRight":4},{"laneAngle":-167}],"dWidth":144,"dElevation":239}},{"delta":{"node-LatLon":{"lon":-605370079,"lat":829743521}},"attributes":{"localNode":["hydrantPresent","divergePoint"],"disabled":["freeParking","unEvenPavementPresent"],"enabled":["freeParking","adaptiveTimingPresent","taperToLeft"],"data":[{"speedLimits":[{"type":"vehiclesWithTrailersMaxSpeed","speed":3517}]}],"dWidth":-36,"dElevation":-453}},{"delta":{"node-LatLon":{"lon":-605370079,"lat":829743521}},"attributes":{"localNode":["roundedCapStyleA","downstreamStopLine","mergePoint","hydrantPresent"],"disabled":["doNotBlock","whiteLine","bikeBoxInFront","sharedBikeLane"],"enabled":["bikeBoxInFront","transitStopInLane","unEvenPavementPresent","adjacentBikeLaneOnRight"],"data":[{"laneAngle":60},{"pathEndPointAngle":-95}],"dWidth":463,"dElevation":57}}]}}}}}},{"name":"IA5","id":{"region":11251,"id":41890},"anchor":{"lat":385181606,"long":1670812734,"elevation":46812},"laneWidth":16153,"directionality":"unavailable","closedPath":true,"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":true,"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":{"geometry":{"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":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useInstantlyOnly","laneWidth":6004,"circle":{"center":{"lat":-509239964,"long":772185922,"elevation":9413},"radius":1224,"units":"cm2-5"}}}}],"notUsed2":15,"notUsed3":9,"content":{"exitService":[{"item":{"itis":599}}]},"url":"IA5S"},{"notUsed":11,"frameType":"commercialSignage","msgId":{"roadSignID":{"position":{"lat":634998835,"long":313588249,"elevation":50308},"viewAngle":{"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":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"mutcdCode":"maintenance","crc":"4F43"}},"startYear":3481,"startTime":305174,"durationTime":24752,"priority":5,"notUsed1":10,"regions":[{"name":"I","id":{"region":44107,"id":63537},"anchor":{"lat":-419185997,"long":-533287210,"elevation":51107},"laneWidth":25278,"directionality":"reverse","closedPath":true,"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":true,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"path":{"scale":8,"offset":{"ll":{"nodes":[{"delta":{"node-LatLon":{"lon":900792217,"lat":448269129}},"attributes":{"localNode":["roundedCapStyleA","roundedCapStyleB","downstreamStartNode","divergePoint"],"disabled":["timeRestrictionsOnParking","sharedWithTrackedVehicle"],"enabled":["taperToCenterLine"],"data":[{"pathEndPointAngle":18},{"pathEndPointAngle":24},{"laneCrownPointCenter":9}],"dWidth":225,"dElevation":-213}},{"delta":{"node-LatLon":{"lon":900792217,"lat":448269129}},"attributes":{"localNode":["stopLine","mergePoint"],"disabled":["rfSignalRequestPresent"],"enabled":["turnOutPointOnLeft","loadingzoneOnLeft","headInParking","adjacentParkingOnRight","safeIsland"],"data":[{"pathEndPointAngle":-109},{"laneCrownPointRight":83}],"dWidth":-31,"dElevation":-482}},{"delta":{"node-LL1":{"lon":-1370,"lat":-1581}},"attributes":{"localNode":["mergePoint","divergePoint","downstreamStartNode","safeIsland"],"disabled":["adaptiveTimingPresent","partialCurbIntrusion","parallelParking","curbOnLeft","doNotBlock"],"enabled":["curbOnRight","sharedBikeLane"],"data":[{"laneCrownPointLeft":-121}],"dWidth":505,"dElevation":348}}]}}}}},{"name":"IA","id":{"region":30031,"id":322},"anchor":{"lat":-454547095,"long":353479827,"elevation":59458},"laneWidth":23566,"directionality":"unavailable","closedPath":true,"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":true,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"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},"extent":"useFor10meters","laneWidth":24321,"circle":{"center":{"lat":-539150408,"long":-814772254,"elevation":45059},"radius":1157,"units":"mile"}}}},{"name":"IA5St","id":{"region":46088,"id":60227},"anchor":{"lat":-476956537,"long":759386724,"elevation":4505},"laneWidth":28846,"directionality":"forward","closedPath":true,"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},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"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":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor100meters","laneWidth":8084,"circle":{"center":{"lat":-405703383,"long":-508985739,"elevation":9512},"radius":2519,"units":"mile"}}}}],"notUsed2":11,"notUsed3":23,"content":{"exitService":[{"item":{"text":"I"}},{"item":{"text":"IA5St"}},{"item":{"text":"IA5"}}]},"url":"IA5St"},{"notUsed":13,"frameType":"unknown","msgId":{"furtherInfoID":"4F43"},"startYear":2776,"startTime":408571,"durationTime":15957,"priority":5,"notUsed1":6,"regions":[{"name":"IA","id":{"region":62756,"id":63693},"anchor":{"lat":424936826,"long":-1208779998,"elevation":35858},"laneWidth":18563,"directionality":"both","closedPath":true,"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":true,"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":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"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":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor5000meters","laneWidth":17158,"circle":{"center":{"lat":442482548,"long":-804103995,"elevation":43319},"radius":1951,"units":"meter"}}}},{"name":"IA5S","id":{"region":51032,"id":30319},"anchor":{"lat":-559743245,"long":1697199162,"elevation":46636},"laneWidth":5901,"directionality":"unavailable","closedPath":true,"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":true,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"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":true,"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},"extent":"useFor500meters","laneWidth":28716,"circle":{"center":{"lat":707126893,"long":-77527193,"elevation":35728},"radius":3343,"units":"meter"}}}},{"name":"IA","id":{"region":23939,"id":26592},"anchor":{"lat":-328004279,"long":88284632,"elevation":45419},"laneWidth":15118,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"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":{"oldRegion":{"direction":{"from000-0to022-5degrees":true,"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":false,"from337-5to360-0degrees":false},"extent":"useFor50000meters","area":{"circle":{"center":{"lat":171361070,"long":1462406911,"elevation":57912},"radius":3502,"units":"kilometer"}}}}}],"notUsed2":31,"notUsed3":12,"content":{"speedLimit":[{"item":{"itis":40721}},{"item":{"itis":36784}},{"item":{"text":"IA5S"}},{"item":{"text":"IA5"}},{"item":{"itis":49435}}]},"url":"IA5S"}]},"dataType":"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation"}} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER.xml b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER.xml new file mode 100644 index 000000000..a7b211480 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER.xml @@ -0,0 +1,990 @@ + + + + + timMsg + success + + + + unsecuredData + MessageFrame + UPER + + + us.dot.its.jpo.ode.model.OdeAsn1Payload + + 8af76b08-89bf-422e-b674-0f0ee065666f + 1 + 0 + 0 + 0 + + 2024-12-06T10:39:42.806Z + 7 + 0 + + RSU + false + + + 001F830A752544F94F4354455420535452124C16B4FA27D64F431A94AC28F232828FF05260B5CA82DDFB227A687CA09CFDE87C4B0ED1C8800280204A865BB2C265D1E4F5D3A877C07F8093FC3D820142C4EB15C7AC09CE3356F45A90200118358186A148D3F13220B227C18569099E2D1232A28B5F2579208E479151D45D438BEFF80DB0C08CED3F45A50103103102088C1A44A152889AFA7F62218940E831C20F35EA1232777BF31146022C71408809E5EB7BA1D52835D8A040D83367520C4AB397658B07E21393A041060D049E825C15FCF56AFF05260B58E40024126EDBD550F6D519709FDE4CF880201602008CEE4ACA5DE274975513846DD7AD77F839305AD383175AA8A497954C284E668FFE4F0710D80802810030EAC2535BCD6AE047899B1CE75405C8E6936419C672A85F8900C50B428CA3188CA4E1101B485DEE47349B20CE339542FC5654852A1484C9C0A0B6DEBB81DB91CD26C8338CE550BF31188B6041101F08134A407147800DFCF8E5FE0A4C16B2BF3A3A253269429B3B8198F71B71F8C902002C008005DD1174A86649950714134C54C82F4C0012B9C982D69B5BEADBF1C99BEFD660C6A4200201A7A1ECCA540B60B0AA27F8093AC4BF831472A28ECD2E0203575E8F15F5000818817507D68CC505CF4497E8219CA2288A03C81503120AEB852B7507D68CC505CF4497E2121346A090E8061520293D37841E41530E9BF4214E93C326CF8502830F0C081FF9D71FE064C1BAA780A12351A24D300B6FD25F085703880101600022BE028AC1105C1D5CB0F0E001A42F7F849305AD3E9B408EB43464DC861E6234918C8667857300022C400087E511D765E294CF3507435289D7EBBC2849A4982D69F494982D524C16B4FA36827A1D6C31DFDBE55A627F819307EA49F19AA77C773D119EA690CE094883E0100588001E1832A00950E876B85589726EF3EDFE0E4C16B4F8EB0ECDE8A23F3F9E839831CE316170D2000858080178162BF959EDACD55B2CD3721A1EDFE064C1AEC1B3F02442FEC92E119DFAF82D6EC3884002C0004A9FEDD617613A307F791C6D74FB1A27C451F6139305AD394982D582367260B5A600 + 172.18.0.1 + + + MessageFrame + + + 31 + + + 82 + 345337 + 4F4354455420535452 + IA5St + + + 29 + + + + + 4F43 + + 425 + 306216 + 31001 + 2 + 1 + + + IA5 + + 38149 + 48118 + + + -567387419 + -1717691068 + 53848 + + 15175 + + + + + + + 0001000000000000 + + + 0000000001000000 + + + + + +

+ -686654332 + 1616508908 + 38736 +
+ 3832 + + + + + + + + + + I + + 64573 + 33281 + + + -714161321 + -1285139143 + 48475 + + 26805 + + + + + + + 0000001000000000 + + + 1 + + + + + + + -127947 + -120550 + + + + + + + + + + + + + + + + + + + + + + 101 + + + + + + 5822 + + + + + + 3017 + + + -8 + 62 + 35 + + 162 + 424 + + + + + + -998896073 + 735850714 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3453 + + + + + + 7876 + + + -82 + + + + + + 2097 + + + + 264 + -269 + + + + + + 86161 + 20207 + + + + + + + + + + + + + + + + + + + -68 + + 245 + 247 + + + + + + -172 + 525 + + + + + + + + + + + + + + 206 + 144 + + + + + + -873243 + 1464496 + + + + + + + + + + + + + + + + 58 + 137 + 1 + 25 + + 414 + 181 + + + + + + + + + + IA5 + + 7296 + 1154 + + + 29950376 + 270580409 + 16367 + + 4926 + + + + + + + 0000000001000000 + + + 0000001000000000 + + + + 26482 + +
+ 598135630 + 664850545 + 32186 +
+ 3930 + + + +
+
+
+
+ + IA5S + + 1582 + 46417 + + + -283655839 + -685153664 + 57976 + + 7235 + + + + + + + 0000000100000000 + + + 0000001000000000 + + + + + + + 581272185 + 1108489970 + 9059 + + 20085 + + + + + + + + + -605370079 + 829743521 + + + + + + + + + + + + + + + + + + + -87 + 4 + -167 + + 144 + 239 + + + + + + -605370079 + 829743521 + + + + + + + + + + + + + + + + + + + + + + + + 3517 + + + + -36 + -453 + + + + + + -605370079 + 829743521 + + + + + + + + + + + + + + + + + + + + + + + + 60 + -95 + + 463 + 57 + + + + + + + + + + + IA5 + + 11251 + 41890 + + + 385181606 + 1670812734 + 46812 + + 16153 + + + + + + + 0000001000000000 + + + 0000000001000000 + + + + 6004 + +
+ -509239964 + 772185922 + 9413 +
+ 1224 + + + +
+
+
+
+ + 15 + 9 + + + + + 599 + + + + + IA5S + + + 11 + + + + + + + 634998835 + 313588249 + 50308 + + 0000000001000000 + + + + 4F43 + + + 3481 + 305174 + 24752 + 5 + 10 + + + I + + 44107 + 63537 + + + -419185997 + -533287210 + 51107 + + 25278 + + + + + + + 0000000000001000 + + + 8 + + + + + + + 900792217 + 448269129 + + + + + + + + + + + + + + + + + + + 18 + 9 + 24 + + 225 + -213 + + + + + + 900792217 + 448269129 + + + + + + + + + + + + + + + + + + + + -109 + 83 + + -31 + -482 + + + + + + -1370 + -1581 + + + + + + + + + + + + + + + + + + + + + + + + -121 + + 505 + 348 + + + + + + + + + + IA + + 30031 + 322 + + + -454547095 + 353479827 + 59458 + + 23566 + + + + + + + 0000000000100000 + + + 0000000000000010 + + + + 24321 + +
+ -539150408 + -814772254 + 45059 +
+ 1157 + + + +
+
+
+
+ + IA5St + + 46088 + 60227 + + + -476956537 + 759386724 + 4505 + + 28846 + + + + + + + 0000000000000010 + + + 0010000000000000 + + + + 8084 + +
+ -405703383 + -508985739 + 9512 +
+ 2519 + + + +
+
+
+
+
+ 11 + 23 + + + + + I + + + + + IA5St + + + + + IA5 + + + + + IA5St +
+ + 13 + + + + + 4F43 + + 2776 + 408571 + 15957 + 5 + 6 + + + IA + + 62756 + 63693 + + + 424936826 + -1208779998 + 35858 + + 18563 + + + + + + + 0000000010000000 + + + 0010000000000000 + + + + 17158 + +
+ 442482548 + -804103995 + 43319 +
+ 1951 + + + +
+
+
+
+ + IA5S + + 51032 + 30319 + + + -559743245 + 1697199162 + 46636 + + 5901 + + + + + + + 0000000000000100 + + + 0000001000000000 + + + + 28716 + +
+ 707126893 + -77527193 + 35728 +
+ 3343 + + + +
+
+
+
+ + IA + + 23939 + 26592 + + + -328004279 + 88284632 + 45419 + + 15118 + + + + + + + 0000100000000000 + + + 1000000000000000 + + + + + +
+ 171361070 + 1462406911 + 57912 +
+ 3502 + + + +
+ +
+
+
+
+ 31 + 12 + + + + + 40721 + + + + + 36784 + + + + + IA5S + + + + + IA5 + + + + + 49435 + + + + + IA5S +
+ + + + + + + \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapJson.json b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapJson.json index b898afd59..7a1d7564c 100644 --- a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapJson.json +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapJson.json @@ -2,7 +2,7 @@ "cases": [ { "description": "Test Case 1 - MapJson", - "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadc2010d5f-9ee5-4fef-9242-640e8c17713910002024-11-08T22:01:13.148Z70RSUfalse001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.30MessageFrame182088022395948212-104883094617440366229100000000000000000001110000000001355-188010795-292610167-231820-167-191010-1428-79862060100000000008111100000000000819001000000000239100000000000000000000100000000001004-1955544-176510311-185320121-154910-173-187610-1008-554220-697-3586-1050100000000003124910000000000000000000010000000000624-2010795-286820207-218020-305-265620-1590-8364401000000000031218100000000000000000000010000000002522-186210-380-981518-29262035-137110-161-201910-677-342610200010000000001281010000000000000000000001000000000-1676-310220-1797608-10-4401-356-30-9504-2310-723839-2171-6260010000000001271010000000000000000000001000000000-1517-282410-1411614250010000000001251101000000000000000000-6816-1069110-196161261101000000000000000000-6597-1038710-2071663110000000000000000000100000000000-664-799-3525-586-10-2446-225-2350-138-10-8407-1810-85131717100000000000211110000000000000000000100000000000-531-1503-2310-41910-3646-430-20-10414-14310-990910-1019100000000000212110000000000000000000100000000000-683-1177-3456-562-2411-259-10-10834-138-9372391810000000000021176010000000000000000001538-29625363186010000000000000000001619-66926592196010000000000000000001757-105925380108201000000000000000000-22691625-20-311-577201000000000000000000-22001293-20-334-636201000000000000000000-2108914-20-369-575201000000000000000000-2056564-20-363-694201000000000000000000-1975197-20-374-809310000000000000000000001000000000-17102641-20-4152042-28251680010000000004170010000000004210310000000000000000000001000000000-13652715-10-4842065-10-15052860010000000004211401000000000000000000-5872813-10-69235125100000000000000000001010000000005202310-103064643584088910358335633292071081000000000006111001000000000135100000000000000000001000000000005951960-104642895495371110611751610710000000000061145100000000000000000001000000000006641620-10359467735775741024273092387246244217212108010610000000000061155100000000000000000001000000000007321263-1059211073103617476242224036312511051000000000006116510000000000000000000100000000000800894358368347357233617384362524910410000000000061207010000000000000000008335-2221024223", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload85100a89-9411-4bc3-828c-9c398aa829a510002024-11-08T21:38:24.144Z70RSUfalse001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.30MessageFrame182088022395948212-104883094617442366229100000000000000000001110000000001355-188010795-292610167-231820-167-191010-1428-79862060100000000008111100000000000819001000000000239100000000000000000000100000000001004-1955544-176510311-185320121-154910-173-187610-1008-554220-697-3586-1050100000000003124910000000000000000000010000000000624-2010795-286820207-218020-305-265620-1590-8364401000000000031218100000000000000000000010000000002522-186210-380-981518-29262035-137110-161-201910-677-342610200010000000001281010000000000000000000001000000000-1676-310220-1797608-10-4401-356-30-9504-2310-723839-2171-6260010000000001271010000000000000000000001000000000-1517-282410-1411614250010000000001251101000000000000000000-6816-1069110-196161261101000000000000000000-6597-1038710-2071663110000000000000000000100000000000-664-799-3525-586-10-2446-225-2350-138-10-8407-1810-85131717100000000000211110000000000000000000100000000000-531-1503-2310-41910-3646-430-20-10414-14310-990910-1019100000000000212110000000000000000000100000000000-683-1177-3456-562-2411-259-10-10834-138-9372391810000000000021176010000000000000000001538-29625363186010000000000000000001619-66926592196010000000000000000001757-105925380108201000000000000000000-22691625-20-311-577201000000000000000000-22001293-20-334-636201000000000000000000-2108914-20-369-575201000000000000000000-2056564-20-363-694201000000000000000000-1975197-20-374-809310000000000000000000001000000000-17102641-20-4152042-28251680010000000004170010000000004210310000000000000000000001000000000-13652715-10-4842065-10-15052860010000000004211401000000000000000000-5872813-10-69235125100000000000000000001010000000005202310-103064643584088910358335633292071081000000000006111001000000000135100000000000000000001000000000005951960-104642895495371110611751610710000000000061145100000000000000000001000000000006641620-10359467735775741024273092387246244217212108010610000000000061155100000000000000000001000000000007321263-1059211073103617476242224036312511051000000000006116510000000000000000000100000000000800894358368347357233617384362524910410000000000061207010000000000000000008335-2221024223", "expected": { "metadata": { "logFileName": "", @@ -13,13 +13,13 @@ }, "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", "serialId": { - "streamId": "c2010d5f-9ee5-4fef-9242-640e8c177139", + "streamId": "85100a89-9411-4bc3-828c-9c398aa829a5", "bundleSize": 1, "bundleId": 0, "recordId": 0, "serialNumber": 0 }, - "odeReceivedAt": "2024-11-08T22:01:13.148Z", + "odeReceivedAt": "2024-11-08T21:38:24.144Z", "schemaVersion": 7, "maxDurationTime": 0, "recordGeneratedAt": "", @@ -46,7 +46,7 @@ "refPoint": { "latitude": 39.5948212, "longitude": -104.8830946, - "elevation": "1744.0" + "elevation": 1744.2 }, "laneWidth": 366, "laneSet": { @@ -99,65 +99,63 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1355, - "y": -1880 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 795, - "y": -2926 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 167, - "y": -2318 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -167, - "y": -1910 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -1428, - "y": -7986 - } - }, - "attributes": { - "dElevation": 20 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1355, + "y": -1880 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 795, + "y": -2926 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 167, + "y": -2318 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -167, + "y": -1910 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1428, + "y": -7986 + } + }, + "attributes": { + "dElevation": 20 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -272,84 +270,82 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1004, - "y": -1955 - } - } - }, - { - "delta": { - "nodeXY6": { - "x": 544, - "y": -1765 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 311, - "y": -1853 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": 121, - "y": -1549 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -173, - "y": -1876 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -1008, - "y": -5542 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -697, - "y": -3586 - } - }, - "attributes": { - "dElevation": -10 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1004, + "y": -1955 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 544, + "y": -1765 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 311, + "y": -1853 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 121, + "y": -1549 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -173, + "y": -1876 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1008, + "y": -5542 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -697, + "y": -3586 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -425,59 +421,57 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 624, - "y": -2010 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 624, + "y": -2010 } - }, - { - "delta": { - "nodeXY6": { - "x": 795, - "y": -2868 - } - }, - "attributes": { - "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 795, + "y": -2868 } }, - { - "delta": { - "nodeXY6": { - "x": 207, - "y": -2180 - } - }, - "attributes": { - "dElevation": 20 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 207, + "y": -2180 } }, - { - "delta": { - "nodeXY6": { - "x": -305, - "y": -2656 - } - }, - "attributes": { - "dElevation": 20 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -305, + "y": -2656 } }, - { - "delta": { - "nodeXY6": { - "x": -1590, - "y": -8364 - } + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1590, + "y": -8364 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -553,73 +547,71 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2522, - "y": -1862 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -380, - "y": -981 - } - } - }, - { - "delta": { - "nodeXY6": { - "x": 518, - "y": -2926 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": 35, - "y": -1371 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -161, - "y": -2019 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -677, - "y": -3426 - } - }, - "attributes": { - "dElevation": 10 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2522, + "y": -1862 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -380, + "y": -981 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 518, + "y": -2926 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 35, + "y": -1371 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -161, + "y": -2019 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -677, + "y": -3426 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -694,70 +686,68 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1676, - "y": -3102 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1676, + "y": -3102 } }, - { - "delta": { - "nodeXY6": { - "x": -1797, - "y": 608 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1797, + "y": 608 } }, - { - "delta": { - "nodeXY6": { - "x": -4401, - "y": -356 - } - }, - "attributes": { - "dElevation": -30 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4401, + "y": -356 } }, - { - "delta": { - "nodeXY6": { - "x": -9504, - "y": -23 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9504, + "y": -23 } }, - { - "delta": { - "nodeXY6": { - "x": -7238, - "y": 39 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -7238, + "y": 39 } - }, - { - "delta": { - "nodeXY6": { - "x": -2171, - "y": -6 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -2171, + "y": -6 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -832,29 +822,27 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1517, - "y": -2824 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1517, + "y": -2824 } }, - { - "delta": { - "nodeXY6": { - "x": -1411, - "y": 614 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1411, + "y": 614 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -915,29 +903,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -6816, - "y": -10691 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -6816, + "y": -10691 } }, - { - "delta": { - "nodeXY6": { - "x": -196, - "y": 161 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -196, + "y": 161 } } - ] - } + } + ] } }, { @@ -974,29 +960,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -6597, - "y": -10387 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -6597, + "y": -10387 } }, - { - "delta": { - "nodeXY6": { - "x": -207, - "y": 166 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -207, + "y": 166 } } - ] - } + } + ] } }, { @@ -1047,67 +1031,65 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -664, - "y": -799 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -664, + "y": -799 } - }, - { - "delta": { - "nodeXY6": { - "x": -3525, - "y": -586 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -3525, + "y": -586 } }, - { - "delta": { - "nodeXY6": { - "x": -2446, - "y": -225 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2446, + "y": -225 } - }, - { - "delta": { - "nodeXY6": { - "x": -2350, - "y": -138 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2350, + "y": -138 } }, - { - "delta": { - "nodeXY6": { - "x": -8407, - "y": -18 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -8407, + "y": -18 } }, - { - "delta": { - "nodeXY6": { - "x": -8513, - "y": 17 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -8513, + "y": 17 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -1183,62 +1165,60 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -531, - "y": -1503 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -531, + "y": -1503 } - }, - { - "delta": { - "nodeXY6": { - "x": -2310, - "y": -419 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2310, + "y": -419 } }, - { - "delta": { - "nodeXY6": { - "x": -3646, - "y": -430 - } - }, - "attributes": { - "dElevation": -20 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -3646, + "y": -430 } }, - { - "delta": { - "nodeXY6": { - "x": -10414, - "y": -143 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -10414, + "y": -143 } }, - { - "delta": { - "nodeXY6": { - "x": -9909, - "y": 10 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9909, + "y": 10 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -1314,53 +1294,51 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -683, - "y": -1177 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -683, + "y": -1177 } - }, - { - "delta": { - "nodeXY6": { - "x": -3456, - "y": -562 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -3456, + "y": -562 } - }, - { - "delta": { - "nodeXY6": { - "x": -2411, - "y": -259 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2411, + "y": -259 } }, - { - "delta": { - "nodeXY6": { - "x": -10834, - "y": -138 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -10834, + "y": -138 } - }, - { - "delta": { - "nodeXY6": { - "x": -9372, - "y": 39 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -9372, + "y": 39 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -1422,26 +1400,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1538, - "y": -296 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1538, + "y": -296 } - }, - { - "delta": { - "nodeXY6": { - "x": 253, - "y": 63 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 253, + "y": 63 } } - ] - } + } + ] } }, { @@ -1478,26 +1454,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1619, - "y": -669 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1619, + "y": -669 } - }, - { - "delta": { - "nodeXY6": { - "x": 265, - "y": 92 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 265, + "y": 92 } } - ] - } + } + ] } }, { @@ -1534,29 +1508,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1757, - "y": -1059 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1757, + "y": -1059 } - }, - { - "delta": { - "nodeXY6": { - "x": 253, - "y": 80 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 253, + "y": 80 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] } }, { @@ -1593,29 +1565,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2269, - "y": 1625 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2269, + "y": 1625 } }, - { - "delta": { - "nodeXY6": { - "x": -311, - "y": -57 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -311, + "y": -57 } } - ] - } + } + ] } }, { @@ -1652,29 +1622,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2200, - "y": 1293 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2200, + "y": 1293 } }, - { - "delta": { - "nodeXY6": { - "x": -334, - "y": -63 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -334, + "y": -63 } } - ] - } + } + ] } }, { @@ -1711,29 +1679,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2108, - "y": 914 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2108, + "y": 914 } }, - { - "delta": { - "nodeXY6": { - "x": -369, - "y": -57 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -369, + "y": -57 } } - ] - } + } + ] } }, { @@ -1770,29 +1736,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2056, - "y": 564 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2056, + "y": 564 } }, - { - "delta": { - "nodeXY6": { - "x": -363, - "y": -69 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -363, + "y": -69 } } - ] - } + } + ] } }, { @@ -1829,29 +1793,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1975, - "y": 197 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1975, + "y": 197 } }, - { - "delta": { - "nodeXY6": { - "x": -374, - "y": -80 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -374, + "y": -80 } } - ] - } + } + ] } }, { @@ -1902,37 +1864,35 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1710, - "y": 2641 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1710, + "y": 2641 } }, - { - "delta": { - "nodeXY6": { - "x": -415, - "y": 2042 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -415, + "y": 2042 } - }, - { - "delta": { - "nodeXY6": { - "x": -282, - "y": 516 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -282, + "y": 516 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2029,40 +1989,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1365, - "y": 2715 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1365, + "y": 2715 } }, - { - "delta": { - "nodeXY6": { - "x": -484, - "y": 2065 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -484, + "y": 2065 } }, - { - "delta": { - "nodeXY6": { - "x": -150, - "y": 528 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -150, + "y": 528 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2124,29 +2082,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -587, - "y": 2813 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -587, + "y": 2813 } }, - { - "delta": { - "nodeXY6": { - "x": -69, - "y": 235 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -69, + "y": 235 } } - ] - } + } + ] } }, { @@ -2197,59 +2153,57 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 520, - "y": 2310 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 520, + "y": 2310 } }, - { - "delta": { - "nodeXY6": { - "x": 3064, - "y": 643 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3064, + "y": 643 } - }, - { - "delta": { - "nodeXY6": { - "x": 5840, - "y": 889 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5840, + "y": 889 } }, - { - "delta": { - "nodeXY6": { - "x": 3583, - "y": 356 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3583, + "y": 356 } - }, - { - "delta": { - "nodeXY6": { - "x": 3329, - "y": 207 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3329, + "y": 207 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2344,51 +2298,49 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 595, - "y": 1960 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 595, + "y": 1960 } }, - { - "delta": { - "nodeXY6": { - "x": 4642, - "y": 895 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 4642, + "y": 895 } - }, - { - "delta": { - "nodeXY6": { - "x": 4953, - "y": 711 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 4953, + "y": 711 } }, - { - "delta": { - "nodeXY6": { - "x": 6117, - "y": 516 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 6117, + "y": 516 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2464,75 +2416,73 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 664, - "y": 1620 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 664, + "y": 1620 } }, - { - "delta": { - "nodeXY6": { - "x": 3594, - "y": 677 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3594, + "y": 677 } - }, - { - "delta": { - "nodeXY6": { - "x": 3577, - "y": 574 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3577, + "y": 574 } }, - { - "delta": { - "nodeXY6": { - "x": 2427, - "y": 309 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 2427, + "y": 309 } - }, - { - "delta": { - "nodeXY6": { - "x": 2387, - "y": 246 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 2387, + "y": 246 } - }, - { - "delta": { - "nodeXY6": { - "x": 2442, - "y": 172 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 2442, + "y": 172 } - }, - { - "delta": { - "nodeXY6": { - "x": 1210, - "y": 80 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 1210, + "y": 80 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2608,59 +2558,57 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 732, - "y": 1263 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 732, + "y": 1263 } }, - { - "delta": { - "nodeXY6": { - "x": 5921, - "y": 1073 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5921, + "y": 1073 } }, - { - "delta": { - "nodeXY6": { - "x": 3617, - "y": 476 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3617, + "y": 476 } - }, - { - "delta": { - "nodeXY6": { - "x": 2422, - "y": 240 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 2422, + "y": 240 } - }, - { - "delta": { - "nodeXY6": { - "x": 3631, - "y": 251 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3631, + "y": 251 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2736,53 +2684,51 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 800, - "y": 894 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 800, + "y": 894 } - }, - { - "delta": { - "nodeXY6": { - "x": 3583, - "y": 683 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3583, + "y": 683 } - }, - { - "delta": { - "nodeXY6": { - "x": 4735, - "y": 723 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 4735, + "y": 723 } - }, - { - "delta": { - "nodeXY6": { - "x": 3617, - "y": 384 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3617, + "y": 384 } - }, - { - "delta": { - "nodeXY6": { - "x": 3625, - "y": 249 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3625, + "y": 249 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2844,29 +2790,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 8335, - "y": -222 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 8335, + "y": -222 } }, - { - "delta": { - "nodeXY6": { - "x": 242, - "y": 23 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 242, + "y": 23 } } - ] - } + } + ] } } ] @@ -2881,7 +2825,7 @@ }, { "description": "Test Case 2 - MapJson", - "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadcfc309e0-bcf6-4834-9178-4600d4998b3710002024-11-08T22:01:11.230Z70RSUfalse001283DA380330002044CA0D4D3EA2D42CC86AFB534E02DC3E5820A80000040000961C7612C5BB250FFDE04DD37663DFFA409D80583C0003009608AA000001000025872783416EC83BFEC81374DD9A67FFA02760160D0000C025824A80000040000961CBE0715BB2AB001004DD3765B5FFD009D80582C0003009609AA00000080000D8A308047027D9B520F000004E202C790000404B0515000000400006C5123F70013ECDA5E1800602710163A8000202581EA80000010000361C5E17DC0A0A6DF8040130134C230E2400118690001080AB100000000D877C7CB4027D8B039AFFF4202CC40000000361DF1ED2C09EC2C0EC3FFD080BB100000000D875379C5027B0B03F70000203B04000000035F791D70C09EC2C003BF72880F4100000000D7C8875B5027B0B0000FDCA203F04000000035EBB1D60C09EC2C003BF8416100A00000040000D77D77844027D9AA845002C052308C7C9000463C40004580228000004000095DFB9E6C9A509AFFA80546349C75FFC80A46058BC00010096010A00000100002578077AD8693C9C00E8152CD27B7802E028F0162D00004025806280000040000B5E049F1E00A0A693B8C00181518D28018012028F0162B00004025808280000020000B5DA09FE540A0A6ACB53FFA81450D772E7DD402828561AA000A02B0E400050210052200000001AF0DB0352050A15FBC6000040188800000006BC42418C0142857ED47FFA10072200000001AF1150904050A15FB9A000040208800000006BC4AC2F00142857EE080002C0A3400000200019AFB5D1346050A35FFA6177C0A0A2BFE64464B5FD921F600A0A6BF14443981428D7CF6891302851AF5E11142050A35EED218340A0A058EC00020096049A0000004000ED7C1B896902851AFFE90DCE050535FE5E2E3C0A0A6BFB3C26781414D7E5C883402829AF9911096050A35F57A14CC0A142BE86C25D35F2F610940A0A218412000AC7A000100C60E40004581668000002000135FB8226D80A146BFF1C7C401414D7F3C878202829AFB531352050A02C590001C04B030D000000400036C00BC4E681428D801789A302828AFF8D0F76D7F0E877C02829AFC950CA4050502C554001C0440350800000006C0DD44F88142858000814D100E4200000001B06A713CA050536000205480A0A2C197400000200001B079CED3004F135FF1113200A3205874000400960D3A00000100000D8234765D027B1AFFF08A14051402C360002004B06DD000000400006C0653B22013D8D800A4518028A0160C80006025838E8000002000035FDB1D84C09EC6C003BA14814140B0540003012C187400000080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800RSU10.11.81.33MessageFrame183088053395950548-104866790817230366165100000000000000000001000000000001821120122824-17-7022927-23-4071000000000006117510000000000000000000100000000000183183322791-39-7022950-6-40610000000000061185100000000000000000001000000000001839453228698-7022893-12-4051000000000006119510000000000000000000010000000000260871-10105030-603001000000000011205100000000000000000000100000000002596-288-1096976-6029010000000000111551000000000000000000000100000000018151527101612838-90140010010000001130010000000002216010000000000000000001916-844-10461-6226010000000000000000001916-1205-20472-6236010000000000000000001875-1595-20507029801000000000000000000-540-2621-207-28330801000000000000000000-888-2635-200-28331801000000000000000000-1300-2685-207-24832110000000000000000000001000000000-2089-1980-10-1123022703100100100000013000100000000021110000000000000000000100000000000-2066-1614-22451-44140-22755-147023100000000000212110000000000000000000100000000000-2041-1320-2263729150-22601466022100000000000213110000000000000000000100000000000-2030-90410-226713140-22527186021100000000000214110000000000000000000010000000000-2430-10710-9878-1140-2258-55610130101000000005114010000000000525201000000000000000000-193942520-27106201000000000000000000-191679220-300-67201000000000000000000-1910115420-28208201000000000000000000-1899150420-288010310000000000000000000100000000000-594246720-23150310-522249-156200810-472216320-778232320-1296220920-110015491029100000000000419310000000000000000000001000000000-997240920-12176710-105295910-153123110-420210010-824212320-674133120-7551210-8351061108001001000000130100000000000437001000000000211310000000000000000000010000000000-288248620-29397610-196192210-5992473202201000000000071123100000000000000000000100000000002325092023246710-581979-242191610-43816181021010100000000711340100000000000000000044225452003331440100000000000000000085125331003381025710000000000000000000100000000000974-2408-30-60-1516050141000000000008126710000000000000000000100000000000564-2467-20-8-1509440131000000000008127710000000000000000000010000000000202-2492-2010-150804060100000000003128710000000000000000000010000000000-148-2541-207-303110501000000000031247100000000000000000000010000000002555-2340-30-357-252-438-459-288-562-177-601-13-903030250010000000001", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadcfc309e0-bcf6-4834-9178-4600d4998b3710002024-11-08T22:01:11.230Z70RSUfalse001283DA380330002044CA0D4D3EA2D42CC86AFB534E02DC3E5820A80000040000961C7612C5BB250FFDE04DD37663DFFA409D80583C0003009608AA000001000025872783416EC83BFEC81374DD9A67FFA02760160D0000C025824A80000040000961CBE0715BB2AB001004DD3765B5FFD009D80582C0003009609AA00000080000D8A308047027D9B520F000004E202C790000404B0515000000400006C5123F70013ECDA5E1800602710163A8000202581EA80000010000361C5E17DC0A0A6DF8040130134C230E2400118690001080AB100000000D877C7CB4027D8B039AFFF4202CC40000000361DF1ED2C09EC2C0EC3FFD080BB100000000D875379C5027B0B03F70000203B04000000035F791D70C09EC2C003BF72880F4100000000D7C8875B5027B0B0000FDCA203F04000000035EBB1D60C09EC2C003BF8416100A00000040000D77D77844027D9AA845002C052308C7C9000463C40004580228000004000095DFB9E6C9A509AFFA80546349C75FFC80A46058BC00010096010A00000100002578077AD8693C9C00E8152CD27B7802E028F0162D00004025806280000040000B5E049F1E00A0A693B8C00181518D28018012028F0162B00004025808280000020000B5DA09FE540A0A6ACB53FFA81450D772E7DD402828561AA000A02B0E400050210052200000001AF0DB0352050A15FBC6000040188800000006BC42418C0142857ED47FFA10072200000001AF1150904050A15FB9A000040208800000006BC4AC2F00142857EE080002C0A3400000200019AFB5D1346050A35FFA6177C0A0A2BFE64464B5FD921F600A0A6BF14443981428D7CF6891302851AF5E11142050A35EED218340A0A058EC00020096049A0000004000ED7C1B896902851AFFE90DCE050535FE5E2E3C0A0A6BFB3C26781414D7E5C883402829AF9911096050A35F57A14CC0A142BE86C25D35F2F610940A0A218412000AC7A000100C60E40004581668000002000135FB8226D80A146BFF1C7C401414D7F3C878202829AFB531352050A02C590001C04B030D000000400036C00BC4E681428D801789A302828AFF8D0F76D7F0E877C02829AFC950CA4050502C554001C0440350800000006C0DD44F88142858000814D100E4200000001B06A713CA050536000205480A0A2C197400000200001B079CED3004F135FF1113200A3205874000400960D3A00000100000D8234765D027B1AFFF08A14051402C360002004B06DD000000400006C0653B22013D8D800A4518028A0160C80006025838E8000002000035FDB1D84C09EC6C003BA14814140B0540003012C187400000080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800RSU10.11.81.33MessageFrame183088053395950548-104866790817232366165100000000000000000001000000000001821120122824-17-7022927-23-4071000000000006117510000000000000000000100000000000183183322791-39-7022950-6-40610000000000061185100000000000000000001000000000001839453228698-7022893-12-4051000000000006119510000000000000000000010000000000260871-10105030-603001000000000011205100000000000000000000100000000002596-288-1096976-6029010000000000111551000000000000000000000100000000018151527101612838-90140010010000001130010000000002216010000000000000000001916-844-10461-6226010000000000000000001916-1205-20472-6236010000000000000000001875-1595-20507029801000000000000000000-540-2621-207-28330801000000000000000000-888-2635-200-28331801000000000000000000-1300-2685-207-24832110000000000000000000001000000000-2089-1980-10-1123022703100100100000013000100000000021110000000000000000000100000000000-2066-1614-22451-44140-22755-147023100000000000212110000000000000000000100000000000-2041-1320-2263729150-22601466022100000000000213110000000000000000000100000000000-2030-90410-226713140-22527186021100000000000214110000000000000000000010000000000-2430-10710-9878-1140-2258-55610130101000000005114010000000000525201000000000000000000-193942520-27106201000000000000000000-191679220-300-67201000000000000000000-1910115420-28208201000000000000000000-1899150420-288010310000000000000000000100000000000-594246720-23150310-522249-156200810-472216320-778232320-1296220920-110015491029100000000000419310000000000000000000001000000000-997240920-12176710-105295910-153123110-420210010-824212320-674133120-7551210-8351061108001001000000130100000000000437001000000000211310000000000000000000010000000000-288248620-29397610-196192210-5992473202201000000000071123100000000000000000000100000000002325092023246710-581979-242191610-43816181021010100000000711340100000000000000000044225452003331440100000000000000000085125331003381025710000000000000000000100000000000974-2408-30-60-1516050141000000000008126710000000000000000000100000000000564-2467-20-8-1509440131000000000008127710000000000000000000010000000000202-2492-2010-150804060100000000003128710000000000000000000010000000000-148-2541-207-303110501000000000031247100000000000000000000010000000002555-2340-30-357-252-438-459-288-562-177-601-13-903030250010000000001", "expected": { "metadata": { "logFileName": "", @@ -2925,7 +2869,7 @@ "refPoint": { "latitude": 39.5950548, "longitude": -104.8667908, - "elevation": "1723.0" + "elevation": 1723.2 }, "laneWidth": 366, "laneSet": { @@ -2978,40 +2922,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1821, - "y": 1201 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1821, + "y": 1201 } - }, - { - "delta": { - "nodeXY6": { - "x": 22824, - "y": -17 - } - }, - "attributes": { - "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22824, + "y": -17 } }, - { - "delta": { - "nodeXY6": { - "x": 22927, - "y": -23 - } - }, - "attributes": { - "dElevation": -40 + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22927, + "y": -23 } + }, + "attributes": { + "dElevation": -40 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -3087,40 +3029,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1831, - "y": 833 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1831, + "y": 833 } - }, - { - "delta": { - "nodeXY6": { - "x": 22791, - "y": -39 - } - }, - "attributes": { - "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22791, + "y": -39 } }, - { - "delta": { - "nodeXY6": { - "x": 22950, - "y": -6 - } - }, - "attributes": { - "dElevation": -40 + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22950, + "y": -6 } + }, + "attributes": { + "dElevation": -40 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -3196,40 +3136,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1839, - "y": 453 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1839, + "y": 453 } - }, - { - "delta": { - "nodeXY6": { - "x": 22869, - "y": 8 - } - }, - "attributes": { - "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22869, + "y": 8 } }, - { - "delta": { - "nodeXY6": { - "x": 22893, - "y": -12 - } - }, - "attributes": { - "dElevation": -40 + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22893, + "y": -12 } + }, + "attributes": { + "dElevation": -40 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -3305,32 +3243,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2608, - "y": 71 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2608, + "y": 71 } }, - { - "delta": { - "nodeXY6": { - "x": 10503, - "y": 0 - } - }, - "attributes": { - "dElevation": -60 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 10503, + "y": 0 } + }, + "attributes": { + "dElevation": -60 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -3406,32 +3342,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2596, - "y": -288 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2596, + "y": -288 } }, - { - "delta": { - "nodeXY6": { - "x": 9697, - "y": 6 - } - }, - "attributes": { - "dElevation": -60 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 9697, + "y": 6 } + }, + "attributes": { + "dElevation": -60 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -3507,32 +3441,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1815, - "y": 1527 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1815, + "y": 1527 } }, - { - "delta": { - "nodeXY6": { - "x": 16128, - "y": 38 - } - }, - "attributes": { - "dElevation": -90 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 16128, + "y": 38 } + }, + "attributes": { + "dElevation": -90 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -3613,29 +3545,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1916, - "y": -844 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1916, + "y": -844 } }, - { - "delta": { - "nodeXY6": { - "x": 461, - "y": -6 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 461, + "y": -6 } } - ] - } + } + ] } }, { @@ -3672,29 +3602,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1916, - "y": -1205 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1916, + "y": -1205 } }, - { - "delta": { - "nodeXY6": { - "x": 472, - "y": -6 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 472, + "y": -6 } } - ] - } + } + ] } }, { @@ -3731,29 +3659,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1875, - "y": -1595 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1875, + "y": -1595 } }, - { - "delta": { - "nodeXY6": { - "x": 507, - "y": 0 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 507, + "y": 0 } } - ] - } + } + ] } }, { @@ -3790,29 +3716,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -540, - "y": -2621 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -540, + "y": -2621 } }, - { - "delta": { - "nodeXY6": { - "x": 7, - "y": -283 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 7, + "y": -283 } } - ] - } + } + ] } }, { @@ -3849,29 +3773,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -888, - "y": -2635 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -888, + "y": -2635 } }, - { - "delta": { - "nodeXY6": { - "x": 0, - "y": -283 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": -283 } } - ] - } + } + ] } }, { @@ -3908,29 +3830,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1300, - "y": -2685 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1300, + "y": -2685 } }, - { - "delta": { - "nodeXY6": { - "x": 7, - "y": -248 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 7, + "y": -248 } } - ] - } + } + ] } }, { @@ -3981,32 +3901,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2089, - "y": -1980 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2089, + "y": -1980 } }, - { - "delta": { - "nodeXY6": { - "x": -11230, - "y": 22 - } - }, - "attributes": { - "dElevation": 70 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -11230, + "y": 22 } + }, + "attributes": { + "dElevation": 70 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -4101,40 +4019,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2066, - "y": -1614 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2066, + "y": -1614 } - }, - { - "delta": { - "nodeXY6": { - "x": -22451, - "y": -44 - } - }, - "attributes": { - "dElevation": 140 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22451, + "y": -44 } }, - { - "delta": { - "nodeXY6": { - "x": -22755, - "y": -14 - } - }, - "attributes": { - "dElevation": 70 + "attributes": { + "dElevation": 140 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22755, + "y": -14 } + }, + "attributes": { + "dElevation": 70 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -4210,40 +4126,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2041, - "y": -1320 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2041, + "y": -1320 } - }, - { - "delta": { - "nodeXY6": { - "x": -22637, - "y": 29 - } - }, - "attributes": { - "dElevation": 150 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22637, + "y": 29 } }, - { - "delta": { - "nodeXY6": { - "x": -22601, - "y": 46 - } - }, - "attributes": { - "dElevation": 60 + "attributes": { + "dElevation": 150 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22601, + "y": 46 } + }, + "attributes": { + "dElevation": 60 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -4319,43 +4233,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2030, - "y": -904 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2030, + "y": -904 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22671, + "y": 3 } }, - { - "delta": { - "nodeXY6": { - "x": -22671, - "y": 3 - } - }, - "attributes": { - "dElevation": 140 + "attributes": { + "dElevation": 140 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22527, + "y": 18 } }, - { - "delta": { - "nodeXY6": { - "x": -22527, - "y": 18 - } - }, - "attributes": { - "dElevation": 60 - } + "attributes": { + "dElevation": 60 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -4431,43 +4343,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2430, - "y": -107 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2430, + "y": -107 } }, - { - "delta": { - "nodeXY6": { - "x": -9878, - "y": -11 - } - }, - "attributes": { - "dElevation": 40 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9878, + "y": -11 } }, - { - "delta": { - "nodeXY6": { - "x": -2258, - "y": -556 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 40 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2258, + "y": -556 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -4550,29 +4460,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1939, - "y": 425 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1939, + "y": 425 } }, - { - "delta": { - "nodeXY6": { - "x": -271, - "y": 0 - } + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -271, + "y": 0 } } - ] - } + } + ] } }, { @@ -4609,29 +4517,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1916, - "y": 792 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1916, + "y": 792 } }, - { - "delta": { - "nodeXY6": { - "x": -300, - "y": -6 - } + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -300, + "y": -6 } } - ] - } + } + ] } }, { @@ -4668,29 +4574,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1910, - "y": 1154 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1910, + "y": 1154 } }, - { - "delta": { - "nodeXY6": { - "x": -282, - "y": 0 - } + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -282, + "y": 0 } } - ] - } + } + ] } }, { @@ -4727,29 +4631,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1899, - "y": 1504 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1899, + "y": 1504 } }, - { - "delta": { - "nodeXY6": { - "x": -288, - "y": 0 - } + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -288, + "y": 0 } } - ] - } + } + ] } }, { @@ -4800,95 +4702,93 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -594, - "y": 2467 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -23, - "y": 1503 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -52, - "y": 2249 - } - } - }, - { - "delta": { - "nodeXY6": { - "x": -156, - "y": 2008 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -472, - "y": 2163 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -778, - "y": 2323 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -1296, - "y": 2209 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -1100, - "y": 1549 - } - }, - "attributes": { - "dElevation": 10 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -594, + "y": 2467 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -23, + "y": 1503 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -52, + "y": 2249 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -156, + "y": 2008 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -472, + "y": 2163 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -778, + "y": 2323 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1296, + "y": 2209 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1100, + "y": 1549 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -4964,106 +4864,104 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -997, - "y": 2409 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -12, - "y": 1767 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -105, - "y": 2959 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -153, - "y": 1231 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -420, - "y": 2100 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -824, - "y": 2123 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -674, - "y": 1331 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -755, - "y": 1210 - } - } - }, - { - "delta": { - "nodeXY6": { - "x": -835, - "y": 1061 - } - }, - "attributes": { - "dElevation": 10 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -997, + "y": 2409 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -12, + "y": 1767 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -105, + "y": 2959 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -153, + "y": 1231 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -420, + "y": 2100 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -824, + "y": 2123 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -674, + "y": 1331 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -755, + "y": 1210 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -835, + "y": 1061 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5179,54 +5077,52 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -288, - "y": 2486 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -288, + "y": 2486 } }, - { - "delta": { - "nodeXY6": { - "x": -29, - "y": 3976 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -29, + "y": 3976 } }, - { - "delta": { - "nodeXY6": { - "x": -196, - "y": 1922 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -196, + "y": 1922 } }, - { - "delta": { - "nodeXY6": { - "x": -599, - "y": 2473 - } - }, - "attributes": { - "dElevation": 20 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -599, + "y": 2473 } + }, + "attributes": { + "dElevation": 20 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5302,62 +5198,60 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 23, - "y": 2509 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 23, + "y": 2509 } }, - { - "delta": { - "nodeXY6": { - "x": 23, - "y": 2467 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 23, + "y": 2467 } }, - { - "delta": { - "nodeXY6": { - "x": -58, - "y": 1979 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -58, + "y": 1979 } - }, - { - "delta": { - "nodeXY6": { - "x": -242, - "y": 1916 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -242, + "y": 1916 } }, - { - "delta": { - "nodeXY6": { - "x": -438, - "y": 1618 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -438, + "y": 1618 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5419,29 +5313,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 442, - "y": 2545 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 442, + "y": 2545 } }, - { - "delta": { - "nodeXY6": { - "x": 0, - "y": 333 - } + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": 333 } } - ] - } + } + ] } }, { @@ -5478,32 +5370,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 851, - "y": 2533 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 851, + "y": 2533 } }, - { - "delta": { - "nodeXY6": { - "x": 0, - "y": 338 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": 338 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] } }, { @@ -5554,32 +5444,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 974, - "y": -2408 - } - }, - "attributes": { - "dElevation": -30 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 974, + "y": -2408 } }, - { - "delta": { - "nodeXY6": { - "x": -60, - "y": -15160 - } - }, - "attributes": { - "dElevation": 50 + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -60, + "y": -15160 } + }, + "attributes": { + "dElevation": 50 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5655,32 +5543,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 564, - "y": -2467 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 564, + "y": -2467 } }, - { - "delta": { - "nodeXY6": { - "x": -8, - "y": -15094 - } - }, - "attributes": { - "dElevation": 40 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -8, + "y": -15094 } + }, + "attributes": { + "dElevation": 40 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5756,32 +5642,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 202, - "y": -2492 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 202, + "y": -2492 } }, - { - "delta": { - "nodeXY6": { - "x": 10, - "y": -15080 - } - }, - "attributes": { - "dElevation": 40 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 10, + "y": -15080 } + }, + "attributes": { + "dElevation": 40 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5857,32 +5741,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -148, - "y": -2541 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -148, + "y": -2541 } }, - { - "delta": { - "nodeXY6": { - "x": 7, - "y": -3031 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 7, + "y": -3031 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5958,64 +5840,62 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2555, - "y": -2340 - } - }, - "attributes": { - "dElevation": -30 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2555, + "y": -2340 } }, - { - "delta": { - "nodeXY6": { - "x": -357, - "y": -252 - } + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -357, + "y": -252 } - }, - { - "delta": { - "nodeXY6": { - "x": -438, - "y": -459 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -438, + "y": -459 } - }, - { - "delta": { - "nodeXY6": { - "x": -288, - "y": -562 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -288, + "y": -562 } - }, - { - "delta": { - "nodeXY6": { - "x": -177, - "y": -601 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -177, + "y": -601 } - }, - { - "delta": { - "nodeXY6": { - "x": -13, - "y": -9030 - } - }, - "attributes": { - "dElevation": 30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -13, + "y": -9030 } + }, + "attributes": { + "dElevation": 30 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -6054,7 +5934,7 @@ }, { "description": "Test case 3 - MapJson", - "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload894cf226-1c88-4e93-8a44-4e2e619593e310002024-11-08T22:01:11.974Z70RSUfalse00128315380230002044D0094D3EA1DB2CCC713452F402DC325806280000040000B5DC45F6640A0A694423FFE01478D267B809B02788162500004025804280000040000B5DD2DF1180A0A69400C01581478D26BE802102788162700004025802280000050000B5DE71EA600A0A69346401281478D27C88052027889629000040231A2400218C9000196020A00000080002D7681808802829A58F9007E051E15E689FAFC5616A000A02B0C400050210052200000001AEC35053C050515FB9A000040188800000006BAFBC20981414D7EEC800002828401C8800000006BAE1C2BB01414D7EDA800B02828B020D000000200006BD19441381414D802398EB027D8460E48002306200022C093400000200001AF6F5103605053600FE640809F6058D400020096051A00000080000D7CC8880402829B008B323204FB0AC494001C056268000E0420168400000001603CA2058B000103682018840000000160A162058AFFE90368581AA80000050000B61E6E14B409F66EB433FE901428DD7357FAB0294086184800230B20002583C00030196072A00000100002D87F183EB027D9BAC18FFAC050A375D61FE5C0A50058340003009607AA00000100002D88148270027D9BAC1AFF98050A375C8DFEE00A500582C00030096082A00000080000D884D813A027D9BBC18FEEC050F02C690000404B0455000000400006C443BFD4813ECDCF047FBB028281632A0002022024C4000000036238DF5AC09F62C08D3FFD0809B100000000D89287BD4027D8B01CCFFF42028C40000000362545EA3409F62C0734000160B3A00000100008582B977ED2C003381A35FD4DDED40A0A2BFCC3E2FB5F7E9D5B00A0A6BDC63640814140B0C80008012C157400000080014B0882EFD057FE3784B2BFF7BAEFB5FD21E3800A0A2BF81BC9835FA55E3240A0A6BDC336710141423142400118990001160C3A0000008000057FF477D16BFE637C1014140B0550003012C177400000100010B029CEF9657FE96FD26BFD7BD3E8141457F1478066BF143BC101414D7BA86CF902828160C8000602203304000000035F719DE5C0A0A2BFFD3F6D880D4100000000D7BED779702828B0000FDCE813ECCEB0E00B027D858D0FEA2D0476B169636B0200800161F00010022041A400000000BE456B81904002043A400000000BE01114184C00013C457FD24A52058C40001008037263DFF780A146E023C005813EC0A0806012C1554000002000045FE580ADC92E801402829B81AEFFC804FB0281C1804B05950000008000117FBD42371E39FF980A0A6E132C01E813EC0A0606012C18540000010000C780E7B5B3CEA805C0A0A1F0122C8BDCBC0000A0A5F07223204FB028800404B05D5000000400001E02A202DA50180060282814420202000RSU10.11.81.36MessageFrame182088082395950299-1048404171171403663110000000000000000000100000000000-2287-61510-22396-460-22917155-3018100000000000212110000000000000000000100000000000-2229-95410-225274360-2285033-3019100000000000211110000000000000000000101000000000-2148-138410-229003760-2258482-3020100000000000212600100100000022500100000000034110000000000000000000010000000000-243113610-213806360-1630-321110101000000005112010000000000525201000000000000000000-253467010-28206201000000000000000000-2569104310-2760107201000000000000000000-2621139810-29411108310000000000000000000001000000000-1486208710356379-1070010010000001600100000000029310000000000000000000100000000000-1158207510636402-10261000000000004110310000000000000000000010000000000-824205210696425-10180101000000007119010000000000721140100000000000000000024220700436124010000000000000000006452070-124361351000000000000000000010100000000019471325-1022150-462022325-85801200100100000011100100000000027100000000000631451000000000000000000010000000000020331003-1022028-422022360-10580610000000000061155100000000000000000001000000000002068624-1022029-522022307-7280510000000000061165100000000000000000000100000000002125314-1024076-138302601000000000011175100000000000000000000100000000002183-87-1020228-69102501010000000011186010000000000000000002275-661-10282-6196010000000000000000002344-1068-10230-6206010000000000000000002385-1395-10230022710000000000000000000100000000000697-20676-4044-173-212310-104-929-518-270810-1140-4991101210000000000081217100000000000000000000010000000001089-2072-29-1973-17-2593-184-182410-253-1744-363-184710-1146-48941020001001000000119001000000000224710000000000000000000010000000000-12-2095-52-42221050101000000003123710000000000000000000010000000000334-2101-23-4142-81-141110-236-2042-472-217410-1112-48711060100000000003125801000000000000000000-570-215310-6-29326801000000000000000000-1043-2153100-281", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload894cf226-1c88-4e93-8a44-4e2e619593e310002024-11-08T22:01:11.974Z70RSUfalse00128315380230002044D0094D3EA1DB2CCC713452F402DC325806280000040000B5DC45F6640A0A694423FFE01478D267B809B02788162500004025804280000040000B5DD2DF1180A0A69400C01581478D26BE802102788162700004025802280000050000B5DE71EA600A0A69346401281478D27C88052027889629000040231A2400218C9000196020A00000080002D7681808802829A58F9007E051E15E689FAFC5616A000A02B0C400050210052200000001AEC35053C050515FB9A000040188800000006BAFBC20981414D7EEC800002828401C8800000006BAE1C2BB01414D7EDA800B02828B020D000000200006BD19441381414D802398EB027D8460E48002306200022C093400000200001AF6F5103605053600FE640809F6058D400020096051A00000080000D7CC8880402829B008B323204FB0AC494001C056268000E0420168400000001603CA2058B000103682018840000000160A162058AFFE90368581AA80000050000B61E6E14B409F66EB433FE901428DD7357FAB0294086184800230B20002583C00030196072A00000100002D87F183EB027D9BAC18FFAC050A375D61FE5C0A50058340003009607AA00000100002D88148270027D9BAC1AFF98050A375C8DFEE00A500582C00030096082A00000080000D884D813A027D9BBC18FEEC050F02C690000404B0455000000400006C443BFD4813ECDCF047FBB028281632A0002022024C4000000036238DF5AC09F62C08D3FFD0809B100000000D89287BD4027D8B01CCFFF42028C40000000362545EA3409F62C0734000160B3A00000100008582B977ED2C003381A35FD4DDED40A0A2BFCC3E2FB5F7E9D5B00A0A6BDC63640814140B0C80008012C157400000080014B0882EFD057FE3784B2BFF7BAEFB5FD21E3800A0A2BF81BC9835FA55E3240A0A6BDC336710141423142400118990001160C3A0000008000057FF477D16BFE637C1014140B0550003012C177400000100010B029CEF9657FE96FD26BFD7BD3E8141457F1478066BF143BC101414D7BA86CF902828160C8000602203304000000035F719DE5C0A0A2BFFD3F6D880D4100000000D7BED779702828B0000FDCE813ECCEB0E00B027D858D0FEA2D0476B169636B0200800161F00010022041A400000000BE456B81904002043A400000000BE01114184C00013C457FD24A52058C40001008037263DFF780A146E023C005813EC0A0806012C1554000002000045FE580ADC92E801402829B81AEFFC804FB0281C1804B05950000008000117FBD42371E39FF980A0A6E132C01E813EC0A0606012C18540000010000C780E7B5B3CEA805C0A0A1F0122C8BDCBC0000A0A5F07223204FB028800404B05D5000000400001E02A202DA50180060282814420202000RSU10.11.81.36MessageFrame182088082395950299-1048404171171463663110000000000000000000100000000000-2287-61510-22396-460-22917155-3018100000000000212110000000000000000000100000000000-2229-95410-225274360-2285033-3019100000000000211110000000000000000000101000000000-2148-138410-229003760-2258482-3020100000000000212600100100000022500100000000034110000000000000000000010000000000-243113610-213806360-1630-321110101000000005112010000000000525201000000000000000000-253467010-28206201000000000000000000-2569104310-2760107201000000000000000000-2621139810-29411108310000000000000000000001000000000-1486208710356379-1070010010000001600100000000029310000000000000000000100000000000-1158207510636402-10261000000000004110310000000000000000000010000000000-824205210696425-10180101000000007119010000000000721140100000000000000000024220700436124010000000000000000006452070-124361351000000000000000000010100000000019471325-1022150-462022325-85801200100100000011100100000000027100000000000631451000000000000000000010000000000020331003-1022028-422022360-10580610000000000061155100000000000000000001000000000002068624-1022029-522022307-7280510000000000061165100000000000000000000100000000002125314-1024076-138302601000000000011175100000000000000000000100000000002183-87-1020228-69102501010000000011186010000000000000000002275-661-10282-6196010000000000000000002344-1068-10230-6206010000000000000000002385-1395-10230022710000000000000000000100000000000697-20676-4044-173-212310-104-929-518-270810-1140-4991101210000000000081217100000000000000000000010000000001089-2072-29-1973-17-2593-184-182410-253-1744-363-184710-1146-48941020001001000000119001000000000224710000000000000000000010000000000-12-2095-52-42221050101000000003123710000000000000000000010000000000334-2101-23-4142-81-141110-236-2042-472-217410-1112-48711060100000000003125801000000000000000000-570-215310-6-29326801000000000000000000-1043-2153100-281", "expected": { "metadata": { "logFileName": "", @@ -6098,7 +5978,7 @@ "refPoint": { "latitude": 39.5950299, "longitude": -104.8404171, - "elevation": "1714.0" + "elevation": 1714.6 }, "laneWidth": 366, "laneSet": { @@ -6151,43 +6031,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2287, - "y": -615 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2287, + "y": -615 } }, - { - "delta": { - "nodeXY6": { - "x": -22396, - "y": -4 - } - }, - "attributes": { - "dElevation": 60 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22396, + "y": -4 } }, - { - "delta": { - "nodeXY6": { - "x": -22917, - "y": 155 - } - }, - "attributes": { - "dElevation": -30 + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22917, + "y": 155 } + }, + "attributes": { + "dElevation": -30 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -6263,43 +6141,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2229, - "y": -954 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2229, + "y": -954 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22527, + "y": 43 } }, - { - "delta": { - "nodeXY6": { - "x": -22527, - "y": 43 - } - }, - "attributes": { - "dElevation": 60 + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22850, + "y": 33 } }, - { - "delta": { - "nodeXY6": { - "x": -22850, - "y": 33 - } - }, - "attributes": { - "dElevation": -30 - } + "attributes": { + "dElevation": -30 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -6375,43 +6251,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2148, - "y": -1384 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2148, + "y": -1384 } }, - { - "delta": { - "nodeXY6": { - "x": -22900, - "y": 37 - } - }, - "attributes": { - "dElevation": 60 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22900, + "y": 37 } }, - { - "delta": { - "nodeXY6": { - "x": -22584, - "y": 82 - } - }, - "attributes": { - "dElevation": -30 + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22584, + "y": 82 } + }, + "attributes": { + "dElevation": -30 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -6527,40 +6401,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2431, - "y": 136 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2431, + "y": 136 } }, - { - "delta": { - "nodeXY6": { - "x": -21380, - "y": 63 - } - }, - "attributes": { - "dElevation": 60 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -21380, + "y": 63 } }, - { - "delta": { - "nodeXY6": { - "x": -1630, - "y": -321 - } + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1630, + "y": -321 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -6643,29 +6515,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2534, - "y": 670 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2534, + "y": 670 } }, - { - "delta": { - "nodeXY6": { - "x": -282, - "y": 0 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -282, + "y": 0 } } - ] - } + } + ] } }, { @@ -6702,32 +6572,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2569, - "y": 1043 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2569, + "y": 1043 } }, - { - "delta": { - "nodeXY6": { - "x": -276, - "y": 0 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -276, + "y": 0 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] } }, { @@ -6764,32 +6632,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2621, - "y": 1398 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2621, + "y": 1398 } }, - { - "delta": { - "nodeXY6": { - "x": -294, - "y": 11 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -294, + "y": 11 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] } }, { @@ -6840,32 +6706,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1486, - "y": 2087 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1486, + "y": 2087 } }, - { - "delta": { - "nodeXY6": { - "x": 35, - "y": 6379 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 35, + "y": 6379 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -6960,32 +6824,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1158, - "y": 2075 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1158, + "y": 2075 } }, - { - "delta": { - "nodeXY6": { - "x": 63, - "y": 6402 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 63, + "y": 6402 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7061,32 +6923,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -824, - "y": 2052 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -824, + "y": 2052 } }, - { - "delta": { - "nodeXY6": { - "x": 69, - "y": 6425 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 69, + "y": 6425 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7169,26 +7029,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 242, - "y": 2070 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 242, + "y": 2070 } - }, - { - "delta": { - "nodeXY6": { - "x": 0, - "y": 436 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": 436 } } - ] - } + } + ] } }, { @@ -7225,26 +7083,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 645, - "y": 2070 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 645, + "y": 2070 } - }, - { - "delta": { - "nodeXY6": { - "x": -12, - "y": 436 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -12, + "y": 436 } } - ] - } + } + ] } }, { @@ -7295,43 +7151,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1947, - "y": 1325 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1947, + "y": 1325 } }, - { - "delta": { - "nodeXY6": { - "x": 22150, - "y": -46 - } - }, - "attributes": { - "dElevation": 20 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22150, + "y": -46 } }, - { - "delta": { - "nodeXY6": { - "x": 22325, - "y": -85 - } - }, - "attributes": { - "dElevation": 80 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22325, + "y": -85 } + }, + "attributes": { + "dElevation": 80 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7447,43 +7301,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2033, - "y": 1003 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2033, + "y": 1003 } }, - { - "delta": { - "nodeXY6": { - "x": 22028, - "y": -42 - } - }, - "attributes": { - "dElevation": 20 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22028, + "y": -42 } }, - { - "delta": { - "nodeXY6": { - "x": 22360, - "y": -105 - } - }, - "attributes": { - "dElevation": 80 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22360, + "y": -105 } + }, + "attributes": { + "dElevation": 80 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7559,43 +7411,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2068, - "y": 624 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2068, + "y": 624 } }, - { - "delta": { - "nodeXY6": { - "x": 22029, - "y": -52 - } - }, - "attributes": { - "dElevation": 20 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22029, + "y": -52 } }, - { - "delta": { - "nodeXY6": { - "x": 22307, - "y": -72 - } - }, - "attributes": { - "dElevation": 80 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22307, + "y": -72 } + }, + "attributes": { + "dElevation": 80 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7671,32 +7521,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2125, - "y": 314 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2125, + "y": 314 } }, - { - "delta": { - "nodeXY6": { - "x": 24076, - "y": -138 - } - }, - "attributes": { - "dElevation": 30 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 24076, + "y": -138 } + }, + "attributes": { + "dElevation": 30 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7772,32 +7620,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2183, - "y": -87 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2183, + "y": -87 } }, - { - "delta": { - "nodeXY6": { - "x": 20228, - "y": -69 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 20228, + "y": -69 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7859,29 +7705,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2275, - "y": -661 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2275, + "y": -661 } }, - { - "delta": { - "nodeXY6": { - "x": 282, - "y": -6 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 282, + "y": -6 } } - ] - } + } + ] } }, { @@ -7918,29 +7762,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2344, - "y": -1068 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2344, + "y": -1068 } }, - { - "delta": { - "nodeXY6": { - "x": 230, - "y": -6 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 230, + "y": -6 } } - ] - } + } + ] } }, { @@ -7977,29 +7819,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2385, - "y": -1395 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2385, + "y": -1395 } }, - { - "delta": { - "nodeXY6": { - "x": 230, - "y": 0 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 230, + "y": 0 } } - ] - } + } + ] } }, { @@ -8050,67 +7890,65 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 697, - "y": -2067 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 697, + "y": -2067 } - }, - { - "delta": { - "nodeXY6": { - "x": 6, - "y": -4044 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 6, + "y": -4044 } - }, - { - "delta": { - "nodeXY6": { - "x": -173, - "y": -2123 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -173, + "y": -2123 } }, - { - "delta": { - "nodeXY6": { - "x": -104, - "y": -929 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -104, + "y": -929 } - }, - { - "delta": { - "nodeXY6": { - "x": -518, - "y": -2708 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -518, + "y": -2708 } }, - { - "delta": { - "nodeXY6": { - "x": -1140, - "y": -4991 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1140, + "y": -4991 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -8186,75 +8024,73 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1089, - "y": -2072 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1089, + "y": -2072 } - }, - { - "delta": { - "nodeXY6": { - "x": -29, - "y": -1973 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -29, + "y": -1973 } - }, - { - "delta": { - "nodeXY6": { - "x": -17, - "y": -2593 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -17, + "y": -2593 } - }, - { - "delta": { - "nodeXY6": { - "x": -184, - "y": -1824 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -184, + "y": -1824 } }, - { - "delta": { - "nodeXY6": { - "x": -253, - "y": -1744 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -253, + "y": -1744 } - }, - { - "delta": { - "nodeXY6": { - "x": -363, - "y": -1847 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -363, + "y": -1847 } }, - { - "delta": { - "nodeXY6": { - "x": -1146, - "y": -4894 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1146, + "y": -4894 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -8349,29 +8185,27 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -12, - "y": -2095 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -12, + "y": -2095 } - }, - { - "delta": { - "nodeXY6": { - "x": -52, - "y": -4222 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -52, + "y": -4222 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -8447,67 +8281,65 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 334, - "y": -2101 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 334, + "y": -2101 } - }, - { - "delta": { - "nodeXY6": { - "x": -23, - "y": -4142 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -23, + "y": -4142 } - }, - { - "delta": { - "nodeXY6": { - "x": -81, - "y": -1411 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -81, + "y": -1411 } }, - { - "delta": { - "nodeXY6": { - "x": -236, - "y": -2042 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -236, + "y": -2042 } - }, - { - "delta": { - "nodeXY6": { - "x": -472, - "y": -2174 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -472, + "y": -2174 } }, - { - "delta": { - "nodeXY6": { - "x": -1112, - "y": -4871 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1112, + "y": -4871 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -8569,29 +8401,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -570, - "y": -2153 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -570, + "y": -2153 } }, - { - "delta": { - "nodeXY6": { - "x": -6, - "y": -293 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -6, + "y": -293 } } - ] - } + } + ] } }, { @@ -8628,29 +8458,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1043, - "y": -2153 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1043, + "y": -2153 } }, - { - "delta": { - "nodeXY6": { - "x": 0, - "y": -281 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": -281 } } - ] - } + } + ] } } ] @@ -8664,8 +8492,8 @@ } }, { - "description": "Test case 3 - MapJson", - "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadd71ab23d-0f89-4847-abef-ea6ffe43995b10002024-11-08T22:01:12.973Z70RSUfalse0012830538023000205EA2094D3A3E202CA7783451FA02DC385824E8000002000089D7FA3C8FF96D5837A9E7A4163680002025822E80000020000A97DFAB40A0A6C00BD21D013EC3792FAD4163880002025820E80000040001A92E3AA00A0A6BFE6538C813ECC7FD3303027D9B01B5AC0004E235FE3698CC09E2058240003009607BA00000100006A32EEB6028298FFA7E6A04FB31FFDFEA809F66C0276FE601374C7D7F795027B0160B0000C0220270400000000A7FF8A4108E8220290400000000AE7B8BC106654582F6800000400008BB12D889D763ED6CD4D1F3D027B01617000100258316800000400010BADA8407C8F7F7B37CB7C0C09F65EF01F8E04FB02C2A0002004B066D0000004000117754649317D7F1C5F5AF8E0B0540003012C1AB4000001000045D8EF044D741F7C5E72E30C04FB02C110000C04406F08000000017372C9833182C4073080000000172BA0F033D800B07B90000002000117BA05905140476BFCD2EDD813D8031D200012C03140000010000451D42D0C808C5E8027D97035116813EC2B0A4000501485A000296010A000001000062A421736408A2E5813ECD802B5DAA027B1B00507F4404E736005D134009B00589C00010096008A000001000082BB615E6407E1FA013ECB806072409F66405040A013ECD806744FF02739AFFA48A8604D802C520000804B024D000000400015070BFA01414C2F6E02E0282866DD75682C4D0001C04B020D000000400005073B5901414C18BE01D0282816288000E02580E680000040001283196680A0A610C6FF481414338842B0258DFD82C6E0001004B018D0000008000250602268141443771FB058F7A150050508C8E05C1639000080220148400000002836E6FC0A0A0229030805A100000000A104B5C0282806D400202B240000000161566915810BFF2400A48000000008D5480C0F18AE4008480000000093B88680F4880203BA40000000134E16A301C4422581CC800000100012CF576F9028283793BFB201DED0C09F6241B7BB408C3480004218400201AA4000000030CE28E000A0A01B50008062900000000C33B621C0282805EBF400002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B000080200RSU10.11.81.19MessageFrame1820121132395662624-10508272111689036618710000000000000000000010000000000-1611679-145804-1732537270100000000001117710000000000000000000010000000000-521170910239274-10-2193765280100000000001116710000000000000000000100000000000-840170410-5210009-10-124867-1021822016-60-1159779-3041000000000006115710000000000000000000100000000000-1234171810-127989-10-38106-107824524-70-1616037-20510000000000061198010000000000000000005111577173212080100000000000000000092615831229823111000000000000000000010000000000017328666892-1495428-195-20111000000000008124111000000000000000000010000000000017185283215-176091-253-103008-57-10101000000000008125111000000000000000000001000000000017702014477-571965-575010000000000312611100000000000000000000100000000001735-1265584-1322507390-104010000000000312712010000000000000000001646-621305112812010000000000000000001623-99431703014100000000000000000000010000000001908-1870-472-953-102-8773-202900100000000013110000000000000000000010000000000234-168835-6680-1053-3539-1010010000000000511101000000000052110000000000000000000100000000000578-167769-6709-1043-8790-2040-16478-5023-15152-8019100000000000211110000000000000000000100000000000950-169863-7180-1012-3639-1040-6124-10103-15105-50-46-15037-8020100000000000219310000000000000000000010000000000-1823-1210-51574610-2339-33919010000000000718310000000000000000000010000000000-1817-33410-6609291020010000000000717310000000000000000000100000000000-1850-61410-6045-2310-2288172-669-527100000000000416310000000000000000000100000000000-1856-94710-4644-80-310616810-124523281000000000004110401000000000000000000-182944710-236611401000000000000000000-178886010-29402190100000000000000000013699302235055210000000000000000000-1195-1533-29-4254210000000000000000000-786-1510-23-4482913010000000000000000005345-13963921714610000000000000000000001000000000-2133178510484895296979-1021959921300100000000011200100000000013501000000000000000000-489489610-294012501000000000000000000-488354010-323-6", + "description": "Test case 4 - MapJson", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadd71ab23d-0f89-4847-abef-ea6ffe43995b10002024-11-08T22:01:12.973Z70RSUfalse0012830538023000205EA2094D3A3E202CA7783451FA02DC385824E8000002000089D7FA3C8FF96D5837A9E7A4163680002025822E80000020000A97DFAB40A0A6C00BD21D013EC3792FAD4163880002025820E80000040001A92E3AA00A0A6BFE6538C813ECC7FD3303027D9B01B5AC0004E235FE3698CC09E2058240003009607BA00000100006A32EEB6028298FFA7E6A04FB31FFDFEA809F66C0276FE601374C7D7F795027B0160B0000C0220270400000000A7FF8A4108E8220290400000000AE7B8BC106654582F6800000400008BB12D889D763ED6CD4D1F3D027B01617000100258316800000400010BADA8407C8F7F7B37CB7C0C09F65EF01F8E04FB02C2A0002004B066D0000004000117754649317D7F1C5F5AF8E0B0540003012C1AB4000001000045D8EF044D741F7C5E72E30C04FB02C110000C04406F08000000017372C9833182C4073080000000172BA0F033D800B07B90000002000117BA05905140476BFCD2EDD813D8031D200012C03140000010000451D42D0C808C5E8027D97035116813EC2B0A4000501485A000296010A000001000062A421736408A2E5813ECD802B5DAA027B1B00507F4404E736005D134009B00589C00010096008A000001000082BB615E6407E1FA013ECB806072409F66405040A013ECD806744FF02739AFFA48A8604D802C520000804B024D000000400015070BFA01414C2F6E02E0282866DD75682C4D0001C04B020D000000400005073B5901414C18BE01D0282816288000E02580E680000040001283196680A0A610C6FF481414338842B0258DFD82C6E0001004B018D0000008000250602268141443771FB058F7A150050508C8E05C1639000080220148400000002836E6FC0A0A0229030805A100000000A104B5C0282806D400202B240000000161566915810BFF2400A48000000008D5480C0F18AE4008480000000093B88680F4880203BA40000000134E16A301C4422581CC800000100012CF576F9028283793BFB201DED0C09F6241B7BB408C3480004218400201AA4000000030CE28E000A0A01B50008062900000000C33B621C0282805EBF400002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B000080200RSU10.11.81.19MessageFrame1820121132395662624-10508272111689936618710000000000000000000010000000000-1611679-145804-1732537270100000000001117710000000000000000000010000000000-521170910239274-10-2193765280100000000001116710000000000000000000100000000000-840170410-5210009-10-124867-1021822016-60-1159779-3041000000000006115710000000000000000000100000000000-1234171810-127989-10-38106-107824524-70-1616037-20510000000000061198010000000000000000005111577173212080100000000000000000092615831229823111000000000000000000010000000000017328666892-1495428-195-20111000000000008124111000000000000000000010000000000017185283215-176091-253-103008-57-10101000000000008125111000000000000000000001000000000017702014477-571965-575010000000000312611100000000000000000000100000000001735-1265584-1322507390-104010000000000312712010000000000000000001646-621305112812010000000000000000001623-99431703014100000000000000000000010000000001908-1870-472-953-102-8773-202900100000000013110000000000000000000010000000000234-168835-6680-1053-3539-1010010000000000511101000000000052110000000000000000000100000000000578-167769-6709-1043-8790-2040-16478-5023-15152-8019100000000000211110000000000000000000100000000000950-169863-7180-1012-3639-1040-6124-10103-15105-50-46-15037-8020100000000000219310000000000000000000010000000000-1823-1210-51574610-2339-33919010000000000718310000000000000000000010000000000-1817-33410-6609291020010000000000717310000000000000000000100000000000-1850-61410-6045-2310-2288172-669-527100000000000416310000000000000000000100000000000-1856-94710-4644-80-310616810-124523281000000000004110401000000000000000000-182944710-236611401000000000000000000-178886010-29402190100000000000000000013699302235055210000000000000000000-1195-1533-29-4254210000000000000000000-786-1510-23-4482913010000000000000000005345-13963921714610000000000000000000001000000000-2133178510484895296979-1021959921300100000000011200100000000013501000000000000000000-489489610-294012501000000000000000000-488354010-323-6", "expected": { "metadata": { "logFileName": "", @@ -8709,7 +8537,7 @@ "refPoint": { "latitude": 39.5662624, "longitude": -105.0827211, - "elevation": "1689.0" + "elevation": 1689.9 }, "laneWidth": 366, "laneSet": { @@ -8762,34 +8590,32 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -161, - "y": 1679 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -161, + "y": 1679 } - }, - { - "delta": { - "nodeXY5": { - "x": -14, - "y": 5804 - } + } + }, + { + "delta": { + "nodeXY5": { + "x": -14, + "y": 5804 } - }, - { - "delta": { - "nodeXY4": { - "x": -173, - "y": 2537 - } + } + }, + { + "delta": { + "nodeXY4": { + "x": -173, + "y": 2537 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -8865,40 +8691,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -521, - "y": 1709 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -521, + "y": 1709 } }, - { - "delta": { - "nodeXY6": { - "x": 23, - "y": 9274 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 23, + "y": 9274 } }, - { - "delta": { - "nodeXY4": { - "x": -219, - "y": 3765 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -219, + "y": 3765 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -8974,65 +8798,63 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -840, - "y": 1704 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -52, - "y": 10009 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": -12, - "y": 4867 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 218, - "y": 22016 - } - }, - "attributes": { - "dElevation": -60 - } - }, - { - "delta": { - "nodeXY6": { - "x": -115, - "y": 9779 - } - }, - "attributes": { - "dElevation": -30 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -840, + "y": 1704 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -52, + "y": 10009 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -12, + "y": 4867 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 218, + "y": 22016 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -115, + "y": 9779 + } + }, + "attributes": { + "dElevation": -30 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -9108,65 +8930,63 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1234, - "y": 1718 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY5": { - "x": -12, - "y": 7989 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": -3, - "y": 8106 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 78, - "y": 24524 - } - }, - "attributes": { - "dElevation": -70 - } - }, - { - "delta": { - "nodeXY5": { - "x": -161, - "y": 6037 - } - }, - "attributes": { - "dElevation": -20 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1234, + "y": 1718 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -12, + "y": 7989 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -3, + "y": 8106 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 78, + "y": 24524 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY5": { + "x": -161, + "y": 6037 + } + }, + "attributes": { + "dElevation": -20 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -9228,26 +9048,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 511, - "y": 1577 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 511, + "y": 1577 } - }, - { - "delta": { - "nodeXY1": { - "x": 17, - "y": 321 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 17, + "y": 321 } } - ] - } + } + ] } }, { @@ -9284,26 +9102,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 926, - "y": 1583 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 926, + "y": 1583 } - }, - { - "delta": { - "nodeXY1": { - "x": 12, - "y": 298 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 12, + "y": 298 } } - ] - } + } + ] } }, { @@ -9354,37 +9170,35 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1732, - "y": 866 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1732, + "y": 866 } - }, - { - "delta": { - "nodeXY5": { - "x": 6892, - "y": -149 - } + } + }, + { + "delta": { + "nodeXY5": { + "x": 6892, + "y": -149 } - }, - { - "delta": { - "nodeXY5": { - "x": 5428, - "y": -195 - } - }, - "attributes": { - "dElevation": -20 + } + }, + { + "delta": { + "nodeXY5": { + "x": 5428, + "y": -195 } + }, + "attributes": { + "dElevation": -20 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -9460,48 +9274,46 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1718, - "y": 528 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1718, + "y": 528 } - }, - { - "delta": { - "nodeXY4": { - "x": 3215, - "y": -17 - } + } + }, + { + "delta": { + "nodeXY4": { + "x": 3215, + "y": -17 } - }, - { - "delta": { - "nodeXY5": { - "x": 6091, - "y": -253 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 6091, + "y": -253 } }, - { - "delta": { - "nodeXY4": { - "x": 3008, - "y": -57 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 3008, + "y": -57 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -9577,34 +9389,32 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1770, - "y": 201 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1770, + "y": 201 } - }, - { - "delta": { - "nodeXY5": { - "x": 4477, - "y": -57 - } + } + }, + { + "delta": { + "nodeXY5": { + "x": 4477, + "y": -57 } - }, - { - "delta": { - "nodeXY3": { - "x": 1965, - "y": -57 - } + } + }, + { + "delta": { + "nodeXY3": { + "x": 1965, + "y": -57 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -9680,37 +9490,35 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1735, - "y": -126 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1735, + "y": -126 } - }, - { - "delta": { - "nodeXY5": { - "x": 5584, - "y": -132 - } + } + }, + { + "delta": { + "nodeXY5": { + "x": 5584, + "y": -132 } - }, - { - "delta": { - "nodeXY4": { - "x": 2507, - "y": 390 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 2507, + "y": 390 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -9772,26 +9580,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1646, - "y": -621 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1646, + "y": -621 } - }, - { - "delta": { - "nodeXY1": { - "x": 305, - "y": 11 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 305, + "y": 11 } } - ] - } + } + ] } }, { @@ -9828,26 +9634,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1623, - "y": -994 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1623, + "y": -994 } - }, - { - "delta": { - "nodeXY1": { - "x": 317, - "y": 0 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 317, + "y": 0 } } - ] - } + } + ] } }, { @@ -9898,37 +9702,35 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1908, - "y": -1870 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1908, + "y": -1870 } - }, - { - "delta": { - "nodeXY2": { - "x": -472, - "y": -953 - } + } + }, + { + "delta": { + "nodeXY2": { + "x": -472, + "y": -953 } - }, - { - "delta": { - "nodeXY6": { - "x": -102, - "y": -8773 - } - }, - "attributes": { - "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -102, + "y": -8773 } + }, + "attributes": { + "dElevation": -20 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10003,40 +9805,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 234, - "y": -1688 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 234, + "y": -1688 } - }, - { - "delta": { - "nodeXY5": { - "x": 35, - "y": -6680 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 35, + "y": -6680 } }, - { - "delta": { - "nodeXY4": { - "x": 53, - "y": -3539 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 53, + "y": -3539 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10132,62 +9932,60 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 578, - "y": -1677 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 578, + "y": -1677 } - }, - { - "delta": { - "nodeXY5": { - "x": 69, - "y": -6709 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 69, + "y": -6709 } }, - { - "delta": { - "nodeXY6": { - "x": 43, - "y": -8790 - } - }, - "attributes": { - "dElevation": -20 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 43, + "y": -8790 } }, - { - "delta": { - "nodeXY6": { - "x": 40, - "y": -16478 - } - }, - "attributes": { - "dElevation": -50 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 40, + "y": -16478 } }, - { - "delta": { - "nodeXY6": { - "x": 23, - "y": -15152 - } - }, - "attributes": { - "dElevation": -80 + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY6": { + "x": 23, + "y": -15152 } + }, + "attributes": { + "dElevation": -80 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10263,73 +10061,71 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 950, - "y": -1698 - } - } - }, - { - "delta": { - "nodeXY5": { - "x": 63, - "y": -7180 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY4": { - "x": 12, - "y": -3639 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 40, - "y": -6124 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 103, - "y": -15105 - } - }, - "attributes": { - "dElevation": -50 - } - }, - { - "delta": { - "nodeXY6": { - "x": -46, - "y": -15037 - } - }, - "attributes": { - "dElevation": -80 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 950, + "y": -1698 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 63, + "y": -7180 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 12, + "y": -3639 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 40, + "y": -6124 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 103, + "y": -15105 + } + }, + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY6": { + "x": -46, + "y": -15037 + } + }, + "attributes": { + "dElevation": -80 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10405,40 +10201,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1823, - "y": -12 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1823, + "y": -12 } }, - { - "delta": { - "nodeXY5": { - "x": -5157, - "y": 46 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -5157, + "y": 46 } }, - { - "delta": { - "nodeXY4": { - "x": -2339, - "y": -339 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -2339, + "y": -339 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10514,32 +10308,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1817, - "y": -334 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1817, + "y": -334 } }, - { - "delta": { - "nodeXY5": { - "x": -6609, - "y": 29 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -6609, + "y": 29 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10615,48 +10407,46 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1850, - "y": -614 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1850, + "y": -614 } }, - { - "delta": { - "nodeXY5": { - "x": -6045, - "y": -23 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -6045, + "y": -23 } }, - { - "delta": { - "nodeXY4": { - "x": -2288, - "y": 172 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -2288, + "y": 172 } - }, - { - "delta": { - "nodeXY2": { - "x": -669, - "y": -5 - } + } + }, + { + "delta": { + "nodeXY2": { + "x": -669, + "y": -5 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10732,48 +10522,46 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1856, - "y": -947 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1856, + "y": -947 } }, - { - "delta": { - "nodeXY5": { - "x": -4644, - "y": -80 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -4644, + "y": -80 } - }, - { - "delta": { - "nodeXY4": { - "x": -3106, - "y": 168 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -3106, + "y": 168 } }, - { - "delta": { - "nodeXY3": { - "x": -1245, - "y": 23 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY3": { + "x": -1245, + "y": 23 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10835,29 +10623,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1829, - "y": 447 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1829, + "y": 447 } }, - { - "delta": { - "nodeXY1": { - "x": -236, - "y": 6 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -236, + "y": 6 } } - ] - } + } + ] } }, { @@ -10894,29 +10680,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1788, - "y": 860 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1788, + "y": 860 } }, - { - "delta": { - "nodeXY1": { - "x": -294, - "y": 0 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -294, + "y": 0 } } - ] - } + } + ] } }, { @@ -10953,26 +10737,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1369, - "y": 9302 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1369, + "y": 9302 } - }, - { - "delta": { - "nodeXY1": { - "x": 23, - "y": 505 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 23, + "y": 505 } } - ] - } + } + ] } }, { @@ -11009,26 +10791,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1195, - "y": -1533 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1195, + "y": -1533 } - }, - { - "delta": { - "nodeXY1": { - "x": -29, - "y": -425 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": -29, + "y": -425 } } - ] - } + } + ] } }, { @@ -11065,26 +10845,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -786, - "y": -1510 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -786, + "y": -1510 } - }, - { - "delta": { - "nodeXY1": { - "x": -23, - "y": -448 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": -23, + "y": -448 } } - ] - } + } + ] } }, { @@ -11121,26 +10899,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY5": { - "x": 5345, - "y": -1396 - } + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": 5345, + "y": -1396 } - }, - { - "delta": { - "nodeXY1": { - "x": 392, - "y": 17 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 392, + "y": 17 } } - ] - } + } + ] } }, { @@ -11191,48 +10967,46 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -2133, - "y": 1785 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2133, + "y": 1785 } }, - { - "delta": { - "nodeXY2": { - "x": 484, - "y": 895 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY2": { + "x": 484, + "y": 895 } - }, - { - "delta": { - "nodeXY5": { - "x": 29, - "y": 6979 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 29, + "y": 6979 } }, - { - "delta": { - "nodeXY5": { - "x": 219, - "y": 5992 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 219, + "y": 5992 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -11312,29 +11086,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY5": { - "x": -4894, - "y": 896 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -4894, + "y": 896 } }, - { - "delta": { - "nodeXY1": { - "x": -294, - "y": 0 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -294, + "y": 0 } } - ] - } + } + ] } }, { @@ -11371,29 +11143,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY5": { - "x": -4883, - "y": 540 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -4883, + "y": 540 } }, - { - "delta": { - "nodeXY1": { - "x": -323, - "y": -6 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -323, + "y": -6 } } - ] - } + } + ] } } ] @@ -11407,8 +11177,8 @@ } }, { - "description": "Test case 4 - MapJson", - "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload2c91e8d6-f917-4c82-96e4-9de0da3ddca710002024-11-08T22:01:11.319Z70RSUfalse0012834538023000205EA0094D3C71C12CA6CE5D527C02DC3458244800000400028CF6F61F62355F9101464B5AAE70C0A0A631B181A81428D6F27A48302829ADDE94A56050F35BD42952C09C4058340003009609920000010000A2128E4162EAD9980143CC566B6AF028798AF5EB7C050F11349EE19ADCEF4CCA050A35B9E29BE009CE0582C000300960A120000008000222DFE5B6303588D0143CB5AB683C0A0A058F2000080960A920000008000424D3E7162ECF8AF8143CC4C9F8D6028A16876F54814140B1D4000101101632000000014E83CC805050181D34405CC80000000546A74C01414061F5E101832000000015559DAE05050181CA8B06910000008000557F359801414BCCB40000A0A5F6BDEA8050533D307B6C0A1E27EA6FE0AFA9B073027D99945C26C04FB02C360002004B06D1000000800045E50A3E40505331437DAC0A0A6D098BF540143CBEE5BF780A0A67F5501A013ECCC9BA13C027D8161900010025822280000010401AC5437B1027D933B3360141495F5F840A0A62FEF8C581428B624E1CC0A142187100008C3C80008220400203AA400000000F926E6B066F00080F29000000003E45B0481CCC0C583EC800000100012F552960027D9500E77E04FB32AB0218809CE0D89092231E2000118E900011601B200000080002ABF4179027D9958E8EE004E20AE20254561A8000A02B0C40005022C0264000002000115B2C2BC04FB32ACF1F7809C4658F42A6813C4CAEB868F02761B281EA9E004DD364E2D53CC09C4058B40001009600B200000100008AF30177027D9967B06AA04E232A272BEC09E2652CE518813B0D953152C1026E9B2A82A47E04E202C5E0000804401DC8000000051E38FE013EC89FCCA027D84019C8000000052BB904013EC89A097027D84015C80000000538B109813EC0988B31004720000000151DC3EE04FB225C22C09F62C0A840000020000965B0781813D8D599C7FEF02789AB155007204F1356711FFBC09EC058EC0002009604C200000100002B336362809EC6A2FE40170139CD452D7FF502788163D0000802201B2400000002C80D40A027D8067C0020192400000002C825284027D905EC0004FB08085100000000C1AD65AC02788033C00201F4400000003068D912009E2011F0008075100000000C1A1E2F00278804ABF47A7C8195028280540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.20MessageFrame1820121122395806913-10508706901702036618210000000000000000000100000000000-21211567-3670797050-1195249910-1832414920-4313934710-4364951530-42729547-6061000000000006119210000000000000000000100000000000-17521601-2218491230-2662580730-2581556630-32557046-4489982920-44889976-5051000000000006120210000000000000000000010000000000-13131627-2022437830-1194257510300100000000001121210000000000000000000010000000000-8131649-2201444730-3289635840-1930375310290100000000001122301000000000000000000-191163610-12733323301000000000000000000212168810-12135024301000000000000000000684175110-1272982641000000000000000000010000000000020228161024540103503-172107472-293308019-633405115-104747310-101310000000000081274100000000000000000001000000000002370498104419-149108497-344303531-3410810652-104718316-10121000000000008117110000000000000000000001000001000-34231969-1023662010-26299310-2057449120-95121632014001000000000115001000000000216001000000000295010000000000000000003219-4053110305010000000000000000003211-10064096316100000000000000000000010000000002729-1696-107-1089-102736-6046-50393-95130001000000000129001000000000236100000000000000000000100000000001012-1671-102845-6288-60904-18991301000000000051120100000000005226100000000000000000001000000000001430-1698-102767-6178-603194-6835-302990-6513-405135-11024-705003-11021-60221000000000002116100000000000000000001000000000001840-1673-103318-7339-602599-5381-302407-5583-405425-11583-705441-11713-6023100000000000217701000000000000000000-1081-1540-10127-310-106701000000000000000000-649-1528-10104-361-105701000000000000000000-234-1517-1098-3334701000000000000000000238-1545-1092-373-1010810000000000000000000100000000000-2640-253-20-9828-17-30-1007057-30-9788-17-2029100000000000419810000000000000000000100000000000-2452-630-20-1485246-50-15059-11-30301000000000004113901000000000000000000-30661034-10-305012901000000000000000000-3054644-10-3230-10161001000000000000000000-64751452-30-4090151001000000000000000000-65151096-30-3690141001000000000000000000-6521752-30-363-6", + "description": "Test case 5 - MapJson", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload2c91e8d6-f917-4c82-96e4-9de0da3ddca710002024-11-08T22:01:11.319Z70RSUfalse0012834538023000205EA0094D3C71C12CA6CE5D527C02DC3458244800000400028CF6F61F62355F9101464B5AAE70C0A0A631B181A81428D6F27A48302829ADDE94A56050F35BD42952C09C4058340003009609920000010000A2128E4162EAD9980143CC566B6AF028798AF5EB7C050F11349EE19ADCEF4CCA050A35B9E29BE009CE0582C000300960A120000008000222DFE5B6303588D0143CB5AB683C0A0A058F2000080960A920000008000424D3E7162ECF8AF8143CC4C9F8D6028A16876F54814140B1D4000101101632000000014E83CC805050181D34405CC80000000546A74C01414061F5E101832000000015559DAE05050181CA8B06910000008000557F359801414BCCB40000A0A5F6BDEA8050533D307B6C0A1E27EA6FE0AFA9B073027D99945C26C04FB02C360002004B06D1000000800045E50A3E40505331437DAC0A0A6D098BF540143CBEE5BF780A0A67F5501A013ECCC9BA13C027D8161900010025822280000010401AC5437B1027D933B3360141495F5F840A0A62FEF8C581428B624E1CC0A142187100008C3C80008220400203AA400000000F926E6B066F00080F29000000003E45B0481CCC0C583EC800000100012F552960027D9500E77E04FB32AB0218809CE0D89092231E2000118E900011601B200000080002ABF4179027D9958E8EE004E20AE20254561A8000A02B0C40005022C0264000002000115B2C2BC04FB32ACF1F7809C4658F42A6813C4CAEB868F02761B281EA9E004DD364E2D53CC09C4058B40001009600B200000100008AF30177027D9967B06AA04E232A272BEC09E2652CE518813B0D953152C1026E9B2A82A47E04E202C5E0000804401DC8000000051E38FE013EC89FCCA027D84019C8000000052BB904013EC89A097027D84015C80000000538B109813EC0988B31004720000000151DC3EE04FB225C22C09F62C0A840000020000965B0781813D8D599C7FEF02789AB155007204F1356711FFBC09EC058EC0002009604C200000100002B336362809EC6A2FE40170139CD452D7FF502788163D0000802201B2400000002C80D40A027D8067C0020192400000002C825284027D905EC0004FB08085100000000C1AD65AC02788033C00201F4400000003068D912009E2011F0008075100000000C1A1E2F00278804ABF47A7C8195028280540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.20MessageFrame1820121122395806913-10508706921702536618210000000000000000000100000000000-21211567-3670797050-1195249910-1832414920-4313934710-4364951530-42729547-6061000000000006119210000000000000000000100000000000-17521601-2218491230-2662580730-2581556630-32557046-4489982920-44889976-5051000000000006120210000000000000000000010000000000-13131627-2022437830-1194257510300100000000001121210000000000000000000010000000000-8131649-2201444730-3289635840-1930375310290100000000001122301000000000000000000-191163610-12733323301000000000000000000212168810-12135024301000000000000000000684175110-1272982641000000000000000000010000000000020228161024540103503-172107472-293308019-633405115-104747310-101310000000000081274100000000000000000001000000000002370498104419-149108497-344303531-3410810652-104718316-10121000000000008117110000000000000000000001000001000-34231969-1023662010-26299310-2057449120-95121632014001000000000115001000000000216001000000000295010000000000000000003219-4053110305010000000000000000003211-10064096316100000000000000000000010000000002729-1696-107-1089-102736-6046-50393-95130001000000000129001000000000236100000000000000000000100000000001012-1671-102845-6288-60904-18991301000000000051120100000000005226100000000000000000001000000000001430-1698-102767-6178-603194-6835-302990-6513-405135-11024-705003-11021-60221000000000002116100000000000000000001000000000001840-1673-103318-7339-602599-5381-302407-5583-405425-11583-705441-11713-6023100000000000217701000000000000000000-1081-1540-10127-310-106701000000000000000000-649-1528-10104-361-105701000000000000000000-234-1517-1098-3334701000000000000000000238-1545-1092-373-1010810000000000000000000100000000000-2640-253-20-9828-17-30-1007057-30-9788-17-2029100000000000419810000000000000000000100000000000-2452-630-20-1485246-50-15059-11-30301000000000004113901000000000000000000-30661034-10-305012901000000000000000000-3054644-10-3230-10161001000000000000000000-64751452-30-4090151001000000000000000000-65151096-30-3690141001000000000000000000-6521752-30-363-6", "expected": { "metadata": { "logFileName": "", @@ -11451,8 +11221,8 @@ "revision": 2, "refPoint": { "latitude": 39.5806913, - "longitude": "-105.0870690", - "elevation": "1702.0" + "longitude": -105.0870692, + "elevation": 1702.5 }, "laneWidth": 366, "laneSet": { @@ -11505,84 +11275,82 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -2121, - "y": 1567 - } - } - }, - { - "delta": { - "nodeXY5": { - "x": -3670, - "y": 7970 - } - }, - "attributes": { - "dElevation": 50 - } - }, - { - "delta": { - "nodeXY4": { - "x": -1195, - "y": 2499 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY5": { - "x": -1832, - "y": 4149 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -4313, - "y": 9347 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -4364, - "y": 9515 - } - }, - "attributes": { - "dElevation": 30 - } - }, - { - "delta": { - "nodeXY6": { - "x": -4272, - "y": 9547 - } - }, - "attributes": { - "dElevation": -60 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2121, + "y": 1567 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -3670, + "y": 7970 + } + }, + "attributes": { + "dElevation": 50 + } + }, + { + "delta": { + "nodeXY4": { + "x": -1195, + "y": 2499 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -1832, + "y": 4149 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4313, + "y": 9347 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4364, + "y": 9515 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4272, + "y": 9547 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -11658,81 +11426,79 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1752, - "y": 1601 - } - } - }, - { - "delta": { - "nodeXY5": { - "x": -2218, - "y": 4912 - } - }, - "attributes": { - "dElevation": 30 - } - }, - { - "delta": { - "nodeXY5": { - "x": -2662, - "y": 5807 - } - }, - "attributes": { - "dElevation": 30 - } - }, - { - "delta": { - "nodeXY5": { - "x": -2581, - "y": 5566 - } - }, - "attributes": { - "dElevation": 30 - } - }, - { - "delta": { - "nodeXY5": { - "x": -3255, - "y": 7046 - } - } - }, - { - "delta": { - "nodeXY6": { - "x": -4489, - "y": 9829 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -4488, - "y": 9976 - } - }, - "attributes": { - "dElevation": -50 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1752, + "y": 1601 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -2218, + "y": 4912 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2662, + "y": 5807 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2581, + "y": 5566 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -3255, + "y": 7046 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -4489, + "y": 9829 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4488, + "y": 9976 + } + }, + "attributes": { + "dElevation": -50 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -11808,40 +11574,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1313, - "y": 1627 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1313, + "y": 1627 } - }, - { - "delta": { - "nodeXY5": { - "x": -2022, - "y": 4378 - } - }, - "attributes": { - "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2022, + "y": 4378 } }, - { - "delta": { - "nodeXY4": { - "x": -1194, - "y": 2575 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY4": { + "x": -1194, + "y": 2575 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -11917,51 +11681,49 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -813, - "y": 1649 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -813, + "y": 1649 } - }, - { - "delta": { - "nodeXY5": { - "x": -2201, - "y": 4447 - } - }, - "attributes": { - "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2201, + "y": 4447 } }, - { - "delta": { - "nodeXY5": { - "x": -3289, - "y": 6358 - } - }, - "attributes": { - "dElevation": 40 + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -3289, + "y": 6358 } }, - { - "delta": { - "nodeXY4": { - "x": -1930, - "y": 3753 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 40 + } + }, + { + "delta": { + "nodeXY4": { + "x": -1930, + "y": 3753 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -12023,29 +11785,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -191, - "y": 1636 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -191, + "y": 1636 } }, - { - "delta": { - "nodeXY1": { - "x": -127, - "y": 333 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -127, + "y": 333 } } - ] - } + } + ] } }, { @@ -12082,29 +11842,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 212, - "y": 1688 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 212, + "y": 1688 } }, - { - "delta": { - "nodeXY1": { - "x": -121, - "y": 350 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -121, + "y": 350 } } - ] - } + } + ] } }, { @@ -12141,29 +11899,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 684, - "y": 1751 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 684, + "y": 1751 } }, - { - "delta": { - "nodeXY1": { - "x": -127, - "y": 298 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -127, + "y": 298 } } - ] - } + } + ] } }, { @@ -12214,84 +11970,82 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 2022, - "y": 816 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY4": { - "x": 2454, - "y": 0 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY4": { - "x": 3503, - "y": -172 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 7472, - "y": -293 - } - }, - "attributes": { - "dElevation": 30 - } - }, - { - "delta": { - "nodeXY5": { - "x": 8019, - "y": -63 - } - } - }, - { - "delta": { - "nodeXY4": { - "x": 3405, - "y": 115 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 4747, - "y": 310 - } - }, - "attributes": { - "dElevation": -10 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 2022, + "y": 816 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 2454, + "y": 0 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 3503, + "y": -172 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 7472, + "y": -293 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": 8019, + "y": -63 + } + } + }, + { + "delta": { + "nodeXY4": { + "x": 3405, + "y": 115 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 4747, + "y": 310 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -12367,76 +12121,74 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": 2370, - "y": 498 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 4419, - "y": -149 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 8497, - "y": -344 - } - }, - "attributes": { - "dElevation": 30 - } - }, - { - "delta": { - "nodeXY4": { - "x": 3531, - "y": -34 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 8106, - "y": 52 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 4718, - "y": 316 - } - }, - "attributes": { - "dElevation": -10 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 2370, + "y": 498 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 4419, + "y": -149 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 8497, + "y": -344 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY4": { + "x": 3531, + "y": -34 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 8106, + "y": 52 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 4718, + "y": 316 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -12512,65 +12264,63 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -3423, - "y": 1969 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY2": { - "x": 236, - "y": 620 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY2": { - "x": -262, - "y": 993 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY5": { - "x": -2057, - "y": 4491 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY4": { - "x": -951, - "y": 2163 - } - }, - "attributes": { - "dElevation": 20 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -3423, + "y": 1969 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY2": { + "x": 236, + "y": 620 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY2": { + "x": -262, + "y": 993 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2057, + "y": 4491 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY4": { + "x": -951, + "y": 2163 + } + }, + "attributes": { + "dElevation": 20 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -12670,26 +12420,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": 3219, - "y": -405 - } + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 3219, + "y": -405 } - }, - { - "delta": { - "nodeXY1": { - "x": 311, - "y": 0 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 311, + "y": 0 } } - ] - } + } + ] } }, { @@ -12726,26 +12474,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": 3211, - "y": -1006 - } + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 3211, + "y": -1006 } - }, - { - "delta": { - "nodeXY1": { - "x": 409, - "y": 6 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 409, + "y": 6 } } - ] - } + } + ] } }, { @@ -12796,51 +12542,49 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": 2729, - "y": -1696 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 2729, + "y": -1696 } }, - { - "delta": { - "nodeXY3": { - "x": 7, - "y": -1089 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY3": { + "x": 7, + "y": -1089 } }, - { - "delta": { - "nodeXY5": { - "x": 2736, - "y": -6046 - } - }, - "attributes": { - "dElevation": -50 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2736, + "y": -6046 } }, - { - "delta": { - "nodeXY2": { - "x": 393, - "y": -951 - } + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY2": { + "x": 393, + "y": -951 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -12935,40 +12679,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1012, - "y": -1671 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1012, + "y": -1671 } }, - { - "delta": { - "nodeXY5": { - "x": 2845, - "y": -6288 - } - }, - "attributes": { - "dElevation": -60 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2845, + "y": -6288 } }, - { - "delta": { - "nodeXY3": { - "x": 904, - "y": -1899 - } + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY3": { + "x": 904, + "y": -1899 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -13065,76 +12807,74 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1430, - "y": -1698 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 2767, - "y": -6178 - } - }, - "attributes": { - "dElevation": -60 - } - }, - { - "delta": { - "nodeXY5": { - "x": 3194, - "y": -6835 - } - }, - "attributes": { - "dElevation": -30 - } - }, - { - "delta": { - "nodeXY5": { - "x": 2990, - "y": -6513 - } - }, - "attributes": { - "dElevation": -40 - } - }, - { - "delta": { - "nodeXY6": { - "x": 5135, - "y": -11024 - } - }, - "attributes": { - "dElevation": -70 - } - }, - { - "delta": { - "nodeXY6": { - "x": 5003, - "y": -11021 - } - }, - "attributes": { - "dElevation": -60 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1430, + "y": -1698 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2767, + "y": -6178 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY5": { + "x": 3194, + "y": -6835 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2990, + "y": -6513 + } + }, + "attributes": { + "dElevation": -40 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5135, + "y": -11024 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5003, + "y": -11021 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -13210,76 +12950,74 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1840, - "y": -1673 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 3318, - "y": -7339 - } - }, - "attributes": { - "dElevation": -60 - } - }, - { - "delta": { - "nodeXY5": { - "x": 2599, - "y": -5381 - } - }, - "attributes": { - "dElevation": -30 - } - }, - { - "delta": { - "nodeXY5": { - "x": 2407, - "y": -5583 - } - }, - "attributes": { - "dElevation": -40 - } - }, - { - "delta": { - "nodeXY6": { - "x": 5425, - "y": -11583 - } - }, - "attributes": { - "dElevation": -70 - } - }, - { - "delta": { - "nodeXY6": { - "x": 5441, - "y": -11713 - } - }, - "attributes": { - "dElevation": -60 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1840, + "y": -1673 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 3318, + "y": -7339 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2599, + "y": -5381 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2407, + "y": -5583 + } + }, + "attributes": { + "dElevation": -40 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5425, + "y": -11583 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5441, + "y": -11713 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -13341,32 +13079,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1081, - "y": -1540 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1081, + "y": -1540 } }, - { - "delta": { - "nodeXY1": { - "x": 127, - "y": -310 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 127, + "y": -310 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] } }, { @@ -13403,32 +13139,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -649, - "y": -1528 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -649, + "y": -1528 } }, - { - "delta": { - "nodeXY1": { - "x": 104, - "y": -361 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 104, + "y": -361 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] } }, { @@ -13465,29 +13199,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -234, - "y": -1517 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -234, + "y": -1517 } }, - { - "delta": { - "nodeXY1": { - "x": 98, - "y": -333 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 98, + "y": -333 } } - ] - } + } + ] } }, { @@ -13524,32 +13256,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 238, - "y": -1545 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 238, + "y": -1545 } }, - { - "delta": { - "nodeXY1": { - "x": 92, - "y": -373 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 92, + "y": -373 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] } }, { @@ -13600,54 +13330,52 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -2640, - "y": -253 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2640, + "y": -253 } }, - { - "delta": { - "nodeXY6": { - "x": -9828, - "y": -17 - } - }, - "attributes": { - "dElevation": -30 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9828, + "y": -17 } }, - { - "delta": { - "nodeXY6": { - "x": -10070, - "y": 57 - } - }, - "attributes": { - "dElevation": -30 + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -10070, + "y": 57 } }, - { - "delta": { - "nodeXY6": { - "x": -9788, - "y": -17 - } - }, - "attributes": { - "dElevation": -20 + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9788, + "y": -17 } + }, + "attributes": { + "dElevation": -20 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -13723,43 +13451,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -2452, - "y": -630 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2452, + "y": -630 } }, - { - "delta": { - "nodeXY6": { - "x": -14852, - "y": 46 - } - }, - "attributes": { - "dElevation": -50 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -14852, + "y": 46 } }, - { - "delta": { - "nodeXY6": { - "x": -15059, - "y": -11 - } - }, - "attributes": { - "dElevation": -30 + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY6": { + "x": -15059, + "y": -11 } + }, + "attributes": { + "dElevation": -30 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -13821,29 +13547,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -3066, - "y": 1034 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -3066, + "y": 1034 } }, - { - "delta": { - "nodeXY1": { - "x": -305, - "y": 0 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -305, + "y": 0 } } - ] - } + } + ] } }, { @@ -13880,32 +13604,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -3054, - "y": 644 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -3054, + "y": 644 } }, - { - "delta": { - "nodeXY1": { - "x": -323, - "y": 0 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -323, + "y": 0 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] } }, { @@ -13942,29 +13664,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY5": { - "x": -6475, - "y": 1452 - } - }, - "attributes": { - "dElevation": -30 + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -6475, + "y": 1452 } }, - { - "delta": { - "nodeXY1": { - "x": -409, - "y": 0 - } + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY1": { + "x": -409, + "y": 0 } } - ] - } + } + ] } }, { @@ -14001,29 +13721,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY5": { - "x": -6515, - "y": 1096 - } - }, - "attributes": { - "dElevation": -30 + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -6515, + "y": 1096 } }, - { - "delta": { - "nodeXY1": { - "x": -369, - "y": 0 - } + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY1": { + "x": -369, + "y": 0 } } - ] - } + } + ] } }, { @@ -14060,29 +13778,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY5": { - "x": -6521, - "y": 752 - } - }, - "attributes": { - "dElevation": -30 + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -6521, + "y": 752 } }, - { - "delta": { - "nodeXY1": { - "x": -363, - "y": -6 - } + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY1": { + "x": -363, + "y": -6 } } - ] - } + } + ] } } ] diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapTxPojo.json b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapTxPojo.json index 73ea4019f..e2e47cf4c 100644 --- a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapTxPojo.json +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapTxPojo.json @@ -2,7 +2,7 @@ "cases": [ { "description": "Test Case 1 - MapTxPojo", - "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload85100a89-9411-4bc3-828c-9c398aa829a510002024-11-08T21:38:24.144Z70RSUfalse001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.30MessageFrame182088022395948212-104883094617440366229100000000000000000001110000000001355-188010795-292610167-231820-167-191010-1428-79862060100000000008111100000000000819001000000000239100000000000000000000100000000001004-1955544-176510311-185320121-154910-173-187610-1008-554220-697-3586-1050100000000003124910000000000000000000010000000000624-2010795-286820207-218020-305-265620-1590-8364401000000000031218100000000000000000000010000000002522-186210-380-981518-29262035-137110-161-201910-677-342610200010000000001281010000000000000000000001000000000-1676-310220-1797608-10-4401-356-30-9504-2310-723839-2171-6260010000000001271010000000000000000000001000000000-1517-282410-1411614250010000000001251101000000000000000000-6816-1069110-196161261101000000000000000000-6597-1038710-2071663110000000000000000000100000000000-664-799-3525-586-10-2446-225-2350-138-10-8407-1810-85131717100000000000211110000000000000000000100000000000-531-1503-2310-41910-3646-430-20-10414-14310-990910-1019100000000000212110000000000000000000100000000000-683-1177-3456-562-2411-259-10-10834-138-9372391810000000000021176010000000000000000001538-29625363186010000000000000000001619-66926592196010000000000000000001757-105925380108201000000000000000000-22691625-20-311-577201000000000000000000-22001293-20-334-636201000000000000000000-2108914-20-369-575201000000000000000000-2056564-20-363-694201000000000000000000-1975197-20-374-809310000000000000000000001000000000-17102641-20-4152042-28251680010000000004170010000000004210310000000000000000000001000000000-13652715-10-4842065-10-15052860010000000004211401000000000000000000-5872813-10-69235125100000000000000000001010000000005202310-103064643584088910358335633292071081000000000006111001000000000135100000000000000000001000000000005951960-104642895495371110611751610710000000000061145100000000000000000001000000000006641620-10359467735775741024273092387246244217212108010610000000000061155100000000000000000001000000000007321263-1059211073103617476242224036312511051000000000006116510000000000000000000100000000000800894358368347357233617384362524910410000000000061207010000000000000000008335-2221024223", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload85100a89-9411-4bc3-828c-9c398aa829a510002024-11-08T21:38:24.144Z70RSUfalse001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.30MessageFrame182088022395948212-104883094617442366229100000000000000000001110000000001355-188010795-292610167-231820-167-191010-1428-79862060100000000008111100000000000819001000000000239100000000000000000000100000000001004-1955544-176510311-185320121-154910-173-187610-1008-554220-697-3586-1050100000000003124910000000000000000000010000000000624-2010795-286820207-218020-305-265620-1590-8364401000000000031218100000000000000000000010000000002522-186210-380-981518-29262035-137110-161-201910-677-342610200010000000001281010000000000000000000001000000000-1676-310220-1797608-10-4401-356-30-9504-2310-723839-2171-6260010000000001271010000000000000000000001000000000-1517-282410-1411614250010000000001251101000000000000000000-6816-1069110-196161261101000000000000000000-6597-1038710-2071663110000000000000000000100000000000-664-799-3525-586-10-2446-225-2350-138-10-8407-1810-85131717100000000000211110000000000000000000100000000000-531-1503-2310-41910-3646-430-20-10414-14310-990910-1019100000000000212110000000000000000000100000000000-683-1177-3456-562-2411-259-10-10834-138-9372391810000000000021176010000000000000000001538-29625363186010000000000000000001619-66926592196010000000000000000001757-105925380108201000000000000000000-22691625-20-311-577201000000000000000000-22001293-20-334-636201000000000000000000-2108914-20-369-575201000000000000000000-2056564-20-363-694201000000000000000000-1975197-20-374-809310000000000000000000001000000000-17102641-20-4152042-28251680010000000004170010000000004210310000000000000000000001000000000-13652715-10-4842065-10-15052860010000000004211401000000000000000000-5872813-10-69235125100000000000000000001010000000005202310-103064643584088910358335633292071081000000000006111001000000000135100000000000000000001000000000005951960-104642895495371110611751610710000000000061145100000000000000000001000000000006641620-10359467735775741024273092387246244217212108010610000000000061155100000000000000000001000000000007321263-1059211073103617476242224036312511051000000000006116510000000000000000000100000000000800894358368347357233617384362524910410000000000061207010000000000000000008335-2221024223", "expected": { "metadata": { "logFileName": "", @@ -46,7 +46,7 @@ "refPoint": { "latitude": 39.5948212, "longitude": -104.8830946, - "elevation": "1744.0" + "elevation": 1744.2 }, "laneWidth": 366, "laneSet": { @@ -99,65 +99,63 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1355, - "y": -1880 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 795, - "y": -2926 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 167, - "y": -2318 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -167, - "y": -1910 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -1428, - "y": -7986 - } - }, - "attributes": { - "dElevation": 20 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1355, + "y": -1880 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 795, + "y": -2926 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 167, + "y": -2318 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -167, + "y": -1910 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1428, + "y": -7986 + } + }, + "attributes": { + "dElevation": 20 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -272,84 +270,82 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1004, - "y": -1955 - } - } - }, - { - "delta": { - "nodeXY6": { - "x": 544, - "y": -1765 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 311, - "y": -1853 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": 121, - "y": -1549 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -173, - "y": -1876 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -1008, - "y": -5542 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -697, - "y": -3586 - } - }, - "attributes": { - "dElevation": -10 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1004, + "y": -1955 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 544, + "y": -1765 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 311, + "y": -1853 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 121, + "y": -1549 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -173, + "y": -1876 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1008, + "y": -5542 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -697, + "y": -3586 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -425,59 +421,57 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 624, - "y": -2010 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 624, + "y": -2010 } - }, - { - "delta": { - "nodeXY6": { - "x": 795, - "y": -2868 - } - }, - "attributes": { - "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 795, + "y": -2868 } }, - { - "delta": { - "nodeXY6": { - "x": 207, - "y": -2180 - } - }, - "attributes": { - "dElevation": 20 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 207, + "y": -2180 } }, - { - "delta": { - "nodeXY6": { - "x": -305, - "y": -2656 - } - }, - "attributes": { - "dElevation": 20 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -305, + "y": -2656 } }, - { - "delta": { - "nodeXY6": { - "x": -1590, - "y": -8364 - } + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1590, + "y": -8364 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -553,73 +547,71 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2522, - "y": -1862 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -380, - "y": -981 - } - } - }, - { - "delta": { - "nodeXY6": { - "x": 518, - "y": -2926 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": 35, - "y": -1371 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -161, - "y": -2019 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -677, - "y": -3426 - } - }, - "attributes": { - "dElevation": 10 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2522, + "y": -1862 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -380, + "y": -981 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 518, + "y": -2926 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 35, + "y": -1371 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -161, + "y": -2019 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -677, + "y": -3426 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -694,70 +686,68 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1676, - "y": -3102 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1676, + "y": -3102 } }, - { - "delta": { - "nodeXY6": { - "x": -1797, - "y": 608 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1797, + "y": 608 } }, - { - "delta": { - "nodeXY6": { - "x": -4401, - "y": -356 - } - }, - "attributes": { - "dElevation": -30 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4401, + "y": -356 } }, - { - "delta": { - "nodeXY6": { - "x": -9504, - "y": -23 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9504, + "y": -23 } }, - { - "delta": { - "nodeXY6": { - "x": -7238, - "y": 39 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -7238, + "y": 39 } - }, - { - "delta": { - "nodeXY6": { - "x": -2171, - "y": -6 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -2171, + "y": -6 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -832,29 +822,27 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1517, - "y": -2824 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1517, + "y": -2824 } }, - { - "delta": { - "nodeXY6": { - "x": -1411, - "y": 614 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1411, + "y": 614 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -915,29 +903,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -6816, - "y": -10691 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -6816, + "y": -10691 } }, - { - "delta": { - "nodeXY6": { - "x": -196, - "y": 161 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -196, + "y": 161 } } - ] - } + } + ] } }, { @@ -974,29 +960,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -6597, - "y": -10387 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -6597, + "y": -10387 } }, - { - "delta": { - "nodeXY6": { - "x": -207, - "y": 166 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -207, + "y": 166 } } - ] - } + } + ] } }, { @@ -1047,67 +1031,65 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -664, - "y": -799 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -664, + "y": -799 } - }, - { - "delta": { - "nodeXY6": { - "x": -3525, - "y": -586 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -3525, + "y": -586 } }, - { - "delta": { - "nodeXY6": { - "x": -2446, - "y": -225 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2446, + "y": -225 } - }, - { - "delta": { - "nodeXY6": { - "x": -2350, - "y": -138 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2350, + "y": -138 } }, - { - "delta": { - "nodeXY6": { - "x": -8407, - "y": -18 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -8407, + "y": -18 } }, - { - "delta": { - "nodeXY6": { - "x": -8513, - "y": 17 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -8513, + "y": 17 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -1183,62 +1165,60 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -531, - "y": -1503 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -531, + "y": -1503 } - }, - { - "delta": { - "nodeXY6": { - "x": -2310, - "y": -419 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2310, + "y": -419 } }, - { - "delta": { - "nodeXY6": { - "x": -3646, - "y": -430 - } - }, - "attributes": { - "dElevation": -20 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -3646, + "y": -430 } }, - { - "delta": { - "nodeXY6": { - "x": -10414, - "y": -143 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -10414, + "y": -143 } }, - { - "delta": { - "nodeXY6": { - "x": -9909, - "y": 10 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9909, + "y": 10 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -1314,53 +1294,51 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -683, - "y": -1177 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -683, + "y": -1177 } - }, - { - "delta": { - "nodeXY6": { - "x": -3456, - "y": -562 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -3456, + "y": -562 } - }, - { - "delta": { - "nodeXY6": { - "x": -2411, - "y": -259 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2411, + "y": -259 } }, - { - "delta": { - "nodeXY6": { - "x": -10834, - "y": -138 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -10834, + "y": -138 } - }, - { - "delta": { - "nodeXY6": { - "x": -9372, - "y": 39 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -9372, + "y": 39 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -1422,26 +1400,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1538, - "y": -296 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1538, + "y": -296 } - }, - { - "delta": { - "nodeXY6": { - "x": 253, - "y": 63 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 253, + "y": 63 } } - ] - } + } + ] } }, { @@ -1478,26 +1454,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1619, - "y": -669 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1619, + "y": -669 } - }, - { - "delta": { - "nodeXY6": { - "x": 265, - "y": 92 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 265, + "y": 92 } } - ] - } + } + ] } }, { @@ -1534,29 +1508,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1757, - "y": -1059 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1757, + "y": -1059 } - }, - { - "delta": { - "nodeXY6": { - "x": 253, - "y": 80 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 253, + "y": 80 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] } }, { @@ -1593,29 +1565,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2269, - "y": 1625 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2269, + "y": 1625 } }, - { - "delta": { - "nodeXY6": { - "x": -311, - "y": -57 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -311, + "y": -57 } } - ] - } + } + ] } }, { @@ -1652,29 +1622,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2200, - "y": 1293 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2200, + "y": 1293 } }, - { - "delta": { - "nodeXY6": { - "x": -334, - "y": -63 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -334, + "y": -63 } } - ] - } + } + ] } }, { @@ -1711,29 +1679,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2108, - "y": 914 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2108, + "y": 914 } }, - { - "delta": { - "nodeXY6": { - "x": -369, - "y": -57 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -369, + "y": -57 } } - ] - } + } + ] } }, { @@ -1770,29 +1736,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2056, - "y": 564 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2056, + "y": 564 } }, - { - "delta": { - "nodeXY6": { - "x": -363, - "y": -69 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -363, + "y": -69 } } - ] - } + } + ] } }, { @@ -1829,29 +1793,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1975, - "y": 197 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1975, + "y": 197 } }, - { - "delta": { - "nodeXY6": { - "x": -374, - "y": -80 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -374, + "y": -80 } } - ] - } + } + ] } }, { @@ -1902,37 +1864,35 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1710, - "y": 2641 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1710, + "y": 2641 } }, - { - "delta": { - "nodeXY6": { - "x": -415, - "y": 2042 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -415, + "y": 2042 } - }, - { - "delta": { - "nodeXY6": { - "x": -282, - "y": 516 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -282, + "y": 516 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2029,40 +1989,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1365, - "y": 2715 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1365, + "y": 2715 } }, - { - "delta": { - "nodeXY6": { - "x": -484, - "y": 2065 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -484, + "y": 2065 } }, - { - "delta": { - "nodeXY6": { - "x": -150, - "y": 528 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -150, + "y": 528 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2124,29 +2082,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -587, - "y": 2813 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -587, + "y": 2813 } }, - { - "delta": { - "nodeXY6": { - "x": -69, - "y": 235 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -69, + "y": 235 } } - ] - } + } + ] } }, { @@ -2197,59 +2153,57 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 520, - "y": 2310 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 520, + "y": 2310 } }, - { - "delta": { - "nodeXY6": { - "x": 3064, - "y": 643 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3064, + "y": 643 } - }, - { - "delta": { - "nodeXY6": { - "x": 5840, - "y": 889 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5840, + "y": 889 } }, - { - "delta": { - "nodeXY6": { - "x": 3583, - "y": 356 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3583, + "y": 356 } - }, - { - "delta": { - "nodeXY6": { - "x": 3329, - "y": 207 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3329, + "y": 207 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2344,51 +2298,49 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 595, - "y": 1960 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 595, + "y": 1960 } }, - { - "delta": { - "nodeXY6": { - "x": 4642, - "y": 895 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 4642, + "y": 895 } - }, - { - "delta": { - "nodeXY6": { - "x": 4953, - "y": 711 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 4953, + "y": 711 } }, - { - "delta": { - "nodeXY6": { - "x": 6117, - "y": 516 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 6117, + "y": 516 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2464,75 +2416,73 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 664, - "y": 1620 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 664, + "y": 1620 } }, - { - "delta": { - "nodeXY6": { - "x": 3594, - "y": 677 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3594, + "y": 677 } - }, - { - "delta": { - "nodeXY6": { - "x": 3577, - "y": 574 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3577, + "y": 574 } }, - { - "delta": { - "nodeXY6": { - "x": 2427, - "y": 309 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 2427, + "y": 309 } - }, - { - "delta": { - "nodeXY6": { - "x": 2387, - "y": 246 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 2387, + "y": 246 } - }, - { - "delta": { - "nodeXY6": { - "x": 2442, - "y": 172 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 2442, + "y": 172 } - }, - { - "delta": { - "nodeXY6": { - "x": 1210, - "y": 80 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 1210, + "y": 80 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2608,59 +2558,57 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 732, - "y": 1263 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 732, + "y": 1263 } }, - { - "delta": { - "nodeXY6": { - "x": 5921, - "y": 1073 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5921, + "y": 1073 } }, - { - "delta": { - "nodeXY6": { - "x": 3617, - "y": 476 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3617, + "y": 476 } - }, - { - "delta": { - "nodeXY6": { - "x": 2422, - "y": 240 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 2422, + "y": 240 } - }, - { - "delta": { - "nodeXY6": { - "x": 3631, - "y": 251 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3631, + "y": 251 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2736,53 +2684,51 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 800, - "y": 894 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 800, + "y": 894 } - }, - { - "delta": { - "nodeXY6": { - "x": 3583, - "y": 683 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3583, + "y": 683 } - }, - { - "delta": { - "nodeXY6": { - "x": 4735, - "y": 723 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 4735, + "y": 723 } - }, - { - "delta": { - "nodeXY6": { - "x": 3617, - "y": 384 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3617, + "y": 384 } - }, - { - "delta": { - "nodeXY6": { - "x": 3625, - "y": 249 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3625, + "y": 249 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -2844,29 +2790,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 8335, - "y": -222 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 8335, + "y": -222 } }, - { - "delta": { - "nodeXY6": { - "x": 242, - "y": 23 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 242, + "y": 23 } } - ] - } + } + ] } } ] @@ -2881,7 +2825,7 @@ }, { "description": "Test Case 2 - MapTxPojo", - "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadffadc418-5fcd-43b7-b931-024edc375fae10002024-11-08T22:00:01.224Z70RSUfalse001283DA380330002044CA0D4D3EA2D42CC86AFB534E02DC3E5820A80000040000961C7612C5BB250FFDE04DD37663DFFA409D80583C0003009608AA000001000025872783416EC83BFEC81374DD9A67FFA02760160D0000C025824A80000040000961CBE0715BB2AB001004DD3765B5FFD009D80582C0003009609AA00000080000D8A308047027D9B520F000004E202C790000404B0515000000400006C5123F70013ECDA5E1800602710163A8000202581EA80000010000361C5E17DC0A0A6DF8040130134C230E2400118690001080AB100000000D877C7CB4027D8B039AFFF4202CC40000000361DF1ED2C09EC2C0EC3FFD080BB100000000D875379C5027B0B03F70000203B04000000035F791D70C09EC2C003BF72880F4100000000D7C8875B5027B0B0000FDCA203F04000000035EBB1D60C09EC2C003BF8416100A00000040000D77D77844027D9AA845002C052308C7C9000463C40004580228000004000095DFB9E6C9A509AFFA80546349C75FFC80A46058BC00010096010A00000100002578077AD8693C9C00E8152CD27B7802E028F0162D00004025806280000040000B5E049F1E00A0A693B8C00181518D28018012028F0162B00004025808280000020000B5DA09FE540A0A6ACB53FFA81450D772E7DD402828561AA000A02B0E400050210052200000001AF0DB0352050A15FBC6000040188800000006BC42418C0142857ED47FFA10072200000001AF1150904050A15FB9A000040208800000006BC4AC2F00142857EE080002C0A3400000200019AFB5D1346050A35FFA6177C0A0A2BFE64464B5FD921F600A0A6BF14443981428D7CF6891302851AF5E11142050A35EED218340A0A058EC00020096049A0000004000ED7C1B896902851AFFE90DCE050535FE5E2E3C0A0A6BFB3C26781414D7E5C883402829AF9911096050A35F57A14CC0A142BE86C25D35F2F610940A0A218412000AC7A000100C60E40004581668000002000135FB8226D80A146BFF1C7C401414D7F3C878202829AFB531352050A02C590001C04B030D000000400036C00BC4E681428D801789A302828AFF8D0F76D7F0E877C02829AFC950CA4050502C554001C0440350800000006C0DD44F88142858000814D100E4200000001B06A713CA050536000205480A0A2C197400000200001B079CED3004F135FF1113200A3205874000400960D3A00000100000D8234765D027B1AFFF08A14051402C360002004B06DD000000400006C0653B22013D8D800A4518028A0160C80006025838E8000002000035FDB1D84C09EC6C003BA14814140B0540003012C187400000080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800RSU10.11.81.33MessageFrame183088053395950548-104866790817230366165100000000000000000001000000000001821120122824-17-7022927-23-4071000000000006117510000000000000000000100000000000183183322791-39-7022950-6-40610000000000061185100000000000000000001000000000001839453228698-7022893-12-4051000000000006119510000000000000000000010000000000260871-10105030-603001000000000011205100000000000000000000100000000002596-288-1096976-6029010000000000111551000000000000000000000100000000018151527101612838-90140010010000001130010000000002216010000000000000000001916-844-10461-6226010000000000000000001916-1205-20472-6236010000000000000000001875-1595-20507029801000000000000000000-540-2621-207-28330801000000000000000000-888-2635-200-28331801000000000000000000-1300-2685-207-24832110000000000000000000001000000000-2089-1980-10-1123022703100100100000013000100000000021110000000000000000000100000000000-2066-1614-22451-44140-22755-147023100000000000212110000000000000000000100000000000-2041-1320-2263729150-22601466022100000000000213110000000000000000000100000000000-2030-90410-226713140-22527186021100000000000214110000000000000000000010000000000-2430-10710-9878-1140-2258-55610130101000000005114010000000000525201000000000000000000-193942520-27106201000000000000000000-191679220-300-67201000000000000000000-1910115420-28208201000000000000000000-1899150420-288010310000000000000000000100000000000-594246720-23150310-522249-156200810-472216320-778232320-1296220920-110015491029100000000000419310000000000000000000001000000000-997240920-12176710-105295910-153123110-420210010-824212320-674133120-7551210-8351061108001001000000130100000000000437001000000000211310000000000000000000010000000000-288248620-29397610-196192210-5992473202201000000000071123100000000000000000000100000000002325092023246710-581979-242191610-43816181021010100000000711340100000000000000000044225452003331440100000000000000000085125331003381025710000000000000000000100000000000974-2408-30-60-1516050141000000000008126710000000000000000000100000000000564-2467-20-8-1509440131000000000008127710000000000000000000010000000000202-2492-2010-150804060100000000003128710000000000000000000010000000000-148-2541-207-303110501000000000031247100000000000000000000010000000002555-2340-30-357-252-438-459-288-562-177-601-13-903030250010000000001", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadcfc309e0-bcf6-4834-9178-4600d4998b3710002024-11-08T22:01:11.230Z70RSUfalse001283DA380330002044CA0D4D3EA2D42CC86AFB534E02DC3E5820A80000040000961C7612C5BB250FFDE04DD37663DFFA409D80583C0003009608AA000001000025872783416EC83BFEC81374DD9A67FFA02760160D0000C025824A80000040000961CBE0715BB2AB001004DD3765B5FFD009D80582C0003009609AA00000080000D8A308047027D9B520F000004E202C790000404B0515000000400006C5123F70013ECDA5E1800602710163A8000202581EA80000010000361C5E17DC0A0A6DF8040130134C230E2400118690001080AB100000000D877C7CB4027D8B039AFFF4202CC40000000361DF1ED2C09EC2C0EC3FFD080BB100000000D875379C5027B0B03F70000203B04000000035F791D70C09EC2C003BF72880F4100000000D7C8875B5027B0B0000FDCA203F04000000035EBB1D60C09EC2C003BF8416100A00000040000D77D77844027D9AA845002C052308C7C9000463C40004580228000004000095DFB9E6C9A509AFFA80546349C75FFC80A46058BC00010096010A00000100002578077AD8693C9C00E8152CD27B7802E028F0162D00004025806280000040000B5E049F1E00A0A693B8C00181518D28018012028F0162B00004025808280000020000B5DA09FE540A0A6ACB53FFA81450D772E7DD402828561AA000A02B0E400050210052200000001AF0DB0352050A15FBC6000040188800000006BC42418C0142857ED47FFA10072200000001AF1150904050A15FB9A000040208800000006BC4AC2F00142857EE080002C0A3400000200019AFB5D1346050A35FFA6177C0A0A2BFE64464B5FD921F600A0A6BF14443981428D7CF6891302851AF5E11142050A35EED218340A0A058EC00020096049A0000004000ED7C1B896902851AFFE90DCE050535FE5E2E3C0A0A6BFB3C26781414D7E5C883402829AF9911096050A35F57A14CC0A142BE86C25D35F2F610940A0A218412000AC7A000100C60E40004581668000002000135FB8226D80A146BFF1C7C401414D7F3C878202829AFB531352050A02C590001C04B030D000000400036C00BC4E681428D801789A302828AFF8D0F76D7F0E877C02829AFC950CA4050502C554001C0440350800000006C0DD44F88142858000814D100E4200000001B06A713CA050536000205480A0A2C197400000200001B079CED3004F135FF1113200A3205874000400960D3A00000100000D8234765D027B1AFFF08A14051402C360002004B06DD000000400006C0653B22013D8D800A4518028A0160C80006025838E8000002000035FDB1D84C09EC6C003BA14814140B0540003012C187400000080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800RSU10.11.81.33MessageFrame183088053395950548-104866790817232366165100000000000000000001000000000001821120122824-17-7022927-23-4071000000000006117510000000000000000000100000000000183183322791-39-7022950-6-40610000000000061185100000000000000000001000000000001839453228698-7022893-12-4051000000000006119510000000000000000000010000000000260871-10105030-603001000000000011205100000000000000000000100000000002596-288-1096976-6029010000000000111551000000000000000000000100000000018151527101612838-90140010010000001130010000000002216010000000000000000001916-844-10461-6226010000000000000000001916-1205-20472-6236010000000000000000001875-1595-20507029801000000000000000000-540-2621-207-28330801000000000000000000-888-2635-200-28331801000000000000000000-1300-2685-207-24832110000000000000000000001000000000-2089-1980-10-1123022703100100100000013000100000000021110000000000000000000100000000000-2066-1614-22451-44140-22755-147023100000000000212110000000000000000000100000000000-2041-1320-2263729150-22601466022100000000000213110000000000000000000100000000000-2030-90410-226713140-22527186021100000000000214110000000000000000000010000000000-2430-10710-9878-1140-2258-55610130101000000005114010000000000525201000000000000000000-193942520-27106201000000000000000000-191679220-300-67201000000000000000000-1910115420-28208201000000000000000000-1899150420-288010310000000000000000000100000000000-594246720-23150310-522249-156200810-472216320-778232320-1296220920-110015491029100000000000419310000000000000000000001000000000-997240920-12176710-105295910-153123110-420210010-824212320-674133120-7551210-8351061108001001000000130100000000000437001000000000211310000000000000000000010000000000-288248620-29397610-196192210-5992473202201000000000071123100000000000000000000100000000002325092023246710-581979-242191610-43816181021010100000000711340100000000000000000044225452003331440100000000000000000085125331003381025710000000000000000000100000000000974-2408-30-60-1516050141000000000008126710000000000000000000100000000000564-2467-20-8-1509440131000000000008127710000000000000000000010000000000202-2492-2010-150804060100000000003128710000000000000000000010000000000-148-2541-207-303110501000000000031247100000000000000000000010000000002555-2340-30-357-252-438-459-288-562-177-601-13-903030250010000000001", "expected": { "metadata": { "logFileName": "", @@ -2892,13 +2836,13 @@ }, "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", "serialId": { - "streamId": "ffadc418-5fcd-43b7-b931-024edc375fae", + "streamId": "cfc309e0-bcf6-4834-9178-4600d4998b37", "bundleSize": 1, "bundleId": 0, "recordId": 0, "serialNumber": 0 }, - "odeReceivedAt": "2024-11-08T22:00:01.224Z", + "odeReceivedAt": "2024-11-08T22:01:11.230Z", "schemaVersion": 7, "maxDurationTime": 0, "recordGeneratedAt": "", @@ -2925,7 +2869,7 @@ "refPoint": { "latitude": 39.5950548, "longitude": -104.8667908, - "elevation": "1723.0" + "elevation": 1723.2 }, "laneWidth": 366, "laneSet": { @@ -2978,40 +2922,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1821, - "y": 1201 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1821, + "y": 1201 } - }, - { - "delta": { - "nodeXY6": { - "x": 22824, - "y": -17 - } - }, - "attributes": { - "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22824, + "y": -17 } }, - { - "delta": { - "nodeXY6": { - "x": 22927, - "y": -23 - } - }, - "attributes": { - "dElevation": -40 + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22927, + "y": -23 } + }, + "attributes": { + "dElevation": -40 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -3087,40 +3029,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1831, - "y": 833 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1831, + "y": 833 } - }, - { - "delta": { - "nodeXY6": { - "x": 22791, - "y": -39 - } - }, - "attributes": { - "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22791, + "y": -39 } }, - { - "delta": { - "nodeXY6": { - "x": 22950, - "y": -6 - } - }, - "attributes": { - "dElevation": -40 + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22950, + "y": -6 } + }, + "attributes": { + "dElevation": -40 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -3196,40 +3136,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1839, - "y": 453 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1839, + "y": 453 } - }, - { - "delta": { - "nodeXY6": { - "x": 22869, - "y": 8 - } - }, - "attributes": { - "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22869, + "y": 8 } }, - { - "delta": { - "nodeXY6": { - "x": 22893, - "y": -12 - } - }, - "attributes": { - "dElevation": -40 + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22893, + "y": -12 } + }, + "attributes": { + "dElevation": -40 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -3305,32 +3243,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2608, - "y": 71 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2608, + "y": 71 } }, - { - "delta": { - "nodeXY6": { - "x": 10503, - "y": 0 - } - }, - "attributes": { - "dElevation": -60 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 10503, + "y": 0 } + }, + "attributes": { + "dElevation": -60 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -3406,32 +3342,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2596, - "y": -288 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2596, + "y": -288 } }, - { - "delta": { - "nodeXY6": { - "x": 9697, - "y": 6 - } - }, - "attributes": { - "dElevation": -60 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 9697, + "y": 6 } + }, + "attributes": { + "dElevation": -60 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -3507,32 +3441,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1815, - "y": 1527 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1815, + "y": 1527 } }, - { - "delta": { - "nodeXY6": { - "x": 16128, - "y": 38 - } - }, - "attributes": { - "dElevation": -90 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 16128, + "y": 38 } + }, + "attributes": { + "dElevation": -90 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -3613,29 +3545,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1916, - "y": -844 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1916, + "y": -844 } }, - { - "delta": { - "nodeXY6": { - "x": 461, - "y": -6 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 461, + "y": -6 } } - ] - } + } + ] } }, { @@ -3672,29 +3602,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1916, - "y": -1205 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1916, + "y": -1205 } }, - { - "delta": { - "nodeXY6": { - "x": 472, - "y": -6 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 472, + "y": -6 } } - ] - } + } + ] } }, { @@ -3731,29 +3659,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1875, - "y": -1595 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1875, + "y": -1595 } }, - { - "delta": { - "nodeXY6": { - "x": 507, - "y": 0 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 507, + "y": 0 } } - ] - } + } + ] } }, { @@ -3790,29 +3716,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -540, - "y": -2621 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -540, + "y": -2621 } }, - { - "delta": { - "nodeXY6": { - "x": 7, - "y": -283 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 7, + "y": -283 } } - ] - } + } + ] } }, { @@ -3849,29 +3773,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -888, - "y": -2635 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -888, + "y": -2635 } }, - { - "delta": { - "nodeXY6": { - "x": 0, - "y": -283 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": -283 } } - ] - } + } + ] } }, { @@ -3908,29 +3830,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1300, - "y": -2685 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1300, + "y": -2685 } }, - { - "delta": { - "nodeXY6": { - "x": 7, - "y": -248 - } + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 7, + "y": -248 } } - ] - } + } + ] } }, { @@ -3981,32 +3901,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2089, - "y": -1980 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2089, + "y": -1980 } }, - { - "delta": { - "nodeXY6": { - "x": -11230, - "y": 22 - } - }, - "attributes": { - "dElevation": 70 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -11230, + "y": 22 } + }, + "attributes": { + "dElevation": 70 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -4101,40 +4019,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2066, - "y": -1614 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2066, + "y": -1614 } - }, - { - "delta": { - "nodeXY6": { - "x": -22451, - "y": -44 - } - }, - "attributes": { - "dElevation": 140 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22451, + "y": -44 } }, - { - "delta": { - "nodeXY6": { - "x": -22755, - "y": -14 - } - }, - "attributes": { - "dElevation": 70 + "attributes": { + "dElevation": 140 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22755, + "y": -14 } + }, + "attributes": { + "dElevation": 70 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -4210,40 +4126,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2041, - "y": -1320 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2041, + "y": -1320 } - }, - { - "delta": { - "nodeXY6": { - "x": -22637, - "y": 29 - } - }, - "attributes": { - "dElevation": 150 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22637, + "y": 29 } }, - { - "delta": { - "nodeXY6": { - "x": -22601, - "y": 46 - } - }, - "attributes": { - "dElevation": 60 + "attributes": { + "dElevation": 150 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22601, + "y": 46 } + }, + "attributes": { + "dElevation": 60 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -4319,43 +4233,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2030, - "y": -904 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2030, + "y": -904 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22671, + "y": 3 } }, - { - "delta": { - "nodeXY6": { - "x": -22671, - "y": 3 - } - }, - "attributes": { - "dElevation": 140 + "attributes": { + "dElevation": 140 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22527, + "y": 18 } }, - { - "delta": { - "nodeXY6": { - "x": -22527, - "y": 18 - } - }, - "attributes": { - "dElevation": 60 - } + "attributes": { + "dElevation": 60 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -4431,43 +4343,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2430, - "y": -107 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2430, + "y": -107 } }, - { - "delta": { - "nodeXY6": { - "x": -9878, - "y": -11 - } - }, - "attributes": { - "dElevation": 40 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9878, + "y": -11 } }, - { - "delta": { - "nodeXY6": { - "x": -2258, - "y": -556 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 40 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2258, + "y": -556 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -4550,29 +4460,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1939, - "y": 425 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1939, + "y": 425 } }, - { - "delta": { - "nodeXY6": { - "x": -271, - "y": 0 - } + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -271, + "y": 0 } } - ] - } + } + ] } }, { @@ -4609,29 +4517,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1916, - "y": 792 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1916, + "y": 792 } }, - { - "delta": { - "nodeXY6": { - "x": -300, - "y": -6 - } + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -300, + "y": -6 } } - ] - } + } + ] } }, { @@ -4668,29 +4574,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1910, - "y": 1154 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1910, + "y": 1154 } }, - { - "delta": { - "nodeXY6": { - "x": -282, - "y": 0 - } + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -282, + "y": 0 } } - ] - } + } + ] } }, { @@ -4727,29 +4631,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1899, - "y": 1504 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1899, + "y": 1504 } }, - { - "delta": { - "nodeXY6": { - "x": -288, - "y": 0 - } + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -288, + "y": 0 } } - ] - } + } + ] } }, { @@ -4800,95 +4702,93 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -594, - "y": 2467 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -23, - "y": 1503 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -52, - "y": 2249 - } - } - }, - { - "delta": { - "nodeXY6": { - "x": -156, - "y": 2008 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -472, - "y": 2163 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -778, - "y": 2323 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -1296, - "y": 2209 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -1100, - "y": 1549 - } - }, - "attributes": { - "dElevation": 10 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -594, + "y": 2467 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -23, + "y": 1503 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -52, + "y": 2249 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -156, + "y": 2008 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -472, + "y": 2163 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -778, + "y": 2323 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1296, + "y": 2209 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1100, + "y": 1549 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -4964,106 +4864,104 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -997, - "y": 2409 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -12, - "y": 1767 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -105, - "y": 2959 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -153, - "y": 1231 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -420, - "y": 2100 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -824, - "y": 2123 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -674, - "y": 1331 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -755, - "y": 1210 - } - } - }, - { - "delta": { - "nodeXY6": { - "x": -835, - "y": 1061 - } - }, - "attributes": { - "dElevation": 10 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -997, + "y": 2409 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -12, + "y": 1767 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -105, + "y": 2959 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -153, + "y": 1231 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -420, + "y": 2100 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -824, + "y": 2123 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -674, + "y": 1331 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -755, + "y": 1210 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -835, + "y": 1061 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5179,54 +5077,52 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -288, - "y": 2486 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -288, + "y": 2486 } }, - { - "delta": { - "nodeXY6": { - "x": -29, - "y": 3976 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -29, + "y": 3976 } }, - { - "delta": { - "nodeXY6": { - "x": -196, - "y": 1922 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -196, + "y": 1922 } }, - { - "delta": { - "nodeXY6": { - "x": -599, - "y": 2473 - } - }, - "attributes": { - "dElevation": 20 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -599, + "y": 2473 } + }, + "attributes": { + "dElevation": 20 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5302,62 +5198,60 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 23, - "y": 2509 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 23, + "y": 2509 } }, - { - "delta": { - "nodeXY6": { - "x": 23, - "y": 2467 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 23, + "y": 2467 } }, - { - "delta": { - "nodeXY6": { - "x": -58, - "y": 1979 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -58, + "y": 1979 } - }, - { - "delta": { - "nodeXY6": { - "x": -242, - "y": 1916 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -242, + "y": 1916 } }, - { - "delta": { - "nodeXY6": { - "x": -438, - "y": 1618 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -438, + "y": 1618 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5419,29 +5313,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 442, - "y": 2545 - } - }, - "attributes": { - "dElevation": 20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 442, + "y": 2545 } }, - { - "delta": { - "nodeXY6": { - "x": 0, - "y": 333 - } + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": 333 } } - ] - } + } + ] } }, { @@ -5478,32 +5370,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 851, - "y": 2533 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 851, + "y": 2533 } }, - { - "delta": { - "nodeXY6": { - "x": 0, - "y": 338 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": 338 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] } }, { @@ -5554,32 +5444,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 974, - "y": -2408 - } - }, - "attributes": { - "dElevation": -30 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 974, + "y": -2408 } }, - { - "delta": { - "nodeXY6": { - "x": -60, - "y": -15160 - } - }, - "attributes": { - "dElevation": 50 + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -60, + "y": -15160 } + }, + "attributes": { + "dElevation": 50 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5655,32 +5543,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 564, - "y": -2467 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 564, + "y": -2467 } }, - { - "delta": { - "nodeXY6": { - "x": -8, - "y": -15094 - } - }, - "attributes": { - "dElevation": 40 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -8, + "y": -15094 } + }, + "attributes": { + "dElevation": 40 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5756,32 +5642,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 202, - "y": -2492 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 202, + "y": -2492 } }, - { - "delta": { - "nodeXY6": { - "x": 10, - "y": -15080 - } - }, - "attributes": { - "dElevation": 40 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 10, + "y": -15080 } + }, + "attributes": { + "dElevation": 40 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5857,32 +5741,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -148, - "y": -2541 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -148, + "y": -2541 } }, - { - "delta": { - "nodeXY6": { - "x": 7, - "y": -3031 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 7, + "y": -3031 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -5958,64 +5840,62 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2555, - "y": -2340 - } - }, - "attributes": { - "dElevation": -30 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2555, + "y": -2340 } }, - { - "delta": { - "nodeXY6": { - "x": -357, - "y": -252 - } + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -357, + "y": -252 } - }, - { - "delta": { - "nodeXY6": { - "x": -438, - "y": -459 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -438, + "y": -459 } - }, - { - "delta": { - "nodeXY6": { - "x": -288, - "y": -562 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -288, + "y": -562 } - }, - { - "delta": { - "nodeXY6": { - "x": -177, - "y": -601 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -177, + "y": -601 } - }, - { - "delta": { - "nodeXY6": { - "x": -13, - "y": -9030 - } - }, - "attributes": { - "dElevation": 30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -13, + "y": -9030 } + }, + "attributes": { + "dElevation": 30 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -6054,7 +5934,7 @@ }, { "description": "Test case 3 - MapTxPojo", - "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload6ef718b4-ad04-4260-a9f2-f8c596f0019310002024-11-08T21:52:36.968Z70RSUfalse00128315380230002044D0094D3EA1DB2CCC713452F402DC325806280000040000B5DC45F6640A0A694423FFE01478D267B809B02788162500004025804280000040000B5DD2DF1180A0A69400C01581478D26BE802102788162700004025802280000050000B5DE71EA600A0A69346401281478D27C88052027889629000040231A2400218C9000196020A00000080002D7681808802829A58F9007E051E15E689FAFC5616A000A02B0C400050210052200000001AEC35053C050515FB9A000040188800000006BAFBC20981414D7EEC800002828401C8800000006BAE1C2BB01414D7EDA800B02828B020D000000200006BD19441381414D802398EB027D8460E48002306200022C093400000200001AF6F5103605053600FE640809F6058D400020096051A00000080000D7CC8880402829B008B323204FB0AC494001C056268000E0420168400000001603CA2058B000103682018840000000160A162058AFFE90368581AA80000050000B61E6E14B409F66EB433FE901428DD7357FAB0294086184800230B20002583C00030196072A00000100002D87F183EB027D9BAC18FFAC050A375D61FE5C0A50058340003009607AA00000100002D88148270027D9BAC1AFF98050A375C8DFEE00A500582C00030096082A00000080000D884D813A027D9BBC18FEEC050F02C690000404B0455000000400006C443BFD4813ECDCF047FBB028281632A0002022024C4000000036238DF5AC09F62C08D3FFD0809B100000000D89287BD4027D8B01CCFFF42028C40000000362545EA3409F62C0734000160B3A00000100008582B977ED2C003381A35FD4DDED40A0A2BFCC3E2FB5F7E9D5B00A0A6BDC63640814140B0C80008012C157400000080014B0882EFD057FE3784B2BFF7BAEFB5FD21E3800A0A2BF81BC9835FA55E3240A0A6BDC336710141423142400118990001160C3A0000008000057FF477D16BFE637C1014140B0550003012C177400000100010B029CEF9657FE96FD26BFD7BD3E8141457F1478066BF143BC101414D7BA86CF902828160C8000602203304000000035F719DE5C0A0A2BFFD3F6D880D4100000000D7BED779702828B0000FDCE813ECCEB0E00B027D858D0FEA2D0476B169636B0200800161F00010022041A400000000BE456B81904002043A400000000BE01114184C00013C457FD24A52058C40001008037263DFF780A146E023C005813EC0A0806012C1554000002000045FE580ADC92E801402829B81AEFFC804FB0281C1804B05950000008000117FBD42371E39FF980A0A6E132C01E813EC0A0606012C18540000010000C780E7B5B3CEA805C0A0A1F0122C8BDCBC0000A0A5F07223204FB028800404B05D5000000400001E02A202DA50180060282814420202000RSU10.11.81.36MessageFrame182088082395950299-1048404171171403663110000000000000000000100000000000-2287-61510-22396-460-22917155-3018100000000000212110000000000000000000100000000000-2229-95410-225274360-2285033-3019100000000000211110000000000000000000101000000000-2148-138410-229003760-2258482-3020100000000000212600100100000022500100000000034110000000000000000000010000000000-243113610-213806360-1630-321110101000000005112010000000000525201000000000000000000-253467010-28206201000000000000000000-2569104310-2760107201000000000000000000-2621139810-29411108310000000000000000000001000000000-1486208710356379-1070010010000001600100000000029310000000000000000000100000000000-1158207510636402-10261000000000004110310000000000000000000010000000000-824205210696425-10180101000000007119010000000000721140100000000000000000024220700436124010000000000000000006452070-124361351000000000000000000010100000000019471325-1022150-462022325-85801200100100000011100100000000027100000000000631451000000000000000000010000000000020331003-1022028-422022360-10580610000000000061155100000000000000000001000000000002068624-1022029-522022307-7280510000000000061165100000000000000000000100000000002125314-1024076-138302601000000000011175100000000000000000000100000000002183-87-1020228-69102501010000000011186010000000000000000002275-661-10282-6196010000000000000000002344-1068-10230-6206010000000000000000002385-1395-10230022710000000000000000000100000000000697-20676-4044-173-212310-104-929-518-270810-1140-4991101210000000000081217100000000000000000000010000000001089-2072-29-1973-17-2593-184-182410-253-1744-363-184710-1146-48941020001001000000119001000000000224710000000000000000000010000000000-12-2095-52-42221050101000000003123710000000000000000000010000000000334-2101-23-4142-81-141110-236-2042-472-217410-1112-48711060100000000003125801000000000000000000-570-215310-6-29326801000000000000000000-1043-2153100-281", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload894cf226-1c88-4e93-8a44-4e2e619593e310002024-11-08T22:01:11.974Z70RSUfalse00128315380230002044D0094D3EA1DB2CCC713452F402DC325806280000040000B5DC45F6640A0A694423FFE01478D267B809B02788162500004025804280000040000B5DD2DF1180A0A69400C01581478D26BE802102788162700004025802280000050000B5DE71EA600A0A69346401281478D27C88052027889629000040231A2400218C9000196020A00000080002D7681808802829A58F9007E051E15E689FAFC5616A000A02B0C400050210052200000001AEC35053C050515FB9A000040188800000006BAFBC20981414D7EEC800002828401C8800000006BAE1C2BB01414D7EDA800B02828B020D000000200006BD19441381414D802398EB027D8460E48002306200022C093400000200001AF6F5103605053600FE640809F6058D400020096051A00000080000D7CC8880402829B008B323204FB0AC494001C056268000E0420168400000001603CA2058B000103682018840000000160A162058AFFE90368581AA80000050000B61E6E14B409F66EB433FE901428DD7357FAB0294086184800230B20002583C00030196072A00000100002D87F183EB027D9BAC18FFAC050A375D61FE5C0A50058340003009607AA00000100002D88148270027D9BAC1AFF98050A375C8DFEE00A500582C00030096082A00000080000D884D813A027D9BBC18FEEC050F02C690000404B0455000000400006C443BFD4813ECDCF047FBB028281632A0002022024C4000000036238DF5AC09F62C08D3FFD0809B100000000D89287BD4027D8B01CCFFF42028C40000000362545EA3409F62C0734000160B3A00000100008582B977ED2C003381A35FD4DDED40A0A2BFCC3E2FB5F7E9D5B00A0A6BDC63640814140B0C80008012C157400000080014B0882EFD057FE3784B2BFF7BAEFB5FD21E3800A0A2BF81BC9835FA55E3240A0A6BDC336710141423142400118990001160C3A0000008000057FF477D16BFE637C1014140B0550003012C177400000100010B029CEF9657FE96FD26BFD7BD3E8141457F1478066BF143BC101414D7BA86CF902828160C8000602203304000000035F719DE5C0A0A2BFFD3F6D880D4100000000D7BED779702828B0000FDCE813ECCEB0E00B027D858D0FEA2D0476B169636B0200800161F00010022041A400000000BE456B81904002043A400000000BE01114184C00013C457FD24A52058C40001008037263DFF780A146E023C005813EC0A0806012C1554000002000045FE580ADC92E801402829B81AEFFC804FB0281C1804B05950000008000117FBD42371E39FF980A0A6E132C01E813EC0A0606012C18540000010000C780E7B5B3CEA805C0A0A1F0122C8BDCBC0000A0A5F07223204FB028800404B05D5000000400001E02A202DA50180060282814420202000RSU10.11.81.36MessageFrame182088082395950299-1048404171171463663110000000000000000000100000000000-2287-61510-22396-460-22917155-3018100000000000212110000000000000000000100000000000-2229-95410-225274360-2285033-3019100000000000211110000000000000000000101000000000-2148-138410-229003760-2258482-3020100000000000212600100100000022500100000000034110000000000000000000010000000000-243113610-213806360-1630-321110101000000005112010000000000525201000000000000000000-253467010-28206201000000000000000000-2569104310-2760107201000000000000000000-2621139810-29411108310000000000000000000001000000000-1486208710356379-1070010010000001600100000000029310000000000000000000100000000000-1158207510636402-10261000000000004110310000000000000000000010000000000-824205210696425-10180101000000007119010000000000721140100000000000000000024220700436124010000000000000000006452070-124361351000000000000000000010100000000019471325-1022150-462022325-85801200100100000011100100000000027100000000000631451000000000000000000010000000000020331003-1022028-422022360-10580610000000000061155100000000000000000001000000000002068624-1022029-522022307-7280510000000000061165100000000000000000000100000000002125314-1024076-138302601000000000011175100000000000000000000100000000002183-87-1020228-69102501010000000011186010000000000000000002275-661-10282-6196010000000000000000002344-1068-10230-6206010000000000000000002385-1395-10230022710000000000000000000100000000000697-20676-4044-173-212310-104-929-518-270810-1140-4991101210000000000081217100000000000000000000010000000001089-2072-29-1973-17-2593-184-182410-253-1744-363-184710-1146-48941020001001000000119001000000000224710000000000000000000010000000000-12-2095-52-42221050101000000003123710000000000000000000010000000000334-2101-23-4142-81-141110-236-2042-472-217410-1112-48711060100000000003125801000000000000000000-570-215310-6-29326801000000000000000000-1043-2153100-281", "expected": { "metadata": { "logFileName": "", @@ -6065,13 +5945,13 @@ }, "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", "serialId": { - "streamId": "6ef718b4-ad04-4260-a9f2-f8c596f00193", + "streamId": "894cf226-1c88-4e93-8a44-4e2e619593e3", "bundleSize": 1, "bundleId": 0, "recordId": 0, "serialNumber": 0 }, - "odeReceivedAt": "2024-11-08T21:52:36.968Z", + "odeReceivedAt": "2024-11-08T22:01:11.974Z", "schemaVersion": 7, "maxDurationTime": 0, "recordGeneratedAt": "", @@ -6098,7 +5978,7 @@ "refPoint": { "latitude": 39.5950299, "longitude": -104.8404171, - "elevation": "1714.0" + "elevation": 1714.6 }, "laneWidth": 366, "laneSet": { @@ -6151,43 +6031,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2287, - "y": -615 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2287, + "y": -615 } }, - { - "delta": { - "nodeXY6": { - "x": -22396, - "y": -4 - } - }, - "attributes": { - "dElevation": 60 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22396, + "y": -4 } }, - { - "delta": { - "nodeXY6": { - "x": -22917, - "y": 155 - } - }, - "attributes": { - "dElevation": -30 + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22917, + "y": 155 } + }, + "attributes": { + "dElevation": -30 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -6263,43 +6141,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2229, - "y": -954 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2229, + "y": -954 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22527, + "y": 43 } }, - { - "delta": { - "nodeXY6": { - "x": -22527, - "y": 43 - } - }, - "attributes": { - "dElevation": 60 + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22850, + "y": 33 } }, - { - "delta": { - "nodeXY6": { - "x": -22850, - "y": 33 - } - }, - "attributes": { - "dElevation": -30 - } + "attributes": { + "dElevation": -30 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -6375,43 +6251,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2148, - "y": -1384 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2148, + "y": -1384 } }, - { - "delta": { - "nodeXY6": { - "x": -22900, - "y": 37 - } - }, - "attributes": { - "dElevation": 60 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22900, + "y": 37 } }, - { - "delta": { - "nodeXY6": { - "x": -22584, - "y": 82 - } - }, - "attributes": { - "dElevation": -30 + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22584, + "y": 82 } + }, + "attributes": { + "dElevation": -30 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -6527,40 +6401,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2431, - "y": 136 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2431, + "y": 136 } }, - { - "delta": { - "nodeXY6": { - "x": -21380, - "y": 63 - } - }, - "attributes": { - "dElevation": 60 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -21380, + "y": 63 } }, - { - "delta": { - "nodeXY6": { - "x": -1630, - "y": -321 - } + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1630, + "y": -321 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -6643,29 +6515,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2534, - "y": 670 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2534, + "y": 670 } }, - { - "delta": { - "nodeXY6": { - "x": -282, - "y": 0 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -282, + "y": 0 } } - ] - } + } + ] } }, { @@ -6702,32 +6572,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2569, - "y": 1043 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2569, + "y": 1043 } }, - { - "delta": { - "nodeXY6": { - "x": -276, - "y": 0 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -276, + "y": 0 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] } }, { @@ -6764,32 +6632,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -2621, - "y": 1398 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2621, + "y": 1398 } }, - { - "delta": { - "nodeXY6": { - "x": -294, - "y": 11 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -294, + "y": 11 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] } }, { @@ -6840,32 +6706,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1486, - "y": 2087 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1486, + "y": 2087 } }, - { - "delta": { - "nodeXY6": { - "x": 35, - "y": 6379 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 35, + "y": 6379 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -6960,32 +6824,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1158, - "y": 2075 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1158, + "y": 2075 } }, - { - "delta": { - "nodeXY6": { - "x": 63, - "y": 6402 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 63, + "y": 6402 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7061,32 +6923,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -824, - "y": 2052 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -824, + "y": 2052 } }, - { - "delta": { - "nodeXY6": { - "x": 69, - "y": 6425 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 69, + "y": 6425 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7169,26 +7029,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 242, - "y": 2070 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 242, + "y": 2070 } - }, - { - "delta": { - "nodeXY6": { - "x": 0, - "y": 436 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": 436 } } - ] - } + } + ] } }, { @@ -7225,26 +7083,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 645, - "y": 2070 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 645, + "y": 2070 } - }, - { - "delta": { - "nodeXY6": { - "x": -12, - "y": 436 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -12, + "y": 436 } } - ] - } + } + ] } }, { @@ -7295,43 +7151,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1947, - "y": 1325 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1947, + "y": 1325 } }, - { - "delta": { - "nodeXY6": { - "x": 22150, - "y": -46 - } - }, - "attributes": { - "dElevation": 20 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22150, + "y": -46 } }, - { - "delta": { - "nodeXY6": { - "x": 22325, - "y": -85 - } - }, - "attributes": { - "dElevation": 80 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22325, + "y": -85 } + }, + "attributes": { + "dElevation": 80 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7447,43 +7301,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2033, - "y": 1003 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2033, + "y": 1003 } }, - { - "delta": { - "nodeXY6": { - "x": 22028, - "y": -42 - } - }, - "attributes": { - "dElevation": 20 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22028, + "y": -42 } }, - { - "delta": { - "nodeXY6": { - "x": 22360, - "y": -105 - } - }, - "attributes": { - "dElevation": 80 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22360, + "y": -105 } + }, + "attributes": { + "dElevation": 80 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7559,43 +7411,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2068, - "y": 624 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2068, + "y": 624 } }, - { - "delta": { - "nodeXY6": { - "x": 22029, - "y": -52 - } - }, - "attributes": { - "dElevation": 20 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22029, + "y": -52 } }, - { - "delta": { - "nodeXY6": { - "x": 22307, - "y": -72 - } - }, - "attributes": { - "dElevation": 80 + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22307, + "y": -72 } + }, + "attributes": { + "dElevation": 80 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7671,32 +7521,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2125, - "y": 314 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2125, + "y": 314 } }, - { - "delta": { - "nodeXY6": { - "x": 24076, - "y": -138 - } - }, - "attributes": { - "dElevation": 30 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 24076, + "y": -138 } + }, + "attributes": { + "dElevation": 30 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7772,32 +7620,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2183, - "y": -87 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2183, + "y": -87 } }, - { - "delta": { - "nodeXY6": { - "x": 20228, - "y": -69 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 20228, + "y": -69 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -7859,29 +7705,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2275, - "y": -661 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2275, + "y": -661 } }, - { - "delta": { - "nodeXY6": { - "x": 282, - "y": -6 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 282, + "y": -6 } } - ] - } + } + ] } }, { @@ -7918,29 +7762,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2344, - "y": -1068 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2344, + "y": -1068 } }, - { - "delta": { - "nodeXY6": { - "x": 230, - "y": -6 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 230, + "y": -6 } } - ] - } + } + ] } }, { @@ -7977,29 +7819,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 2385, - "y": -1395 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2385, + "y": -1395 } }, - { - "delta": { - "nodeXY6": { - "x": 230, - "y": 0 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 230, + "y": 0 } } - ] - } + } + ] } }, { @@ -8050,67 +7890,65 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 697, - "y": -2067 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 697, + "y": -2067 } - }, - { - "delta": { - "nodeXY6": { - "x": 6, - "y": -4044 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": 6, + "y": -4044 } - }, - { - "delta": { - "nodeXY6": { - "x": -173, - "y": -2123 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -173, + "y": -2123 } }, - { - "delta": { - "nodeXY6": { - "x": -104, - "y": -929 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -104, + "y": -929 } - }, - { - "delta": { - "nodeXY6": { - "x": -518, - "y": -2708 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -518, + "y": -2708 } }, - { - "delta": { - "nodeXY6": { - "x": -1140, - "y": -4991 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1140, + "y": -4991 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -8186,75 +8024,73 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1089, - "y": -2072 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1089, + "y": -2072 } - }, - { - "delta": { - "nodeXY6": { - "x": -29, - "y": -1973 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -29, + "y": -1973 } - }, - { - "delta": { - "nodeXY6": { - "x": -17, - "y": -2593 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -17, + "y": -2593 } - }, - { - "delta": { - "nodeXY6": { - "x": -184, - "y": -1824 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -184, + "y": -1824 } }, - { - "delta": { - "nodeXY6": { - "x": -253, - "y": -1744 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -253, + "y": -1744 } - }, - { - "delta": { - "nodeXY6": { - "x": -363, - "y": -1847 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -363, + "y": -1847 } }, - { - "delta": { - "nodeXY6": { - "x": -1146, - "y": -4894 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1146, + "y": -4894 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -8349,29 +8185,27 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -12, - "y": -2095 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -12, + "y": -2095 } - }, - { - "delta": { - "nodeXY6": { - "x": -52, - "y": -4222 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -52, + "y": -4222 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -8447,67 +8281,65 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 334, - "y": -2101 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 334, + "y": -2101 } - }, - { - "delta": { - "nodeXY6": { - "x": -23, - "y": -4142 - } + } + }, + { + "delta": { + "nodeXY6": { + "x": -23, + "y": -4142 } - }, - { - "delta": { - "nodeXY6": { - "x": -81, - "y": -1411 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -81, + "y": -1411 } }, - { - "delta": { - "nodeXY6": { - "x": -236, - "y": -2042 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -236, + "y": -2042 } - }, - { - "delta": { - "nodeXY6": { - "x": -472, - "y": -2174 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -472, + "y": -2174 } }, - { - "delta": { - "nodeXY6": { - "x": -1112, - "y": -4871 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1112, + "y": -4871 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -8569,29 +8401,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -570, - "y": -2153 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -570, + "y": -2153 } }, - { - "delta": { - "nodeXY6": { - "x": -6, - "y": -293 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -6, + "y": -293 } } - ] - } + } + ] } }, { @@ -8628,29 +8458,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": -1043, - "y": -2153 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1043, + "y": -2153 } }, - { - "delta": { - "nodeXY6": { - "x": 0, - "y": -281 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": -281 } } - ] - } + } + ] } } ] @@ -8664,8 +8492,8 @@ } }, { - "description": "Test case 3 - MapTxPojo", - "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload3cfe36c5-8cbc-43f3-af8f-a148520df6d910002024-11-08T21:52:39.971Z70RSUfalse0012830538023000205EA2094D3A3E202CA7783451FA02DC385824E8000002000089D7FA3C8FF96D5837A9E7A4163680002025822E80000020000A97DFAB40A0A6C00BD21D013EC3792FAD4163880002025820E80000040001A92E3AA00A0A6BFE6538C813ECC7FD3303027D9B01B5AC0004E235FE3698CC09E2058240003009607BA00000100006A32EEB6028298FFA7E6A04FB31FFDFEA809F66C0276FE601374C7D7F795027B0160B0000C0220270400000000A7FF8A4108E8220290400000000AE7B8BC106654582F6800000400008BB12D889D763ED6CD4D1F3D027B01617000100258316800000400010BADA8407C8F7F7B37CB7C0C09F65EF01F8E04FB02C2A0002004B066D0000004000117754649317D7F1C5F5AF8E0B0540003012C1AB4000001000045D8EF044D741F7C5E72E30C04FB02C110000C04406F08000000017372C9833182C4073080000000172BA0F033D800B07B90000002000117BA05905140476BFCD2EDD813D8031D200012C03140000010000451D42D0C808C5E8027D97035116813EC2B0A4000501485A000296010A000001000062A421736408A2E5813ECD802B5DAA027B1B00507F4404E736005D134009B00589C00010096008A000001000082BB615E6407E1FA013ECB806072409F66405040A013ECD806744FF02739AFFA48A8604D802C520000804B024D000000400015070BFA01414C2F6E02E0282866DD75682C4D0001C04B020D000000400005073B5901414C18BE01D0282816288000E02580E680000040001283196680A0A610C6FF481414338842B0258DFD82C6E0001004B018D0000008000250602268141443771FB058F7A150050508C8E05C1639000080220148400000002836E6FC0A0A0229030805A100000000A104B5C0282806D400202B240000000161566915810BFF2400A48000000008D5480C0F18AE4008480000000093B88680F4880203BA40000000134E16A301C4422581CC800000100012CF576F9028283793BFB201DED0C09F6241B7BB408C3480004218400201AA4000000030CE28E000A0A01B50008062900000000C33B621C0282805EBF400002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B000080200RSU10.11.81.19MessageFrame1820121132395662624-10508272111689036618710000000000000000000010000000000-1611679-145804-1732537270100000000001117710000000000000000000010000000000-521170910239274-10-2193765280100000000001116710000000000000000000100000000000-840170410-5210009-10-124867-1021822016-60-1159779-3041000000000006115710000000000000000000100000000000-1234171810-127989-10-38106-107824524-70-1616037-20510000000000061198010000000000000000005111577173212080100000000000000000092615831229823111000000000000000000010000000000017328666892-1495428-195-20111000000000008124111000000000000000000010000000000017185283215-176091-253-103008-57-10101000000000008125111000000000000000000001000000000017702014477-571965-575010000000000312611100000000000000000000100000000001735-1265584-1322507390-104010000000000312712010000000000000000001646-621305112812010000000000000000001623-99431703014100000000000000000000010000000001908-1870-472-953-102-8773-202900100000000013110000000000000000000010000000000234-168835-6680-1053-3539-1010010000000000511101000000000052110000000000000000000100000000000578-167769-6709-1043-8790-2040-16478-5023-15152-8019100000000000211110000000000000000000100000000000950-169863-7180-1012-3639-1040-6124-10103-15105-50-46-15037-8020100000000000219310000000000000000000010000000000-1823-1210-51574610-2339-33919010000000000718310000000000000000000010000000000-1817-33410-6609291020010000000000717310000000000000000000100000000000-1850-61410-6045-2310-2288172-669-527100000000000416310000000000000000000100000000000-1856-94710-4644-80-310616810-124523281000000000004110401000000000000000000-182944710-236611401000000000000000000-178886010-29402190100000000000000000013699302235055210000000000000000000-1195-1533-29-4254210000000000000000000-786-1510-23-4482913010000000000000000005345-13963921714610000000000000000000001000000000-2133178510484895296979-1021959921300100000000011200100000000013501000000000000000000-489489610-294012501000000000000000000-488354010-323-6", + "description": "Test case 4 - MapTxPojo", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadd71ab23d-0f89-4847-abef-ea6ffe43995b10002024-11-08T22:01:12.973Z70RSUfalse0012830538023000205EA2094D3A3E202CA7783451FA02DC385824E8000002000089D7FA3C8FF96D5837A9E7A4163680002025822E80000020000A97DFAB40A0A6C00BD21D013EC3792FAD4163880002025820E80000040001A92E3AA00A0A6BFE6538C813ECC7FD3303027D9B01B5AC0004E235FE3698CC09E2058240003009607BA00000100006A32EEB6028298FFA7E6A04FB31FFDFEA809F66C0276FE601374C7D7F795027B0160B0000C0220270400000000A7FF8A4108E8220290400000000AE7B8BC106654582F6800000400008BB12D889D763ED6CD4D1F3D027B01617000100258316800000400010BADA8407C8F7F7B37CB7C0C09F65EF01F8E04FB02C2A0002004B066D0000004000117754649317D7F1C5F5AF8E0B0540003012C1AB4000001000045D8EF044D741F7C5E72E30C04FB02C110000C04406F08000000017372C9833182C4073080000000172BA0F033D800B07B90000002000117BA05905140476BFCD2EDD813D8031D200012C03140000010000451D42D0C808C5E8027D97035116813EC2B0A4000501485A000296010A000001000062A421736408A2E5813ECD802B5DAA027B1B00507F4404E736005D134009B00589C00010096008A000001000082BB615E6407E1FA013ECB806072409F66405040A013ECD806744FF02739AFFA48A8604D802C520000804B024D000000400015070BFA01414C2F6E02E0282866DD75682C4D0001C04B020D000000400005073B5901414C18BE01D0282816288000E02580E680000040001283196680A0A610C6FF481414338842B0258DFD82C6E0001004B018D0000008000250602268141443771FB058F7A150050508C8E05C1639000080220148400000002836E6FC0A0A0229030805A100000000A104B5C0282806D400202B240000000161566915810BFF2400A48000000008D5480C0F18AE4008480000000093B88680F4880203BA40000000134E16A301C4422581CC800000100012CF576F9028283793BFB201DED0C09F6241B7BB408C3480004218400201AA4000000030CE28E000A0A01B50008062900000000C33B621C0282805EBF400002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B000080200RSU10.11.81.19MessageFrame1820121132395662624-10508272111689936618710000000000000000000010000000000-1611679-145804-1732537270100000000001117710000000000000000000010000000000-521170910239274-10-2193765280100000000001116710000000000000000000100000000000-840170410-5210009-10-124867-1021822016-60-1159779-3041000000000006115710000000000000000000100000000000-1234171810-127989-10-38106-107824524-70-1616037-20510000000000061198010000000000000000005111577173212080100000000000000000092615831229823111000000000000000000010000000000017328666892-1495428-195-20111000000000008124111000000000000000000010000000000017185283215-176091-253-103008-57-10101000000000008125111000000000000000000001000000000017702014477-571965-575010000000000312611100000000000000000000100000000001735-1265584-1322507390-104010000000000312712010000000000000000001646-621305112812010000000000000000001623-99431703014100000000000000000000010000000001908-1870-472-953-102-8773-202900100000000013110000000000000000000010000000000234-168835-6680-1053-3539-1010010000000000511101000000000052110000000000000000000100000000000578-167769-6709-1043-8790-2040-16478-5023-15152-8019100000000000211110000000000000000000100000000000950-169863-7180-1012-3639-1040-6124-10103-15105-50-46-15037-8020100000000000219310000000000000000000010000000000-1823-1210-51574610-2339-33919010000000000718310000000000000000000010000000000-1817-33410-6609291020010000000000717310000000000000000000100000000000-1850-61410-6045-2310-2288172-669-527100000000000416310000000000000000000100000000000-1856-94710-4644-80-310616810-124523281000000000004110401000000000000000000-182944710-236611401000000000000000000-178886010-29402190100000000000000000013699302235055210000000000000000000-1195-1533-29-4254210000000000000000000-786-1510-23-4482913010000000000000000005345-13963921714610000000000000000000001000000000-2133178510484895296979-1021959921300100000000011200100000000013501000000000000000000-489489610-294012501000000000000000000-488354010-323-6", "expected": { "metadata": { "logFileName": "", @@ -8676,13 +8504,13 @@ }, "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", "serialId": { - "streamId": "3cfe36c5-8cbc-43f3-af8f-a148520df6d9", + "streamId": "d71ab23d-0f89-4847-abef-ea6ffe43995b", "bundleSize": 1, "bundleId": 0, "recordId": 0, "serialNumber": 0 }, - "odeReceivedAt": "2024-11-08T21:52:39.971Z", + "odeReceivedAt": "2024-11-08T22:01:12.973Z", "schemaVersion": 7, "maxDurationTime": 0, "recordGeneratedAt": "", @@ -8709,7 +8537,7 @@ "refPoint": { "latitude": 39.5662624, "longitude": -105.0827211, - "elevation": "1689.0" + "elevation": 1689.9 }, "laneWidth": 366, "laneSet": { @@ -8762,34 +8590,32 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -161, - "y": 1679 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -161, + "y": 1679 } - }, - { - "delta": { - "nodeXY5": { - "x": -14, - "y": 5804 - } + } + }, + { + "delta": { + "nodeXY5": { + "x": -14, + "y": 5804 } - }, - { - "delta": { - "nodeXY4": { - "x": -173, - "y": 2537 - } + } + }, + { + "delta": { + "nodeXY4": { + "x": -173, + "y": 2537 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -8865,40 +8691,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -521, - "y": 1709 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -521, + "y": 1709 } }, - { - "delta": { - "nodeXY6": { - "x": 23, - "y": 9274 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 23, + "y": 9274 } }, - { - "delta": { - "nodeXY4": { - "x": -219, - "y": 3765 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -219, + "y": 3765 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -8974,65 +8798,63 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -840, - "y": 1704 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -52, - "y": 10009 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": -12, - "y": 4867 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 218, - "y": 22016 - } - }, - "attributes": { - "dElevation": -60 - } - }, - { - "delta": { - "nodeXY6": { - "x": -115, - "y": 9779 - } - }, - "attributes": { - "dElevation": -30 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -840, + "y": 1704 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -52, + "y": 10009 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -12, + "y": 4867 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 218, + "y": 22016 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -115, + "y": 9779 + } + }, + "attributes": { + "dElevation": -30 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -9108,65 +8930,63 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1234, - "y": 1718 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY5": { - "x": -12, - "y": 7989 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": -3, - "y": 8106 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 78, - "y": 24524 - } - }, - "attributes": { - "dElevation": -70 - } - }, - { - "delta": { - "nodeXY5": { - "x": -161, - "y": 6037 - } - }, - "attributes": { - "dElevation": -20 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1234, + "y": 1718 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -12, + "y": 7989 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -3, + "y": 8106 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 78, + "y": 24524 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY5": { + "x": -161, + "y": 6037 + } + }, + "attributes": { + "dElevation": -20 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -9228,26 +9048,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 511, - "y": 1577 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 511, + "y": 1577 } - }, - { - "delta": { - "nodeXY1": { - "x": 17, - "y": 321 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 17, + "y": 321 } } - ] - } + } + ] } }, { @@ -9284,26 +9102,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 926, - "y": 1583 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 926, + "y": 1583 } - }, - { - "delta": { - "nodeXY1": { - "x": 12, - "y": 298 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 12, + "y": 298 } } - ] - } + } + ] } }, { @@ -9354,37 +9170,35 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1732, - "y": 866 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1732, + "y": 866 } - }, - { - "delta": { - "nodeXY5": { - "x": 6892, - "y": -149 - } + } + }, + { + "delta": { + "nodeXY5": { + "x": 6892, + "y": -149 } - }, - { - "delta": { - "nodeXY5": { - "x": 5428, - "y": -195 - } - }, - "attributes": { - "dElevation": -20 + } + }, + { + "delta": { + "nodeXY5": { + "x": 5428, + "y": -195 } + }, + "attributes": { + "dElevation": -20 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -9460,48 +9274,46 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1718, - "y": 528 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1718, + "y": 528 } - }, - { - "delta": { - "nodeXY4": { - "x": 3215, - "y": -17 - } + } + }, + { + "delta": { + "nodeXY4": { + "x": 3215, + "y": -17 } - }, - { - "delta": { - "nodeXY5": { - "x": 6091, - "y": -253 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 6091, + "y": -253 } }, - { - "delta": { - "nodeXY4": { - "x": 3008, - "y": -57 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 3008, + "y": -57 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -9577,34 +9389,32 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1770, - "y": 201 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1770, + "y": 201 } - }, - { - "delta": { - "nodeXY5": { - "x": 4477, - "y": -57 - } + } + }, + { + "delta": { + "nodeXY5": { + "x": 4477, + "y": -57 } - }, - { - "delta": { - "nodeXY3": { - "x": 1965, - "y": -57 - } + } + }, + { + "delta": { + "nodeXY3": { + "x": 1965, + "y": -57 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -9680,37 +9490,35 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1735, - "y": -126 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1735, + "y": -126 } - }, - { - "delta": { - "nodeXY5": { - "x": 5584, - "y": -132 - } + } + }, + { + "delta": { + "nodeXY5": { + "x": 5584, + "y": -132 } - }, - { - "delta": { - "nodeXY4": { - "x": 2507, - "y": 390 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 2507, + "y": 390 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -9772,26 +9580,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1646, - "y": -621 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1646, + "y": -621 } - }, - { - "delta": { - "nodeXY1": { - "x": 305, - "y": 11 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 305, + "y": 11 } } - ] - } + } + ] } }, { @@ -9828,26 +9634,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1623, - "y": -994 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1623, + "y": -994 } - }, - { - "delta": { - "nodeXY1": { - "x": 317, - "y": 0 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 317, + "y": 0 } } - ] - } + } + ] } }, { @@ -9898,37 +9702,35 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1908, - "y": -1870 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1908, + "y": -1870 } - }, - { - "delta": { - "nodeXY2": { - "x": -472, - "y": -953 - } + } + }, + { + "delta": { + "nodeXY2": { + "x": -472, + "y": -953 } - }, - { - "delta": { - "nodeXY6": { - "x": -102, - "y": -8773 - } - }, - "attributes": { - "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -102, + "y": -8773 } + }, + "attributes": { + "dElevation": -20 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10003,40 +9805,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 234, - "y": -1688 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 234, + "y": -1688 } - }, - { - "delta": { - "nodeXY5": { - "x": 35, - "y": -6680 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 35, + "y": -6680 } }, - { - "delta": { - "nodeXY4": { - "x": 53, - "y": -3539 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 53, + "y": -3539 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10132,62 +9932,60 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 578, - "y": -1677 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 578, + "y": -1677 } - }, - { - "delta": { - "nodeXY5": { - "x": 69, - "y": -6709 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 69, + "y": -6709 } }, - { - "delta": { - "nodeXY6": { - "x": 43, - "y": -8790 - } - }, - "attributes": { - "dElevation": -20 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 43, + "y": -8790 } }, - { - "delta": { - "nodeXY6": { - "x": 40, - "y": -16478 - } - }, - "attributes": { - "dElevation": -50 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 40, + "y": -16478 } }, - { - "delta": { - "nodeXY6": { - "x": 23, - "y": -15152 - } - }, - "attributes": { - "dElevation": -80 + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY6": { + "x": 23, + "y": -15152 } + }, + "attributes": { + "dElevation": -80 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10263,73 +10061,71 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 950, - "y": -1698 - } - } - }, - { - "delta": { - "nodeXY5": { - "x": 63, - "y": -7180 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY4": { - "x": 12, - "y": -3639 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 40, - "y": -6124 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 103, - "y": -15105 - } - }, - "attributes": { - "dElevation": -50 - } - }, - { - "delta": { - "nodeXY6": { - "x": -46, - "y": -15037 - } - }, - "attributes": { - "dElevation": -80 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 950, + "y": -1698 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 63, + "y": -7180 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 12, + "y": -3639 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 40, + "y": -6124 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 103, + "y": -15105 + } + }, + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY6": { + "x": -46, + "y": -15037 + } + }, + "attributes": { + "dElevation": -80 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10405,40 +10201,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1823, - "y": -12 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1823, + "y": -12 } }, - { - "delta": { - "nodeXY5": { - "x": -5157, - "y": 46 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -5157, + "y": 46 } }, - { - "delta": { - "nodeXY4": { - "x": -2339, - "y": -339 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -2339, + "y": -339 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10514,32 +10308,30 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1817, - "y": -334 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1817, + "y": -334 } }, - { - "delta": { - "nodeXY5": { - "x": -6609, - "y": 29 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -6609, + "y": 29 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10615,48 +10407,46 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1850, - "y": -614 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1850, + "y": -614 } }, - { - "delta": { - "nodeXY5": { - "x": -6045, - "y": -23 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -6045, + "y": -23 } }, - { - "delta": { - "nodeXY4": { - "x": -2288, - "y": 172 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -2288, + "y": 172 } - }, - { - "delta": { - "nodeXY2": { - "x": -669, - "y": -5 - } + } + }, + { + "delta": { + "nodeXY2": { + "x": -669, + "y": -5 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10732,48 +10522,46 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1856, - "y": -947 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1856, + "y": -947 } }, - { - "delta": { - "nodeXY5": { - "x": -4644, - "y": -80 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -4644, + "y": -80 } - }, - { - "delta": { - "nodeXY4": { - "x": -3106, - "y": 168 - } - }, - "attributes": { - "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -3106, + "y": 168 } }, - { - "delta": { - "nodeXY3": { - "x": -1245, - "y": 23 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY3": { + "x": -1245, + "y": 23 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -10835,29 +10623,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1829, - "y": 447 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1829, + "y": 447 } }, - { - "delta": { - "nodeXY1": { - "x": -236, - "y": 6 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -236, + "y": 6 } } - ] - } + } + ] } }, { @@ -10894,29 +10680,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1788, - "y": 860 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1788, + "y": 860 } }, - { - "delta": { - "nodeXY1": { - "x": -294, - "y": 0 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -294, + "y": 0 } } - ] - } + } + ] } }, { @@ -10953,26 +10737,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY6": { - "x": 1369, - "y": 9302 - } + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1369, + "y": 9302 } - }, - { - "delta": { - "nodeXY1": { - "x": 23, - "y": 505 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 23, + "y": 505 } } - ] - } + } + ] } }, { @@ -11009,26 +10791,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1195, - "y": -1533 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1195, + "y": -1533 } - }, - { - "delta": { - "nodeXY1": { - "x": -29, - "y": -425 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": -29, + "y": -425 } } - ] - } + } + ] } }, { @@ -11065,26 +10845,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -786, - "y": -1510 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -786, + "y": -1510 } - }, - { - "delta": { - "nodeXY1": { - "x": -23, - "y": -448 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": -23, + "y": -448 } } - ] - } + } + ] } }, { @@ -11121,26 +10899,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY5": { - "x": 5345, - "y": -1396 - } + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": 5345, + "y": -1396 } - }, - { - "delta": { - "nodeXY1": { - "x": 392, - "y": 17 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 392, + "y": 17 } } - ] - } + } + ] } }, { @@ -11191,48 +10967,46 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -2133, - "y": 1785 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2133, + "y": 1785 } }, - { - "delta": { - "nodeXY2": { - "x": 484, - "y": 895 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY2": { + "x": 484, + "y": 895 } - }, - { - "delta": { - "nodeXY5": { - "x": 29, - "y": 6979 - } - }, - "attributes": { - "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 29, + "y": 6979 } }, - { - "delta": { - "nodeXY5": { - "x": 219, - "y": 5992 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 219, + "y": 5992 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -11312,29 +11086,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY5": { - "x": -4894, - "y": 896 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -4894, + "y": 896 } }, - { - "delta": { - "nodeXY1": { - "x": -294, - "y": 0 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -294, + "y": 0 } } - ] - } + } + ] } }, { @@ -11371,29 +11143,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY5": { - "x": -4883, - "y": 540 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -4883, + "y": 540 } }, - { - "delta": { - "nodeXY1": { - "x": -323, - "y": -6 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -323, + "y": -6 } } - ] - } + } + ] } } ] @@ -11407,8 +11177,8 @@ } }, { - "description": "Test case 4 - MapTxPojo", - "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload2af41559-45b0-48e8-95b4-a2d1368e2bf710002024-11-08T21:52:39.315Z70RSUfalse0012834538023000205EA0094D3C71C12CA6CE5D527C02DC3458244800000400028CF6F61F62355F9101464B5AAE70C0A0A631B181A81428D6F27A48302829ADDE94A56050F35BD42952C09C4058340003009609920000010000A2128E4162EAD9980143CC566B6AF028798AF5EB7C050F11349EE19ADCEF4CCA050A35B9E29BE009CE0582C000300960A120000008000222DFE5B6303588D0143CB5AB683C0A0A058F2000080960A920000008000424D3E7162ECF8AF8143CC4C9F8D6028A16876F54814140B1D4000101101632000000014E83CC805050181D34405CC80000000546A74C01414061F5E101832000000015559DAE05050181CA8B06910000008000557F359801414BCCB40000A0A5F6BDEA8050533D307B6C0A1E27EA6FE0AFA9B073027D99945C26C04FB02C360002004B06D1000000800045E50A3E40505331437DAC0A0A6D098BF540143CBEE5BF780A0A67F5501A013ECCC9BA13C027D8161900010025822280000010401AC5437B1027D933B3360141495F5F840A0A62FEF8C581428B624E1CC0A142187100008C3C80008220400203AA400000000F926E6B066F00080F29000000003E45B0481CCC0C583EC800000100012F552960027D9500E77E04FB32AB0218809CE0D89092231E2000118E900011601B200000080002ABF4179027D9958E8EE004E20AE20254561A8000A02B0C40005022C0264000002000115B2C2BC04FB32ACF1F7809C4658F42A6813C4CAEB868F02761B281EA9E004DD364E2D53CC09C4058B40001009600B200000100008AF30177027D9967B06AA04E232A272BEC09E2652CE518813B0D953152C1026E9B2A82A47E04E202C5E0000804401DC8000000051E38FE013EC89FCCA027D84019C8000000052BB904013EC89A097027D84015C80000000538B109813EC0988B31004720000000151DC3EE04FB225C22C09F62C0A840000020000965B0781813D8D599C7FEF02789AB155007204F1356711FFBC09EC058EC0002009604C200000100002B336362809EC6A2FE40170139CD452D7FF502788163D0000802201B2400000002C80D40A027D8067C0020192400000002C825284027D905EC0004FB08085100000000C1AD65AC02788033C00201F4400000003068D912009E2011F0008075100000000C1A1E2F00278804ABF47A7C8195028280540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.20MessageFrame1820121122395806913-10508706901702036618210000000000000000000100000000000-21211567-3670797050-1195249910-1832414920-4313934710-4364951530-42729547-6061000000000006119210000000000000000000100000000000-17521601-2218491230-2662580730-2581556630-32557046-4489982920-44889976-5051000000000006120210000000000000000000010000000000-13131627-2022437830-1194257510300100000000001121210000000000000000000010000000000-8131649-2201444730-3289635840-1930375310290100000000001122301000000000000000000-191163610-12733323301000000000000000000212168810-12135024301000000000000000000684175110-1272982641000000000000000000010000000000020228161024540103503-172107472-293308019-633405115-104747310-101310000000000081274100000000000000000001000000000002370498104419-149108497-344303531-3410810652-104718316-10121000000000008117110000000000000000000001000001000-34231969-1023662010-26299310-2057449120-95121632014001000000000115001000000000216001000000000295010000000000000000003219-4053110305010000000000000000003211-10064096316100000000000000000000010000000002729-1696-107-1089-102736-6046-50393-95130001000000000129001000000000236100000000000000000000100000000001012-1671-102845-6288-60904-18991301000000000051120100000000005226100000000000000000001000000000001430-1698-102767-6178-603194-6835-302990-6513-405135-11024-705003-11021-60221000000000002116100000000000000000001000000000001840-1673-103318-7339-602599-5381-302407-5583-405425-11583-705441-11713-6023100000000000217701000000000000000000-1081-1540-10127-310-106701000000000000000000-649-1528-10104-361-105701000000000000000000-234-1517-1098-3334701000000000000000000238-1545-1092-373-1010810000000000000000000100000000000-2640-253-20-9828-17-30-1007057-30-9788-17-2029100000000000419810000000000000000000100000000000-2452-630-20-1485246-50-15059-11-30301000000000004113901000000000000000000-30661034-10-305012901000000000000000000-3054644-10-3230-10161001000000000000000000-64751452-30-4090151001000000000000000000-65151096-30-3690141001000000000000000000-6521752-30-363-6", + "description": "Test case 5 - MapTxPojo", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload2c91e8d6-f917-4c82-96e4-9de0da3ddca710002024-11-08T22:01:11.319Z70RSUfalse0012834538023000205EA0094D3C71C12CA6CE5D527C02DC3458244800000400028CF6F61F62355F9101464B5AAE70C0A0A631B181A81428D6F27A48302829ADDE94A56050F35BD42952C09C4058340003009609920000010000A2128E4162EAD9980143CC566B6AF028798AF5EB7C050F11349EE19ADCEF4CCA050A35B9E29BE009CE0582C000300960A120000008000222DFE5B6303588D0143CB5AB683C0A0A058F2000080960A920000008000424D3E7162ECF8AF8143CC4C9F8D6028A16876F54814140B1D4000101101632000000014E83CC805050181D34405CC80000000546A74C01414061F5E101832000000015559DAE05050181CA8B06910000008000557F359801414BCCB40000A0A5F6BDEA8050533D307B6C0A1E27EA6FE0AFA9B073027D99945C26C04FB02C360002004B06D1000000800045E50A3E40505331437DAC0A0A6D098BF540143CBEE5BF780A0A67F5501A013ECCC9BA13C027D8161900010025822280000010401AC5437B1027D933B3360141495F5F840A0A62FEF8C581428B624E1CC0A142187100008C3C80008220400203AA400000000F926E6B066F00080F29000000003E45B0481CCC0C583EC800000100012F552960027D9500E77E04FB32AB0218809CE0D89092231E2000118E900011601B200000080002ABF4179027D9958E8EE004E20AE20254561A8000A02B0C40005022C0264000002000115B2C2BC04FB32ACF1F7809C4658F42A6813C4CAEB868F02761B281EA9E004DD364E2D53CC09C4058B40001009600B200000100008AF30177027D9967B06AA04E232A272BEC09E2652CE518813B0D953152C1026E9B2A82A47E04E202C5E0000804401DC8000000051E38FE013EC89FCCA027D84019C8000000052BB904013EC89A097027D84015C80000000538B109813EC0988B31004720000000151DC3EE04FB225C22C09F62C0A840000020000965B0781813D8D599C7FEF02789AB155007204F1356711FFBC09EC058EC0002009604C200000100002B336362809EC6A2FE40170139CD452D7FF502788163D0000802201B2400000002C80D40A027D8067C0020192400000002C825284027D905EC0004FB08085100000000C1AD65AC02788033C00201F4400000003068D912009E2011F0008075100000000C1A1E2F00278804ABF47A7C8195028280540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.20MessageFrame1820121122395806913-10508706921702536618210000000000000000000100000000000-21211567-3670797050-1195249910-1832414920-4313934710-4364951530-42729547-6061000000000006119210000000000000000000100000000000-17521601-2218491230-2662580730-2581556630-32557046-4489982920-44889976-5051000000000006120210000000000000000000010000000000-13131627-2022437830-1194257510300100000000001121210000000000000000000010000000000-8131649-2201444730-3289635840-1930375310290100000000001122301000000000000000000-191163610-12733323301000000000000000000212168810-12135024301000000000000000000684175110-1272982641000000000000000000010000000000020228161024540103503-172107472-293308019-633405115-104747310-101310000000000081274100000000000000000001000000000002370498104419-149108497-344303531-3410810652-104718316-10121000000000008117110000000000000000000001000001000-34231969-1023662010-26299310-2057449120-95121632014001000000000115001000000000216001000000000295010000000000000000003219-4053110305010000000000000000003211-10064096316100000000000000000000010000000002729-1696-107-1089-102736-6046-50393-95130001000000000129001000000000236100000000000000000000100000000001012-1671-102845-6288-60904-18991301000000000051120100000000005226100000000000000000001000000000001430-1698-102767-6178-603194-6835-302990-6513-405135-11024-705003-11021-60221000000000002116100000000000000000001000000000001840-1673-103318-7339-602599-5381-302407-5583-405425-11583-705441-11713-6023100000000000217701000000000000000000-1081-1540-10127-310-106701000000000000000000-649-1528-10104-361-105701000000000000000000-234-1517-1098-3334701000000000000000000238-1545-1092-373-1010810000000000000000000100000000000-2640-253-20-9828-17-30-1007057-30-9788-17-2029100000000000419810000000000000000000100000000000-2452-630-20-1485246-50-15059-11-30301000000000004113901000000000000000000-30661034-10-305012901000000000000000000-3054644-10-3230-10161001000000000000000000-64751452-30-4090151001000000000000000000-65151096-30-3690141001000000000000000000-6521752-30-363-6", "expected": { "metadata": { "logFileName": "", @@ -11419,13 +11189,13 @@ }, "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", "serialId": { - "streamId": "2af41559-45b0-48e8-95b4-a2d1368e2bf7", + "streamId": "2c91e8d6-f917-4c82-96e4-9de0da3ddca7", "bundleSize": 1, "bundleId": 0, "recordId": 0, "serialNumber": 0 }, - "odeReceivedAt": "2024-11-08T21:52:39.315Z", + "odeReceivedAt": "2024-11-08T22:01:11.319Z", "schemaVersion": 7, "maxDurationTime": 0, "recordGeneratedAt": "", @@ -11451,8 +11221,8 @@ "revision": 2, "refPoint": { "latitude": 39.5806913, - "longitude": "-105.0870690", - "elevation": "1702.0" + "longitude": -105.0870692, + "elevation": 1702.5 }, "laneWidth": 366, "laneSet": { @@ -11505,84 +11275,82 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -2121, - "y": 1567 - } - } - }, - { - "delta": { - "nodeXY5": { - "x": -3670, - "y": 7970 - } - }, - "attributes": { - "dElevation": 50 - } - }, - { - "delta": { - "nodeXY4": { - "x": -1195, - "y": 2499 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY5": { - "x": -1832, - "y": 4149 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -4313, - "y": 9347 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": -4364, - "y": 9515 - } - }, - "attributes": { - "dElevation": 30 - } - }, - { - "delta": { - "nodeXY6": { - "x": -4272, - "y": 9547 - } - }, - "attributes": { - "dElevation": -60 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2121, + "y": 1567 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -3670, + "y": 7970 + } + }, + "attributes": { + "dElevation": 50 + } + }, + { + "delta": { + "nodeXY4": { + "x": -1195, + "y": 2499 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -1832, + "y": 4149 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4313, + "y": 9347 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4364, + "y": 9515 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4272, + "y": 9547 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -11658,81 +11426,79 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1752, - "y": 1601 - } - } - }, - { - "delta": { - "nodeXY5": { - "x": -2218, - "y": 4912 - } - }, - "attributes": { - "dElevation": 30 - } - }, - { - "delta": { - "nodeXY5": { - "x": -2662, - "y": 5807 - } - }, - "attributes": { - "dElevation": 30 - } - }, - { - "delta": { - "nodeXY5": { - "x": -2581, - "y": 5566 - } - }, - "attributes": { - "dElevation": 30 - } - }, - { - "delta": { - "nodeXY5": { - "x": -3255, - "y": 7046 - } - } - }, - { - "delta": { - "nodeXY6": { - "x": -4489, - "y": 9829 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY6": { - "x": -4488, - "y": 9976 - } - }, - "attributes": { - "dElevation": -50 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1752, + "y": 1601 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -2218, + "y": 4912 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2662, + "y": 5807 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2581, + "y": 5566 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -3255, + "y": 7046 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -4489, + "y": 9829 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4488, + "y": 9976 + } + }, + "attributes": { + "dElevation": -50 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -11808,40 +11574,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1313, - "y": 1627 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1313, + "y": 1627 } - }, - { - "delta": { - "nodeXY5": { - "x": -2022, - "y": 4378 - } - }, - "attributes": { - "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2022, + "y": 4378 } }, - { - "delta": { - "nodeXY4": { - "x": -1194, - "y": 2575 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY4": { + "x": -1194, + "y": 2575 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -11917,51 +11681,49 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -813, - "y": 1649 - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -813, + "y": 1649 } - }, - { - "delta": { - "nodeXY5": { - "x": -2201, - "y": 4447 - } - }, - "attributes": { - "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2201, + "y": 4447 } }, - { - "delta": { - "nodeXY5": { - "x": -3289, - "y": 6358 - } - }, - "attributes": { - "dElevation": 40 + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -3289, + "y": 6358 } }, - { - "delta": { - "nodeXY4": { - "x": -1930, - "y": 3753 - } - }, - "attributes": { - "dElevation": 10 + "attributes": { + "dElevation": 40 + } + }, + { + "delta": { + "nodeXY4": { + "x": -1930, + "y": 3753 } + }, + "attributes": { + "dElevation": 10 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -12023,29 +11785,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -191, - "y": 1636 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -191, + "y": 1636 } }, - { - "delta": { - "nodeXY1": { - "x": -127, - "y": 333 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -127, + "y": 333 } } - ] - } + } + ] } }, { @@ -12082,29 +11842,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 212, - "y": 1688 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 212, + "y": 1688 } }, - { - "delta": { - "nodeXY1": { - "x": -121, - "y": 350 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -121, + "y": 350 } } - ] - } + } + ] } }, { @@ -12141,29 +11899,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 684, - "y": 1751 - } - }, - "attributes": { - "dElevation": 10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 684, + "y": 1751 } }, - { - "delta": { - "nodeXY1": { - "x": -127, - "y": 298 - } + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -127, + "y": 298 } } - ] - } + } + ] } }, { @@ -12214,84 +11970,82 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 2022, - "y": 816 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY4": { - "x": 2454, - "y": 0 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY4": { - "x": 3503, - "y": -172 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 7472, - "y": -293 - } - }, - "attributes": { - "dElevation": 30 - } - }, - { - "delta": { - "nodeXY5": { - "x": 8019, - "y": -63 - } - } - }, - { - "delta": { - "nodeXY4": { - "x": 3405, - "y": 115 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 4747, - "y": 310 - } - }, - "attributes": { - "dElevation": -10 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 2022, + "y": 816 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 2454, + "y": 0 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 3503, + "y": -172 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 7472, + "y": -293 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": 8019, + "y": -63 + } + } + }, + { + "delta": { + "nodeXY4": { + "x": 3405, + "y": 115 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 4747, + "y": 310 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -12367,76 +12121,74 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": 2370, - "y": 498 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 4419, - "y": -149 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY6": { - "x": 8497, - "y": -344 - } - }, - "attributes": { - "dElevation": 30 - } - }, - { - "delta": { - "nodeXY4": { - "x": 3531, - "y": -34 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 8106, - "y": 52 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 4718, - "y": 316 - } - }, - "attributes": { - "dElevation": -10 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 2370, + "y": 498 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 4419, + "y": -149 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 8497, + "y": -344 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY4": { + "x": 3531, + "y": -34 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 8106, + "y": 52 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 4718, + "y": 316 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -12512,65 +12264,63 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -3423, - "y": 1969 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY2": { - "x": 236, - "y": 620 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY2": { - "x": -262, - "y": 993 - } - }, - "attributes": { - "dElevation": 10 - } - }, - { - "delta": { - "nodeXY5": { - "x": -2057, - "y": 4491 - } - }, - "attributes": { - "dElevation": 20 - } - }, - { - "delta": { - "nodeXY4": { - "x": -951, - "y": 2163 - } - }, - "attributes": { - "dElevation": 20 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -3423, + "y": 1969 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY2": { + "x": 236, + "y": 620 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY2": { + "x": -262, + "y": 993 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2057, + "y": 4491 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY4": { + "x": -951, + "y": 2163 + } + }, + "attributes": { + "dElevation": 20 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -12670,26 +12420,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": 3219, - "y": -405 - } + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 3219, + "y": -405 } - }, - { - "delta": { - "nodeXY1": { - "x": 311, - "y": 0 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 311, + "y": 0 } } - ] - } + } + ] } }, { @@ -12726,26 +12474,24 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": 3211, - "y": -1006 - } + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 3211, + "y": -1006 } - }, - { - "delta": { - "nodeXY1": { - "x": 409, - "y": 6 - } + } + }, + { + "delta": { + "nodeXY1": { + "x": 409, + "y": 6 } } - ] - } + } + ] } }, { @@ -12796,51 +12542,49 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": 2729, - "y": -1696 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 2729, + "y": -1696 } }, - { - "delta": { - "nodeXY3": { - "x": 7, - "y": -1089 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY3": { + "x": 7, + "y": -1089 } }, - { - "delta": { - "nodeXY5": { - "x": 2736, - "y": -6046 - } - }, - "attributes": { - "dElevation": -50 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2736, + "y": -6046 } }, - { - "delta": { - "nodeXY2": { - "x": 393, - "y": -951 - } + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY2": { + "x": 393, + "y": -951 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -12935,40 +12679,38 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1012, - "y": -1671 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1012, + "y": -1671 } }, - { - "delta": { - "nodeXY5": { - "x": 2845, - "y": -6288 - } - }, - "attributes": { - "dElevation": -60 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2845, + "y": -6288 } }, - { - "delta": { - "nodeXY3": { - "x": 904, - "y": -1899 - } + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY3": { + "x": 904, + "y": -1899 } } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -13065,76 +12807,74 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1430, - "y": -1698 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 2767, - "y": -6178 - } - }, - "attributes": { - "dElevation": -60 - } - }, - { - "delta": { - "nodeXY5": { - "x": 3194, - "y": -6835 - } - }, - "attributes": { - "dElevation": -30 - } - }, - { - "delta": { - "nodeXY5": { - "x": 2990, - "y": -6513 - } - }, - "attributes": { - "dElevation": -40 - } - }, - { - "delta": { - "nodeXY6": { - "x": 5135, - "y": -11024 - } - }, - "attributes": { - "dElevation": -70 - } - }, - { - "delta": { - "nodeXY6": { - "x": 5003, - "y": -11021 - } - }, - "attributes": { - "dElevation": -60 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1430, + "y": -1698 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2767, + "y": -6178 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY5": { + "x": 3194, + "y": -6835 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2990, + "y": -6513 + } + }, + "attributes": { + "dElevation": -40 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5135, + "y": -11024 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5003, + "y": -11021 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -13210,76 +12950,74 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 1840, - "y": -1673 - } - }, - "attributes": { - "dElevation": -10 - } - }, - { - "delta": { - "nodeXY5": { - "x": 3318, - "y": -7339 - } - }, - "attributes": { - "dElevation": -60 - } - }, - { - "delta": { - "nodeXY5": { - "x": 2599, - "y": -5381 - } - }, - "attributes": { - "dElevation": -30 - } - }, - { - "delta": { - "nodeXY5": { - "x": 2407, - "y": -5583 - } - }, - "attributes": { - "dElevation": -40 - } - }, - { - "delta": { - "nodeXY6": { - "x": 5425, - "y": -11583 - } - }, - "attributes": { - "dElevation": -70 - } - }, - { - "delta": { - "nodeXY6": { - "x": 5441, - "y": -11713 - } - }, - "attributes": { - "dElevation": -60 - } - } - ] - } + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1840, + "y": -1673 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 3318, + "y": -7339 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2599, + "y": -5381 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2407, + "y": -5583 + } + }, + "attributes": { + "dElevation": -40 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5425, + "y": -11583 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5441, + "y": -11713 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] }, "connectsTo": { "connectsTo": [ @@ -13341,32 +13079,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -1081, - "y": -1540 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1081, + "y": -1540 } }, - { - "delta": { - "nodeXY1": { - "x": 127, - "y": -310 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 127, + "y": -310 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] } }, { @@ -13403,32 +13139,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -649, - "y": -1528 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -649, + "y": -1528 } }, - { - "delta": { - "nodeXY1": { - "x": 104, - "y": -361 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 104, + "y": -361 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] } }, { @@ -13465,29 +13199,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": -234, - "y": -1517 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -234, + "y": -1517 } }, - { - "delta": { - "nodeXY1": { - "x": 98, - "y": -333 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 98, + "y": -333 } } - ] - } + } + ] } }, { @@ -13524,32 +13256,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY3": { - "x": 238, - "y": -1545 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 238, + "y": -1545 } }, - { - "delta": { - "nodeXY1": { - "x": 92, - "y": -373 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 92, + "y": -373 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] } }, { @@ -13600,54 +13330,52 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -2640, - "y": -253 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2640, + "y": -253 } }, - { - "delta": { - "nodeXY6": { - "x": -9828, - "y": -17 - } - }, - "attributes": { - "dElevation": -30 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9828, + "y": -17 } }, - { - "delta": { - "nodeXY6": { - "x": -10070, - "y": 57 - } - }, - "attributes": { - "dElevation": -30 + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -10070, + "y": 57 } }, - { - "delta": { - "nodeXY6": { - "x": -9788, - "y": -17 - } - }, - "attributes": { - "dElevation": -20 + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9788, + "y": -17 } + }, + "attributes": { + "dElevation": -20 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -13723,43 +13451,41 @@ "caution": false }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -2452, - "y": -630 - } - }, - "attributes": { - "dElevation": -20 + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2452, + "y": -630 } }, - { - "delta": { - "nodeXY6": { - "x": -14852, - "y": 46 - } - }, - "attributes": { - "dElevation": -50 + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -14852, + "y": 46 } }, - { - "delta": { - "nodeXY6": { - "x": -15059, - "y": -11 - } - }, - "attributes": { - "dElevation": -30 + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY6": { + "x": -15059, + "y": -11 } + }, + "attributes": { + "dElevation": -30 } - ] - } + } + ] }, "connectsTo": { "connectsTo": [ @@ -13821,29 +13547,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -3066, - "y": 1034 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -3066, + "y": 1034 } }, - { - "delta": { - "nodeXY1": { - "x": -305, - "y": 0 - } + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -305, + "y": 0 } } - ] - } + } + ] } }, { @@ -13880,32 +13604,30 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY4": { - "x": -3054, - "y": 644 - } - }, - "attributes": { - "dElevation": -10 + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -3054, + "y": 644 } }, - { - "delta": { - "nodeXY1": { - "x": -323, - "y": 0 - } - }, - "attributes": { - "dElevation": -10 + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -323, + "y": 0 } + }, + "attributes": { + "dElevation": -10 } - ] - } + } + ] } }, { @@ -13942,29 +13664,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY5": { - "x": -6475, - "y": 1452 - } - }, - "attributes": { - "dElevation": -30 + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -6475, + "y": 1452 } }, - { - "delta": { - "nodeXY1": { - "x": -409, - "y": 0 - } + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY1": { + "x": -409, + "y": 0 } } - ] - } + } + ] } }, { @@ -14001,29 +13721,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY5": { - "x": -6515, - "y": 1096 - } - }, - "attributes": { - "dElevation": -30 + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -6515, + "y": 1096 } }, - { - "delta": { - "nodeXY1": { - "x": -369, - "y": 0 - } + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY1": { + "x": -369, + "y": 0 } } - ] - } + } + ] } }, { @@ -14060,29 +13778,27 @@ } }, "nodeList": { - "nodes": { - "NodeXY": [ - { - "delta": { - "nodeXY5": { - "x": -6521, - "y": 752 - } - }, - "attributes": { - "dElevation": -30 + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -6521, + "y": 752 } }, - { - "delta": { - "nodeXY1": { - "x": -363, - "y": -6 - } + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY1": { + "x": -363, + "y": -6 } } - ] - } + } + ] } } ] diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/traveler/aemInputContainingCircleGeometry.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/traveler/aemInputContainingCircleGeometry.xml index d9de3debd..ad8e2f4e6 100644 --- a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/traveler/aemInputContainingCircleGeometry.xml +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/traveler/aemInputContainingCircleGeometry.xml @@ -1 +1 @@ -us.dot.its.jpo.ode.model.OdeTimPayloadtestStreamId10002024-11-05T16:51:14.473Z786402024-09-25T10:00:00.000ZTMCfalse8D442FF4020C6B1A012024-09-25T10:00:00.000Z3PUT172.0.0.1usernamepassword3500021NTCIP12188331118310002024-09-25T10:00:00.0Z2024-09-30T10:00:00.0Z14MessageFrameMessageFrameUPERMessageFrame3113865208D442FF4020C6B1A01null0411535930-104655785011111111111111112024386520864050myregionname00411535930-1046557850111100001111000011110000111100000
411535930-104655785018240
50
004868null
\ No newline at end of file +us.dot.its.jpo.ode.model.OdeTimPayloadtestStreamId10002024-11-05T16:51:14.473Z786402024-09-25T10:00:00.000ZTMCfalse8D442FF4020C6B1A012024-09-25T10:00:00.000Z3PUT172.0.0.1usernamepassword3500021NTCIP12188331118310002024-09-25T10:00:00.0Z2024-09-30T10:00:00.0Z14MessageFrameMessageFrameUPER3113865208D442FF4020C6B1A01null0411535930-104655785011111111111111112024386520864050myregionname00411535930-1046557850111100001111000011110000111100000
411535930-104655785018240
50
004868null
MessageFrame
\ No newline at end of file diff --git a/scripts/tests/udpsender_tim.py b/scripts/tests/udpsender_tim.py index afc542385..1856766df 100644 --- a/scripts/tests/udpsender_tim.py +++ b/scripts/tests/udpsender_tim.py @@ -5,7 +5,15 @@ # Currently set to oim-dev environment's ODE UDP_IP = os.getenv('DOCKER_HOST_IP') UDP_PORT = 47900 -MESSAGE = "005f498718cca69ec1a04600000100105d9b46ec5be401003a0103810040038081d4001f80d07016da410000000000000bbc2b0f775d9b0309c271431fa166ee0a27fff93f136b8205a0a107fb2ef979f4c5bfaeec97e4ad70c2fb36cd9730becdb355cc2fd2a7556b160b98b46ab98ae62c185fa55efb468d5b4000000004e2863f42cddc144ff7980040401262cdd7b809c509f5c62cdd35519c507b9062cdcee129c505cf262cdca5ff9c50432c62cdc5d3d9c502e3e62cdc13e79c501e9262cdbca2d9c5013ee62cdb80359c500e6a62cdb36299c500bc862cdaec1d9c50093c62cdaa2109c5006ea1080203091a859eeebb36006001830001aad27f4ff7580001aad355e39b5880a30029d6585009ef808332d8d9f80c3855151b38c772f765007967ec1170bcb7937f5cb880a25a52863493bcb87570dbcb5abc6bfb2faec606cfa34eb95a24790b2017366d3aabe7729e" + +# Normal TIM message +#MESSAGE = "005f498718cca69ec1a04600000100105d9b46ec5be401003a0103810040038081d4001f80d07016da410000000000000bbc2b0f775d9b0309c271431fa166ee0a27fff93f136b8205a0a107fb2ef979f4c5bfaeec97e4ad70c2fb36cd9730becdb355cc2fd2a7556b160b98b46ab98ae62c185fa55efb468d5b4000000004e2863f42cddc144ff7980040401262cdd7b809c509f5c62cdd35519c507b9062cdcee129c505cf262cdca5ff9c50432c62cdc5d3d9c502e3e62cdc13e79c501e9262cdbca2d9c5013ee62cdb80359c500e6a62cdb36299c500bc862cdaec1d9c50093c62cdaa2109c5006ea1080203091a859eeebb36006001830001aad27f4ff7580001aad355e39b5880a30029d6585009ef808332d8d9f80c3855151b38c772f765007967ec1170bcb7937f5cb880a25a52863493bcb87570dbcb5abc6bfb2faec606cfa34eb95a24790b2017366d3aabe7729e" + +# Complex random example (with computed lanes) +MESSAGE = "001F83A175D472274F43544554205354520A4C16B18193D0D1F9CDF54733FB1BFC0C983FCFC48D24FF97A474B8A754A9112A6F690200192EFCB5FF96D90FA32D4E83FC0C9830B5F5FC150A5059C545235AC20227C697080018815F84759CB3BF452C850424643A30E028544E9C511560A9DD8C2629F0D4470DBB3DDB4316096FC100800809BC746A108C8F26FC4C3208DA0E61091B7429182D3BFC0C98359EA8B4B454C16E606F037AE007A1CDE32000152E6C0ECDF612A90558D403FC049BF003734AC1C240EC930B39E850A7990A808008C033EFC47606FDDFA252B4A9942280C1020C9D818700EC4B4A76680C001D9F981240013111914408214602F8173D850A0D48F09F5D75264929260B5A7D27260B5A65260B56744F43999104E394B5204FF09260B5A7D3E32C5F74A0DB09EA975B8C1724DC92D9201005800092D84A89EF67BC1B27429C710979A5FE0E4C16B4F5EE874A08F2404C40AA60E2A09E79F91602003E5DB0AA9B32A2E0A6F36507F829305ACEE93E6B134C1CCC3C2EF3FA5CB5D02ECE000142002950BD8FB7D02D26BB6CAFCB848BE4A9260B5A7D29260B5A7D19D28125C17566972EA98F7172471344010153D0C21C1D69E158731BFC1C982D69E2E4FEDB544A012D60EDDB5D7569995CCC001CB02000CB8B449E02D39DB1072106F80B79BFC14982D666D178E4A198A3579B12B09915D01723B0000A10002A973AEAF40B82284427D9124DFE024F9230F8DD6AD73490518F80A3B259CF3FC40014001266976FBC88CB08E20EE8AD087EC16463A2B7AC5E62CB83FC9C830B7275F28A3128CDB2491AFF05260B580BDABD3249C784B718EFDC1906727B228001160002B10C89FAF5F0E9BA4F0AC74920F4947402561EBFB6201930424BF9E8112A39CA22519425D8E01001A7A1E0222723B864CB17F849305AD3E92E6884164E2CE7F0A6BD84FE4E38949D300081A01A290029F8111120048308876C910829B04B5148014FC9621814460542FAA24A460FBF82D2CF1A8CE66032A7E6A0807028A04283228610217947C12CE3FFF20CA031F809A2007D242408F0B4510F23D2A2646294D48A41F4F8494C87B58CCFE2983829A707069C17A4BBF23992859B3A528C03ACD3506FF07260B5A7BBA7391E53AAABAA44EA1584A857727A910002C0020391DD0DEDC78D916CBD8D839D52DABDB084919305C975AABA210D2D0CDF7A0ABC1000D3D0D9D071298F916D83FC049B2CFCF26A78A5951B5CC28075CAF1EAC780042808048EB0ADE229537A0161356A3A68175E5809621740382083BEDD5810921240" + +# Complex random example +#MESSAGE = "001F830A752544F94F4354455420535452124C16B4FA27D64F431A94AC28F232828FF05260B5CA82DDFB227A687CA09CFDE87C4B0ED1C8800280204A865BB2C265D1E4F5D3A877C07F8093FC3D820142C4EB15C7AC09CE3356F45A90200118358186A148D3F13220B227C18569099E2D1232A28B5F2579208E479151D45D438BEFF80DB0C08CED3F45A50103103102088C1A44A152889AFA7F62218940E831C20F35EA1232777BF31146022C71408809E5EB7BA1D52835D8A040D83367520C4AB397658B07E21393A041060D049E825C15FCF56AFF05260B58E40024126EDBD550F6D519709FDE4CF880201602008CEE4ACA5DE274975513846DD7AD77F839305AD383175AA8A497954C284E668FFE4F0710D80802810030EAC2535BCD6AE047899B1CE75405C8E6936419C672A85F8900C50B428CA3188CA4E1101B485DEE47349B20CE339542FC5654852A1484C9C0A0B6DEBB81DB91CD26C8338CE550BF31188B6041101F08134A407147800DFCF8E5FE0A4C16B2BF3A3A253269429B3B8198F71B71F8C902002C008005DD1174A86649950714134C54C82F4C0012B9C982D69B5BEADBF1C99BEFD660C6A4200201A7A1ECCA540B60B0AA27F8093AC4BF831472A28ECD2E0203575E8F15F5000818817507D68CC505CF4497E8219CA2288A03C81503120AEB852B7507D68CC505CF4497E2121346A090E8061520293D37841E41530E9BF4214E93C326CF8502830F0C081FF9D71FE064C1BAA780A12351A24D300B6FD25F085703880101600022BE028AC1105C1D5CB0F0E001A42F7F849305AD3E9B408EB43464DC861E6234918C8667857300022C400087E511D765E294CF3507435289D7EBBC2849A4982D69F494982D524C16B4FA36827A1D6C31DFDBE55A627F819307EA49F19AA77C773D119EA690CE094883E0100588001E1832A00950E876B85589726EF3EDFE0E4C16B4F8EB0ECDE8A23F3F9E839831CE316170D2000858080178162BF959EDACD55B2CD3721A1EDFE064C1AEC1B3F02442FEC92E119DFAF82D6EC3884002C0004A9FEDD617613A307F791C6D74FB1A27C451F6139305AD394982D582367260B5A6" print("UDP target IP:", UDP_IP) print("UDP target port:", UDP_PORT)