You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by nm...@apache.org on 2006/07/21 13:36:16 UTC

svn commit: r424272 [3/10] - in /incubator/activemq/trunk/activemq-cpp: ./ src/examples/ src/main/activemq/concurrent/ src/main/activemq/connector/ src/main/activemq/connector/stomp/ src/main/activemq/connector/stomp/commands/ src/main/activemq/connect...

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompSessionManager.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompSessionManager.cpp?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompSessionManager.cpp (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompSessionManager.cpp Fri Jul 21 04:36:09 2006
@@ -18,16 +18,19 @@
 #include "StompSessionManager.h"
 
 #include <activemq/core/ActiveMQMessage.h>
+#include <activemq/core/ActiveMQConstants.h>
 #include <activemq/concurrent/Concurrent.h>
 #include <activemq/connector/stomp/StompSessionInfo.h>
 #include <activemq/connector/stomp/StompConsumerInfo.h>
 #include <activemq/connector/stomp/commands/SubscribeCommand.h>
 #include <activemq/connector/stomp/commands/UnsubscribeCommand.h>
 #include <activemq/connector/stomp/StompSelector.h>
+#include <activemq/util/Properties.h>
 
 using namespace std;
 using namespace activemq;
 using namespace activemq::core;
+using namespace activemq::util;
 using namespace activemq::exceptions;
 using namespace activemq::transport;
 using namespace activemq::connector;
@@ -65,7 +68,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 unsigned int StompSessionManager::getNextSessionId(void)
 {
-    synchronized(&mutex)
+    synchronized( &mutex )
     {
         return nextSessionId++;
     }
@@ -76,7 +79,7 @@
 ////////////////////////////////////////////////////////////////////////////////
 unsigned int StompSessionManager::getNextConsumerId(void)
 {
-    synchronized(&mutex)
+    synchronized( &mutex )
     {
         return nextConsumerId++;
     }
@@ -86,7 +89,7 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 connector::SessionInfo* StompSessionManager::createSession(
-    cms::Session::AcknowledgeMode ackMode) 
+    cms::Session::AcknowledgeMode ackMode ) 
         throw ( exceptions::ActiveMQException )
 {
     try
@@ -94,7 +97,7 @@
         SessionInfo* session = new StompSessionInfo();
         
         // Init data
-        session->setAckMode(ackMode);
+        session->setAckMode( ackMode );
         session->setConnectionId( connectionId );
         session->setSessionId( getNextSessionId() );
         
@@ -114,10 +117,10 @@
     
 ////////////////////////////////////////////////////////////////////////////////
 connector::ConsumerInfo* StompSessionManager::createConsumer(
-    cms::Destination* destination, 
+    const cms::Destination* destination, 
     SessionInfo* session,
-    const std::string& selector)
-        throw( ConnectorException )
+    const std::string& selector )
+        throw( StompConnectorException )
 {
     try
     {
@@ -127,46 +130,54 @@
         return createDurableConsumer( 
             destination, session, "", selector, false );    
     }
-    AMQ_CATCH_RETHROW( ConnectorException )
-    AMQ_CATCHALL_THROW( ConnectorException )
+    AMQ_CATCH_RETHROW( StompConnectorException )
+    AMQ_CATCHALL_THROW( StompConnectorException )
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 connector::ConsumerInfo* StompSessionManager::createDurableConsumer(
-    cms::Destination* destination, 
+    const cms::Destination* destination, 
     SessionInfo* session,
     const std::string& name,
     const std::string& selector,
     bool noLocal )
-        throw ( ConnectorException )
+        throw ( StompConnectorException )
 {
     try
     {
-        synchronized(&mutex)
+        synchronized( &mutex )
         {
             // Find the right mapping to consumers        
             ConsumerMap& consumerMap = 
                 destinationMap[ destination->toString() ];
-            
+
             // We only need to send a sub request if there are no active 
             // consumers on this destination.  
             if( consumerMap.empty() )
             {
                 // Send the request to the Broker
                 SubscribeCommand cmd;
-                
-                if( session->getAckMode() == cms::Session::ClientAcknowledge )
+
+                if( session->getAckMode() == cms::Session::CLIENT_ACKNOWLEDGE )
                 {
                     cmd.setAckMode( CommandConstants::ACK_CLIENT );
                 }
                 cmd.setDestination( destination->toProviderString() );
-                cmd.setNoLocal( noLocal );
+                
+                if( noLocal == true ) 
+                {
+                    cmd.setNoLocal( noLocal );
+                }
 
                 if( name != "" )
                 {
                     cmd.setSubscriptionName( name );
                 }
                 
+                // Grab any options from the destination and set them
+                // for this subscription.
+                setSubscribeOptions( destination, cmd );
+                
                 // The Selector is set on the first subscribe on this dest,
                 // and if another consumer is created on this destination
                 // that specifies a selector it will be ignored.  While 
@@ -198,18 +209,18 @@
         
         return NULL;
     }
-    AMQ_CATCH_RETHROW( ConnectorException )
-    AMQ_CATCHALL_THROW( ConnectorException )
+    AMQ_CATCH_RETHROW( StompConnectorException )
+    AMQ_CATCHALL_THROW( StompConnectorException )
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 void StompSessionManager::removeConsumer(
-    connector::ConsumerInfo* consumer)
-        throw( ConnectorException )
+    connector::ConsumerInfo* consumer )
+        throw( StompConnectorException )
 {
     try
     {
-        synchronized(&mutex)
+        synchronized( &mutex )
         {
             DestinationMap::iterator itr = 
                 destinationMap.find( consumer->getDestination().toString() );
@@ -238,8 +249,8 @@
             }    
         }
     }
-    AMQ_CATCH_RETHROW( ConnectorException )
-    AMQ_CATCHALL_THROW( ConnectorException )
+    AMQ_CATCH_RETHROW( StompConnectorException )
+    AMQ_CATCHALL_THROW( StompConnectorException )
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -265,10 +276,10 @@
                 "No Message Listener Registered." );
         }
                 
-        synchronized(&mutex)
+        synchronized( &mutex )
         {
             DestinationMap::iterator itr = 
-                destinationMap.find( message->getCMSDestination().toString() );
+                destinationMap.find( message->getCMSDestination()->toString() );
 
             if( itr == destinationMap.end() )
             {
@@ -280,7 +291,7 @@
 
             // If we only have 1 consumer, we don't need to clone the original
             // message.
-            if(itr->second.size() == 1)
+            if( itr->second.size() == 1 )
             {
                 ConsumerInfo* consumerInfo = itr->second.begin()->second;
                 
@@ -301,7 +312,7 @@
             // message.
             ConsumerMap::iterator c_itr = itr->second.begin();
             
-            for(; c_itr != itr->second.end(); ++c_itr )
+            for( ; c_itr != itr->second.end(); ++c_itr )
             {
                 ConsumerInfo* consumerInfo = c_itr->second;
                 
@@ -318,6 +329,113 @@
             // We got here which means that we sent copies, so remove
             // the original.
             delete command;
+        }
+    }
+    AMQ_CATCH_RETHROW( StompConnectorException )
+    AMQ_CATCH_EXCEPTION_CONVERT( ActiveMQException, StompConnectorException )
+    AMQ_CATCHALL_THROW( StompConnectorException )
+}
+
+void StompSessionManager::setSubscribeOptions( const cms::Destination* dest,
+                                               SubscribeCommand& command )
+    throw ( StompConnectorException )
+{
+    try
+    {
+        // Get the properties of this destination
+        const Properties& destProperties = dest->getProperties(); 
+
+        if( destProperties.isEmpty() )
+        {
+            // Nothing to do, so save some work and quit now.
+            return;
+        }
+
+        std::string noLocalStr = 
+            ActiveMQConstants::toString(
+                ActiveMQConstants::CONSUMER_NOLOCAL );
+
+        if( destProperties.getProperty( noLocalStr, "false" ) == "true" )
+        {
+            command.setNoLocal(
+                Boolean::parseBoolean( 
+                    destProperties.getProperty( noLocalStr ) ) );
+        }
+
+        std::string selectorStr = 
+            ActiveMQConstants::toString(
+                ActiveMQConstants::CONSUMER_SELECTOR );
+
+        if( destProperties.hasProperty( selectorStr ) )
+        {
+            command.setMessageSelector(
+                destProperties.getProperty( selectorStr ) );
+        }
+
+        std::string priorityStr = 
+            ActiveMQConstants::toString(
+                ActiveMQConstants::CONSUMER_PRIORITY );
+
+        if( destProperties.hasProperty( priorityStr ) )
+        {
+            command.setPriority(
+                Integer::parseInt( 
+                    destProperties.getProperty( priorityStr ) ) );
+        }
+
+        std::string dispatchAsyncStr = 
+            ActiveMQConstants::toString(
+                ActiveMQConstants::CONSUMER_DISPATCHASYNC );
+        
+        if( destProperties.hasProperty( dispatchAsyncStr ) )
+        {
+            command.setDispatchAsync(
+                Boolean::parseBoolean( 
+                    destProperties.getProperty( dispatchAsyncStr ) ) );
+        }
+
+        std::string exclusiveStr = 
+            ActiveMQConstants::toString(
+                ActiveMQConstants::CONSUMER_EXCLUSIVE );
+        
+        if( destProperties.hasProperty( exclusiveStr ) )
+        {
+            command.setExclusive(
+                Boolean::parseBoolean( 
+                    destProperties.getProperty( exclusiveStr ) ) );
+        }
+
+        std::string maxPendingMsgLimitStr = 
+            ActiveMQConstants::toString(
+                ActiveMQConstants::CUNSUMER_MAXPENDINGMSGLIMIT );
+        
+        if( destProperties.hasProperty( maxPendingMsgLimitStr ) )
+        {
+            command.setMaxPendingMsgLimit(
+                Integer::parseInt( 
+                    destProperties.getProperty( maxPendingMsgLimitStr ) ) );
+        }
+ 
+        std::string prefetchSizeStr = 
+            ActiveMQConstants::toString(
+                ActiveMQConstants::CONSUMER_PREFECTCHSIZE );
+        
+        if( destProperties.hasProperty( prefetchSizeStr ) )
+        {
+            command.setPrefetchSize(
+                Integer::parseInt( 
+                    destProperties.getProperty( prefetchSizeStr ) ) );
+        }
+
+        std::string retroactiveStr = 
+            ActiveMQConstants::toString(
+                ActiveMQConstants::CONSUMER_RETROACTIVE );
+        
+        if( destProperties.hasProperty( retroactiveStr ) )
+        {
+            command.setRetroactive(
+                Boolean::parseBoolean( 
+                    destProperties.getProperty( retroactiveStr ) ) );
         }
     }
     AMQ_CATCH_RETHROW( StompConnectorException )

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompSessionManager.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompSessionManager.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompSessionManager.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompSessionManager.h Fri Jul 21 04:36:09 2006
@@ -25,6 +25,7 @@
 #include <activemq/connector/ConnectorException.h>
 #include <activemq/connector/stomp/StompCommandListener.h>
 #include <activemq/connector/ConsumerMessageListener.h>
+#include <activemq/connector/stomp/commands/SubscribeCommand.h>
 
 namespace activemq{
 namespace connector{
@@ -44,8 +45,8 @@
     private:
     
         // Map Types
-        typedef std::map<unsigned int, ConsumerInfo*>  ConsumerMap;
-        typedef std::map<std::string, ConsumerMap>     DestinationMap;        
+        typedef std::map< unsigned int, ConsumerInfo* > ConsumerMap;
+        typedef std::map< std::string, ConsumerMap >    DestinationMap;        
 
     private:
     
@@ -85,7 +86,7 @@
          * @return new SessionInfo object
          */
         virtual connector::SessionInfo* createSession(
-            cms::Session::AcknowledgeMode ackMode)
+            cms::Session::AcknowledgeMode ackMode )
                 throw ( exceptions::ActiveMQException );
 
         /**
@@ -108,10 +109,10 @@
          * @return new ConsumerInfo object.
          */
         virtual connector::ConsumerInfo* createConsumer(
-            cms::Destination* destination, 
+            const cms::Destination* destination, 
             SessionInfo* session,
-            const std::string& selector)
-                throw( ConnectorException );
+            const std::string& selector )
+                throw( StompConnectorException );
 
         /**
          * Creates a new durable consumer to the specified session, will 
@@ -126,12 +127,12 @@
          * @return new ConsumerInfo object.
          */
         virtual connector::ConsumerInfo* createDurableConsumer(
-            cms::Destination* destination, 
+            const cms::Destination* destination, 
             SessionInfo* session,
             const std::string& name,
             const std::string& selector,
             bool noLocal )
-                throw ( ConnectorException );
+                throw ( StompConnectorException );
 
         /**
          * Removes the Consumer from the session, will unsubscrive if the
@@ -142,7 +143,7 @@
          * @throws ConnectorException
          */            
         virtual void removeConsumer( connector::ConsumerInfo* consumer )
-            throw( ConnectorException );
+            throw( StompConnectorException );
 
         /** 
          * Sets the listener of consumer messages.
@@ -162,7 +163,19 @@
          * @throw ConnterException
          */
         virtual void onStompCommand( commands::StompCommand* command ) 
-            throw ( StompConnectorException );    
+            throw ( StompConnectorException );
+            
+    protected: 
+    
+        /**
+         * Sets Subscribe Command options from the properties of a 
+         * destination object.
+         * @param The destination that we are subscribing to.
+         * @param The pending Subscribe command
+         */
+        virtual void setSubscribeOptions( const cms::Destination* dest,
+                                          commands::SubscribeCommand& command )
+            throw ( StompConnectorException );
             
     protected:
     

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompTopic.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompTopic.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompTopic.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompTopic.h Fri Jul 21 04:36:09 2006
@@ -30,8 +30,18 @@
     {
     public:
 
-        StompTopic(void) : StompDestination<cms::Topic>() {}
+        /**
+         * Copy Consturctor
+         * @param CMS Dest to Copy, must be a compatible type
+         */
+        StompTopic( const cms::Destination* source ) : 
+            StompDestination< cms::Topic >( source ) {}
 
+        /**
+         * Custom Constructor
+         * @param string destination name plus any params
+         * @param type of destination this represents.
+         */
         StompTopic(const std::string& name) : 
             StompDestination< cms::Topic >( name, cms::Destination::TOPIC )
         {}

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompTransactionInfo.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompTransactionInfo.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompTransactionInfo.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/StompTransactionInfo.h Fri Jul 21 04:36:09 2006
@@ -37,16 +37,13 @@
     public:
 
         /**
-         * TransactionInfo Constructor
+         * Default Constructor
          */
         StompTransactionInfo(void) {
             transactionId = 0;
             session = NULL;
         }
 
-        /**
-         * Destructor
-         */
         virtual ~StompTransactionInfo(void) {}
 
         /**

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/AbstractCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/AbstractCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/AbstractCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/AbstractCommand.h Fri Jul 21 04:36:09 2006
@@ -113,13 +113,24 @@
         AbstractCommand(void){ 
             frame = new StompFrame;
         }
-        AbstractCommand(StompFrame* frame){ 
+        AbstractCommand( StompFrame* frame ){ 
             this->frame = frame;
         }
         virtual ~AbstractCommand(void){
             destroyFrame();
         }
         
+        /**
+         * Gets the properties map for this command.
+         * @return Reference to a Properties object
+         */
+        virtual util::Properties& getProperties(void){
+            return getFrame().getProperties();
+        }   
+        virtual const util::Properties& getProperties(void) const{
+            return getFrame().getProperties();
+        }   
+
         /**
          * Sets the Command Id of this Message
          * @param Command Id

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/AckCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/AckCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/AckCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/AckCommand.h Fri Jul 21 04:36:09 2006
@@ -44,7 +44,7 @@
                 initialize( getFrame() );
         }
         AckCommand( StompFrame* frame ) : 
-            AbstractCommand<transport::Command>(frame) {
+            AbstractCommand<transport::Command>( frame ) {
                 validate( getFrame() );
         }
         virtual ~AckCommand(void) {}

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BeginCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BeginCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BeginCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BeginCommand.h Fri Jul 21 04:36:09 2006
@@ -45,7 +45,7 @@
                 initialize( getFrame() );
         }
         BeginCommand( StompFrame* frame ) : 
-            AbstractCommand<transport::Command>(frame) {
+            AbstractCommand<transport::Command>( frame ) {
                 validate( getFrame() );
         }
         virtual ~BeginCommand(void) {}

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h Fri Jul 21 04:36:09 2006
@@ -41,7 +41,7 @@
                 initialize( getFrame() );
         }
         BytesMessageCommand( StompFrame* frame ) : 
-            StompMessage< cms::BytesMessage >(frame) {
+            StompMessage< cms::BytesMessage >( frame ) {
                 validate( getFrame() );
         }
     	virtual ~BytesMessageCommand(void) {}

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/CommandConstants.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/CommandConstants.cpp?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/CommandConstants.cpp (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/CommandConstants.cpp Fri Jul 21 04:36:09 2006
@@ -62,7 +62,8 @@
     stompHeaders[HEADER_RESPONSEID] = "response-id";
     stompHeaders[HEADER_EXPIRES] = "expires";
     stompHeaders[HEADER_PERSISTANT] = "persistent";
-    stompHeaders[HEADER_PRIORITY] = "priority";
+    stompHeaders[HEADER_JMSPRIORITY] = "priority";
+    stompHeaders[HEADER_CONSUMERPRIORITY] = "activemq.priority";
     stompHeaders[HEADER_REPLYTO] = "reply-to";
     stompHeaders[HEADER_TYPE] = "type";
     stompHeaders[HEADER_AMQMSGTYPE] = "amq-msg-type";
@@ -74,7 +75,7 @@
     stompHeaders[HEADER_MAXPENDINGMSGLIMIT] = "activemq.maximumPendingMessageLimit";
     stompHeaders[HEADER_NOLOCAL] = "activemq.noLocal";
     stompHeaders[HEADER_PREFETCHSIZE] = "activemq.prefetchSize";
-    stompHeaders[HEADER_PRIORITY] = "activemq.priority";
+    stompHeaders[HEADER_CONSUMERPRIORITY] = "activemq.priority";
     stompHeaders[HEADER_RETROACTIVE] = "activemq.retroactive";
     stompHeaders[HEADER_SUBSCRIPTIONNAME] = "activemq.subscriptionName";
     stompHeaders[HEADER_TIMESTAMP] = "timestamp";

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/CommandConstants.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/CommandConstants.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/CommandConstants.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/CommandConstants.h Fri Jul 21 04:36:09 2006
@@ -76,7 +76,8 @@
             HEADER_MAXPENDINGMSGLIMIT,
             HEADER_NOLOCAL,
             HEADER_PREFETCHSIZE,
-            HEADER_PRIORITY,
+            HEADER_JMSPRIORITY,
+            HEADER_CONSUMERPRIORITY,
             HEADER_RETROACTIVE,
             HEADER_SUBSCRIPTIONNAME,
             HEADER_TIMESTAMP,

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/CommitCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/CommitCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/CommitCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/CommitCommand.h Fri Jul 21 04:36:09 2006
@@ -40,7 +40,7 @@
                 initialize( getFrame() );
         }
         CommitCommand( StompFrame* frame ) : 
-            AbstractCommand<transport::Command>(frame) {
+            AbstractCommand<transport::Command>( frame ) {
                 validate( getFrame() );
         }
         virtual ~CommitCommand(void) {}

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/ConnectCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/ConnectCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/ConnectCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/ConnectCommand.h Fri Jul 21 04:36:09 2006
@@ -39,7 +39,7 @@
                 initialize( getFrame() );
         }
         ConnectCommand( StompFrame* frame ) : 
-            AbstractCommand<transport::Command>(frame) {
+            AbstractCommand<transport::Command>( frame ) {
                 validate( getFrame() );
         }
         virtual ~ConnectCommand(void) {};

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/DisconnectCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/DisconnectCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/DisconnectCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/DisconnectCommand.h Fri Jul 21 04:36:09 2006
@@ -40,7 +40,7 @@
                 initialize( getFrame() );
         }
         DisconnectCommand( StompFrame* frame ) : 
-            AbstractCommand<transport::Command>(frame) {
+            AbstractCommand<transport::Command>( frame ) {
                 validate( getFrame() );
         }
         virtual ~DisconnectCommand(void){};

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/ErrorCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/ErrorCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/ErrorCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/ErrorCommand.h Fri Jul 21 04:36:09 2006
@@ -40,7 +40,7 @@
                 initialize( getFrame() );
         }
         ErrorCommand( StompFrame* frame ) : 
-            AbstractCommand<transport::Command>(frame) {
+            AbstractCommand<transport::Command>( frame ) {
                 validate( getFrame() );
         }
         virtual ~ErrorCommand(void) {};

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/ReceiptCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/ReceiptCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/ReceiptCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/ReceiptCommand.h Fri Jul 21 04:36:09 2006
@@ -40,7 +40,7 @@
                 initialize( getFrame() );
         }
         ReceiptCommand( StompFrame* frame ) : 
-            AbstractCommand<transport::Response>(frame) {
+            AbstractCommand<transport::Response>( frame ) {
                 validate( getFrame() );
         }
         virtual ~ReceiptCommand(void) {}
@@ -60,7 +60,7 @@
         virtual void setReceiptId( const std::string& id ){
             setPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_RECEIPTID),
+                    CommandConstants::HEADER_RECEIPTID ),
                 id );
         }
 

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/StompCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/StompCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/StompCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/StompCommand.h Fri Jul 21 04:36:09 2006
@@ -103,6 +103,13 @@
          * @return Stomp CommandId enum
          */
         virtual CommandConstants::CommandId getStompCommandId(void) const = 0;
+        
+        /**
+         * Retrieves the Properties that are part of this command
+         * @return const reference to a properties object
+         */
+        virtual util::Properties& getProperties(void) = 0;
+        virtual const util::Properties& getProperties(void) const = 0;
 
     };
 

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/StompMessage.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/StompMessage.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/StompMessage.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/StompMessage.h Fri Jul 21 04:36:09 2006
@@ -62,7 +62,7 @@
 
         StompMessage(void) :
             AbstractCommand< transport::Command >(),
-            ackHandler( NULL ) { dest = new StompTopic(); }
+            ackHandler( NULL ) { dest = NULL; }
         StompMessage( StompFrame* frame ) : 
             AbstractCommand< transport::Command >( frame ),
             ackHandler( NULL )
@@ -112,55 +112,57 @@
          * of this consumed message.
          */
         virtual void acknowledge(void) const throw( cms::CMSException ) {
-            if(ackHandler != NULL) ackHandler->acknowledgeMessage(this);
+            if(ackHandler != NULL) ackHandler->acknowledgeMessage( this );
         }
 
         /**
          * Sets the DeliveryMode for this message
          * @return DeliveryMode enumerated value.
          */
-        virtual cms::Message::DeliveryMode getCMSDeliveryMode(void) const {
+        virtual int getCMSDeliveryMode(void) const {
             if(!getFrame().getProperties().hasProperty( 
                    CommandConstants::toString( 
                        CommandConstants::HEADER_PERSISTANT ) ) ) {
-                return cms::Message::PERSISTANT;
+                return cms::DeliveryMode::PERSISTANT;
             }
             
-            return (cms::Message::DeliveryMode)(
-                util::Integer::parseInt( getPropertyValue( 
-                    CommandConstants::toString( 
-                        CommandConstants::HEADER_PERSISTANT ) ) ) );
+            return util::Integer::parseInt( getPropertyValue( 
+                       CommandConstants::toString( 
+                           CommandConstants::HEADER_PERSISTANT ) ) );
         }
 
         /**
          * Sets the DeliveryMode for this message
          * @param DeliveryMode enumerated value.
          */
-        virtual void setCMSDeliveryMode(cms::Message::DeliveryMode mode) {
+        virtual void setCMSDeliveryMode( int mode ) {
             setPropertyValue( 
                 CommandConstants::toString( 
                     CommandConstants::HEADER_PERSISTANT ) ,
-                util::Integer::toString((int)mode) );
+                util::Integer::toString( mode ) );
         }
       
         /**
          * Gets the Destination for this Message
-         * @return Destination object
+         * @return Destination object can be NULL
          */
-        virtual const cms::Destination& getCMSDestination(void) const{
-            return *dest;
+        virtual const cms::Destination* getCMSDestination(void) const{
+            return dest;
         }
               
         /**
          * Sets the Destination for this message
          * @param Destination Object
          */
-        virtual void setCMSDestination(const cms::Destination& destination) {
-            dest->copy( destination );
-            setPropertyValue( 
-                CommandConstants::toString( 
-                    CommandConstants::HEADER_DESTINATION ),
-                dest->toProviderString() );
+        virtual void setCMSDestination( const cms::Destination* destination ) {
+            if( destination != NULL )
+            {
+                dest = destination->clone();
+                setPropertyValue( 
+                    CommandConstants::toString( 
+                        CommandConstants::HEADER_DESTINATION ),
+                    dest->toProviderString() );
+            }
         }
         
         /**
@@ -177,7 +179,7 @@
          * Sets the Expiration Time for this message
          * @param time value
          */
-        virtual void setCMSExpiration(long expireTime) {
+        virtual void setCMSExpiration( long expireTime ) {
             setPropertyValue( 
                 CommandConstants::toString( 
                     CommandConstants::HEADER_EXPIRES) ,
@@ -198,7 +200,7 @@
          * Sets the CMS Message Id for this message
          * @param time value
          */
-        virtual void setCMSMessageId(const std::string& id) {
+        virtual void setCMSMessageId( const std::string& id ) {
             setPropertyValue( 
                 CommandConstants::toString( 
                     CommandConstants::HEADER_MESSAGEID ),
@@ -212,17 +214,17 @@
         virtual int getCMSPriority(void) const {
             return util::Integer::parseInt( getPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_PRIORITY ), "0" ) );
+                    CommandConstants::HEADER_JMSPRIORITY ), "0" ) );
         }
       
         /**
          * Sets the Priority Value for this message
          * @param priority value
          */
-        virtual void setCMSPriority(int priority) {
+        virtual void setCMSPriority( int priority ) {
             setPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_PRIORITY),
+                    CommandConstants::HEADER_JMSPRIORITY),
                 util::Integer::toString( priority ) );
         }
 
@@ -241,7 +243,7 @@
          * Sets the Redelivered Flag for this message
          * @param redelivered value
          */
-        virtual void setCMSRedelivered(bool redelivered) {
+        virtual void setCMSRedelivered( bool redelivered ) {
             setPropertyValue( 
                 CommandConstants::toString( 
                     CommandConstants::HEADER_REDELIVERED ),
@@ -262,7 +264,7 @@
          * Sets the CMS Reply To Address for this message
          * @param Reply To value
          */
-        virtual void setCMSReplyTo(const std::string& id) {
+        virtual void setCMSReplyTo( const std::string& id ) {
             setPropertyValue( 
                 CommandConstants::toString( 
                     CommandConstants::HEADER_REPLYTO ),
@@ -283,7 +285,7 @@
          * Sets the Time Stamp for this message
          * @param time stamp value
          */
-        virtual void setCMSTimeStamp(long timeStamp) {
+        virtual void setCMSTimeStamp( long timeStamp ) {
             setPropertyValue( 
                 CommandConstants::toString( 
                     CommandConstants::HEADER_TIMESTAMP ),
@@ -304,7 +306,7 @@
          * Sets the CMS Message Type for this message
          * @param type value
          */
-        virtual void setCMSMessageType(const std::string& type) {
+        virtual void setCMSMessageType( const std::string& type ) {
             setPropertyValue( 
                 CommandConstants::toString( 
                     CommandConstants::HEADER_TYPE ),
@@ -318,7 +320,7 @@
          * when the Acknowledge method is called.
          * @param ActiveMQAckHandler
          */
-        virtual void setAckHandler(core::ActiveMQAckHandler* handler) {
+        virtual void setAckHandler( core::ActiveMQAckHandler* handler ) {
             this->ackHandler = handler;
         }
         
@@ -338,7 +340,7 @@
          * redelivered
          * @param redelivery count
          */
-        virtual void setRedeliveryCount(int count) {
+        virtual void setRedeliveryCount( int count ) {
             setPropertyValue( 
                 CommandConstants::toString( 
                     CommandConstants::HEADER_REDELIVERYCOUNT ),

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/SubscribeCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/SubscribeCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/SubscribeCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/SubscribeCommand.h Fri Jul 21 04:36:09 2006
@@ -53,7 +53,7 @@
         virtual const char* getDestination(void) const{
             return getPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_DESTINATION) );
+                    CommandConstants::HEADER_DESTINATION ) );
         }
       
         /**
@@ -63,7 +63,7 @@
         virtual void setDestination( const std::string& dest ){
             setPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_DESTINATION),
+                    CommandConstants::HEADER_DESTINATION ),
                 dest );
         }
 
@@ -74,7 +74,7 @@
         virtual void setAckMode( const CommandConstants::AckMode mode ){
             setPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_ACK),
+                    CommandConstants::HEADER_ACK ),
                 CommandConstants::toString( mode ) );
         }
 
@@ -86,7 +86,7 @@
             return CommandConstants::toAckMode( 
                 getPropertyValue( 
                     CommandConstants::toString( 
-                        CommandConstants::HEADER_ACK) ) );
+                        CommandConstants::HEADER_ACK ) ) );
         }
         
         /**
@@ -97,7 +97,7 @@
         virtual void setMessageSelector( const std::string& selector ) {
             setPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_SELECTOR),
+                    CommandConstants::HEADER_SELECTOR ),
                 selector );
         }        
 
@@ -109,7 +109,7 @@
         virtual const char* getMessageSelector(void) const{
             return getPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_SELECTOR) );
+                    CommandConstants::HEADER_SELECTOR ) );
         }
 
         /**
@@ -120,7 +120,7 @@
         virtual void setSubscriptionName( const std::string& name ) {
             setPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_SUBSCRIPTIONNAME),
+                    CommandConstants::HEADER_SUBSCRIPTIONNAME ),
                 name );
         }        
 
@@ -132,11 +132,11 @@
         virtual const char* getSubscriptionName(void) const{
             return getPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_SUBSCRIPTIONNAME) );
+                    CommandConstants::HEADER_SUBSCRIPTIONNAME ) );
         }
 
         /**
-         * Gets hether or not locally sent messages should be ignored for 
+         * Gets whether or not locally sent messages should be ignored for 
          * subscriptions. Set to true to filter out locally sent messages
          * @return NoLocal value
          */
@@ -148,7 +148,7 @@
         }
       
         /**
-         * Gets hether or not locally sent messages should be ignored for 
+         * Sets whether or not locally sent messages should be ignored for 
          * subscriptions. Set to true to filter out locally sent messages
          * @param NoLocal value
          */
@@ -159,6 +159,162 @@
                 util::Boolean::toString( noLocal ) );
         }
 
+        /**
+         * Sets whether or not the broker is to dispatch messages in an 
+         * asynchronous manner. Set to true if you want Async.
+         * @return true if in dispatch async mode
+         */
+        virtual bool getDispatchAsync(void) const {
+            return util::Boolean::parseBoolean( getPropertyValue( 
+                CommandConstants::toString( 
+                    CommandConstants::HEADER_DISPATCH_ASYNC ), 
+                "false" ) );
+        }
+      
+        /**
+         * Sets whether or not the broker is to dispatch messages in an 
+         * asynchronous manner. Set to true if you want Async.
+         * @param true for async dispatch mode
+         */
+        virtual void setDispatchAsync( bool dispatchAsync ) {
+            setPropertyValue( 
+                CommandConstants::toString( 
+                    CommandConstants::HEADER_DISPATCH_ASYNC ),
+                util::Boolean::toString( dispatchAsync ) );
+        }
+        
+        /**
+         * Gets whether or not this consumer is an exclusive consumer for
+         * this destination.
+         * @return true for exclusive mode
+         */
+        virtual bool getExclusive(void) const {
+            return util::Boolean::parseBoolean( getPropertyValue( 
+                CommandConstants::toString( 
+                    CommandConstants::HEADER_EXCLUSIVE ), 
+                "false" ) );
+        }
+      
+        /**
+         * Sets whether or not this consumer is an exclusive consumer for
+         * this destination.
+         * @param true if in exclusive mode
+         */
+        virtual void setExclusive( bool exclusive ) {
+            setPropertyValue( 
+                CommandConstants::toString( 
+                    CommandConstants::HEADER_EXCLUSIVE ),
+                util::Boolean::toString( exclusive ) );
+        }
+
+        /**
+         * Get the max number of pending messages on a destination
+         * For Slow Consumer Handlingon non-durable topics by dropping old
+         * messages - we can set a maximum pending limit which once a slow 
+         * consumer backs up to this high water mark we begin to discard 
+         * old messages
+         * @return Max value
+         */
+        virtual int getMaxPendingMsgLimit(void) const {
+            return util::Integer::parseInt( getPropertyValue( 
+                CommandConstants::toString( 
+                    CommandConstants::HEADER_MAXPENDINGMSGLIMIT ), 
+                "0" ) );
+        }
+      
+        /**
+         * Set the max number of pending messages on a destination
+         * For Slow Consumer Handlingon non-durable topics by dropping old
+         * messages - we can set a maximum pending limit which once a slow 
+         * consumer backs up to this high water mark we begin to discard 
+         * old messages
+         * @param Max value
+         */
+        virtual void setMaxPendingMsgLimit( int limit ) {
+            setPropertyValue( 
+                CommandConstants::toString( 
+                    CommandConstants::HEADER_MAXPENDINGMSGLIMIT ),
+                util::Integer::toString( limit ) );
+        }
+        
+        /**
+         * Get the maximum number of pending messages that will be 
+         * dispatched to the client. Once this maximum is reached no more 
+         * messages are dispatched until the client acknowledges a message. 
+         * Set to 1 for very fair distribution of messages across consumers
+         * where processing messages can be slow
+         * @return prefetch size value
+         */
+        virtual int getPrefetchSize(void) const {
+            return util::Integer::parseInt( getPropertyValue( 
+                CommandConstants::toString( 
+                    CommandConstants::HEADER_PREFETCHSIZE ), 
+                "1000" ) );
+        }
+      
+        /**
+         * Set the maximum number of pending messages that will be 
+         * dispatched to the client. Once this maximum is reached no more 
+         * messages are dispatched until the client acknowledges a message. 
+         * Set to 1 for very fair distribution of messages across consumers
+         * where processing messages can be slow
+         * @param prefetch size value
+         */
+        virtual void setPrefetchSize( int size ) {
+            setPropertyValue( 
+                CommandConstants::toString( 
+                    CommandConstants::HEADER_PREFETCHSIZE ),
+                util::Integer::toString( size ) );
+        }
+
+        /**
+         * Gets the priority of the consumer so that dispatching can be 
+         * weighted in priority order
+         * @return priority level
+         */
+        virtual int getPriority(void) const {
+            return util::Integer::parseInt( getPropertyValue( 
+                CommandConstants::toString( 
+                    CommandConstants::HEADER_CONSUMERPRIORITY ), 
+                "0" ) );
+        }
+      
+        /**
+         * Sets the priority of the consumer so that dispatching can be 
+         * weighted in priority order
+         * @param prioirty level
+         */
+        virtual void setPriority( int priority ) {
+            setPropertyValue( 
+                CommandConstants::toString( 
+                    CommandConstants::HEADER_CONSUMERPRIORITY ),
+                util::Integer::toString( priority ) );
+        }
+
+        /**
+         * Get For non-durable topics if this subscription is set to be 
+         * retroactive
+         * @return true for retroactive mode
+         */
+        virtual bool getRetroactive(void) const {
+            return util::Boolean::parseBoolean( getPropertyValue( 
+                CommandConstants::toString( 
+                    CommandConstants::HEADER_RETROACTIVE ), 
+                "false" ) );
+        }
+      
+        /**
+         * Set For non-durable topics if this subscription is set to be 
+         * retroactive
+         * @param true if in retroactive mode
+         */
+        virtual void setRetroactive( bool retroactive ) {
+            setPropertyValue( 
+                CommandConstants::toString( 
+                    CommandConstants::HEADER_RETROACTIVE ),
+                util::Boolean::toString( retroactive ) );
+        }
+        
     protected:
     
         /**
@@ -173,7 +329,7 @@
 
             setPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_ACK),
+                    CommandConstants::HEADER_ACK ),
                 CommandConstants::toString( 
                     CommandConstants::ACK_AUTO ) );
         }

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/TextMessageCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/TextMessageCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/TextMessageCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/TextMessageCommand.h Fri Jul 21 04:36:09 2006
@@ -68,6 +68,14 @@
             setBytes( msg, strlen(msg) + 1, false );
         }
 
+        /**
+         * Sets the message contents.
+         * @param msg The message buffer.
+         */
+        virtual void setText( const std::string& msg ) throw( cms::CMSException ) {
+            setBytes( msg.c_str(), msg.length() + 1, false );
+        }
+
     };
 
 }}}}

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/UnsubscribeCommand.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/UnsubscribeCommand.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/UnsubscribeCommand.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/UnsubscribeCommand.h Fri Jul 21 04:36:09 2006
@@ -51,7 +51,7 @@
         virtual const char* getDestination(void) const{
             return getPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_DESTINATION) );
+                    CommandConstants::HEADER_DESTINATION ) );
         }
       
         /**
@@ -60,7 +60,7 @@
         virtual void setDestination( const std::string& dest ){
             setPropertyValue( 
                 CommandConstants::toString( 
-                    CommandConstants::HEADER_DESTINATION) ,
+                    CommandConstants::HEADER_DESTINATION ),
                 dest );
         }
       

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/marshal/Marshalable.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/marshal/Marshalable.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/marshal/Marshalable.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/connector/stomp/marshal/Marshalable.h Fri Jul 21 04:36:09 2006
@@ -30,7 +30,7 @@
     {
     public:
 
-    	virtual ~Marshalable(void) {}
+        virtual ~Marshalable(void) {}
 
         /**
          * Marshals the command to a stomp frame.

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQAckHandler.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQAckHandler.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQAckHandler.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQAckHandler.h Fri Jul 21 04:36:09 2006
@@ -32,7 +32,7 @@
     {
     public:
     
-    	virtual ~ActiveMQAckHandler(void) {};
+        virtual ~ActiveMQAckHandler(void) {};
     
         /**
          * Method called to acknowledge the message passed

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.cpp Fri Jul 21 04:36:09 2006
@@ -34,6 +34,7 @@
 {
     this->connectionData = connectionData;
     this->started = false;
+    this->closed = false;
     this->exceptionListener = NULL;
 
     // We want to be the sink for all messages from the Connector
@@ -57,7 +58,7 @@
 {
     try
     {
-        return this->createSession( Session::AutoAcknowledge );
+        return this->createSession( Session::AUTO_ACKNOWLEDGE );
     }
     AMQ_CATCH_RETHROW( ActiveMQException )
     AMQ_CATCHALL_THROW( ActiveMQException )
@@ -90,10 +91,20 @@
 {
     try
     {
+        if( closed )
+        {
+            return;
+        }
+
         // Once current deliveries are done this stops the delivery 
         // of any new messages.
         started = false;
-    
+        closed = true;
+
+        // Shutdown connector and transport
+        connectionData->getConnector()->close();
+        connectionData->getTransport()->close();
+
         // Destroy the connection data
         delete connectionData;
         connectionData = NULL;
@@ -124,7 +135,7 @@
                                              ActiveMQMessageListener* listener )
 {
     // Place in Map
-    synchronized(&mutex)
+    synchronized( &mutex )
     {
         consumers[consumerId] = listener;
     }
@@ -134,7 +145,7 @@
 void ActiveMQConnection::removeMessageListener( const unsigned int consumerId )
 {
     // Remove from Map
-    synchronized(&mutex)
+    synchronized( &mutex )
     {
         consumers.erase( consumerId );
     }
@@ -175,9 +186,9 @@
         }
         
         // Started, so lock map and dispatch the message.
-        synchronized(&mutex)
+        synchronized( &mutex )
         {
-            if(consumers.find(consumer->getConsumerId()) != consumers.end())
+            if(consumers.find( consumer->getConsumerId()) != consumers.end() )
             {
                 consumers[consumer->getConsumerId()]->
                     onActiveMQMessage( message );

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnection.h Fri Jul 21 04:36:09 2006
@@ -32,147 +32,149 @@
 namespace activemq{
 namespace core{
 
-   class cms::Session;   
-   class ActiveMQConsumer;
+    class cms::Session;   
+    class ActiveMQConsumer;
 
-   class ActiveMQConnection : 
-      public cms::Connection,
-      public connector::ConsumerMessageListener
-   {
-   private:
-   
-      // the registered exception listener
-      cms::ExceptionListener* exceptionListener;
-      
-      // All the data that is used to connect this Connection
-      ActiveMQConnectionData* connectionData;
-      
-      // Indicates if this Connection is started
-      bool started;
-      
-      // Map of Consumer Ids to ActiveMQMessageListeners
-      std::map<unsigned int, ActiveMQMessageListener*> consumers;
-      
-      // Mutex to lock the Consumers Map
-      concurrent::Mutex mutex;
-   
-   public:
-
-      /**
-       * Constructor
-       */       
-      ActiveMQConnection(ActiveMQConnectionData* connectionData);
-
-      /**
-       * Destructor
-       */
-      virtual ~ActiveMQConnection(void);
-   
-   public:   // Connection Interface Methods
-   
-      /**
-       * Creates a new Session to work for this Connection
-       */
-      virtual cms::Session* createSession(void) throw ( cms::CMSException );
-      
-      /**
-       * Creates a new Session to work for this Connection using the
-       * specified acknowledgment mode
-       * @param the Acknowledgement Mode to use.
-       */
-      virtual cms::Session* createSession(cms::Session::AcknowledgeMode ackMode) 
-         throw ( cms::CMSException );
+    class ActiveMQConnection : 
+        public cms::Connection,
+        public connector::ConsumerMessageListener
+    {
+    private:
+   
+        // the registered exception listener
+        cms::ExceptionListener* exceptionListener;
+      
+        // All the data that is used to connect this Connection
+        ActiveMQConnectionData* connectionData;
+      
+        // Indicates if this Connection is started
+        bool started;
+
+        // Indicates that this connection has been closed, it is no longer
+        // usable after this becomes true
+        bool closed;
+      
+        // Map of Consumer Ids to ActiveMQMessageListeners
+        std::map< unsigned int, ActiveMQMessageListener* > consumers;
+      
+        // Mutex to lock the Consumers Map
+        concurrent::Mutex mutex;
+   
+    public:
+
+        /**
+         * Constructor
+         * @param Pointer to an ActiveMQConnectionData object, owned here
+         */       
+        ActiveMQConnection( ActiveMQConnectionData* connectionData );
+
+        virtual ~ActiveMQConnection(void);
+   
+    public:   // Connection Interface Methods
+   
+        /**
+         * Creates a new Session to work for this Connection
+         */
+        virtual cms::Session* createSession(void) throw ( cms::CMSException );
+      
+        /**
+         * Creates a new Session to work for this Connection using the
+         * specified acknowledgment mode
+         * @param the Acknowledgement Mode to use.
+         */
+        virtual cms::Session* createSession( cms::Session::AcknowledgeMode ackMode ) 
+            throw ( cms::CMSException );
          
-      /**
-       * Get the Client Id for this session
-       * @return string version of Client Id
-       */
-      virtual std::string getClientId(void) const;
-      
-      /**
-       * Retrieves the Connection Data object for this object.
-       * @return pointer to a connection data object.
-       */
-      virtual ActiveMQConnectionData* getConnectionData(void){
-         return connectionData;
-      } 
+        /**
+         * Get the Client Id for this session
+         * @return string version of Client Id
+         */
+        virtual std::string getClientId(void) const;
+      
+        /**
+         * Retrieves the Connection Data object for this object.
+         * @return pointer to a connection data object.
+         */
+        virtual ActiveMQConnectionData* getConnectionData(void){
+            return connectionData;
+        } 
          
-      /**
-       * Gets the registered Exception Listener for this connection
-       * @return pointer to an exception listnener or NULL
-       */
-      virtual cms::ExceptionListener* getExceptionListener(void) const{
-         return exceptionListener; };
-      
-      /**
-       * Sets the registed Exception Listener for this connection
-       * @param pointer to and <code>ExceptionListener</code>
-       */
-      virtual void setExceptionListener(cms::ExceptionListener* listener){
-         exceptionListener = listener; };
+        /**
+         * Gets the registered Exception Listener for this connection
+         * @return pointer to an exception listnener or NULL
+         */
+        virtual cms::ExceptionListener* getExceptionListener(void) const{
+            return exceptionListener; };
+      
+        /**
+         * Sets the registed Exception Listener for this connection
+         * @param pointer to and <code>ExceptionListener</code>
+         */
+        virtual void setExceptionListener( cms::ExceptionListener* listener ){
+            exceptionListener = listener; };
          
-      /**
-       * Close the currently open connection
-       * @throws CMSException
-       */
-      virtual void close(void) throw ( cms::CMSException );
-      
-      /**
-       * Starts or (restarts) a connections delivery of incoming messages
-       * @throws CMSException
-       */
-      virtual void start(void) throw ( cms::CMSException );
-      
-      /**
-       * Stop the flow of incoming messages
-       * @throws CMSException
-       */
-      virtual void stop(void) throw ( cms::CMSException );
-
-   public:   // ActiveMQConnection Methods
-   
-      /**
-       * Adds the ActiveMQMessageListener to the Mapping of Consumer Id's
-       * to listeners, all message to that id will be routed to the given
-       * listener
-       * @param Consumer Id String
-       * @param ActiveMQMessageListener Pointer
-       */
-      virtual void addMessageListener(const unsigned int consumerId,
-                                      ActiveMQMessageListener* listener); 
-      
-      /**
-       * Remove the Listener for the specified Consumer Id
-       * @param Consumer Id string
-       */
-      virtual void removeMessageListener(const unsigned int consumerId);
-
-   private:
-   
-      /**
-       * Notify the excpetion listener
-       */
-      void fire( exceptions::ActiveMQException& ex )
-      {
-         if( exceptionListener != NULL )
-         {
-            try
+        /**
+         * Close the currently open connection
+         * @throws CMSException
+         */
+        virtual void close(void) throw ( cms::CMSException );
+      
+        /**
+         * Starts or (restarts) a connections delivery of incoming messages
+         * @throws CMSException
+         */
+        virtual void start(void) throw ( cms::CMSException );
+      
+        /**
+         * Stop the flow of incoming messages
+         * @throws CMSException
+         */
+        virtual void stop(void) throw ( cms::CMSException );
+
+    public:   // ActiveMQConnection Methods
+   
+        /**
+         * Adds the ActiveMQMessageListener to the Mapping of Consumer Id's
+         * to listeners, all message to that id will be routed to the given
+         * listener
+         * @param Consumer Id String
+         * @param ActiveMQMessageListener Pointer
+         */
+        virtual void addMessageListener( const unsigned int consumerId,
+                                         ActiveMQMessageListener* listener ); 
+      
+        /**
+         * Remove the Listener for the specified Consumer Id
+         * @param Consumer Id string
+         */
+        virtual void removeMessageListener( const unsigned int consumerId );
+
+    private:
+   
+        /**
+         * Notify the excpetion listener
+         */
+        void fire( exceptions::ActiveMQException& ex )
+        {
+            if( exceptionListener != NULL )
             {
-               exceptionListener->onException( ex );
+                try
+                {
+                    exceptionListener->onException( ex );
+                }
+                catch(...){}
             }
-            catch(...){}
-         }
-      }
-
-      /**
-       * Called to dispatch a message to a particular consumer.
-       * @param consumer the target consumer of the dispatch.
-       * @param msg the message to be dispatched.
-       */
-      virtual void onConsumerMessage( connector::ConsumerInfo* consumer,
-                                      core::ActiveMQMessage* message );
+        }
+
+        /**
+         * Called to dispatch a message to a particular consumer.
+         * @param consumer the target consumer of the dispatch.
+         * @param msg the message to be dispatched.
+         */
+        virtual void onConsumerMessage( connector::ConsumerInfo* consumer,
+                                        core::ActiveMQMessage* message );
    
-   };
+    };
 
 }}
 

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnectionFactory.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnectionFactory.cpp?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnectionFactory.cpp (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnectionFactory.cpp Fri Jul 21 04:36:09 2006
@@ -25,6 +25,7 @@
 #include <activemq/network/Socket.h>
 #include <activemq/exceptions/NullPointerException.h>
 #include <activemq/core/ActiveMQConnection.h>
+#include <activemq/core/ActiveMQConstants.h>
 #include <activemq/util/StringTokenizer.h>
 #include <activemq/support/LibraryInit.h>
 
@@ -48,10 +49,11 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-ActiveMQConnectionFactory::ActiveMQConnectionFactory(const std::string& url,
-                                                     const std::string& username,
-                                                     const std::string& password,
-                                                     const std::string& clientId)
+ActiveMQConnectionFactory::ActiveMQConnectionFactory(
+    const std::string& url,
+    const std::string& username,
+    const std::string& password,
+    const std::string& clientId )
 {
     brokerURL = url;
 
@@ -64,7 +66,7 @@
 cms::Connection* ActiveMQConnectionFactory::createConnection(void) 
 throw ( cms::CMSException )
 {
-    return createConnection(username, password);
+    return createConnection( username, password, clientId );
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -96,9 +98,18 @@
         }
 
         // Store login data in the properties
-        properties->setProperty( "username", this->username );
-        properties->setProperty( "password", this->password );
-        properties->setProperty( "clientId", this->clientId );
+        properties->setProperty( 
+            ActiveMQConstants::toString(
+                ActiveMQConstants::PARAM_USERNAME ), 
+            this->username );
+        properties->setProperty( 
+            ActiveMQConstants::toString(
+                ActiveMQConstants::PARAM_PASSWORD ), 
+            this->password );
+        properties->setProperty( 
+            ActiveMQConstants::toString(
+                ActiveMQConstants::PARAM_CLIENTID ), 
+            this->clientId );
 
         // Parse out the properties from the URI
         parseURL( brokerURL, *properties );
@@ -112,7 +123,7 @@
             throw ActiveMQException( 
                 __FILE__, __LINE__, 
                 "ActiveMQConnectionFactory::createConnection - "
-                "unknown transport factory");
+                "unknown transport factory" );
         }
         
         // Create the transport.
@@ -121,7 +132,7 @@
             throw ActiveMQException( 
                 __FILE__, __LINE__, 
                 "ActiveMQConnectionFactory::createConnection - "
-                "failed creating new Transport");
+                "failed creating new Transport" );
         }
 
         // What wire format are we using, defaults to Stomp
@@ -137,18 +148,18 @@
             throw NullPointerException(
                 __FILE__, __LINE__,
                 "ActiveMQConnectionFactory::createConnection - "
-                "Connector for Wire Format not registered in Map");
+                "Connector for Wire Format not registered in Map" );
         }
 
         // Create the Connector.
         connector = connectorfactory->createConnector( *properties, transport );
 
-        if(connector == NULL)
+        if( connector == NULL )
         {
             throw NullPointerException(
                 __FILE__, __LINE__,
                 "ActiveMQConnectionFactory::createConnection - "
-                "Failed to Create the Connector");
+                "Failed to Create the Connector" );
         }
         
         // Start the Connector
@@ -177,9 +188,9 @@
     catch( ... )
     {
         exceptions::ActiveMQException ex( 
-           __FILE__, __LINE__, 
-           "ActiveMQConnectionFactory::create - "
-           "caught unknown exception" );
+            __FILE__, __LINE__, 
+            "ActiveMQConnectionFactory::create - "
+            "caught unknown exception" );
 
         delete connection;
         delete connector;
@@ -191,8 +202,8 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void ActiveMQConnectionFactory::parseURL(const std::string& URI, 
-                                         Properties& properties)
+void ActiveMQConnectionFactory::parseURL( const std::string& URI, 
+                                          Properties& properties )
     throw ( exceptions::IllegalArgumentException )
 {
     try
@@ -203,14 +214,14 @@
     
         // Require that there be three tokens at the least, these are
         // transport, url, port.
-        if(tokenizer.countTokens() < 3)
+        if( tokenizer.countTokens() < 3 )
         {
             throw exceptions::IllegalArgumentException(
                 __FILE__, __LINE__,
                 (string("ActiveMQConnectionFactory::parseURL - "
                         "Marlformed URI: ") + URI).c_str());
         }
-    
+
         // First element should be the Transport Type, following that is the
         // URL and any params.  
         properties.setProperty( "transport", tokenizer.nextToken() );
@@ -219,24 +230,29 @@
         // and then each param set is delimited with & we extract first
         // three chars as they are the left over ://
         properties.setProperty( "uri", tokenizer.nextToken("&?").substr(3) );
-    
+
         // Now get all the optional parameters and store them as properties
         int count = tokenizer.toArray(tokens);
         
-        for(int i = 0; i < count; ++i)
+        for( int i = 0; i < count; ++i )
         {
-            tokenizer.reset(tokens[i], "=");
+            tokenizer.reset( tokens[i], "=" );
     
-            if(tokenizer.countTokens() != 2)
+            if( tokenizer.countTokens() != 2 )
             {
                 throw exceptions::IllegalArgumentException(
                     __FILE__, __LINE__,
-                    (string("ActiveMQConnectionFactory::parseURL - "
-                           "Marlformed Parameter = ") + tokens[i]).c_str());
+                    ( string( "ActiveMQConnectionFactory::parseURL - "
+                              "Marlformed Parameter = " ) + tokens[i] ).c_str() );
             }
+            
+            // Get them in order, passing both as nextToken calls in the
+            // set Property can cause reversed order.
+            string key   = tokenizer.nextToken();
+            string value = tokenizer.nextToken();
     
             // Store this param as a property
-            properties.setProperty(tokenizer.nextToken(), tokenizer.nextToken());
+            properties.setProperty( key, value );
         }
     }
     AMQ_CATCH_RETHROW( IllegalArgumentException )

Modified: incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnectionFactory.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnectionFactory.h?rev=424272&r1=424271&r2=424272&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnectionFactory.h (original)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConnectionFactory.h Fri Jul 21 04:36:09 2006
@@ -25,153 +25,150 @@
 namespace activemq{
 namespace core{
 
-   class util::Properties;
+    class util::Properties;
 
-   class ActiveMQConnectionFactory : public cms::ConnectionFactory
-   {
-   private:
+    class ActiveMQConnectionFactory : public cms::ConnectionFactory
+    {
+    private:
    
-      // The user name this factory will use to connect
-      std::string username;
+        // The user name this factory will use to connect
+        std::string username;
       
-      // The password this factory will use to connect
-      std::string password;
+        // The password this factory will use to connect
+        std::string password;
       
-      // The client id to assign to the connection created
-      std::string clientId;
+        // The client id to assign to the connection created
+        std::string clientId;
       
-      // The URL of the Broker, the default is:
-      // "tcp://localhost:61616"
-      std::string brokerURL;
-
-   public:
-      
-      /**
-       * Constructor
-       */
-   	  ActiveMQConnectionFactory(void);
-
-      /**
-       * Constructor
-       * @param the URL of the Broker we are connecting to.
-       * @param username to authenticate with, defaults to ""
-       * @param password to authenticate with, defaults to ""
-       * @param client Id to assign to connection, defaults to ""
-       */
-      ActiveMQConnectionFactory(const std::string& url,
-                                const std::string& username = "",
-                                const std::string& password = "",
-                                const std::string& clientId = "");
-
-      /**
-       * Destructor
-       */
-   	  virtual ~ActiveMQConnectionFactory(void) {}
-
-      /**
-       * Creates a connection with the default user identity. The 
-       * connection is created in stopped mode. No messages will be 
-       * delivered until the Connection.start method is explicitly 
-       * called. 
-       * @throws CMSException
-       */
-      virtual cms::Connection* createConnection(void) throw ( cms::CMSException );
-
-      /**
-       * Creates a connection with the specified user identity. The 
-       * connection is created in stopped mode. No messages will be 
-       * delivered until the Connection.start method is explicitly called.
-       * @throw CMSException.
-       */
-      virtual cms::Connection* createConnection(const std::string& username,
-                                                const std::string& password,
-                                                const std::string& clientId = "")
-         throw ( cms::CMSException );
+        // The URL of the Broker, the default is:
+        // "tcp://localhost:61616"
+        std::string brokerURL;
+
+    public:
+      
+        /**
+         * Constructor
+         */
+   	    ActiveMQConnectionFactory(void);
+
+        /**
+         * Constructor
+         * @param the URL of the Broker we are connecting to.
+         * @param username to authenticate with, defaults to ""
+         * @param password to authenticate with, defaults to ""
+         * @param client Id to assign to connection, defaults to ""
+         */
+        ActiveMQConnectionFactory( const std::string& url,
+                                   const std::string& username = "",
+                                   const std::string& password = "",
+                                   const std::string& clientId = "" );
+
+   	    virtual ~ActiveMQConnectionFactory(void) {}
+
+        /**
+         * Creates a connection with the default user identity. The 
+         * connection is created in stopped mode. No messages will be 
+         * delivered until the Connection.start method is explicitly 
+         * called. 
+         * @throws CMSException
+         */
+        virtual cms::Connection* createConnection(void) throw ( cms::CMSException );
+
+        /**
+         * Creates a connection with the specified user identity. The 
+         * connection is created in stopped mode. No messages will be 
+         * delivered until the Connection.start method is explicitly called.
+         * @throw CMSException.
+         */
+        virtual cms::Connection* createConnection( const std::string& username,
+                                                   const std::string& password,
+                                                   const std::string& clientId = "" )
+            throw ( cms::CMSException );
                                        
-      /**
-       * Sets the username that should be used when creating a new connection
-       * @param username string
-       */
-      virtual void setUsername(const std::string& username){
-         this->username = username;
-      }
-      
-      /**
-       * Gets the username that this factory will use when creating a new
-       * connection instance.
-       * @return username string, "" for default credentials
-       */
-      virtual const std::string& getUsername(void) const {
-         return username;
-      }
-      
-      /**
-       * Sets the password that should be used when creating a new connection
-       * @param password string
-       */
-      virtual void setPassword(const std::string& password){
-         this->password = password;
-      }
-      
-      /**
-       * Gets the password that this factory will use when creating a new
-       * connection instance.
-       * @return password string, "" for default credentials
-       */
-      virtual const std::string& getPassword(void) const {
-         return password;
-      }
-
-      /**
-       * Sets the Broker URL that should be used when creating a new 
-       * connection instance
-       * @param brokerURL string
-       */
-      virtual void setBrokerURL(const std::string& brokerURL){
-         this->brokerURL = brokerURL;
-      }
-      
-      /**
-       * Gets the Broker URL that this factory will use when creating a new
-       * connection instance.
-       * @return brokerURL string
-       */
-      virtual const std::string& getBrokerURL(void) const {
-         return brokerURL;
-      }
-
-      /**
-       * Sets the Client Id that should be used when creating a new 
-       * connection instance
-       * @param clientId string
-       */
-      virtual void setClientId(const std::string& clientId){
-         this->clientId = clientId;
-      }
-      
-      /**
-       * Gets the Client Id that this factory will use when creating a new
-       * connection instance.
-       * @return clientId string
-       */
-      virtual const std::string& getClientId(void) const {
-         return clientId;
-      }
-      
-   protected:
-
-      /**
-       * Parses the properties out of the provided Broker URI and sets
-       * them in the passed Properties Object.
-       * @param a Broker URI to parse
-       * @param a Properties object to set the parsed values in
-       * @throws IllegalArgumentException if the passed URI is invalid
-       */
-      virtual void parseURL(const std::string& URI, 
-                            util::Properties& properties)
-         throw ( exceptions::IllegalArgumentException );
+        /**
+         * Sets the username that should be used when creating a new connection
+         * @param username string
+         */
+        virtual void setUsername( const std::string& username ){
+            this->username = username;
+        }
+      
+        /**
+         * Gets the username that this factory will use when creating a new
+         * connection instance.
+         * @return username string, "" for default credentials
+         */
+        virtual const std::string& getUsername(void) const {
+            return username;
+        }
+      
+        /**
+         * Sets the password that should be used when creating a new connection
+         * @param password string
+         */
+        virtual void setPassword( const std::string& password ){
+            this->password = password;
+        }
+      
+        /**
+         * Gets the password that this factory will use when creating a new
+         * connection instance.
+         * @return password string, "" for default credentials
+         */
+        virtual const std::string& getPassword(void) const {
+            return password;
+        }
+
+        /**
+         * Sets the Broker URL that should be used when creating a new 
+         * connection instance
+         * @param brokerURL string
+         */
+        virtual void setBrokerURL( const std::string& brokerURL ){
+            this->brokerURL = brokerURL;
+        }
+      
+        /**
+         * Gets the Broker URL that this factory will use when creating a new
+         * connection instance.
+         * @return brokerURL string
+         */
+        virtual const std::string& getBrokerURL(void) const {
+            return brokerURL;
+        }
+
+        /**
+         * Sets the Client Id that should be used when creating a new 
+         * connection instance
+         * @param clientId string
+         */
+        virtual void setClientId( const std::string& clientId ){
+            this->clientId = clientId;
+        }
+      
+        /**
+         * Gets the Client Id that this factory will use when creating a new
+         * connection instance.
+         * @return clientId string
+         */
+        virtual const std::string& getClientId(void) const {
+            return clientId;
+        }
+      
+    protected:
+
+        /**
+         * Parses the properties out of the provided Broker URI and sets
+         * them in the passed Properties Object.
+         * @param a Broker URI to parse
+         * @param a Properties object to set the parsed values in
+         * @throws IllegalArgumentException if the passed URI is invalid
+         */
+        virtual void parseURL( const std::string& URI, 
+                               util::Properties& properties )
+            throw ( exceptions::IllegalArgumentException );
          
-   };
+    };
 
 }}
 

Added: incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConstants.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConstants.cpp?rev=424272&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConstants.cpp (added)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConstants.cpp Fri Jul 21 04:36:09 2006
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2006 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed 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.
+ */
+ 
+#include "ActiveMQConstants.h"
+#include <stdio.h>
+
+using namespace std;
+using namespace activemq;
+using namespace activemq::core;
+
+////////////////////////////////////////////////////////////////////////////////
+string ActiveMQConstants::StaticInitializer::destOptions[NUM_OPTIONS];
+string ActiveMQConstants::StaticInitializer::uriParams[NUM_PARAMS];
+
+map< std::string, ActiveMQConstants::DestinationOption > 
+    ActiveMQConstants::StaticInitializer::destOptionMap;
+map< std::string, ActiveMQConstants::URIParam > 
+    ActiveMQConstants::StaticInitializer::uriParamsMap;
+
+ActiveMQConstants::StaticInitializer ActiveMQConstants::staticInits;
+
+////////////////////////////////////////////////////////////////////////////////
+ActiveMQConstants::StaticInitializer::StaticInitializer(){
+    
+    destOptions[CONSUMER_PREFECTCHSIZE] = "consumer.prefetchSize";
+    destOptions[CUNSUMER_MAXPENDINGMSGLIMIT] = "consumer.maximumPendingMessageLimit";
+    destOptions[CONSUMER_NOLOCAL] = "consumer.noLocal";
+    destOptions[CONSUMER_DISPATCHASYNC] = "consumer.dispatchAsync";
+    destOptions[CONSUMER_RETROACTIVE] = "consumer.retroactive";
+    destOptions[CONSUMER_SELECTOR] = "consumer.selector";
+    destOptions[CONSUMER_EXCLUSIVE] = "consumer.exclusive";
+    destOptions[CONSUMER_PRIORITY] = "consumer.priority";
+    
+    uriParams[PARAM_USERNAME] = "username";
+    uriParams[PARAM_PASSWORD] = "password";
+    uriParams[PARAM_CLIENTID] = "client-id";    
+
+    for( int ix=0; ix<NUM_OPTIONS; ++ix ){
+        destOptionMap[destOptions[ix]] = (DestinationOption)ix;
+    }
+    for( int ix=0; ix<NUM_PARAMS; ++ix ){
+        uriParamsMap[uriParams[ix]] = (URIParam)ix;
+    }
+}

Added: incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConstants.h
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConstants.h?rev=424272&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConstants.h (added)
+++ incubator/activemq/trunk/activemq-cpp/src/main/activemq/core/ActiveMQConstants.h Fri Jul 21 04:36:09 2006
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2006 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed 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_CORE_ACTIVEMQCONSTANTS_H_
+#define ACTIVEMQ_CORE_ACTIVEMQCONSTANTS_H_
+
+#include <activemq/exceptions/IllegalArgumentException.h>
+
+#include <string>
+#include <map>
+
+namespace activemq{
+namespace core{
+    
+    /**
+     * Class holding constant values for various ActiveMQ specific things
+     * Each constant is defined as an enumeration and has functions that
+     * convert back an forth between string and enum values.
+     */
+    class ActiveMQConstants{    
+    public:
+    
+        /**
+         * These values represent the options that can be appended to an
+         * Destination name, i.e. /topic/foo?consumer.exclusive=true
+         */
+        enum DestinationOption{
+            CONSUMER_PREFECTCHSIZE,
+            CUNSUMER_MAXPENDINGMSGLIMIT,
+            CONSUMER_NOLOCAL,
+            CONSUMER_DISPATCHASYNC,
+            CONSUMER_RETROACTIVE,
+            CONSUMER_SELECTOR,
+            CONSUMER_EXCLUSIVE,
+            CONSUMER_PRIORITY,
+            NUM_OPTIONS
+        };
+
+        /**
+         * These values represent the parameters that can be added to the
+         * connection URI that affect the ActiveMQ Core API
+         */        
+        enum URIParam
+        {
+            PARAM_USERNAME,
+            PARAM_PASSWORD,
+            PARAM_CLIENTID,
+            NUM_PARAMS
+        };
+        
+        static const std::string& toString( const DestinationOption option ){
+            return StaticInitializer::destOptions[option];
+        }
+        
+        static DestinationOption toDestinationOption( const std::string& option ){     
+            std::map< std::string, DestinationOption >::iterator iter = 
+                StaticInitializer::destOptionMap.find( option );
+
+            if( iter == StaticInitializer::destOptionMap.end() ){
+                return NUM_OPTIONS;
+            }
+                    
+            return iter->second;
+        }             
+        
+        static const std::string& toString( const URIParam option ){
+            return StaticInitializer::uriParams[option];
+        }
+        
+        static URIParam toURIOption( const std::string& option ){     
+            std::map< std::string, URIParam >::iterator iter = 
+                StaticInitializer::uriParamsMap.find( option );
+
+            if( iter == StaticInitializer::uriParamsMap.end() ){
+                return NUM_PARAMS;
+            }
+                    
+            return iter->second;
+        }             
+
+        class StaticInitializer{
+        public:
+            StaticInitializer();
+            virtual ~StaticInitializer(){}
+            
+            static std::string destOptions[NUM_OPTIONS];
+            static std::string uriParams[NUM_PARAMS];
+            static std::map<std::string, DestinationOption> destOptionMap;
+            static std::map<std::string, URIParam> uriParamsMap;
+        };
+        
+    private:
+    
+        static StaticInitializer staticInits;        
+
+    };
+    
+}}
+
+#endif /*ACTIVEMQ_CORE_ACTIVEMQCONSTANTS_H_*/