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 }