Advertisement
Guest User

Untitled

a guest
May 23rd, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 1.74 KB | None | 0 0
  1. public List<Item> resolve(Collection<Item> items, ItemRegistry registry) {
  2.       final List<Item> resolved = new ArrayList<Item>(items.size());
  3.       final Map<String, List<Item>> unResolved = new HashMap<String, List<Item>>();
  4.       final Deque<Item> resolveQueue = new ArrayDeque<Item>(1000);
  5.      
  6.       for(Item item : items) {
  7.          for(String dependency : item.getDependencies()) {
  8.             if(registry.contains(dependency)) {
  9.                item.fulfilDependency(dependency);
  10.             } else {
  11.                List<Item> waiting = unResolved.get(dependency);
  12.                if(waiting == null) {
  13.                   waiting = new ArrayList<Item>(10);
  14.                   unResolved.put(dependency, waiting);
  15.                }
  16.                waiting.add(item);
  17.             }
  18.          }
  19.          if(item.dependenciesMet()) {
  20.             resolveQueue.clear();
  21.             resolveQueue.addFirst(item);
  22.             while(!resolveQueue.isEmpty()) {
  23.                final Item itemToResolve = resolveQueue.removeFirst();
  24.                resolved.add(itemToResolve);
  25.                registry.add(itemToResolve);
  26.  
  27.                if(unResolved.containsKey(itemToResolve.getName())) {
  28.                   final List<Item> waitingItems = unResolved.remove(itemToResolve.getName());
  29.                   for(Item waiting : waitingItems) {
  30.                      waiting.fulfilDependency(itemToResolve.getName());
  31.                      if(waiting.dependenciesMet()) {
  32.                         resolveQueue.addFirst(waiting);
  33.                      }
  34.                   }
  35.                }
  36.             }
  37.          }
  38.       }
  39.       if(!unResolved.isEmpty())
  40.          throw new RuntimeException("Unresolved dependencies: " + unResolved);
  41.       return resolved;
  42.    }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement