From a9c59d33230d7bc596e0cf30a611aba4b5800d2d Mon Sep 17 00:00:00 2001 From: Shai Erera Date: Thu, 11 Sep 2014 16:14:55 +0000 Subject: [PATCH] LUCENE-5933: add FilterSpans git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1624327 13f79535-47bb-0310-9956-ffa450edef68 --- lucene/CHANGES.txt | 2 + .../lucene/search/spans/FilterSpans.java | 82 +++++++++++++++++++ .../lucene/search/spans/TestFilterSpans.java | 41 ++++++++++ 3 files changed, 125 insertions(+) create mode 100644 lucene/core/src/java/org/apache/lucene/search/spans/FilterSpans.java create mode 100644 lucene/core/src/test/org/apache/lucene/search/spans/TestFilterSpans.java diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 950885a0254..95297f304ad 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -113,6 +113,8 @@ New Features * LUCENE-5906: Use Files.delete everywhere instead of File.delete, so that when things go wrong, you get a real exception message why. (Uwe Schindler, Robert Muir) + +* LUCENE-5933: Added FilterSpans for easier wrapping of Spans instance. (Shai Erera) * LUCENE-5925: Remove fallback logic from opening commits, instead use Directory.renameFile so that in-progress commits are never visible. diff --git a/lucene/core/src/java/org/apache/lucene/search/spans/FilterSpans.java b/lucene/core/src/java/org/apache/lucene/search/spans/FilterSpans.java new file mode 100644 index 00000000000..d26965100f1 --- /dev/null +++ b/lucene/core/src/java/org/apache/lucene/search/spans/FilterSpans.java @@ -0,0 +1,82 @@ +package org.apache.lucene.search.spans; + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.IOException; +import java.util.Collection; + +/** + * A {@link Spans} implementation which allows wrapping another spans instance + * and override some selected methods. + */ +public class FilterSpans extends Spans { + + /** The wrapped spans instance. */ + protected final Spans in; + + /** Wrap the given {@link Spans}. */ + public FilterSpans(Spans in) { + this.in = in; + } + + @Override + public boolean next() throws IOException { + return in.next(); + } + + @Override + public boolean skipTo(int target) throws IOException { + return in.skipTo(target); + } + + @Override + public int doc() { + return in.doc(); + } + + @Override + public int start() { + return in.start(); + } + + @Override + public int end() { + return in.end(); + } + + @Override + public Collection getPayload() throws IOException { + return in.getPayload(); + } + + @Override + public boolean isPayloadAvailable() throws IOException { + return in.isPayloadAvailable(); + } + + @Override + public long cost() { + return in.cost(); + } + + @Override + public String toString() { + return "Filter(" + in.toString() + ")"; + } + +} diff --git a/lucene/core/src/test/org/apache/lucene/search/spans/TestFilterSpans.java b/lucene/core/src/test/org/apache/lucene/search/spans/TestFilterSpans.java new file mode 100644 index 00000000000..2b3500d0c10 --- /dev/null +++ b/lucene/core/src/test/org/apache/lucene/search/spans/TestFilterSpans.java @@ -0,0 +1,41 @@ +package org.apache.lucene.search.spans; + +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import java.lang.reflect.Method; +import java.util.HashSet; +import java.util.Set; + +import org.apache.lucene.util.LuceneTestCase; +import org.junit.Test; + +public class TestFilterSpans extends LuceneTestCase { + + @Test + public void testOverrides() throws Exception { + // verify that all methods of Spans are overridden by FilterSpans, + // except those under the 'exclude' list + Set exclude = new HashSet<>(); + for (Method m : FilterSpans.class.getMethods()) { + if (m.getDeclaringClass() == Spans.class) { + assertTrue("method " + m.getName() + " not overridden!", exclude.contains(m)); + } + } + } + +}