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