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;
Show replies by date