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