| SynchronizedPassage.java |
1 /**
2 * Distribution License:
3 * JSword is free software; you can redistribute it and/or modify it under
4 * the terms of the GNU Lesser General Public License, version 2.1 or later
5 * as published by the Free Software Foundation. This program is distributed
6 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
7 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
8 * See the GNU Lesser General Public License for more details.
9 *
10 * The License is available on the internet at:
11 * http://www.gnu.org/copyleft/lgpl.html
12 * or by writing to:
13 * Free Software Foundation, Inc.
14 * 59 Temple Place - Suite 330
15 * Boston, MA 02111-1307, USA
16 *
17 * © CrossWire Bible Society, 2005 - 2016
18 *
19 */
20 package org.crosswire.jsword.passage;
21
22 import java.io.IOException;
23 import java.io.Reader;
24 import java.io.Writer;
25 import java.util.Iterator;
26
27 import org.crosswire.jsword.versification.Versification;
28
29 /**
30 * This is a simple proxy to a real Passage object that makes all accesses
31 * synchronized. It is final to give the VM as much hope as possible at being
32 * able to inline stuff.
33 *
34 * @see gnu.lgpl.License The GNU Lesser General Public License for details.
35 * @author Joe Walker
36 */
37 final class SynchronizedPassage implements Passage {
38 /**
39 * Construct a SynchronizedPassage from a real Passage to which we proxy.
40 *
41 * @param ref
42 * The real Passage
43 */
44 SynchronizedPassage(Passage ref) {
45 this.ref = ref;
46 }
47
48 /* (non-Javadoc)
49 * @see org.crosswire.jsword.passage.Passage#getVersification()
50 */
51 public Versification getVersification() {
52 return ref.getVersification();
53 }
54
55 /* (non-Javadoc)
56 * @see org.crosswire.jsword.passage.Passage#reversify(org.crosswire.jsword.versification.Versification)
57 */
58 public Passage reversify(Versification newVersification) {
59 return ref.reversify(newVersification);
60 }
61
62 /* (non-Javadoc)
63 * @see org.crosswire.jsword.passage.VerseKey#isWhole()
64 */
65 public boolean isWhole() {
66 return ref.isWhole();
67 }
68
69 /* (non-Javadoc)
70 * @see org.crosswire.jsword.passage.VerseKey#getWhole()
71 */
72 public Passage getWhole() {
73 return ref.getWhole();
74 }
75
76 /* (non-Javadoc)
77 * @see org.crosswire.jsword.passage.Key#addAll(org.crosswire.jsword.passage.Key)
78 */
79 public synchronized void addAll(Key key) {
80 ref.addAll(key);
81 }
82
83 /* (non-Javadoc)
84 * @see org.crosswire.jsword.passage.Key#removeAll(org.crosswire.jsword.passage.Key)
85 */
86 public synchronized void removeAll(Key key) {
87 ref.removeAll(key);
88 }
89
90 /* (non-Javadoc)
91 * @see org.crosswire.jsword.passage.Key#retainAll(org.crosswire.jsword.passage.Key)
92 */
93 public synchronized void retainAll(Key key) {
94 ref.retainAll(key);
95 }
96
97 /* (non-Javadoc)
98 * @see org.crosswire.jsword.passage.Passage#contains(org.crosswire.jsword.passage.Key)
99 */
100 public synchronized boolean contains(Key key) {
101 return ref.contains(key);
102 }
103
104 /* (non-Javadoc)
105 * @see org.crosswire.jsword.passage.Key#getChildCount()
106 */
107 public synchronized int getChildCount() {
108 return ref.getChildCount();
109 }
110
111 /* (non-Javadoc)
112 * @see org.crosswire.jsword.passage.Key#getCardinality()
113 */
114 public synchronized int getCardinality() {
115 return ref.getCardinality();
116 }
117
118 /* (non-Javadoc)
119 * @see org.crosswire.jsword.passage.Key#canHaveChildren()
120 */
121 public synchronized boolean canHaveChildren() {
122 return ref.canHaveChildren();
123 }
124
125 /* (non-Javadoc)
126 * @see java.lang.Iterable#iterator()
127 */
128 public synchronized Iterator<Key> iterator() {
129 return ref.iterator();
130 }
131
132 /* (non-Javadoc)
133 * @see org.crosswire.jsword.passage.Key#get(int)
134 */
135 public synchronized Key get(int index) {
136 return ref.get(index);
137 }
138
139 /* (non-Javadoc)
140 * @see org.crosswire.jsword.passage.Key#indexOf(org.crosswire.jsword.passage.Key)
141 */
142 public synchronized int indexOf(Key that) {
143 return ref.indexOf(that);
144 }
145
146 /* (non-Javadoc)
147 * @see org.crosswire.jsword.passage.Key#getParent()
148 */
149 public synchronized Key getParent() {
150 return ref.getParent();
151 }
152
153 /* (non-Javadoc)
154 * @see org.crosswire.jsword.passage.Key#getName()
155 */
156 public synchronized String getName() {
157 return ref.getName();
158 }
159
160 /* (non-Javadoc)
161 * @see org.crosswire.jsword.passage.Key#getName(org.crosswire.jsword.passage.Key)
162 */
163 public synchronized String getName(Key base) {
164 return ref.getName(base);
165 }
166
167 /* (non-Javadoc)
168 * @see org.crosswire.jsword.passage.Key#getRootName()
169 */
170 public synchronized String getRootName() {
171 return ref.getRootName();
172 }
173
174 /* (non-Javadoc)
175 * @see org.crosswire.jsword.passage.Key#getOsisRef()
176 */
177 public synchronized String getOsisRef() {
178 return ref.getOsisRef();
179 }
180
181 /* (non-Javadoc)
182 * @see org.crosswire.jsword.passage.Key#getOsisID()
183 */
184 public synchronized String getOsisID() {
185 return ref.getOsisID();
186 }
187
188 /* (non-Javadoc)
189 * @see org.crosswire.jsword.passage.Passage#getOverview()
190 */
191 public synchronized String getOverview() {
192 return ref.getOverview();
193 }
194
195 /* (non-Javadoc)
196 * @see org.crosswire.jsword.passage.Key#isEmpty()
197 */
198 public synchronized boolean isEmpty() {
199 return ref.isEmpty();
200 }
201
202 /* (non-Javadoc)
203 * @see org.crosswire.jsword.passage.Passage#countVerses()
204 */
205 public synchronized int countVerses() {
206 return ref.countVerses();
207 }
208
209 /* (non-Javadoc)
210 * @see org.crosswire.jsword.passage.Passage#hasRanges(org.crosswire.jsword.passage.RestrictionType)
211 */
212 public synchronized boolean hasRanges(RestrictionType restrict) {
213 return ref.hasRanges(restrict);
214 }
215
216 /* (non-Javadoc)
217 * @see org.crosswire.jsword.passage.Passage#countRanges(org.crosswire.jsword.passage.RestrictionType)
218 */
219 public synchronized int countRanges(RestrictionType restrict) {
220 return ref.countRanges(restrict);
221 }
222
223 /* (non-Javadoc)
224 * @see org.crosswire.jsword.passage.Passage#trimVerses(int)
225 */
226 public synchronized Passage trimVerses(int count) {
227 return ref.trimVerses(count);
228 }
229
230 /* (non-Javadoc)
231 * @see org.crosswire.jsword.passage.Passage#trimRanges(int, org.crosswire.jsword.passage.RestrictionType)
232 */
233 public synchronized Passage trimRanges(int count, RestrictionType restrict) {
234 return ref.trimRanges(count, restrict);
235 }
236
237 /* (non-Javadoc)
238 * @see org.crosswire.jsword.passage.Passage#booksInPassage()
239 */
240 public synchronized int booksInPassage() {
241 return ref.booksInPassage();
242 }
243
244 /* (non-Javadoc)
245 * @see org.crosswire.jsword.passage.Passage#getVerseAt(int)
246 */
247 public synchronized Verse getVerseAt(int offset) throws ArrayIndexOutOfBoundsException {
248 return ref.getVerseAt(offset);
249 }
250
251 /* (non-Javadoc)
252 * @see org.crosswire.jsword.passage.Passage#getRangeAt(int, org.crosswire.jsword.passage.RestrictionType)
253 */
254 public synchronized VerseRange getRangeAt(int offset, RestrictionType restrict) throws ArrayIndexOutOfBoundsException {
255 return ref.getRangeAt(offset, restrict);
256 }
257
258 /* (non-Javadoc)
259 * @see org.crosswire.jsword.passage.Passage#rangeIterator(org.crosswire.jsword.passage.RestrictionType)
260 */
261 public synchronized Iterator<VerseRange> rangeIterator(RestrictionType restrict) {
262 return ref.rangeIterator(restrict);
263 }
264
265 /* (non-Javadoc)
266 * @see org.crosswire.jsword.passage.Passage#add(org.crosswire.jsword.passage.Key)
267 */
268 public synchronized void add(Key that) {
269 ref.add(that);
270 }
271
272 /* (non-Javadoc)
273 * @see org.crosswire.jsword.passage.Passage#remove(org.crosswire.jsword.passage.Key)
274 */
275 public synchronized void remove(Key that) {
276 ref.remove(that);
277 }
278
279 /* (non-Javadoc)
280 * @see org.crosswire.jsword.passage.Passage#containsAll(org.crosswire.jsword.passage.Passage)
281 */
282 public synchronized boolean containsAll(Passage that) {
283 return ref.containsAll(that);
284 }
285
286 /* (non-Javadoc)
287 * @see org.crosswire.jsword.passage.Key#clear()
288 */
289 public synchronized void clear() {
290 ref.clear();
291 }
292
293 /* (non-Javadoc)
294 * @see org.crosswire.jsword.passage.Key#blur(int, org.crosswire.jsword.passage.RestrictionType)
295 */
296 public synchronized void blur(int by, RestrictionType restrict) {
297 ref.blur(by, restrict);
298 }
299
300 /* (non-Javadoc)
301 * @see org.crosswire.jsword.passage.Passage#readDescription(java.io.Reader)
302 */
303 public synchronized void readDescription(Reader in) throws IOException, NoSuchVerseException {
304 ref.readDescription(in);
305 }
306
307 /* (non-Javadoc)
308 * @see org.crosswire.jsword.passage.Passage#writeDescription(java.io.Writer)
309 */
310 public synchronized void writeDescription(Writer out) throws IOException {
311 ref.writeDescription(out);
312 }
313
314 /* (non-Javadoc)
315 * @see org.crosswire.jsword.passage.Passage#optimizeReads()
316 */
317 public synchronized void optimizeReads() {
318 ref.optimizeReads();
319 }
320
321 /* (non-Javadoc)
322 * @see org.crosswire.jsword.passage.Passage#addPassageListener(org.crosswire.jsword.passage.PassageListener)
323 */
324 public synchronized void addPassageListener(PassageListener li) {
325 ref.addPassageListener(li);
326 }
327
328 /* (non-Javadoc)
329 * @see org.crosswire.jsword.passage.Passage#removePassageListener(org.crosswire.jsword.passage.PassageListener)
330 */
331 public synchronized void removePassageListener(PassageListener li) {
332 ref.removePassageListener(li);
333 }
334
335 @Override
336 public synchronized SynchronizedPassage clone() {
337 SynchronizedPassage clone = null;
338 try {
339 clone = (SynchronizedPassage) super.clone();
340 synchronized (clone) {
341 clone.ref = (Passage) ref.clone();
342 }
343 } catch (CloneNotSupportedException e) {
344 assert false : e;
345 }
346 return clone;
347 }
348
349 @Override
350 public synchronized int hashCode() {
351 return ref.hashCode();
352 }
353
354 @Override
355 public synchronized boolean equals(Object obj) {
356 return ref.equals(obj);
357 }
358
359 /* (non-Javadoc)
360 * @see java.lang.Comparable#compareTo(java.lang.Object)
361 */
362 public synchronized int compareTo(Key o) {
363 return ref.compareTo(o);
364 }
365
366 /**
367 * The object we are proxying to
368 */
369 private Passage ref;
370
371 /**
372 * Serialization ID
373 */
374 private static final long serialVersionUID = 3833181441264531251L;
375 }
376