Beispiel #1
0
  /**
   * Queue maintenance.
   *
   * <p>Move projects between {@link #waitingList}, {@link #blockedProjects}, and {@link
   * #buildables} appropriately.
   */
  public synchronized void maintain() {
    if (LOGGER.isLoggable(Level.FINE)) LOGGER.fine("Queue maintenance started " + this);

    Iterator<BlockedItem> itr = blockedProjects.values().iterator();
    while (itr.hasNext()) {
      BlockedItem p = itr.next();
      if (!isBuildBlocked(p.task)) {
        // ready to be executed
        LOGGER.fine(p.task.getFullDisplayName() + " no longer blocked");
        itr.remove();
        makeBuildable(new BuildableItem(p));
      }
    }

    while (!waitingList.isEmpty()) {
      WaitingItem top = peek();

      if (!top.timestamp.before(new GregorianCalendar()))
        return; // finished moving all ready items from queue

      waitingList.remove(top);
      Task p = top.task;
      if (!isBuildBlocked(p)) {
        // ready to be executed immediately
        LOGGER.fine(p.getFullDisplayName() + " ready to build");
        makeBuildable(new BuildableItem(top));
      } else {
        // this can't be built now because another build is in progress
        // set this project aside.
        LOGGER.fine(p.getFullDisplayName() + " is blocked");
        blockedProjects.put(p, new BlockedItem(top));
      }
    }

    if (sortingHandler != null) sortingHandler.sortBuildableItems(buildables);
  }