@@ -6,16 +6,18 @@ abstract class AbstractService implements BibleService {
66
77 def bibleData, bookList, chapters, verses
88
9- AbstractService (jsonBibleTextFilename ){
9+ AbstractService (jsonBibleTextFilename ) {
1010 init(jsonBibleTextFilename)
1111 }
12- def init (jsonBibleTextFilename ){
12+
13+ def init (jsonBibleTextFilename ) {
1314 bibleData = new BibleData (jsonBibleTextFilename). data()
1415 bookList = bibleData. bible. books
1516 chapters = bibleData. bible. chapters
1617 verses = bibleData. bible. verses
1718 }
1819
20+ @Override
1921 def chapterVerseCount (bkId , chapter ) {
2022 def chpt = chapters. find { chptInfo ->
2123 chptInfo. book == bkId &&
@@ -24,56 +26,68 @@ abstract class AbstractService implements BibleService {
2426 chpt ? chpt. verses : 0
2527 }
2628
27- @Override
28- VerseRange verseSpecToVerses (String verseSpec ) {
29-
30- // / break the string into parts starting with Bookname
31- // / Gen 5:2-6, 8-12
32-
33- def parts = verseSpec. split(' ' ,2 )
34- def bkName = parts[0 ]
3529
36- // / get the book
30+ @Override
31+ def parseVerseSpec (String verseSpec ) {
32+
33+ def parts = verseSpec. split(' :' )
34+ def bkChpt = parts[0 ]. split(' ' ) as List ;
35+ def chpt = (bkChpt. pop() as int );
36+ def bkName = bkChpt. join(' ' ). trim();
37+ def verses
38+ // if the
3739 def book = bookNameToBook(bkName)
38-
3940 if (! book)
40- throw new IllegalArgumentException (" Bad book name: $bkName " )
41-
42- def theRest = parts[1 ]
43- def chptAndVerses = theRest. split(' :' )
44- // get the chapter
45- def chapter = Integer . parseInt(chptAndVerses[0 ])
41+ throw new IllegalArgumentException (" Bad book name: [$bkName ]" )
42+ if (parts. length == 1 ) {
43+ verses = " 1-${ chapterVerseCount(book.id, chpt)} "
44+ } else {
45+ verses = parts[1 ]
46+ }
47+ return [
48+ book : book,
49+ chapter : chpt,
50+ verses : verses
51+ ]
52+ }
4653
47- // / get the verses
48- def sets = chptAndVerses[1 ]. split(' ,' )
54+ @Override
55+ VerseRange verseSpecToVerses (String verseSpec ) {
56+ // / break the string into parts starting with Bookname
57+ // / Gen 5:2-6, 8-12
58+ def parsedVerseSpec = parseVerseSpec(verseSpec);
59+ def book = parsedVerseSpec. book
60+ def bkName = book. title
61+ def chapter = parsedVerseSpec. chapter
62+ def sets = parsedVerseSpec. verses. split(' ,' )
4963 def verseList = []
50-
5164 sets. each { vlist ->
5265 def start, end
53- if (vlist. contains(' -' )){
66+ if (vlist. contains(' -' )) {
5467 def l = vlist. split(' -' )
5568 start = l[0 ] as int
5669 end = l[1 ] as int
5770
58- }else {
71+ } else {
5972 end = start = (vlist as int )
6073 }
6174 (start.. end). each { v ->
6275 verseList << v
6376 }
6477 }
6578
66- List<Verse > verses= []
79+ List<Verse > verses = []
6780 verseList. each { v ->
68- String vid = String . format(" %02d%03d%03d" , book. id,chapter,v)
81+ String vid = String . format(" %02d%03d%03d" , book. id, chapter, v)
6982 def verse = getVerse(vid)
7083 if (verse)
7184 verses << verse
7285 }
73- new VerseRange (verseSpec , verses)
86+ new VerseRange (" $b kName $c hapter : ${ parsedVerseSpec.verses } " , verses)
7487 }
7588
76- def bookNameToBook (bkName ){
89+ @Override
90+ def bookNameToBook (bkName ) {
7791 def ret
7892 // / compare the upper
7993 bkName = bkName. toUpperCase()
@@ -86,7 +100,7 @@ abstract class AbstractService implements BibleService {
86100 def list = bookList. findAll { bk ->
87101 bk. title. toUpperCase(). startsWith(bkName)
88102 }
89- if (list. size() == 1 )
103+ if (list. size() == 1 )
90104 ret = list[0 ]
91105 }
92106 ret
@@ -104,14 +118,22 @@ abstract class AbstractService implements BibleService {
104118 }
105119 }
106120
121+ @Override
122+ VerseRange getChapter (int book , int chapter ) {
123+ def bk = getBook(book)
124+ def lastVerse = chapterVerseCount(book, chapter)
125+ def verseSpec = " ${ bk.title} $chapter :1-$lastVerse "
126+ verseSpecToVerses(verseSpec)
127+ }
128+
107129 @Override
108130 List<Book > getBooks () {
109131 bookList
110132 }
111133
112134 @Override
113135 Book getBook (int bookId ) {
114- bookList[bookId- 1 ]
136+ bookList[bookId - 1 ]
115137 }
116138
117139 private def verseToSearchResult = { verse ->
0 commit comments