org.crosswire.jsword.passage
Class ReadOnlyPassage

java.lang.Object
  extended by org.crosswire.jsword.passage.ReadOnlyPassage
All Implemented Interfaces:
Serializable, Cloneable, Comparable<Key>, Iterable<Key>, Key, Passage, VerseKey<Passage>

final class ReadOnlyPassage
extends Object
implements Passage

This is a simple proxy to a real Passage object that denies all attempts to write to it.

Author:
Joe Walker
See Also:
The GNU Lesser General Public License for details.

Field Summary
private  boolean ignore
          Do we just silently ignore change attempts or throw up
private  Passage ref
          The object we are proxying to
private static long serialVersionUID
          Serialization ID
 
Constructor Summary
ReadOnlyPassage(Passage ref, boolean ignore)
          Construct a ReadOnlyPassage from a real Passage to which we proxy.
 
Method Summary
 void add(Key that)
          Add this Verse/VerseRange to this Passage
 void addAll(Key key)
          Adds the specified element to this set if it is not already present.
 void addPassageListener(PassageListener li)
          Event Listeners - Add Listener
 void blur(int by, RestrictionType restrict)
          Widen the range of the verses/keys in this list.
 int booksInPassage()
          How many books are there in this Passage
 boolean canHaveChildren()
          Returns false if the receiver is a leaf node and can not have children.
 void clear()
          Removes all of the elements from this set (optional operation).
 ReadOnlyPassage clone()
          This needs to be declared here so that it is visible as a method on a derived Key.
 int compareTo(Key o)
           
 boolean contains(Key key)
          Returns true if this collection contains all the specified Verse
 boolean containsAll(Passage that)
          Returns true if this Passage contains all of the verses in that Passage
 int countRanges(RestrictionType restrict)
          Like countVerses() that counts VerseRanges instead of Verses Returns the number of fragments in this collection.
 int countVerses()
          Returns the number of verses in this collection.
 boolean equals(Object obj)
          This needs to be declared here so that it is visible as a method on a derived Key.
 Key get(int index)
          Gets a key from a specific point in this list of children.
 int getCardinality()
          Returns the number of elements in this set (its cardinality).
 int getChildCount()
          Returns the number of children that this node has.
 String getName()
          A Human readable version of the Key.
 String getName(Key base)
          Translate the Key into a human readable string, with the assumption that the specified Key has just been output, so if we are in the same region, we do not need to display the region name, and so on.
 String getOsisID()
          The OSIS defined id specification for this Key.
 String getOsisRef()
          The OSIS defined reference specification for this Key.
 String getOverview()
          A summary of the verses in this Passage For example "10 verses in 4 books"
 Key getParent()
          All keys have parents unless they are the root of a Key.
 VerseRange getRangeAt(int offset, RestrictionType restrict)
          Get a specific VerseRange from this collection
 String getRootName()
          A Human readable version of the Key's top level name.
 Verse getVerseAt(int offset)
          Get a specific Verse from this collection
 Versification getVersification()
          Get the Versification that defines the Verses in this VerseKey.
 Passage getWhole()
          Convert this reference into one without a sub-identifier.
 int hashCode()
          This needs to be declared here so that it is visible as a method on a derived Key.
 boolean hasRanges(RestrictionType restrict)
          Determine whether there are two or more ranges.
 int indexOf(Key that)
          Reverse a Key into the position the key holds in the list of children
 boolean isEmpty()
          Does this Key have 0 members
 boolean isWhole()
          A VerseKey that does not have an OSIS sub identifier is a whole reference.
 Iterator<Key> iterator()
           
 void optimizeReads()
          For performance reasons we may well want to hint to the Passage that we have done editing it for now and that it is safe to cache certain values to speed up future reads.
 Iterator<VerseRange> rangeIterator(RestrictionType restrict)
          Like iterator() that iterates over VerseRanges instead of Verses.
 void readDescription(Reader in)
          To be compatible with humans we read/write ourselves to a file that a human can read and even edit.
 void remove(Key that)
          Remove this Verse/VerseRange from this Passage
 void removeAll(Key key)
          Removes the specified elements from this set if it is present.
 void removePassageListener(PassageListener li)
          Event Listeners - Remove Listener
 void retainAll(Key key)
          Removes all but the specified element from this set.
 Passage reversify(Versification newVersification)
          Cast this VerseKey into another Versification.
 String toString()
           
 Passage trimRanges(int count, RestrictionType restrict)
          Ensures that there are a maximum of count VerseRanges in this Passage.
 Passage trimVerses(int count)
          Ensures that there are a maximum of count Verses in this Passage.
 void writeDescription(Writer out)
          To be compatible with humans we read/write ourselves to a file that a human can read and even edit.
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

ref

private Passage ref
The object we are proxying to


ignore

private boolean ignore
Do we just silently ignore change attempts or throw up


serialVersionUID

private static final long serialVersionUID
Serialization ID

See Also:
Constant Field Values
Constructor Detail

ReadOnlyPassage

public ReadOnlyPassage(Passage ref,
                       boolean ignore)
Construct a ReadOnlyPassage from a real Passage to which we proxy.

Parameters:
ref - The real Passage
ignore - Do we throw up if someone tries to change us
Method Detail

getVersification

public Versification getVersification()
Description copied from interface: VerseKey
Get the Versification that defines the Verses in this VerseKey.

Specified by:
getVersification in interface VerseKey<Passage>
Returns:
this VerseKey Versification.

reversify

public Passage reversify(Versification newVersification)
Description copied from interface: VerseKey
Cast this VerseKey into another Versification. OSIS Sub Identifiers are ignored.

Note: This is dangerous as it does not consider chapter boundaries or whether the verses in this VerseKey are actually part of the new versification. It should only be used when the start and end verses are in both Versifications. You have been warned.

Specified by:
reversify in interface VerseKey<Passage>
Returns:
this VerseKey Versification.

isWhole

public boolean isWhole()
Description copied from interface: VerseKey
A VerseKey that does not have an OSIS sub identifier is a whole reference.

Specified by:
isWhole in interface VerseKey<Passage>
Returns:
whether this is a whole reference

getWhole

public Passage getWhole()
Description copied from interface: VerseKey
Convert this reference into one without a sub-identifier. A Verse with an OSIS sub-identifier represents part of a reference.

Specified by:
getWhole in interface VerseKey<Passage>
Returns:
a whole reference

addAll

public void addAll(Key key)
Description copied from interface: Key
Adds the specified element to this set if it is not already present.

Specified by:
addAll in interface Key
Parameters:
key - element to be added to this set.

removeAll

public void removeAll(Key key)
Description copied from interface: Key
Removes the specified elements from this set if it is present.

Specified by:
removeAll in interface Key
Parameters:
key - object to be removed from this set, if present.

retainAll

public void retainAll(Key key)
Description copied from interface: Key
Removes all but the specified element from this set.

Specified by:
retainAll in interface Key
Parameters:
key - object to be left in this set.

contains

public boolean contains(Key key)
Description copied from interface: Passage
Returns true if this collection contains all the specified Verse

Specified by:
contains in interface Key
Specified by:
contains in interface Passage
Parameters:
key - Verse or VerseRange that may exist in this Passage
Returns:
true if this collection contains that

canHaveChildren

public boolean canHaveChildren()
Description copied from interface: Key
Returns false if the receiver is a leaf node and can not have children. Any attempt to add()/remove() will throw

Specified by:
canHaveChildren in interface Key
Returns:
true if the key can have children

getChildCount

public int getChildCount()
Description copied from interface: Key
Returns the number of children that this node has. Leaf nodes return 0.

Specified by:
getChildCount in interface Key
Returns:
the number of children for the node

getCardinality

public int getCardinality()
Description copied from interface: Key
Returns the number of elements in this set (its cardinality). If this set contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.

This method is potentially expensive, as it often requires cycling through all the keys in the set.

Specified by:
getCardinality in interface Key
Returns:
the number of elements in this set (its cardinality).

iterator

public Iterator<Key> iterator()
Specified by:
iterator in interface Iterable<Key>

get

public Key get(int index)
Description copied from interface: Key
Gets a key from a specific point in this list of children.

Specified by:
get in interface Key
Parameters:
index - The index of the Key to retrieve
Returns:
The specified key

indexOf

public int indexOf(Key that)
Description copied from interface: Key
Reverse a Key into the position the key holds in the list of children

Specified by:
indexOf in interface Key
Parameters:
that - The Key to find
Returns:
The index of the key or < 0 if the key is not in the list

getParent

public Key getParent()
Description copied from interface: Key
All keys have parents unless they are the root of a Key.

Specified by:
getParent in interface Key
Returns:
The parent of this tree, or null if this Key is the root.

getName

public String getName()
Description copied from interface: Key
A Human readable version of the Key. For Biblical passages this uses short books names, and the shortest sensible rendering, for example "Mat 3:1-4" and "Mar 1:1, 3, 5" and "3Jo, Jude"

Specified by:
getName in interface Key
Returns:
a String containing a description of the Key

getName

public String getName(Key base)
Description copied from interface: Key
Translate the Key into a human readable string, with the assumption that the specified Key has just been output, so if we are in the same region, we do not need to display the region name, and so on.

Specified by:
getName in interface Key
Parameters:
base - The key to use to cut down unnecessary output.
Returns:
The string representation

getRootName

public String getRootName()
Description copied from interface: Key
A Human readable version of the Key's top level name. For Biblical passages this uses short books names. For a dictionary it might return A-Z.

Specified by:
getRootName in interface Key
Returns:
a String containing a description of the Key

getOsisRef

public String getOsisRef()
Description copied from interface: Key
The OSIS defined reference specification for this Key. When the key is a single element, it is an OSIS book name with '.' separating the parts. When the key is multiple elements, it uses a range notation. Note, this will create a comma separated list of ranges, which is improper OSIS.

Specified by:
getOsisRef in interface Key
Returns:
a String containing the OSIS description of the verses

getOsisID

public String getOsisID()
Description copied from interface: Key
The OSIS defined id specification for this Key. When the key is a single element, it is an OSIS book name with '.' separating the parts. When the key is multiple elements, it uses a space to separate each.

Specified by:
getOsisID in interface Key
Returns:
a String containing the OSIS description of the verses

getOverview

public String getOverview()
Description copied from interface: Passage
A summary of the verses in this Passage For example "10 verses in 4 books"

Specified by:
getOverview in interface Passage
Returns:
a String containing an overview of the verses

isEmpty

public boolean isEmpty()
Description copied from interface: Key
Does this Key have 0 members

Specified by:
isEmpty in interface Key
Returns:
true if this set contains no elements.

countVerses

public int countVerses()
Description copied from interface: Passage
Returns the number of verses in this collection. Like Collection.size() This does not mean the Passage needs to use Verses, just that it understands the concept.

Specified by:
countVerses in interface Passage
Returns:
the number of Verses in this collection
See Also:
Verse

hasRanges

public boolean hasRanges(RestrictionType restrict)
Description copied from interface: Passage
Determine whether there are two or more ranges.

Specified by:
hasRanges in interface Passage
Parameters:
restrict - Do we break ranges at chapter/book boundaries
Returns:
whether there are two or more ranges
See Also:
VerseRange

countRanges

public int countRanges(RestrictionType restrict)
Description copied from interface: Passage
Like countVerses() that counts VerseRanges instead of Verses Returns the number of fragments in this collection. This does not mean the Passage needs to use VerseRanges, just that it understands the concept.

Specified by:
countRanges in interface Passage
Parameters:
restrict - Do we break ranges at chapter/book boundaries
Returns:
the number of VerseRanges in this collection
See Also:
VerseRange

trimVerses

public Passage trimVerses(int count)
Description copied from interface: Passage
Ensures that there are a maximum of count Verses in this Passage. If there were more than count Verses then a new Passage is created containing the Verses from count+1 onwards. If there was not greater than count in the Passage, then the passage remains unchanged, and null is returned.

Specified by:
trimVerses in interface Passage
Parameters:
count - The maximum number of Verses to allow in this collection
Returns:
A new Passage containing the remaining verses or null
See Also:
Verse

trimRanges

public Passage trimRanges(int count,
                          RestrictionType restrict)
Description copied from interface: Passage
Ensures that there are a maximum of count VerseRanges in this Passage. If there were more than count VerseRanges then a new Passage is created containing the VerseRanges from count+1 onwards. If there was not greater than count in the Passage, then the passage remains unchanged, and null is returned.

Specified by:
trimRanges in interface Passage
Parameters:
count - The maximum number of VerseRanges to allow in this collection
restrict - Do we break ranges at chapter/book boundaries
Returns:
A new Passage containing the remaining verses or null
See Also:
VerseRange

booksInPassage

public int booksInPassage()
Description copied from interface: Passage
How many books are there in this Passage

Specified by:
booksInPassage in interface Passage
Returns:
The number of distinct books

getVerseAt

public Verse getVerseAt(int offset)
                 throws ArrayIndexOutOfBoundsException
Description copied from interface: Passage
Get a specific Verse from this collection

Specified by:
getVerseAt in interface Passage
Parameters:
offset - The verse offset (legal values are 0 to countVerses()-1)
Returns:
The Verse
Throws:
ArrayIndexOutOfBoundsException - If the offset is out of range

getRangeAt

public VerseRange getRangeAt(int offset,
                             RestrictionType restrict)
                      throws ArrayIndexOutOfBoundsException
Description copied from interface: Passage
Get a specific VerseRange from this collection

Specified by:
getRangeAt in interface Passage
Parameters:
offset - The verse range offset (legal values are 0 to countRanges()-1)
restrict - Do we break ranges at chapter/book boundaries
Returns:
The Verse Range
Throws:
ArrayIndexOutOfBoundsException - If the offset is out of range

rangeIterator

public Iterator<VerseRange> rangeIterator(RestrictionType restrict)
Description copied from interface: Passage
Like iterator() that iterates over VerseRanges instead of Verses. Exactly the same data will be traversed, however using rangeIterator() will usually give fewer iterations (and never more)

Specified by:
rangeIterator in interface Passage
Parameters:
restrict - Do we break ranges over chapters
Returns:
A list enumerator

add

public void add(Key that)
Description copied from interface: Passage
Add this Verse/VerseRange to this Passage

Specified by:
add in interface Passage
Parameters:
that - The Verses to be added from this Passage

remove

public void remove(Key that)
Description copied from interface: Passage
Remove this Verse/VerseRange from this Passage

Specified by:
remove in interface Passage
Parameters:
that - The Verses to be removed from this Passage

containsAll

public boolean containsAll(Passage that)
Description copied from interface: Passage
Returns true if this Passage contains all of the verses in that Passage

Specified by:
containsAll in interface Passage
Parameters:
that - Passage to be checked for containment in this collection.
Returns:
true if this reference contains all of the Verses in that Passage

clear

public void clear()
Description copied from interface: Key
Removes all of the elements from this set (optional operation). This set will be empty after this call returns (unless it throws an exception).

Specified by:
clear in interface Key

blur

public void blur(int by,
                 RestrictionType restrict)
Description copied from interface: Key
Widen the range of the verses/keys in this list. This is primarily for "find x within n verses of y" type applications.

Specified by:
blur in interface Key
Parameters:
by - The number of verses/keys to widen by
restrict - How should we restrict the blurring?
See Also:
Passage

readDescription

public void readDescription(Reader in)
Description copied from interface: Passage
To be compatible with humans we read/write ourselves to a file that a human can read and even edit. OLB verse.lst integration is a good goal here.

Specified by:
readDescription in interface Passage
Parameters:
in - The stream to read from

writeDescription

public void writeDescription(Writer out)
                      throws IOException
Description copied from interface: Passage
To be compatible with humans we read/write ourselves to a file that a human can read and even edit. OLB verse.lst integration is a good goal here.

Specified by:
writeDescription in interface Passage
Parameters:
out - The stream to write to
Throws:
IOException - If the file/network etc breaks

optimizeReads

public void optimizeReads()
Description copied from interface: Passage
For performance reasons we may well want to hint to the Passage that we have done editing it for now and that it is safe to cache certain values to speed up future reads. Any action taken by this method will be undone simply by making a future edit, and the only loss in calling optimizeReads() is a loss of time if you then persist in writing to the Passage.

Specified by:
optimizeReads in interface Passage

addPassageListener

public void addPassageListener(PassageListener li)
Description copied from interface: Passage
Event Listeners - Add Listener

Specified by:
addPassageListener in interface Passage
Parameters:
li - The listener to add

removePassageListener

public void removePassageListener(PassageListener li)
Description copied from interface: Passage
Event Listeners - Remove Listener

Specified by:
removePassageListener in interface Passage
Parameters:
li - The listener to remove

equals

public boolean equals(Object obj)
Description copied from interface: Key
This needs to be declared here so that it is visible as a method on a derived Key.

Specified by:
equals in interface Key
Overrides:
equals in class Object
Returns:
true if equal

hashCode

public int hashCode()
Description copied from interface: Key
This needs to be declared here so that it is visible as a method on a derived Key.

Specified by:
hashCode in interface Key
Overrides:
hashCode in class Object
Returns:
the hashcode

toString

public String toString()
Overrides:
toString in class Object

clone

public ReadOnlyPassage clone()
Description copied from interface: Key
This needs to be declared here so that it is visible as a method on a derived Key.

Specified by:
clone in interface Key
Overrides:
clone in class Object
Returns:
A complete copy of ourselves

compareTo

public int compareTo(Key o)
Specified by:
compareTo in interface Comparable<Key>

Copyright ยจ 2003-2015