&{${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} }