package org.apache.solr.search.function;
/*
* 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 org.apache.lucene.index.AtomicReaderContext;
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.search.Collector;
import org.apache.lucene.search.Explanation;
import org.apache.lucene.search.Weight;
import org.apache.lucene.util.AttributeSource;
import org.apache.lucene.util.BytesRef;
import org.apache.solr.search.QueryContext;
import org.apache.solr.search.mutable.MutableValue;
import org.apache.solr.search.mutable.MutableValueDouble;
import java.io.IOException;
import java.util.Collection;
public class ValueSourceAdapter extends ValueSource {
protected final org.apache.lucene.queries.function.ValueSource luceneSource;
public ValueSourceAdapter(org.apache.lucene.queries.function.ValueSource luceneSource) {
this.luceneSource = luceneSource;
}
@Override
public FuncValues getValues(QueryContext context, AtomicReaderContext readerContext) throws IOException {
org.apache.lucene.queries.function.FunctionValues luceneValues = luceneSource.getValues(null, readerContext);
return new FunctionValuesAdapter(luceneValues);
}
@Override
public boolean equals(Object o) {
return false;
}
@Override
public int hashCode() {
return 0;
}
@Override
public String description() {
return null;
}
}
class FunctionValuesAdapter extends FuncValues {
protected final org.apache.lucene.queries.function.FunctionValues luceneValues;
FunctionValuesAdapter(FunctionValues luceneValues) {
this.luceneValues = luceneValues;
}
@Override
public float floatVal(int doc) {
return luceneValues.floatVal(doc);
}
@Override
public int intVal(int doc) {
return luceneValues.intVal(doc);
}
@Override
public long longVal(int doc) {
return luceneValues.longVal(doc);
}
@Override
public double doubleVal(int doc) {
return luceneValues.doubleVal(doc);
}
@Override
public String strVal(int doc) {
return luceneValues.strVal(doc);
}
@Override
public boolean boolVal(int doc) {
return luceneValues.boolVal(doc);
}
@Override
public boolean bytesVal(int doc, BytesRef target) {
return luceneValues.bytesVal(doc, target);
}
@Override
public Object objectVal(int doc) {
return luceneValues.objectVal(doc);
}
@Override
public boolean exists(int doc) {
return luceneValues.exists(doc);
}
@Override
public int ordVal(int doc) {
return luceneValues.ordVal(doc);
}
@Override
public ValueFiller getValueFiller() {
// current other spatial value sources just use double, so implement directly
// instead of wrapping.
return new ValueFiller() {
private final MutableValueDouble mval = new MutableValueDouble();
@Override
public MutableValue getValue() {
return mval;
}
@Override
public void fillValue(int doc) {
mval.value = luceneValues.doubleVal(doc);
mval.exists = luceneValues.exists(doc);
}
};
}
@Override
public void floatVal(int doc, float[] vals) {
luceneValues.floatVal(doc, vals);
}
@Override
public void intVal(int doc, int[] vals) {
luceneValues.intVal(doc, vals);
}
@Override
public void longVal(int doc, long[] vals) {
luceneValues.longVal(doc, vals);
}
@Override
public void doubleVal(int doc, double[] vals) {
luceneValues.doubleVal(doc, vals);
}
@Override
public void strVal(int doc, String[] vals) {
luceneValues.strVal(doc, vals);
}
@Override
public Explanation explain(int doc) {
return luceneValues.explain(doc);
}
@Override
public ValueSourceScorer getRangeScorer(AtomicReaderContext readerContext, String lowerVal, String upperVal, boolean includeLower, boolean includeUpper, boolean matchMissing) {
return new ValueSourceScorerAdapter(readerContext, this, luceneValues.getRangeScorer(readerContext.reader(), lowerVal, upperVal, includeLower, includeUpper));
}
@Override
public String toString(int doc) {
return luceneValues.toString(doc);
}
}
class ValueSourceScorerAdapter extends ValueSourceScorer {
protected final org.apache.lucene.queries.function.ValueSourceScorer luceneScorer;
public ValueSourceScorerAdapter(AtomicReaderContext readerContext, FuncValues values, org.apache.lucene.queries.function.ValueSourceScorer luceneScorer) {
super(readerContext, values);
this.luceneScorer = luceneScorer;
}
@Override
public void setCheckDeletes(boolean checkDeletes) {
luceneScorer.setCheckDeletes(checkDeletes);
}
@Override
public boolean matches(int doc) {
return luceneScorer.matches(doc);
}
@Override
public boolean matchesValue(int doc) {
return luceneScorer.matchesValue(doc);
}
@Override
public int docID() {
return luceneScorer.docID();
}
@Override
public int nextDoc() throws IOException {
return luceneScorer.nextDoc();
}
@Override
public int advance(int target) throws IOException {
return luceneScorer.advance(target);
}
@Override
public float score() throws IOException {
return luceneScorer.score();
}
@Override
public int freq() throws IOException {
return luceneScorer.freq();
}
@Override
public long cost() {
return luceneScorer.cost();
}
@Override
public Weight getWeight() {
return luceneScorer.getWeight();
}
@Override
public Collection<ChildScorer> getChildren() {
return luceneScorer.getChildren();
}
@Override
public AttributeSource attributes() {
return luceneScorer.attributes();
}
}