details:   /erp/devel/pi/rev/b1a5f3c08e48
changeset: 9156:b1a5f3c08e48
user:      Antonio Moreno <antonio.moreno <at> openbravo.com>
date:      Wed Dec 15 16:20:49 2010 +0100
summary:   Reformated FIC main class code for greater clarity.

details:   /erp/devel/pi/rev/3070b7a272f4
changeset: 9157:3070b7a272f4
user:      Antonio Moreno <antonio.moreno <at> openbravo.com>
date:      Wed Dec 15 18:12:56 2010 +0100
summary:   Modified Javascript parser calls so that they use the external Rhino 
implementation instead of the internal JVM one to improve compatibility between 
different environments.

diffstat:

 
modules/org.openbravo.client.application/src/org/openbravo/client/application/window/FormInitializationComponent.java
 |  149 +++++----
 1 files changed, 79 insertions(+), 70 deletions(-)

diffs (243 lines):

diff -r f8e165d64b77 -r 3070b7a272f4 
modules/org.openbravo.client.application/src/org/openbravo/client/application/window/FormInitializationComponent.java
--- 
a/modules/org.openbravo.client.application/src/org/openbravo/client/application/window/FormInitializationComponent.java
     Wed Dec 15 18:01:29 2010 +0100
+++ 
b/modules/org.openbravo.client.application/src/org/openbravo/client/application/window/FormInitializationComponent.java
     Wed Dec 15 18:12:56 2010 +0100
@@ -29,9 +29,6 @@
 import java.util.Map;
 import java.util.Vector;
 
-import javax.script.ScriptEngine;
-import javax.script.ScriptEngineManager;
-import javax.script.ScriptException;
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -41,7 +38,9 @@
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
 import org.hibernate.criterion.Expression;
+import org.mozilla.javascript.Context;
 import org.mozilla.javascript.NativeArray;
+import org.mozilla.javascript.Scriptable;
 import org.openbravo.base.exception.OBException;
 import org.openbravo.base.model.Entity;
 import org.openbravo.base.model.ModelProvider;
@@ -82,7 +81,7 @@
     this.response = response1;
     this.context = context;
     HashMap<String, Object> parameters = new HashMap<String, Object>();
-    parameters.put("MODE", "EDIT");
+    parameters.put("MODE", "NEW");
     parameters.put("TAB_ID", "186");
     parameters.put("ROW_ID", "1000019");
     JSONObject obj = execute(parameters, null);
@@ -128,80 +127,40 @@
       if (parentTab != null && parentRecord != null) {
         setSessionValues(parentRecord, parentTab);
       }
-      ArrayList<String> columns = new ArrayList<String>();
       HashMap<String, JSONObject> columnValues = new HashMap<String, 
JSONObject>();
-      HashMap<String, List<String>> columnsInValidation = new HashMap<String, 
List<String>>();
-      HashMap<String, String> validations = new HashMap<String, String>();
       HashMap<String, Field> columnsOfFields = new HashMap<String, Field>();
-
-      // Calculation of validation dependencies
+      ArrayList<String> allColumns = new ArrayList<String>();
+      ArrayList<String> calloutsToCall = new ArrayList<String>();
 
       long iniTime = System.currentTimeMillis();
       List<Field> fields = tab.getADFieldList();
-      List<String> columnsWithValidation = new ArrayList<String>();
+
       for (Field field : fields) {
-        String columnName = field.getColumn().getDBColumnName();
-        columns.add(columnName);
-        columnsOfFields.put(columnName, field);
-        if (field.getColumn().getValidation() != null) {
-          columnsWithValidation.add(field.getColumn().getDBColumnName());
-          validations.put(field.getColumn().getDBColumnName(), 
getValidation(field));
-        }
-        if (field.getColumn().getDefaultValue() != null) {
-          // System.out.println(field.getColumn().getDBColumnName() + "   -   "
-          // + field.getColumn().getDefaultValue());
-        }
+        columnsOfFields.put(field.getColumn().getDBColumnName(), field);
       }
 
-      for (String column : columnsWithValidation) {
-        columnsInValidation.put(column, parseValidation(column, 
validations.get(column),
-            columnsWithValidation));
-      }
+      // Calculation of validation dependencies
+      computeListOfColumnsSortedByValidationDependencies(tab, allColumns);
 
-      ArrayList<String> sortedColumns = new ArrayList<String>();
-      String nonDepColumn = pickNonDependantColumn(sortedColumns, 
columnsWithValidation,
-          columnsInValidation);
-      while (nonDepColumn != null) {
-        sortedColumns.add(nonDepColumn);
-        nonDepColumn = pickNonDependantColumn(sortedColumns, 
columnsWithValidation,
-            columnsInValidation);
-      }
-
-      String cycleCols = "";
-      for (String col : columnsWithValidation) {
-        if (!sortedColumns.contains(col)) {
-          cycleCols += "," + col;
-        }
-      }
-      if (!cycleCols.equals("")) {
-        throw new OBException("Error. The columns " + cycleCols.substring(1)
-            + " have validations which form a cycle.");
-      }
-
-      // Next step is to calculate the values for the columns
-      ArrayList<String> calloutsToCall = new ArrayList<String>();
-      ArrayList<String> allColumns = new ArrayList<String>();
-      // we add the columns not included in the sortedColumns
-      // (the ones which don't have validations)
-      for (Field field : fields) {
-        if (!sortedColumns.contains(field.getColumn().getDBColumnName())) {
-          allColumns.add(field.getColumn().getDBColumnName());
-        }
-      }
-      allColumns.addAll(sortedColumns);
-
+      // Column values are set in the RequestContext
       for (String col : allColumns) {
         Field field = columnsOfFields.get(col);
         try {
           String columnId = field.getColumn().getId();
           UIDefinition uiDef = 
UIDefinitionController.getInstance().getUIDefinition(columnId);
-          String value;
+          String value = null;
           if (mode.equals("NEW")) {
+            // On NEW mode, the values are computed through the UIDefinition 
(the defaults will be
+            // used)
             value = uiDef.getFieldProperties(field, false);
-          } else {
+          } else if (mode.equals("EDIT")) {
+            // On EDIT mode, the values are retrieved from the database row
             BaseOBObject obj = 
OBDal.getInstance().get(tab.getTable().getName(), rowId);
             setValueOfColumnInRequest(obj, 
field.getColumn().getDBColumnName());
             value = uiDef.getFieldProperties(field, true);
+          } else if (mode.equals("CHANGE") || (mode.equals("SETSESSION"))) {
+            // On CHANGE and SETSESSION mode, the values are read from the 
request
+            // TODO this is pending
           }
           JSONObject jsonobject = new JSONObject(value);
           columnValues.put("inp"
@@ -229,7 +188,7 @@
         }
       }
 
-      // Next step is to compute the Auxiliary Input values
+      // Computation of the Auxiliary Input values
       OBCriteria<AuxiliaryInput> auxInC = 
OBDal.getInstance().createCriteria(AuxiliaryInput.class);
       auxInC.add(Expression.eq(AuxiliaryInput.PROPERTY_TAB, tab));
       List<AuxiliaryInput> auxInputs = auxInC.list();
@@ -246,10 +205,8 @@
         RequestContext.get().setRequestParameter(
             "inp" + Sqlc.TransformaNombreColumna(auxIn.getName()),
             value == null ? null : value.toString());
-      }
-      // Now we insert session values for auxiliary inputs
-      if (mode.equals("NEW") || mode.equals("EDIT") || 
mode.equals("SETSESSION")) {
-        for (AuxiliaryInput auxIn : auxInputs) {
+        // Now we insert session values for auxiliary inputs
+        if (mode.equals("NEW") || mode.equals("EDIT") || 
mode.equals("SETSESSION")) {
           setSessionValue(tab.getWindow().getId() + "|" + auxIn.getName(), 
columnValues.get("inp"
               + Sqlc.TransformaNombreColumna(auxIn.getName())));
         }
@@ -267,6 +224,7 @@
       // }
 
       ArrayList<String> messages = new ArrayList<String>();
+
       if (mode.equals("NEW")) {
         for (Field field : fields) {
           if (field.getColumn().getCallout() != null) {
@@ -332,6 +290,57 @@
     return null;
   }
 
+  private void computeListOfColumnsSortedByValidationDependencies(Tab tab,
+      ArrayList<String> allColumns) {
+    List<Field> fields = tab.getADFieldList();
+    ArrayList<String> columns = new ArrayList<String>();
+    HashMap<String, List<String>> columnsInValidation = new HashMap<String, 
List<String>>();
+    List<String> columnsWithValidation = new ArrayList<String>();
+    HashMap<String, String> validations = new HashMap<String, String>();
+    for (Field field : fields) {
+      String columnName = field.getColumn().getDBColumnName();
+      columns.add(columnName);
+      if (field.getColumn().getValidation() != null) {
+        columnsWithValidation.add(field.getColumn().getDBColumnName());
+        validations.put(field.getColumn().getDBColumnName(), 
getValidation(field));
+      }
+    }
+
+    for (String column : columnsWithValidation) {
+      columnsInValidation.put(column, parseValidation(column, 
validations.get(column),
+          columnsWithValidation));
+    }
+
+    ArrayList<String> sortedColumns = new ArrayList<String>();
+    String nonDepColumn = pickNonDependantColumn(sortedColumns, 
columnsWithValidation,
+        columnsInValidation);
+    while (nonDepColumn != null) {
+      sortedColumns.add(nonDepColumn);
+      nonDepColumn = pickNonDependantColumn(sortedColumns, 
columnsWithValidation,
+          columnsInValidation);
+    }
+
+    String cycleCols = "";
+    for (String col : columnsWithValidation) {
+      if (!sortedColumns.contains(col)) {
+        cycleCols += "," + col;
+      }
+    }
+    if (!cycleCols.equals("")) {
+      throw new OBException("Error. The columns " + cycleCols.substring(1)
+          + " have validations which form a cycle.");
+    }
+
+    // we add the columns not included in the sortedColumns
+    // (the ones which don't have validations)
+    for (Field field : fields) {
+      if (!sortedColumns.contains(field.getColumn().getDBColumnName())) {
+        allColumns.add(field.getColumn().getDBColumnName());
+      }
+    }
+    allColumns.addAll(sortedColumns);
+  }
+
   private void setValueOfColumnInRequest(BaseOBObject obj, String columnName) {
     Entity entity = obj.getEntity();
     Object currentValue = 
obj.get(entity.getPropertyByColumnName(columnName).getName());
@@ -571,12 +580,12 @@
     if (!resp.contains("new Array(")) {
       return null;
     }
-    final ScriptEngineManager manager = new ScriptEngineManager();
-    final ScriptEngine engine = manager.getEngineByName("JavaScript");
+    Context cx = Context.enter();
+    Scriptable scope = cx.initStandardObjects();
+    cx.evaluateString(scope, resp, "<cmd>", 1, null);
     try {
-      engine.eval(resp);
-      Object oresp = engine.getContext().getAttribute("respuesta");
-      Object calloutName = engine.getContext().getAttribute("calloutName");
+      NativeArray oresp = (NativeArray) scope.get("respuesta", scope);
+      Object calloutName = scope.get("calloutName", scope);
       String calloutNameS = calloutName == null ? null : 
calloutName.toString();
       System.out.println("CALLOUT NAME: " + calloutNameS);
       NativeArray array = (NativeArray) oresp;
@@ -584,7 +593,7 @@
         returnedArray.add((NativeArray) array.get(i, null));
       }
       return calloutNameS;
-    } catch (ScriptException e) {
+    } catch (Exception e) {
       log.error("Couldn't parse callout response. The parsed response was: " + 
resp, e);
     }
     return null;

------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to