1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.qedeq.kernel.se.dto.list;
17
18 import java.util.Arrays;
19 import java.util.HashSet;
20 import java.util.Iterator;
21 import java.util.Set;
22
23 import org.qedeq.kernel.se.base.list.Element;
24 import org.qedeq.kernel.se.base.list.ElementList;
25
26
27
28
29
30
31
32 public class ElementSet {
33
34
35
36 private final Set elements;
37
38
39
40
41
42 public ElementSet() {
43 this.elements = new HashSet();
44 }
45
46
47
48
49
50
51
52
53 public ElementSet(final Element[] elements) {
54 if (elements == null) {
55 throw new IllegalArgumentException(
56 "NullPointer as element array is not allowed");
57 }
58 this.elements = new HashSet(Arrays.asList(elements));
59 }
60
61
62
63
64
65
66
67
68
69 public ElementSet(final ElementSet set) {
70 if (set == null) {
71 throw new IllegalArgumentException(
72 "NullPointer as set is not allowed");
73 }
74 this.elements = new HashSet(set.elements);
75 }
76
77
78
79
80
81
82
83
84
85
86
87 public ElementSet(final ElementList element) {
88 if (element == null) {
89 throw new IllegalArgumentException(
90 "NullPointer as element is not allowed");
91 }
92 if (element.isAtom()) {
93 throw new IllegalArgumentException(
94 "text as element is not allowed");
95 }
96 this.elements = new HashSet(element.getElements());
97 }
98
99
100
101
102
103
104
105
106
107
108 public final boolean contains(final Element element) {
109 if (element == null) {
110 throw new IllegalArgumentException("NullPointer as element is not allowed");
111 }
112 return this.elements.contains(element);
113 }
114
115
116
117
118
119
120 public final boolean isEmpty() {
121 return elements.isEmpty();
122 }
123
124
125
126
127
128
129
130
131
132 public final boolean isSubset(final ElementSet set) {
133 if (set == null) {
134 throw new IllegalArgumentException("NullPointer as set is not allowed");
135 }
136 return set.elements.containsAll(this.elements);
137 }
138
139
140
141
142
143
144
145
146
147
148
149 public final ElementSet add(final Element element) {
150 if (element == null) {
151 throw new IllegalArgumentException("NullPointer as element is not allowed");
152 }
153 elements.add(element);
154 return this;
155 }
156
157
158
159
160
161
162
163
164
165
166
167 public final ElementSet union(final ElementSet set) {
168 if (set == null) {
169 throw new IllegalArgumentException(
170 "NullPointer as set is not allowed");
171 }
172 elements.addAll(set.elements);
173 return this;
174 }
175
176
177
178
179
180
181
182
183
184
185 public final ElementSet remove(final Element element) {
186 if (element == null) {
187 throw new IllegalArgumentException(
188 "NullPointer as element is not allowed");
189 }
190 elements.remove(element);
191 return this;
192 }
193
194
195
196
197
198
199
200
201
202
203
204
205
206 public final ElementSet minus(final ElementSet set) {
207 if (set == null) {
208 throw new IllegalArgumentException(
209 "NullPointer as set is not allowed");
210 }
211 this.elements.removeAll(set.elements);
212 return this;
213 }
214
215
216
217
218
219
220
221
222
223
224 public final ElementSet intersection(final ElementSet set) {
225 if (set == null) {
226 throw new IllegalArgumentException(
227 "NullPointer as set is not allowed");
228 }
229 this.elements.retainAll(set.elements);
230 return this;
231 }
232
233
234
235
236
237
238
239
240
241
242
243 public final ElementSet newIntersection(final ElementSet set) {
244 if (set == null) {
245 throw new IllegalArgumentException(
246 "NullPointer as set is not allowed");
247 }
248 final ElementSet result = new ElementSet(this);
249 result.elements.retainAll(set.elements);
250 return result;
251 }
252
253
254
255
256
257
258
259
260
261
262
263
264
265 public final ElementSet newDelta(final ElementSet set) {
266 if (set == null) {
267 throw new IllegalArgumentException(
268 "NullPointer as set is not allowed");
269 }
270 final ElementSet union = new ElementSet(this);
271 union.union(set);
272 final ElementSet intersection = new ElementSet(this);
273 intersection.intersection(set);
274 union.minus(intersection);
275 return union;
276 }
277
278
279
280
281
282
283 public final int size() {
284 return this.elements.size();
285 }
286
287
288
289
290
291
292
293
294 public Iterator iterator() {
295 return this.elements.iterator();
296 }
297
298 public final boolean equals(final Object obj) {
299 if (obj == null) {
300 return false;
301 }
302 if (obj.getClass() == ElementSet.class) {
303 return this.elements.equals(((ElementSet) obj).elements);
304 }
305 return false;
306 }
307
308 public final int hashCode() {
309 return elements.hashCode();
310 }
311
312 public final String toString() {
313 final StringBuffer result = new StringBuffer();
314 result.append("{");
315 final Iterator iterator = elements.iterator();
316 while (iterator.hasNext()) {
317 result.append(iterator.next());
318 if (iterator.hasNext()) {
319 result.append(", ");
320 }
321 }
322 result.append("}");
323 return result.toString();
324 }
325
326 }