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 SsbGroup extends SsbCommonTicketPart { protected int firstDayOfValidity = 0; protected int lastDayOfValidity = 0; protected boolean isReturnJourney = false; private int infoCode = 0; private String text = null; private SsbStations stations = new SsbStations(); private String groupName = null; private int counterMarkNumber = 0; @Override protected int decodeContent(byte[] bytes, int offset) { offset = offset + decodeCommonPart(bytes); BitBuffer bits = new ByteBitBuffer(bytes); isReturnJourney = bits.get(offset); offset = offset++; firstDayOfValidity = bits.getInteger(offset, 9); offset = offset + 9; lastDayOfValidity = bits.getInteger(offset, 9); offset = offset + 9; offset = stations.decode(offset, bytes); groupName = bits.getChar6String(offset, 72); offset = offset + 72; counterMarkNumber = bits.getInteger(offset, 9); offset = offset + 9; infoCode = bits.getInteger(offset, 14); offset = offset + 14; text = bits.getChar6String(offset, 144); offset = offset + 144; return offset; } @Override protected int encodeContent(byte[] bytes, int offset) throws EncodingFormatException { offset = offset + encodeCommonPart(bytes, offset); BitBuffer bits = new ByteBitBuffer(bytes); bits.put(offset, isReturnJourney); offset = offset++; if (firstDayOfValidity < 0 || firstDayOfValidity > 511) { throw new EncodingFormatException("SSB first day of validity too big"); } bits.putInteger(offset, 9, firstDayOfValidity); offset = offset + 9; if (lastDayOfValidity < 0 || lastDayOfValidity > 511) { throw new EncodingFormatException("SSB last day of validity too big"); } bits.putInteger(offset, 9, lastDayOfValidity); offset = offset + 9; offset = stations.encode(offset, bytes); if (groupName.length() > 12) { throw new EncodingFormatException("SSB group name too big"); } bits.putChar6String(offset, 72,groupName); offset = offset + 72; if (counterMarkNumber < 0 || counterMarkNumber > 246) { throw new EncodingFormatException("SSB number of countermark too big"); } bits.putInteger(offset, 9,counterMarkNumber); offset = offset + 9; if (infoCode < 0 || infoCode > 9999) { throw new EncodingFormatException("SSB info code too big"); } bits.putInteger(offset, 14, infoCode); offset = offset + 14; if (text.length() > 24) { throw new EncodingFormatException("SSB text too big"); } bits.putChar6String(offset, 144, text); offset = offset + 144; return offset; } public int getFirstDayOfValidity() { return firstDayOfValidity; } public void setFirstDayOfValidity(int firstDayOfValidity) { this.firstDayOfValidity = firstDayOfValidity; } public int getLastDayOfValidity() { return lastDayOfValidity; } public void setLastDayOfValidity(int lastDayOfValidity) { this.lastDayOfValidity = lastDayOfValidity; } public boolean isReturnJourney() { return isReturnJourney; } public void setReturnJourney(boolean isReturnJourney) { this.isReturnJourney = isReturnJourney; } 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; } public SsbStations getStations() { return stations; } public String getGroupName() { return groupName; } public void setGroupName(String groupName) { this.groupName = groupName; } public int getCounterMarkNumber() { return counterMarkNumber; } public void setCounterMarkNumber(int counterMarkNumber) { this.counterMarkNumber = counterMarkNumber; } }