org.apache.activemq.broker.util.DestinationPathSeparatorBroker Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of activemq-broker Show documentation
Show all versions of activemq-broker Show documentation
The ActiveMQ Message Broker implementation
/**
* 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.activemq.broker.util;
import org.apache.activemq.broker.BrokerPluginSupport;
import org.apache.activemq.broker.ConnectionContext;
import org.apache.activemq.broker.ConsumerBrokerExchange;
import org.apache.activemq.broker.ProducerBrokerExchange;
import org.apache.activemq.broker.region.Destination;
import org.apache.activemq.broker.region.Subscription;
import org.apache.activemq.command.*;
import org.apache.activemq.filter.DestinationPath;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
/**
* @org.apache.xbean.XBean element="destinationPathSeparatorPlugin"
*/
public class DestinationPathSeparatorBroker extends BrokerPluginSupport {
String pathSeparator = "/";
protected ActiveMQDestination convertDestination(ActiveMQDestination destination) {
if (destination != null && destination.getPhysicalName().contains(pathSeparator)) {
List l = new ArrayList();
StringTokenizer iter = new StringTokenizer(destination.getPhysicalName(), pathSeparator);
while (iter.hasMoreTokens()) {
String name = iter.nextToken().trim();
if (name.length() == 0) {
continue;
}
l.add(name);
}
String newName = DestinationPath.toString(l.toArray(new String[l.size()]));
return ActiveMQDestination.createDestination(newName, destination.getDestinationType());
} else {
return destination;
}
}
@Override
public void acknowledge(ConsumerBrokerExchange consumerExchange, MessageAck ack) throws Exception {
ack.setDestination(convertDestination(ack.getDestination()));
super.acknowledge(consumerExchange, ack);
}
@Override
public Subscription addConsumer(ConnectionContext context, ConsumerInfo info) throws Exception {
info.setDestination(convertDestination(info.getDestination()));
return super.addConsumer(context, info);
}
@Override
public void addProducer(ConnectionContext context, ProducerInfo info) throws Exception {
info.setDestination(convertDestination(info.getDestination()));
super.addProducer(context, info);
}
@Override
public void removeConsumer(ConnectionContext context, ConsumerInfo info) throws Exception {
info.setDestination(convertDestination(info.getDestination()));
super.removeConsumer(context, info);
}
@Override
public void removeProducer(ConnectionContext context, ProducerInfo info) throws Exception {
info.setDestination(convertDestination(info.getDestination()));
super.removeProducer(context, info);
}
@Override
public void send(ProducerBrokerExchange producerExchange, Message messageSend) throws Exception {
messageSend.setDestination(convertDestination(messageSend.getDestination()));
super.send(producerExchange, messageSend);
}
@Override
public Destination addDestination(ConnectionContext context, ActiveMQDestination destination, boolean createIfTemporary) throws Exception {
return super.addDestination(context, convertDestination(destination), createIfTemporary);
}
@Override
public void removeDestination(ConnectionContext context, ActiveMQDestination destination, long timeout) throws Exception {
super.removeDestination(context, convertDestination(destination), timeout);
}
@Override
public void addDestinationInfo(ConnectionContext context, DestinationInfo info) throws Exception {
info.setDestination(convertDestination(info.getDestination()));
super.addDestinationInfo(context, info);
}
@Override
public void removeDestinationInfo(ConnectionContext context, DestinationInfo info) throws Exception {
info.setDestination(convertDestination(info.getDestination()));
super.removeDestinationInfo(context, info);
}
@Override
public void processConsumerControl(ConsumerBrokerExchange consumerExchange, ConsumerControl control) {
control.setDestination(convertDestination(control.getDestination()));
super.processConsumerControl(consumerExchange, control);
}
@Override
public Response messagePull(ConnectionContext context, MessagePull pull) throws Exception {
pull.setDestination(convertDestination(pull.getDestination()));
return super.messagePull(context, pull);
}
public void setPathSeparator(String pathSeparator) {
this.pathSeparator = pathSeparator;
}
}