public NodeDescriptor getSingleSubscribedBroker(Filter filter) { NodeDescriptor foundBroker = null; // iterates over the subscribed neighbors Set keys = data.keySet(); synchronized (data) { Iterator it = keys.iterator(); while (it.hasNext()) { NodeDescriptor currentNeighbor = (NodeDescriptor) it.next(); if (((Collection) data.get(currentNeighbor)).contains(filter)) { if (foundBroker != null || !currentNeighbor.isBroker()) { // more // than // one // broker // found // or // a // client // found return null; } foundBroker = currentNeighbor; } } } return foundBroker; }
public void addSubscription(NodeDescriptor n, Filter f) { List filters = (List) data.get(n); if (filters == null) { filters = new ArrayList(); filters.add(f); data.put(n, filters); } else { if (!filters.contains(f)) filters.add(f); } }
public Collection getSubscribedNeighbors(Filter f) { List matchingNeighbors = new ArrayList(); // iterates over the subscribed neighbors Set keys = data.keySet(); synchronized (data) { Iterator it = keys.iterator(); NodeDescriptor currentNeighbor; while (it.hasNext()) { currentNeighbor = (NodeDescriptor) it.next(); // Check if currentNeighbor is subscribed to the message if (((Collection) data.get(currentNeighbor)).contains(f)) { matchingNeighbors.add(currentNeighbor); } } } return matchingNeighbors; }
// *** For debug purposes public String toString() { StringBuffer result = new StringBuffer(super.toString() + "\n"); // iterates over the subscribed neighbors Set keys = data.keySet(); synchronized (data) { Iterator it = keys.iterator(); NodeDescriptor currentNeighbor; while (it.hasNext()) { currentNeighbor = (NodeDescriptor) it.next(); result.append(" " + currentNeighbor + " is subscribed to:\n"); // iterates over the set of filters for currentNeighbor Iterator it1 = ((Collection) data.get(currentNeighbor)).iterator(); Filter f; while (it1.hasNext()) { f = (Filter) it1.next(); result.append(" " + f + "\n"); } } } return result.toString(); }
public boolean isFilterInTable(Filter filter) { Collection val = data.values(); synchronized (data) { Iterator it = val.iterator(); Collection c; while (it.hasNext()) { c = (Collection) it.next(); if (c.contains(filter)) return true; } } return false; }
public Collection getAllFiltersExcept(boolean duplicate, NodeDescriptor n) { Collection result = new ArrayList(); Set keys = data.keySet(); synchronized (data) { Iterator it = keys.iterator(); NodeDescriptor currentNeighbor; while (it.hasNext()) { currentNeighbor = (NodeDescriptor) it.next(); if (currentNeighbor.equals(n)) continue; // skip neighbor n Collection filters = (Collection) data.get(currentNeighbor); if (duplicate) result.addAll(filters); else { Iterator it1 = filters.iterator(); while (it1.hasNext()) { Filter f = (Filter) it1.next(); if (!result.contains(f)) result.add(f); } } } } return result; }
public Collection matches(Message message, NodeDescriptor senderID) { List matchingNeighbors = new ArrayList(); // iterates over the subscribed neighbors Set keys = data.keySet(); synchronized (data) { Iterator it = keys.iterator(); NodeDescriptor currentNeighbor; while (it.hasNext()) { currentNeighbor = (NodeDescriptor) it.next(); // Check if currentNeighbor is subscribed to the message // iterates over the set of filters for currentNeighbor if (senderID.equals(currentNeighbor)) continue; Iterator it1 = ((Collection) data.get(currentNeighbor)).iterator(); while (it1.hasNext()) { Filter f = (Filter) it1.next(); if (f.matches(message)) { matchingNeighbors.add(currentNeighbor); break; } } } } return matchingNeighbors; }
public Collection getAllFilters(NodeDescriptor n) { return (List) data.get(n); }
public boolean isSubscribed(NodeDescriptor n) { List filters = (List) data.get(n); return filters != null && !filters.isEmpty(); }
public void clear() { data.clear(); }
public void removeAllSubscriptions(NodeDescriptor n) { data.remove(n); }
public void removeSubscription(NodeDescriptor n, Filter f) { List filters = (List) data.get(n); if (filters != null) { filters.remove(f); } }