/** Dispatches the next event. */ private void dispatch() { // Grab the oldest event on the queue. AgentEvent e = eventQueue.removeLast(); Class<?> eventType = e.getClass(); LinkedList<AgentEventListener> evNotifList = deMultiplexTable.get(eventType); if (evNotifList != null) { Iterator<AgentEventListener> i = evNotifList.iterator(); AgentEventListener listener; while (i.hasNext()) { listener = i.next(); if (!listener.equals(e.getSource())) listener.eventFired(e); } } // else nobody registered for this event type. }
static void applyChanges( RuleBase rb, boolean removeExistingPackages, Collection changes, Collection<String> removed, AgentEventListener listener) { if (changes == null && removed == null) return; rb.lock(); if (removed != null) { removePackages(removed, rb, listener); } if (changes != null) { for (Iterator iter = changes.iterator(); iter.hasNext(); ) { Package p = (Package) iter.next(); if (removeExistingPackages) { removePackage(p.getName(), rb); } try { listener.info("Adding package called " + p.getName()); rb.addPackage(p); } catch (Exception e) { throw new RuntimeDroolsException(e); } } } rb.unlock(); }
static void removePackages( Collection<String> removedPackages, RuleBase rb, AgentEventListener listener) { for (String name : removedPackages) { listener.info("Removing package called " + name); removePackage(name, rb); } }