Re: svn commit: r1843780 - in /ofbiz/ofbiz-framework/trunk/framework/entity/src: main/java/org/apache/ofbiz/entity/condition/ test/java/org/apache/ofbiz/entity/

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: svn commit: r1843780 - in /ofbiz/ofbiz-framework/trunk/framework/entity/src: main/java/org/apache/ofbiz/entity/condition/ test/java/org/apache/ofbiz/entity/

Jacques Le Roux
Administrator
Hi Gil,

Not yet sure it's only me (Windows) but I get this locally

org.apache.ofbiz.entity.EntityConditionVisitorTests > basicTest FAILED
     org.junit.ComparisonFailure at EntityConditionVisitorTests.java:83

Buildbot should run soon (after r1843921), and tells us...

Jacques


Le 13/10/2018 à 21:50, [hidden email] a écrit :

> Author: pgil
> Date: Sat Oct 13 19:50:27 2018
> New Revision: 1843780
>
> URL: http://svn.apache.org/viewvc?rev=1843780&view=rev
> Log:
> Improved: Rewrite EntityConditionVisitor interface to respect visitor Pattern
> (OFBIZ-10593)
>
> Remove visit methods from current EntityConditionBase type hierarchy.
> Add or rewrite accept method in EntityCondition type hierachy.
> Add documentation in EntityConditionVisitor, introducing implementation examples.
> Add junit test validating documented examples.
> Thanks to Mathieu Lirzin for your contribution, and Jacques for the review.
>
> Added:
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java   (with props)
> Modified:
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityComparisonOperator.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityCondition.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionBuilder.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionFunction.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionList.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionListBase.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionSubSelect.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionValue.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionVisitor.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityDateFilterCondition.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityExpr.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldMap.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldValue.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFunction.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityJoinOperator.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java
>      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityWhereString.java
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityComparisonOperator.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityComparisonOperator.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityComparisonOperator.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityComparisonOperator.java Sat Oct 13 19:50:27 2018
> @@ -78,12 +78,6 @@ public abstract class EntityComparisonOp
>       }
>  
>       @Override
> -    public void visit(EntityConditionVisitor visitor, L lhs, R rhs) {
> -        visitor.accept(lhs);
> -        visitor.accept(rhs);
> -    }
> -
> -    @Override
>       public void addSqlValue(StringBuilder sql, ModelEntity entity, List<EntityConditionParam> entityConditionParams, boolean compat, L lhs, R rhs, Datasource datasourceInfo) {
>  
>           // if this is an IN operator and the rhs Object isEmpty, add "1=0" instead of the normal SQL.  Note that "FALSE" does not work with all databases.
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityCondition.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityCondition.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityCondition.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityCondition.java Sat Oct 13 19:50:27 2018
> @@ -109,9 +109,12 @@ public abstract class EntityCondition ex
>           return makeWhereString(null, new ArrayList<EntityConditionParam>(), null);
>       }
>  
> -    public void accept(EntityConditionVisitor visitor) {
> -        throw new IllegalArgumentException(getClass().getName() + ".accept not implemented");
> -    }
> +    /**
> +     * Applies a visitor to this condition.
> +     *
> +     * @param visitor the visitor to be applied
> +     */
> +    abstract public void accept(EntityConditionVisitor visitor);
>  
>       abstract public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, Datasource datasourceInfo);
>  
> @@ -132,8 +135,4 @@ public abstract class EntityCondition ex
>       abstract public boolean mapMatches(Delegator delegator, Map<String, ? extends Object> map);
>  
>       abstract public EntityCondition freeze();
> -
> -    public void visit(EntityConditionVisitor visitor) {
> -        throw new IllegalArgumentException(getClass().getName() + ".visit not implemented");
> -    }
>   }
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionBuilder.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionBuilder.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionBuilder.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionBuilder.java Sat Oct 13 19:50:27 2018
> @@ -84,6 +84,10 @@ public class EntityConditionBuilder exte
>               return condition.equals(obj);
>           }
>  
> +        @Override
> +        public void accept(EntityConditionVisitor visitor) {
> +            throw new IllegalArgumentException(getClass().getName() + ".accept not implemented");
> +        }
>       }
>  
>       @Override
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionFunction.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionFunction.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionFunction.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionFunction.java Sat Oct 13 19:50:27 2018
> @@ -80,8 +80,8 @@ public abstract class EntityConditionFun
>       }
>  
>       @Override
> -    public void visit(EntityConditionVisitor visitor) {
> -        visitor.acceptEntityConditionFunction(this, condition);
> +    public void accept(EntityConditionVisitor visitor) {
> +        visitor.visit(this);
>       }
>  
>       @Override
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionList.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionList.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionList.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionList.java Sat Oct 13 19:50:27 2018
> @@ -43,6 +43,6 @@ public class EntityConditionList<T exten
>  
>       @Override
>       public void accept(EntityConditionVisitor visitor) {
> -        visitor.acceptEntityConditionList(this);
> +        visitor.visit(this);
>       }
>   }
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionListBase.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionListBase.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionListBase.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionListBase.java Sat Oct 13 19:50:27 2018
> @@ -61,11 +61,6 @@ public abstract class EntityConditionLis
>       }
>  
>       @Override
> -    public void visit(EntityConditionVisitor visitor) {
> -        visitor.acceptEntityJoinOperator(operator, conditionList);
> -    }
> -
> -    @Override
>       public boolean isEmpty() {
>           return operator.isEmpty(conditionList);
>       }
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionSubSelect.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionSubSelect.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionSubSelect.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionSubSelect.java Sat Oct 13 19:50:27 2018
> @@ -146,11 +146,4 @@ public class EntityConditionSubSelect ex
>       public void validateSql(ModelEntity modelEntity) throws GenericModelException {
>           // do nothing for now
>       }
> -
> -    @Override
> -    public void visit(EntityConditionVisitor visitor) {
> -        if (whereCond != null) {
> -            whereCond.visit(visitor);
> -        }
> -    }
>   }
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionValue.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionValue.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionValue.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionValue.java Sat Oct 13 19:50:27 2018
> @@ -45,11 +45,6 @@ public abstract class EntityConditionVal
>           }
>  
>           @Override
> -        public void accept(EntityConditionVisitor visitor) {
> -            visitor.acceptEntityConditionValue(this);
> -        }
> -
> -        @Override
>           public void addSqlValue(StringBuilder sql, Map<String, String> tableAliases, ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, boolean includeTableNamePrefix, Datasource datasourceinfo) {
>               sql.append(value);
>           }
> @@ -77,11 +72,6 @@ public abstract class EntityConditionVal
>           @Override
>           public void validateSql(org.apache.ofbiz.entity.model.ModelEntity modelEntity) {
>           }
> -
> -        @Override
> -        public void visit(EntityConditionVisitor visitor) {
> -            visitor.acceptObject(value);
> -        }
>       }
>  
>       public abstract ModelField getModelField(ModelEntity modelEntity);
> @@ -109,12 +99,6 @@ public abstract class EntityConditionVal
>  
>       public abstract EntityConditionValue freeze();
>  
> -    public abstract void visit(EntityConditionVisitor visitor);
> -
> -    public void accept(EntityConditionVisitor visitor) {
> -        throw new IllegalArgumentException("accept not implemented");
> -    }
> -
>       public void toString(StringBuilder sb) {
>           addSqlValue(sb, null, new ArrayList<EntityConditionParam>(), false, null);
>       }
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionVisitor.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionVisitor.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionVisitor.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionVisitor.java Sat Oct 13 19:50:27 2018
> @@ -1,4 +1,4 @@
> -/*******************************************************************************
> +/*
>    * Licensed to the Apache Software Foundation (ASF) under one
>    * or more contributor license agreements.  See the NOTICE file
>    * distributed with this work for additional information
> @@ -15,40 +15,139 @@
>    * KIND, either express or implied.  See the License for the
>    * specific language governing permissions and limitations
>    * under the License.
> - *******************************************************************************/
> -
> + */
>   package org.apache.ofbiz.entity.condition;
>  
> -import java.util.List;
> -
> +// Keep the tests from EntityConditionVisitorTests in sync with the code examples.
>   /**
> - * <p>Represents the conditions to be used to constrain a query.</p>
> - * <p>An EntityCondition can represent various type of constraints, including:</p>
> - * <ul>
> - *  <li>EntityConditionList: a list of EntityConditions, combined with the operator specified
> - *  <li>EntityExpr: for simple expressions or expressions that combine EntityConditions
> - *  <li>EntityFieldMap: a map of fields where the field (key) equals the value, combined with the operator specified
> - * </ul>
> - * These can be used in various combinations using the EntityConditionList and EntityExpr objects.
> + * A visitor of entity conditions in the style of the visitor design pattern.
> + * <p>
> + * Classes implementing this interface can extend the dynamically dispatched
> + * behavior associated with {@link EntityCondition} without augmenting its
> + * interface.  Those classes are meant be passed to the
> + * {@link EntityCondition#accept(EntityConditionVisitor) accept} method which
> + * calls the corresponding method in the visitor.
> + * <p>
> + * <b>Usage Examples:</b>
> + * Here is a dummy example that should print <i>EntityExpr\n</i> to
> + * the standard output.
> + * <pre>{@code
> + *     EntityExpr expr;
> + *     expr.accept(new EntityConditionVisitor() {
> + *         public void visit(EntityConditionFunction func) {
> + *              system.out.println("EntityConditionFunction");
> + *         }
> + *
> + *         public <T extends EntityCondition> void visit(EntityConditionList<T> l) {
> + *              system.out.println("EntityConditionList");
> + *         }
> + *
> + *         public void visit(EntityFieldMap m) {
> + *             system.out.println("EntityFieldMap");
> + *         }
> + *
> + *         public void visit(EntityDateFilterCondition df) {
> + *              system.out.println("EntityDateFilterCondition");
> + *         }
> + *
> + *         public void visit(EntityExpr expr) {
> + *              system.out.println("EntityExpr");
> + *         }
> + *
> + *         public void visit(EntityWhereString ws) {
> + *              system.out.println("EntityWhereString");
> + *         }
> + *     });
> + * }</pre>
> + * <p>
> + * Here is a more complex example asserting the presence of a raw string condition
> + * even when it is embedded inside another one.
> + * <pre>{@code
> + *     class ContainsRawCondition implements EntityConditionVisitor {
> + *         public boolean hasRawCondition = false;
> + *
> + *         public void visit(EntityConditionFunction func) {}
> + *         public void visit(EntityFieldMap m) {}
> + *         public void visit(EntityDateFilterCondition df) {}
>    *
> + *         public <T extends EntityCondition> void visit(EntityConditionList<T> l) {
> + *             Iterator<T> it = l.getConditionIterator();
> + *             while (it.hasNext()) {
> + *                 it.next().accept(this);
> + *             }
> + *         }
> + *
> + *         public void visit(EntityExpr expr) {
> + *             Object lhs = expr.getLhs();
> + *             Object rhs = expr.getRhs();
> + *             if (lhs instanceof EntityCondition) {
> + *                 ((EntityCondition) lhs).accept(this);
> + *             }
> + *             if (rhs instanceof EntityCondition) {
> + *                 ((EntityCondition) rhs).accept(this);
> + *             }
> + *         }
> + *
> + *         public void visit(EntityWhereString ws) {
> + *             hasRawCondition = true;
> + *         }
> + *     }
> + *
> + *     EntityCondition ec =
> + *         EntityCondition.makeCondition(EntityCondition.makeConditionWhere("foo=bar"));
> + *     EntityConditionVisitor visitor = new ContainsRawCondition();
> + *     ec.accept(visitor);
> + *     assert visitor.hasRawCondition;
> + * }</pre>
> + *
> + * @see EntityCondition
>    */
>   public interface EntityConditionVisitor {
> -    <T> void visit(T obj);
> -    <T> void accept(T obj);
> -    void acceptObject(Object obj);
> -    void acceptEntityCondition(EntityCondition condition);
> -    <T extends EntityCondition> void acceptEntityJoinOperator(EntityJoinOperator op, List<T> conditions);
> -    <L,R,T> void acceptEntityOperator(EntityOperator<L, R, T> op, L lhs, R rhs);
> -    <L,R> void acceptEntityComparisonOperator(EntityComparisonOperator<L, R> op, L lhs, R rhs);
> -    void acceptEntityConditionValue(EntityConditionValue value);
> -    void acceptEntityFieldValue(EntityFieldValue value);
> -
> -    void acceptEntityExpr(EntityExpr expr);
> -    <T extends EntityCondition> void acceptEntityConditionList(EntityConditionList<T> list);
> -    void acceptEntityFieldMap(EntityFieldMap fieldMap);
> -    void acceptEntityConditionFunction(EntityConditionFunction func, EntityCondition nested);
> -    <T extends Comparable<?>> void acceptEntityFunction(EntityFunction<T> func);
> -    void acceptEntityWhereString(EntityWhereString condition);
> +    /**
> +     * Visits an entity condition function.
> +     *
> +     * @param func the visited class
> +     * @see EntityConditionFunction
> +     */
> +    void visit(EntityConditionFunction func);
> +
> +    /**
> +     * Visits a list of entity conditions.
> +     *
> +     * @param l the visited class
> +     * @see EntityConditionList
> +     */
> +    <T extends EntityCondition> void visit(EntityConditionList<T> l);
> +
> +    /**
> +     * Visits a map of entity fields.
> +     *
> +     * @param m the visited class
> +     * @see EntityFieldMap
> +     */
> +    void visit(EntityFieldMap m);
> +
> +    /**
> +     * Visits a date filter condition.
> +     *
> +     * @param df the visited class
> +     * @see EntityDateFilterCondition
> +     */
> +    void visit(EntityDateFilterCondition df);
> +
> +    /**
> +     * Visits an entity expression.
> +     *
> +     * @param expr the visited class
> +     * @see EntityExpr
> +     */
> +    void visit(EntityExpr expr);
>  
> -    void acceptEntityDateFilterCondition(EntityDateFilterCondition condition);
> +    /**
> +     * Visits a raw string condition.
> +     *
> +     * @param ws the visited class
> +     * @see EntityWhereString
> +     */
> +    void visit(EntityWhereString ws);
>   }
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityDateFilterCondition.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityDateFilterCondition.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityDateFilterCondition.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityDateFilterCondition.java Sat Oct 13 19:50:27 2018
> @@ -82,13 +82,8 @@ public final class EntityDateFilterCondi
>       }
>  
>       @Override
> -    public void visit(EntityConditionVisitor visitor) {
> -        visitor.acceptEntityDateFilterCondition(this);
> -    }
> -
> -    @Override
>       public void accept(EntityConditionVisitor visitor) {
> -        visitor.acceptEntityDateFilterCondition(this);
> +        visitor.visit(this);
>       }
>  
>       @Override
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityExpr.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityExpr.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityExpr.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityExpr.java Sat Oct 13 19:50:27 2018
> @@ -149,13 +149,8 @@ public final class EntityExpr extends En
>       }
>  
>       @Override
> -    public void visit(EntityConditionVisitor visitor) {
> -        visitor.acceptEntityOperator(operator, lhs, rhs);
> -    }
> -
> -    @Override
>       public void accept(EntityConditionVisitor visitor) {
> -        visitor.acceptEntityExpr(this);
> +        visitor.visit(this);
>       }
>  
>       public void checkRhsType(ModelEntity modelEntity, Delegator delegator) {
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldMap.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldMap.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldMap.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldMap.java Sat Oct 13 19:50:27 2018
> @@ -74,6 +74,6 @@ public final class EntityFieldMap extend
>  
>       @Override
>       public void accept(EntityConditionVisitor visitor) {
> -        visitor.acceptEntityFieldMap(this);
> +        visitor.visit(this);
>       }
>   }
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldValue.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldValue.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldValue.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldValue.java Sat Oct 13 19:50:27 2018
> @@ -199,16 +199,6 @@ public class EntityFieldValue extends En
>       }
>  
>       @Override
> -    public void visit(EntityConditionVisitor visitor) {
> -        visitor.acceptEntityFieldValue(this);
> -    }
> -
> -    @Override
> -    public void accept(EntityConditionVisitor visitor) {
> -        visitor.acceptEntityFieldValue(this);
> -    }
> -
> -    @Override
>       public EntityConditionValue freeze() {
>           return this;
>       }
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFunction.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFunction.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFunction.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFunction.java Sat Oct 13 19:50:27 2018
> @@ -201,20 +201,6 @@ public abstract class EntityFunction<T e
>       }
>  
>       @Override
> -    public void visit(EntityConditionVisitor visitor) {
> -        if (nested != null) {
> -            visitor.acceptEntityConditionValue(nested);
> -        } else {
> -            visitor.acceptObject(value);
> -        }
> -    }
> -
> -    @Override
> -    public void accept(EntityConditionVisitor visitor) {
> -        visitor.acceptEntityFunction(this);
> -    }
> -
> -    @Override
>       public ModelField getModelField(ModelEntity modelEntity) {
>           if (nested != null) {
>               return nested.getModelField(modelEntity);
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityJoinOperator.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityJoinOperator.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityJoinOperator.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityJoinOperator.java Sat Oct 13 19:50:27 2018
> @@ -96,20 +96,6 @@ public class EntityJoinOperator extends
>           return EntityCondition.makeCondition(newList, this);
>       }
>  
> -    public void visit(EntityConditionVisitor visitor, List<? extends EntityCondition> conditionList) {
> -        if (UtilValidate.isNotEmpty(conditionList)) {
> -            for (EntityCondition condition: conditionList) {
> -                visitor.visit(condition);
> -            }
> -        }
> -    }
> -
> -    @Override
> -    public void visit(EntityConditionVisitor visitor, EntityCondition lhs, EntityCondition rhs) {
> -        lhs.visit(visitor);
> -        visitor.visit(rhs);
> -    }
> -
>       public Boolean eval(GenericEntity entity, EntityCondition lhs, EntityCondition rhs) {
>           return entityMatches(entity, lhs, rhs) ? Boolean.TRUE : Boolean.FALSE;
>       }
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java Sat Oct 13 19:50:27 2018
> @@ -296,7 +296,6 @@ public abstract class EntityOperator<L,
>  
>       public abstract void addSqlValue(StringBuilder sql, ModelEntity entity, List<EntityConditionParam> entityConditionParams, boolean compat, L lhs, R rhs, Datasource datasourceInfo);
>       public abstract EntityCondition freeze(L lhs, R rhs);
> -    public abstract void visit(EntityConditionVisitor visitor, L lhs, R rhs);
>  
>       public static final Comparable<?> WILDCARD = new Comparable<Object>() {
>           public int compareTo(Object obj) {
>
> Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityWhereString.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityWhereString.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityWhereString.java (original)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityWhereString.java Sat Oct 13 19:50:27 2018
> @@ -82,8 +82,8 @@ public final class EntityWhereString ext
>       }
>  
>       @Override
> -    public void visit(EntityConditionVisitor visitor) {
> -        visitor.acceptEntityWhereString(this);
> +    public void accept(EntityConditionVisitor visitor) {
> +        visitor.visit(this);
>       }
>  
>       @Override
>
> Added: ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java
> URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java?rev=1843780&view=auto
> ==============================================================================
> --- ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java (added)
> +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java Sat Oct 13 19:50:27 2018
> @@ -0,0 +1,128 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +package org.apache.ofbiz.entity;
> +
> +import static org.junit.Assert.assertEquals;
> +import static org.junit.Assert.assertTrue;
> +
> +import java.io.ByteArrayOutputStream;
> +import java.io.OutputStream;
> +import java.io.PrintWriter;
> +import java.util.Iterator;
> +
> +import org.apache.ofbiz.entity.condition.EntityComparisonOperator;
> +import org.apache.ofbiz.entity.condition.EntityCondition;
> +import org.apache.ofbiz.entity.condition.EntityConditionFunction;
> +import org.apache.ofbiz.entity.condition.EntityConditionList;
> +import org.apache.ofbiz.entity.condition.EntityConditionVisitor;
> +import org.apache.ofbiz.entity.condition.EntityDateFilterCondition;
> +import org.apache.ofbiz.entity.condition.EntityExpr;
> +import org.apache.ofbiz.entity.condition.EntityFieldMap;
> +import org.apache.ofbiz.entity.condition.EntityWhereString;
> +import org.junit.Test;
> +
> +/* Tests adapted from code examples described in the javadoc of the
> + * EntityConditionVisitor interface.  They should be kept in sync with
> + * those code examples. */
> +public class EntityConditionVisitorTests {
> +
> +    // Checks the dummy visitor example which must print "EntityExpr\n".
> +    @Test
> +    public void basicTest() {
> +        EntityExpr expr = new EntityExpr("foo", EntityComparisonOperator.EQUALS, "bar");
> +        OutputStream os = new ByteArrayOutputStream();
> +        PrintWriter pw = new PrintWriter(os);
> +        expr.accept(new EntityConditionVisitor() {
> +            @Override
> +            public void visit(EntityConditionFunction func) {
> +                pw.println("EntityConditionFunction");
> +            }
> +
> +            @Override
> +            public <T extends EntityCondition> void visit(EntityConditionList<T> l) {
> +                pw.println("EntityConditionList");
> +            }
> +
> +            @Override
> +            public void visit(EntityFieldMap m) {
> +                pw.println("EntityFieldMap");
> +            }
> +
> +            @Override
> +            public void visit(EntityDateFilterCondition df) {
> +                pw.println("EntityDateFilterConfition");
> +            }
> +
> +            @Override
> +            public void visit(EntityExpr expr) {
> +                pw.println("EntityExpr");
> +            }
> +
> +            @Override
> +            public void visit(EntityWhereString ws) {
> +                pw.println("EntityWhereString");
> +            }
> +        });
> +        pw.flush();
> +        assertEquals("EntityExpr\n", os.toString());
> +    }
> +
> +    /* Checks the more complex example which asserts the presence of a raw string
> +     * condition even when it is embedded inside another one. */
> +    @Test
> +    public void complexTest() {
> +        class ContainsRawCondition implements EntityConditionVisitor {
> +            public boolean hasRawCondition = false;
> +
> +            @Override public void visit(EntityConditionFunction func) {}
> +            @Override public void visit(EntityFieldMap m) {}
> +            @Override public void visit(EntityDateFilterCondition df) {}
> +
> +            @Override
> +            public <T extends EntityCondition> void visit(EntityConditionList<T> l) {
> +                Iterator<T> it = l.getConditionIterator();
> +                while (it.hasNext()) {
> +                    it.next().accept(this);
> +                }
> +            }
> +
> +            @Override
> +            public void visit(EntityExpr expr) {
> +                Object lhs = expr.getLhs();
> +                Object rhs = expr.getRhs();
> +                if (lhs instanceof EntityCondition) {
> +                    ((EntityCondition) lhs).accept(this);
> +                }
> +                if (rhs instanceof EntityCondition) {
> +                    ((EntityCondition) rhs).accept(this);
> +                }
> +            }
> +
> +            @Override
> +            public void visit(EntityWhereString ws) {
> +                hasRawCondition = true;
> +            }
> +        }
> +
> +        EntityCondition ec = EntityCondition.makeCondition(EntityCondition.makeConditionWhere("foo=bar"));
> +        ContainsRawCondition visitor = new ContainsRawCondition();
> +        ec.accept(visitor);
> +        assertTrue(visitor.hasRawCondition);
> +    }
> +}
>
> Propchange: ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java
> ------------------------------------------------------------------------------
>      svn:eol-style = native
>
> Propchange: ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java
> ------------------------------------------------------------------------------
>      svn:keywords = Date Rev Author URL Id
>
> Propchange: ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java
> ------------------------------------------------------------------------------
>      svn:mime-type = text/plain
>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: svn commit: r1843780 - in /ofbiz/ofbiz-framework/trunk/framework/entity/src: main/java/org/apache/ofbiz/entity/condition/ test/java/org/apache/ofbiz/entity/

Gil Portenseigne
Hello,
I think that is an incompatibiliy with Windows newline char (\n vs
\r\n).

Thanks for the feedback, I'll improve that soon.

Gil

Le lundi 15 oct. 2018 à 18:09:30 (+0200), Jacques Le Roux a écrit :

> Hi Gil,
>
> Not yet sure it's only me (Windows) but I get this locally
>
> org.apache.ofbiz.entity.EntityConditionVisitorTests > basicTest FAILED
>     org.junit.ComparisonFailure at EntityConditionVisitorTests.java:83
>
> Buildbot should run soon (after r1843921), and tells us...
>
> Jacques
>
>
> Le 13/10/2018 à 21:50, [hidden email] a écrit :
> > Author: pgil
> > Date: Sat Oct 13 19:50:27 2018
> > New Revision: 1843780
> >
> > URL: http://svn.apache.org/viewvc?rev=1843780&view=rev
> > Log:
> > Improved: Rewrite EntityConditionVisitor interface to respect visitor Pattern
> > (OFBIZ-10593)
> >
> > Remove visit methods from current EntityConditionBase type hierarchy.
> > Add or rewrite accept method in EntityCondition type hierachy.
> > Add documentation in EntityConditionVisitor, introducing implementation examples.
> > Add junit test validating documented examples.
> > Thanks to Mathieu Lirzin for your contribution, and Jacques for the review.
> >
> > Added:
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java   (with props)
> > Modified:
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityComparisonOperator.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityCondition.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionBuilder.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionFunction.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionList.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionListBase.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionSubSelect.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionValue.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionVisitor.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityDateFilterCondition.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityExpr.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldMap.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldValue.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFunction.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityJoinOperator.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java
> >      ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityWhereString.java
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityComparisonOperator.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityComparisonOperator.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityComparisonOperator.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityComparisonOperator.java Sat Oct 13 19:50:27 2018
> > @@ -78,12 +78,6 @@ public abstract class EntityComparisonOp
> >       }
> >       @Override
> > -    public void visit(EntityConditionVisitor visitor, L lhs, R rhs) {
> > -        visitor.accept(lhs);
> > -        visitor.accept(rhs);
> > -    }
> > -
> > -    @Override
> >       public void addSqlValue(StringBuilder sql, ModelEntity entity, List<EntityConditionParam> entityConditionParams, boolean compat, L lhs, R rhs, Datasource datasourceInfo) {
> >           // if this is an IN operator and the rhs Object isEmpty, add "1=0" instead of the normal SQL.  Note that "FALSE" does not work with all databases.
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityCondition.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityCondition.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityCondition.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityCondition.java Sat Oct 13 19:50:27 2018
> > @@ -109,9 +109,12 @@ public abstract class EntityCondition ex
> >           return makeWhereString(null, new ArrayList<EntityConditionParam>(), null);
> >       }
> > -    public void accept(EntityConditionVisitor visitor) {
> > -        throw new IllegalArgumentException(getClass().getName() + ".accept not implemented");
> > -    }
> > +    /**
> > +     * Applies a visitor to this condition.
> > +     *
> > +     * @param visitor the visitor to be applied
> > +     */
> > +    abstract public void accept(EntityConditionVisitor visitor);
> >       abstract public String makeWhereString(ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, Datasource datasourceInfo);
> > @@ -132,8 +135,4 @@ public abstract class EntityCondition ex
> >       abstract public boolean mapMatches(Delegator delegator, Map<String, ? extends Object> map);
> >       abstract public EntityCondition freeze();
> > -
> > -    public void visit(EntityConditionVisitor visitor) {
> > -        throw new IllegalArgumentException(getClass().getName() + ".visit not implemented");
> > -    }
> >   }
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionBuilder.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionBuilder.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionBuilder.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionBuilder.java Sat Oct 13 19:50:27 2018
> > @@ -84,6 +84,10 @@ public class EntityConditionBuilder exte
> >               return condition.equals(obj);
> >           }
> > +        @Override
> > +        public void accept(EntityConditionVisitor visitor) {
> > +            throw new IllegalArgumentException(getClass().getName() + ".accept not implemented");
> > +        }
> >       }
> >       @Override
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionFunction.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionFunction.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionFunction.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionFunction.java Sat Oct 13 19:50:27 2018
> > @@ -80,8 +80,8 @@ public abstract class EntityConditionFun
> >       }
> >       @Override
> > -    public void visit(EntityConditionVisitor visitor) {
> > -        visitor.acceptEntityConditionFunction(this, condition);
> > +    public void accept(EntityConditionVisitor visitor) {
> > +        visitor.visit(this);
> >       }
> >       @Override
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionList.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionList.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionList.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionList.java Sat Oct 13 19:50:27 2018
> > @@ -43,6 +43,6 @@ public class EntityConditionList<T exten
> >       @Override
> >       public void accept(EntityConditionVisitor visitor) {
> > -        visitor.acceptEntityConditionList(this);
> > +        visitor.visit(this);
> >       }
> >   }
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionListBase.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionListBase.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionListBase.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionListBase.java Sat Oct 13 19:50:27 2018
> > @@ -61,11 +61,6 @@ public abstract class EntityConditionLis
> >       }
> >       @Override
> > -    public void visit(EntityConditionVisitor visitor) {
> > -        visitor.acceptEntityJoinOperator(operator, conditionList);
> > -    }
> > -
> > -    @Override
> >       public boolean isEmpty() {
> >           return operator.isEmpty(conditionList);
> >       }
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionSubSelect.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionSubSelect.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionSubSelect.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionSubSelect.java Sat Oct 13 19:50:27 2018
> > @@ -146,11 +146,4 @@ public class EntityConditionSubSelect ex
> >       public void validateSql(ModelEntity modelEntity) throws GenericModelException {
> >           // do nothing for now
> >       }
> > -
> > -    @Override
> > -    public void visit(EntityConditionVisitor visitor) {
> > -        if (whereCond != null) {
> > -            whereCond.visit(visitor);
> > -        }
> > -    }
> >   }
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionValue.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionValue.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionValue.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionValue.java Sat Oct 13 19:50:27 2018
> > @@ -45,11 +45,6 @@ public abstract class EntityConditionVal
> >           }
> >           @Override
> > -        public void accept(EntityConditionVisitor visitor) {
> > -            visitor.acceptEntityConditionValue(this);
> > -        }
> > -
> > -        @Override
> >           public void addSqlValue(StringBuilder sql, Map<String, String> tableAliases, ModelEntity modelEntity, List<EntityConditionParam> entityConditionParams, boolean includeTableNamePrefix, Datasource datasourceinfo) {
> >               sql.append(value);
> >           }
> > @@ -77,11 +72,6 @@ public abstract class EntityConditionVal
> >           @Override
> >           public void validateSql(org.apache.ofbiz.entity.model.ModelEntity modelEntity) {
> >           }
> > -
> > -        @Override
> > -        public void visit(EntityConditionVisitor visitor) {
> > -            visitor.acceptObject(value);
> > -        }
> >       }
> >       public abstract ModelField getModelField(ModelEntity modelEntity);
> > @@ -109,12 +99,6 @@ public abstract class EntityConditionVal
> >       public abstract EntityConditionValue freeze();
> > -    public abstract void visit(EntityConditionVisitor visitor);
> > -
> > -    public void accept(EntityConditionVisitor visitor) {
> > -        throw new IllegalArgumentException("accept not implemented");
> > -    }
> > -
> >       public void toString(StringBuilder sb) {
> >           addSqlValue(sb, null, new ArrayList<EntityConditionParam>(), false, null);
> >       }
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionVisitor.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionVisitor.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionVisitor.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityConditionVisitor.java Sat Oct 13 19:50:27 2018
> > @@ -1,4 +1,4 @@
> > -/*******************************************************************************
> > +/*
> >    * Licensed to the Apache Software Foundation (ASF) under one
> >    * or more contributor license agreements.  See the NOTICE file
> >    * distributed with this work for additional information
> > @@ -15,40 +15,139 @@
> >    * KIND, either express or implied.  See the License for the
> >    * specific language governing permissions and limitations
> >    * under the License.
> > - *******************************************************************************/
> > -
> > + */
> >   package org.apache.ofbiz.entity.condition;
> > -import java.util.List;
> > -
> > +// Keep the tests from EntityConditionVisitorTests in sync with the code examples.
> >   /**
> > - * <p>Represents the conditions to be used to constrain a query.</p>
> > - * <p>An EntityCondition can represent various type of constraints, including:</p>
> > - * <ul>
> > - *  <li>EntityConditionList: a list of EntityConditions, combined with the operator specified
> > - *  <li>EntityExpr: for simple expressions or expressions that combine EntityConditions
> > - *  <li>EntityFieldMap: a map of fields where the field (key) equals the value, combined with the operator specified
> > - * </ul>
> > - * These can be used in various combinations using the EntityConditionList and EntityExpr objects.
> > + * A visitor of entity conditions in the style of the visitor design pattern.
> > + * <p>
> > + * Classes implementing this interface can extend the dynamically dispatched
> > + * behavior associated with {@link EntityCondition} without augmenting its
> > + * interface.  Those classes are meant be passed to the
> > + * {@link EntityCondition#accept(EntityConditionVisitor) accept} method which
> > + * calls the corresponding method in the visitor.
> > + * <p>
> > + * <b>Usage Examples:</b>
> > + * Here is a dummy example that should print <i>EntityExpr\n</i> to
> > + * the standard output.
> > + * <pre>{@code
> > + *     EntityExpr expr;
> > + *     expr.accept(new EntityConditionVisitor() {
> > + *         public void visit(EntityConditionFunction func) {
> > + *              system.out.println("EntityConditionFunction");
> > + *         }
> > + *
> > + *         public <T extends EntityCondition> void visit(EntityConditionList<T> l) {
> > + *              system.out.println("EntityConditionList");
> > + *         }
> > + *
> > + *         public void visit(EntityFieldMap m) {
> > + *             system.out.println("EntityFieldMap");
> > + *         }
> > + *
> > + *         public void visit(EntityDateFilterCondition df) {
> > + *              system.out.println("EntityDateFilterCondition");
> > + *         }
> > + *
> > + *         public void visit(EntityExpr expr) {
> > + *              system.out.println("EntityExpr");
> > + *         }
> > + *
> > + *         public void visit(EntityWhereString ws) {
> > + *              system.out.println("EntityWhereString");
> > + *         }
> > + *     });
> > + * }</pre>
> > + * <p>
> > + * Here is a more complex example asserting the presence of a raw string condition
> > + * even when it is embedded inside another one.
> > + * <pre>{@code
> > + *     class ContainsRawCondition implements EntityConditionVisitor {
> > + *         public boolean hasRawCondition = false;
> > + *
> > + *         public void visit(EntityConditionFunction func) {}
> > + *         public void visit(EntityFieldMap m) {}
> > + *         public void visit(EntityDateFilterCondition df) {}
> >    *
> > + *         public <T extends EntityCondition> void visit(EntityConditionList<T> l) {
> > + *             Iterator<T> it = l.getConditionIterator();
> > + *             while (it.hasNext()) {
> > + *                 it.next().accept(this);
> > + *             }
> > + *         }
> > + *
> > + *         public void visit(EntityExpr expr) {
> > + *             Object lhs = expr.getLhs();
> > + *             Object rhs = expr.getRhs();
> > + *             if (lhs instanceof EntityCondition) {
> > + *                 ((EntityCondition) lhs).accept(this);
> > + *             }
> > + *             if (rhs instanceof EntityCondition) {
> > + *                 ((EntityCondition) rhs).accept(this);
> > + *             }
> > + *         }
> > + *
> > + *         public void visit(EntityWhereString ws) {
> > + *             hasRawCondition = true;
> > + *         }
> > + *     }
> > + *
> > + *     EntityCondition ec =
> > + *         EntityCondition.makeCondition(EntityCondition.makeConditionWhere("foo=bar"));
> > + *     EntityConditionVisitor visitor = new ContainsRawCondition();
> > + *     ec.accept(visitor);
> > + *     assert visitor.hasRawCondition;
> > + * }</pre>
> > + *
> > + * @see EntityCondition
> >    */
> >   public interface EntityConditionVisitor {
> > -    <T> void visit(T obj);
> > -    <T> void accept(T obj);
> > -    void acceptObject(Object obj);
> > -    void acceptEntityCondition(EntityCondition condition);
> > -    <T extends EntityCondition> void acceptEntityJoinOperator(EntityJoinOperator op, List<T> conditions);
> > -    <L,R,T> void acceptEntityOperator(EntityOperator<L, R, T> op, L lhs, R rhs);
> > -    <L,R> void acceptEntityComparisonOperator(EntityComparisonOperator<L, R> op, L lhs, R rhs);
> > -    void acceptEntityConditionValue(EntityConditionValue value);
> > -    void acceptEntityFieldValue(EntityFieldValue value);
> > -
> > -    void acceptEntityExpr(EntityExpr expr);
> > -    <T extends EntityCondition> void acceptEntityConditionList(EntityConditionList<T> list);
> > -    void acceptEntityFieldMap(EntityFieldMap fieldMap);
> > -    void acceptEntityConditionFunction(EntityConditionFunction func, EntityCondition nested);
> > -    <T extends Comparable<?>> void acceptEntityFunction(EntityFunction<T> func);
> > -    void acceptEntityWhereString(EntityWhereString condition);
> > +    /**
> > +     * Visits an entity condition function.
> > +     *
> > +     * @param func the visited class
> > +     * @see EntityConditionFunction
> > +     */
> > +    void visit(EntityConditionFunction func);
> > +
> > +    /**
> > +     * Visits a list of entity conditions.
> > +     *
> > +     * @param l the visited class
> > +     * @see EntityConditionList
> > +     */
> > +    <T extends EntityCondition> void visit(EntityConditionList<T> l);
> > +
> > +    /**
> > +     * Visits a map of entity fields.
> > +     *
> > +     * @param m the visited class
> > +     * @see EntityFieldMap
> > +     */
> > +    void visit(EntityFieldMap m);
> > +
> > +    /**
> > +     * Visits a date filter condition.
> > +     *
> > +     * @param df the visited class
> > +     * @see EntityDateFilterCondition
> > +     */
> > +    void visit(EntityDateFilterCondition df);
> > +
> > +    /**
> > +     * Visits an entity expression.
> > +     *
> > +     * @param expr the visited class
> > +     * @see EntityExpr
> > +     */
> > +    void visit(EntityExpr expr);
> > -    void acceptEntityDateFilterCondition(EntityDateFilterCondition condition);
> > +    /**
> > +     * Visits a raw string condition.
> > +     *
> > +     * @param ws the visited class
> > +     * @see EntityWhereString
> > +     */
> > +    void visit(EntityWhereString ws);
> >   }
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityDateFilterCondition.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityDateFilterCondition.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityDateFilterCondition.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityDateFilterCondition.java Sat Oct 13 19:50:27 2018
> > @@ -82,13 +82,8 @@ public final class EntityDateFilterCondi
> >       }
> >       @Override
> > -    public void visit(EntityConditionVisitor visitor) {
> > -        visitor.acceptEntityDateFilterCondition(this);
> > -    }
> > -
> > -    @Override
> >       public void accept(EntityConditionVisitor visitor) {
> > -        visitor.acceptEntityDateFilterCondition(this);
> > +        visitor.visit(this);
> >       }
> >       @Override
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityExpr.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityExpr.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityExpr.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityExpr.java Sat Oct 13 19:50:27 2018
> > @@ -149,13 +149,8 @@ public final class EntityExpr extends En
> >       }
> >       @Override
> > -    public void visit(EntityConditionVisitor visitor) {
> > -        visitor.acceptEntityOperator(operator, lhs, rhs);
> > -    }
> > -
> > -    @Override
> >       public void accept(EntityConditionVisitor visitor) {
> > -        visitor.acceptEntityExpr(this);
> > +        visitor.visit(this);
> >       }
> >       public void checkRhsType(ModelEntity modelEntity, Delegator delegator) {
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldMap.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldMap.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldMap.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldMap.java Sat Oct 13 19:50:27 2018
> > @@ -74,6 +74,6 @@ public final class EntityFieldMap extend
> >       @Override
> >       public void accept(EntityConditionVisitor visitor) {
> > -        visitor.acceptEntityFieldMap(this);
> > +        visitor.visit(this);
> >       }
> >   }
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldValue.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldValue.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldValue.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldValue.java Sat Oct 13 19:50:27 2018
> > @@ -199,16 +199,6 @@ public class EntityFieldValue extends En
> >       }
> >       @Override
> > -    public void visit(EntityConditionVisitor visitor) {
> > -        visitor.acceptEntityFieldValue(this);
> > -    }
> > -
> > -    @Override
> > -    public void accept(EntityConditionVisitor visitor) {
> > -        visitor.acceptEntityFieldValue(this);
> > -    }
> > -
> > -    @Override
> >       public EntityConditionValue freeze() {
> >           return this;
> >       }
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFunction.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFunction.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFunction.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFunction.java Sat Oct 13 19:50:27 2018
> > @@ -201,20 +201,6 @@ public abstract class EntityFunction<T e
> >       }
> >       @Override
> > -    public void visit(EntityConditionVisitor visitor) {
> > -        if (nested != null) {
> > -            visitor.acceptEntityConditionValue(nested);
> > -        } else {
> > -            visitor.acceptObject(value);
> > -        }
> > -    }
> > -
> > -    @Override
> > -    public void accept(EntityConditionVisitor visitor) {
> > -        visitor.acceptEntityFunction(this);
> > -    }
> > -
> > -    @Override
> >       public ModelField getModelField(ModelEntity modelEntity) {
> >           if (nested != null) {
> >               return nested.getModelField(modelEntity);
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityJoinOperator.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityJoinOperator.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityJoinOperator.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityJoinOperator.java Sat Oct 13 19:50:27 2018
> > @@ -96,20 +96,6 @@ public class EntityJoinOperator extends
> >           return EntityCondition.makeCondition(newList, this);
> >       }
> > -    public void visit(EntityConditionVisitor visitor, List<? extends EntityCondition> conditionList) {
> > -        if (UtilValidate.isNotEmpty(conditionList)) {
> > -            for (EntityCondition condition: conditionList) {
> > -                visitor.visit(condition);
> > -            }
> > -        }
> > -    }
> > -
> > -    @Override
> > -    public void visit(EntityConditionVisitor visitor, EntityCondition lhs, EntityCondition rhs) {
> > -        lhs.visit(visitor);
> > -        visitor.visit(rhs);
> > -    }
> > -
> >       public Boolean eval(GenericEntity entity, EntityCondition lhs, EntityCondition rhs) {
> >           return entityMatches(entity, lhs, rhs) ? Boolean.TRUE : Boolean.FALSE;
> >       }
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java Sat Oct 13 19:50:27 2018
> > @@ -296,7 +296,6 @@ public abstract class EntityOperator<L,
> >       public abstract void addSqlValue(StringBuilder sql, ModelEntity entity, List<EntityConditionParam> entityConditionParams, boolean compat, L lhs, R rhs, Datasource datasourceInfo);
> >       public abstract EntityCondition freeze(L lhs, R rhs);
> > -    public abstract void visit(EntityConditionVisitor visitor, L lhs, R rhs);
> >       public static final Comparable<?> WILDCARD = new Comparable<Object>() {
> >           public int compareTo(Object obj) {
> >
> > Modified: ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityWhereString.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityWhereString.java?rev=1843780&r1=1843779&r2=1843780&view=diff
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityWhereString.java (original)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityWhereString.java Sat Oct 13 19:50:27 2018
> > @@ -82,8 +82,8 @@ public final class EntityWhereString ext
> >       }
> >       @Override
> > -    public void visit(EntityConditionVisitor visitor) {
> > -        visitor.acceptEntityWhereString(this);
> > +    public void accept(EntityConditionVisitor visitor) {
> > +        visitor.visit(this);
> >       }
> >       @Override
> >
> > Added: ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java
> > URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java?rev=1843780&view=auto
> > ==============================================================================
> > --- ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java (added)
> > +++ ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java Sat Oct 13 19:50:27 2018
> > @@ -0,0 +1,128 @@
> > +/*
> > + * Licensed to the Apache Software Foundation (ASF) under one
> > + * or more contributor license agreements.  See the NOTICE file
> > + * distributed with this work for additional information
> > + * regarding copyright ownership.  The ASF licenses this file
> > + * to you under the Apache License, Version 2.0 (the
> > + * "License"); you may not use this file except in compliance
> > + * with the License.  You may obtain a copy of the License at
> > + *
> > + * http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing,
> > + * software distributed under the License is distributed on an
> > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> > + * KIND, either express or implied.  See the License for the
> > + * specific language governing permissions and limitations
> > + * under the License.
> > + */
> > +package org.apache.ofbiz.entity;
> > +
> > +import static org.junit.Assert.assertEquals;
> > +import static org.junit.Assert.assertTrue;
> > +
> > +import java.io.ByteArrayOutputStream;
> > +import java.io.OutputStream;
> > +import java.io.PrintWriter;
> > +import java.util.Iterator;
> > +
> > +import org.apache.ofbiz.entity.condition.EntityComparisonOperator;
> > +import org.apache.ofbiz.entity.condition.EntityCondition;
> > +import org.apache.ofbiz.entity.condition.EntityConditionFunction;
> > +import org.apache.ofbiz.entity.condition.EntityConditionList;
> > +import org.apache.ofbiz.entity.condition.EntityConditionVisitor;
> > +import org.apache.ofbiz.entity.condition.EntityDateFilterCondition;
> > +import org.apache.ofbiz.entity.condition.EntityExpr;
> > +import org.apache.ofbiz.entity.condition.EntityFieldMap;
> > +import org.apache.ofbiz.entity.condition.EntityWhereString;
> > +import org.junit.Test;
> > +
> > +/* Tests adapted from code examples described in the javadoc of the
> > + * EntityConditionVisitor interface.  They should be kept in sync with
> > + * those code examples. */
> > +public class EntityConditionVisitorTests {
> > +
> > +    // Checks the dummy visitor example which must print "EntityExpr\n".
> > +    @Test
> > +    public void basicTest() {
> > +        EntityExpr expr = new EntityExpr("foo", EntityComparisonOperator.EQUALS, "bar");
> > +        OutputStream os = new ByteArrayOutputStream();
> > +        PrintWriter pw = new PrintWriter(os);
> > +        expr.accept(new EntityConditionVisitor() {
> > +            @Override
> > +            public void visit(EntityConditionFunction func) {
> > +                pw.println("EntityConditionFunction");
> > +            }
> > +
> > +            @Override
> > +            public <T extends EntityCondition> void visit(EntityConditionList<T> l) {
> > +                pw.println("EntityConditionList");
> > +            }
> > +
> > +            @Override
> > +            public void visit(EntityFieldMap m) {
> > +                pw.println("EntityFieldMap");
> > +            }
> > +
> > +            @Override
> > +            public void visit(EntityDateFilterCondition df) {
> > +                pw.println("EntityDateFilterConfition");
> > +            }
> > +
> > +            @Override
> > +            public void visit(EntityExpr expr) {
> > +                pw.println("EntityExpr");
> > +            }
> > +
> > +            @Override
> > +            public void visit(EntityWhereString ws) {
> > +                pw.println("EntityWhereString");
> > +            }
> > +        });
> > +        pw.flush();
> > +        assertEquals("EntityExpr\n", os.toString());
> > +    }
> > +
> > +    /* Checks the more complex example which asserts the presence of a raw string
> > +     * condition even when it is embedded inside another one. */
> > +    @Test
> > +    public void complexTest() {
> > +        class ContainsRawCondition implements EntityConditionVisitor {
> > +            public boolean hasRawCondition = false;
> > +
> > +            @Override public void visit(EntityConditionFunction func) {}
> > +            @Override public void visit(EntityFieldMap m) {}
> > +            @Override public void visit(EntityDateFilterCondition df) {}
> > +
> > +            @Override
> > +            public <T extends EntityCondition> void visit(EntityConditionList<T> l) {
> > +                Iterator<T> it = l.getConditionIterator();
> > +                while (it.hasNext()) {
> > +                    it.next().accept(this);
> > +                }
> > +            }
> > +
> > +            @Override
> > +            public void visit(EntityExpr expr) {
> > +                Object lhs = expr.getLhs();
> > +                Object rhs = expr.getRhs();
> > +                if (lhs instanceof EntityCondition) {
> > +                    ((EntityCondition) lhs).accept(this);
> > +                }
> > +                if (rhs instanceof EntityCondition) {
> > +                    ((EntityCondition) rhs).accept(this);
> > +                }
> > +            }
> > +
> > +            @Override
> > +            public void visit(EntityWhereString ws) {
> > +                hasRawCondition = true;
> > +            }
> > +        }
> > +
> > +        EntityCondition ec = EntityCondition.makeCondition(EntityCondition.makeConditionWhere("foo=bar"));
> > +        ContainsRawCondition visitor = new ContainsRawCondition();
> > +        ec.accept(visitor);
> > +        assertTrue(visitor.hasRawCondition);
> > +    }
> > +}
> >
> > Propchange: ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java
> > ------------------------------------------------------------------------------
> >      svn:eol-style = native
> >
> > Propchange: ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java
> > ------------------------------------------------------------------------------
> >      svn:keywords = Date Rev Author URL Id
> >
> > Propchange: ofbiz/ofbiz-framework/trunk/framework/entity/src/test/java/org/apache/ofbiz/entity/EntityConditionVisitorTests.java
> > ------------------------------------------------------------------------------
> >      svn:mime-type = text/plain
> >
> >
> >
>
>