package Ġcom . ex sil ic ium . script ure . shared . model Ċ Ċ import Ġcom . ex sil ic ium . script ure . shared . extensions . compare Chapter Ranges Ċ import Ġcom . ex sil ic ium . script ure . shared . extensions . compare Ver se Ranges Ċ import Ġcom . ex sil ic ium . script ure . shared . extensions . create Joined String Ċ import Ġcom . ex sil ic ium . script ure . shared . extensions . join String Ċ import Ġjava . util . Sorted Set Ċ Ċ /** Ċ Ġ* ĠA Ġlocation Ġin Ġa Ġ[ Book ]. Ċ Ġ* Ċ Ġ* ĠA Ġ[ Location ] Ġmakes Ġno Ġguarantee Ġthat Ġit Ġis Ġvalid Ġfor Ġany Ġ[ Book ]. Ċ Ġ*/ Ċ sealed Ġclass ĠLocation Ġ: ĠComparable < Location > Ġ{ ĊĠĠĠ Ġinternal Ġabstract Ġfun ĠisValid ( book : ĠBook ): ĠBoolean ĊĊĠĠĠ Ġabstract Ġoverride Ġfun ĠtoString (): ĠString Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġsorted Ġset Ġof Ġinclusive Ġranges Ġof Ġchapter s . Ċ Ġ* Ċ Ġ* ĠE . g . Ġ 1 - 2 , Ġ 3 - 5 , Ġ 7 Ċ Ġ*/ Ċ data Ġclass ĠChapter Ranges ( ĊĠĠĠĠĠĠĠ Ġval Ġchapter Ranges : ĠSorted Set < Closed Range < Int >> Ċ ) Ġ: ĠLocation () Ġ{ ĊĠĠĠ Ġconstructor ( var arg Ġranges : ĠClosed Range < Int >) Ġ: Ġthis ( ranges . to Sorted Set ( Chapter Range Comparator ())) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( chapter Ranges . isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġrequire ( chapter Ranges . first (). start Ġ>= Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisValid ( book : ĠBook ) Ġ= Ġchapter Ranges . all Ġ{ Ġbook . isValid Chapter Range ( it ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠLocation ) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠVer se Ranges Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Comparison Ġ= Ġchapter Ranges . first (). start . compareTo ( other . verse Ranges . first (). start . chapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( start Comparison ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġif Ġ( other . verse Ranges . first (). start . verse Number Ġ== Ġ 1 ) Ġ 0 Ġelse Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġstart Comparison ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠChapter Ranges Ġ-> Ġcompare Chapter Ranges ( other ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġchapter Ranges . create Joined String () Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġsorted Ġset Ġof Ġinclusive Ġranges Ġof Ġver ses . Ċ Ġ* Ċ Ġ* ĠE . g . Ġ 1 : 1 - 2 : 3 b , Ġ 2 : 5 Ċ Ġ*/ Ċ data Ġclass ĠVer se Ranges ( ĊĠĠĠĠĠĠĠ Ġval Ġver se Ranges : ĠSorted Set < Closed Range < Ver se >> Ċ ) Ġ: ĠLocation () Ġ{ ĊĠĠĠ Ġconstructor ( var arg Ġranges : ĠClosed Range < Ver se >) Ġ: Ġthis ( ranges . to Sorted Set ( Ver se Range Comparator ())) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( verse Ranges . isNotEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisValid ( book : ĠBook ) Ġ= Ġver se Ranges . all Ġ{ Ġbook . isValid ( it . end Inclusive ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠLocation ) Ġ= Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠChapter Ranges Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Comparison Ġ= Ġver se Ranges . first (). start . chapter . compareTo ( other . chapter Ranges . first (). start ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( start Comparison ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġif Ġ( verse Ranges . first (). start . verse Number Ġ== Ġ 1 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġstart Comparison ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠVer se Ranges Ġ-> Ġcompare Ver se Ranges ( other ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġver se Ranges . join String () Ċ } Ċ