summaryrefslogtreecommitdiffstats
path: root/src/org/uic/ticket/UicRailTicketCoder.java
diff options
context:
space:
mode:
authorCGantert345 <57003061+CGantert345@users.noreply.github.com>2020-07-28 17:56:59 +0200
committerCGantert345 <57003061+CGantert345@users.noreply.github.com>2020-07-28 17:56:59 +0200
commitaaeb77f8f58ebc01fd241139439a8d290765e5fc (patch)
tree4ce4a7300af0360d16e35156cde8a164779dd96a /src/org/uic/ticket/UicRailTicketCoder.java
parentbugfix activated day (diff)
downloadUIC-barcode-aaeb77f8f58ebc01fd241139439a8d290765e5fc.tar
UIC-barcode-aaeb77f8f58ebc01fd241139439a8d290765e5fc.tar.gz
UIC-barcode-aaeb77f8f58ebc01fd241139439a8d290765e5fc.tar.bz2
UIC-barcode-aaeb77f8f58ebc01fd241139439a8d290765e5fc.tar.lz
UIC-barcode-aaeb77f8f58ebc01fd241139439a8d290765e5fc.tar.xz
UIC-barcode-aaeb77f8f58ebc01fd241139439a8d290765e5fc.tar.zst
UIC-barcode-aaeb77f8f58ebc01fd241139439a8d290765e5fc.zip
Diffstat (limited to 'src/org/uic/ticket/UicRailTicketCoder.java')
-rw-r--r--src/org/uic/ticket/UicRailTicketCoder.java205
1 files changed, 205 insertions, 0 deletions
diff --git a/src/org/uic/ticket/UicRailTicketCoder.java b/src/org/uic/ticket/UicRailTicketCoder.java
new file mode 100644
index 0000000..82a546f
--- /dev/null
+++ b/src/org/uic/ticket/UicRailTicketCoder.java
@@ -0,0 +1,205 @@
+/*
+ *
+ */
+package org.uic.ticket;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+
+import org.uic.ticket.api.spec.IUicRailTicket;
+import org.uic.ticket.api.utils.Api2OpenAsnEncoder;
+import org.uic.ticket.api.utils.Api2OpenAsnEncoderV2;
+import org.uic.ticket.api.utils.OpenAsn2ApiDecoder;
+import org.uic.ticket.api.utils.OpenAsn2ApiDecoderV2;
+
+
+/**
+ * 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) {
+
+ Api2OpenAsnEncoder uicEncoder = new Api2OpenAsnEncoder();
+
+ return uicEncoder.encode(uicRailTicket);
+
+
+ } else if (version == 2) {
+
+ Api2OpenAsnEncoderV2 uicEncoder = new Api2OpenAsnEncoderV2();
+
+ return uicEncoder.encode(uicRailTicket);
+
+ }
+
+ throw new EncodingFormatException(String.format("Encoding version %d not supported", version));
+
+
+ }
+
+
+ /**
+ * 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) {
+
+ Api2OpenAsnEncoder uicEncoder = new Api2OpenAsnEncoder();
+
+ org.uic.ticket.api.asn.omv1.UicRailTicketData asnUicRailTicketData = uicEncoder.populateToAsn1Model(uicRailTicket);
+
+ outputStream.write(asnUicRailTicketData.encode());
+
+ return;
+
+
+ } else if (version == 2) {
+
+ Api2OpenAsnEncoderV2 uicEncoder = new Api2OpenAsnEncoderV2();
+
+ org.uic.ticket.api.asn.omv2.UicRailTicketData asnUicRailTicketData = uicEncoder.populateToAsn1Model(uicRailTicket);
+
+ outputStream.write(asnUicRailTicketData.encode());
+
+ return;
+
+ }
+
+ throw new EncodingFormatException(String.format("Encoding version %d not supported", version));
+
+ }
+
+ /**
+ * 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) {
+
+ OpenAsn2ApiDecoder uicDecoder = new OpenAsn2ApiDecoder();
+
+ IUicRailTicket uicRailTicket = uicDecoder.decodeFromAsn(byteData);
+
+ return uicRailTicket;
+
+ } else if (version == 2) {
+
+ OpenAsn2ApiDecoderV2 uicDecoder = new OpenAsn2ApiDecoderV2();
+
+ IUicRailTicket uicRailTicket = uicDecoder.decodeFromAsn(byteData);
+
+ return uicRailTicket;
+
+ }
+
+ throw new EncodingFormatException(String.format("Encoding version %d not supported", version));
+
+ }
+
+
+ /**
+ * 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);
+
+
+ }
+
+
+
+
+}