@Override public int unpack(byte[] inStream, int offset, Map<String, String> fields) throws ISOException { int packedSize = interpretter.getPackedLength(size); if (inStream.length - offset < packedSize) { throw new ISOException(String.format("Field [%s] at offset [%d]:Expecting %d bytes found %d", getName(),offset,packedSize, inStream.length - offset)); } String interprettedvalue = interpretter.uninterpret(inStream, offset, size); if (getValue() != null) { if (!getValue().equals(interprettedvalue)) { throw new ISOException(String.format("Field [%s] at offset [%d]:Expected %s but found %s", getName(),offset,getValue(), interprettedvalue)); } } fields.put(getName(),interprettedvalue); value = interprettedvalue; return offset + packedSize; }
@Override public byte[] pack(Map<String, String> fields) throws ISOException { if (value == null || value.equals("")) { // if field is not set, make sure to send the delimiter to indicate // its presence. return new byte[] { delimiter.byteValue() }; } if (value.length() <= maxSize) { byte[] b = new byte[interpreter.getPackedLength(value.length() + 1)]; interpreter.interpret(value, b, 0); b[b.length - 1] = delimiter.byteValue(); return b; } throw new ISOException(String.format("Size [%d] is greater than maxSize[%d] ", value.length(), maxSize)); }
public void testReversability() throws Exception { String origin = "Abc123:.-"; byte[] b = new byte[origin.length()]; inter.interpret(origin, b, 0); assertEquals(origin, inter.uninterpret(b, 0, b.length)); } }
private int getUninterpretLength(int length, Interpreter interpreter) { int lengthAdjusted = length + length % 2; return length * (lengthAdjusted / interpreter.getPackedLength(lengthAdjusted)); }
/** * @param c - the Component to unpack * @param b - binary image * @param offset - starting offset within the binary image * @return consumed bytes * @exception ISOException */ public int unpack (ISOComponent c, byte[] b, int offset) throws ISOException { int len = prefixer.decodeLength(b, offset); c.setValue (interpreter.uninterpret(b, offset + 2, len)); return 2 + (++len >> 1); } public void unpack (ISOComponent c, InputStream in)
public void testInterpret() throws Exception { byte[] b = new byte[3]; inter.interpret("123", b, 0); TestUtils.assertEquals(new byte[] {49, 50, 51}, b); }
public void testReversability() throws Exception { String origin = "Abc123:.-"; byte[] b = new byte[origin.length()]; inter.interpret(origin, b, 0); assertEquals(origin, inter.uninterpret(b, 0, b.length)); } }
/** * Returns the prefixer's packed length and the interpreter's packed length. */ public int getMaxPackedLength() { return prefixer.getPackedLength() + interpreter.getPackedLength(getLength()); }
public void testUninterpret() throws Exception { byte[] b = new byte[] {49, 50, 51}; assertEquals("123", inter.uninterpret(b, 0, 3)); }
public void testInterpret() throws Exception { byte[] b = new byte[3]; inter.interpret("123", b, 0); TestUtils.assertEquals(new byte[] {(byte)0xF1, (byte)0xF2, (byte)0xF3}, b); }
throw new ISOException("Field length " + len + " too long. Max: " + getLength()); int packedLen = interpreter.getPackedLength(len); String unpacked = interpreter.uninterpret(readBytes (in, packedLen), 0, len); c.setValue(unpacked); in.skip(interpreter.getPackedLength(getLength()) - packedLen); } catch(ISOException e)
@Override public byte[] hexDump(String prefix, Map<String, String> setfields) { int numberOfPackedBytes = interpreter.getPackedLength(getValue().length()); String compliant = compliance.makeCompliant(getValue()); byte[] temp = new byte[numberOfPackedBytes+1];// +1 for the delimiter try { interpreter.interpret(compliant, temp, 0); temp[temp.length-1]= delimiter.byteValue(); } catch (ISOException e) { return null; } return temp; }
public void testReversability() throws Exception { String origin = "Abc123:.-"; byte[] b = new byte[origin.length()]; inter.interpret(origin, b, 0); assertEquals(origin, inter.uninterpret(b, 0, b.length)); } }
/** * Returns the prefixer's packed length and the interpreter's packed length. */ public int getMaxPackedLength() { return prefixer.getPackedLength() + interpreter.getPackedLength(getLength()); }
public void testUninterpret() throws Exception { byte[] b = new byte[] {49, 50, 51}; assertEquals("123", inter.uninterpret(b, 0, 3)); }
public void testInterpret() throws Exception { byte[] b = new byte[3]; inter.interpret("123", b, 0); TestUtils.assertEquals(new byte[] {49, 50, 51}, b); }
/** * Unpacks the byte array into the component. * @param c The component to unpack into. * @param b The byte array to unpack. * @param offset The index in the byte array to start unpacking from. * @return The number of bytes consumed unpacking the component. */ public int unpack(ISOComponent c, byte[] b, int offset) throws ISOException { try { int len = prefixer.decodeLength(b, offset); if (len == -1) { // The prefixer doesn't know how long the field is, so use // maxLength instead len = getLength(); } else if (getLength() > 0 && len > getLength()) throw new ISOException("Field length " + len + " too long. Max: " + getLength()); int lenLen = prefixer.getPackedLength(); String unpacked = interpreter.uninterpret(b, offset + lenLen, len); c.setValue(unpacked); return lenLen + interpreter.getPackedLength(len); } catch(Exception e) { throw new ISOException(makeExceptionMessage(c, "unpacking"), e); } }
@Override public byte[] hexDump(String prefix,Map<String, String> setfields) { int numberOfPackedBytes = interpretter.getPackedLength(getValue().length()); String compliant = compliance.makeCompliant(getValue()); byte[] temp = new byte[numberOfPackedBytes]; try { interpretter.interpret(compliant, temp, 0); } catch (ISOException e) { // TODO Auto-generated catch block return null; } return temp; } @Override
/** * Returns the prefixer's packed length and the interpreter's packed length. */ public int getMaxPackedLength() { return prefixer.getPackedLength() + interpreter.getPackedLength(getLength()); }
public void testUninterpret() throws Exception { byte[] b = new byte[] {(byte)0xF1, (byte)0xF2, (byte)0xF3}; assertEquals("123", inter.uninterpret(b, 0, 3)); }