backwardFlowInventories.clear();
  protected void execute() {    //clear our new refill list    newRefills.clear();    updateInventoryPolicy(inventoryPolicySubscription.getAddedCollection());    updateInventoryPolicy(inventoryPolicySubscription.getChangedCollection());    processDetReq(detReqSubscription.getAddedCollection());    cycleStamp = (new Date()).getTime();    if (inventoryPolicy ==null) {      if (logger.isInfoEnabled ())	logger.info("\n InventoryPlugin " + supplyType + 		    " not ready to process tasks yet." +		    " my inv policy is: " + inventoryPolicy + " in " + getMyOrganization());      return;    }	    if (myOrganization == null) {      myOrganization = getMyOrganization(selfOrganizations.elements());    }    if (myOrganization == null) {      if (logger.isInfoEnabled())	logger.info("\n InventoryPlugin " + supplyType + 		    " not ready to process tasks yet." +		    " my org is: " + myOrganization);      return;    }    if (!initialized) {      myOrgName = myOrganization.getItemIdentificationPG().getItemIdentification();      inventoryFile = getInventoryFile(supplyType);      getInventoryData();      initialized = true;    }     if ((logOPlan == null) || logisticsOPlanSubscription.hasChanged()) {      Collection c = logisticsOPlanSubscription.getCollection();      for (Iterator i = c.iterator(); i.hasNext();) {	logOPlan = (LogisticsOPlan)i.next();	break;      }    }    if ((detReqHandler.getDetermineRequirementsTask(aggMILSubscription) != null) &&	(logOPlan != null)) {      boolean touchedRemovedProjections = 	supplyExpander.handleRemovedProjections(projectWithdrawTaskSubscription.getRemovedCollection());      supplyExpander.handleRemovedRequisitions(withdrawTaskSubscription.getRemovedCollection());      handleRemovedRefills(refillSubscription.getRemovedCollection());      // If its the first time we've gotten this far we now have our policy, org and others.      // However, we may have missed some tasks on the added list in previous executes.      // If its the first time through use the underlying subscription collection instead of the added list.      if (firstTimeThrough) {        Enumeration newReqs = supplyTaskSubscription.elements();        ArrayList newReqsCollection = new ArrayList();        while (newReqs.hasMoreElements()) {          newReqsCollection.add(newReqs.nextElement());        }        expandIncomingRequisitions(getTasksWithoutPEs(newReqsCollection));        Enumeration newProjReqs = projectionTaskSubscription.elements();        ArrayList newProjReqsCollection = new ArrayList();        while (newProjReqs.hasMoreElements()) {          newProjReqsCollection.add(newProjReqs.nextElement());        }        touchedProjections = expandIncomingProjections(getTasksWithoutPEs(newProjReqsCollection));        firstTimeThrough = false;      } else {        Collection addedSupply = supplyTaskSubscription.getAddedCollection();        if (!addedSupply.isEmpty()){          expandIncomingRequisitions(getTasksWithoutPEs(addedSupply)); // fix for bug #1695        }        Collection addedProjections = projectionTaskSubscription.getAddedCollection();        if (!addedProjections.isEmpty()) {           // getTasksWithoutPEs is fix for bug #1695          touchedProjections = expandIncomingProjections(getTasksWithoutPEs(addedProjections));        }        // call the Refill Generators if we have new demand        if (! getTouchedInventories().isEmpty()) {	  //check to see if we have new projections	  if (touchedProjections || touchedRemovedProjections) {            refillProjGenerator.calculateRefillProjections(getTouchedInventories(),                                                            criticalLevel,                                                            getEndOfLevelSix(),                                                            getEndOfLevelTwo(),                                                            refillComparator);	  }	  refillGenerator.calculateRefills(getTouchedInventories(), inventoryPolicy,					   refillComparator);          externalAllocator.allocateRefillTasks(newRefills);        } else { // Backwards Flow          externalAllocator.updateAllocationResult(refillAllocationSubscription);          allocationAssessor.reconcileInventoryLevels(getTouchedInventories());          supplyExpander.updateAllocationResult(expansionSubscription);          // update the Maintain Inventory Expansion results          PluginHelper.updateAllocationResult(MIExpansionSubscription);          PluginHelper.updateAllocationResult(MITopExpansionSubscription);          PluginHelper.updateAllocationResult(DetReqInvExpansionSubscription);        }                takeInventorySnapshot(getTouchedInventories());                // touchedInventories should not be cleared until the end of transaction        touchedInventories.clear();        touchedProjections = false;        //testBG();      }    }  }