Advertisement
Guest User

Untitled

a guest
May 23rd, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 1.26 KB | None | 0 0
  1. public List<Item> dfResolve(final Map<String, Item> allItems) {
  2.       int itemCount = allItems.size();
  3.       final List<Item> resolved = new ArrayList<Item>(itemCount);
  4.       final Set<Item> visited = new HashSet<Item>();
  5.  
  6.       for(Item item : allItems.values()) {
  7.          resolve(item, allItems, visited, resolved);
  8.       }
  9.       if(resolved.size() < itemCount)
  10.          throw new RuntimeException("Unresolved dependencies");
  11.  
  12.       return resolved;
  13.    }
  14.  
  15.    public void resolve(final Item item, final Map<String, Item> allItems, final Set<Item> visited, final List<Item> resolved) {
  16.       if(visited.contains(item))
  17.             throw new RuntimeException("Circular dependency discovered: " + visited);
  18.       visited.add(item);
  19.  
  20.       if(!item.isVisited()) {
  21.          item.setVisited(true);
  22.          for(String dep : item.getDependencies()) {
  23.             Item depItem = allItems.get(dep);
  24.             if(depItem == null)
  25.                throw new RuntimeException("Unresolved dependency: " + item.getName() + " depends on " + dep + " which can not be found");
  26.             resolve(depItem, allItems, visited, resolved);
  27.          }
  28.          //System.out.println("Resolved: " + item);
  29.          resolved.add(item);
  30.       }
  31.  
  32.       visited.remove(item);
  33.    }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement