All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.apache.qpid.framing.BasicContentHeaderProperties Maven / Gradle / Ivy
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.qpid.framing;
import java.io.DataOutput;
import java.io.IOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.qpid.bytebuffer.QpidByteBuffer;
import org.apache.qpid.codec.MarkableDataInput;
import org.apache.qpid.transport.ByteBufferSender;
public class BasicContentHeaderProperties
{
//persistent & non-persistent constants, values as per JMS DeliveryMode
public static final byte NON_PERSISTENT = 1;
public static final byte PERSISTENT = 2;
private static final Logger _logger = LoggerFactory.getLogger(BasicContentHeaderProperties.class);
private static final AMQShortString ZERO_STRING = null;
private AMQShortString _contentType;
private AMQShortString _encoding;
private FieldTable _headers;
private byte _deliveryMode;
private byte _priority;
private AMQShortString _correlationId;
private AMQShortString _replyTo;
private long _expiration;
private AMQShortString _messageId;
private long _timestamp;
private AMQShortString _type;
private AMQShortString _userId;
private AMQShortString _appId;
private AMQShortString _clusterId;
private int _propertyFlags = 0;
private static final int CONTENT_TYPE_MASK = 1 << 15;
private static final int ENCODING_MASK = 1 << 14;
private static final int HEADERS_MASK = 1 << 13;
private static final int DELIVERY_MODE_MASK = 1 << 12;
private static final int PRIORITY_MASK = 1 << 11;
private static final int CORRELATION_ID_MASK = 1 << 10;
private static final int REPLY_TO_MASK = 1 << 9;
private static final int EXPIRATION_MASK = 1 << 8;
private static final int MESSAGE_ID_MASK = 1 << 7;
private static final int TIMESTAMP_MASK = 1 << 6;
private static final int TYPE_MASK = 1 << 5;
private static final int USER_ID_MASK = 1 << 4;
private static final int APPLICATION_ID_MASK = 1 << 3;
private static final int CLUSTER_ID_MASK = 1 << 2;
private QpidByteBuffer _encodedForm;
public BasicContentHeaderProperties(BasicContentHeaderProperties other)
{
if(other._headers != null)
{
_headers = new FieldTable(other._headers);
}
_contentType = other._contentType;
_encoding = other._encoding;
_deliveryMode = other._deliveryMode;
_priority = other._priority;
_correlationId = other._correlationId;
_replyTo = other._replyTo;
_expiration = other._expiration;
_messageId = other._messageId;
_timestamp = other._timestamp;
_type = other._type;
_userId = other._userId;
_appId = other._appId;
_clusterId = other._clusterId;
_propertyFlags = other._propertyFlags;
}
public BasicContentHeaderProperties()
{
}
public synchronized int getPropertyListSize()
{
if(useEncodedForm())
{
return _encodedForm.remaining();
}
else
{
int size = 0;
if ((_propertyFlags & (CONTENT_TYPE_MASK)) != 0)
{
size += EncodingUtils.encodedShortStringLength(_contentType);
}
if ((_propertyFlags & ENCODING_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_encoding);
}
if ((_propertyFlags & HEADERS_MASK) != 0)
{
size += EncodingUtils.encodedFieldTableLength(_headers);
}
if ((_propertyFlags & DELIVERY_MODE_MASK) != 0)
{
size += 1;
}
if ((_propertyFlags & PRIORITY_MASK) != 0)
{
size += 1;
}
if ((_propertyFlags & CORRELATION_ID_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_correlationId);
}
if ((_propertyFlags & REPLY_TO_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_replyTo);
}
if ((_propertyFlags & EXPIRATION_MASK) != 0)
{
if (_expiration == 0L)
{
size += EncodingUtils.encodedShortStringLength(ZERO_STRING);
}
else
{
size += EncodingUtils.encodedShortStringLength(_expiration);
}
}
if ((_propertyFlags & MESSAGE_ID_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_messageId);
}
if ((_propertyFlags & TIMESTAMP_MASK) != 0)
{
size += 8;
}
if ((_propertyFlags & TYPE_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_type);
}
if ((_propertyFlags & USER_ID_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_userId);
}
if ((_propertyFlags & APPLICATION_ID_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_appId);
}
if ((_propertyFlags & CLUSTER_ID_MASK) != 0)
{
size += EncodingUtils.encodedShortStringLength(_clusterId);
}
return size;
}
}
public void setPropertyFlags(int propertyFlags)
{
_propertyFlags = propertyFlags;
}
public int getPropertyFlags()
{
return _propertyFlags;
}
public synchronized void writePropertyListPayload(DataOutput buffer) throws IOException
{
if(useEncodedForm())
{
int offset;
int length = _encodedForm.remaining();;
byte[] array;
if(_encodedForm.hasArray())
{
array = _encodedForm.array();
offset = _encodedForm.arrayOffset() + _encodedForm.position();
}
else
{
array = new byte[length];
_encodedForm.copyTo(array);
offset = 0;
}
buffer.write(array, offset, length);
}
else
{
if ((_propertyFlags & (CONTENT_TYPE_MASK)) != 0)
{
EncodingUtils.writeShortStringBytes(buffer, _contentType);
}
if ((_propertyFlags & ENCODING_MASK) != 0)
{
EncodingUtils.writeShortStringBytes(buffer, _encoding);
}
if ((_propertyFlags & HEADERS_MASK) != 0)
{
EncodingUtils.writeFieldTableBytes(buffer, _headers);
}
if ((_propertyFlags & DELIVERY_MODE_MASK) != 0)
{
buffer.writeByte(_deliveryMode);
}
if ((_propertyFlags & PRIORITY_MASK) != 0)
{
buffer.writeByte(_priority);
}
if ((_propertyFlags & CORRELATION_ID_MASK) != 0)
{
EncodingUtils.writeShortStringBytes(buffer, _correlationId);
}
if ((_propertyFlags & REPLY_TO_MASK) != 0)
{
EncodingUtils.writeShortStringBytes(buffer, _replyTo);
}
if ((_propertyFlags & EXPIRATION_MASK) != 0)
{
if (_expiration == 0L)
{
EncodingUtils.writeShortStringBytes(buffer, ZERO_STRING);
}
else
{
EncodingUtils.writeLongAsShortString(buffer, _expiration);
}
}
if ((_propertyFlags & MESSAGE_ID_MASK) != 0)
{
EncodingUtils.writeShortStringBytes(buffer, _messageId);
}
if ((_propertyFlags & TIMESTAMP_MASK) != 0)
{
EncodingUtils.writeTimestamp(buffer, _timestamp);
}
if ((_propertyFlags & TYPE_MASK) != 0)
{
EncodingUtils.writeShortStringBytes(buffer, _type);
}
if ((_propertyFlags & USER_ID_MASK) != 0)
{
EncodingUtils.writeShortStringBytes(buffer, _userId);
}
if ((_propertyFlags & APPLICATION_ID_MASK) != 0)
{
EncodingUtils.writeShortStringBytes(buffer, _appId);
}
if ((_propertyFlags & CLUSTER_ID_MASK) != 0)
{
EncodingUtils.writeShortStringBytes(buffer, _clusterId);
}
}
}
public int read(MarkableDataInput input) throws IOException
{
_propertyFlags = input.readUnsignedShort();
int length = 2;
if ((_propertyFlags & (CONTENT_TYPE_MASK)) != 0)
{
length++;
_contentType = EncodingUtils.readAMQShortString(input);
if(_contentType != null)
{
length += _contentType.length();
}
}
if ((_propertyFlags & ENCODING_MASK) != 0)
{
length++;
_encoding = EncodingUtils.readAMQShortString(input);
if(_encoding != null)
{
length += _encoding.length();
}
}
if ((_propertyFlags & HEADERS_MASK) != 0)
{
int fieldTableLength = input.readInt();
_headers = new FieldTable(input, fieldTableLength);
length += 4;
length += fieldTableLength;
}
if ((_propertyFlags & DELIVERY_MODE_MASK) != 0)
{
_deliveryMode = input.readByte();
length++;
}
if ((_propertyFlags & PRIORITY_MASK) != 0)
{
_priority = input.readByte();
length++;
}
if ((_propertyFlags & CORRELATION_ID_MASK) != 0)
{
length++;
_correlationId = EncodingUtils.readAMQShortString(input);
if(_correlationId != null)
{
length += _correlationId.length();
}
}
if ((_propertyFlags & REPLY_TO_MASK) != 0)
{
length++;
_replyTo = EncodingUtils.readAMQShortString(input);
if(_replyTo != null)
{
length += _replyTo.length();
}
}
if ((_propertyFlags & EXPIRATION_MASK) != 0)
{
length++;
AMQShortString expiration = EncodingUtils.readAMQShortString(input);
if(expiration != null)
{
length += expiration.length();
_expiration = Long.parseLong(expiration.toString());
}
}
if ((_propertyFlags & MESSAGE_ID_MASK) != 0)
{
length++;
_messageId = EncodingUtils.readAMQShortString(input);
if(_messageId != null)
{
length += _messageId.length();
}
}
if ((_propertyFlags & TIMESTAMP_MASK) != 0)
{
_timestamp = input.readLong();
length += 8;
}
if ((_propertyFlags & TYPE_MASK) != 0)
{
length++;
_type = EncodingUtils.readAMQShortString(input);
if(_type != null)
{
length += _type.length();
}
}
if ((_propertyFlags & USER_ID_MASK) != 0)
{
length++;
_userId = EncodingUtils.readAMQShortString(input);
if(_userId != null)
{
length += _userId.length();
}
}
if ((_propertyFlags & APPLICATION_ID_MASK) != 0)
{
length++;
_appId = EncodingUtils.readAMQShortString(input);
if(_appId != null)
{
length += _appId.length();
}
}
if ((_propertyFlags & CLUSTER_ID_MASK) != 0)
{
length++;
_clusterId = EncodingUtils.readAMQShortString(input);
if(_clusterId != null)
{
length += _clusterId.length();
}
}
return length;
}
public synchronized long writePropertyListPayload(final ByteBufferSender sender) throws IOException
{
if(useEncodedForm())
{
final QpidByteBuffer duplicate = _encodedForm.duplicate();
sender.send(duplicate);
duplicate.dispose();
return _encodedForm.remaining();
}
else
{
int propertyListSize = getPropertyListSize();
QpidByteBuffer buf = QpidByteBuffer.allocateDirect(propertyListSize);
writePropertyListPayload(buf.asDataOutput());
buf.flip();
sender.send(buf);
buf.dispose();
return propertyListSize;
}
}
public synchronized long writePropertyListPayload(final QpidByteBuffer buffer) throws IOException
{
if(useEncodedForm())
{
buffer.putCopyOf(_encodedForm);
return _encodedForm.remaining();
}
else
{
int propertyListSize = getPropertyListSize();
writePropertyListPayload(buffer.asDataOutput());
return propertyListSize;
}
}
public synchronized void populatePropertiesFromBuffer(MarkableDataInput buffer, int propertyFlags, int size) throws AMQFrameDecodingException, IOException
{
_propertyFlags = propertyFlags;
if (_logger.isDebugEnabled())
{
_logger.debug("Property flags: " + _propertyFlags);
}
if(_encodedForm != null)
{
_encodedForm.dispose();
}
_encodedForm = buffer.readAsByteBuffer(size);
final QpidByteBuffer byteBuffer = _encodedForm.slice();
decode(byteBuffer.asDataInput());
byteBuffer.dispose();
}
private void decode(MarkableDataInput buffer) throws IOException, AMQFrameDecodingException
{
int headersOffset = 0;
if ((_propertyFlags & (CONTENT_TYPE_MASK)) != 0)
{
_contentType = buffer.readAMQShortString();
headersOffset += EncodingUtils.encodedShortStringLength(_contentType);
}
if ((_propertyFlags & ENCODING_MASK) != 0)
{
_encoding = buffer.readAMQShortString();
headersOffset += EncodingUtils.encodedShortStringLength(_encoding);
}
if ((_propertyFlags & HEADERS_MASK) != 0)
{
long length = EncodingUtils.readUnsignedInteger(buffer);
QpidByteBuffer buf = _encodedForm.view(headersOffset+4, (int)length);
_headers = new FieldTable(buf);
buf.dispose();
buffer.skipBytes((int)length);
}
if ((_propertyFlags & DELIVERY_MODE_MASK) != 0)
{
_deliveryMode = buffer.readByte();
}
if ((_propertyFlags & PRIORITY_MASK) != 0)
{
_priority = buffer.readByte();
}
if ((_propertyFlags & CORRELATION_ID_MASK) != 0)
{
_correlationId = buffer.readAMQShortString();
}
if ((_propertyFlags & REPLY_TO_MASK) != 0)
{
_replyTo = buffer.readAMQShortString();
}
if ((_propertyFlags & EXPIRATION_MASK) != 0)
{
_expiration = EncodingUtils.readLongAsShortString(buffer);
}
if ((_propertyFlags & MESSAGE_ID_MASK) != 0)
{
_messageId = buffer.readAMQShortString();
}
if ((_propertyFlags & TIMESTAMP_MASK) != 0)
{
_timestamp = EncodingUtils.readTimestamp(buffer);
}
if ((_propertyFlags & TYPE_MASK) != 0)
{
_type = buffer.readAMQShortString();
}
if ((_propertyFlags & USER_ID_MASK) != 0)
{
_userId = buffer.readAMQShortString();
}
if ((_propertyFlags & APPLICATION_ID_MASK) != 0)
{
_appId = buffer.readAMQShortString();
}
if ((_propertyFlags & CLUSTER_ID_MASK) != 0)
{
_clusterId = buffer.readAMQShortString();
}
}
public AMQShortString getContentType()
{
return _contentType;
}
public String getContentTypeAsString()
{
return (_contentType == null) ? null : _contentType.toString();
}
public synchronized void setContentType(AMQShortString contentType)
{
if(contentType == null)
{
_propertyFlags &= (~CONTENT_TYPE_MASK);
}
else
{
_propertyFlags |= CONTENT_TYPE_MASK;
}
_contentType = contentType;
nullEncodedForm();
}
public void setContentType(String contentType)
{
setContentType((contentType == null) ? null : AMQShortString.valueOf(contentType));
}
public String getEncodingAsString()
{
return (getEncoding() == null) ? null : getEncoding().toString();
}
public AMQShortString getEncoding()
{
return _encoding;
}
public void setEncoding(String encoding)
{
setEncoding(encoding == null ? null : AMQShortString.valueOf(encoding));
}
public synchronized void setEncoding(AMQShortString encoding)
{
if(encoding == null)
{
_propertyFlags &= (~ENCODING_MASK);
}
else
{
_propertyFlags |= ENCODING_MASK;
}
_encoding = encoding;
nullEncodedForm();
}
public FieldTable getHeaders()
{
if (_headers == null)
{
setHeaders(FieldTableFactory.newFieldTable());
}
return _headers;
}
public synchronized void setHeaders(FieldTable headers)
{
if(headers == null)
{
_propertyFlags &= (~HEADERS_MASK);
}
else
{
_propertyFlags |= HEADERS_MASK;
}
_headers = headers;
nullEncodedForm();
}
public byte getDeliveryMode()
{
return _deliveryMode;
}
public synchronized void setDeliveryMode(byte deliveryMode)
{
_propertyFlags |= DELIVERY_MODE_MASK;
_deliveryMode = deliveryMode;
nullEncodedForm();
}
public byte getPriority()
{
return _priority;
}
public synchronized void setPriority(byte priority)
{
_propertyFlags |= PRIORITY_MASK;
_priority = priority;
nullEncodedForm();
}
public AMQShortString getCorrelationId()
{
return _correlationId;
}
public String getCorrelationIdAsString()
{
return (_correlationId == null) ? null : _correlationId.toString();
}
public void setCorrelationId(String correlationId)
{
setCorrelationId((correlationId == null) ? null : AMQShortString.valueOf(correlationId));
}
public synchronized void setCorrelationId(AMQShortString correlationId)
{
if(correlationId == null)
{
_propertyFlags &= (~CORRELATION_ID_MASK);
}
else
{
_propertyFlags |= CORRELATION_ID_MASK;
}
_correlationId = correlationId;
nullEncodedForm();
}
public String getReplyToAsString()
{
return (_replyTo == null) ? null : _replyTo.toString();
}
public AMQShortString getReplyTo()
{
return _replyTo;
}
public void setReplyTo(String replyTo)
{
setReplyTo((replyTo == null) ? null : AMQShortString.valueOf(replyTo));
}
public synchronized void setReplyTo(AMQShortString replyTo)
{
if(replyTo == null)
{
_propertyFlags &= (~REPLY_TO_MASK);
}
else
{
_propertyFlags |= REPLY_TO_MASK;
}
_replyTo = replyTo;
nullEncodedForm();
}
public long getExpiration()
{
return _expiration;
}
public synchronized void setExpiration(long expiration)
{
if(expiration == 0l)
{
_propertyFlags &= (~EXPIRATION_MASK);
}
else
{
_propertyFlags |= EXPIRATION_MASK;
}
_expiration = expiration;
nullEncodedForm();
}
public AMQShortString getMessageId()
{
return _messageId;
}
public String getMessageIdAsString()
{
return (_messageId == null) ? null : _messageId.toString();
}
public void setMessageId(String messageId)
{
setMessageId(messageId == null ? null : new AMQShortString(messageId));
}
public synchronized void setMessageId(AMQShortString messageId)
{
if(messageId == null)
{
_propertyFlags &= (~MESSAGE_ID_MASK);
}
else
{
_propertyFlags |= MESSAGE_ID_MASK;
}
_messageId = messageId;
nullEncodedForm();
}
public long getTimestamp()
{
return _timestamp;
}
public synchronized void setTimestamp(long timestamp)
{
_propertyFlags |= TIMESTAMP_MASK;
_timestamp = timestamp;
nullEncodedForm();
}
public String getTypeAsString()
{
return (_type == null) ? null : _type.toString();
}
public AMQShortString getType()
{
return _type;
}
public void setType(String type)
{
setType((type == null) ? null : AMQShortString.valueOf(type));
}
public synchronized void setType(AMQShortString type)
{
if(type == null)
{
_propertyFlags &= (~TYPE_MASK);
}
else
{
_propertyFlags |= TYPE_MASK;
}
_type = type;
nullEncodedForm();
}
public String getUserIdAsString()
{
return (_userId == null) ? null : _userId.toString();
}
public AMQShortString getUserId()
{
return _userId;
}
public void setUserId(String userId)
{
setUserId((userId == null) ? null : AMQShortString.valueOf(userId));
}
public synchronized void setUserId(AMQShortString userId)
{
if(userId == null)
{
_propertyFlags &= (~USER_ID_MASK);
}
else
{
_propertyFlags |= USER_ID_MASK;
}
_userId = userId;
nullEncodedForm();
}
public String getAppIdAsString()
{
return (_appId == null) ? null : _appId.toString();
}
public AMQShortString getAppId()
{
return _appId;
}
public void setAppId(String appId)
{
setAppId((appId == null) ? null : AMQShortString.valueOf(appId));
}
public synchronized void setAppId(AMQShortString appId)
{
if(appId == null)
{
_propertyFlags &= (~APPLICATION_ID_MASK);
}
else
{
_propertyFlags |= APPLICATION_ID_MASK;
}
_appId = appId;
nullEncodedForm();
}
public String getClusterIdAsString()
{
return (_clusterId == null) ? null : _clusterId.toString();
}
public AMQShortString getClusterId()
{
return _clusterId;
}
public void setClusterId(String clusterId)
{
setClusterId((clusterId == null) ? null : AMQShortString.valueOf(clusterId));
}
public synchronized void setClusterId(AMQShortString clusterId)
{
if(clusterId == null)
{
_propertyFlags &= (~CLUSTER_ID_MASK);
}
else
{
_propertyFlags |= CLUSTER_ID_MASK;
}
_clusterId = clusterId;
nullEncodedForm();
}
@Override
public String toString()
{
return "reply-to = " + _replyTo + ",propertyFlags = " + _propertyFlags + ",ApplicationID = " + _appId
+ ",ClusterID = " + _clusterId + ",UserId = " + _userId + ",JMSMessageID = " + _messageId
+ ",JMSCorrelationID = " + _correlationId + ",JMSDeliveryMode = " + _deliveryMode + ",JMSExpiration = "
+ _expiration + ",JMSPriority = " + _priority + ",JMSTimestamp = " + _timestamp + ",JMSType = " + _type
+ ",contentType = " + _contentType;
}
private synchronized boolean useEncodedForm()
{
return _encodedForm != null && (_headers == null || _headers.isClean());
}
public synchronized void dispose()
{
nullEncodedForm();
if(_headers != null)
{
_headers.dispose();
}
}
public synchronized void clearEncodedForm()
{
nullEncodedForm();
if(_headers != null)
{
_headers.clearEncodedForm();
}
}
private synchronized void nullEncodedForm()
{
if(_encodedForm != null)
{
_encodedForm.dispose();
_encodedForm = null;
}
}
}