A Key is a Key that can contain other Keys.
A Factory for new Keys and KeyLists.
An interface for components wanting to visit all the nodes in a Key tree.
A Passage is a specialized Collection of Verses.
A PassageListener gets told when the verses in a Passage have changed (added or removed).
For any time when a component wishes to express a preference for a Key.
|VerseKey<T extends VerseKey>||
A VerseKey indicates that a Key has a Versification reference system.
An implementation of some of the easier methods from Key.
This is a base class to help with some of the common implementation details of being a Passage.
Skip over verses that are part of a range
A Passage that is implemented using a BitSet - one for each verse.
A default implementation of Key.
A default implementation of KeyVisitor that does nothing, for use in inheritance where you want to save space by not overriding all methods.
A simple default implementation of the Key interface.
A Passage that is implemented using a TreeSet of Verses.
This KeyIterator performs a depth first iteration over the subkeys in the key.
A helper class that remembers where we've been and where we are.
The Osis ID parser simply assumes 1-3 parts divided by '.'.
Defines an event that encapsulates changes to a Passage.
The PassageKeyFactory constructs Passages of the default Passage type.
Similar to a Passage, but that stores a ranking for each of the Verses that it contains.
Iterate over the Verses in order of their rank in the tally
Iterate over the Ranges in order of their rank in the tally
Hack to make this work with J2SE 1.1 as well as J2SE 1.2 This compared 2 Integers
Hack to make this work with JDK1.1 as well as JDK1.2 This compared 2 Integers
A Utility class containing various static methods.
A Passage that is implemented using a TreeSet of VerseRanges.
This class is here to prevent users of RangedPassage.iterator() from altering the underlying store and getting us out of sync.
Loop over the VerseRanges and check that they do not require digging into
A read-only wrapper around any writable implementation of Key.
This is a simple proxy to a real Passage object that denies all attempts to write to it.
A RocketPassage is a bit and heavy implementation of Passage that goes fairly quickly once let of the leash.
A Key that uses a Set of Keys as it's store of data.
This is a simple proxy to a real Passage object that makes all accesses synchronized.
A Key that knows where the data is in the real file.
A Verse is a pointer to a single verse.
A factory to create a Verse from user input.
A VerseRange is one step between a Verse and a Passage - it is a Verse plus a verseCount.
Iterate over the Verses in the VerseRange
A factory that creates VerseRanges from user input.
Types of Accuracy for verse references.
Indicates what kind of change happened to a Passage.
Types of Passage Lists.
Indicates how this PassageTally is to order it's Verses.
Types of Passage optimizations.
Types of Passage Blurring Restrictions.
When something tries to use a key that we don't understand.
When something tries to use a verse that we don't understand.
The core responsibility of the passage package is to store and collate
information about the structure of the Bible - The most important classes are
Passage stores lists of verses, for example
"Gen 1:1-5, 10".
PassageTally is similar but
stores verses ordered by a tally against each verse. A
represents a Greek or Hebrew word as categorized by James Strong.
Passage is modeled after the JDK 2.0
interface - so all the usual
actions are available. (A
PassageCollection proxy class is
available in order to treat a
Passage exactly like a
In addition to this a
Passage will do:
Passage. This will be of most use with a multi-threaded search engine.
Passage interface uses
VerseRange in many of its methods. A
obvious - a single Bible verse e.g. "Exo 2:4", or
"Jude 4". A
VerseRange has a start Verse and
an end Verse e.g. "Exo 3:5-7", or
"Mat 25:1-Mar 2:4".
VerseRange have a superclass interface of
VerseBase, and this interface is collected and sorted by
Passage .So an example
"Exo 2:4, 3:5-7, Mat 25:1-Mar 2:4, Jude 4".
Passage interface is implemented by 3 concrete classes -
DistinctPassage is a simple sorted collection of
RangedPassage is a sorted collection of
BitwisePassage uses an array -
boolean to specify whether a verse is a member
Passage. Obviously each of these implementations has
different strengths, which the user should not need to be bothered with. So
PassageFactory class is responsible for creating
Passages of a suitable type.
PassageTally class is-a to
Passage however it's
job is to store a rank to a
Verse. This is for a best-match type
application - "find the verse that best matches these words". It is
the intent to marry this with a Thesarus interface, because a gripe with the
OLB is that I search for "God & loves & world" and expect to
find John 3:16, but the search fails because John 3:16 uses the word
"loved" and not "loves".
The final aim is a fuzzy matching scheme to I can search for "God loves us and gave Jesus to save us" and correctly be told John 3:16.
Strongs class represents a Hebrew or Greek word, or a
parsing number indicating the way the verse is aimed.
This package has a
SelfTest class that is designed to stress
every line of code in the rest of the package to make it bug-free. Otherwise
this package is largely complete. I still need to inspect
[Bitwise|Distinct|Ranged]Passage and PassageTally.