- Cleanup of empty directories
- Dropping CalloutEngine.java as the avoid recursion mechanism is already implemented in adempiere trunk
This commit is contained in:
parent
f52ee5b937
commit
6a4c482c51
|
@ -1,252 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
* Product: Adempiere ERP & CRM Smart Business Solution *
|
|
||||||
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
|
|
||||||
* This program is free software; you can redistribute it and/or modify it *
|
|
||||||
* under the terms version 2 of the GNU General Public License as published *
|
|
||||||
* by the Free Software Foundation. This program is distributed in the hope *
|
|
||||||
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
|
|
||||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
|
||||||
* See the GNU General Public License for more details. *
|
|
||||||
* You should have received a copy of the GNU General Public License along *
|
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc., *
|
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
|
||||||
* For the text or an alternative of this public license, you may reach us *
|
|
||||||
* ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA *
|
|
||||||
* or via info@compiere.org or http://www.compiere.org/license.html *
|
|
||||||
*****************************************************************************/
|
|
||||||
package org.compiere.model;
|
|
||||||
|
|
||||||
import java.lang.reflect.*;
|
|
||||||
import java.math.*;
|
|
||||||
import java.sql.*;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.logging.*;
|
|
||||||
import org.compiere.util.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callout Emgine.
|
|
||||||
*
|
|
||||||
* @author Jorg Janke
|
|
||||||
* @version $Id: CalloutEngine.java,v 1.3 2006/07/30 00:51:05 jjanke Exp $
|
|
||||||
*/
|
|
||||||
public class CalloutEngine implements Callout
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
public CalloutEngine()
|
|
||||||
{
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Logger */
|
|
||||||
protected CLogger log = CLogger.getCLogger(getClass());
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start Callout.
|
|
||||||
* <p>
|
|
||||||
* Callout's are used for cross field validation and setting values in other fields
|
|
||||||
* when returning a non empty (error message) string, an exception is raised
|
|
||||||
* <p>
|
|
||||||
* When invoked, the Tab model has the new value!
|
|
||||||
*
|
|
||||||
* @param ctx Context
|
|
||||||
* @param methodName Method name
|
|
||||||
* @param WindowNo current Window No
|
|
||||||
* @param mTab Model Tab
|
|
||||||
* @param mField Model Field
|
|
||||||
* @param value The new value
|
|
||||||
* @param oldValue The old value
|
|
||||||
* @return Error message or ""
|
|
||||||
*/
|
|
||||||
public String start (Properties ctx, String methodName, int WindowNo,
|
|
||||||
GridTab mTab, GridField mField, Object value, Object oldValue)
|
|
||||||
{
|
|
||||||
if (methodName == null || methodName.length() == 0)
|
|
||||||
throw new IllegalArgumentException ("No Method Name");
|
|
||||||
//
|
|
||||||
String retValue = "";
|
|
||||||
StringBuffer msg = new StringBuffer(methodName).append(" - ")
|
|
||||||
.append(mField.getColumnName())
|
|
||||||
.append("=").append(value)
|
|
||||||
.append(" (old=").append(oldValue)
|
|
||||||
.append(") {active=").append(isCalloutActive()).append("}");
|
|
||||||
if (!isCalloutActive())
|
|
||||||
log.info (msg.toString());
|
|
||||||
|
|
||||||
// Find Method
|
|
||||||
Method method = getMethod(methodName);
|
|
||||||
if (method == null)
|
|
||||||
throw new IllegalArgumentException ("Method not found: " + methodName);
|
|
||||||
int argLength = method.getParameterTypes().length;
|
|
||||||
if (!(argLength == 5 || argLength == 6))
|
|
||||||
throw new IllegalArgumentException ("Method " + methodName
|
|
||||||
+ " has invalid no of arguments: " + argLength);
|
|
||||||
|
|
||||||
// Call Method
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Object[] args = null;
|
|
||||||
if (argLength == 6)
|
|
||||||
args = new Object[] {ctx, new Integer(WindowNo), mTab, mField, value, oldValue};
|
|
||||||
else
|
|
||||||
args = new Object[] {ctx, new Integer(WindowNo), mTab, mField, value};
|
|
||||||
retValue = (String)method.invoke(this, args);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
setCalloutActive(false);
|
|
||||||
Throwable ex = e.getCause(); // InvocationTargetException
|
|
||||||
if (ex == null)
|
|
||||||
ex = e;
|
|
||||||
log.log(Level.SEVERE, "start: " + methodName, ex);
|
|
||||||
ex.printStackTrace(System.err);
|
|
||||||
retValue = ex.getLocalizedMessage();
|
|
||||||
}
|
|
||||||
return retValue;
|
|
||||||
} // start
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Conversion Rules.
|
|
||||||
* Convert a String
|
|
||||||
*
|
|
||||||
* @param methodName method name
|
|
||||||
* @param value the value
|
|
||||||
* @return converted String or Null if no method found
|
|
||||||
*/
|
|
||||||
public String convert (String methodName, String value)
|
|
||||||
{
|
|
||||||
if (methodName == null || methodName.length() == 0)
|
|
||||||
throw new IllegalArgumentException ("No Method Name");
|
|
||||||
//
|
|
||||||
String retValue = null;
|
|
||||||
StringBuffer msg = new StringBuffer(methodName).append(" - ").append(value);
|
|
||||||
log.info (msg.toString());
|
|
||||||
//
|
|
||||||
// Find Method
|
|
||||||
Method method = getMethod(methodName);
|
|
||||||
if (method == null)
|
|
||||||
throw new IllegalArgumentException ("Method not found: " + methodName);
|
|
||||||
int argLength = method.getParameterTypes().length;
|
|
||||||
if (argLength != 1)
|
|
||||||
throw new IllegalArgumentException ("Method " + methodName
|
|
||||||
+ " has invalid no of arguments: " + argLength);
|
|
||||||
|
|
||||||
// Call Method
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Object[] args = new Object[] {value};
|
|
||||||
retValue = (String)method.invoke(this, args);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
setCalloutActive(false);
|
|
||||||
log.log(Level.SEVERE, "convert: " + methodName, e);
|
|
||||||
e.printStackTrace(System.err);
|
|
||||||
}
|
|
||||||
return retValue;
|
|
||||||
} // convert
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Method
|
|
||||||
* @param methodName method name
|
|
||||||
* @return method or null
|
|
||||||
*/
|
|
||||||
private Method getMethod (String methodName)
|
|
||||||
{
|
|
||||||
Method[] allMethods = getClass().getMethods();
|
|
||||||
for (int i = 0; i < allMethods.length; i++)
|
|
||||||
{
|
|
||||||
if (methodName.equals(allMethods[i].getName()))
|
|
||||||
return allMethods[i];
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
} // getMethod
|
|
||||||
|
|
||||||
/*************************************************************************/
|
|
||||||
|
|
||||||
// private static boolean s_calloutActive = false; // Commented by Ashley
|
|
||||||
private static final String CALLOUT_CTX_KEY = "CalloutActive";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is Callout Active
|
|
||||||
* Modification: Retrieves whether callout is (in)active from
|
|
||||||
* context rather that simple static boolean variable
|
|
||||||
* @return true if active
|
|
||||||
*/
|
|
||||||
protected static boolean isCalloutActive()
|
|
||||||
{
|
|
||||||
// return s_calloutActive;
|
|
||||||
String value = Env.getContext(Env.getCtx(), CALLOUT_CTX_KEY);
|
|
||||||
return "Y".equals(value);
|
|
||||||
} // isCalloutActive
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Callout (in)active
|
|
||||||
* Modification: Change the active management from simple static boolean
|
|
||||||
* to context integration because in the webui concurrent
|
|
||||||
* environment, multiple users won't be able to invoke
|
|
||||||
* callout concurrently.
|
|
||||||
* @author ashley
|
|
||||||
* @param active active
|
|
||||||
*/
|
|
||||||
protected static void setCalloutActive (boolean active)
|
|
||||||
{
|
|
||||||
// s_calloutActive = active;
|
|
||||||
Env.setContext(Env.getCtx(), CALLOUT_CTX_KEY, active);
|
|
||||||
} // setCalloutActive
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Account Date Value.
|
|
||||||
* org.compiere.model.CalloutEngine.dateAcct
|
|
||||||
* @param ctx context
|
|
||||||
* @param WindowNo window no
|
|
||||||
* @param mTab tab
|
|
||||||
* @param mField field
|
|
||||||
* @param value value
|
|
||||||
* @return null or error message
|
|
||||||
*/
|
|
||||||
public String dateAcct (Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value)
|
|
||||||
{
|
|
||||||
if (isCalloutActive()) // assuming it is resetting value
|
|
||||||
return "";
|
|
||||||
// setCalloutActive(true);
|
|
||||||
if (value == null || !(value instanceof Timestamp))
|
|
||||||
return "";
|
|
||||||
mTab.setValue("DateAcct", value);
|
|
||||||
// setCalloutActive(false);
|
|
||||||
return "";
|
|
||||||
} // dateAcct
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rate - set Multiply Rate from Divide Rate and vice versa
|
|
||||||
* org.compiere.model.CalloutEngine.rate
|
|
||||||
* @param ctx context
|
|
||||||
* @param WindowNo window no
|
|
||||||
* @param mTab tab
|
|
||||||
* @param mField field
|
|
||||||
* @param value value
|
|
||||||
* @return null or error message
|
|
||||||
*/
|
|
||||||
public String rate (Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value)
|
|
||||||
{
|
|
||||||
if (isCalloutActive() || value == null) // assuming it is Conversion_Rate
|
|
||||||
return "";
|
|
||||||
setCalloutActive(true);
|
|
||||||
|
|
||||||
BigDecimal rate1 = (BigDecimal)value;
|
|
||||||
BigDecimal rate2 = Env.ZERO;
|
|
||||||
BigDecimal one = new BigDecimal(1.0);
|
|
||||||
|
|
||||||
if (rate1.doubleValue() != 0.0) // no divide by zero
|
|
||||||
rate2 = one.divide(rate1, 12, BigDecimal.ROUND_HALF_UP);
|
|
||||||
//
|
|
||||||
if (mField.getColumnName().equals("MultiplyRate"))
|
|
||||||
mTab.setValue("DivideRate", rate2);
|
|
||||||
else
|
|
||||||
mTab.setValue("MultiplyRate", rate2);
|
|
||||||
log.info(mField.getColumnName() + "=" + rate1 + " => " + rate2);
|
|
||||||
setCalloutActive(false);
|
|
||||||
return "";
|
|
||||||
} // rate
|
|
||||||
} // CalloutEngine
|
|
Loading…
Reference in New Issue