Example #1
0
 /** 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);
    }
  }