You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ai...@apache.org on 2008/02/28 18:32:14 UTC

svn commit: r632068 [2/3] - in /incubator/qpid/branches/thegreatmerge/qpid: ./ java/broker/ java/broker/etc/ java/broker/src/main/java/ java/broker/src/main/java/org/apache/qpid/server/ack/ java/broker/src/main/java/org/apache/qpid/server/exchange/ jav...

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHost.java Thu Feb 28 09:31:56 2008
@@ -26,8 +26,8 @@
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.log4j.Logger;
 import org.apache.qpid.server.AMQBrokerManagerMBean;
-import org.apache.qpid.server.security.access.AccessManager;
-import org.apache.qpid.server.security.access.AccessManagerImpl;
+import org.apache.qpid.server.security.access.ACLPlugin;
+import org.apache.qpid.server.security.access.ACLManager;
 import org.apache.qpid.server.security.access.Accessable;
 import org.apache.qpid.server.security.auth.manager.PrincipalDatabaseAuthenticationManager;
 import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
@@ -72,7 +72,7 @@
 
     private AuthenticationManager _authenticationManager;
 
-    private AccessManager _accessManager;
+    private ACLPlugin _accessManager;
 
     private final Timer _houseKeepingTimer = new Timer("Queue-housekeeping", true);
      
@@ -172,7 +172,7 @@
 
         _authenticationManager = new PrincipalDatabaseAuthenticationManager(name, hostConfig);
 
-        _accessManager = new AccessManagerImpl(name, hostConfig);
+        _accessManager = ACLManager.loadACLManager(name, hostConfig);
 
         _brokerMBean = new AMQBrokerManagerMBean(_virtualHostMBean);
         _brokerMBean.register();
@@ -302,7 +302,7 @@
         return _authenticationManager;
     }
 
-    public AccessManager getAccessManager()
+    public ACLPlugin getAccessManager()
     {
         return _accessManager;
     }

Propchange: incubator/qpid/branches/thegreatmerge/qpid/java/client/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Feb 28 09:31:56 2008
@@ -3,3 +3,5 @@
 target
 qpid-client.ipr
 qpid-client.iws
+.classpath
+.project

Propchange: incubator/qpid/branches/thegreatmerge/qpid/java/client-java14/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Feb 28 09:31:56 2008
@@ -1,2 +1,5 @@
 target
 qpid-client-java14.iml
+.settings
+.classpath
+.project

Propchange: incubator/qpid/branches/thegreatmerge/qpid/java/client/example/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Feb 28 09:31:56 2008
@@ -1,2 +1,6 @@
 target
 qpid-example.iml
+.classpath
+qpid-example.ipr
+qpid-example.iws
+.project

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java Thu Feb 28 09:31:56 2008
@@ -470,7 +470,7 @@
 
             if (exceptions.size() > 0)
             {
-                JMSException e = exceptions.get(exceptions.size() - 1);
+                JMSException e = exceptions.get(0);
                 int code = -1;
                 try
                 {
@@ -875,11 +875,13 @@
                         {
                             long startCloseTime = System.currentTimeMillis();
 
-                            _taskPool.shutdown();
-                            closeAllSessions(null, timeout, startCloseTime);
+                        closeAllSessions(null, timeout, startCloseTime);
 
-                            if (!_taskPool.isTerminated())
-                            {
+                        //This MUST occur after we have successfully closed all Channels/Sessions
+                        _taskPool.shutdown();
+
+                        if (!_taskPool.isTerminated())
+                        {
                                 try
                                 {
                                     // adjust timeout

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java Thu Feb 28 09:31:56 2008
@@ -639,7 +639,6 @@
                     final AMQFrame frame = body.generateFrame(getChannelId());
 
                     getProtocolHandler().syncWrite(frame, ChannelCloseOkBody.class, timeout);
-                     
 
                         // When control resumes at this point, a reply will have been received that
                         // indicates the broker has closed the channel successfully.
@@ -1737,11 +1736,6 @@
                         {
                             JMSException ex = new JMSException("Error registering consumer: " + e);
 
-                            if (_logger.isDebugEnabled())
-                            {
-                                e.printStackTrace();
-                            }
-
                             ex.setLinkedException(e);
                             throw ex;
                         }
@@ -2354,7 +2348,7 @@
      *
      * @todo Be aware of possible changes to parameter order as versions change.
      */
-    private AMQShortString declareQueue(final AMQDestination amqd, final AMQProtocolHandler protocolHandler)
+    public AMQShortString declareQueue(final AMQDestination amqd, final AMQProtocolHandler protocolHandler)
             throws AMQException
     {
         /*return new FailoverRetrySupport<AMQShortString, AMQException>(*/
@@ -2427,17 +2421,17 @@
         return ++_nextProducerId;
     }
 
-    protected AMQProtocolHandler getProtocolHandler()
+    public AMQProtocolHandler getProtocolHandler()
     {
         return _connection.getProtocolHandler();
     }
 
-    protected byte getProtocolMajorVersion()
+    public byte getProtocolMajorVersion()
     {
         return getProtocolHandler().getProtocolMajorVersion();
     }
 
-    protected byte getProtocolMinorVersion()
+    public byte getProtocolMinorVersion()
     {
         return getProtocolHandler().getProtocolMinorVersion();
     }

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java Thu Feb 28 09:31:56 2008
@@ -632,7 +632,7 @@
         }
     }
 
-    protected AMQShortString declareQueue(final AMQDestination amqd, final AMQProtocolHandler protocolHandler)
+    public AMQShortString declareQueue(final AMQDestination amqd, final AMQProtocolHandler protocolHandler)
             throws AMQException
     {
         /*return new FailoverRetrySupport<AMQShortString, AMQException>(*/

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/failover/FailoverHandler.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/failover/FailoverHandler.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/failover/FailoverHandler.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/failover/FailoverHandler.java Thu Feb 28 09:31:56 2008
@@ -141,6 +141,9 @@
                 _logger.info("Failover process veto-ed by client");
 
                 _amqProtocolHandler.setStateManager(existingStateManager);
+
+                //todo: ritchiem these exceptions are useless... Would be better to attempt to propogate exception that
+                // prompted the failover event.
                 if (_host != null)
                 {
                     _amqProtocolHandler.getConnection().exceptionReceived(new AMQDisconnectedException("Redirect was vetoed by client", null));

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/handler/ConnectionCloseMethodHandler.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/handler/ConnectionCloseMethodHandler.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/handler/ConnectionCloseMethodHandler.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/handler/ConnectionCloseMethodHandler.java Thu Feb 28 09:31:56 2008
@@ -73,10 +73,11 @@
 
             if (errorCode != AMQConstant.REPLY_SUCCESS)
             {
-                if (errorCode == AMQConstant.NOT_ALLOWED)
+                if (errorCode == AMQConstant.NOT_ALLOWED || (errorCode == AMQConstant.ACCESS_REFUSED))
                 {
-                    _logger.info("Authentication Error:" + Thread.currentThread().getName());
+                    _logger.info("Error :" + errorCode +":"+ Thread.currentThread().getName());
 
+                    // todo ritchiem : Why do this here when it is going to be done in the finally block?
                     session.closeProtocolSession();
 
                     // todo this is a bit of a fudge (could be conssidered such as each new connection needs a new state manager or at least a fresh state.
@@ -98,6 +99,8 @@
 
             session.closeProtocolSession();
 
+            // ritchiem: Doing this though will cause any waiting connection start to be released without being able to
+            // see what the cause was.
             stateManager.changeState(AMQState.CONNECTION_CLOSED);
         }
     }

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java Thu Feb 28 09:31:56 2008
@@ -209,6 +209,7 @@
         }
         catch (RuntimeException e)
         {
+            _logger.warn(e.getMessage());
             e.printStackTrace();
         }
 
@@ -352,18 +353,27 @@
      */
     public void exceptionCaught(IoSession session, Throwable cause)
     {
-        if (_failoverState == FailoverState.NOT_STARTED)
-        {
-            // if (!(cause instanceof AMQUndeliveredException) && (!(cause instanceof AMQAuthenticationException)))
-            if (cause instanceof AMQConnectionClosedException)
-            {
-                _logger.info("Exception caught therefore going to attempt failover: " + cause, cause);
-                // this will attemp failover
-
-                sessionClosed(session);
-                _connection.exceptionReceived(cause);
-            }
-
+    	if (_failoverState == FailoverState.NOT_STARTED)
+    	{
+    		// if (!(cause instanceof AMQUndeliveredException) && (!(cause instanceof AMQAuthenticationException)))
+    		if (cause instanceof AMQConnectionClosedException)
+    		{
+    			_logger.info("Exception caught therefore going to attempt failover: " + cause, cause);
+    			// this will attemp failover
+
+    			sessionClosed(session);
+    			_connection.exceptionReceived(cause);
+    		}
+
+    		if (cause instanceof ProtocolCodecException)
+    		{
+    			_logger.info("Protocol Exception caught NOT going to attempt failover as " +
+    					"cause isn't AMQConnectionClosedException: " + cause, cause);
+
+    			AMQException amqe = new AMQException(null, "Protocol handler error: " + cause, cause);
+    			propagateExceptionToWaiters(amqe);
+    		}
+    		_connection.exceptionReceived(cause);
             // FIXME Need to correctly handle other exceptions. Things like ...
             // if (cause instanceof AMQChannelClosedException)
             // which will cause the JMSSession to end due to a channel close and so that Session needs

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/transport/TransportConnection.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/transport/TransportConnection.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/transport/TransportConnection.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/client/transport/TransportConnection.java Thu Feb 28 09:31:56 2008
@@ -76,7 +76,7 @@
         return _openSocketRegister.remove(socketID);
     }
 
-    public static ITransportConnection getInstance(BrokerDetails details) throws AMQTransportConnectionException
+    public static synchronized ITransportConnection getInstance(BrokerDetails details) throws AMQTransportConnectionException
     {
         int transport = getTransport(details.getTransport());
 

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/jms/MessageProducer.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/jms/MessageProducer.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/jms/MessageProducer.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/client/src/main/java/org/apache/qpid/jms/MessageProducer.java Thu Feb 28 09:31:56 2008
@@ -50,4 +50,8 @@
     void send(Destination destination, Message message, int deliveryMode,
                      int priority, long timeToLive, boolean mandatory, boolean immediate)
             throws JMSException;
+
+    void send(Destination destination, Message message, int deliveryMode, int priority, long timeToLive,
+                     boolean mandatory, boolean immediate, boolean waitUntilSent) throws JMSException;
+
 }

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/client/src/old_test/java/org/apache/qpid/fragmentation/TestLargePublisher.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/old_test/java/org/apache/qpid/fragmentation/TestLargePublisher.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/client/src/old_test/java/org/apache/qpid/fragmentation/TestLargePublisher.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/client/src/old_test/java/org/apache/qpid/fragmentation/TestLargePublisher.java Thu Feb 28 09:31:56 2008
@@ -183,7 +183,7 @@
         }
         catch (UnknownHostException e)
         {
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+            e.printStackTrace();
         }
         catch (AMQException e)
         {

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/client/src/old_test/java/org/apache/qpid/pubsub1/TestPublisher.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/old_test/java/org/apache/qpid/pubsub1/TestPublisher.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/client/src/old_test/java/org/apache/qpid/pubsub1/TestPublisher.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/client/src/old_test/java/org/apache/qpid/pubsub1/TestPublisher.java Thu Feb 28 09:31:56 2008
@@ -133,7 +133,7 @@
         }
         catch (JMSException e)
         {
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+            e.printStackTrace();
         }
     }
 
@@ -163,7 +163,7 @@
         }
         catch (UnknownHostException e)
         {
-            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+            e.printStackTrace();
         }
         catch (AMQException e)
         {

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionTest.java Thu Feb 28 09:31:56 2008
@@ -33,6 +33,7 @@
 import junit.framework.TestCase;
 
 import javax.jms.Connection;
+import javax.jms.JMSException;
 import javax.jms.QueueSession;
 import javax.jms.TopicSession;
 
@@ -115,8 +116,8 @@
         }
     }
 
-     //fixme AMQAuthenticationException is not propogaged
-    public void PasswordFailureConnection() throws Exception
+    //See QPID-771
+    public void testPasswordFailureConnection() throws Exception
     {
         try
         {
@@ -125,10 +126,9 @@
         }
         catch (AMQException amqe)
         {
-            if (!(amqe instanceof AMQAuthenticationException))
-            {
-                fail("Correct exception not thrown. Excpected 'AMQAuthenticationException' got: " + amqe);
-            }
+            assertEquals("Exception was wrong type", JMSException.class, amqe.getCause().getClass());
+            Exception linked = ((JMSException) amqe.getCause()).getLinkedException();
+            assertEquals("Exception was wrong type", AMQAuthenticationException.class, linked.getClass());
         }
     }
 

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/common/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/common/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/common/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/common/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java Thu Feb 28 09:31:56 2008
@@ -1,34 +1,3 @@
-package org.apache.mina.common.support;
-
-import org.apache.mina.common.IoFuture;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.common.IoFutureListener;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/*
-*
-* 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.
-*
-*/
-
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
@@ -48,6 +17,15 @@
  *  under the License.
  *
  */
+package org.apache.mina.common.support;
+
+import org.apache.mina.common.IoFuture;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.common.IoFutureListener;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
 
 /**
  * A default implementation of {@link org.apache.mina.common.IoFuture}.

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQBody.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQBody.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQBody.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQBody.java Thu Feb 28 09:31:56 2008
@@ -36,8 +36,5 @@
     
     public void writePayload(ByteBuffer buffer);
     
-    //public void populateFromBuffer(ByteBuffer buffer, long size)
-    //    throws AMQFrameDecodingException, AMQProtocolVersionException;        
-
     void handle(final int channelId, final AMQVersionAwareProtocolSession amqMinaProtocolSession) throws AMQException;
 }

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java Thu Feb 28 09:31:56 2008
@@ -1,627 +1,692 @@
-/*
- *
- * 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.
- *
- */
-
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.*;
-import java.lang.ref.WeakReference;
-
-/**
- * A short string is a representation of an AMQ Short String
- * Short strings differ from the Java String class by being limited to on ASCII characters (0-127)
- * and thus can be held more effectively in a byte buffer.
- *
- */
-public final class AMQShortString implements CharSequence, Comparable<AMQShortString>
-{
-    private static final byte MINUS = (byte)'-';
-    private static final byte ZERO = (byte) '0';
-
-
-
-    private final class TokenizerImpl implements AMQShortStringTokenizer
-    {
-        private final byte _delim;
-        private int _count = -1;
-        private int _pos = 0;
-
-        public TokenizerImpl(final byte delim)
-        {
-            _delim = delim;
-        }
-
-        public int countTokens()
-        {
-            if(_count == -1)
-            {
-                _count = 1 + AMQShortString.this.occurences(_delim);
-            }
-            return _count;
-        }
-
-        public AMQShortString nextToken()
-        {
-            if(_pos <= AMQShortString.this.length())
-            {
-                int nextDelim = AMQShortString.this.indexOf(_delim, _pos);
-                if(nextDelim == -1)
-                {
-                    nextDelim = AMQShortString.this.length();
-                }
-
-                AMQShortString nextToken = AMQShortString.this.substring(_pos, nextDelim++);
-                _pos = nextDelim;
-                return nextToken;
-            }
-            else
-            {
-                return null;
-            }
-        }
-
-        public boolean hasMoreTokens()
-        {
-            return _pos <= AMQShortString.this.length();
-        }
-    }
-
-    private AMQShortString substring(final int from, final int to)
-    {
-        return new AMQShortString(_data, from, to);
-    }
-
-
-    private static final ThreadLocal<Map<AMQShortString, WeakReference<AMQShortString>>> _localInternMap =
-            new ThreadLocal<Map<AMQShortString, WeakReference<AMQShortString>>>()
-            {
-                protected Map<AMQShortString, WeakReference<AMQShortString>> initialValue()
-                {
-                    return new WeakHashMap<AMQShortString, WeakReference<AMQShortString>>();
-                };
-            };
-
-    private static final Map<AMQShortString, WeakReference<AMQShortString>> _globalInternMap =
-            new WeakHashMap<AMQShortString, WeakReference<AMQShortString>>();
-
-    private static final Logger _logger = LoggerFactory.getLogger(AMQShortString.class);
-
-    private final byte[] _data;
-    private final int _offset;
-    private int _hashCode;
-    private final int _length;
-    private static final char[] EMPTY_CHAR_ARRAY = new char[0];
-    private char[] chars;
-    private String str;
-    
-    public static final AMQShortString EMPTY_STRING = new AMQShortString((String)null);
-
-    public AMQShortString(byte[] data)
-    {
-
-        _data = data.clone();
-        _length = data.length;
-        _offset = 0;
-    }
-
-    public AMQShortString(byte[] data, int pos)
-    {
-        final int size = data[pos++];
-        final byte[] dataCopy = new byte[size];
-        System.arraycopy(data,pos,dataCopy,0,size);
-        _length = size;
-        _data = dataCopy;
-        _offset = 0;
-    }
-
-    public AMQShortString(String data)
-    {
-        this((data == null) ? EMPTY_CHAR_ARRAY : data.toCharArray());
-
-    }
-
-    public AMQShortString(char[] data)
-    {
-        if (data == null)
-        {
-            throw new NullPointerException("Cannot create AMQShortString with null char[]");
-        }
-
-        final int length = data.length;
-        final byte[] stringBytes = new byte[length];
-        int hash = 0;
-        for (int i = 0; i < length; i++)
-        {
-            stringBytes[i] = (byte) (0xFF & data[i]);
-            hash = (31 * hash) + stringBytes[i];
-        }
-        _hashCode = hash;
-        _data = stringBytes;
-
-        _length = length;
-        _offset = 0;
-
-    }
-
-    public AMQShortString(CharSequence charSequence)
-    {
-        final int length = charSequence.length();
-        final byte[] stringBytes = new byte[length];
-        int hash = 0;
-        for (int i = 0; i < length; i++)
-        {
-            stringBytes[i] = ((byte) (0xFF & charSequence.charAt(i)));
-            hash = (31 * hash) + stringBytes[i];
-
-        }
-
-        _data = stringBytes;
-        _hashCode = hash;
-        _length = length;
-        _offset = 0;
-
-    }
-
-    private AMQShortString(ByteBuffer data, final int length)
-    {
-        byte[] dataBytes = new byte[length];
-        data.get(dataBytes);
-        _data = dataBytes;
-        _length = length;
-        _offset = 0;
-
-    }
-
-    private AMQShortString(final byte[] data, final int from, final int to)
-    {
-        _offset = from;
-        _length = to - from;
-        _data = data;
-    }
-
-
-    /**
-     * Get the length of the short string
-     * @return length of the underlying byte array
-     */
-    public int length()
-    {
-        return _length;
-    }
-
-    public char charAt(int index)
-    {
-
-        return (char) _data[_offset + index];
-
-    }
-
-    public CharSequence subSequence(int start, int end)
-    {
-        return new CharSubSequence(start, end);
-    }
-
-    public int writeToByteArray(byte[] encoding, int pos)
-    {
-        final int size = length();
-        encoding[pos++] = (byte) size;
-        System.arraycopy(_data,_offset,encoding,pos,size);
-        return pos+size;
-    }
-
-    public static AMQShortString readFromByteArray(byte[] byteEncodedDestination, int pos)
-    {
-
-
-        final AMQShortString shortString = new AMQShortString(byteEncodedDestination, pos);
-        if(shortString.length() == 0)
-        {
-            return null;
-        }
-        else
-        {
-            return shortString;
-        }
-    }
-
-    public static AMQShortString readFromBuffer(ByteBuffer buffer)
-    {
-        final short length = buffer.getUnsigned();
-        if (length == 0)
-        {
-            return null;
-        }
-        else
-        {
-
-            return new AMQShortString(buffer, length);
-        }
-    }
-
-    public byte[] getBytes()
-    {
-        if(_offset == 0 && _length == _data.length)
-        {
-            return _data.clone();
-        }
-        else
-        {
-            byte[] data = new byte[_length];
-            System.arraycopy(_data,_offset,data,0,_length);
-            return data;
-        }
-    }
-
-    public void writeToBuffer(ByteBuffer buffer)
-    {
-
-        final int size = length();
-        //buffer.setAutoExpand(true);
-        buffer.put((byte) size);
-        buffer.put(_data, _offset, size);
-    }
-
-    private final class CharSubSequence implements CharSequence
-    {
-        private final int _sequenceOffset;
-        private final int _end;
-
-        public CharSubSequence(final int offset, final int end)
-        {
-            _sequenceOffset = offset;
-            _end = end;
-        }
-
-        public int length()
-        {
-            return _end - _sequenceOffset;
-        }
-
-        public char charAt(int index)
-        {
-            return AMQShortString.this.charAt(index + _sequenceOffset);
-        }
-
-        public CharSequence subSequence(int start, int end)
-        {
-            return new CharSubSequence(start + _sequenceOffset, end + _sequenceOffset);
-        }
-    }
-
-    public char[] asChars()
-    {
-        if (chars == null)
-        {
-            final int size = length();
-            chars = new char[size];
-
-	    for (int i = 0; i < size; i++)
-	    {
-                chars[i] = (char) _data[i + _offset];
-            }
-	}
-        return chars;
-    }
-
-    public String asString()
-    {
-        if (str == null)
-        {
-            str = new String(asChars());
-        }
-
-        return str;
-    }
-
-    public boolean equals(Object o)
-    {
-
-
-        if(o instanceof AMQShortString)
-        {
-            return equals((AMQShortString)o);
-        }
-        if(o instanceof CharSequence)
-        {
-            return equals((CharSequence)o);
-        }
-
-        if (o == null)
-        {
-            return false;
-        }
-
-        if (o == this)
-        {
-            return true;
-        }
-
-
-        return false;
-
-    }
-
-    public boolean equals(final AMQShortString otherString)
-    {
-        if (otherString == this)
-        {
-            return true;
-        }
-
-        if (otherString == null)
-        {
-            return false;
-        }
-
-        if ((_hashCode != 0) && (otherString._hashCode != 0) && (_hashCode != otherString._hashCode))
-        {
-            return false;
-        }
-
-        return (_offset == 0 && otherString._offset == 0 && _length == _data.length && otherString._length == otherString._data.length && Arrays.equals(_data,otherString._data))
-                || Arrays.equals(getBytes(),otherString.getBytes());
-
-    }
-
-    public boolean equals(CharSequence s)
-    {
-        if(s instanceof AMQShortString)
-        {
-            return equals((AMQShortString)s);
-        }
-
-        if (s == null)
-        {
-            return false;
-        }
-
-        if (s.length() != length())
-        {
-            return false;
-        }
-
-        for (int i = 0; i < length(); i++)
-        {
-            if (charAt(i) != s.charAt(i))
-            {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    public int hashCode()
-    {
-        int hash = _hashCode;
-        if (hash == 0)
-        {
-            final int size = length();
-
-            for (int i = 0; i < size; i++)
-            {
-                hash = (31 * hash) + _data[i+_offset];
-            }
-
-            _hashCode = hash;
-        }
-
-        return hash;
-    }
-
-    public void setDirty()
-    {
-        _hashCode = 0;
-    }
-
-    public String toString()
-    {
-        return asString();
-    }
-
-    public int compareTo(AMQShortString name)
-    {
-        if (name == null)
-        {
-            return 1;
-        }
-        else
-        {
-
-            if (name.length() < length())
-            {
-                return -name.compareTo(this);
-            }
-
-            for (int i = 0; i < length(); i++)
-            {
-                final byte d = _data[i+_offset];
-                final byte n = name._data[i+name._offset];
-                if (d < n)
-                {
-                    return -1;
-                }
-
-                if (d > n)
-                {
-                    return 1;
-                }
-            }
-
-            return (length() == name.length()) ? 0 : -1;
-        }
-    }
-
-    public AMQShortStringTokenizer tokenize(byte delim)
-    {
-        return new TokenizerImpl(delim);
-    }
-
-
-    public AMQShortString intern()
-    {
-
-        hashCode();
-
-        Map<AMQShortString, WeakReference<AMQShortString>> localMap =
-                _localInternMap.get();
-
-        WeakReference<AMQShortString> ref = localMap.get(this);
-        AMQShortString internString;
-
-        if(ref != null)
-        {
-            internString = ref.get();
-            if(internString != null)
-            {
-                return internString;
-            }
-        }
-
-
-        synchronized(_globalInternMap)
-        {
-
-            ref = _globalInternMap.get(this);
-            if((ref == null) || ((internString = ref.get()) == null))
-            {
-                internString = new AMQShortString(getBytes());
-                ref = new WeakReference(internString);
-                _globalInternMap.put(internString, ref);
-            }
-
-        }
-        localMap.put(internString, ref);
-        return internString;
-
-    }
-
-    private int occurences(final byte delim)
-    {
-        int count = 0;
-        final int end = _offset + _length;
-        for(int i = _offset ; i < end ; i++ )
-        {
-            if(_data[i] == delim)
-            {
-                count++;
-            }
-        }
-        return count;
-    }
-
-    private int indexOf(final byte val, final int pos)
-    {
-
-        for(int i = pos; i < length(); i++)
-        {
-            if(_data[_offset+i] == val)
-            {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-
-    public static AMQShortString join(final Collection<AMQShortString> terms,
-                                       final AMQShortString delim)
-    {
-        if(terms.size() == 0)
-        {
-            return EMPTY_STRING;
-        }
-
-        int size = delim.length() * (terms.size() - 1);
-        for(AMQShortString term : terms)
-        {
-            size += term.length();
-        }
-
-        byte[] data = new byte[size];
-        int pos = 0;
-        final byte[] delimData = delim._data;
-        final int delimOffset = delim._offset;
-        final int delimLength = delim._length;
-
-
-        for(AMQShortString term : terms)
-        {
-
-            if(pos!=0)
-            {
-                System.arraycopy(delimData, delimOffset,data,pos, delimLength);
-                pos+=delimLength;
-            }
-            System.arraycopy(term._data,term._offset,data,pos,term._length);
-            pos+=term._length;
-        }
-
-
-
-        return new AMQShortString(data,0,size);  
-    }
-
-    public int toIntValue()
-    {
-        int pos = 0;
-        int val = 0;
-
-
-        boolean isNegative = (_data[pos] == MINUS);
-        if(isNegative)
-        {
-            pos++;
-        }
-        while(pos < _length)
-        {
-            int digit = (int) (_data[pos++] - ZERO);
-            if((digit < 0) || (digit > 9))
-            {
-                throw new NumberFormatException("\""+toString()+"\" is not a valid number");
-            }
-            val = val * 10;
-            val += digit;
-        }
-        if(isNegative)
-        {
-            val = val * -1;
-        }
-        return val;
-    }
-
-    public boolean contains(final byte b)
-    {
-        for(int i = 0; i < _length; i++)
-        {
-            if(_data[i] == b)
-            {
-                return true;
-            }
-        }
-        return false;  //To change body of created methods use File | Settings | File Templates.
-    }
-
-}
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.qpid.framing;
+
+import org.apache.mina.common.ByteBuffer;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.*;
+import java.lang.ref.WeakReference;
+
+/**
+ * A short string is a representation of an AMQ Short String
+ * Short strings differ from the Java String class by being limited to on ASCII characters (0-127)
+ * and thus can be held more effectively in a byte buffer.
+ *
+ */
+public final class AMQShortString implements CharSequence, Comparable<AMQShortString>
+{
+    private static final byte MINUS = (byte)'-';
+    private static final byte ZERO = (byte) '0';
+
+
+
+    private final class TokenizerImpl implements AMQShortStringTokenizer
+    {
+        private final byte _delim;
+        private int _count = -1;
+        private int _pos = 0;
+
+        public TokenizerImpl(final byte delim)
+        {
+            _delim = delim;
+        }
+
+        public int countTokens()
+        {
+            if(_count == -1)
+            {
+                _count = 1 + AMQShortString.this.occurences(_delim);
+            }
+            return _count;
+        }
+
+        public AMQShortString nextToken()
+        {
+            if(_pos <= AMQShortString.this.length())
+            {
+                int nextDelim = AMQShortString.this.indexOf(_delim, _pos);
+                if(nextDelim == -1)
+                {
+                    nextDelim = AMQShortString.this.length();
+                }
+
+                AMQShortString nextToken = AMQShortString.this.substring(_pos, nextDelim++);
+                _pos = nextDelim;
+                return nextToken;
+            }
+            else
+            {
+                return null;
+            }
+        }
+
+        public boolean hasMoreTokens()
+        {
+            return _pos <= AMQShortString.this.length();
+        }
+    }
+
+    private AMQShortString substring(final int from, final int to)
+    {
+        return new AMQShortString(_data, from, to);
+    }
+
+
+    private static final ThreadLocal<Map<AMQShortString, WeakReference<AMQShortString>>> _localInternMap =
+            new ThreadLocal<Map<AMQShortString, WeakReference<AMQShortString>>>()
+            {
+                protected Map<AMQShortString, WeakReference<AMQShortString>> initialValue()
+                {
+                    return new WeakHashMap<AMQShortString, WeakReference<AMQShortString>>();
+                };
+            };
+
+    private static final Map<AMQShortString, WeakReference<AMQShortString>> _globalInternMap =
+            new WeakHashMap<AMQShortString, WeakReference<AMQShortString>>();
+
+    private static final Logger _logger = LoggerFactory.getLogger(AMQShortString.class);
+
+    private final byte[] _data;
+    private final int _offset;
+    private int _hashCode;
+    private final int _length;
+    private static final char[] EMPTY_CHAR_ARRAY = new char[0];
+    
+    public static final AMQShortString EMPTY_STRING = new AMQShortString((String)null);
+
+    public AMQShortString(byte[] data)
+    {
+
+        _data = data.clone();
+        _length = data.length;
+        _offset = 0;
+    }
+
+    public AMQShortString(byte[] data, int pos)
+    {
+        final int size = data[pos++];
+        final byte[] dataCopy = new byte[size];
+        System.arraycopy(data,pos,dataCopy,0,size);
+        _length = size;
+        _data = dataCopy;
+        _offset = 0;
+    }
+
+    public AMQShortString(String data)
+    {
+        this((data == null) ? EMPTY_CHAR_ARRAY : data.toCharArray());
+
+    }
+
+    public AMQShortString(char[] data)
+    {
+        if (data == null)
+        {
+            throw new NullPointerException("Cannot create AMQShortString with null char[]");
+        }
+
+        final int length = data.length;
+        final byte[] stringBytes = new byte[length];
+        int hash = 0;
+        for (int i = 0; i < length; i++)
+        {
+            stringBytes[i] = (byte) (0xFF & data[i]);
+            hash = (31 * hash) + stringBytes[i];
+        }
+        _hashCode = hash;
+        _data = stringBytes;
+
+        _length = length;
+        _offset = 0;
+
+    }
+
+    public AMQShortString(CharSequence charSequence)
+    {
+        final int length = charSequence.length();
+        final byte[] stringBytes = new byte[length];
+        int hash = 0;
+        for (int i = 0; i < length; i++)
+        {
+            stringBytes[i] = ((byte) (0xFF & charSequence.charAt(i)));
+            hash = (31 * hash) + stringBytes[i];
+
+        }
+
+        _data = stringBytes;
+        _hashCode = hash;
+        _length = length;
+        _offset = 0;
+
+    }
+
+    private AMQShortString(ByteBuffer data, final int length)
+    {
+        byte[] dataBytes = new byte[length];
+        data.get(dataBytes);
+        _data = dataBytes;
+        _length = length;
+        _offset = 0;
+
+    }
+
+    private AMQShortString(final byte[] data, final int from, final int to)
+    {
+        _offset = from;
+        _length = to - from;
+        _data = data;
+    }
+
+
+    /**
+     * Get the length of the short string
+     * @return length of the underlying byte array
+     */
+    public int length()
+    {
+        return _length;
+    }
+
+    public char charAt(int index)
+    {
+
+        return (char) _data[_offset + index];
+
+    }
+
+    public CharSequence subSequence(int start, int end)
+    {
+        return new CharSubSequence(start, end);
+    }
+
+    public int writeToByteArray(byte[] encoding, int pos)
+    {
+        final int size = length();
+        encoding[pos++] = (byte) size;
+        System.arraycopy(_data,_offset,encoding,pos,size);
+        return pos+size;
+    }
+
+    public static AMQShortString readFromByteArray(byte[] byteEncodedDestination, int pos)
+    {
+
+
+        final AMQShortString shortString = new AMQShortString(byteEncodedDestination, pos);
+        if(shortString.length() == 0)
+        {
+            return null;
+        }
+        else
+        {
+            return shortString;
+        }
+    }
+
+    public static AMQShortString readFromBuffer(ByteBuffer buffer)
+    {
+        final short length = buffer.getUnsigned();
+        if (length == 0)
+        {
+            return null;
+        }
+        else
+        {
+
+            return new AMQShortString(buffer, length);
+        }
+    }
+
+    public byte[] getBytes()
+    {
+        if(_offset == 0 && _length == _data.length)
+        {
+            return _data.clone();
+        }
+        else
+        {
+            byte[] data = new byte[_length];
+            System.arraycopy(_data,_offset,data,0,_length);
+            return data;
+        }
+    }
+
+    public void writeToBuffer(ByteBuffer buffer)
+    {
+
+        final int size = length();
+        //buffer.setAutoExpand(true);
+        buffer.put((byte) size);
+        buffer.put(_data, _offset, size);
+
+    }
+
+    public boolean endsWith(String s)
+    {
+        return endsWith(new AMQShortString(s));
+    }
+
+
+    public boolean endsWith(AMQShortString otherString)
+    {
+
+        if (otherString.length() > length())
+        {
+            return false;
+        }
+
+
+        int thisLength = length();
+        int otherLength = otherString.length();
+
+        for (int i = 1; i <= otherLength; i++)
+        {
+            if (charAt(thisLength - i) != otherString.charAt(otherLength - i))
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public boolean startsWith(String s)
+    {
+        return startsWith(new AMQShortString(s));
+    }
+
+    public boolean startsWith(AMQShortString otherString)
+    {
+
+        if (otherString.length() > length())
+        {
+            return false;
+        }
+
+        for (int i = 0; i < otherString.length(); i++)
+        {
+            if (_data[i] != otherString._data[i])
+            {
+                return false;
+            }
+        }
+
+        return true;
+
+    }
+
+    public boolean startsWith(CharSequence otherString)
+    {
+        if (otherString.length() > length())
+        {
+            return false;
+        }
+
+        for (int i = 0; i < otherString.length(); i++)
+        {
+            if (charAt(i) != otherString.charAt(i))
+            {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+
+    private final class CharSubSequence implements CharSequence
+    {
+        private final int _sequenceOffset;
+        private final int _end;
+
+        public CharSubSequence(final int offset, final int end)
+        {
+            _sequenceOffset = offset;
+            _end = end;
+        }
+
+        public int length()
+        {
+            return _end - _sequenceOffset;
+        }
+
+        public char charAt(int index)
+        {
+            return AMQShortString.this.charAt(index + _sequenceOffset);
+        }
+
+        public CharSequence subSequence(int start, int end)
+        {
+            return new CharSubSequence(start + _sequenceOffset, end + _sequenceOffset);
+        }
+    }
+
+    public char[] asChars()
+    {
+        final int size = length();
+        final char[] chars = new char[size];
+
+        for (int i = 0; i < size; i++)
+        {
+            chars[i] = (char) _data[i + _offset];
+        }
+
+        return chars;
+    }
+
+    public String asString()
+    {
+        return new String(asChars());
+    }
+
+    public boolean equals(Object o)
+    {
+
+
+        if(o instanceof AMQShortString)
+        {
+            return equals((AMQShortString)o);
+        }
+        if(o instanceof CharSequence)
+        {
+            return equals((CharSequence)o);
+        }
+
+        if (o == null)
+        {
+            return false;
+        }
+
+        if (o == this)
+        {
+            return true;
+        }
+
+
+        return false;
+
+    }
+
+    public boolean equals(final AMQShortString otherString)
+    {
+        if (otherString == this)
+        {
+            return true;
+        }
+
+        if (otherString == null)
+        {
+            return false;
+        }
+
+        if ((_hashCode != 0) && (otherString._hashCode != 0) && (_hashCode != otherString._hashCode))
+        {
+            return false;
+        }
+
+        return (_offset == 0 && otherString._offset == 0 && _length == _data.length && otherString._length == otherString._data.length && Arrays.equals(_data,otherString._data))
+                || Arrays.equals(getBytes(),otherString.getBytes());
+
+    }
+
+    public boolean equals(CharSequence s)
+    {
+        if(s instanceof AMQShortString)
+        {
+            return equals((AMQShortString)s);
+        }
+
+        if (s == null)
+        {
+            return false;
+        }
+
+        if (s.length() != length())
+        {
+            return false;
+        }
+
+        for (int i = 0; i < length(); i++)
+        {
+            if (charAt(i) != s.charAt(i))
+            {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    public int hashCode()
+    {
+        int hash = _hashCode;
+        if (hash == 0)
+        {
+            final int size = length();
+
+            for (int i = 0; i < size; i++)
+            {
+                hash = (31 * hash) + _data[i+_offset];
+            }
+
+            _hashCode = hash;
+        }
+
+        return hash;
+    }
+
+    public void setDirty()
+    {
+        _hashCode = 0;
+    }
+
+    public String toString()
+    {
+        return asString();
+    }
+
+    public int compareTo(AMQShortString name)
+    {
+        if (name == null)
+        {
+            return 1;
+        }
+        else
+        {
+
+            if (name.length() < length())
+            {
+                return -name.compareTo(this);
+            }
+
+            for (int i = 0; i < length(); i++)
+            {
+                final byte d = _data[i+_offset];
+                final byte n = name._data[i+name._offset];
+                if (d < n)
+                {
+                    return -1;
+                }
+
+                if (d > n)
+                {
+                    return 1;
+                }
+            }
+
+            return (length() == name.length()) ? 0 : -1;
+        }
+    }
+
+
+    public AMQShortStringTokenizer tokenize(byte delim)
+    {
+        return new TokenizerImpl(delim);
+    }
+
+
+    public AMQShortString intern()
+    {
+
+        hashCode();
+
+        Map<AMQShortString, WeakReference<AMQShortString>> localMap =
+                _localInternMap.get();
+
+        WeakReference<AMQShortString> ref = localMap.get(this);
+        AMQShortString internString;
+
+        if(ref != null)
+        {
+            internString = ref.get();
+            if(internString != null)
+            {
+                return internString;
+            }
+        }
+
+
+        synchronized(_globalInternMap)
+        {
+
+            ref = _globalInternMap.get(this);
+            if((ref == null) || ((internString = ref.get()) == null))
+            {
+                internString = new AMQShortString(getBytes());
+                ref = new WeakReference(internString);
+                _globalInternMap.put(internString, ref);
+            }
+
+        }
+        localMap.put(internString, ref);
+        return internString;
+
+    }
+
+    private int occurences(final byte delim)
+    {
+        int count = 0;
+        final int end = _offset + _length;
+        for(int i = _offset ; i < end ; i++ )
+        {
+            if(_data[i] == delim)
+            {
+                count++;
+            }
+        }
+        return count;
+    }
+
+    private int indexOf(final byte val, final int pos)
+    {
+
+        for(int i = pos; i < length(); i++)
+        {
+            if(_data[_offset+i] == val)
+            {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+
+    public static AMQShortString join(final Collection<AMQShortString> terms,
+                                       final AMQShortString delim)
+    {
+        if(terms.size() == 0)
+        {
+            return EMPTY_STRING;
+        }
+
+        int size = delim.length() * (terms.size() - 1);
+        for(AMQShortString term : terms)
+        {
+            size += term.length();
+        }
+
+        byte[] data = new byte[size];
+        int pos = 0;
+        final byte[] delimData = delim._data;
+        final int delimOffset = delim._offset;
+        final int delimLength = delim._length;
+
+
+        for(AMQShortString term : terms)
+        {
+
+            if(pos!=0)
+            {
+                System.arraycopy(delimData, delimOffset,data,pos, delimLength);
+                pos+=delimLength;
+            }
+            System.arraycopy(term._data,term._offset,data,pos,term._length);
+            pos+=term._length;
+        }
+
+
+
+        return new AMQShortString(data,0,size);  
+    }
+
+    public int toIntValue()
+    {
+        int pos = 0;
+        int val = 0;
+
+
+        boolean isNegative = (_data[pos] == MINUS);
+        if(isNegative)
+        {
+            pos++;
+        }
+        while(pos < _length)
+        {
+            int digit = (int) (_data[pos++] - ZERO);
+            if((digit < 0) || (digit > 9))
+            {
+                throw new NumberFormatException("\""+toString()+"\" is not a valid number");
+            }
+            val = val * 10;
+            val += digit;
+        }
+        if(isNegative)
+        {
+            val = val * -1;
+        }
+        return val;
+    }
+
+    public boolean contains(final byte b)
+    {
+        for(int i = 0; i < _length; i++)
+        {
+            if(_data[i] == b)
+            {
+                return true;
+            }
+        }
+        return false;  //To change body of created methods use File | Settings | File Templates.
+    }
+
+}

Propchange: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Feb 28 09:31:56 2008
@@ -0,0 +1,2 @@
+target
+junit-toolkit.iml

Propchange: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit-maven-plugin/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Feb 28 09:31:56 2008
@@ -0,0 +1,2 @@
+target
+junit-toolkit-maven-plugin.iml

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit-maven-plugin/src/main/org/apache/qpid/junit/maven/IsolatedClassLoader.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit-maven-plugin/src/main/org/apache/qpid/junit/maven/IsolatedClassLoader.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit-maven-plugin/src/main/org/apache/qpid/junit/maven/IsolatedClassLoader.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit-maven-plugin/src/main/org/apache/qpid/junit/maven/IsolatedClassLoader.java Thu Feb 28 09:31:56 2008
@@ -1,17 +1,22 @@
 /*
- * Copyright 2007 Rupert Smith.
  *
- * 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
+ * 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
+ *   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.
  *
- * 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.
  */
 package org.apache.qpid.junit.maven;
 

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit-maven-plugin/src/main/org/apache/qpid/junit/maven/TKTestScriptGenMojo.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit-maven-plugin/src/main/org/apache/qpid/junit/maven/TKTestScriptGenMojo.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit-maven-plugin/src/main/org/apache/qpid/junit/maven/TKTestScriptGenMojo.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit-maven-plugin/src/main/org/apache/qpid/junit/maven/TKTestScriptGenMojo.java Thu Feb 28 09:31:56 2008
@@ -1,20 +1,28 @@
 /*
- * Copyright 2007 Rupert Smith.
  *
- * 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
+ * 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
+ *   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.
  *
- * 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.
  */
 package org.apache.qpid.junit.maven;
 
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
@@ -22,8 +30,6 @@
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Properties;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
 
 /**
  * <p><table id="crc"><caption>CRC Card</caption>
@@ -111,8 +117,7 @@
             }
 
             commandLine +=
-                "${JAVA_OPTS} -cp " + testJar + " org.apache.qpid.junit.extensions.TKTestRunner " + testOptions
-                + " ${ARGS}";
+                "${JAVA_OPTS} -cp " + testJar + " org.apache.qpid.junit.extensions.TKTestRunner " + testOptions + " ${ARGS}";
 
             getLog().info("Generating Script for test: " + testName);
             getLog().debug(commandLine);

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/BaseThrottle.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/BaseThrottle.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/BaseThrottle.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/BaseThrottle.java Thu Feb 28 09:31:56 2008
@@ -1,17 +1,22 @@
 /*
- * Copyright 2007 Rupert Smith.
  *
- * 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.
+ * 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.
+ *
  */
 package org.apache.qpid.junit.extensions;
 
@@ -58,7 +63,7 @@
         }
 
         // Calculate the cycle time.
-        cycleTimeNanos = (long)(1000000000f / hertz);
+        cycleTimeNanos = (long) (1000000000f / hertz);
 
         // Reset the first pass flag.
         firstCall = false;

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/DurationTestDecorator.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/DurationTestDecorator.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/DurationTestDecorator.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/DurationTestDecorator.java Thu Feb 28 09:31:56 2008
@@ -1,28 +1,33 @@
 /*
- * Copyright 2007 Rupert Smith.
  *
- * 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.
+ * 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.
+ *
  */
 package org.apache.qpid.junit.extensions;
 
-import java.util.Timer;
-import java.util.TimerTask;
-
 import junit.framework.Test;
 import junit.framework.TestResult;
 
 import org.apache.log4j.Logger;
 
+import java.util.Timer;
+import java.util.TimerTask;
+
 /**
  * A test decorator that runs a test repeatedly until a specified length of time has passed.
  *
@@ -95,7 +100,7 @@
 
         if (testResult instanceof TKTestResult)
         {
-            tkTestResult = (TKTestResult)testResult;
+            tkTestResult = (TKTestResult) testResult;
         }
 
         // Work out when the test should end.
@@ -111,7 +116,7 @@
             log.debug("Creating duration timer.");
 
             durationTimer = new Timer();
-            durationTimer.schedule(new DurationTimerTask((TKTestResult)testResult), duration);
+            durationTimer.schedule(new DurationTimerTask((TKTestResult) testResult), duration);
         }
 
         // Run the test until the duration times out or the shutdown flag is set. The test method may not exit until

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/SetupTaskAware.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/SetupTaskAware.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/SetupTaskAware.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/SetupTaskAware.java Thu Feb 28 09:31:56 2008
@@ -1,17 +1,22 @@
 /*
- * Copyright 2007 Rupert Smith.
  *
- * 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
+ * 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
+ *   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.
  *
- * 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.
  */
 package org.apache.qpid.junit.extensions;
 

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/CommandLineParser.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/CommandLineParser.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/CommandLineParser.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/CommandLineParser.java Thu Feb 28 09:31:56 2008
@@ -1,17 +1,22 @@
 /*
- * Copyright 2007 Rupert Smith.
  *
- * 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.
+ * 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.
+ *
  */
 package org.apache.qpid.junit.extensions.util;
 
@@ -589,7 +594,7 @@
         {
             for (Object propKey : trailingProperties.keySet())
             {
-                String name = (String)propKey;
+                String name = (String) propKey;
                 String value = trailingProperties.getProperty(name);
 
                 properties.setProperty(name, value);
@@ -609,7 +614,7 @@
         {
             for (Object propKey : parsedProperties.keySet())
             {
-                String name = (String)propKey;
+                String name = (String) propKey;
                 String value = parsedProperties.getProperty(name);
 
                 // This filters out all trailing items.

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/ContextualProperties.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/ContextualProperties.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/ContextualProperties.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/ContextualProperties.java Thu Feb 28 09:31:56 2008
@@ -1,17 +1,22 @@
 /*
- * Copyright 2007 Rupert Smith.
  *
- * 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
+ * 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
+ *   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.
  *
- * 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.
  */
 package org.apache.qpid.junit.extensions.util;
 

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/MathUtils.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/MathUtils.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/MathUtils.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/MathUtils.java Thu Feb 28 09:31:56 2008
@@ -1,17 +1,22 @@
 /*
- * Copyright 2007 Rupert Smith.
  *
- * 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
+ * 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
+ *   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.
  *
- * 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.
  */
 package org.apache.qpid.junit.extensions.util;
 
@@ -413,7 +418,7 @@
      */
     private static void roundAndAdd(ArrayList<Integer> result, double value)
     {
-        int roundedValue = (int)Math.round(value);
+        int roundedValue = (int) Math.round(value);
 
         if (!result.contains(roundedValue))
         {

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/ParsedProperties.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/ParsedProperties.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/ParsedProperties.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/ParsedProperties.java Thu Feb 28 09:31:56 2008
@@ -1,17 +1,22 @@
 /*
- * Copyright 2007 Rupert Smith.
  *
- * 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
+ * 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
+ *   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.
  *
- * 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.
  */
 package org.apache.qpid.junit.extensions.util;
 

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/SizeOf.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/SizeOf.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/SizeOf.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/SizeOf.java Thu Feb 28 09:31:56 2008
@@ -1,17 +1,22 @@
 /*
- * Copyright 2007 Rupert Smith.
  *
- * 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
+ * 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
+ *   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.
  *
- * 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.
  */
 package org.apache.qpid.junit.extensions.util;
 

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/StackQueue.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/StackQueue.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/StackQueue.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/StackQueue.java Thu Feb 28 09:31:56 2008
@@ -1,17 +1,22 @@
 /*
- * Copyright 2007 Rupert Smith.
  *
- * 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
+ * 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
+ *   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.
  *
- * 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.
  */
 package org.apache.qpid.junit.extensions.util;
 

Modified: incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/TestContextProperties.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/TestContextProperties.java?rev=632068&r1=632067&r2=632068&view=diff
==============================================================================
--- incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/TestContextProperties.java (original)
+++ incubator/qpid/branches/thegreatmerge/qpid/java/junit-toolkit/src/main/org/apache/qpid/junit/extensions/util/TestContextProperties.java Thu Feb 28 09:31:56 2008
@@ -1,17 +1,22 @@
 /*
- * Copyright 2007 Rupert Smith.
  *
- * 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.
+ * 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.
+ *
  */
 package org.apache.qpid.junit.extensions.util;
 
@@ -92,7 +97,7 @@
 
         for (Object key : defaults.keySet())
         {
-            String stringKey = (String)key;
+            String stringKey = (String) key;
             String value = defaults.getProperty(stringKey);
 
             props.setPropertyIfNull(stringKey, value);