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 abstract class SsbCommonTicketPart extends SsbTicketPart { /* Number of adult passengers Num (<100) 7,000 Number of child passengers Num (<100) 7,000 "specimen" code Bit Flag 1,000 Class of travel Lookup of 64 options 6,000 TCN: Issuing unique Ticket number 14 AlphaNum 84,000 Year of issue Num (0..9) 4,000 Issuing day, from first of January Num (<512) 9,000 */ protected int numberOfAdults = 0; protected int numberOfChildren = 0; protected boolean specimen = true; protected SsbClass classCode = null; protected String ticketNumber = null; protected int year = 0; protected int day = 0; protected int decodeCommonPart(byte[] bytes) { BitBuffer bits = new ByteBitBuffer(bytes); int offset = 27; // header offset numberOfAdults = bits.getInteger(offset, 7); offset = offset + 7; numberOfChildren = bits.getInteger(offset, 7); offset = offset + 7; specimen = bits.get(offset); offset++; int classIndex = bits.getInteger(offset, 6); classCode = SsbClass.values()[classIndex]; offset = offset + 6; ticketNumber = bits.getChar6String(offset, 84); offset = offset + 84; year = bits.getInteger(offset, 4); offset = offset + 4; day = bits.getInteger(offset, 9); offset = offset + 9; return offset; } protected int encodeCommonPart(byte[] bytes, int offset) throws EncodingFormatException { BitBuffer bits = new ByteBitBuffer(bytes); if (numberOfAdults < 0 || numberOfAdults > 99) { throw new EncodingFormatException("SSB number of adults too big"); } bits.putInteger(offset,7, numberOfAdults); offset = offset + 7; if (numberOfChildren < 0 || numberOfChildren > 99) { throw new EncodingFormatException("SSB number of children too big"); } bits.putInteger(offset, 7, numberOfChildren); offset = offset + 7; bits.put(offset,specimen); offset++; bits.putInteger(offset, 6,classCode.ordinal()); offset = offset + 6; if (ticketNumber.length() > 14) { throw new EncodingFormatException("SSB Ticket Number too long"); } bits.putChar6String(offset, 84, ticketNumber); offset = offset + 84; bits.putInteger(offset, 4, (year % 10)); offset = offset + 4; if (day > 512) { throw new EncodingFormatException("SSB day too long"); } bits.putInteger(offset, 9, day); offset = offset + 9; return offset; } public int getNumberOfAdults() { return numberOfAdults; } public void setNumberOfAdults(int numberOfAdults) { this.numberOfAdults = numberOfAdults; } public int getNumberOfChildren() { return numberOfChildren; } public void setNumberOfChildren(int numberOfChildren) { this.numberOfChildren = numberOfChildren; } public boolean isSpecimen() { return specimen; } public void setSpecimen(boolean specimen) { this.specimen = specimen; } public SsbClass getClassCode() { return classCode; } public void setClassCode(SsbClass classCode) { this.classCode = classCode; } public String getTicketNumber() { return ticketNumber; } public void setTicketNumber(String ticketNumber) { this.ticketNumber = ticketNumber; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public int getDay() { return day; } public void setDay(int day) { this.day = day; } }