1 package eu.simuline.relana.model;
2
3 import java.util.Set;
4 import java.util.HashSet;
5
6
7
8
9
10
11
12
13
14
15
16
17 public final class DeficiencyNode {
18
19
20
21
22
23 private Set<DeficiencyNode> predecessors;
24
25 private Set<DeficiencyNode> successors;
26
27
28 private final Deficiency deficiency;
29
30
31
32
33
34 public DeficiencyNode(Deficiency deficiency) {
35 this(deficiency,
36 new HashSet<DeficiencyNode>(),
37 new HashSet<DeficiencyNode>());
38 }
39
40 public DeficiencyNode(Deficiency deficiency,
41 Set<DeficiencyNode> predecessors,
42 Set<DeficiencyNode> successors) {
43 this.deficiency = deficiency;
44 this.predecessors = predecessors;
45 this.successors = successors;
46 }
47
48 public DeficiencyNode(DeficiencyNode node) {
49 this(node.deficiency,
50 new HashSet<DeficiencyNode>(node.predecessors),
51 new HashSet<DeficiencyNode>(node.successors));
52 }
53
54
55
56
57
58
59
60 public static Set<Deficiency> unwrap(Set<DeficiencyNode> defNodes) {
61 Set<Deficiency> res = new HashSet<Deficiency>();
62 for (DeficiencyNode node : defNodes) {
63 res.add(node.getDeficiency());
64 }
65
66 return res;
67 }
68
69 public Deficiency getDeficiency() {
70 return this.deficiency;
71 }
72
73 public Set<DeficiencyNode> getPredecessors() {
74 return this.predecessors;
75 }
76
77 public Set<DeficiencyNode> getSuccessors() {
78 return this.successors;
79 }
80
81 public void addPredecessor(DeficiencyNode deficiencyNode) {
82 this.predecessors.add(deficiencyNode);
83 }
84
85 public void addSuccessor(DeficiencyNode deficiencyNode) {
86 this.successors.add(deficiencyNode);
87 }
88
89 public void addPredecessors(Set<DeficiencyNode> nodes) {
90 this.predecessors.addAll(nodes);
91 }
92
93 public void addSuccessors(Set<DeficiencyNode> nodes) {
94 this.successors.addAll(nodes);
95 }
96
97 @SuppressWarnings("checkstyle:nowhitespaceafter")
98 public void addAll(DeficiencyNode other) {
99 if (!other.getDeficiency().equals(getDeficiency())) {
100 throw new IllegalArgumentException
101 ("Deficiencies" + getDeficiency() + " and " +
102 other.getDeficiency() + " should coincide. ");
103 }
104
105 this.predecessors.addAll(other.getPredecessors());
106 this. successors.addAll(other.getSuccessors ());
107 }
108
109 public DeficiencyNode getInverse() {
110 return new DeficiencyNode(this.deficiency,
111 this.successors,
112 this.predecessors);
113 }
114
115 public String toString() {
116 StringBuffer res = new StringBuffer();
117 res.append("\n<DeficiencyNode deficiency=\"");
118 res.append(this.deficiency);
119 res.append("\">");
120 if (!this.predecessors.isEmpty()) {
121 res.append("<Predecessors>");
122 for (DeficiencyNode node : this.predecessors) {
123 res.append(node.getDeficiency().getName());
124 }
125 res.append("</Predecessors>\n");
126
127 }
128
129 if (!this.successors.isEmpty()) {
130 res.append("<Successors>");
131 for (DeficiencyNode node : this.successors) {
132 res.append(node.getDeficiency().getName());
133 }
134 res.append("</Successors>\n");
135 }
136 res.append("</DeficiencyNode>");
137 return res.toString();
138 }
139
140 public boolean equals(Object obj) {
141 if (!(obj instanceof DeficiencyNode)) {
142 return false;
143 }
144 DeficiencyNode other = (DeficiencyNode) obj;
145 return
146 getDeficiency ().equals(other.getDeficiency ()) &&
147 getPredecessors().equals(other.getPredecessors()) &&
148 getSuccessors ().equals(other.getSuccessors ());
149 }
150
151 public int hashCode() {
152 return getDeficiency().hashCode();
153 }
154
155 }