//============================================================================== // RepositoryReader.java //============================================================================== package tribble.repository; import java.io.Closeable; import java.io.IOException; import java.lang.Exception; import java.lang.String; /******************************************************************************* * Generic document repository storage reader. * *
* This interface contains the basic methods for implementing a * document repository reader application. Such an application is * responsible for managing a document storage system (or repository) that * allows clients to retrieve documents from it. How the repository * system is implemented and what exactly constitutes a document is determined by * each particular subclass that implements this interface. * *
* A document consists of content data (such as an image, text, or other * kind of user data) and zero or more properties. Typically, the * properties comprise the keys used to store the document in the repository * system. * *
* First, note that the documents that are retrieved from this repository system * are of a subclass which extends the {@link Document} class: *
* class MyDocument
* extends {@link Document}
* { ... }
*
* * To retrieve an existing document within a repository system, first a * repository reader object is created. The type of this object is a subclass * which extends the {@link RepositoryReader} class: *
* class MyRepositoryReader
* extends RepositoryReader<MyDocument>
* { ... }
*
* * Finally, the documents that are retrieved from this repository system are * retrieved from a subclass which extends the {@link Folder} class: *
* class MyDocFolder
* extends {@link Folder}<MyDocument>
* { ... }
*
* * A repository reader is created and initialized: *
* MyRepositoryReader repos;
* Hashtable props;
*
* repos = new MyRepositoryReader(...);
* props = ...;
* repos.{@link #initialize initialize}(props);
*
* * Next, a connection to the repository system must be established and attached * to the repository reader: *
* try
* {
* repos.{@link #open open}(...);
* }
* catch (IOException ex)
* { ... }
*
* * The next step in the process of retrieving documents from the repository is to * locate and open the folder containing the documents we are interested in: *
* MyDocFolder folder;
* try
* {
* String folderID;
*
* folderID = ...;
* folder = repos.{@link #getFolder getFolder}(folderID);
* }
* catch (IOException ex)
* { ... }
*
* * From this point, the documents are retrieved from the document folder. * If the document ID is known, it can be used to directly retrieve a specific * document from the repository: *
* try
* {
* String id;
* MyDocument doc;
*
* id = ...;
* doc = folder.{@link Folder#getDocument getDocument}(id);
* ...process the document...
* doc.{@link Document#close close}();
* }
* catch (IOException ex)
* { ... }
*
* * Alternatively, a set of zero or more documents can be retrieved, based on some * kind of query criteria: *
* try
* {
* MyQueryType query;
* DocumentIterator<MyDocument> docs;
*
* query = ...;
* docs = folder.{@link Folder#findDocuments findDocuments}(query);
* }
* catch (IOException ex)
* { ... }
*
* * If the query is successful, the individual documents matching the search * criteria can be retrieved: *
* if (docs != null)
* {
* while (docs.{@link DocumentIterator#hasNext hasNext}())
* {
* MyDocument doc;
*
* doc = docs.{@link DocumentIterator#next next}();
* ...process the document...
* doc.{@link Document#close close}();
* }
* docs.{@link DocumentIterator#close close}();
* }
*
* * The {@link Document#getProperty getProperty()} method can be called * to retrieve the values for specific properties associated with the document. * The {@link Document#getProperties getProperties()} method can be called * to retrieve an array of all the properties associated with the document. * *
* Once the repository reader is no longer needed, it must be closed, breaking * the connection and detaching it from the repository system: *
* folder.{@link Folder#close close}();
* repos.{@link #close close}();
*
* * Exceptions (IOException) are thrown if any errors occur during * processing. * *
* Note: This requires Java 1.5 or later. * * *