View Javadoc

    1   /***
    2    *
    3    * Copyright 2004 Protique Ltd
    4    *
    5    * Licensed under the Apache License, Version 2.0 (the "License");
    6    * you may not use this file except in compliance with the License.
    7    * You may obtain a copy of the License at
    8    *
    9    * http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   *
    17   **/
    18
    19  package org.codehaus.activemq.filter;
    20
    21  import org.codehaus.activemq.message.ActiveMQMessage;
    22
    23  import javax.jms.JMSException;
    24  import javax.jms.Message;
    25
    26
    27  /***
    28   * Checks that messages are not filtered by NoLocal
    29   *
    30   * @version $Revision: 1.3 $
    31   */
    32  public class NoLocalFilter implements Filter {
    33
    34      private String clientId;
    35
    36      /***
    37       * Construct a NoLocalFilter
    38       *
    39       * @param newClientId
    40       */
    41      public NoLocalFilter(String newClientId) {
    42          this.clientId = newClientId;
    43      }
    44
    45      /***
    46       * ensure messages are filtered if they have the same clientId
    47       * as the filter
    48       *
    49       * @param message - the message to match
    50       * @return true if the message has a different clientId to the filter
    51       * @throws JMSException
    52       */
    53      public boolean matches(Message message) throws JMSException {
    54          if (message != null && message instanceof ActiveMQMessage) {
    55              ActiveMQMessage activeMQMessage = (ActiveMQMessage) message;
    56
    57              // TODO we should have a mechanism to
    58              // maintain a list of clientIDs through which a message has travelled
    59              // so we can filter out recursive graphs
    60
    61              String producerID = activeMQMessage.getProducerID();
    62              if (producerID != null) {
    63                  if (producerID.equals(clientId)) {
    64                      return false;
    65                  }
    66              }
    67              if (clientId.equals(activeMQMessage.getJMSClientID())) {
    68                  return false;
    69              }
    70          }
    71          return true;
    72      }
    73
    74      public boolean isWildcard() {
    75          return false;
    76      }
    77  }