1 | package com.hammurapi.common; |
2 | |
3 | import java.util.Collection; |
4 | import java.util.Iterator; |
5 | import java.util.concurrent.atomic.AtomicBoolean; |
6 | |
7 | public class FreezeableCollection<E> implements Collection<E> { |
8 | |
9 | private Collection<E> master; |
10 | private AtomicBoolean freezed = new AtomicBoolean(false); |
11 | |
12 | public FreezeableCollection(Collection<E> master) { |
13 | this.master = master; |
14 | } |
15 | |
16 | public int size() { |
17 | return master.size(); |
18 | } |
19 | |
20 | public boolean isEmpty() { |
21 | return master.isEmpty(); |
22 | } |
23 | |
24 | public boolean contains(Object o) { |
25 | return master.contains(o); |
26 | } |
27 | |
28 | public Iterator<E> iterator() { |
29 | return new Iterator<E>() { |
30 | Iterator<E> masterIterator = master.iterator(); |
31 | |
32 | @Override |
33 | public boolean hasNext() { |
34 | return masterIterator.hasNext(); |
35 | } |
36 | |
37 | @Override |
38 | public E next() { |
39 | return masterIterator.next(); |
40 | } |
41 | |
42 | @Override |
43 | public void remove() { |
44 | checkFrozen(); |
45 | masterIterator.remove(); |
46 | } |
47 | |
48 | }; |
49 | |
50 | } |
51 | |
52 | public Object[] toArray() { |
53 | return master.toArray(); |
54 | } |
55 | |
56 | public <T> T[] toArray(T[] a) { |
57 | return master.toArray(a); |
58 | } |
59 | |
60 | public boolean add(E e) { |
61 | checkFrozen(); |
62 | return master.add(e); |
63 | } |
64 | |
65 | public boolean remove(Object o) { |
66 | checkFrozen(); |
67 | return master.remove(o); |
68 | } |
69 | |
70 | public boolean containsAll(Collection<?> c) { |
71 | return master.containsAll(c); |
72 | } |
73 | |
74 | public boolean addAll(Collection<? extends E> c) { |
75 | checkFrozen(); |
76 | return master.addAll(c); |
77 | } |
78 | |
79 | public boolean removeAll(Collection<?> c) { |
80 | checkFrozen(); |
81 | return master.removeAll(c); |
82 | } |
83 | |
84 | public boolean retainAll(Collection<?> c) { |
85 | checkFrozen(); |
86 | return master.retainAll(c); |
87 | } |
88 | |
89 | public void clear() { |
90 | checkFrozen(); |
91 | master.clear(); |
92 | } |
93 | |
94 | public boolean equals(Object o) { |
95 | return master.equals(o); |
96 | } |
97 | |
98 | public int hashCode() { |
99 | return master.hashCode(); |
100 | } |
101 | |
102 | /** |
103 | * Freezes collection making it unmodifiable. |
104 | */ |
105 | public void freeze() { |
106 | freezed.set(true); |
107 | } |
108 | |
109 | private void checkFrozen() { |
110 | if (freezed.get()) { |
111 | IllegalStateException th = new IllegalStateException("Collection is frozen, no modifications are allowed"); |
112 | th.printStackTrace(); |
113 | throw th; |
114 | } |
115 | } |
116 | |
117 | } |