001    /** 
002     * 
003     * Copyright 2004 Protique Ltd
004     * 
005     * Licensed under the Apache License, Version 2.0 (the "License"); 
006     * you may not use this file except in compliance with the License. 
007     * You may obtain a copy of the License at 
008     * 
009     * http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS, 
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
014     * See the License for the specific language governing permissions and 
015     * limitations under the License. 
016     * 
017     **/
018    
019    package org.activemq.filter;
020    
021    import javax.jms.Destination;
022    import javax.jms.JMSException;
023    import javax.jms.Message;
024    import java.util.ArrayList;
025    import java.util.List;
026    
027    /**
028     * Helper class for decomposing a Destination into a number of paths
029     *
030     * @version $Revision: 1.1.1.1 $
031     */
032    public class DestinationPath {
033        protected static final char SEPARATOR = '.';
034    
035        public static String[] getDestinationPaths(String subject) {
036            List list = new ArrayList();
037            int previous = 0;
038            int lastIndex = subject.length() - 1;
039            while (true) {
040                int idx = subject.indexOf(SEPARATOR, previous);
041                if (idx < 0) {
042                    list.add(subject.substring(previous, lastIndex + 1));
043                    break;
044                }
045                list.add(subject.substring(previous, idx));
046                previous = idx + 1;
047            }
048            String[] answer = new String[list.size()];
049            list.toArray(answer);
050            return answer;
051        }
052    
053        public static String[] getDestinationPaths(Message message) throws JMSException {
054            return getDestinationPaths(message.getJMSDestination());
055        }
056    
057        public static String[] getDestinationPaths(Destination destination) {
058            return getDestinationPaths(destination.toString());
059        }
060    
061        /**
062         * Converts the paths to a single String seperated by dots.
063         *
064         * @param paths
065         * @return
066         */
067        public static String toString(String[] paths) {
068            StringBuffer buffer = new StringBuffer();
069            for (int i = 0; i < paths.length; i++) {
070                if (i > 0) {
071                    buffer.append(SEPARATOR);
072                }
073                String path = paths[i];
074                if (path == null) {
075                    buffer.append("*");
076                }
077                else {
078                    buffer.append(path);
079                }
080            }
081            return buffer.toString();
082        }
083    }