You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2014/12/08 21:13:49 UTC

svn commit: r1643902 - in /lucene/dev/trunk/lucene: ./ core/src/java/org/apache/lucene/index/ core/src/java/org/apache/lucene/store/ core/src/test/org/apache/lucene/index/ core/src/test/org/apache/lucene/search/ core/src/test/org/apache/lucene/store/

Author: mikemccand
Date: Mon Dec  8 20:13:48 2014
New Revision: 1643902

URL: http://svn.apache.org/r1643902
Log:
LUCENE-6099: add FilterDirectory.unwrap and FilterDirectoryReader.unwrap

Modified:
    lucene/dev/trunk/lucene/CHANGES.txt
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FilterDirectoryReader.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/FilterDirectory.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestFilterLeafReader.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestFilterDirectory.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1643902&r1=1643901&r2=1643902&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Mon Dec  8 20:13:48 2014
@@ -299,6 +299,9 @@ API Changes
   IndexWriter.abortMerges and waitForMerges methods.  (Robert Muir,
   Mike McCandless)
 
+* LUCENE-6099: Add FilterDirectory.unwrap and
+  FilterDirectoryReader.unwrap (Simon Willnauer, Mike McCandless)
+
 Bug Fixes
 
 * LUCENE-5650: Enforce read-only access to any path outside the temporary

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FilterDirectoryReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FilterDirectoryReader.java?rev=1643902&r1=1643901&r2=1643902&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FilterDirectoryReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FilterDirectoryReader.java Mon Dec  8 20:13:48 2014
@@ -33,6 +33,15 @@ import java.util.List;
  */
 public abstract class FilterDirectoryReader extends DirectoryReader {
 
+  /** Get the wrapped instance by <code>reader</code> as long as this reader is
+   *  an instance of {@link FilterDirectoryReader}.  */
+  public static DirectoryReader unwrap(DirectoryReader reader) {
+    while (reader instanceof FilterDirectoryReader) {
+      reader = ((FilterDirectoryReader) reader).in;
+    }
+    return reader;
+  }
+
   /**
    * Factory class passed to FilterDirectoryReader constructor that allows
    * subclasses to wrap the filtered DirectoryReader's subreaders.  You
@@ -125,4 +134,8 @@ public abstract class FilterDirectoryRea
     in.doClose();
   }
 
+  /** Returns the wrapped {@link DirectoryReader}. */
+  public DirectoryReader getDelegate() {
+    return in;
+  }
 }

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java?rev=1643902&r1=1643901&r2=1643902&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/FilterLeafReader.java Mon Dec  8 20:13:48 2014
@@ -46,7 +46,7 @@ import org.apache.lucene.util.BytesRef;
 public class FilterLeafReader extends LeafReader {
 
   /** Get the wrapped instance by <code>reader</code> as long as this reader is
-   *  an intance of {@link FilterLeafReader}.  */
+   *  an instance of {@link FilterLeafReader}.  */
   public static LeafReader unwrap(LeafReader reader) {
     while (reader instanceof FilterLeafReader) {
       reader = ((FilterLeafReader) reader).in;
@@ -468,4 +468,9 @@ public class FilterLeafReader extends Le
     ensureOpen();
     in.checkIntegrity();
   }
+
+  /** Returns the wrapped {@link LeafReader}. */
+  public LeafReader getDelegate() {
+    return in;
+  }
 }

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/FilterDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/FilterDirectory.java?rev=1643902&r1=1643901&r2=1643902&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/FilterDirectory.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/FilterDirectory.java Mon Dec  8 20:13:48 2014
@@ -31,6 +31,15 @@ import java.util.Collection;
  *  @lucene.internal */
 public class FilterDirectory extends Directory {
 
+  /** Get the wrapped instance by <code>dir</code> as long as this reader is
+   *  an instance of {@link FilterDirectory}.  */
+  public static Directory unwrap(Directory dir) {
+    while (dir instanceof FilterDirectory) {
+      dir = ((FilterDirectory) dir).in;
+    }
+    return dir;
+  }
+
   protected final Directory in;
 
   /** Sole constructor, typically called from sub-classes. */

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestFilterLeafReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestFilterLeafReader.java?rev=1643902&r1=1643901&r2=1643902&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestFilterLeafReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/index/TestFilterLeafReader.java Mon Dec  8 20:13:48 2014
@@ -192,4 +192,17 @@ public class TestFilterLeafReader extend
     checkOverrideMethods(FilterLeafReader.FilterDocsAndPositionsEnum.class);
   }
 
+  public void testUnwrap() throws IOException {
+    Directory dir = newDirectory();
+    RandomIndexWriter w = new RandomIndexWriter(random(), dir);
+    w.addDocument(new Document());
+    DirectoryReader dr = w.getReader();
+    LeafReader r = dr.leaves().get(0).reader();
+    FilterLeafReader r2 = new FilterLeafReader(r);
+    assertEquals(r, r2.getDelegate());
+    assertEquals(r, FilterLeafReader.unwrap(r2));
+    w.close();
+    dr.close();
+    dir.close();
+  }
 }

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java?rev=1643902&r1=1643901&r2=1643902&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/search/TestSearcherManager.java Mon Dec  8 20:13:48 2014
@@ -462,7 +462,9 @@ public class TestSearcherManager extends
             new FilterDirectoryReader.SubReaderWrapper() {
               @Override
               public LeafReader wrap(LeafReader reader) {
-                return new MyFilterLeafReader(reader);
+                FilterLeafReader wrapped = new MyFilterLeafReader(reader);
+                assertEquals(reader, wrapped.getDelegate());
+                return wrapped;
               }
             });
     }
@@ -477,7 +479,12 @@ public class TestSearcherManager extends
   public void testCustomDirectoryReader() throws Exception {
     Directory dir = newDirectory();
     RandomIndexWriter w = new RandomIndexWriter(random(), dir);
-    DirectoryReader reader = new MyFilterDirectoryReader(w.getReader());
+    DirectoryReader nrtReader = w.getReader();
+
+    FilterDirectoryReader reader = new MyFilterDirectoryReader(nrtReader);
+    assertEquals(nrtReader, reader.getDelegate());
+    assertEquals(nrtReader, FilterDirectoryReader.unwrap(reader));
+
     SearcherManager mgr = new SearcherManager(reader, null);
     for(int i=0;i<10;i++) {
       w.addDocument(new Document());

Modified: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestFilterDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestFilterDirectory.java?rev=1643902&r1=1643901&r2=1643902&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestFilterDirectory.java (original)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/store/TestFilterDirectory.java Mon Dec  8 20:13:48 2014
@@ -17,6 +17,7 @@ package org.apache.lucene.store;
  * limitations under the License.
  */
 
+import java.io.IOException;
 import java.lang.reflect.Method;
 import java.util.HashSet;
 import java.util.Set;
@@ -39,5 +40,12 @@ public class TestFilterDirectory extends
       }
     }
   }
-  
+
+  public void testUnwrap() throws IOException {
+    Directory dir = FSDirectory.open(createTempDir());
+    FilterDirectory dir2 = new FilterDirectory(dir);
+    assertEquals(dir, dir2.getDelegate());
+    assertEquals(dir, FilterDirectory.unwrap(dir2));
+    dir2.close();
+  }
 }