protected String getFilterLogString() {
    StringBuilder filterLogString = new StringBuilder();
    String delimiter = ", ";
    boolean hasEntries = false;
    if (_filters != null && _filters.hasFilters()) {
      filterLogString.append(_filters.toString());
      hasEntries = true;
    }

    if (!acquires()) {
      if (hasEntries) {
        filterLogString.append(delimiter);
      }
      filterLogString.append("Browser");
    }

    return filterLogString.toString();
  }
  public final boolean hasInterest(QueueEntry entry) {
    // check that the message hasn't been rejected
    if (entry.isRejectedBy(this)) {

      return false;
    }

    if (entry.getMessage().getClass() == _messageClass) {
      if (_noLocal) {
        Object connectionRef = entry.getMessage().getConnectionReference();
        if (connectionRef != null && connectionRef == _sessionReference) {
          return false;
        }
      }
    } else {
      // no interest in messages we can't convert
      if (_messageClass != null
          && MessageConverterRegistry.getConverter(entry.getMessage().getClass(), _messageClass)
              == null) {
        return false;
      }
    }

    if (_filters == null) {
      return true;
    } else {
      MessageReference ref = entry.newMessageReference();
      if (ref != null) {
        try {

          Filterable msg = entry.asFilterable();
          try {
            return _filters.allAllow(msg);
          } catch (SelectorParsingException e) {
            LOGGER.info(
                this
                    + " could not evaluate filter ["
                    + _filters
                    + "]  against message "
                    + msg
                    + ". Error was : "
                    + e.getMessage());
            return false;
          }
        } finally {
          ref.release();
        }
      } else {
        return false;
      }
    }
  }
  private static Map<String, Object> createAttributeMap(
      String name, FilterManager filters, EnumSet<Option> optionSet) {
    Map<String, Object> attributes = new HashMap<String, Object>();
    attributes.put(ID, UUID.randomUUID());
    attributes.put(NAME, name);
    attributes.put(EXCLUSIVE, optionSet.contains(Option.EXCLUSIVE));
    attributes.put(NO_LOCAL, optionSet.contains(Option.NO_LOCAL));
    attributes.put(DISTRIBUTION_MODE, optionSet.contains(Option.ACQUIRES) ? "MOVE" : "COPY");
    attributes.put(DURABLE, optionSet.contains(Option.DURABLE));
    attributes.put(LIFETIME_POLICY, LifetimePolicy.DELETE_ON_SESSION_END);
    if (filters != null) {
      Iterator<MessageFilter> iter = filters.filters();
      while (iter.hasNext()) {
        MessageFilter filter = iter.next();
        if (filter instanceof JMSSelectorFilter) {
          attributes.put(SELECTOR, ((JMSSelectorFilter) filter).getSelector());
          break;
        }
      }
    }

    return attributes;
  }