[jsword-devel] [JIRA] Created: (JS-216) Error in BookInstaller.deleteBook and APIExamples.installBook

Martin Denham (JIRA) jira at crosswire.org
Tue Mar 27 11:33:47 MST 2012


Error in BookInstaller.deleteBook and APIExamples.installBook
-------------------------------------------------------------

                 Key: JS-216
                 URL: http://www.crosswire.org/bugs/browse/JS-216
             Project: JSword
          Issue Type: Bug
            Reporter: Martin Denham
            Assignee: DM Smith
            Priority: Minor


I used the deleteBook code from BookInstaller in And Bible but there is an error in it.

Here is the example code:

    public void deleteBook(Book book) throws BookException {
        // Make the book unavailable.
        // This is normally done via listeners.
        Books.installed().removeBook(book);

        // Actually do the delete
        // This should be a call on installer.
        book.getDriver().delete(book);
    }

The problem is that 
   book.getDriver().delete(book) 
also calls 
   Books.installed().removeBook(dead)
meaning it is called twice for the same book - See SwordBookDriver.delete(Book dead)

So the problem is that Books.removeBook() is called twice.

Now, Books.removeBook contains:
        boolean removed = books.remove(book);
        if (removed) {
            fireBooksChanged(instance, book, false);
        } else {
            throw new BookException(JSOtherMsg.lookupText("Could not remove unregistered Book: {0}", book.getName()));
        }

so the second time it throws a BookException because the book has already been removed.

The simple fix is not to call Books.installed().removeBook(book) at the very start of the example code at the top, and this is what I have done in And Bible code.  However, there seems to be a deliberate purpose in the call so that is probably not the correct solution.



--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jsword-devel mailing list