} else { PGs.addAll(subPGs);
  protected void checkAndProcessHashSubscriptions(HashSet justExpandedPGs) {    HashSet PGs = new HashSet();    Iterator subIt = predToSubHash.entrySet().iterator();    while (subIt.hasNext()) {      Map.Entry entry = (Map.Entry) subIt.next();      UnaryPredicate pred = (UnaryPredicate) entry.getKey();      IncrementalSubscription sub = (IncrementalSubscription) entry.getValue();      if ((!sub.getChangedCollection().isEmpty()) ||          (!sub.getRemovedCollection().isEmpty()) ||          (!sub.getAddedCollection().isEmpty())) {        if (logger.isDebugEnabled()) {          logger.debug("At " + getOrgName() + "-" + getSupplyType() +                       "-Subscription w/predicate: " + pred + " has changed: Added: "                       + sub.getAddedCollection().size() + " Removed: " +                       +sub.getRemovedCollection().size() + " Changed: " +                       +sub.getChangedCollection().size());        }        Collection subPGs = (Collection) subToPGsHash.get(sub);        if (subPGs == null) {          if (logger.isErrorEnabled()) {            String errString = "Subscription fired in the hash table at " + getOrgName() + ", but there are no PGs in the other hash tables that correspond. The Predicate is " + pred.getClass().getName() + ".";            if (pred == orgActivities) {              errString += "  It turns out to be the orgActivities String.";            }            logger.error(errString);          }        } else {          PGs.addAll(subPGs);        }      }    }    if (PGs.isEmpty()) {      if (logger.isDebugEnabled()) {        logger.debug("No subscription change,no PGs to notfiy! subToPGsHash is: " + subToPGsHash);      }    } else {      if (logger.isDebugEnabled()) {        //logger.debug("!!!Subscriptions changed got PGs to notfiy! Collection of PGs are " + PGs);      }      /*      * Whats going on here is we're filtering out an PGs that have just been expanded in the same      * execute cycle.   We were anticipating that this should never happen - that just expanded      * GenerateProjection tasks pgs, their subscriptions should never fire.  In which case this PGs      * variable will be empty or the filteredPGs is empty.   If it does ever happen, like a new      * Consumer PG is introduced with new subscriptions that do fire immediately we will be covered. MWD.      *      */      HashSet filteredPGs;      if (justExpandedPGs.isEmpty()) {        filteredPGs = PGs;      } else {        filteredPGs = new HashSet();        Iterator pgIt = PGs.iterator();        while (pgIt.hasNext()) {          PropertyGroup pg = (PropertyGroup) pgIt.next();          if (!(justExpandedPGs.contains(pg))) {            filteredPGs.add(pg);          }        }      }      processSubscriptionChangedPG(filteredPGs);    }  }