/** * Converts an instance of the type to an equivalent Java native representation, packaged as an * {@link AMQTypedValue} tagged with its AMQP type. * * @param value An instance of the type. * * @return An equivalent Java native representation, tagged with its AMQP type. */ public AMQTypedValue asTypedValue(Object value) { return AMQTypedValue.createAMQTypedValue(this, toNativeValue(value)); }
public int getEncodingSize() { int size = 0; for( T obj : this) { size += AMQTypedValue.toTypedValue(obj).getEncodingSize()+1; } return size; }
public void writeToBuffer(final QpidByteBuffer buffer) { buffer.putInt(getEncodingSize()); for( T obj : this) { AMQTypedValue.toTypedValue(obj).writeToBuffer(buffer); } }
public static FieldArray<?> readFromBuffer(final QpidByteBuffer buffer) { ArrayList<Object> result = new ArrayList<>(); int size = buffer.getInt(); try (QpidByteBuffer slicedBuffer = buffer.view(0, size)) { buffer.position(buffer.position() + size); while (slicedBuffer.hasRemaining()) { result.add(AMQTypedValue.readFromBuffer(slicedBuffer).getValue()); } } return new FieldArray<>(result); }
public static Map<String, Object> convertToMap(final FieldTable fieldTable) { final Map<String, Object> map = new HashMap<>(); if (fieldTable != null) { Map<String, AMQTypedValue> properties = fieldTable.getProperties(); if (properties != null) { for (Map.Entry<String, AMQTypedValue> e : properties.entrySet()) { Object val = e.getValue().getValue(); if (val instanceof AMQShortString) { val = val.toString(); } else if (val instanceof FieldTable) { val = FieldTable.convertToMap((FieldTable) val); } map.put(e.getKey(), val); } } } return map; }
private void decode() { if (_encodedSize > 0 && _encodedForm != null) { if (!_properties.isEmpty()) { _properties.clear(); } _encodedForm.mark(); try { do { final String key = AMQShortString.readAMQShortStringAsString(_encodedForm); checkPropertyName(key); AMQTypedValue value = AMQTypedValue.readFromBuffer(_encodedForm); _properties.put(key, value); } while (_encodedForm.hasRemaining()); } finally { _encodedForm.reset(); } } }
FieldTable(Map<String, Object> properties, boolean strictAMQP) { _strictAMQP = strictAMQP; long size = 0; Map<String, AMQTypedValue> m = new LinkedHashMap<>(); if (properties != null && !properties.isEmpty()) { m = new LinkedHashMap<>(); for (Map.Entry<String, Object> e : properties.entrySet()) { String key = e.getKey(); Object val = e.getValue(); checkPropertyName(key); AMQTypedValue value = getAMQTypeValue(val); size += EncodingUtils.encodedShortStringLength(e.getKey()) + 1 + value.getEncodingSize(); m.put(e.getKey(), value); } } _properties = m; _encodedSize = size; _decoded = true; }
private void putDataInBuffer(QpidByteBuffer buffer) { if (_encodedForm != null) { byte[] encodedCopy = new byte[_encodedForm.remaining()]; _encodedForm.copyTo(encodedCopy); buffer.put(encodedCopy); } else if (!_properties.isEmpty()) { for (final Map.Entry<String, AMQTypedValue> me : _properties.entrySet()) { EncodingUtils.writeShortStringBytes(buffer, me.getKey()); me.getValue().writeToBuffer(buffer); } } }
public Object get(String key) { checkPropertyName(key); AMQTypedValue value = getProperty(key); if (value != null && value != NOT_PRESENT) { return value.getValue(); } else { return null; } }
private AMQTypedValue findValueForKey(String key) { byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8); _encodedForm.mark(); try { while (_encodedForm.hasRemaining()) { final byte[] bytes = AMQShortString.readAMQShortStringAsBytes(_encodedForm); if (Arrays.equals(keyBytes, bytes)) { return AMQTypedValue.readFromBuffer(_encodedForm); } else { AMQType type = AMQTypeMap.getType(_encodedForm.get()); type.skip(_encodedForm); } } } finally { _encodedForm.reset(); } return NOT_PRESENT; }
public static AMQTypedValue readFromBuffer(QpidByteBuffer buffer) { AMQType type = AMQTypeMap.getType(buffer.get()); switch(type) { case LONG: return new LongTypedValue(buffer); case INT: int value = buffer.getInt(); return createAMQTypedValue(value); default: return new GenericTypedValue(type, buffer); } }
return AMQTypedValue.createAMQTypedValue((int) object); return AMQTypedValue.createAMQTypedValue((long) object);