diff options
Diffstat (limited to 'src/org/uic/ticket/api/UicRailTicketCoder.java')
-rw-r--r-- | src/org/uic/ticket/api/UicRailTicketCoder.java | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/src/org/uic/ticket/api/UicRailTicketCoder.java b/src/org/uic/ticket/api/UicRailTicketCoder.java new file mode 100644 index 0000000..0221526 --- /dev/null +++ b/src/org/uic/ticket/api/UicRailTicketCoder.java @@ -0,0 +1,171 @@ +/*
+ *
+ */
+package org.uic.ticket.api;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.uic.ticket.api.asn.omv1.UicRailTicketData;
+import org.uic.ticket.api.spec.IUicRailTicket;
+import org.uic.ticket.api.utils.Api2OpenAsnEncoder;
+import org.uic.ticket.api.utils.OpenAsn2ApiDecoder;
+
+
+/**
+ * The Class UicRailTicketCoder.
+ */
+public class UicRailTicketCoder {
+
+
+ /**
+ * encode an UicRailTicket to asn.1 format using PER unaligned encoding
+ *
+ * @param outputStream the output stream for the encoded data
+ * @param uicRailTicket the uic rail ticket to be encoded
+ * @param version version of the asn1 specification
+ * @throws IOException signals that an I/O exception has occurred.
+ * @throws EncodingFormatException signals that a format rule of the asn.1 specification was violated.
+ */
+ public byte[] encodeTag(IUicRailTicket uicRailTicket, int version) throws IOException, EncodingFormatException {
+
+
+ byte[] content = encode(uicRailTicket, version);
+
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+
+ String idTag = "U_FLEX";
+ String versionId = "01";
+ int length = 8;
+
+ //size of data
+ length = length + content.length;
+
+ //size of length element
+ length = length + 4;
+ String lengthElement = String.format("%04d",length);
+
+ outputStream.write(idTag.getBytes());
+ outputStream.write(versionId.getBytes());
+ outputStream.write(lengthElement.getBytes());
+
+ outputStream.write(content);
+
+ return outputStream.toByteArray();
+
+}
+
+
+
+
+ /**
+ * encode an UicRailTicket to asn.1 format using PER unaligned encoding
+ *
+ * @param outputStream the output stream for the encoded data
+ * @param uicRailTicket the uic rail ticket to be encoded
+ * @param version of the asn1 specification
+ * @throws IOException signals that an I/O exception has occurred.
+ * @throws EncodingFormatException signals that a format rule of the asn.1 specification was violated.
+ */
+ public byte[] encode (IUicRailTicket uicRailTicket, int version) throws IOException, EncodingFormatException{
+
+ if (version != 1) {
+ throw new EncodingFormatException(String.format("Encoding version %d not supported", version));
+ }
+
+ Api2OpenAsnEncoder uicEncoder = new Api2OpenAsnEncoder();
+
+ UicRailTicketData asnUicRailTicketData = uicEncoder.populateToAsn1Model(uicRailTicket);
+
+ return asnUicRailTicketData.encode();
+
+ }
+
+
+ /**
+ * encode an UicRailTicket to asn.1 format using PER unaligned encoding
+ *
+ * @param outputStream the output stream for the encoded data
+ * @param uicRailTicket the uic rail ticket to be encoded
+ * @param version of the asn1 specification
+ * @throws IOException signals that an I/O exception has occurred.
+ * @throws EncodingFormatException signals that a format rule of the asn.1 specification was violated.
+ */
+ public void encode ( ByteArrayOutputStream outputStream, IUicRailTicket uicRailTicket, int version) throws IOException, EncodingFormatException{
+
+ if (version != 1) {
+ throw new EncodingFormatException(String.format("Encoding version %d not supported", version));
+ }
+
+ Api2OpenAsnEncoder uicEncoder = new Api2OpenAsnEncoder();
+
+ UicRailTicketData asnUicRailTicketData = uicEncoder.populateToAsn1Model(uicRailTicket);
+
+ outputStream.write(asnUicRailTicketData.encode());
+
+ return;
+
+ }
+
+ /**
+ * Decode a rail ticket from asn.1 unaligned PER encoded data.
+ *
+ * @param byteData the asn.1 PER encoded byte data
+ * @return the decoded uic rail ticket
+ * @throws IOException signals that an I/O exception has occurred.
+ * @throws EncodingFormatException
+ */
+ public IUicRailTicket decodeFromAsn (byte[] byteData, int version) throws IOException, EncodingFormatException{
+
+ if (version != 1) {
+ throw new EncodingFormatException(String.format("Encoding version %d not supported", version));
+ }
+
+ UicRailTicketData asnUicRailTicketData = UicRailTicketData.decode(byteData);
+
+ OpenAsn2ApiDecoder uicDecoder = new OpenAsn2ApiDecoder();
+
+ IUicRailTicket uicRailTicket = uicDecoder.decodeFromAsn(asnUicRailTicketData);
+
+ return uicRailTicket;
+
+ }
+
+
+ /**
+ * Decode a rail ticket from asn.1 unaligned PER encoded data.
+ * @param version of the asn1 specification
+ * @param input stream of the asn.1 PER encoded data
+ * @return the decoded uic rail ticket
+ * @throws IOException signals that an I/O exception has occurred.
+ * @throws EncodingFormatException
+ */
+ public IUicRailTicket decodeFromAsn (InputStream input, int version) throws IOException, EncodingFormatException{
+
+ if (version != 1) {
+ throw new EncodingFormatException(String.format("Encoding version %d not supported", version));
+ }
+
+ ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+
+ int nRead;
+ byte[] data = new byte[16384];
+
+ while ((nRead = input.read(data, 0, data.length)) != -1) {
+ buffer.write(data, 0, nRead);
+ }
+
+ buffer.flush();
+
+ byte[] byteData = buffer.toByteArray();
+
+ return decodeFromAsn (byteData, version);
+
+
+ }
+
+
+
+
+}
|