summaryrefslogtreecommitdiff
path: root/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java')
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java33
1 files changed, 25 insertions, 8 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java
index c18cc337fe..59a8339346 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java
@@ -115,11 +115,13 @@ public class TopicExchange extends AbstractExchange
{
private final AMQShortString _bindingKey;
private final AMQQueue _queue;
+ private final FieldTable _args;
- public Binding(AMQShortString bindingKey, AMQQueue queue)
+ public Binding(AMQShortString bindingKey, AMQQueue queue, FieldTable args)
{
_bindingKey = bindingKey;
_queue = queue;
+ _args = args;
}
public AMQShortString getBindingKey()
@@ -134,7 +136,7 @@ public class TopicExchange extends AbstractExchange
public int hashCode()
{
- return (_bindingKey == null ? 1 : _bindingKey.hashCode())*31 + _queue.hashCode();
+ return (_bindingKey == null ? 1 : _bindingKey.hashCode())*31 +_queue.hashCode();
}
public boolean equals(Object o)
@@ -382,7 +384,7 @@ public class TopicExchange extends AbstractExchange
routingKey = rKey;
}
- Binding binding = new Binding(rKey, queue);
+ Binding binding = new Binding(rKey, queue, args);
if(_bindings.containsKey(binding))
{
@@ -544,14 +546,29 @@ public class TopicExchange extends AbstractExchange
public boolean isBound(AMQShortString routingKey, FieldTable arguments, AMQQueue queue)
{
- return isBound(routingKey, queue);
+ Binding binding = new Binding(routingKey, queue, arguments);
+ if (arguments == null)
+ {
+ return _bindings.containsKey(binding);
+ }
+ else
+ {
+ FieldTable o = _bindings.get(binding);
+ if (o != null)
+ {
+ return o.equals(arguments);
+ }
+ else
+ {
+ return false;
+ }
+
+ }
}
public boolean isBound(AMQShortString routingKey, AMQQueue queue)
{
- Binding binding = new Binding(routingKey, queue);
-
- return _bindings.containsKey(binding);
+ return isBound(routingKey, null, queue);
}
public boolean isBound(AMQShortString routingKey)
@@ -590,7 +607,7 @@ public class TopicExchange extends AbstractExchange
assert queue != null;
assert rKey != null;
- Binding binding = new Binding(rKey, queue);
+ Binding binding = new Binding(rKey, queue, args);
if (!_bindings.containsKey(binding))