[jsword-devel] Patch for book stuff

DM Smith jsword-devel@crosswire.org
Wed, 31 Mar 2004 13:31:06 -0500


This is a multi-part message in MIME format.

------=_NextPart_000_a1e_59f7_2c32
Content-Type: text/plain; format=flowed

I have made a few more changes.
I added isSupported to Backend and implemented it in each derived class. 
This returns true if the backend is implemented.

I added isSupported(SwordBookMetaData sbmd) to ModuleType to have it return 
whether it or its backend is supported.
I modified SwordBookMetaData.isSupported to:
    see if it has a name
    see if it has a supported ModuleType (it used to just check to see the 
ModuleType had a BookType)
    see if it is locked
    to output all the reasons the book is not supported. (I moved 
diagnostics here from the ctor and from SwordInstaller)

I added more constants for HISTORY to ConfigEntry so that I could add the 
diagnostic on unknown ConfigEntries to SBMD.

I changed the parsing in SBMD to be tolerant of the errors I mentioned in an 
earlier e-mail.

I changed the writing of the SBMD to file to be a copy of the original.

I modified SwordInstaller
    to not install a book if it is already installed (This fixes a bug)
    by moving the check for locked into SBMD.isSupported

I changed APIexamples by adding a main to it and changing the book to KJV (I 
could not find AV).

I also made numerous changes to Books. Basically, Books had two different 
contracts/patterns. One of a class factory or utility class w/ the static 
methods and the other of a singlton. It should use one or the other. So I 
did the singleton.
First, I made all the static methods except installed() to be member 
methods.
Likewise for all the static fields, except installed and log.
This resulted in trivial changes to files which called the static methods to 
use the installed() method.
I moved the static initialization of the drivers into member methods and 
called them from the constructor.
As is my habit, I constructed fields in the constructor.
I finished the synchronization of the class since some of the accessors 
could be used at the same time as the modifiers.

I added getFullNameArray to Books because it seemed to belong ther and not 
in OptionsAction

I changed the method getBookMetaData(String name) to check getInitials as 
well. This is what was expected by APIExamples.

Finally, I merged Joe's latest changes to Books.

The zip file contains the patch and Books.java in case the patch does not 
work.

_________________________________________________________________
Find a broadband plan that fits. Great local deals on high-speed Internet 
access. 
https://broadband.msn.com/?pgmarket=en-us/go/onm00200360ave/direct/01/

------=_NextPart_000_a1e_59f7_2c32
Content-Type: application/x-zip-compressed; name="patchbooks.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="patchbooks.zip"

UEsDBBQAAAAIAApofzA88eCltycAAOq5AAAOAAAAcGF0Y2hib29rcy50eHTt
Pf1z2zayP6cz/R9Q381FjmVZkuXvum0+nNZt4nhsp702l8lQEmyxlkgdSdn1
ZfK/v93FBwEQJCXF7uu9eZw2oklgsVgsFovF7vI4GvI/9tnvwU2w8Xt6GyfD
jTi52hgkcZrehglXD/txfL3xDP5JW1j2yy8OP//68ouEZ0nIb8LoiiXwk4Zx
xDqt7taXXwzDy0u2PmPrCf7NzJbX19cXxvdRd4+9DhLWbbd7rNvZ7+3t93bZ
ehuuR6LBtbW1xaFudnKond399ub+poT65RfffcfWO+1mp83W8KfDvvvuyy9Y
OJnGScYAektDbw3iySSOWsEgC2+CjLeeips4OaipMU3iq4SnaevHuL9I2ddB
FFxxBL9WVWWWhePW83g85oBQHL2FP+eqcnTDo+xVmGY84gn+1uFGtV7FVwKn
+qJnHAvMXTiNZ8mAS/TXvRXEALdwgFv9IA0Hraf9NEtgSHC4K/sgq1Jbp0n8
OxALy8J/G0+eCD7Y3Gt29thar93s7go+YE/Y1xuXcZR98/VGNsR/Evwn6I/5
N+L1dynn7Cqata6mQJtwwKMBl2+CWTaKE/ZjzNkvwfiaJ+zd73AfZIwDQhEf
sWGcMaDBexgto8KL1+x8EmYj9m44SfFma2sLa43ibBKEY6MWNXPDE5qRfz8e
7hszsHlDc5S4fqO9uQFTS88oROPojyn7O4HYAGpPZ/1xOGCDcZCmAgjjfwBj
DFPmUhiQ9ZQGmo/5BBhKPBAF2UdsAC4i8TrdPmGnIESgIDuO0iyI0jBArkUS
iNfPEw6ziwUsBYEz5hl0LaSSA87iS5aNuGi4lVe5GIWAQcqmCc1MlsWMR+ks
gbsREC6OxnfwD9QLItaHH2ph6AIIxmnMJsE1T/NG2GUYBeOvZDeIVnSjWqLO
N1bl048KIlx9Isshi/gte5okwR2SpLF6YBQZAhAYvOpCYzlBVbHCrBXFjRph
FGZhMA7/wxvZCLo65EMsQu8+CZbHi8ZE1HjCng4GIHSA+S7hf+x9kfg5tb6D
BWGWREA1fzkJVNNKcAu8zeBHsgsWBok1NGmHc3C709xhazv4r5iBhClrRHG0
/iOw9TAerOZo0+wrFxGKE/92xYl9X/MseBFkQT5igvsNLLE48xVfM7tyFw1G
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
amF2YVBLBQYAAAAAAgACAHQAAAAONgAAAAA=


------=_NextPart_000_a1e_59f7_2c32--