1
20 package org.crosswire.jsword.book;
21
22 import java.util.Map;
23 import java.util.TreeMap;
24
25 import org.crosswire.common.config.ChoiceFactory;
26
27
33 public final class Defaults {
34
37 private Defaults() {
38 }
39
40
46 public static boolean isCurrentBible() {
47 return trackBible;
48 }
49
50
56 public static void setCurrentBible(boolean current) {
57 trackBible = current;
58 }
59
60
66 public static void setCurrentBook(Book book) {
67 BookCategory type = book.getBookCategory();
68 if (type.equals(BookCategory.BIBLE) && isCurrentBible()) {
69 currentBible = book;
70 }
71 }
72
73
78 public static Book getCurrentBible() {
79 if (currentBible == null) {
80 return bibleDeft.getDefault();
81 }
82 return currentBible;
83 }
84
85
90 public static void setBible(Book book) {
91 bibleDeft.setDefault(book);
92 }
93
94
97 protected static void unsetBible() {
98 bibleDeft.unsetDefault();
99 }
100
101
104 public static Book getBible() {
105 return bibleDeft.getDefault();
106 }
107
108
111 public static String getBibleByName() {
112 return bibleDeft.getDefaultName();
113 }
114
115
120 public static void setBibleByName(String name) {
121 bibleDeft.setDefaultByName(name);
122 }
123
124
129 public static void setCommentary(Book book) {
130 commentaryDeft.setDefault(book);
131 }
132
133
136 protected static void unsetCommentary() {
137 commentaryDeft.unsetDefault();
138 }
139
140
143 public static Book getCommentary() {
144 return commentaryDeft.getDefault();
145 }
146
147
150 public static String getCommentaryByName() {
151 return commentaryDeft.getDefaultName();
152 }
153
154
159 public static void setCommentaryByName(String name) {
160 commentaryDeft.setDefaultByName(name);
161 }
162
163
168 public static void setDictionary(Book book) {
169 dictionaryDeft.setDefault(book);
170 }
171
172
175 protected static void unsetDictionary() {
176 dictionaryDeft.unsetDefault();
177 }
178
179
182 public static Book getDictionary() {
183 return dictionaryDeft.getDefault();
184 }
185
186
189 public static String getDictionaryByName() {
190 return dictionaryDeft.getDefaultName();
191 }
192
193
198 public static void setDictionaryByName(String name) {
199 dictionaryDeft.setDefaultByName(name);
200 }
201
202
207 public static void setDailyDevotional(Book book) {
208 dictionaryDeft.setDefault(book);
209 }
210
211
214 protected static void unsetDailyDevotional() {
215 dailyDevotionalDeft.unsetDefault();
216 }
217
218
221 public static Book getDailyDevotional() {
222 return dailyDevotionalDeft.getDefault();
223 }
224
225
228 public static String getDailyDevotionalByName() {
229 return dailyDevotionalDeft.getDefaultName();
230 }
231
232
237 public static void setDailyDevotionalByName(String name) {
238 dailyDevotionalDeft.setDefaultByName(name);
239 }
240
241
246 public static void setGreekDefinitions(Book book) {
247 greekDefinitionsDeft.setDefault(book);
248 }
249
250
253 protected static void unsetGreekDefinitions() {
254 greekDefinitionsDeft.unsetDefault();
255 }
256
257
260 public static Book getGreekDefinitions() {
261 return greekDefinitionsDeft.getDefault();
262 }
263
264
267 public static String getGreekDefinitionsByName() {
268 return greekDefinitionsDeft.getDefaultName();
269 }
270
271
276 public static void setGreekDefinitionsByName(String name) {
277 greekDefinitionsDeft.setDefaultByName(name);
278 }
279
280
285 public static void setHebrewDefinitions(Book book) {
286 hebrewDefinitionsDeft.setDefault(book);
287 }
288
289
292 protected static void unsetHebrewDefinitions() {
293 hebrewDefinitionsDeft.unsetDefault();
294 }
295
296
299 public static Book getHebrewDefinitions() {
300 return hebrewDefinitionsDeft.getDefault();
301 }
302
303
306 public static String getHebrewDefinitionsByName() {
307 return hebrewDefinitionsDeft.getDefaultName();
308 }
309
310
315 public static void setHebrewDefinitionsByName(String name) {
316 hebrewDefinitionsDeft.setDefaultByName(name);
317 }
318
319
324 public static void setGreekParse(Book book) {
325 greekParseDeft.setDefault(book);
326 }
327
328
331 protected static void unsetGreekParse() {
332 greekParseDeft.unsetDefault();
333 }
334
335
338 public static Book getGreekParse() {
339 return greekParseDeft.getDefault();
340 }
341
342
347 public static String getGreekParseByName() {
348 return greekParseDeft.getDefaultName();
349 }
350
351
354 public static void setGreekParseByName(String name) {
355 greekParseDeft.setDefaultByName(name);
356 }
357
358
363 public static void setHebrewParse(Book book) {
364 hebrewParseDeft.setDefault(book);
365 }
366
367
370 protected static void unsetHebrewParse() {
371 hebrewParseDeft.unsetDefault();
372 }
373
374
377 public static Book getHebrewParse() {
378 return hebrewParseDeft.getDefault();
379 }
380
381
384 public static String getHebrewParseByName() {
385 return hebrewParseDeft.getDefaultName();
386 }
387
388
393 public static void setHebrewParseByName(String name) {
394 hebrewParseDeft.setDefaultByName(name);
395 }
396
397
400 protected static DefaultBook getDefaultBible() {
401 return bibleDeft;
402 }
403
404
407 protected static DefaultBook getDefaultCommentary() {
408 return commentaryDeft;
409 }
410
411
414 protected static DefaultBook getDefaultDictionary() {
415 return dictionaryDeft;
416 }
417
418
421 protected static DefaultBook getDefaultDailyDevotional() {
422 return dailyDevotionalDeft;
423 }
424
425
428 protected static DefaultBook getDefaultGreekDefinitions() {
429 return greekDefinitionsDeft;
430 }
431
432
435 protected static DefaultBook getDefaultHebrewDefinitions() {
436 return hebrewDefinitionsDeft;
437 }
438
439
442 protected static DefaultBook getDefaultGreekParse() {
443 return greekParseDeft;
444 }
445
446
449 protected static DefaultBook getDefaultHebrewParse() {
450 return hebrewParseDeft;
451 }
452
453
456 public static void refreshBooks() {
457 Map<Book, String> bnames = getBookMap(BookFilters.getOnlyBibles());
459 ChoiceFactory.getDataMap().put(BIBLE_KEY, bnames);
460
461 Map<Book, String> cnames = getBookMap(BookFilters.getCommentaries());
463 ChoiceFactory.getDataMap().put(COMMENTARY_KEY, cnames);
464
465 Map<Book, String> dnames = getBookMap(BookFilters.getDictionaries());
467 ChoiceFactory.getDataMap().put(DICTIONARY_KEY, dnames);
468
469 Map<Book, String> rnames = getBookMap(BookFilters.getDailyDevotionals());
471 ChoiceFactory.getDataMap().put(DAILY_DEVOTIONALS_KEY, rnames);
472
473 Map<Book, String> greekDef = getBookMap(BookFilters.getGreekDefinitions());
475 ChoiceFactory.getDataMap().put(GREEKDEF_KEY, greekDef);
476
477 Map<Book, String> hebrewDef = getBookMap(BookFilters.getHebrewDefinitions());
479 ChoiceFactory.getDataMap().put(HEBREWDEF_KEY, hebrewDef);
480
481 Map<Book, String> greekParse = getBookMap(BookFilters.getGreekParse());
483 ChoiceFactory.getDataMap().put(GREEKPARSE_KEY, greekParse);
484
485 Map<Book, String> hebrewParse = getBookMap(BookFilters.getHebrewParse());
487 ChoiceFactory.getDataMap().put(HEBREWPARSE_KEY, hebrewParse);
488 }
489
490
494 protected static void checkAllPreferable() {
495 for (Book book : Books.installed().getBooks()) {
496 checkPreferable(book);
497 }
498 }
499
500
506 protected static void checkPreferable(Book book) {
507 assert book != null;
508
509 bibleDeft.setDefaultConditionally(book);
510 commentaryDeft.setDefaultConditionally(book);
511 dictionaryDeft.setDefaultConditionally(book);
512 dailyDevotionalDeft.setDefaultConditionally(book);
513 greekDefinitionsDeft.setDefaultConditionally(book);
514 greekParseDeft.setDefaultConditionally(book);
515 hebrewDefinitionsDeft.setDefaultConditionally(book);
516 hebrewParseDeft.setDefaultConditionally(book);
517 }
518
519
525 private static Map<Book, String> getBookMap(BookFilter filter) {
526 Map<Book, String> books = new TreeMap<Book, String>(BookComparators.getDefault());
527
528 for (Book book : Books.installed().getBooks(filter)) {
529 books.put(book, book.getName());
530 }
531
532 return books;
533 }
534
535
538 static class DefaultsBookListener implements BooksListener {
539
542 public void bookAdded(BooksEvent ev) {
543 Book book = ev.getBook();
544 checkPreferable(book);
545 refreshBooks();
546 }
547
548
551 public void bookRemoved(BooksEvent ev) {
552 Book book = ev.getBook();
553
554 getDefaultBible().unsetDefaultConditionally(book);
555 getDefaultCommentary().unsetDefaultConditionally(book);
556 getDefaultDailyDevotional().unsetDefaultConditionally(book);
557 getDefaultDictionary().unsetDefaultConditionally(book);
558 getDefaultGreekDefinitions().unsetDefaultConditionally(book);
559 getDefaultGreekParse().unsetDefaultConditionally(book);
560 getDefaultHebrewDefinitions().unsetDefaultConditionally(book);
561 getDefaultHebrewParse().unsetDefaultConditionally(book);
562 }
563 }
564
565 private static final String BIBLE_KEY = "bible-names";
566 private static final String COMMENTARY_KEY = "commentary-names";
567 private static final String DICTIONARY_KEY = "dictionary-names";
568 private static final String DAILY_DEVOTIONALS_KEY = "daily-devotional-names";
569 private static final String GREEKDEF_KEY = "greekdef-names";
570 private static final String HEBREWDEF_KEY = "hebrewdef-names";
571 private static final String GREEKPARSE_KEY = "greekparse-names";
572 private static final String HEBREWPARSE_KEY = "hebrewparse-names";
573
574
577 private static boolean trackBible = true;
578
579
582 private static Book currentBible;
583
584
587 private static DefaultBook bibleDeft = new DefaultBook(Books.installed(), BookFilters.getOnlyBibles());
588
589
592 private static DefaultBook commentaryDeft = new DefaultBook(Books.installed(), BookFilters.getCommentaries());
593
594
597 private static DefaultBook dailyDevotionalDeft = new DefaultBook(Books.installed(), BookFilters.getDailyDevotionals());
598
599
602 private static DefaultBook dictionaryDeft = new DefaultBook(Books.installed(), BookFilters.getDictionaries());
603
604
607 private static DefaultBook greekParseDeft = new DefaultBook(Books.installed(), BookFilters.getGreekParse());
608
609
612 private static DefaultBook hebrewParseDeft = new DefaultBook(Books.installed(), BookFilters.getHebrewParse());
613
614
617 private static DefaultBook greekDefinitionsDeft = new DefaultBook(Books.installed(), BookFilters.getGreekDefinitions());
618
619
622 private static DefaultBook hebrewDefinitionsDeft = new DefaultBook(Books.installed(), BookFilters.getHebrewDefinitions());
623
624
627 static {
628 Books.installed().addBooksListener(new DefaultsBookListener());
629 checkAllPreferable();
630 }
631
632 }
633