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.index;
21  
22  import java.net.URI;
23  
24  import org.crosswire.jsword.book.Book;
25  import org.crosswire.jsword.book.BookException;
26  
27  /**
28   * Manages the life-cycle of an Index.
29   * 
30   * @see gnu.lgpl.License The GNU Lesser General Public License for details.
31   * @author Joe Walker
32   */
33  public interface IndexManager {
34      /**
35       * Detects if index data has been stored and is valid for this Bible.
36       * 
37       * @param book the book
38       * @return true if the book has a usable index
39       */
40      boolean isIndexed(Book book);
41  
42      /**
43       * Create a new Searcher.
44       * 
45       * @param book the book
46       * @return an index that can be searched.
47       * @throws BookException 
48       */
49      Index getIndex(Book book) throws BookException;
50  
51      /**
52       * Detect or checking whether this book needs reindexing.
53       * It is safe methods, you can always call it whether the book
54       * is already indexed or not.
55       * This check for <br>
56       * <pre>
57       * - isIndexed(Book book)
58       * - Is index valid, eg index version changed incompatibly (due to internal structure change or search engine update)
59       * -
60       * </pre>
61       * 
62       * @param book the Book
63       * @return true if no index present or current index is of incompatible/older version
64       */
65      boolean needsReindexing(Book book);
66  
67      /**
68       * Read from the given source version to generate ourselves. On completion
69       * of this method the index should be usable.
70       * 
71       * @param book The book that should be indexed
72       */
73      void scheduleIndexCreation(Book book);
74  
75      /**
76       * We have downloaded a search index to a zip file. It should be installed
77       * from here.
78       * 
79       * @param book
80       *            The book that we downloaded an index for
81       * @param tempDest
82       *            The URI of a zip file to install
83       * @throws BookException 
84       */
85      void installDownloadedIndex(Book book, URI tempDest) throws BookException;
86  
87      /**
88       * Tidy up after yourself and remove all the files that make up any indexes
89       * you created.
90       * 
91       * @param book the book who's index should be deleted.
92       * @throws BookException 
93       */
94      void deleteIndex(Book book) throws BookException;
95  
96      /**
97       * Close all indexes associated with this Index Manager
98       */
99      void closeAllIndexes();
100 
101     /**
102      * Obtain the current IndexPolicy. Defaults to IndexPolicyAdapter.
103      * 
104      * @return the current IndexPolicy
105      */
106     IndexPolicy getIndexPolicy();
107 
108     /**
109      * Set the desired IndexPolicy. Setting to null will cause the
110      * IndexPolicyAdapter to be used.
111      * 
112      * @param policy the IndexPolicy to use when creating indexes.
113      */
114     void setIndexPolicy(IndexPolicy policy);
115 }
116