/** * Create a basic iterator that is a proxy for the RangedPassage * Passages iterator, with remove() overridden. * @param v11n * the versification to which this reference pertains * @param it */ protected VerseIterator(Versification v11n, Iterator<VerseRange> it) { Set<Key> temp = new TreeSet<Key>(); while (it.hasNext()) { VerseRange range = it.next(); int start = range.getStart().getOrdinal(); int end = range.getCardinality(); for (int i = 0; i < end; i++) { temp.add(v11n.decodeOrdinal(start + i)); } } real = temp.iterator(); }
/** * Ctor */ protected VerseIterator(VerseRange range) { v11n = range.getVersification(); nextVerse = range.getStart(); total = range.getCardinality(); count = 0; }
public String getName() { if (PassageUtil.isPersistentNaming() && originalName != null) { return originalName; } StringBuilder retcode = new StringBuilder(); Iterator<VerseRange> it = rangeIterator(RestrictionType.NONE); Verse current = null; while (it.hasNext()) { VerseRange range = it.next(); retcode.append(range.getName(current)); // FIXME: Potential bug. According to iterator contract hasNext and // next must be paired. if (it.hasNext()) { retcode.append(AbstractPassage.REF_PREF_DELIM); } current = range.getStart(); } return retcode.toString(); }
/** * Allow override of the key, particular useful if we're constructing in 2 stages like the offset mechanism * * @param key the new key */ private void setKey(final VerseRange key) { if (key.getCardinality() == 1) { this.qualifiedKey = key.getStart(); } else { this.qualifiedKey = key; } this.wholeKey = this.qualifiedKey.getWhole(); }
private void populateVerseNotesList() { mVerseNotesList.clear(); int startVerseNo = currentVerseRange.getStart().getVerse(); int endVerseNo = currentVerseRange.getEnd().getVerse(); if (mChapterNotesList!=null) { for (Note note : mChapterNotesList) { final int noteVerseNo = note.getVerseNo(); if (noteVerseNo >= startVerseNo && noteVerseNo <=endVerseNo) { mVerseNotesList.add(note); } } } }
public ConvertibleVerseRange(VerseRange verseRange) { this.originalVerseRange = verseRange; this.startVerse = new ConvertibleVerse(verseRange.getStart()); this.endVerse = new ConvertibleVerse(verseRange.getEnd()); }
/** * Is the given range within our range. For example if this = "Gen 1:1-31" * then: <tt>this.contains(Verse("Gen 1:3-10")) == true</tt> * <tt>this.contains(Verse("Gen 2:1-1")) == false</tt> * * @param that * The Verse to compare to * @return true if we contain it. */ public boolean contains(VerseRange that) { return v11n.distance(start, that.getStart()) >= 0 && v11n.distance(that.getEnd(), end) >= 0; }
public VerseRange next() { if (next == null) { next = real.next(); } if (next == null) { throw new NoSuchElementException(); } // So we know what is broadly next, however the range might need // splitting according to restrict if (restrict.isSameScope(next.getVersification(), next.getStart(), next.getEnd())) { return replyNext(); } return splitNext(); }
public void showTranslationForVerseRange(TranslationDto translationDto, VerseRange verseRange) { getCurrentPageManager().setCurrentDocumentAndKey(translationDto.getBook(), verseRange.getStart()); }
/** * Merge 2 VerseRanges together. The resulting range will encompass * Everything in-between the extremities of the 2 ranges. * * @param a * The first verse range to be merged * @param b * The second verse range to be merged */ public VerseRange(VerseRange a, VerseRange b) { v11n = a.v11n; shaper = new NumberShaper(); start = v11n.min(a.getStart(), b.getStart()); end = v11n.max(a.getEnd(), b.getEnd()); verseCount = calcVerseCount(); }
public VerseRange convert(VerseRange verseRange, Versification toVersification) { Verse startVerse = verseRange.getStart(); Verse endVerse = verseRange.getEnd(); Verse convertedStartVerse = convert(startVerse, toVersification); Verse convertedEndVerse = convert(endVerse, toVersification); return new VerseRange(toVersification, convertedStartVerse, convertedEndVerse); }
@Override public VerseRange blur(Versification v11n, VerseRange range, int blurDown, int blurUp) { Verse start = v11n.subtract(range.getStart(), blurDown); Verse end = v11n.add(range.getEnd(), blurUp); return new VerseRange(v11n, start, end); }
public void add(Key obj) { optimizeWrites(); VerseRange thatRange = toVerseRange(getVersification(), obj); store.add(thatRange); normalize(); // we do an extra check here because the cost of calculating the // params is non-zero an may be wasted if (suppressEvents == 0) { fireIntervalAdded(this, thatRange.getStart(), thatRange.getEnd()); } }
/** * Create a VerseRange that is the stuff in VerseRange a that is also * in VerseRange b. * * @param a * The verses that you might want * @param b * The verses that you definitely don't * @return A list of the Verses outstanding */ public static VerseRange intersection(VerseRange a, VerseRange b) { Versification v11n = a.getVersification(); Verse newStart = v11n.max(a.getStart(), b.getStart()); Verse newEnd = v11n.min(a.getEnd(), b.getEnd()); if (v11n.distance(newStart, newEnd) >= 0) { return new VerseRange(a.getVersification(), newStart, newEnd); } return null; }
@Test public void testGetNextVerseRangeWrapsToNextChapter() throws Exception { assertThat(bibleTraverser.getNextVerseRange(testBook, TestData.KJV_PS_14).getStart(), equalTo(new Verse(TestData.KJV, BibleBook.PS, 15, 1))); assertThat(bibleTraverser.getNextVerseRange(testBook, TestData.KJV_PS_14).getEnd(), equalTo(new Verse(TestData.KJV, BibleBook.PS, 16, 2))); }
@Test public void testGetPreviousVerseRangeWrapsToPreviousChapter() throws Exception { assertThat(bibleTraverser.getPreviousVerseRange(testBook, TestData.KJV_PS_14).getStart(), equalTo(new Verse(TestData.KJV, BibleBook.PS, 12, 8))); assertThat(bibleTraverser.getPreviousVerseRange(testBook, TestData.KJV_PS_14).getEnd(), equalTo(new Verse(TestData.KJV, BibleBook.PS, 13, 6))); }
public VerseRange getPreviousVerseRange(AbstractPassageBook document, VerseRange verseRange, boolean continueToPreviousChapter) { Versification v11n = verseRange.getVersification(); int verseCount = verseRange.getCardinality(); // shuffle backward Verse start = verseRange.getStart(); Verse end = verseRange.getEnd(); int i=0; while (i++<verseCount && (continueToPreviousChapter || !v11n.isStartOfChapter(start))) { start = getPrevVerse(document, start); end = getPrevVerse(document, end); } return new VerseRange(v11n, start, end); }
public VerseRange getNextVerseRange(AbstractPassageBook document, VerseRange verseRange, boolean continueToNextChapter) { Versification v11n = verseRange.getVersification(); int verseCount = verseRange.getCardinality(); // shuffle forward Verse start = verseRange.getStart(); Verse end = verseRange.getEnd(); int i=0; while (i++<verseCount && (continueToNextChapter || !v11n.isEndOfChapter(end))) { start = getNextVerse(document, start); end = getNextVerse(document, end); } return new VerseRange(v11n, start, end); }
@Override public VerseRange blur(Versification v11n, VerseRange range, int blurDown, int blurUp) { Verse start = range.getStart(); BibleBook startBook = start.getBook(); int startChapter = start.getChapter(); int startVerse = start.getVerse() - blurDown; Verse end = range.getEnd(); BibleBook endBook = end.getBook(); int endChapter = end.getChapter(); int endVerse = end.getVerse() + blurUp; startVerse = Math.max(startVerse, 0); endVerse = Math.min(endVerse, v11n.getLastVerse(endBook, endChapter)); Verse newStart = new Verse(v11n, startBook, startChapter, startVerse); Verse newEnd = new Verse(v11n, endBook, endChapter, endVerse); return new VerseRange(v11n, newStart, newEnd); }
@Test public void testVerseRange() { BookmarkDto newBookmarkDto = new BookmarkDto(); final VerseRange verseRange = new VerseRange(KJV_VERSIFICATION, new Verse(KJV_VERSIFICATION, BibleBook.PS, 17, 2), new Verse(KJV_VERSIFICATION, BibleBook.PS, 17, 5)); newBookmarkDto.setVerseRange(verseRange); BookmarkDto newDto = bookmarkControl.addOrUpdateBookmark(newBookmarkDto); assertThat(newDto.getVerseRange(), equalTo(verseRange)); assertThat(bookmarkControl.isBookmarkForKey(verseRange.getStart()), equalTo(true)); }