Is there a reason for writers to be created via the constructor and the readers to be created via the static scope?

Would it not be much more beautiful and object oriented to handle this using factory methods in Directory? Or perhaps even one layer further down? The patch below will allow for alternative stores (read: LUCENE-550) without changeing more than a single line of code (given that code uses the factory methods).

Also, it would make it much simple to augment Lucene with decorative layers such as notification schemes, et c.

According to /me/ the static scope is a violation of pretty much everything.


Index: src/java/org/apache/lucene/store/Index.java
===================================================================
--- src/java/org/apache/lucene/store/Index.java (revision 0)
+++ src/java/org/apache/lucene/store/Index.java (revision 0)
@@ -0,0 +1,35 @@
+package org.apache.lucene.store;
+
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.analysis.Analyzer;
+
+import java.io.IOException;
+
+/**
+ * A top level store class with factory methods for reader and writer.
+ */
+public abstract class Index {
+
+  public abstract IndexReader indexReaderFactory() throws IOException;
+ public IndexWriter indexWriterFactory(Analyzer analyzer) throws IOException {
+    return indexWriterFactory(analyzer, false);
+  }
+ public abstract IndexWriter indexWriterFactory(Analyzer analyzer, boolean create) throws IOException;
+
+}
Index: src/java/org/apache/lucene/store/Directory.java
===================================================================
--- src/java/org/apache/lucene/store/Directory.java (revision 564022)
+++ src/java/org/apache/lucene/store/Directory.java     (working copy)
@@ -17,6 +17,10 @@
  * limitations under the License.
  */
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.analysis.Analyzer;
+
import java.io.IOException;
/** A Directory is a flat list of files. Files may be written once, when they
@@ -36,8 +40,16 @@
  *
  * @author Doug Cutting
  */
-public abstract class Directory {
+public abstract class Directory extends Index {
+
+  public IndexReader indexReaderFactory() throws IOException {
+    return IndexReader.open(this);
+  }
+ public IndexWriter indexWriterFactory(Analyzer analyzer, boolean create) throws IOException {
+    return new IndexWriter(this, analyzer, create);
+  }
+
   /** Holds the LockFactory instance (implements locking for
    * this Directory instance). */
   protected LockFactory lockFactory;



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to