r1270 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty/query wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr
Author: bpoussin Date: 2011-12-30 16:50:02 +0100 (Fri, 30 Dec 2011) New Revision: 1270 Url: http://nuiton.org/repositories/revision/wikitty/1270 Log: Evolution #1863: Create new query api with visitor and better implementation Evolution #1864: Add query langage syntaxe - renomage de la condition Join en In Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/In.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryMaker.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitor.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorToString.java trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittyQueryVisitorToSolr.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryMaker.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryMaker.java 2011-12-30 15:43:37 UTC (rev 1269) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryMaker.java 2011-12-30 15:50:02 UTC (rev 1270) @@ -27,7 +27,7 @@ import org.nuiton.wikitty.query.conditions.False; import org.nuiton.wikitty.query.conditions.Greater; import org.nuiton.wikitty.query.conditions.GreaterOrEquals; -import org.nuiton.wikitty.query.conditions.Join; +import org.nuiton.wikitty.query.conditions.In; import org.nuiton.wikitty.query.conditions.Keyword; import org.nuiton.wikitty.query.conditions.Less; import org.nuiton.wikitty.query.conditions.LessOrEquals; @@ -138,7 +138,7 @@ } /** - * Ajout d'une condition non terminal (or, and, not, join) + * Ajout d'une condition non terminal (or, and, not, in) * @param c */ protected void addOnStack(Condition c) { @@ -186,7 +186,7 @@ /** * Ajoute une condition, cette condition est prise comme une condition terminal * Si l'on veut continuer a construire la requete, il faut avoir ajouter - * avant une {@link #and()}, {@link #or()}, {@link #not()}, {@link #join()} + * avant une {@link #and()}, {@link #or()}, {@link #not()}, {@link #in()} * @param c la condition a ajouter * @return {@code this} with the {@code c} restriction added. */ @@ -850,27 +850,27 @@ } /** - * Add {@link Join} to allow search on association (like sql join). + * Add {@link In} to allow search on association (like sql join). * To close this sub query you must used {@link #close()} * @param foreignFieldName association fieldName * @return sub query - * @see {@link Join} + * @see {@link In} */ - public WikittyQueryMaker join(String foreignFieldName) { - return join(new ElementField(foreignFieldName)); + public WikittyQueryMaker in(String foreignFieldName) { + return in(new ElementField(foreignFieldName)); } /* - * @see {@link Join} + * @see {@link In} */ - public WikittyQueryMaker join(Element element) { - Condition child = new Join(element); + public WikittyQueryMaker in(Element element) { + Condition child = new In(element); addOnStack(child); return this; } /** - * Close last non terminal condition (or, and, not, join). + * Close last non terminal condition (or, and, not, in). * <li>ex: WikittyQueryMaker().not().rTrue().close().and().rTrue().rFalse().close().or().rTrue().rFalse().close(); * @return */ Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2011-12-30 15:43:37 UTC (rev 1269) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryParser.java 2011-12-30 15:50:02 UTC (rev 1270) @@ -27,7 +27,7 @@ import org.nuiton.wikitty.query.conditions.Not; import org.nuiton.wikitty.query.conditions.NotEquals; import org.nuiton.wikitty.query.conditions.Or; -import org.nuiton.wikitty.query.conditions.Join; +import org.nuiton.wikitty.query.conditions.In; import org.nuiton.wikitty.query.conditions.NotNull; import org.nuiton.wikitty.query.conditions.Null; import org.nuiton.wikitty.query.conditions.True; @@ -65,7 +65,7 @@ public static final String FALSE = "FALSE"; public static final String ID = "id"; - public static final String JOIN = "IN"; + public static final String IN = "IN"; public static final String LITERAL_CLOSE = "\""; public static final String LITERAL_OPEN = "\""; public static final String NULL = "NULL"; @@ -279,8 +279,8 @@ push(new ContainsOne(toElement(pop().toString()), elems.get()))); } Rule associated() { - return Sequence(field(), push(match()), space(), JOIN, space(), term(), - push(new Join(toElement(pop().toString()), (Condition)pop()))); + return Sequence(field(), push(match()), space(), IN, space(), term(), + push(new In(toElement(pop().toString()), (Condition)pop()))); } Rule keyword() { return Sequence(value(), push(new Keyword(removeQuote(match())))); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitor.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitor.java 2011-12-30 15:43:37 UTC (rev 1269) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitor.java 2011-12-30 15:50:02 UTC (rev 1270) @@ -5,7 +5,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.query.conditions.And; -import org.nuiton.wikitty.query.conditions.Join; +import org.nuiton.wikitty.query.conditions.In; import org.nuiton.wikitty.query.conditions.Between; import org.nuiton.wikitty.query.conditions.ContainsAll; import org.nuiton.wikitty.query.conditions.ContainsOne; @@ -112,7 +112,7 @@ * @param o * @return True if we want visit sub-element, otherwize false */ - abstract public boolean visitEnter(Join o); + abstract public boolean visitEnter(In o); /** * Leave method is alway called, but evaluation of enter is passed in * arguement @@ -120,7 +120,7 @@ * @param o * @param enterOrMiddleResult result returned by visitEnter method */ - abstract public void visitLeave(Join o, boolean enterOrMiddleResult); + abstract public void visitLeave(In o, boolean enterOrMiddleResult); /** * True if we want visit sub-element, otherwize false * @param o Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java 2011-12-30 15:43:37 UTC (rev 1269) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorCopy.java 2011-12-30 15:50:02 UTC (rev 1270) @@ -13,7 +13,7 @@ import org.nuiton.wikitty.query.conditions.False; import org.nuiton.wikitty.query.conditions.Greater; import org.nuiton.wikitty.query.conditions.GreaterOrEquals; -import org.nuiton.wikitty.query.conditions.Join; +import org.nuiton.wikitty.query.conditions.In; import org.nuiton.wikitty.query.conditions.Keyword; import org.nuiton.wikitty.query.conditions.Less; import org.nuiton.wikitty.query.conditions.LessOrEquals; @@ -121,13 +121,13 @@ } @Override - public boolean visitEnter(Join o) { - getQueryMaker().join(o.getElement()); + public boolean visitEnter(In o) { + getQueryMaker().in(o.getElement()); return true; } @Override - public void visitLeave(Join o, boolean enterResult) { + public void visitLeave(In o, boolean enterResult) { getQueryMaker().close(); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorToString.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorToString.java 2011-12-30 15:43:37 UTC (rev 1269) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/WikittyQueryVisitorToString.java 2011-12-30 15:50:02 UTC (rev 1270) @@ -3,7 +3,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.wikitty.query.conditions.And; -import org.nuiton.wikitty.query.conditions.Join; +import org.nuiton.wikitty.query.conditions.In; import org.nuiton.wikitty.query.conditions.Between; import org.nuiton.wikitty.query.conditions.ContainsAll; import org.nuiton.wikitty.query.conditions.ContainsOne; @@ -89,13 +89,13 @@ } @Override - public boolean visitEnter(Join o) { - text += o.getElement().getValue() + WikittyQueryParser.JOIN + WikittyQueryParser.BRACKET_OPEN; + public boolean visitEnter(In o) { + text += o.getElement().getValue() + WikittyQueryParser.IN + WikittyQueryParser.BRACKET_OPEN; return true; } @Override - public void visitLeave(Join o, boolean enterResult) { + public void visitLeave(In o, boolean enterResult) { text += WikittyQueryParser.BRACKET_CLOSE; } Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/In.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/In.java (rev 0) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/query/conditions/In.java 2011-12-30 15:50:02 UTC (rev 1270) @@ -0,0 +1,51 @@ +package org.nuiton.wikitty.query.conditions; + +import org.apache.commons.lang.ObjectUtils; + +/** + * In is used to join to Wikitty type. + * + * ex: + * <li> {@link WikittyQueryMaker}.in(myfield).eq(otherwikittyfield, "toto") + * is equivalent to + * <li> {@link WikittyQueryMaker}.containsOne(myfield, id1, id2, id3) + * where [id1, id2, id3] is id retrieved by query eq(otherwikittyfield, "toto") + * + * @author poussin + * @version $Revision$ + * @since 3.3 + * + * Last update: $Date$ + * by : $Author$ + */ +public class In extends ConditionUnary { + + private static final long serialVersionUID = 1L; + + protected Element element; + + public In(Element element) { + this.element = element; + } + + public In(Element element, Condition restriction) { + super(restriction); + this.element = element; + } + + public Element getElement() { + return element; + } + + @Override + boolean equalsDeep(Object other) { + boolean result = super.equalsDeep(other); + if (result) { + In op = (In)other; + result = ObjectUtils.equals(this.getElement(), op.getElement()); + } + return result; + } + + +} Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittyQueryVisitorToSolr.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittyQueryVisitorToSolr.java 2011-12-30 15:43:37 UTC (rev 1269) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/WikittyQueryVisitorToSolr.java 2011-12-30 15:50:02 UTC (rev 1270) @@ -17,7 +17,7 @@ import org.nuiton.wikitty.query.conditions.False; import org.nuiton.wikitty.query.conditions.Greater; import org.nuiton.wikitty.query.conditions.GreaterOrEquals; -import org.nuiton.wikitty.query.conditions.Join; +import org.nuiton.wikitty.query.conditions.In; import org.nuiton.wikitty.query.conditions.Keyword; import org.nuiton.wikitty.query.conditions.Less; import org.nuiton.wikitty.query.conditions.LessOrEquals; @@ -128,7 +128,7 @@ } @Override - public boolean visitEnter(Join o) { + public boolean visitEnter(In o) { WikittyQuery q = new WikittyQuery(o.getSubCondition()).setLimit(Integer.MAX_VALUE); WikittyQueryResult<String> result = solrServer.findAllByQuery(tx, q); @@ -144,7 +144,7 @@ } @Override - public void visitLeave(Join o, boolean enterResult) { + public void visitLeave(In o, boolean enterResult) { // do nothing }
participants (1)
-
bpoussin@users.nuiton.org