1
20 package org.crosswire.jsword.book.readings;
21
22 import java.io.IOException;
23 import java.net.URL;
24 import java.util.ArrayList;
25 import java.util.List;
26
27 import org.crosswire.common.util.NetUtil;
28 import org.crosswire.common.util.ResourceUtil;
29 import org.crosswire.common.util.URIFilter;
30 import org.crosswire.jsword.book.Book;
31 import org.crosswire.jsword.book.BookCategory;
32 import org.crosswire.jsword.book.BookDriver;
33 import org.crosswire.jsword.book.basic.AbstractBookDriver;
34
35
41 public class ReadingsBookDriver extends AbstractBookDriver {
42
45 public ReadingsBookDriver() {
46 List<Book> bookList = new ArrayList<Book>();
47 String[] installedBooks = getInstalledReadingsSets();
48 for (int i = 0; i < installedBooks.length; i++) {
49 bookList.add(new ReadingsBook(this, installedBooks[i], BookCategory.DAILY_DEVOTIONS));
50 }
51
52 books = bookList.toArray(new Book[bookList.size()]);
53 }
54
55
60 public Book[] getBooks() {
61 return books == null ? null : (Book[]) books.clone();
62 }
63
64
69 public String getDriverName() {
70 return "Readings";
71 }
72
73
78 public static BookDriver instance() {
79 return INSTANCE;
80 }
81
82
87 public String[] getInstalledReadingsSets() {
88 try {
89 URL index = ResourceUtil.getResource(ReadingsBookDriver.class, "readings.txt");
90 return NetUtil.listByIndexFile(NetUtil.toURI(index), new ReadingsFilter());
91 } catch (IOException ex) {
92 return new String[0];
93 }
94 }
95
96
99 static final class ReadingsFilter implements URIFilter {
100 public boolean accept(String name) {
101 return true;
102 }
103 }
104
105
108 private Book[] books;
109
110
113 public static final String DIR_READINGS = "readings";
114
115
118 private static final BookDriver INSTANCE = new ReadingsBookDriver();
119 }
120