1 package argos.util.graph; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class Node implements Comparable<Node> { 7 public List<Node> dependsOnThis; 8 public List<Node> thisDependsOn; 9 protected String name; 10 protected int level; 11 12 public Node() { 13 super(); 14 level = -1; 15 dependsOnThis = new ArrayList<Node>(); 16 thisDependsOn = new ArrayList<Node>(); 17 } 18 19 public void resetDependencies() { 20 dependsOnThis.clear(); 21 for(Node node : thisDependsOn) { 22 node.remove(this); 23 } 24 thisDependsOn.clear(); 25 } 26 27 public void remove(Node node) { 28 dependsOnThis.remove(node); 29 } 30 31 @Override 32 public int hashCode() { 33 return 31 + ((name == null) ? 0 : name.hashCode()); 34 } 35 36 @Override 37 public boolean equals(Object obj) { 38 if(this == obj) { 39 return true; 40 } 41 else if(obj == null) { 42 return false; 43 } 44 else if(getClass() != obj.getClass()) { 45 return false; 46 } 47 48 Node other = (Node) obj; 49 if(name == null && other.name != null) { 50 return false; 51 } 52 else if(name != null && !name.equals(other.name)) { 53 return false; 54 } 55 return true; 56 } 57 58 public int compareTo(Node node) { 59 if(getLevel() < node.getLevel()) { 60 return -1; 61 } 62 else if(getLevel() == node.getLevel()) { 63 return 0; 64 } 65 else { 66 return 1; 67 } 68 } 69 70 public String getName() { 71 return name; 72 } 73 74 public void setName(String name) { 75 this.name = name; 76 } 77 78 public List<Node> getDependsOnThis() { 79 return dependsOnThis; 80 } 81 82 public List<Node> getThisDependsOn() { 83 return thisDependsOn; 84 } 85 86 public int getLevel() { 87 if(level == -1) { 88 level = 0; 89 for(Node node : thisDependsOn) { 90 if(level < node.getLevel() + 1) { 91 level = node.getLevel() + 1; 92 } 93 } 94 } 95 96 return level; 97 } 98 99 @Override 100 public String toString() { 101 return getName(); 102 } 103 }