/** * Free all the resources belonging to this filter list. */ public void free() { if (m_registry != null) m_registry.free(); m_registry = null; super.free(); } /**
/** * Default constructor. * @param receiver My parent receiver. */ public void init(BaseMessageReceiver receiver) { super.init(receiver); } /**
/** * Get the list of filters for this message header. * Override this to implement another (tree?) filter. * @param messageHeader The message header to get the list for (if null, return ALL the filters). * @return The list of filters. */ public Iterator<BaseMessageFilter> getFilterList(BaseMessageHeader messageHeader) { if (messageHeader == null) return super.getFilterList(messageHeader); // ALL The filters return this.getRegistry().getFilterList(messageHeader); } /**
/** * Add this message filter to this receive queue. * @param The message filter to add. */ public void addMessageFilter(BaseMessageFilter messageFilter) { super.addMessageFilter(messageFilter); this.getRegistry().addMessageFilter(messageFilter); } /**
/** * Remove this message filter from this queue. * Note: This will remove a filter that equals this filter, accounting for a copy * passed from a remote client. * @param messageFilter The message filter to remove. * @param bFreeFilter If true, free this filter. * @return True if successful. */ public boolean removeMessageFilter(Integer intFilterID, boolean bFreeFilter) { BaseMessageFilter messageFilter = this.getMessageFilter(intFilterID); if (messageFilter == null) return false; // It is possible for a client to try to remove it's remote filter that was removed as a duplicate filter. boolean bRemoved = this.getRegistry().removeMessageFilter(messageFilter); if (!bRemoved) System.out.println("Filter not found on remove"); bRemoved = super.removeMessageFilter(intFilterID, bFreeFilter); return bRemoved; // Success. } /**
/** * Update this filter with this new information. * @param messageFilter The message filter I am updating. * @param propKeys New tree key filter information (ie, bookmark=345). */ public void setNewFilterTree(BaseMessageFilter messageFilter, Object[][] propKeys) { if (propKeys != null) if (!propKeys.equals(messageFilter.getNameValueTree())) { // This moves the filter to the new leaf this.getRegistry().removeMessageFilter(messageFilter); super.setNewFilterTree(messageFilter, propKeys); this.getRegistry().addMessageFilter(messageFilter); } } /**
/** * Do I send this message to the remote server? * Remember to check for the filter match. * @return true If I do (default). */ public boolean isSendRemoteMessage(BaseMessage message) { Iterator<BaseMessageFilter> iterator = this.getMessageFilterList().getFilterList(null); // ALL The filters (not just matches). while (iterator.hasNext()) { BaseMessageFilter filter = iterator.next(); if (!filter.isRemoteFilter()) // Always send down when filter is a remote copy if (filter.isSendRemoteMessage(message) == false) return false; // Don't send this message down } return true; } }
BaseMessageHeader messageHeaderFilter = new BaseMessageHeader(MessageConstants.RECORD_QUEUE_NAME, MessageConstants.INTRANET_QUEUE, null, null); Iterator<BaseMessageFilter> filterList = messageFilters.getFilterList(messageHeaderFilter); while (filterList.hasNext())