details:   https://code.openbravo.com/erp/devel/pi/rev/39a08f4bf306
changeset: 17738:39a08f4bf306
user:      Antonio Moreno <antonio.moreno <at> openbravo.com>
date:      Wed Aug 22 10:05:16 2012 +0200
summary:   Fixed issue 21277. Added call method to CallStoredProcedure which 
supports calling of procedures in Oracle.

diffstat:

 src/org/openbravo/costing/CostingAlgorithm.java                              | 
 11 +-
 src/org/openbravo/erpCommon/ad_actionButton/MRPManufacturingPlanProcess.java | 
 97 +---------
 src/org/openbravo/service/db/CallStoredProcedure.java                        | 
 21 +-
 3 files changed, 25 insertions(+), 104 deletions(-)

diffs (239 lines):

diff -r 422f36b87a28 -r 39a08f4bf306 
src/org/openbravo/costing/CostingAlgorithm.java
--- a/src/org/openbravo/costing/CostingAlgorithm.java   Wed Aug 22 09:55:31 
2012 +0200
+++ b/src/org/openbravo/costing/CostingAlgorithm.java   Wed Aug 22 10:05:16 
2012 +0200
@@ -20,7 +20,6 @@
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.sql.Connection;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -31,7 +30,6 @@
 import org.openbravo.base.structure.BaseOBObject;
 import org.openbravo.costing.CostingServer.TrxType;
 import org.openbravo.dal.core.DalUtil;
-import org.openbravo.dal.core.OBContext;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.erpCommon.utility.OBDateUtils;
 import org.openbravo.financial.FinancialUtils;
@@ -46,7 +44,7 @@
 import org.openbravo.model.materialmgmt.transaction.ProductionTransaction;
 import org.openbravo.model.pricing.pricelist.PriceList;
 import org.openbravo.model.pricing.pricelist.ProductPrice;
-import org.openbravo.service.db.DalConnectionProvider;
+import org.openbravo.service.db.CallStoredProcedure;
 
 public abstract class CostingAlgorithm {
   protected MaterialTransaction transaction;
@@ -518,11 +516,8 @@
   private void calculateWorkEffortCost(ProductionTransaction production) {
 
     try {
-      // first get a connection
-      final Connection connection = OBDal.getInstance().getConnection();
-
-      CostingData.calculateWorkEffortCost(connection, new 
DalConnectionProvider(),
-          production.getId(), (String) 
DalUtil.getId(OBContext.getOBContext().getUser()));
+      List<Object> params = new ArrayList<Object>();
+      CallStoredProcedure.getInstance().call("MA_PRODUCTION_COST", params, 
null, true, false);
 
     } catch (Exception e) {
       OBDal.getInstance().rollbackAndClose();
diff -r 422f36b87a28 -r 39a08f4bf306 
src/org/openbravo/erpCommon/ad_actionButton/MRPManufacturingPlanProcess.java
--- 
a/src/org/openbravo/erpCommon/ad_actionButton/MRPManufacturingPlanProcess.java  
    Wed Aug 22 09:55:31 2012 +0200
+++ 
b/src/org/openbravo/erpCommon/ad_actionButton/MRPManufacturingPlanProcess.java  
    Wed Aug 22 10:05:16 2012 +0200
@@ -18,22 +18,14 @@
  */
 package org.openbravo.erpCommon.ad_actionButton;
 
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.Timestamp;
-import java.sql.Types;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-import java.util.Properties;
 
 import org.apache.log4j.Logger;
 import org.hibernate.Query;
 import org.hibernate.ScrollMode;
 import org.hibernate.ScrollableResults;
-import org.openbravo.base.session.OBPropertiesProvider;
-import org.openbravo.base.structure.BaseOBObject;
 import org.openbravo.dal.core.DalUtil;
 import org.openbravo.dal.core.OBContext;
 import org.openbravo.dal.service.OBDal;
@@ -43,6 +35,7 @@
 import org.openbravo.model.mrp.ProductionRun;
 import org.openbravo.model.mrp.ProductionRunLine;
 import org.openbravo.scheduling.ProcessBundle;
+import org.openbravo.service.db.CallStoredProcedure;
 import org.openbravo.service.db.DalBaseProcess;
 
 public class MRPManufacturingPlanProcess extends DalBaseProcess {
@@ -112,7 +105,7 @@
       parameters.add(timeHorizon);
       parameters.add(docDate);
       parameters.add("Y");
-      call("MRP_RUN_INITIALIZE", parameters, null);
+      CallStoredProcedure.getInstance().call("MRP_RUN_INITIALIZE", parameters, 
null, true, false);
 
       OBDal.getInstance().commitAndClose();
       OBDal.getInstance().getSession().clear();
@@ -130,7 +123,7 @@
       parameters.add(timeHorizon);
       parameters.add(docDate);
       parameters.add(safetyLeadTime);
-      call("MRP_RUN_EXPLODE", parameters, null);
+      CallStoredProcedure.getInstance().call("MRP_RUN_EXPLODE", parameters, 
null, true, false);
       OBDal.getInstance().commitAndClose();
       OBDal.getInstance().getSession().clear();
 
@@ -147,7 +140,7 @@
       parameters.add(timeHorizon);
       parameters.add(docDate);
       parameters.add(safetyLeadTime);
-      call("MRP_PROCESSPLAN", parameters, null);
+      CallStoredProcedure.getInstance().call("MRP_PROCESSPLAN", parameters, 
null, true, false);
 
       OBDal.getInstance().commitAndClose();
       OBDal.getInstance().getSession().clear();
@@ -188,86 +181,4 @@
     return prlQry.scroll(ScrollMode.FORWARD_ONLY);
   }
 
-  private void call(String name, List<Object> parameters, List<Class<?>> 
types) {
-    final StringBuilder sb = new StringBuilder();
-
-    final Properties obProps = 
OBPropertiesProvider.getInstance().getOpenbravoProperties();
-    if (obProps.getProperty("bbdd.rdbms") != null
-        && obProps.getProperty("bbdd.rdbms").equals("POSTGRE")) {
-      sb.append("SELECT * FROM ");
-    } else {
-      sb.append(" CALL ");
-    }
-
-    sb.append(name);
-    for (int i = 0; i < parameters.size(); i++) {
-      if (i == 0) {
-        sb.append("(");
-      } else {
-        sb.append(",");
-      }
-      sb.append("?");
-    }
-    if (parameters.size() > 0) {
-      sb.append(")");
-    }
-    final Connection conn = OBDal.getInstance().getConnection(true);
-    try {
-      final PreparedStatement ps = conn.prepareStatement(sb.toString(),
-          ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
-      int index = 0;
-
-      for (Object parameter : parameters) {
-        final int sqlIndex = index + 1;
-        if (parameter == null) {
-          if (types == null || types.size() < index) {
-            ps.setNull(sqlIndex, Types.NULL);
-          } else {
-            ps.setNull(sqlIndex, getSqlType(types.get(index)));
-          }
-        } else if (parameter instanceof String && 
parameter.toString().equals("")) {
-          ps.setNull(sqlIndex, Types.VARCHAR);
-        } else if (parameter instanceof Boolean) {
-          ps.setObject(sqlIndex, ((Boolean) parameter) ? "Y" : "N");
-        } else if (parameter instanceof BaseOBObject) {
-          ps.setObject(sqlIndex, ((BaseOBObject) parameter).getId());
-        } else if (parameter instanceof Timestamp) {
-          ps.setTimestamp(sqlIndex, (Timestamp) parameter);
-        } else if (parameter instanceof Date) {
-          ps.setDate(sqlIndex, new java.sql.Date(((Date) 
parameter).getTime()));
-        } else {
-          ps.setObject(sqlIndex, parameter);
-        }
-        index++;
-      }
-      final ResultSet resultSet = ps.executeQuery();
-      resultSet.close();
-      ps.close();
-    } catch (Exception e) {
-      throw new IllegalStateException(e);
-    }
-  }
-
-  private int getSqlType(Class<?> clz) {
-    if (clz == null) {
-      return Types.VARCHAR;
-    }
-    if (clz == Boolean.class) {
-      return Types.VARCHAR;
-    } else if (clz == String.class) {
-      return Types.VARCHAR;
-    } else if (clz == BaseOBObject.class) {
-      return Types.VARCHAR;
-    } else if (Number.class.isAssignableFrom(clz)) {
-      return Types.NUMERIC;
-    } else if (clz == Timestamp.class) {
-      return Types.TIMESTAMP;
-    } else if (Date.class.isAssignableFrom(clz)) {
-      return Types.DATE;
-    } else if (BaseOBObject.class.isAssignableFrom(clz)) {
-      return Types.VARCHAR;
-    } else {
-      throw new IllegalStateException("Type not supported, please add it here 
" + clz.getName());
-    }
-  }
 }
diff -r 422f36b87a28 -r 39a08f4bf306 
src/org/openbravo/service/db/CallStoredProcedure.java
--- a/src/org/openbravo/service/db/CallStoredProcedure.java     Wed Aug 22 
09:55:31 2012 +0200
+++ b/src/org/openbravo/service/db/CallStoredProcedure.java     Wed Aug 22 
10:05:16 2012 +0200
@@ -64,11 +64,24 @@
    *          if the null value is something else than a String (which is 
handled as a default type)
    * @param doFlush
    *          do flush before calling stored procedure
+   * @param returnResults
+   *          whether a fetch for results should be done after the call to the 
stored procedure
+   *          (essentially describes whether the PL object is a procedure or 
function)
+   * 
    * @return the stored procedure result.
    */
   public Object call(String name, List<Object> parameters, List<Class<?>> 
types, boolean doFlush) {
+    return call(name, parameters, types, doFlush, true);
+  }
+
+  public Object call(String name, List<Object> parameters, List<Class<?>> 
types, boolean doFlush,
+      boolean returnResults) {
     final StringBuilder sb = new StringBuilder();
-    sb.append("SELECT " + name);
+    if (new DalConnectionProvider(false).getRDBMS().equalsIgnoreCase("ORACLE") 
&& !returnResults) {
+      sb.append("CALL " + name);
+    } else {
+      sb.append("SELECT " + name);
+    }
     for (int i = 0; i < parameters.size(); i++) {
       if (i == 0) {
         sb.append("(");
@@ -80,7 +93,9 @@
     if (parameters.size() > 0) {
       sb.append(")");
     }
-    sb.append(" AS RESULT FROM DUAL");
+    if (returnResults || !new 
DalConnectionProvider(false).getRDBMS().equalsIgnoreCase("ORACLE")) {
+      sb.append(" AS RESULT FROM DUAL");
+    }
     final Connection conn = OBDal.getInstance().getConnection(doFlush);
     try {
       final PreparedStatement ps = conn.prepareStatement(sb.toString(),
@@ -112,7 +127,7 @@
       }
       final ResultSet resultSet = ps.executeQuery();
       Object resultValue = null;
-      if (resultSet.next()) {
+      if (returnResults && resultSet.next()) {
         resultValue = resultSet.getObject("RESULT");
         if (resultSet.wasNull()) {
           resultValue = null;

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to