From aaeb77f8f58ebc01fd241139439a8d290765e5fc Mon Sep 17 00:00:00 2001 From: CGantert345 <57003061+CGantert345@users.noreply.github.com> Date: Tue, 28 Jul 2020 17:56:59 +0200 Subject: Draft of the new DOSIPAS included --- src/org/uic/ticket/UicRailTicketCoder.java | 205 +++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 src/org/uic/ticket/UicRailTicketCoder.java (limited to 'src/org/uic/ticket/UicRailTicketCoder.java') 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); + + + } + + + + +} -- cgit v1.2.3