208 lines
5.8 KiB
Cheetah
208 lines
5.8 KiB
Cheetah
&{${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}
|
|
}
|