Reference constructor

Reference(
  1. String book, [
  2. int? schp,
  3. int? svn,
  4. int? echp,
  5. int? evn,
])

The universal constructor, determines what kind of reference this is based on which fields are left null.

Implementation

Reference(String book, [int? schp, int? svn, int? echp, int? evn])
    : startChapterNumber = schp ?? 1,
      startChapter = schp != null ? Chapter(book, schp) : Chapter(book, 1),
      startVerseNumber = svn ?? 1,
      startVerse = svn != null
          ? Verse(book, schp, svn)
          : schp != null
              ? Verse(book, schp, 1)
              : Verse(book, 1, 1),
      endChapterNumber = echp ?? schp ?? Librarian.getLastChapterNumber(book),
      endChapter = echp != null
          ? Chapter(book, echp)
          : schp != null
              ? Chapter(book, schp)
              : Librarian.getLastChapter(book),
      endVerseNumber = evn ?? svn ?? Librarian.getLastVerseNumber(book, echp ?? schp),
      endVerse = evn != null
          ? Verse(book, schp, evn)
          : svn != null
              ? Verse(book, schp, svn)
              : Librarian.getLastVerse(book, schp),
      reference = Librarian.createReferenceString(book, schp, svn, echp, evn),
      referenceType =
          Librarian.identifyReferenceType(book, schp, svn, echp, evn),
      isValid = Librarian.verifyReference(book, schp, svn, echp, evn),
      super(book);