summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/uic/barcode/ssbFrame/SsbReservation.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/uic/barcode/ssbFrame/SsbReservation.java')
-rw-r--r--src/main/java/org/uic/barcode/ssbFrame/SsbReservation.java237
1 files changed, 237 insertions, 0 deletions
diff --git a/src/main/java/org/uic/barcode/ssbFrame/SsbReservation.java b/src/main/java/org/uic/barcode/ssbFrame/SsbReservation.java
new file mode 100644
index 0000000..c70c2d1
--- /dev/null
+++ b/src/main/java/org/uic/barcode/ssbFrame/SsbReservation.java
@@ -0,0 +1,237 @@
+package org.uic.barcode.ssbFrame;
+
+import org.uic.barcode.asn1.uper.BitBuffer;
+import org.uic.barcode.asn1.uper.ByteBitBuffer;
+import org.uic.barcode.ticket.EncodingFormatException;
+
+public class SsbReservation extends SsbCommonTicketPart {
+
+ private SsbStations stations = new SsbStations();
+
+ private int ticketSubType = 0;
+
+ private int departureDate = 0;
+
+ private int departureTime = 0;
+
+ private String train = null;
+
+ private int coach = 0;
+
+ private String place = null;
+
+ private boolean overbooking = false;
+
+ private int infoCode = 0;
+
+ private String text = null;
+
+
+
+
+
+ @Override
+ protected int decodeContent(byte[] bytes, int offset) {
+
+ offset = offset + decodeCommonPart(bytes);
+
+ BitBuffer bits = new ByteBitBuffer(bytes);
+
+ ticketSubType = bits.getInteger(offset, 2);
+ offset = offset + 2;
+
+ stations = new SsbStations();
+ offset = stations.decode(offset, bytes);
+
+ /*
+ * Departure date : First day of validity from the issuing date Num (<367) 9,000
+ Departure Time Num (<1440) 11,000
+ Train number AlphaNum + 5 Car 30,000
+ Coach number Num (< 999) 10,000
+ Seat/berth number 3 AlphaNum 18,000
+ Overbooking indicator Bit Flag 1,000
+ Information Messages Num (< 9999) 14,000
+ Open Tekst 6 Bit ASCII (27 Car) 162,000
+ */
+
+ departureDate = bits.getInteger(offset, 9);
+ offset = offset + 9;
+
+ departureTime = bits.getInteger(offset, 11);
+ offset = offset + 11;
+
+ train = bits.getChar6String(offset, 30);
+ offset = offset + 30;
+
+ coach = bits.getInteger(offset, 10);
+ offset = offset + 10;
+
+ place = bits.getChar6String(offset, 18);
+ offset = offset + 18;
+
+ overbooking = bits.get(offset);
+ offset++;
+
+ infoCode = bits.getInteger(offset, 14);
+ offset = offset + 14;
+
+ text = bits.getChar6String(offset, 162);
+ offset = offset + 162;
+
+ return offset;
+ }
+
+ @Override
+ protected int encodeContent(byte[] bytes, int offset) throws EncodingFormatException {
+
+ offset = offset + encodeCommonPart(bytes, offset);
+
+ BitBuffer bits = new ByteBitBuffer(bytes);
+
+ if (ticketSubType < 0 || ticketSubType > 3) {
+ throw new EncodingFormatException("SSB pass type too big");
+ }
+ bits.putInteger(offset, 2,ticketSubType);
+ offset = offset + 2;
+
+ offset = stations.encode(offset, bytes);
+
+ /*
+ * Departure date : First day of validity from the issuing date Num (<367) 9,000
+ Departure Time Num (<1440) 11,000
+ Train number AlphaNum + 5 Car 30,000
+ Coach number Num (< 999) 10,000
+ Seat/berth number 3 AlphaNum 18,000
+ Overbooking indicator Bit Flag 1,000
+ Information Messages Num (< 9999) 14,000
+ Open Tekst 6 Bit ASCII (27 Car) 162,000
+ */
+
+ if (departureDate < 0 || departureDate > 512) {
+ throw new EncodingFormatException("SSB departure date too big");
+ }
+ bits.putInteger(offset, 9, departureDate);
+ offset = offset + 9;
+
+ if (departureTime < 0 || departureTime > 1440) {
+ throw new EncodingFormatException("SSB departure time too big");
+ }
+ bits.putInteger(offset, 11,departureTime);
+ offset = offset + 11;
+
+ if (train.length() > 5) {
+ throw new EncodingFormatException("SSB train too big");
+ }
+ bits.putChar6String(offset, 30,train);
+ offset = offset + 30;
+
+ if (coach < 0 || coach > 999) {
+ throw new EncodingFormatException("SSB coach too big");
+ }
+ bits.putInteger(offset, 10,coach);
+ offset = offset + 10;
+
+ if (place.length() > 3) {
+ throw new EncodingFormatException("SSB coach too big");
+ }
+ bits.putChar6String(offset, 18,place);
+ offset = offset + 18;
+
+ bits.put(offset, overbooking);
+ offset++;
+
+ if (infoCode < 0 || infoCode > 9999) {
+ throw new EncodingFormatException("SSB info code too big");
+ }
+ bits.putInteger(offset, 14, infoCode);
+ offset = offset + 14;
+
+ if (text.length() > 27) {
+ throw new EncodingFormatException("SSB text too big");
+ }
+ bits.putChar6String(offset, 162, text);
+ offset = offset + 162;
+
+ return offset;
+
+ }
+
+ public SsbStations getStations() {
+ return stations;
+ }
+
+ public int getTicketSubType() {
+ return ticketSubType;
+ }
+
+ public void setTicketSubType(int ticketSubType) {
+ this.ticketSubType = ticketSubType;
+ }
+
+ public int getDepartureDate() {
+ return departureDate;
+ }
+
+ public void setDepartureDate(int departureDate) {
+ this.departureDate = departureDate;
+ }
+
+ public int getDepartureTime() {
+ return departureTime;
+ }
+
+ public void setDepartureTime(int departureTime) {
+ this.departureTime = departureTime;
+ }
+
+ public String getTrain() {
+ return train;
+ }
+
+ public void setTrain(String train) {
+ this.train = train;
+ }
+
+ public int getCoach() {
+ return coach;
+ }
+
+ public void setCoach(int coach) {
+ this.coach = coach;
+ }
+
+ public String getPlace() {
+ return place;
+ }
+
+ public void setPlace(String place) {
+ this.place = place;
+ }
+
+ public boolean isOverbooking() {
+ return overbooking;
+ }
+
+ public void setOverbooking(boolean overbooking) {
+ this.overbooking = overbooking;
+ }
+
+ public int getInfoCode() {
+ return infoCode;
+ }
+
+ public void setInfoCode(int infoCode) {
+ this.infoCode = infoCode;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ }
+
+
+
+}