[hibernate-commits] Hibernate SVN: r19670 - search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Jun 2 11:53:56 EDT 2010


Author: epbernard
Date: 2010-06-02 11:53:55 -0400 (Wed, 02 Jun 2010)
New Revision: 19670

Added:
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/QueryBuildingContext.java
Modified:
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedFuzzyContext.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsPhraseQueryBuilder.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsRangeQueryBuilder.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsTermQueryBuilder.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseContext.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseMatchingContext.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryBuilder.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryContextBuilder.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeContext.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeMatchingContext.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermContext.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermMatchingContext.java
   search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedWildcardContext.java
Log:
HSEARCH-533 pass the query builder context around

We need the targeted entity to prepare type conversion

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedFuzzyContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedFuzzyContext.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedFuzzyContext.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -1,10 +1,7 @@
 package org.hibernate.search.query.dsl.v2.impl;
 
-import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.search.Filter;
 
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
 import org.hibernate.search.query.dsl.v2.FuzzyContext;
 import org.hibernate.search.query.dsl.v2.TermMatchingContext;
 
@@ -12,29 +9,27 @@
  * @author Emmanuel Bernard
  */
 class ConnectedFuzzyContext implements FuzzyContext {
-	private final SearchFactoryImplementor factory;
-	private final Analyzer queryAnalyzer;
+	private final QueryBuildingContext queryContext;
 	private final QueryCustomizer queryCustomizer;
-	private final TermQueryContext context;
+	private final TermQueryContext termContext;
 
-	public ConnectedFuzzyContext(Analyzer queryAnalyzer, SearchFactoryImplementor factory, QueryCustomizer queryCustomizer) {
-		this.factory = factory;
-		this.queryAnalyzer = queryAnalyzer;
+	public ConnectedFuzzyContext(QueryCustomizer queryCustomizer, QueryBuildingContext queryContext) {
 		this.queryCustomizer = queryCustomizer;
-		this.context = new TermQueryContext( TermQueryContext.Approximation.FUZZY);
+		this.termContext = new TermQueryContext( TermQueryContext.Approximation.FUZZY);
+		this.queryContext = queryContext;
 	}
 
 	public TermMatchingContext onField(String field) {
-		return new ConnectedTermMatchingContext(context, field, queryCustomizer, queryAnalyzer, factory);
+		return new ConnectedTermMatchingContext(termContext, field, queryCustomizer, queryContext);
 	}
 
 	public ConnectedFuzzyContext threshold(float threshold) {
-		context.setThreshold( threshold );
+		termContext.setThreshold( threshold );
 		return this;
 	}
 
 	public ConnectedFuzzyContext prefixLength(int prefixLength) {
-		context.setPrefixLength( prefixLength );
+		termContext.setPrefixLength( prefixLength );
 		return this;
 	}
 

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsPhraseQueryBuilder.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsPhraseQueryBuilder.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsPhraseQueryBuilder.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -8,7 +8,6 @@
 import java.util.List;
 import java.util.Map;
 
-import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
 import org.apache.lucene.analysis.tokenattributes.TermAttribute;
@@ -19,25 +18,24 @@
 import org.apache.lucene.search.PhraseQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.search.TermRangeQuery;
 
 import org.hibernate.annotations.common.AssertionFailure;
 import org.hibernate.search.SearchException;
 import org.hibernate.search.query.dsl.v2.PhraseTermination;
-import org.hibernate.search.query.dsl.v2.RangeTerminationExcludable;
 
 /**
  * @author Emmanuel Bernard
  */
 public class ConnectedMultiFieldsPhraseQueryBuilder implements PhraseTermination {
-	private final PhraseQueryContext queryContext;
-	private final Analyzer queryAnalyzer;
+	private final PhraseQueryContext phraseContext;
+	private final QueryBuildingContext queryContext;
 	private final QueryCustomizer queryCustomizer;
 	private final List<FieldContext> fieldContexts;
 
-	public ConnectedMultiFieldsPhraseQueryBuilder(PhraseQueryContext queryContext, Analyzer queryAnalyzer, QueryCustomizer queryCustomizer, List<FieldContext> fieldContexts) {
+	public ConnectedMultiFieldsPhraseQueryBuilder(PhraseQueryContext phraseContext, QueryCustomizer queryCustomizer,
+												  List<FieldContext> fieldContexts, QueryBuildingContext queryContext) {
+		this.phraseContext = phraseContext;
 		this.queryContext = queryContext;
-		this.queryAnalyzer = queryAnalyzer;
 		this.queryCustomizer = queryCustomizer;
 		this.fieldContexts = fieldContexts;
 	}
@@ -66,10 +64,10 @@
 		TokenStream stream = null;
 		boolean isMultiPhrase = false;
 		Map<Integer, List<Term>> termsPerPosition = new HashMap<Integer, List<Term>>();
-		final String sentence = queryContext.getSentence();
+		final String sentence = phraseContext.getSentence();
 		try {
 			Reader reader = new StringReader( sentence );
-			stream = queryAnalyzer.reusableTokenStream( fieldName, reader);
+			stream = queryContext.getQueryAnalyzer().reusableTokenStream( fieldName, reader);
 
 			TermAttribute termAttribute = (TermAttribute) stream.addAttribute( TermAttribute.class );
 			PositionIncrementAttribute positionAttribute = (PositionIncrementAttribute) stream.addAttribute( PositionIncrementAttribute.class );
@@ -139,7 +137,7 @@
 		else {
 			if (isMultiPhrase) {
 				MultiPhraseQuery query = new MultiPhraseQuery();
-				query.setSlop( queryContext.getSlop() );
+				query.setSlop( phraseContext.getSlop() );
 				for ( Map.Entry<Integer,List<Term>> entry : termsPerPosition.entrySet() ) {
 					final List<Term> value = entry.getValue();
 					query.add( value.toArray( new Term[value.size()] ), entry.getKey() );
@@ -148,7 +146,7 @@
 			}
 			else {
 				PhraseQuery query = new PhraseQuery();
-				query.setSlop(  queryContext.getSlop() );
+				query.setSlop(  phraseContext.getSlop() );
 				for ( Map.Entry<Integer,List<Term>> entry : termsPerPosition.entrySet() ) {
 					final List<Term> value = entry.getValue();
 					query.add( value.get(0), entry.getKey() );

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsRangeQueryBuilder.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsRangeQueryBuilder.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsRangeQueryBuilder.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -1,53 +1,43 @@
 package org.hibernate.search.query.dsl.v2.impl;
 
-import java.io.IOException;
 import java.util.List;
 
 import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.index.Term;
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.FuzzyQuery;
 import org.apache.lucene.search.Query;
-import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.search.TermRangeQuery;
-import org.apache.lucene.search.WildcardQuery;
 
 import org.hibernate.annotations.common.AssertionFailure;
-import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
 import org.hibernate.search.query.dsl.v2.RangeTerminationExcludable;
 
 /**
  * @author Emmanuel Bernard
  */
 public class ConnectedMultiFieldsRangeQueryBuilder implements RangeTerminationExcludable {
-	private final RangeQueryContext queryContext;
-	private final Analyzer queryAnalyzer;
+	private final RangeQueryContext rangeContext;
 	private final QueryCustomizer queryCustomizer;
 	private final List<FieldContext> fieldContexts;
-	private final SearchFactoryImplementor factory;
+	private final QueryBuildingContext queryContext;
 
-	public ConnectedMultiFieldsRangeQueryBuilder(RangeQueryContext queryContext, Analyzer queryAnalyzer,
+	public ConnectedMultiFieldsRangeQueryBuilder(RangeQueryContext rangeContext,
 												 QueryCustomizer queryCustomizer, List<FieldContext> fieldContexts,
-												 SearchFactoryImplementor factory) {
-		this.queryContext = queryContext;
-		this.queryAnalyzer = queryAnalyzer;
+												 QueryBuildingContext queryContext) {
+		this.rangeContext = rangeContext;
 		this.queryCustomizer = queryCustomizer;
 		this.fieldContexts = fieldContexts;
-		this.factory = factory;
+		this.queryContext = queryContext;
 	}
 
 	public RangeTerminationExcludable exclude() {
-		if ( queryContext.getFrom() != null && queryContext.getTo() != null ) {
-			queryContext.setExcludeTo( true );
+		if ( rangeContext.getFrom() != null && rangeContext.getTo() != null ) {
+			rangeContext.setExcludeTo( true );
 		}
-		else if ( queryContext.getFrom() != null ) {
-			queryContext.setExcludeTo( true );
+		else if ( rangeContext.getFrom() != null ) {
+			rangeContext.setExcludeTo( true );
 		}
-		else if ( queryContext.getTo() != null ) {
-			queryContext.setExcludeTo( true );
+		else if ( rangeContext.getTo() != null ) {
+			rangeContext.setExcludeTo( true );
 		}
 		else {
 			throw new AssertionFailure( "Both from and to clause of a range query are null" );
@@ -72,16 +62,17 @@
 	public Query createQuery(FieldContext fieldContext) {
 		final Query perFieldQuery;
 		final String fieldName = fieldContext.getField();
-		final Object from = queryContext.getFrom();
+		final Analyzer queryAnalyzer = queryContext.getQueryAnalyzer();
+		final Object from = rangeContext.getFrom();
 		final String lowerTerm = from == null ? null : Helper.getAnalyzedTerm( fieldName, from, "from", queryAnalyzer );
-		final Object to = queryContext.getTo();
+		final Object to = rangeContext.getTo();
 		final String upperTerm = to == null ? null : Helper.getAnalyzedTerm( fieldName, to, "to", queryAnalyzer );
 		perFieldQuery = new TermRangeQuery(
 				fieldName,
 				lowerTerm,
 				upperTerm,
-				queryContext.isExcludeFrom(),
-				queryContext.isExcludeTo()
+				rangeContext.isExcludeFrom(),
+				rangeContext.isExcludeTo()
 		);
 		return fieldContext.getFieldCustomizer().setWrappedQuery( perFieldQuery ).createQuery();
 	}

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsTermQueryBuilder.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsTermQueryBuilder.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsTermQueryBuilder.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -15,8 +15,6 @@
 
 import org.hibernate.annotations.common.AssertionFailure;
 import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
 import org.hibernate.search.query.dsl.v2.TermTermination;
 
 /**
@@ -24,20 +22,19 @@
 */
 public class ConnectedMultiFieldsTermQueryBuilder implements TermTermination {
 	private final String text;
-	private final Analyzer queryAnalyzer;
 	private final QueryCustomizer queryCustomizer;
-	private final TermQueryContext queryContext;
+	private final TermQueryContext termContext;
 	private final List<FieldContext> fieldContexts;
+	private final QueryBuildingContext queryContext;
 
-	public ConnectedMultiFieldsTermQueryBuilder(TermQueryContext queryContext,
+	public ConnectedMultiFieldsTermQueryBuilder(TermQueryContext termContext,
 												String text,
 												List<FieldContext> fieldContexts,
 												QueryCustomizer queryCustomizer,
-												Analyzer queryAnalyzer,
-												SearchFactoryImplementor factory) {
-		this.queryContext = queryContext;
+												QueryBuildingContext queryContext) {
+		this.termContext = termContext;
 		this.text = text;
-		this.queryAnalyzer = queryAnalyzer;
+		this.queryContext = queryContext;
 		this.queryCustomizer = queryCustomizer;
 		this.fieldContexts = fieldContexts;
 	}
@@ -64,7 +61,7 @@
 		else {
 			List<String> terms;
 			try {
-				terms = getAllTermsFromText( fieldContext.getField(), text, queryAnalyzer );
+				terms = getAllTermsFromText( fieldContext.getField(), text, queryContext.getQueryAnalyzer() );
 			}
 			catch ( IOException e ) {
 				throw new AssertionFailure("IO exception while reading String stream??", e);
@@ -90,7 +87,7 @@
 	private Query createTermQuery(FieldContext fieldContext, String term) {
 		Query query;
 		final String fieldName = fieldContext.getField();
-		switch ( queryContext.getApproximation() ) {
+		switch ( termContext.getApproximation() ) {
 			case EXACT:
 				query = new TermQuery( new Term( fieldName, term ) );
 				break;
@@ -100,11 +97,11 @@
 			case FUZZY:
 				query = new FuzzyQuery(
 						new Term( fieldName, term ),
-						queryContext.getThreshold(),
-						queryContext.getPrefixLength() );
+						termContext.getThreshold(),
+						termContext.getPrefixLength() );
 				break;
 			default:
-				throw new AssertionFailure( "Unknown approximation: " + queryContext.getApproximation() );
+				throw new AssertionFailure( "Unknown approximation: " + termContext.getApproximation() );
 		}
 		return query;
 	}
@@ -112,7 +109,7 @@
 	private List<String> getAllTermsFromText(String fieldName, String localText, Analyzer analyzer) throws IOException {
 		//it's better not to apply the analyzer with wildcard as * and ? can be mistakenly removed
 		List<String> terms = new ArrayList<String>();
-		if ( queryContext.getApproximation() == TermQueryContext.Approximation.WILDCARD ) {
+		if ( termContext.getApproximation() == TermQueryContext.Approximation.WILDCARD ) {
 			terms.add( localText );
 		}
 		else {

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseContext.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseContext.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -3,37 +3,32 @@
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.search.Filter;
 
-import org.hibernate.search.SearchFactory;
 import org.hibernate.search.engine.SearchFactoryImplementor;
 import org.hibernate.search.query.dsl.v2.PhraseContext;
 import org.hibernate.search.query.dsl.v2.PhraseMatchingContext;
-import org.hibernate.search.query.dsl.v2.RangeContext;
-import org.hibernate.search.query.dsl.v2.RangeMatchingContext;
 
 /**
  * @author Emmanuel Bernard
  */
 class ConnectedPhraseContext implements PhraseContext {
-	private final SearchFactoryImplementor factory;
-	private final Analyzer queryAnalyzer;
+	private final QueryBuildingContext queryContext;
 	private final QueryCustomizer queryCustomizer;
-	private final PhraseQueryContext queryContext;
+	private final PhraseQueryContext phraseContext;
 
 
-	public ConnectedPhraseContext(Analyzer queryAnalyzer, SearchFactoryImplementor factory) {
-		this.factory = factory;
-		this.queryAnalyzer = queryAnalyzer;
+	public ConnectedPhraseContext(QueryBuildingContext queryContext) {
 		this.queryCustomizer = new QueryCustomizer();
-		this.queryContext = new PhraseQueryContext();
+		this.phraseContext = new PhraseQueryContext();
+		this.queryContext = queryContext;
 	}
 
 	public PhraseContext slop(int slop) {
-		queryContext.setSlop( slop );
+		phraseContext.setSlop( slop );
 		return this;
 	}
 
 	public PhraseMatchingContext onField(String fieldName) {
-		return new ConnectedPhraseMatchingContext(fieldName, queryContext, queryCustomizer, queryAnalyzer, factory);
+		return new ConnectedPhraseMatchingContext(fieldName, phraseContext, queryCustomizer, queryContext);
 	}
 
 	public PhraseContext boostedTo(float boost) {

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseMatchingContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseMatchingContext.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseMatchingContext.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -3,37 +3,28 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.lucene.analysis.Analyzer;
-
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
 import org.hibernate.search.query.dsl.v2.PhraseMatchingContext;
 import org.hibernate.search.query.dsl.v2.PhraseTermination;
-import org.hibernate.search.query.dsl.v2.RangeMatchingContext;
-import org.hibernate.search.query.dsl.v2.RangeTerminationExcludable;
 
 /**
  * @author Emmanuel Bernard
  */
 public class ConnectedPhraseMatchingContext implements PhraseMatchingContext {
-	private final SearchFactoryImplementor factory;
-	private final Analyzer queryAnalyzer;
+	private final QueryBuildingContext queryContext;
 	private final QueryCustomizer queryCustomizer;
-	private final PhraseQueryContext queryContext;
+	private final PhraseQueryContext phraseContext;
 	private final List<FieldContext> 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 ConnectedPhraseMatchingContext(String fieldName,
-											PhraseQueryContext queryContext,
+											PhraseQueryContext phraseContext,
 											QueryCustomizer queryCustomizer,
-											Analyzer queryAnalyzer,
-											SearchFactoryImplementor factory) {
-		this.factory = factory;
-		this.queryAnalyzer = queryAnalyzer;
-		this.queryCustomizer = queryCustomizer;
+											QueryBuildingContext queryContext) {
 		this.queryContext = queryContext;
+		this.queryCustomizer = queryCustomizer;
+		this.phraseContext = phraseContext;
 		this.fieldContexts = new ArrayList<FieldContext>(4);
 		this.fieldContexts.add( new FieldContext( fieldName ) );
 	}
@@ -45,8 +36,8 @@
 	}
 
 	public PhraseTermination sentence(String sentence) {
-		queryContext.setSentence(sentence);
-		return new ConnectedMultiFieldsPhraseQueryBuilder(queryContext, queryAnalyzer, queryCustomizer, fieldContexts);
+		phraseContext.setSentence(sentence);
+		return new ConnectedMultiFieldsPhraseQueryBuilder( phraseContext, queryCustomizer, fieldContexts, queryContext );
 	}
 
 	public PhraseMatchingContext boostedTo(float boost) {

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryBuilder.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryBuilder.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryBuilder.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -19,24 +19,22 @@
  * @author Emmanuel Bernard
  */
 public class ConnectedQueryBuilder implements QueryBuilder {
-	private final Analyzer queryAnalyzer;
-	private final SearchFactoryImplementor factory;
+	private final QueryBuildingContext context;
 
-	public ConnectedQueryBuilder(Analyzer queryAnalyzer, SearchFactoryImplementor factory) {
-		this.queryAnalyzer = queryAnalyzer;
-		this.factory = factory;
+	public ConnectedQueryBuilder(QueryBuildingContext context) {
+		this.context = context;
 	}
 
 	public TermContext keyword() {
-		return new ConnectedTermContext(queryAnalyzer, factory);
+		return new ConnectedTermContext(context);
 	}
 
 	public RangeContext range() {
-		return new ConnectedRangeContext( queryAnalyzer, factory );
+		return new ConnectedRangeContext(context);
 	}
 
 	public PhraseContext phrase() {
-		return new ConnectedPhraseContext( queryAnalyzer, factory );
+		return new ConnectedPhraseContext(context);
 	}
 
 	//fixme Have to use raw types but would be nice to not have to

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryContextBuilder.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryContextBuilder.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedQueryContextBuilder.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -25,12 +25,12 @@
 
 	public final class HSearchEntityContext implements EntityContext {
 		private final ScopedAnalyzer queryAnalyzer;
-		private final SearchFactoryImplementor factory;
+		private final QueryBuildingContext context;
 
 		public HSearchEntityContext(Class<?> entityType, SearchFactoryImplementor factory) {
-			this.factory = factory;
 			queryAnalyzer = new ScopedAnalyzer();
 			queryAnalyzer.setGlobalAnalyzer( factory.getAnalyzer( entityType ) );
+			context = new QueryBuildingContext( factory, queryAnalyzer, entityType);
 		}
 
 		public EntityContext overridesForField(String field, String analyzerName) {
@@ -39,7 +39,7 @@
 		}
 
 		public QueryBuilder get() {
-			return new ConnectedQueryBuilder(queryAnalyzer, factory);
+			return new ConnectedQueryBuilder(context);
 		}
 	}
 }

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeContext.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeContext.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -12,18 +12,16 @@
  * @author Emmanuel Bernard
  */
 class ConnectedRangeContext implements RangeContext {
-	private final SearchFactoryImplementor factory;
-	private final Analyzer queryAnalyzer;
+	private final QueryBuildingContext queryContext;
 	private final QueryCustomizer queryCustomizer;
 
-	public ConnectedRangeContext(Analyzer queryAnalyzer, SearchFactoryImplementor factory) {
-		this.factory = factory;
-		this.queryAnalyzer = queryAnalyzer;
+	public ConnectedRangeContext(QueryBuildingContext queryContext) {
+		this.queryContext = queryContext;
 		this.queryCustomizer = new QueryCustomizer();
 	}
 
 	public RangeMatchingContext onField(String fieldName) {
-		return new ConnectedRangeMatchingContext(fieldName, queryCustomizer, queryAnalyzer, factory);
+		return new ConnectedRangeMatchingContext(fieldName, queryCustomizer, queryContext);
 	}
 
 	public RangeContext boostedTo(float boost) {

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeMatchingContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeMatchingContext.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeMatchingContext.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -3,10 +3,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.lucene.analysis.Analyzer;
-
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
 import org.hibernate.search.query.dsl.v2.RangeMatchingContext;
 import org.hibernate.search.query.dsl.v2.RangeTerminationExcludable;
 
@@ -14,10 +10,9 @@
  * @author Emmanuel Bernard
  */
 public class ConnectedRangeMatchingContext implements RangeMatchingContext {
-	private final SearchFactoryImplementor factory;
-	private final Analyzer queryAnalyzer;
+	private final QueryBuildingContext queryContext;
 	private final QueryCustomizer queryCustomizer;
-	private final RangeQueryContext queryContext;
+	private final RangeQueryContext rangeContext;
 	private final List<FieldContext> fieldContexts;
 	//when a varargs of fields are passed, apply the same customization for all.
 	//keep the index of the first context in this queue
@@ -25,12 +20,10 @@
 
 	public ConnectedRangeMatchingContext(String fieldName,
 										 QueryCustomizer queryCustomizer,
-										 Analyzer queryAnalyzer,
-										 SearchFactoryImplementor factory) {
-		this.factory = factory;
-		this.queryAnalyzer = queryAnalyzer;
+										 QueryBuildingContext queryContext) {
+		this.queryContext = queryContext;
 		this.queryCustomizer = queryCustomizer;
-		this.queryContext = new RangeQueryContext();
+		this.rangeContext = new RangeQueryContext();
 		this.fieldContexts = new ArrayList<FieldContext>(4);
 		this.fieldContexts.add( new FieldContext( fieldName ) );
 	}
@@ -42,7 +35,7 @@
 	}
 
 	public <T> FromRangeContext<T> from(T from) {
-		queryContext.setFrom( from );
+		rangeContext.setFrom( from );
 		return new ConnectedFromRangeContext<T>(this);
 	}
 
@@ -54,29 +47,28 @@
 		}
 
 		public RangeTerminationExcludable to(T to) {
-			mother.queryContext.setTo(to);
+			mother.rangeContext.setTo(to);
 			return new ConnectedMultiFieldsRangeQueryBuilder(
-					mother.queryContext,
-					mother.queryAnalyzer,
+					mother.rangeContext,
 					mother.queryCustomizer,
 					mother.fieldContexts,
-					mother.factory);
+					mother.queryContext);
 		}
 
 		public FromRangeContext<T> exclude() {
-			mother.queryContext.setExcludeFrom( true );
+			mother.rangeContext.setExcludeFrom( true );
 			return this;
 		}
 	}
 
 	public RangeTerminationExcludable below(Object below) {
-		queryContext.setTo( below );
-		return new ConnectedMultiFieldsRangeQueryBuilder(queryContext, queryAnalyzer, queryCustomizer, fieldContexts, factory);
+		rangeContext.setTo( below );
+		return new ConnectedMultiFieldsRangeQueryBuilder( rangeContext, queryCustomizer, fieldContexts, queryContext);
 	}
 
 	public RangeTerminationExcludable above(Object above) {
-		queryContext.setFrom( above );
-		return new ConnectedMultiFieldsRangeQueryBuilder(queryContext, queryAnalyzer, queryCustomizer, fieldContexts, factory);
+		rangeContext.setFrom( above );
+		return new ConnectedMultiFieldsRangeQueryBuilder( rangeContext, queryCustomizer, fieldContexts, queryContext);
 	}
 
 	public RangeMatchingContext boostedTo(float boost) {

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermContext.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermContext.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -1,10 +1,7 @@
 package org.hibernate.search.query.dsl.v2.impl;
 
-import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.search.Filter;
 
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
 import org.hibernate.search.query.dsl.v2.FuzzyContext;
 import org.hibernate.search.query.dsl.v2.TermContext;
 import org.hibernate.search.query.dsl.v2.TermMatchingContext;
@@ -14,32 +11,30 @@
  * @author Emmanuel Bernard
  */
 class ConnectedTermContext implements TermContext {
-	private final SearchFactoryImplementor factory;
-	private final Analyzer queryAnalyzer;
+	private final QueryBuildingContext queryContext;
 	private final QueryCustomizer queryCustomizer;
-	private final TermQueryContext context;
+	private final TermQueryContext termContext;
 
-	public ConnectedTermContext(Analyzer queryAnalyzer, SearchFactoryImplementor factory) {
-		this.factory = factory;
-		this.queryAnalyzer = queryAnalyzer;
+	public ConnectedTermContext(QueryBuildingContext queryContext) {
+		this.queryContext = queryContext;
 		this.queryCustomizer = new QueryCustomizer();
-		this.context = new TermQueryContext( TermQueryContext.Approximation.EXACT);
+		this.termContext = new TermQueryContext( TermQueryContext.Approximation.EXACT);
 	}
 
 	public TermMatchingContext onField(String field) {
-		return new ConnectedTermMatchingContext(context, field, queryCustomizer, queryAnalyzer, factory);
+		return new ConnectedTermMatchingContext( termContext, field, queryCustomizer, queryContext);
 	}
 
 	public TermMatchingContext onFields(String... fields) {
-		return new ConnectedTermMatchingContext(context, fields, queryCustomizer, queryAnalyzer, factory);
+		return new ConnectedTermMatchingContext( termContext, fields, queryCustomizer, queryContext);
 	}
 
 	public FuzzyContext fuzzy() {
-		return new ConnectedFuzzyContext( queryAnalyzer, factory, queryCustomizer );
+		return new ConnectedFuzzyContext( queryCustomizer, queryContext );
 	}
 
 	public WildcardContext wildcard() {
-		return new ConnectedWildcardContext( queryAnalyzer, factory, queryCustomizer);
+		return new ConnectedWildcardContext(queryCustomizer, queryContext);
 	}
 
 	public ConnectedTermContext boostedTo(float boost) {

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermMatchingContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermMatchingContext.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermMatchingContext.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -3,10 +3,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.lucene.analysis.Analyzer;
-
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
 import org.hibernate.search.query.dsl.v2.TermMatchingContext;
 import org.hibernate.search.query.dsl.v2.TermTermination;
 
@@ -14,31 +10,28 @@
 * @author Emmanuel Bernard
 */
 public class ConnectedTermMatchingContext implements TermMatchingContext {
-	private final SearchFactoryImplementor factory;
-	private final Analyzer queryAnalyzer;
+	private final QueryBuildingContext queryContext;
 	private final QueryCustomizer queryCustomizer;
-	private final TermQueryContext queryContext;
+	private final TermQueryContext termContext;
 	private final List<FieldContext> 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 ConnectedTermMatchingContext(TermQueryContext queryContext,
-			String field, QueryCustomizer queryCustomizer, Analyzer queryAnalyzer, SearchFactoryImplementor factory) {
-		this.factory = factory;
-		this.queryAnalyzer = queryAnalyzer;
-		this.queryCustomizer = queryCustomizer;
+	public ConnectedTermMatchingContext(TermQueryContext termContext,
+			String field, QueryCustomizer queryCustomizer, QueryBuildingContext queryContext) {
 		this.queryContext = queryContext;
+		this.queryCustomizer = queryCustomizer;
+		this.termContext = termContext;
 		this.fieldContexts = new ArrayList<FieldContext>(4);
 		this.fieldContexts.add( new FieldContext( field ) );
 	}
 
-	public ConnectedTermMatchingContext(TermQueryContext queryContext,
-			String[] fields, QueryCustomizer queryCustomizer, Analyzer queryAnalyzer, SearchFactoryImplementor factory) {
-		this.factory = factory;
-		this.queryAnalyzer = queryAnalyzer;
-		this.queryCustomizer = queryCustomizer;
+	public ConnectedTermMatchingContext(TermQueryContext termContext,
+			String[] fields, QueryCustomizer queryCustomizer, QueryBuildingContext queryContext) {
 		this.queryContext = queryContext;
+		this.queryCustomizer = queryCustomizer;
+		this.termContext = termContext;
 		this.fieldContexts = new ArrayList<FieldContext>(fields.length);
 		for (String field : fields) {
 			this.fieldContexts.add( new FieldContext( field ) );
@@ -46,7 +39,7 @@
 	}
 
 	public TermTermination matching(String text) {
-		return new ConnectedMultiFieldsTermQueryBuilder( queryContext, text, fieldContexts, queryCustomizer, queryAnalyzer, factory);
+		return new ConnectedMultiFieldsTermQueryBuilder( termContext, text, fieldContexts, queryCustomizer, queryContext);
 	}
 
 	public TermMatchingContext andField(String field) {

Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedWildcardContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedWildcardContext.java	2010-06-02 15:52:51 UTC (rev 19669)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedWildcardContext.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -1,10 +1,7 @@
 package org.hibernate.search.query.dsl.v2.impl;
 
-import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.search.Filter;
 
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
 import org.hibernate.search.query.dsl.v2.TermMatchingContext;
 import org.hibernate.search.query.dsl.v2.WildcardContext;
 
@@ -12,20 +9,18 @@
  * @author Emmanuel Bernard
  */
 class ConnectedWildcardContext implements WildcardContext {
-	private final SearchFactoryImplementor factory;
-	private final Analyzer queryAnalyzer;
+	private final QueryBuildingContext queryContext;
 	private final QueryCustomizer queryCustomizer;
-	private final TermQueryContext context;
+	private final TermQueryContext termContext;
 
-	public ConnectedWildcardContext(Analyzer queryAnalyzer, SearchFactoryImplementor factory, QueryCustomizer queryCustomizer) {
-		this.factory = factory;
-		this.queryAnalyzer = queryAnalyzer;
+	public ConnectedWildcardContext(QueryCustomizer queryCustomizer, QueryBuildingContext queryContext) {
+		this.queryContext = queryContext;
 		this.queryCustomizer = queryCustomizer;
-		this.context = new TermQueryContext( TermQueryContext.Approximation.WILDCARD);
+		this.termContext = new TermQueryContext(TermQueryContext.Approximation.WILDCARD);
 	}
 
 	public TermMatchingContext onField(String field) {
-		return new ConnectedTermMatchingContext(context, field, queryCustomizer, queryAnalyzer, factory);
+		return new ConnectedTermMatchingContext( termContext, field, queryCustomizer, queryContext);
 	}
 
 	public WildcardContext boostedTo(float boost) {

Added: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/QueryBuildingContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/QueryBuildingContext.java	                        (rev 0)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/QueryBuildingContext.java	2010-06-02 15:53:55 UTC (rev 19670)
@@ -0,0 +1,34 @@
+package org.hibernate.search.query.dsl.v2.impl;
+
+import org.apache.lucene.analysis.Analyzer;
+
+import org.hibernate.search.engine.SearchFactoryImplementor;
+
+/**
+ * Keep the query builder contextual information
+ * 
+ * @author Emmanuel Bernard
+ */
+public class QueryBuildingContext {
+	private final SearchFactoryImplementor factory;
+	private final Analyzer queryAnalyzer;
+	private final Class<?> entityType;
+
+	public QueryBuildingContext(SearchFactoryImplementor factory, Analyzer queryAnalyzer, Class<?> entityType) {
+		this.factory = factory;
+		this.queryAnalyzer = queryAnalyzer;
+		this.entityType = entityType;
+	}
+
+	public SearchFactoryImplementor getFactory() {
+		return factory;
+	}
+
+	public Analyzer getQueryAnalyzer() {
+		return queryAnalyzer;
+	}
+
+	public Class<?> getEntityType() {
+		return entityType;
+	}
+}



More information about the hibernate-commits mailing list