blob: ab6406b1fe3600d90a1c2905ccebb4803b495631 [file] [log] [blame]
&{${CLASS}ContentHeaderProperties.java}
/*
*
* 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.
*
*/
/*
* This file is auto-generated by ${GENERATOR} - do not modify.
* Supported AMQP versions:
%{VLIST} * ${major}-${minor}
*/
package org.apache.qpid.framing;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.mina.common.ByteBuffer;
public class ${CLASS}ContentHeaderProperties implements ContentHeaderProperties
{
private static final Logger logger = LoggerFactory.getLogger(BasicContentHeaderProperties.class);
/**
* We store the encoded form when we decode the content header so that if we need to
* write it out without modifying it we can do so without incurring the expense of
* reencoding it.
*/
private byte[] encodedBuffer;
/**
* Flag indicating whether the entire content header has been decoded yet.
*/
private boolean decodedFlag = true;
/**
* We have some optimisations for partial decoding for maximum performance. The
* headers are used in the broker for routing in some cases so we can decode that
* separately.
*/
private boolean decodedHeadersFlag = true;
/**
* We have some optimisations for partial decoding for maximum performance. The
* content type is used by all clients to determine the message type.
*/
private boolean decodedContentTypeFlag = true;
/**
* AMQP major and minor version of this instance.
*/
private byte major;
private byte minor;
/**
* Property flags.
*/
${pch_property_flags_declare}
// Header fields from specification
%{FLIST} ${field_declaration}
/**
* Constructor
*/
public ${CLASS}ContentHeaderProperties(byte major, byte minor)
{
this.major = major;
this.minor = minor;
// Although one flag is initialized per property, the flags are used
// in ordinal order of the AMQP version represented by this instance,
// thus the number of flags actually used may be less than the total
// number defined.
${pch_property_flags_initializer}
}
public int getPropertyListSize()
{
if (encodedBuffer != null)
{
return encodedBuffer.length;
}
else
{
int size = 0;
%{FLIST} ${pch_field_list_size}
return size;
}
}
private void clearEncodedForm()
{
if (!decodedFlag && encodedBuffer != null)
{
//decode();
}
encodedBuffer = null;
}
public void setPropertyFlags(int[] compactPropertyFlags)
throws AMQProtocolVersionException
{
clearEncodedForm();
${pch_compact_property_flags_check}
%{FLIST} ${pch_set_compact_property_flags}
}
public int[] getPropertyFlags()
{
int[] compactPropertyFlags = new int[] { 0 };
${pch_compact_property_flags_initializer}
%{FLIST} ${pch_get_compact_property_flags}
return compactPropertyFlags;
}
public void writePropertyListPayload(ByteBuffer buffer)
{
if (encodedBuffer != null)
{
buffer.put(encodedBuffer);
}
else
{
%{FLIST} ${pch_field_list_payload}
}
}
public void populatePropertiesFromBuffer(ByteBuffer buffer, int[] propertyFlags, int size)
throws AMQFrameDecodingException, AMQProtocolVersionException
{
setPropertyFlags(propertyFlags);
if (logger.isDebugEnabled())
{
logger.debug("Property flags: " + propertyFlags);
}
decode(buffer);
/*encodedBuffer = new byte[size];
buffer.get(encodedBuffer, 0, size);
decodedFlag = false;
decodedHeadersFlag = false;
decodedContentTypeFlag = false;*/
}
private void decode(ByteBuffer buffer)
{
//ByteBuffer buffer = ByteBuffer.wrap(encodedBuffer);
int pos = buffer.position();
try
{
%{FLIST} ${pch_field_list_decode}
// This line does nothing, but prevents a compiler error (Exception not thrown)
// if this block is empty.
if (false) throw new AMQFrameDecodingException("");
}
catch (AMQFrameDecodingException e)
{
throw new RuntimeException("Error in content header data: " + e);
}
final int endPos = buffer.position();
buffer.position(pos);
final int len = endPos - pos;
encodedBuffer = new byte[len];
final int limit = buffer.limit();
buffer.limit(endPos);
buffer.get(encodedBuffer, 0, len);
buffer.limit(limit);
buffer.position(endPos);
decodedFlag = true;
}
private void decodeIfNecessary()
{
if (!decodedFlag)
{
//decode();
}
}
// Field clear methods
%{FLIST} ${pch_field_clear_methods}
// Field get methods
%{FLIST} ${pch_field_get_methods}
// Field set methods
%{FLIST} ${pch_field_set_methods}
}