You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2010/04/25 02:26:18 UTC
svn commit: r937727 -
/ofbiz/trunk/framework/common/src/org/ofbiz/common/FindServices.java
Author: adrianc
Date: Sun Apr 25 00:26:18 2010
New Revision: 937727
URL: http://svn.apache.org/viewvc?rev=937727&view=rev
Log:
Small change to FindServices.java - Extracted the parameter parsing code into a separate method so it can be reused.
Modified:
ofbiz/trunk/framework/common/src/org/ofbiz/common/FindServices.java
Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/FindServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/FindServices.java?rev=937727&r1=937726&r2=937727&view=diff
==============================================================================
--- ofbiz/trunk/framework/common/src/org/ofbiz/common/FindServices.java (original)
+++ ofbiz/trunk/framework/common/src/org/ofbiz/common/FindServices.java Sun Apr 25 00:26:18 2010
@@ -202,6 +202,71 @@ public class FindServices {
}
/**
+ * Creates a single <code>EntityCondition</code> based on a set of parameters.
+ *
+ * @param modelField
+ * @param operation
+ * @param fieldValue
+ * @param ignoreCase
+ * @param delegator
+ * @param context
+ * @return
+ */
+ public static EntityCondition createSingleCondition(ModelField modelField, String operation, Object fieldValue, boolean ignoreCase, Delegator delegator, Map<String, ?> context) {
+ EntityCondition cond = null;
+ String fieldName = modelField.getName();
+ EntityComparisonOperator<?, ?> fieldOp = null;
+ if (operation != null) {
+ if (operation.equals("contains")) {
+ fieldOp = EntityOperator.LIKE;
+ fieldValue = "%" + fieldValue + "%";
+ } else if ("not-contains".equals(operation) || "notContains".equals(operation)) {
+ fieldOp = EntityOperator.NOT_LIKE;
+ fieldValue = "%" + fieldValue + "%";
+ } else if (operation.equals("empty")) {
+ return EntityCondition.makeCondition(fieldName, EntityOperator.EQUALS, null);
+ } else if (operation.equals("like")) {
+ fieldOp = EntityOperator.LIKE;
+ fieldValue = fieldValue + "%";
+ } else if ("not-like".equals(operation) || "notLike".equals(operation)) {
+ fieldOp = EntityOperator.NOT_LIKE;
+ fieldValue = fieldValue + "%";
+ } else if (operation.equals("greaterThanFromDayStart")) {
+ String timeStampString = (String) fieldValue;
+ Object startValue = modelField.getModelEntity().convertFieldValue(modelField, dayStart(timeStampString, 0), delegator, context);
+ return EntityCondition.makeCondition(fieldName, EntityOperator.GREATER_THAN_EQUAL_TO, startValue);
+ } else if (operation.equals("sameDay")) {
+ String timeStampString = (String) fieldValue;
+ Object startValue = modelField.getModelEntity().convertFieldValue(modelField, dayStart(timeStampString, 0), delegator, context);
+ EntityCondition startCond = EntityCondition.makeCondition(fieldName, EntityOperator.GREATER_THAN_EQUAL_TO, startValue);
+ Object endValue = modelField.getModelEntity().convertFieldValue(modelField, dayStart(timeStampString, 1), delegator, context);
+ EntityCondition endCond = EntityCondition.makeCondition(fieldName, EntityOperator.LESS_THAN, endValue);
+ return EntityCondition.makeCondition(startCond, endCond);
+ } else {
+ fieldOp = entityOperators.get(operation);
+ }
+ } else {
+ fieldOp = EntityOperator.EQUALS;
+ }
+ Object fieldObject = fieldValue;
+ if (fieldOp != EntityOperator.IN || !(fieldValue instanceof Collection<?>)) {
+ fieldObject = modelField.getModelEntity().convertFieldValue(modelField, fieldValue, delegator, context);
+ }
+ if (ignoreCase && fieldObject instanceof String) {
+ cond = EntityCondition.makeCondition(EntityFunction.UPPER_FIELD(fieldName), fieldOp, EntityFunction.UPPER(((String)fieldValue).toUpperCase()));
+ } else {
+ if (fieldObject.equals(GenericEntity.NULL_FIELD.toString())) {
+ fieldObject = null;
+ }
+ cond = EntityCondition.makeCondition(fieldName, fieldOp, fieldObject);
+ }
+ if (EntityOperator.NOT_EQUAL.equals(fieldOp) && fieldObject != null) {
+ cond = EntityCondition.makeCondition(UtilMisc.toList(cond, EntityCondition.makeCondition(fieldName, null)), EntityOperator.OR);
+ }
+ return cond;
+ }
+
+ /**
* createCondition, comparing the normalizedFields with the list of keys, .
*
* This is use to the generic method that expects entity data affixed with special suffixes
@@ -216,7 +281,7 @@ public class FindServices {
EntityComparisonOperator<?, ?> fieldOp = null;
Object fieldValue = null; // If it is a "value" field, it will be the value to be used in the query.
// If it is an "op" field, it will be "equals", "greaterThan", etc.
- EntityExpr cond = null;
+ EntityCondition cond = null;
List<EntityCondition> tmpList = FastList.newInstance();
String opString = null;
boolean ignoreCase = false;
@@ -227,138 +292,27 @@ public class FindServices {
if (subMap == null) {
continue;
}
-
subMap2 = subMap.get("fld0");
- opString = (String) subMap2.get("op");
- ignoreCase = "Y".equals(subMap2.get("ic"));
-
- if (opString != null) {
- if (opString.equals("contains")) {
- fieldOp = EntityOperator.LIKE;
- } else if (opString.equals("not-contains")) {
- fieldOp = EntityOperator.NOT_LIKE;
- } else if (opString.equals("empty")) {
- fieldOp = EntityOperator.EQUALS;
- } else {
- fieldOp = entityOperators.get(opString);
- }
- } else {
- fieldOp = EntityOperator.EQUALS;
- }
-
fieldValue = subMap2.get("value");
if (fieldValue == null) {
continue;
}
-
- if (opString != null) {
- if (opString.equals("contains")) {
- fieldOp = EntityOperator.LIKE;
- fieldValue = "%" + fieldValue + "%";
- } else if ("not-contains".equals(opString) || "notContains".equals(opString)) {
- fieldOp = EntityOperator.NOT_LIKE;
- fieldValue = "%" + fieldValue + "%";
- } else if (opString.equals("empty")) {
- fieldOp = EntityOperator.EQUALS;
- fieldValue = null;
- ignoreCase = false;
- } else if (opString.equals("like")) {
- fieldOp = EntityOperator.LIKE;
- fieldValue = fieldValue + "%";
- } else if ("not-like".equals(opString) || "notLike".equals(opString)) {
- fieldOp = EntityOperator.NOT_LIKE;
- fieldValue = fieldValue + "%";
- } else if (opString.equals("greaterThanFromDayStart")) {
- fieldValue = dayStart((String) fieldValue, 0);
- fieldOp = EntityOperator.GREATER_THAN;
- ignoreCase = false;
- } else if (opString.equals("sameDay")) {
- String timeStampString = (String) fieldValue;
- fieldValue = dayStart(timeStampString, 0);
- fieldOp = EntityOperator.GREATER_THAN_EQUAL_TO;
- ignoreCase = false;
- // Set up so next part finds ending conditions for same day
- subMap2 = subMap.get("fld1");
- if (subMap2 == null) {
- subMap2 = FastMap.newInstance();
- subMap.put("fld1", subMap2);
- }
- String endOfDay = dayStart(timeStampString, 1);
- subMap2.put("value", endOfDay);
- subMap2.put("op", "lessThan");
- } else {
- fieldOp = entityOperators.get(opString);
- }
- } else {
- fieldOp = EntityOperator.EQUALS;
- }
-
- Object fieldObject = null;
- if (fieldOp != EntityOperator.IN || ! (fieldValue instanceof Collection<?>)) {
- fieldObject = modelEntity.convertFieldValue(modelField, fieldValue, delegator, context);
- } else {
- fieldObject = fieldValue;
- }
-
- if (ignoreCase && fieldObject instanceof String) {
- cond = EntityCondition.makeCondition(EntityFunction.UPPER_FIELD(fieldName), fieldOp, EntityFunction.UPPER(((String)fieldValue).toUpperCase()));
- } else {
- if (fieldObject.equals(GenericEntity.NULL_FIELD.toString())) {
- fieldObject = null;
- }
- cond = EntityCondition.makeCondition(fieldName, fieldOp, fieldObject);
- }
-
- if (EntityOperator.NOT_EQUAL.equals(fieldOp) && fieldObject != null) {
- tmpList.add(EntityCondition.makeCondition(UtilMisc.toList(cond, EntityCondition.makeCondition(fieldName, null)), EntityOperator.OR));
- } else {
- tmpList.add(cond);
- }
-
- // Repeat above operations if there is a "range" - second value
+ opString = (String) subMap2.get("op");
+ ignoreCase = "Y".equals(subMap2.get("ic"));
+ cond = createSingleCondition(modelField, opString, fieldValue, ignoreCase, delegator, context);
+ tmpList.add(cond);
subMap2 = subMap.get("fld1");
if (subMap2 == null) {
continue;
}
- opString = (String) subMap2.get("op");
-
- if (opString != null) {
- if (opString.equals("contains")) {
- fieldOp = EntityOperator.LIKE;
- } else if ("not-contains".equals(opString) || "notContains".equals(opString)) {
- fieldOp = EntityOperator.LIKE;
- } else if (opString.equals("empty")) {
- fieldOp = EntityOperator.EQUALS;
- } else {
- fieldOp = entityOperators.get(opString);
- }
- } else {
- fieldOp = EntityOperator.EQUALS;
- }
-
- fieldValue = (String) subMap2.get("value");
+ fieldValue = subMap2.get("value");
if (fieldValue == null) {
continue;
}
- if ("like".equals(opString) || "not-like".equals(opString) || "notLike".equals(opString)) {
- fieldValue = fieldValue + "%";
- } else if ("contains".equals(opString) || "not-contains".equals(opString) || "notContains".equals(opString)) {
- fieldValue = fieldValue + "%" + fieldValue + "%";
- } else if (opString.equals("empty")) {
- fieldOp = EntityOperator.EQUALS;
- fieldValue = null;
- } else if (opString.equals("upToDay")) {
- fieldValue = dayStart((String) fieldValue, 0);
- fieldOp = EntityOperator.LESS_THAN;
- } else if (opString.equals("upThruDay")) {
- fieldValue = dayStart((String) fieldValue, 1);
- fieldOp = EntityOperator.LESS_THAN;
- }
- // String rhs = fieldValue.toString();
- fieldObject = modelEntity.convertFieldValue(modelField, fieldValue, delegator, context);
- cond = EntityCondition.makeCondition(fieldName, fieldOp, fieldObject);
+ opString = (String) subMap2.get("op");
+ ignoreCase = "Y".equals(subMap2.get("ic"));
+ cond = createSingleCondition(modelField, opString, fieldValue, ignoreCase, delegator, context);
tmpList.add(cond);
-
// add to queryStringMap
List<Object[]> origList = origValueMap.get(fieldName);
if (UtilValidate.isNotEmpty(origList)) {