blob: be241d521bdc3dd1dc9207794a131be7fa2eb80c [file] [log] [blame]
/*
* 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.
*/
#ifndef _ACTIVEMQ_WIREFORMAT_OPENWIRE_UTILS_MESSAGEPROPERTYINTERCEPTOR_H_
#define _ACTIVEMQ_WIREFORMAT_OPENWIRE_UTILS_MESSAGEPROPERTYINTERCEPTOR_H_
#include <activemq/util/Config.h>
#include <activemq/commands/Message.h>
#include <activemq/util/PrimitiveMap.h>
#include <activemq/exceptions/ActiveMQException.h>
#include <decaf/lang/exceptions/NullPointerException.h>
namespace activemq {
namespace wireformat {
namespace openwire {
namespace utils {
/**
* Used the base ActiveMQMessage class to intercept calls to get and set properties
* in order to capture the calls that use the reserved JMS properties and get and
* set them in the OpenWire Message properties.
*
* Currently the only properties that are intercepted and handled are:
*
* Name | Conversion Supported
* ------------------------------------------------------
* JMSXDeliveryCount | Int, Long, String
* JMSXGroupID | String
* JMSXGroupSeq | Int, Long, String
*
*/
class AMQCPP_API MessagePropertyInterceptor {
private:
commands::Message* message;
util::PrimitiveMap* properties;
private:
MessagePropertyInterceptor( const MessagePropertyInterceptor& );
MessagePropertyInterceptor& operator= ( const MessagePropertyInterceptor& );
public:
/**
* Constructor, accepts the Message that will be used to store JMS reserved
* property values, and the PrimitiveMap to get and set the rest to.
*
* @param message - The Message to store reserved property data in
* @param properties - The PrimitiveMap to store the rest of the properties in.
*
* @throws NullPointerException if either param is NULL
*/
MessagePropertyInterceptor( commands::Message* message, util::PrimitiveMap* properties );
virtual ~MessagePropertyInterceptor();
/**
* Gets a boolean property.
* @param name The name of the property to retrieve.
* @return The value for the named property.
*/
virtual bool getBooleanProperty( const std::string& name ) const;
/**
* Gets a byte property.
* @param name The name of the property to retrieve.
* @return The value for the named property.
*/
virtual unsigned char getByteProperty( const std::string& name ) const;
/**
* Gets a double property.
* @param name The name of the property to retrieve.
* @return The value for the named property.
*/
virtual double getDoubleProperty( const std::string& name ) const;
/**
* Gets a float property.
* @param name The name of the property to retrieve.
* @return The value for the named property.
*/
virtual float getFloatProperty( const std::string& name ) const;
/**
* Gets a int property.
* @param name The name of the property to retrieve.
* @return The value for the named property.
*/
virtual int getIntProperty( const std::string& name ) const;
/**
* Gets a long property.
* @param name The name of the property to retrieve.
* @return The value for the named property.
*/
virtual long long getLongProperty( const std::string& name ) const;
/**
* Gets a short property.
* @param name The name of the property to retrieve.
* @return The value for the named property.
*/
virtual short getShortProperty( const std::string& name ) const;
/**
* Gets a string property.
* @param name The name of the property to retrieve.
* @return The value for the named property.
*/
virtual std::string getStringProperty( const std::string& name ) const;
/**
* Sets a boolean property.
* @param name The name of the property to retrieve.
* @param value The value for the named property.
*/
virtual void setBooleanProperty( const std::string& name, bool value );
/**
* Sets a byte property.
* @param name The name of the property to retrieve.
* @param value The value for the named property.
*/
virtual void setByteProperty( const std::string& name, unsigned char value );
/**
* Sets a double property.
* @param name The name of the property to retrieve.
* @param value The value for the named property.
*/
virtual void setDoubleProperty( const std::string& name, double value );
/**
* Sets a float property.
* @param name The name of the property to retrieve.
* @param value The value for the named property.
*/
virtual void setFloatProperty( const std::string& name, float value );
/**
* Sets a int property.
* @param name The name of the property to retrieve.
* @param value The value for the named property.
*/
virtual void setIntProperty( const std::string& name, int value );
/**
* Sets a long property.
* @param name The name of the property to retrieve.
* @param value The value for the named property.
*/
virtual void setLongProperty( const std::string& name, long long value );
/**
* Sets a short property.
* @param name The name of the property to retrieve.
* @param value The value for the named property.
*/
virtual void setShortProperty( const std::string& name, short value );
/**
* Sets a string property.
* @param name The name of the property to retrieve.
* @param value The value for the named property.
*/
virtual void setStringProperty( const std::string& name, const std::string& value );
};
}}}}
#endif /* _ACTIVEMQ_WIREFORMAT_OPENWIRE_UTILS_MESSAGEPROPERTYINTERCEPTOR_H_ */