CalloutEngine.java
| Index Score | ||
|---|---|---|
![]() |
![]() |
org.compiere.model |
![]() |
![]() |
Compiere |
View: Reasons, Metrics, Source Code
These are the metrics that contribute to the Enerjy Score for this file, ranked by impact. So the metrics listed at the top influence the score to a greater extent that the metrics listed at the bottom.
/******************************************************************************
* Product: Compiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2007 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., 3600 Bridge Parkway #102, Redwood City, CA 94065, 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.logging.*;
import org.compiere.util.*;
/**
* Callout Engine.
*
* @author Jorg Janke
* @version $Id: CalloutEngine.java,v 1.3 2006/07/30 00:51:05 jjanke Exp $
* @deprecated
*/
@Deprecated
public class CalloutEngine implements Callout
{
/**
* Constructor
*/
public CalloutEngine()
{
super();
}
/** Logger */
private 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 (Ctx 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;
/**
* Is Callout Active
* @return true if active
*/
protected static boolean isCalloutActive()
{
return s_calloutActive;
} // isCalloutActive
/**
* Set Callout (in)active
* @param active active
*/
protected static void setCalloutActive (boolean active)
{
s_calloutActive = active;
} // setCalloutActive
/**
* Set Account Date to the date of the calling column.
* 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 (Ctx 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 (Ctx 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
The table below shows all metrics for CalloutEngine.java.




