[hibernate-commits] Hibernate SVN: r18451 - in search/trunk/src: test/java/org/hibernate/search/test/query/dsl and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Jan 8 06:46:30 EST 2010


Author: navssurtani
Date: 2010-01-08 06:46:29 -0500 (Fri, 08 Jan 2010)
New Revision: 18451

Added:
   search/trunk/src/main/java/org/hibernate/search/query/dsl/AbstractTermQueryBuilder.java
   search/trunk/src/main/java/org/hibernate/search/query/dsl/BooleanContext.java
   search/trunk/src/main/java/org/hibernate/search/query/dsl/BuildableTermQueryBuilder.java
   search/trunk/src/main/java/org/hibernate/search/query/dsl/NegatableBooleanContext.java
   search/trunk/src/main/java/org/hibernate/search/query/dsl/TermQueryBuilderDataStore.java
   search/trunk/src/main/java/org/hibernate/search/query/dsl/UnbuildableTermQueryBuilderOnField.java
   search/trunk/src/main/java/org/hibernate/search/query/dsl/UnbuildableTermQueryBuilderOnSearch.java
Removed:
   search/trunk/src/main/java/org/hibernate/search/query/dsl/QueryContext.java
Modified:
   search/trunk/src/main/java/org/hibernate/search/query/dsl/SealedQueryBuilder.java
   search/trunk/src/test/java/org/hibernate/search/test/query/dsl/QueryContextTest.java
Log:
Added in TermQueries and BooleanQueries to DSL.

Added: search/trunk/src/main/java/org/hibernate/search/query/dsl/AbstractTermQueryBuilder.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/query/dsl/AbstractTermQueryBuilder.java	                        (rev 0)
+++ search/trunk/src/main/java/org/hibernate/search/query/dsl/AbstractTermQueryBuilder.java	2010-01-08 11:46:29 UTC (rev 18451)
@@ -0,0 +1,14 @@
+package org.hibernate.search.query.dsl;
+
+/**
+ * Abstract class that can be used to store state and any information that all the various TermQueryBuilder
+ * types might need.
+ *
+ * @author Navin Surtani
+ */
+
+
+public abstract class AbstractTermQueryBuilder {
+
+   protected TermQueryBuilderDataStore dataStore;
+}

Added: search/trunk/src/main/java/org/hibernate/search/query/dsl/BooleanContext.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/query/dsl/BooleanContext.java	                        (rev 0)
+++ search/trunk/src/main/java/org/hibernate/search/query/dsl/BooleanContext.java	2010-01-08 11:46:29 UTC (rev 18451)
@@ -0,0 +1,47 @@
+package org.hibernate.search.query.dsl;
+
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.Query;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * // TODO: Document this
+ *
+ * @author Navin Surtani
+ */
+
+//TODO do we want a QueryCreator interface with T extends Query and T createQuery() ?
+public class BooleanContext {
+   private BooleanClause.Occur occur;
+   // List has an allocation of 5 temporarily so that it's not created with an arbitrary one.
+   private final List<Query> clauses = new ArrayList<Query>(5);
+
+   public BooleanContext(BooleanClause.Occur occur) {
+      this.occur = occur;
+   }
+
+   public BooleanContext add(Query clause) {
+      clauses.add(clause);
+      return this;
+   }
+
+   public Query createQuery() {
+      BooleanQuery boolQuery = new BooleanQuery();
+      for(Query clause : clauses) {
+         boolQuery.add(clause, occur);
+      }
+      return boolQuery;
+   }
+
+   protected void setOccur(BooleanClause.Occur occur) {
+      this.occur = occur;
+   }
+
+   protected BooleanClause.Occur getOccur() {
+      return occur;
+   }
+
+}

Added: search/trunk/src/main/java/org/hibernate/search/query/dsl/BuildableTermQueryBuilder.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/query/dsl/BuildableTermQueryBuilder.java	                        (rev 0)
+++ search/trunk/src/main/java/org/hibernate/search/query/dsl/BuildableTermQueryBuilder.java	2010-01-08 11:46:29 UTC (rev 18451)
@@ -0,0 +1,49 @@
+package org.hibernate.search.query.dsl;
+
+import org.apache.lucene.index.Term;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.TermQuery;
+
+import java.util.List;
+
+/**
+ * Class that will allow the user to actually build his query.
+ *
+ * @author Navin Surtani
+ */
+
+
+public class BuildableTermQueryBuilder extends AbstractTermQueryBuilder {
+   public BuildableTermQueryBuilder(TermQueryBuilderDataStore dataStore) {
+      this.dataStore = dataStore;
+   }
+
+   public UnbuildableTermQueryBuilderOnSearch on(String field) {
+      return new UnbuildableTermQueryBuilderOnSearch(dataStore, field);
+   }
+
+   public Query build() {
+      // Start by getting the lists of fields and searches.
+      List<Term> terms = dataStore.getTerms();
+
+      //TODO:- This kind of sucks. How can we do this nicely?
+      // Create a TermQuery for the first term.
+      Query tq = new TermQuery(terms.get(0));
+
+      // Now create an array of TermQueries for me to do the combine later on.
+      // The array size will be 1 less than that of the list.
+      TermQuery[] termQueries = new TermQuery[terms.size() - 1];
+
+      // Loop through the rest of the list.
+      for (int i = 1; i<terms.size(); i++){
+         // The index of each newly created TermQuery in the array will always be 1 less than that of the list
+         // This is because the first term in the list has already been dealt with, so the first termQuery in the array
+         // will correspond to the second term from the list.
+
+         termQueries[i - 1] = new TermQuery(terms.get(i));
+      }
+
+      tq = tq.combine(termQueries);
+      return tq;
+   }
+}

Added: search/trunk/src/main/java/org/hibernate/search/query/dsl/NegatableBooleanContext.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/query/dsl/NegatableBooleanContext.java	                        (rev 0)
+++ search/trunk/src/main/java/org/hibernate/search/query/dsl/NegatableBooleanContext.java	2010-01-08 11:46:29 UTC (rev 18451)
@@ -0,0 +1,48 @@
+package org.hibernate.search.query.dsl;
+
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.Query;
+
+/**
+ * // TODO: Document this
+ *
+ * @author Navin Surtani
+ */
+
+
+public class NegatableBooleanContext {
+   private final BooleanContext delegate;
+
+   public NegatableBooleanContext(BooleanClause.Occur occur) {
+      this.delegate = new BooleanContext(occur);
+   }
+
+   public NegatableBooleanContext not() {
+      BooleanClause.Occur present = delegate.getOccur();
+      if ( present == null ) {
+         //assertion exception
+      }
+      else if (present == BooleanClause.Occur.SHOULD) {
+         //assertion exception
+      }
+      else if ( present == BooleanClause.Occur.MUST) {
+         delegate.setOccur(BooleanClause.Occur.MUST_NOT);
+      }
+      else if (present == BooleanClause.Occur.MUST_NOT) {
+         delegate.setOccur(BooleanClause.Occur.MUST);
+      }
+      else {
+         //asseriton failure
+      }
+      return this;
+   }
+
+   public NegatableBooleanContext add(Query clause) {
+      delegate.add(clause);
+      return this;
+   }
+
+   public Query createQuery() {
+      return delegate.createQuery();
+   }
+}

Deleted: search/trunk/src/main/java/org/hibernate/search/query/dsl/QueryContext.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/query/dsl/QueryContext.java	2010-01-08 10:41:10 UTC (rev 18450)
+++ search/trunk/src/main/java/org/hibernate/search/query/dsl/QueryContext.java	2010-01-08 11:46:29 UTC (rev 18451)
@@ -1,52 +0,0 @@
-package org.hibernate.search.query.dsl;
-
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.apache.lucene.queryParser.ParseException;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.Query;
-
-/**
- * Class that will be called by the {@link org.hibernate.search.query.dsl.SealedQueryBuilder} each time someone wants
- * to create a new query instance.
- *
- * @author Navin Surtani
- */
-
-
-public class QueryContext {
-
-   private Analyzer analyzer;
-   private String field;
-   private String search; 
-
-   public QueryContext search(String mySearch){
-      this.search = mySearch;
-      return this;
-   }
-
-   public QueryContext onField(String onField){
-      this.field = onField;
-      return this;
-   }
-
-   public QueryContext withAnalyzer(Analyzer analyzer){
-      this.analyzer = analyzer;
-      return this;
-   }
-
-   public Query build() throws ParseException {
-      QueryParser parser;
-
-      if (analyzer != null){
-         parser = new QueryParser(field, analyzer);
-      }
-      else{
-         // Do we just use a StandardAnalyzer?
-         parser = new QueryParser(field, new StandardAnalyzer());
-      }
-
-      return parser.parse(search);
-   }
-
-}

Modified: search/trunk/src/main/java/org/hibernate/search/query/dsl/SealedQueryBuilder.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/query/dsl/SealedQueryBuilder.java	2010-01-08 10:41:10 UTC (rev 18450)
+++ search/trunk/src/main/java/org/hibernate/search/query/dsl/SealedQueryBuilder.java	2010-01-08 11:46:29 UTC (rev 18451)
@@ -1,5 +1,7 @@
 package org.hibernate.search.query.dsl;
 
+import org.apache.lucene.search.BooleanClause;
+
 /**
  * // TODO: Document this
  *
@@ -13,7 +15,15 @@
 
    }
 
-   public QueryContext getContext(){
-      return new QueryContext();
+   public BooleanContext should() {
+      return new BooleanContext(BooleanClause.Occur.SHOULD);
    }
+
+   public NegatableBooleanContext must(){
+      return new NegatableBooleanContext(BooleanClause.Occur.MUST);
+   }
+
+   public UnbuildableTermQueryBuilderOnField term(){
+      return new UnbuildableTermQueryBuilderOnField();
+   }
 }

Added: search/trunk/src/main/java/org/hibernate/search/query/dsl/TermQueryBuilderDataStore.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/query/dsl/TermQueryBuilderDataStore.java	                        (rev 0)
+++ search/trunk/src/main/java/org/hibernate/search/query/dsl/TermQueryBuilderDataStore.java	2010-01-08 11:46:29 UTC (rev 18451)
@@ -0,0 +1,31 @@
+package org.hibernate.search.query.dsl;
+
+import org.apache.lucene.index.Term;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class will just store the required terms.
+ *
+ * @author Navin Surtani
+ */
+
+
+public class TermQueryBuilderDataStore {
+
+   private List<Term> terms;
+
+   public TermQueryBuilderDataStore(){
+      terms = new ArrayList<Term>();
+   }
+
+   public List<Term> getTerms(){
+      return terms;
+   }
+
+   public void addTerm(Term term){
+      terms.add(term);
+   }
+
+}

Added: search/trunk/src/main/java/org/hibernate/search/query/dsl/UnbuildableTermQueryBuilderOnField.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/query/dsl/UnbuildableTermQueryBuilderOnField.java	                        (rev 0)
+++ search/trunk/src/main/java/org/hibernate/search/query/dsl/UnbuildableTermQueryBuilderOnField.java	2010-01-08 11:46:29 UTC (rev 18451)
@@ -0,0 +1,20 @@
+package org.hibernate.search.query.dsl;
+
+/**
+ * Class that exposes only the on(String field) method as this class will only be returned to a user when
+ * SealedQueryBuilder.term() is called.
+ *
+ * @author Navin Surtani
+ */
+
+
+public class UnbuildableTermQueryBuilderOnField extends AbstractTermQueryBuilder {
+   
+   public UnbuildableTermQueryBuilderOnField(){
+      dataStore = new TermQueryBuilderDataStore();
+   }
+
+   public UnbuildableTermQueryBuilderOnSearch on(String field){
+      return new UnbuildableTermQueryBuilderOnSearch(dataStore, field);
+   }
+}

Added: search/trunk/src/main/java/org/hibernate/search/query/dsl/UnbuildableTermQueryBuilderOnSearch.java
===================================================================
--- search/trunk/src/main/java/org/hibernate/search/query/dsl/UnbuildableTermQueryBuilderOnSearch.java	                        (rev 0)
+++ search/trunk/src/main/java/org/hibernate/search/query/dsl/UnbuildableTermQueryBuilderOnSearch.java	2010-01-08 11:46:29 UTC (rev 18451)
@@ -0,0 +1,30 @@
+package org.hibernate.search.query.dsl;
+
+import org.apache.lucene.index.Term;
+
+/**
+ * // TODO: Document this
+ *
+ * @author Navin Surtani
+ */
+
+
+public class UnbuildableTermQueryBuilderOnSearch extends AbstractTermQueryBuilder {
+
+   private String field;
+
+   public UnbuildableTermQueryBuilderOnSearch(TermQueryBuilderDataStore dataStore, String field) {
+      this.dataStore = dataStore;
+      this.field = field;
+   }
+
+   public BuildableTermQueryBuilder matches(String search) {
+      // Now that I've got enough information to create a term I can do so
+      Term term = new Term(field, search);
+      dataStore.addTerm(term);
+      // return the Buildable type.
+      return new BuildableTermQueryBuilder(dataStore);
+   }
+
+
+}

Modified: search/trunk/src/test/java/org/hibernate/search/test/query/dsl/QueryContextTest.java
===================================================================
--- search/trunk/src/test/java/org/hibernate/search/test/query/dsl/QueryContextTest.java	2010-01-08 10:41:10 UTC (rev 18450)
+++ search/trunk/src/test/java/org/hibernate/search/test/query/dsl/QueryContextTest.java	2010-01-08 11:46:29 UTC (rev 18451)
@@ -1,6 +1,5 @@
 package org.hibernate.search.test.query.dsl;
 
-import org.hibernate.search.query.dsl.QueryContext;
 import org.hibernate.search.test.SearchTestCase;
 import org.hibernate.search.test.query.Person;
 



More information about the hibernate-commits mailing list