diff --git a/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java b/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java index 371172b04f..2b437082bf 100644 --- a/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java +++ b/activemq-core/src/main/java/org/apache/activemq/broker/region/policy/PolicyEntry.java @@ -18,7 +18,6 @@ package org.apache.activemq.broker.region.policy; import org.apache.activemq.broker.region.Queue; import org.apache.activemq.broker.region.Topic; -import org.apache.activemq.command.RedeliveryPolicy; import org.apache.activemq.filter.DestinationMapEntry; /** @@ -33,9 +32,8 @@ public class PolicyEntry extends DestinationMapEntry { private DispatchPolicy dispatchPolicy; private SubscriptionRecoveryPolicy subscriptionRecoveryPolicy; - private RedeliveryPolicy redeliveryPolicy; private boolean sendAdvisoryIfNoConsumers; - private DeadLetterStrategy deadLetterStrategy = new SharedDeadLetterStrategy(); + private DeadLetterStrategy deadLetterStrategy; public void configure(Queue queue) { if (dispatchPolicy != null) { @@ -69,14 +67,6 @@ public class PolicyEntry extends DestinationMapEntry { this.dispatchPolicy = policy; } - public RedeliveryPolicy getRedeliveryPolicy() { - return redeliveryPolicy; - } - - public void setRedeliveryPolicy(RedeliveryPolicy redeliveryPolicy) { - this.redeliveryPolicy = redeliveryPolicy; - } - public SubscriptionRecoveryPolicy getSubscriptionRecoveryPolicy() { return subscriptionRecoveryPolicy; } diff --git a/activemq-core/src/main/java/org/apache/activemq/command/ActiveMQDestination.java b/activemq-core/src/main/java/org/apache/activemq/command/ActiveMQDestination.java index 17e76a738b..e7e8984b57 100755 --- a/activemq-core/src/main/java/org/apache/activemq/command/ActiveMQDestination.java +++ b/activemq-core/src/main/java/org/apache/activemq/command/ActiveMQDestination.java @@ -39,7 +39,7 @@ import org.apache.activemq.util.URISupport; * @openwire:marshaller * @version $Revision: 1.10 $ */ -abstract public class ActiveMQDestination implements DataStructure, Destination, Externalizable { +abstract public class ActiveMQDestination implements DataStructure, Destination, Externalizable, Comparable { private static final long serialVersionUID = -3885260014960795889L; @@ -65,6 +65,72 @@ abstract public class ActiveMQDestination implements DataStructure, Destination, transient protected int hashValue; protected Map options; + + // static helper methods for working with destinations + // ------------------------------------------------------------------------- + static public ActiveMQDestination createDestination(String name, byte defaultType) { + + if( name.startsWith(QUEUE_QUALIFIED_PREFIX) ) { + return new ActiveMQQueue(name.substring(QUEUE_QUALIFIED_PREFIX.length())); + } else if( name.startsWith(TOPIC_QUALIFIED_PREFIX) ) { + return new ActiveMQTopic(name.substring(TOPIC_QUALIFIED_PREFIX.length())); + } else if( name.startsWith(TEMP_QUEUE_QUALIFED_PREFIX) ) { + return new ActiveMQTempQueue(name.substring(TEMP_QUEUE_QUALIFED_PREFIX.length())); + } else if( name.startsWith(TEMP_TOPIC_QUALIFED_PREFIX) ) { + return new ActiveMQTempTopic(name.substring(TEMP_TOPIC_QUALIFED_PREFIX.length())); + } + + switch(defaultType) { + case QUEUE_TYPE: + return new ActiveMQQueue(name); + case TOPIC_TYPE: + return new ActiveMQTopic(name); + case TEMP_QUEUE_TYPE: + return new ActiveMQTempQueue(name); + case TEMP_TOPIC_TYPE: + return new ActiveMQTempTopic(name); + default: + throw new IllegalArgumentException("Invalid default destination type: "+defaultType); + } + } + + public static ActiveMQDestination transform(Destination dest) throws JMSException { + if( dest == null ) + return null; + if( dest instanceof ActiveMQDestination ) + return (ActiveMQDestination) dest; + if( dest instanceof TemporaryQueue ) + return new ActiveMQTempQueue(((TemporaryQueue)dest).getQueueName()); + if( dest instanceof TemporaryTopic ) + return new ActiveMQTempTopic(((TemporaryTopic)dest).getTopicName()); + if( dest instanceof Queue ) + return new ActiveMQQueue(((Queue)dest).getQueueName()); + if( dest instanceof Topic ) + return new ActiveMQTopic(((Topic)dest).getTopicName()); + throw new JMSException("Could not transform the destination into a ActiveMQ destination: "+dest); + } + + public static int compare(ActiveMQDestination destination, ActiveMQDestination destination2) { + if (destination == destination2) { + return 0; + } + if (destination == null) { + return -1; + } + else if (destination2 == null) { + return 1; + } + else { + if (destination.isQueue() == destination2.isQueue()) { + return destination.getPhysicalName().compareTo(destination2.getPhysicalName()); + } + else { + return destination.isQueue() ? -1 : 1; + } + } + } + + public ActiveMQDestination() { } @@ -76,6 +142,18 @@ abstract public class ActiveMQDestination implements DataStructure, Destination, setCompositeDestinations(composites); } + public int compareTo(Object that) { + if (that instanceof ActiveMQDestination) { + return compare(this, (ActiveMQDestination) that); + } + if (that == null) { + return 1; + } + else { + return getClass().getName().compareTo(that.getClass().getName()); + } + } + public boolean isComposite() { return compositeDestinations!=null; } @@ -166,33 +244,6 @@ abstract public class ActiveMQDestination implements DataStructure, Destination, public ActiveMQDestination createDestination(String name) { return createDestination(name, getDestinationType()); } - - static public ActiveMQDestination createDestination(String name, byte defaultType) { - - if( name.startsWith(QUEUE_QUALIFIED_PREFIX) ) { - return new ActiveMQQueue(name.substring(QUEUE_QUALIFIED_PREFIX.length())); - } else if( name.startsWith(TOPIC_QUALIFIED_PREFIX) ) { - return new ActiveMQTopic(name.substring(TOPIC_QUALIFIED_PREFIX.length())); - } else if( name.startsWith(TEMP_QUEUE_QUALIFED_PREFIX) ) { - return new ActiveMQTempQueue(name.substring(TEMP_QUEUE_QUALIFED_PREFIX.length())); - } else if( name.startsWith(TEMP_TOPIC_QUALIFED_PREFIX) ) { - return new ActiveMQTempTopic(name.substring(TEMP_TOPIC_QUALIFED_PREFIX.length())); - } - - switch(defaultType) { - case QUEUE_TYPE: - return new ActiveMQQueue(name); - case TOPIC_TYPE: - return new ActiveMQTopic(name); - case TEMP_QUEUE_TYPE: - return new ActiveMQTempQueue(name); - case TEMP_TOPIC_TYPE: - return new ActiveMQTempTopic(name); - default: - throw new IllegalArgumentException("Invalid default destination type: "+defaultType); - } - } - public String[] getDestinationPaths() { if( destinationPaths!=null ) @@ -242,23 +293,6 @@ abstract public class ActiveMQDestination implements DataStructure, Destination, } return hashValue; } - - public static ActiveMQDestination transform(Destination dest) throws JMSException { - if( dest == null ) - return null; - if( dest instanceof ActiveMQDestination ) - return (ActiveMQDestination) dest; - if( dest instanceof TemporaryQueue ) - return new ActiveMQTempQueue(((TemporaryQueue)dest).getQueueName()); - if( dest instanceof TemporaryTopic ) - return new ActiveMQTempTopic(((TemporaryTopic)dest).getTopicName()); - if( dest instanceof Queue ) - return new ActiveMQQueue(((Queue)dest).getQueueName()); - if( dest instanceof Topic ) - return new ActiveMQTopic(((Topic)dest).getTopicName()); - throw new JMSException("Could not transform the destination into a ActiveMQ destination: "+dest); - } - public String toString() { return getQualifiedName(); } diff --git a/activemq-core/src/test/java/org/apache/activemq/command/ActiveMQDestinationTest.java b/activemq-core/src/test/java/org/apache/activemq/command/ActiveMQDestinationTest.java index 8979218e1f..7418939af3 100755 --- a/activemq-core/src/test/java/org/apache/activemq/command/ActiveMQDestinationTest.java +++ b/activemq-core/src/test/java/org/apache/activemq/command/ActiveMQDestinationTest.java @@ -17,7 +17,13 @@ package org.apache.activemq.command; import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; import org.apache.activemq.command.ActiveMQDestination; import org.apache.activemq.command.ActiveMQQueue; @@ -63,6 +69,15 @@ public class ActiveMQDestinationTest extends DataStructureTestSupport { assertEquals("v1", options.get("k1")); assertEquals("v2", options.get("k2")); } + + public void testSorting() throws Exception { + SortedSet set = new TreeSet(); + ActiveMQDestination[] destinations = { new ActiveMQQueue("A"), new ActiveMQQueue("B"), new ActiveMQTopic("A"), new ActiveMQTopic("B") }; + List expected = Arrays.asList(destinations); + set.addAll(expected); + List actual = new ArrayList(set); + assertEquals("Sorted order", expected, actual); + } public static Test suite() { return suite(ActiveMQDestinationTest.class);