You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by pg...@apache.org on 2019/01/04 14:59:03 UTC

svn commit: r1850383 - /ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityDateFilterCondition.java

Author: pgil
Date: Fri Jan  4 14:59:03 2019
New Revision: 1850383

URL: http://svn.apache.org/viewvc?rev=1850383&view=rev
Log:
Improved: Refactoring ‘EntityCondition’ - Rewrite EntityDateFilterCondition class
(OFBIZ-10691)

The ‘makeCondition’ methods has been simplified and the javadoc has·
been expanded.

Thanks Mathieu for the contribution

Modified:
    ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityDateFilterCondition.java

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=1850383&r1=1850382&r2=1850383&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 Fri Jan  4 14:59:03 2019
@@ -19,7 +19,6 @@
 package org.apache.ofbiz.entity.condition;
 
 import java.sql.Timestamp;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -31,15 +30,26 @@ import org.apache.ofbiz.entity.config.mo
 import org.apache.ofbiz.entity.model.ModelEntity;
 
 /**
- * Date-range condition.
- *
+ * Represents Date-range condition expression.
+ * <p>
+ * This is used to filter rows that are valid in a particular range.
  */
 @SuppressWarnings("serial")
 public final class EntityDateFilterCondition implements EntityCondition {
-
+    /** The column containing dates before which a row is considered invalid.  */
     private final String fromDateName;
+    /** The column containing dates after which a row is considered invalid.  */
     private final String thruDateName;
 
+    /**
+     * Constructs a condition expression to filter rows that are currently valid.
+     *
+     * This means that we remove rows whose from/thru date range does not match the current date.
+     * The <i>current date</i> is the one computed when the SQL query is generated.
+     *
+     * @param fromDateName the name of the field corresponding to the from date
+     * @param thruDateName the name of the field corresponding to the thru date
+     */
     public EntityDateFilterCondition(String fromDateName, String thruDateName) {
         this.fromDateName = fromDateName;
         this.thruDateName = thruDateName;
@@ -92,29 +102,40 @@ public final class EntityDateFilterCondi
         return this;
     }
 
-    protected EntityCondition makeCondition() {
-        return makeCondition(UtilDateTime.nowTimestamp(), fromDateName, thruDateName);
-    }
-
     @Override
     public String toString() {
         return makeWhereString();
     }
 
-    public static EntityExpr makeCondition(Timestamp moment, String fromDateName, String thruDateName) {
+    /**
+     * Constructs a condition expression to filter rows that are valid now.
+     *
+     * @return a condition expression filtering rows that are currently valid
+     */
+    private EntityCondition makeCondition() {
+        return makeCondition(UtilDateTime.nowTimestamp(), fromDateName, thruDateName);
+    }
+
+    /**
+     * Constructs a condition expression to filter rows that are valid at a given time stamp.
+     *
+     * This means that we remove rows whose from/thru date range does not match the time stamp.
+     *
+     * @param moment the time stamp used to check validity
+     * @param fromDateName the name of the field corresponding to the from date
+     * @param thruDateName the name of the field corresponding to the thru date
+     * @return a condition expression filtering rows that are currently valid
+     */
+    public static EntityCondition makeCondition(Timestamp moment, String fromDateName, String thruDateName) {
         return EntityCondition.makeCondition(
-            EntityCondition.makeCondition(
-                EntityCondition.makeCondition(thruDateName, EntityOperator.EQUALS, null),
-                EntityOperator.OR,
-                EntityCondition.makeCondition(thruDateName, EntityOperator.GREATER_THAN, moment)
-           ),
-            EntityOperator.AND,
-            EntityCondition.makeCondition(
-                EntityCondition.makeCondition(fromDateName, EntityOperator.EQUALS, null),
-                EntityOperator.OR,
-                EntityCondition.makeCondition(fromDateName, EntityOperator.LESS_THAN_EQUAL_TO, moment)
-           )
-      );
+                EntityCondition.makeCondition(
+                        EntityCondition.makeCondition(thruDateName, null),
+                        EntityOperator.OR,
+                        EntityCondition.makeCondition(thruDateName, EntityOperator.GREATER_THAN, moment)),
+                EntityCondition.makeCondition(
+                        EntityCondition.makeCondition(fromDateName, null),
+                        EntityOperator.OR,
+                        EntityCondition.makeCondition(fromDateName, EntityOperator.LESS_THAN_EQUAL_TO, moment)));
     }
 
     /**
@@ -133,49 +154,21 @@ public final class EntityDateFilterCondi
      * @param thruDateName  The name of the field containing the entity's "thruDate"
      * @return EntityCondition representing the date range filter
      */
-    public static EntityCondition makeRangeCondition(Timestamp rangeStart, Timestamp rangeEnd, String fromDateName, String thruDateName) {
-        List<EntityCondition> criteria = new LinkedList<>();
-        // fromDate is equal to or after rangeStart but before rangeEnd
-        criteria.add(
+    public static EntityCondition makeRangeCondition(Timestamp rangeStart, Timestamp rangeEnd, String fromDateName,
+            String thruDateName) {
+        return EntityCondition.makeCondition(EntityOperator.OR,
+                EntityCondition.makeConditionMap(thruDateName, null, fromDateName, null),
                 EntityCondition.makeCondition(
                         EntityCondition.makeCondition(fromDateName, EntityOperator.GREATER_THAN_EQUAL_TO, rangeStart),
-                        EntityOperator.AND,
-                        EntityCondition.makeCondition(fromDateName, EntityOperator.LESS_THAN, rangeEnd)
-                )
-        );
-        // thruDate is equal to or after rangeStart but before rangeEnd
-        criteria.add(
+                        EntityCondition.makeCondition(fromDateName, EntityOperator.LESS_THAN, rangeEnd)),
                 EntityCondition.makeCondition(
                         EntityCondition.makeCondition(thruDateName, EntityOperator.GREATER_THAN_EQUAL_TO, rangeStart),
-                        EntityOperator.AND,
-                        EntityCondition.makeCondition(thruDateName, EntityOperator.LESS_THAN, rangeEnd)
-                )
-        );
-        // fromDate is null and thruDate is equal to or after rangeStart
-        criteria.add(
-                EntityCondition.makeCondition(
-                        EntityCondition.makeCondition(fromDateName, EntityOperator.EQUALS, null),
-                        EntityOperator.AND,
-                        EntityCondition.makeCondition(thruDateName, EntityOperator.GREATER_THAN_EQUAL_TO, rangeStart)
-                )
-        );
-        // thruDate is null and fromDate is before rangeEnd
-        criteria.add(
-                EntityCondition.makeCondition(
-                        EntityCondition.makeCondition(thruDateName, EntityOperator.EQUALS, null),
-                        EntityOperator.AND,
-                        EntityCondition.makeCondition(fromDateName, EntityOperator.LESS_THAN, rangeEnd)
-                )
-        );
-        // fromDate is null and thruDate is null
-        criteria.add(
-                EntityCondition.makeCondition(
-                        EntityCondition.makeCondition(thruDateName, EntityOperator.EQUALS, null),
-                        EntityOperator.AND,
-                        EntityCondition.makeCondition(fromDateName, EntityOperator.EQUALS, null)
-                )
-        );
-        // require at least one of the above to be true
-        return EntityCondition.makeCondition(criteria, EntityOperator.OR);
+                        EntityCondition.makeCondition(thruDateName, EntityOperator.LESS_THAN, rangeEnd)),
+                EntityCondition.makeCondition(
+                        EntityCondition.makeCondition(fromDateName, null),
+                        EntityCondition.makeCondition(thruDateName, EntityOperator.GREATER_THAN_EQUAL_TO, rangeStart)),
+                EntityCondition.makeCondition(
+                        EntityCondition.makeCondition(thruDateName, null),
+                        EntityCondition.makeCondition(fromDateName, EntityOperator.LESS_THAN, rangeEnd)));
     }
 }