logger.info("checking Rate on consumed item " + rate.toString());
  public void expandGenerateProjections(Task gpTask, Schedule schedule, Asset consumer) {    // TODO: Add diff based planning code    // TODO: document, add logger, handle null checks    // TODO: create method to compare rates and extract tasks based on time, e.g., overlapping schedules    PropertyGroup pg = consumer.searchForPropertyGroup(dfPlugin.getSupplyClassPG());    Collection items = getConsumed(pg);    Collection subTasks = new ArrayList();    for (Iterator iterator = items.iterator(); iterator.hasNext();) {      Asset consumedItem = (Asset) iterator.next();      Enumeration scheduleElements = schedule.getAllScheduleElements();      Rate rate;      // for every item consumed, walk the schedule elements and get the rates      while (scheduleElements.hasMoreElements()) {        ObjectScheduleElement ose = (ObjectScheduleElement) scheduleElements.nextElement();        rate = getRate(pg, consumedItem, (List) ose.getObject());        subTasks.add(createProjectSupplyTask(gpTask, consumer, consumedItem, ose.getStartTime(),                                             ose.getEndTime(), rate));      }      createAndPublishExpansion(gpTask, subTasks);    }  }