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();
+ }
}