Author: pgil
Date: Fri Jan 4 14:57:31 2019
New Revision: 1850378
URL: http://svn.apache.org/viewvc?rev=1850378&view=rev
Log:
Improved: Refactoring ‘EntityCondition’ - Rewrite EntityFieldMap class
(OFBIZ-10691)
Useless explicit type parameters, and ‘this’ has been removed. 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/EntityExpr.java
ofbiz/ofbiz-framework/trunk/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityFieldMap.java
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=1850378&r1=1850377&r2=1850378&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
Fri Jan 4 14:57:31 2019
@@ -20,7 +20,6 @@ package org.apache.ofbiz.entity.conditio
import java.util.Collection;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import java.util.Objects;
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=1850378&r1=1850377&r2=1850378&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
Fri Jan 4 14:57:31 2019
@@ -18,59 +18,115 @@
*******************************************************************************/
package org.apache.ofbiz.entity.condition;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
import org.apache.ofbiz.base.util.UtilGenerics;
import org.apache.ofbiz.entity.util.EntityUtil;
/**
- * Encapsulates simple expressions used for specifying queries
- *
+ * A condition expression corresponding to an unordered collection of
+ * conditions containing two values compared with a comparison operator
+ * and that are joined by an operator.
+ * <p>
+ * The main objective it to express the conjunction or disjunction of a set of
+ * conditions which in the case of conjunction corresponds to SQL expression
+ * of the form {@code foo=bar AND bar=baz AND ...} and where the comparison
+ * operator is {@code =} and the join operator is {@code AND}.
*/
@SuppressWarnings("serial")
public final class EntityFieldMap extends EntityConditionListBase<EntityExpr> {
- private final Map<String, ? extends Object> fieldMap;
-
- public static <V> List<EntityExpr> makeConditionList(Map<String, V>
fieldMap, EntityComparisonOperator<?,V> op) {
- if (fieldMap == null) {
- return Collections.emptyList();
- }
- List<EntityExpr> list = new ArrayList<>(fieldMap.size());
- for (Map.Entry<String, ? extends Object> entry: fieldMap.entrySet()) {
- list.add(EntityCondition.makeCondition(entry.getKey(), op,
entry.getValue()));
- }
- return list;
- }
+ /** The map whose entries correspond to the set of equality checks
conditions. */
+ private final Map<String, ?> fieldMap;
+ /**
+ * Converts a map of condition fields into a list of condition expression.
+ *
+ * @param fieldMap the condition fields
+ * @param op the operator used to compared each entry in the condition
field map.
+ * @return a list of condition expression
+ */
+ private static <V> List<EntityExpr> makeConditionList(Map<String, V>
fieldMap, EntityComparisonOperator<?,V> op) {
+ return (fieldMap == null)
+ ? Collections.emptyList()
+ : fieldMap.entrySet().stream()
+ .map(entry ->
EntityCondition.makeCondition(entry.getKey(), op, entry.getValue()))
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * Constructs a map of fields.
+ *
+ * @param compOp the operator used to compare fields
+ * @param joinOp the operator used to join field comparisons
+ * @param keysValues a list of values that the field map will contain.
+ * This list must be of even length and each successive pair will
+ * be associated in the field map.
+ * @param <V> The type of values that are compared.
+ */
@SafeVarargs
public <V> EntityFieldMap(EntityComparisonOperator<?,?> compOp,
EntityJoinOperator joinOp, V... keysValues) {
- this(EntityUtil.makeFields(keysValues),
UtilGenerics.<EntityComparisonOperator<String,V>>cast(compOp), joinOp);
- }
-
- public <V> EntityFieldMap(Map<String, V> fieldMap,
EntityComparisonOperator<?,?> compOp, EntityJoinOperator joinOp) {
- super(makeConditionList(fieldMap,
UtilGenerics.<EntityComparisonOperator<String,V>>cast(compOp)), joinOp);
- this.fieldMap = fieldMap == null ? Collections.<String,
Object>emptyMap() : fieldMap;
+ this(EntityUtil.makeFields(keysValues), UtilGenerics.cast(compOp),
joinOp);
}
+ /**
+ * Constructs a map of fields.
+ *
+ * @param fieldMap the map containing the fields to compare
+ * @param compOp the operator to compare fields
+ * @param joinOp the operator to join entries in the field map
+ * @param <V> the type of values contained in {@code fieldMap}
+ */
+ public <V> EntityFieldMap(Map<String, V> fieldMap,
EntityComparisonOperator<?,?> compOp,
+ EntityJoinOperator joinOp) {
+ super(makeConditionList(fieldMap, UtilGenerics.cast(compOp)), joinOp);
+ this.fieldMap = (fieldMap == null) ? Collections.emptyMap() : fieldMap;
+ }
+
+ /**
+ * Gets the value associated with field {@code name}.
+ *
+ * @param name the name of the field
+ * @return the value associated with field {@code name}
+ * @throws NullPointerException if the specified name is {@code null}
+ * and the field map does not permit null keys
+ */
public Object getField(String name) {
- return this.fieldMap.get(name);
+ return fieldMap.get(name);
}
+ /**
+ * Checks if the field map contains the field {@code name}.
+ *
+ * @param name the name of the field to search
+ * @return {@code true} if field is defined in the field map
+ * @throws NullPointerException if the specified name is {@code null}
+ * and the field map does not permit null keys
+ */
public boolean containsField(String name) {
- return this.fieldMap.containsKey(name);
+ return fieldMap.containsKey(name);
}
+ /**
+ * Provides an iterator on the fields contained in the field map.
+ *
+ * @return an iterator of fields
+ */
public Iterator<String> getFieldKeyIterator() {
- return Collections.unmodifiableSet(this.fieldMap.keySet()).iterator();
+ return Collections.unmodifiableSet(fieldMap.keySet()).iterator();
}
+ /**
+ * Provides an iterator on the entries contained in the field map.
+ *
+ * @return an iterator of field entries
+ */
public Iterator<Map.Entry<String, ? extends Object>>
getFieldEntryIterator() {
- return Collections.<Map.Entry<String, ? extends
Object>>unmodifiableSet(this.fieldMap.entrySet()).iterator();
+ return Collections.<Map.Entry<String, ? extends
Object>>unmodifiableSet(fieldMap.entrySet()).iterator();
}
@Override