details:   https://code.openbravo.com/erp/devel/pi/rev/b298840f1a24
changeset: 13680:b298840f1a24
user:      Javier Etxarri <javier.echarri <at> openbravo.com>
date:      Fri Sep 09 08:12:33 2011 +0200
summary:   Fixes issue 17778: If you add new field to one selector, this 
doesn't work properly

diffstat:

 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorDataSourceFilter.java
 |  59 ++++++++++
 1 files changed, 59 insertions(+), 0 deletions(-)

diffs (105 lines):

diff -r a9f9739e0a2a -r b298840f1a24 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorDataSourceFilter.java
--- 
a/modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorDataSourceFilter.java
       Fri Sep 09 09:11:11 2011 +0200
+++ 
b/modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorDataSourceFilter.java
       Fri Sep 09 08:12:33 2011 +0200
@@ -20,14 +20,17 @@
 
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.log4j.Logger;
+import org.codehaus.jettison.json.JSONObject;
 import org.hibernate.criterion.Restrictions;
 import org.openbravo.base.model.Entity;
 import org.openbravo.base.model.ModelProvider;
@@ -36,6 +39,7 @@
 import org.openbravo.dal.core.OBContext;
 import org.openbravo.dal.service.OBCriteria;
 import org.openbravo.dal.service.OBDal;
+import org.openbravo.model.ad.datamodel.Column;
 import org.openbravo.service.datasource.DataSourceFilter;
 import org.openbravo.service.json.JsonConstants;
 import org.openbravo.service.json.JsonUtils;
@@ -59,6 +63,7 @@
 
   @Override
   public void doFilter(Map<String, String> parameters, HttpServletRequest 
request) {
+
     final long t1 = System.currentTimeMillis();
 
     try {
@@ -90,6 +95,7 @@
       if (!"Window".equals(requestType)) {
         applyDefaultExpressions(sel, parameters, sfc, request);
       }
+      verifyPropertyTypes(sel, parameters);
 
     } catch (Exception e) {
       log.error("Error executing filter: " + e.getMessage(), e);
@@ -99,6 +105,59 @@
     }
   }
 
+  private void verifyPropertyTypes(Selector sel, Map<String, String> 
parameters) {
+    // TODO Auto-generated method stub
+    String value = parameters.get("criteria");
+    String filteredCriteria = "";
+    String fieldName;
+    Entity entity = ModelProvider.getInstance().getEntityByTableName(
+        sel.getTable().getDBTableName());
+    Entity cEntity = entity;
+    Iterator<Column> ci;
+    try {
+      OBContext.setAdminMode();
+      if (value.contains(JsonConstants.IN_PARAMETER_SEPARATOR)) {
+        final List<String> values = new ArrayList<String>();
+        final String[] separatedValues = 
value.split(JsonConstants.IN_PARAMETER_SEPARATOR);
+        for (String separatedValue : separatedValues) {
+          JSONObject jSONObject = new JSONObject(separatedValue);
+          fieldName = (String) jSONObject.get("fieldName");
+          if (fieldName.contains("_dummy") || fieldName.contains("_identifier")
+              || fieldName.contains("searchKey")) {
+            filteredCriteria += jSONObject.toString() + 
JsonConstants.IN_PARAMETER_SEPARATOR;
+            continue;
+          }
+          String[] fieldNameSplit = fieldName.split("\\.");
+          Property fProp = null;
+          if (fieldNameSplit.length == 1) {
+            fProp = entity.getProperty(fieldName);
+          } else if (fieldNameSplit[(fieldNameSplit.length - 
1)].equals("_identifier")) {
+            filteredCriteria += jSONObject.toString() + 
JsonConstants.IN_PARAMETER_SEPARATOR;
+            continue;
+          } else {
+            for (int i = 0; i < fieldNameSplit.length; i++) {
+              fProp = cEntity.getProperty(fieldNameSplit[i]);
+              if (i != fieldNameSplit.length - 1) {
+                cEntity = fProp.getReferencedProperty().getEntity();
+              }
+            }
+
+            if (fProp.isNumericType() || fProp.isDate()) {
+              log.warn("Bad type in fieldname" + fieldName);
+            } else {
+              filteredCriteria += jSONObject.toString() + 
JsonConstants.IN_PARAMETER_SEPARATOR;
+            }
+          }
+        }
+        parameters.put("criteria", filteredCriteria.substring(0, 
(filteredCriteria.length() - 5)));
+      }
+    } catch (Exception ex) {
+      log.error("Error converting to JSON object: " + ex.getMessage(), ex);
+    } finally {
+      OBContext.restorePreviousMode();
+    }
+  }
+
   /**
    * Evaluates the Selector filter expression and modifies the parameters map 
for data filtering
    */

------------------------------------------------------------------------------
Why Cloud-Based Security and Archiving Make Sense
Osterman Research conducted this study that outlines how and why cloud
computing security and archiving is rapidly being adopted across the IT 
space for its ease of implementation, lower cost, and increased 
reliability. Learn more. http://www.accelacomm.com/jaw/sfnl/114/51425301/
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to