AbstractBookList.java |
1 /** 2 * Distribution License: 3 * JSword is free software; you can redistribute it and/or modify it under 4 * the terms of the GNU Lesser General Public License, version 2.1 or later 5 * as published by the Free Software Foundation. This program is distributed 6 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 7 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 8 * See the GNU Lesser General Public License for more details. 9 * 10 * The License is available on the internet at: 11 * http://www.gnu.org/copyleft/lgpl.html 12 * or by writing to: 13 * Free Software Foundation, Inc. 14 * 59 Temple Place - Suite 330 15 * Boston, MA 02111-1307, USA 16 * 17 * © CrossWire Bible Society, 2005 - 2016 18 * 19 */ 20 package org.crosswire.jsword.book; 21 22 import java.util.Collections; 23 import java.util.List; 24 import java.util.concurrent.CopyOnWriteArrayList; 25 26 import org.crosswire.common.util.CollectionUtil; 27 28 /** 29 * A basic implementation of BookList. The methods in this abstract class are 30 * duplicates of those in Books, so bugs fixed in one should be fixed in the 31 * other too. 32 * 33 * @see gnu.lgpl.License The GNU Lesser General Public License for details. 34 * @author Joe Walker 35 */ 36 public abstract class AbstractBookList implements BookList { 37 /** 38 * Build a default BookList 39 */ 40 public AbstractBookList() { 41 listeners = new CopyOnWriteArrayList<BooksListener>(); 42 } 43 44 /* (non-Javadoc) 45 * @see org.crosswire.jsword.book.BookList#getBooks(org.crosswire.jsword.book.BookFilter) 46 */ 47 public List<Book> getBooks(BookFilter filter) { 48 List<Book> temp = CollectionUtil.createList(new BookFilterIterator(getBooks(), filter)); 49 return Collections.unmodifiableList(temp); 50 } 51 52 /* (non-Javadoc) 53 * @see org.crosswire.jsword.book.BookList#addBooksListener(org.crosswire.jsword.book.BooksListener) 54 */ 55 public void addBooksListener(BooksListener li) { 56 listeners.add(li); 57 } 58 59 /* (non-Javadoc) 60 * @see org.crosswire.jsword.book.BookList#removeBooksListener(org.crosswire.jsword.book.BooksListener) 61 */ 62 public void removeBooksListener(BooksListener li) { 63 listeners.remove(li); 64 } 65 66 /** 67 * Kick of an event sequence 68 * 69 * @param source 70 * The event source 71 * @param book 72 * The changed Book 73 * @param added 74 * Is it added? 75 */ 76 protected void fireBooksChanged(Object source, Book book, boolean added) { 77 BooksEvent ev = new BooksEvent(source, book, added); 78 for (BooksListener listener : listeners) { 79 if (added) { 80 listener.bookAdded(ev); 81 } else { 82 listener.bookRemoved(ev); 83 } 84 } 85 } 86 87 /** 88 * The list of listeners 89 */ 90 private List<BooksListener> listeners = new CopyOnWriteArrayList<BooksListener>(); 91 } 92