org.hibernate.search.query.dsl.impl.ConnectedRangeMatchingContext Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-search-engine Show documentation
Show all versions of hibernate-search-engine Show documentation
Core of the Object/Lucene mapper, query engine and index management
/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or .
*/
package org.hibernate.search.query.dsl.impl;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.search.bridge.FieldBridge;
import org.hibernate.search.query.dsl.RangeMatchingContext;
import org.hibernate.search.query.dsl.RangeTerminationExcludable;
/**
* @author Emmanuel Bernard
*/
public class ConnectedRangeMatchingContext implements RangeMatchingContext, FieldBridgeCustomization {
private final QueryBuildingContext queryContext;
private final QueryCustomizer queryCustomizer;
private final RangeQueryContext rangeContext;
private final List fieldContexts;
//when a varargs of fields are passed, apply the same customization for all.
//keep the index of the first context in this queue
private int firstOfContext = 0;
public ConnectedRangeMatchingContext(String fieldName,
QueryCustomizer queryCustomizer,
QueryBuildingContext queryContext) {
this.queryContext = queryContext;
this.queryCustomizer = queryCustomizer;
this.rangeContext = new RangeQueryContext();
this.fieldContexts = new ArrayList(4);
this.fieldContexts.add( new FieldContext( fieldName ) );
}
@Override
public RangeMatchingContext andField(String field) {
this.fieldContexts.add( new FieldContext( field ) );
this.firstOfContext = fieldContexts.size() - 1;
return this;
}
@Override
public FromRangeContext from(T from) {
rangeContext.setFrom( from );
return new ConnectedFromRangeContext(this);
}
static class ConnectedFromRangeContext implements FromRangeContext {
private final ConnectedRangeMatchingContext mother;
ConnectedFromRangeContext(ConnectedRangeMatchingContext mother) {
this.mother = mother;
}
@Override
public RangeTerminationExcludable to(T to) {
mother.rangeContext.setTo( to );
return new ConnectedMultiFieldsRangeQueryBuilder(
mother.rangeContext,
mother.queryCustomizer,
mother.fieldContexts,
mother.queryContext);
}
@Override
public FromRangeContext excludeLimit() {
mother.rangeContext.setExcludeFrom( true );
return this;
}
}
@Override
public RangeTerminationExcludable below(Object below) {
rangeContext.setTo( below );
return new ConnectedMultiFieldsRangeQueryBuilder( rangeContext, queryCustomizer, fieldContexts, queryContext);
}
@Override
public RangeTerminationExcludable above(Object above) {
rangeContext.setFrom( above );
return new ConnectedMultiFieldsRangeQueryBuilder( rangeContext, queryCustomizer, fieldContexts, queryContext);
}
@Override
public RangeMatchingContext boostedTo(float boost) {
for ( FieldContext fieldContext : getCurrentFieldContexts() ) {
fieldContext.getFieldCustomizer().boostedTo( boost );
}
return this;
}
private List getCurrentFieldContexts() {
return fieldContexts.subList( firstOfContext, fieldContexts.size() );
}
@Override
public RangeMatchingContext ignoreAnalyzer() {
for ( FieldContext fieldContext : getCurrentFieldContexts() ) {
fieldContext.setIgnoreAnalyzer( true );
}
return this;
}
@Override
public RangeMatchingContext ignoreFieldBridge() {
for ( FieldContext fieldContext : getCurrentFieldContexts() ) {
fieldContext.setIgnoreFieldBridge( true );
}
return this;
}
@Override
public RangeMatchingContext withFieldBridge(FieldBridge fieldBridge) {
for ( FieldContext fieldContext : getCurrentFieldContexts() ) {
fieldContext.setFieldBridge( fieldBridge );
}
return this;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy