001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. 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 package org.apache.activemq.broker.region.virtual; 018 019 import javax.jms.InvalidSelectorException; 020 import javax.jms.JMSException; 021 022 import org.apache.activemq.command.ActiveMQDestination; 023 import org.apache.activemq.filter.BooleanExpression; 024 import org.apache.activemq.filter.MessageEvaluationContext; 025 import org.apache.activemq.selector.SelectorParser; 026 027 /** 028 * Represents a destination which is filtered using some predicate such as a selector 029 * so that messages are only dispatched to the destination if they match the filter. 030 * 031 * @org.apache.xbean.XBean 032 * 033 * 034 */ 035 public class FilteredDestination { 036 037 private ActiveMQDestination destination; 038 private String selector; 039 private BooleanExpression filter; 040 041 public boolean matches(MessageEvaluationContext context) throws JMSException { 042 BooleanExpression booleanExpression = getFilter(); 043 if (booleanExpression == null) { 044 return false; 045 } 046 return booleanExpression.matches(context); 047 } 048 049 public ActiveMQDestination getDestination() { 050 return destination; 051 } 052 053 /** 054 * The destination to send messages to if they match the filter 055 */ 056 public void setDestination(ActiveMQDestination destination) { 057 this.destination = destination; 058 } 059 060 public String getSelector() { 061 return selector; 062 } 063 064 /** 065 * Sets the JMS selector used to filter messages before forwarding them to this destination 066 */ 067 public void setSelector(String selector) throws InvalidSelectorException { 068 this.selector = selector; 069 setFilter(SelectorParser.parse(selector)); 070 } 071 072 public BooleanExpression getFilter() { 073 return filter; 074 } 075 076 public void setFilter(BooleanExpression filter) { 077 this.filter = filter; 078 } 079 080 081 /** 082 * Sets the destination property to the given queue name 083 */ 084 public void setQueue(String queue) { 085 setDestination(ActiveMQDestination.createDestination(queue, ActiveMQDestination.QUEUE_TYPE)); 086 } 087 088 /** 089 * Sets the destination property to the given topic name 090 */ 091 public void setTopic(String topic) { 092 setDestination(ActiveMQDestination.createDestination(topic, ActiveMQDestination.TOPIC_TYPE)); 093 } 094 }