* revert revision 12190.
* improve the dynamic translation of swing form and process classname in db, removing the need of extension to use the ADClassNameMap class. Link to SF Tracker: http://sourceforge.net/support/tracker.php?aid=2898490
This commit is contained in:
parent
f204c5662f
commit
85b684429b
|
@ -888,7 +888,7 @@ public class LayoutEngine implements Pageable, Printable, Doc
|
||||||
*/
|
*/
|
||||||
public boolean isXspaceFor (float width)
|
public boolean isXspaceFor (float width)
|
||||||
{
|
{
|
||||||
return (getXspace()-width) > 0f;
|
return (getXspace()-width) >= 0f;
|
||||||
} // isXspaceFor
|
} // isXspaceFor
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -913,7 +913,7 @@ public class LayoutEngine implements Pageable, Printable, Doc
|
||||||
*/
|
*/
|
||||||
public boolean isYspaceFor (float height)
|
public boolean isYspaceFor (float height)
|
||||||
{
|
{
|
||||||
return (getYspace()-height) > 0f;
|
return (getYspace()-height) >= 0f;
|
||||||
} // isYspaceFor
|
} // isYspaceFor
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
|
@ -551,6 +551,8 @@ public class TableElement extends PrintElement
|
||||||
m_headerHeight += (4*m_tFormat.getLineStroke().floatValue()) + (2*V_GAP); // Thick lines
|
m_headerHeight += (4*m_tFormat.getLineStroke().floatValue()) + (2*V_GAP); // Thick lines
|
||||||
p_height += m_headerHeight;
|
p_height += m_headerHeight;
|
||||||
|
|
||||||
|
// Last row Lines
|
||||||
|
p_height += m_tFormat.getLineStroke().floatValue(); // last fat line
|
||||||
|
|
||||||
// Page Layout *******************************************************
|
// Page Layout *******************************************************
|
||||||
|
|
||||||
|
@ -575,6 +577,13 @@ public class TableElement extends PrintElement
|
||||||
float rowHeight = ((Float)m_rowHeights.get(dataRow)).floatValue();
|
float rowHeight = ((Float)m_rowHeights.get(dataRow)).floatValue();
|
||||||
// Y page break before
|
// Y page break before
|
||||||
boolean pageBreak = isPageBreak(dataRow);
|
boolean pageBreak = isPageBreak(dataRow);
|
||||||
|
|
||||||
|
//adjust for lastrow
|
||||||
|
if (dataRow + 1 == m_rowHeights.size())
|
||||||
|
{
|
||||||
|
availableHeight -= m_tFormat.getLineStroke().floatValue();
|
||||||
|
}
|
||||||
|
|
||||||
if (!pageBreak && availableHeight < rowHeight)
|
if (!pageBreak && availableHeight < rowHeight)
|
||||||
{
|
{
|
||||||
if (availableHeight > 40 && rowHeight > 40)
|
if (availableHeight > 40 && rowHeight > 40)
|
||||||
|
@ -663,9 +672,6 @@ public class TableElement extends PrintElement
|
||||||
} // for acc columns
|
} // for acc columns
|
||||||
} // multiple - X pages
|
} // multiple - X pages
|
||||||
|
|
||||||
// Last row Lines
|
|
||||||
p_height += m_tFormat.getLineStroke().floatValue(); // last fat line
|
|
||||||
|
|
||||||
log.fine("Pages=" + getPageCount()
|
log.fine("Pages=" + getPageCount()
|
||||||
+ " X=" + m_firstColumnOnPage.size() + "/Y=" + m_firstRowOnPage.size()
|
+ " X=" + m_firstColumnOnPage.size() + "/Y=" + m_firstRowOnPage.size()
|
||||||
+ " - Width=" + p_width + ", Height=" + p_height);
|
+ " - Width=" + p_width + ", Height=" + p_height);
|
||||||
|
|
|
@ -460,7 +460,7 @@ public class TrialBalance extends SvrProcess
|
||||||
// Update AccountValue
|
// Update AccountValue
|
||||||
String sql2 = "UPDATE T_TrialBalance tb SET AccountValue = "
|
String sql2 = "UPDATE T_TrialBalance tb SET AccountValue = "
|
||||||
+ "(SELECT Value FROM C_ElementValue ev WHERE ev.C_ElementValue_ID=tb.Account_ID) "
|
+ "(SELECT Value FROM C_ElementValue ev WHERE ev.C_ElementValue_ID=tb.Account_ID) "
|
||||||
+ "WHERE tb.Account_ID IS NOT NULL";
|
+ "WHERE tb.Account_ID IS NOT NULL AND tb.AD_PInstance_ID = " + getAD_PInstance_ID();
|
||||||
no = DB.executeUpdate(sql2, get_TrxName());
|
no = DB.executeUpdate(sql2, get_TrxName());
|
||||||
if (no > 0)
|
if (no > 0)
|
||||||
log.fine("Set AccountValue #" + no);
|
log.fine("Set AccountValue #" + no);
|
||||||
|
|
|
@ -18,17 +18,16 @@
|
||||||
package org.adempiere.webui.panel;
|
package org.adempiere.webui.panel;
|
||||||
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import org.adempiere.webui.component.Window;
|
import org.adempiere.webui.component.Window;
|
||||||
import org.adempiere.webui.exception.ApplicationException;
|
import org.adempiere.webui.exception.ApplicationException;
|
||||||
import org.adempiere.webui.session.SessionManager;
|
import org.adempiere.webui.session.SessionManager;
|
||||||
import org.adempiere.common.ADClassNameMap;
|
import org.adempiere.webui.util.ADClassNameMap;
|
||||||
import org.compiere.model.MForm;
|
import org.compiere.model.MForm;
|
||||||
import org.compiere.process.ProcessInfo;
|
import org.compiere.process.ProcessInfo;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
|
import org.zkoss.zk.ui.Component;
|
||||||
import org.zkoss.zk.ui.event.Event;
|
import org.zkoss.zk.ui.event.Event;
|
||||||
import org.zkoss.zk.ui.event.EventListener;
|
import org.zkoss.zk.ui.event.EventListener;
|
||||||
|
|
||||||
|
@ -130,46 +129,153 @@ public abstract class ADForm extends Window implements EventListener
|
||||||
*/
|
*/
|
||||||
private static String translateFormClassName(String originalName)
|
private static String translateFormClassName(String originalName)
|
||||||
{
|
{
|
||||||
String modifiedName;
|
String zkName = null;
|
||||||
/* match any field containing the string ".compiere."
|
|
||||||
* Usually of the form "org.compiere.apps.form.<classname>".
|
|
||||||
* Although there are special cases which also need handling
|
|
||||||
*/
|
|
||||||
final String regex = "(.*)\\.compiere\\.(.*\\.)V(\\w*)$";
|
|
||||||
//final String regex = "(.*)\\.compiere\\.(.*\\.)V(\\w*)$";
|
|
||||||
/*
|
/*
|
||||||
* replacement string to translate class paths to the form
|
* replacement string to translate class paths to the form
|
||||||
* "org.adempiere.webui.apps.form.<classname>"
|
* "org.adempiere.webui.apps.form.<classname>"
|
||||||
*/
|
*/
|
||||||
final String replacementPackage = ".adempiere.webui.";
|
final String zkPackage = "org.adempiere.webui.";
|
||||||
/*
|
/*
|
||||||
* replacement string to translate custom form class name from
|
* replacement string to translate custom form class name from
|
||||||
* "V<name>" to "W<name>"
|
* "V<name>" to "W<name>"
|
||||||
*/
|
*/
|
||||||
final String replacementPrefix = "W";
|
final String zkPrefix = "W";
|
||||||
Pattern pattern = Pattern.compile(regex);
|
final String swingPrefix = "V";
|
||||||
Matcher matcher = pattern.matcher(originalName);
|
|
||||||
int group = 1;
|
|
||||||
|
|
||||||
/*
|
String tail = null;
|
||||||
* If no match is found throw an exception stating that the form
|
//first, try replace package
|
||||||
* has not been implemented in the webUI
|
if (originalName.startsWith("org.compiere."))
|
||||||
*/
|
|
||||||
if (matcher.find()== false)
|
|
||||||
{
|
{
|
||||||
return originalName;
|
tail = originalName.substring("org.compiere.".length());
|
||||||
|
}
|
||||||
|
else if(originalName.startsWith("org.adempiere."))
|
||||||
|
{
|
||||||
|
tail = originalName.substring("org.adempiere.".length());
|
||||||
|
}
|
||||||
|
if (tail != null)
|
||||||
|
{
|
||||||
|
zkName = zkPackage + tail;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Class<?> clazz = ADForm.class.getClassLoader().loadClass(zkName);
|
||||||
|
if (!isZkFormClass(clazz))
|
||||||
|
{
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//try replace package and add W prefix to class name
|
||||||
|
if (zkName == null)
|
||||||
|
{
|
||||||
|
String packageName = zkPackage;
|
||||||
|
int lastdot = tail.lastIndexOf(".");
|
||||||
|
String className = null;
|
||||||
|
if (lastdot >= 0)
|
||||||
|
{
|
||||||
|
if (lastdot > 0)
|
||||||
|
packageName = packageName + tail.substring(0, lastdot+1);
|
||||||
|
className = tail.substring(lastdot+1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
className = tail;
|
||||||
|
}
|
||||||
|
|
||||||
|
//try convert V* to W*
|
||||||
|
if (className.startsWith(swingPrefix))
|
||||||
|
{
|
||||||
|
zkName = packageName + zkPrefix + className.substring(1);
|
||||||
|
try {
|
||||||
|
Class<?> clazz = ADForm.class.getClassLoader().loadClass(zkName);
|
||||||
|
if (!isZkFormClass(clazz))
|
||||||
|
{
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//try append W prefix to original class name
|
||||||
|
if (zkName == null)
|
||||||
|
{
|
||||||
|
zkName = packageName + zkPrefix + className;
|
||||||
|
try {
|
||||||
|
Class<?> clazz = ADForm.class.getClassLoader().loadClass(zkName);
|
||||||
|
if (!isZkFormClass(clazz))
|
||||||
|
{
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* reconstruct the name using the captured groups and the replacement strings
|
* not found, try changing only the class name
|
||||||
*/
|
*/
|
||||||
modifiedName = matcher.group(group++)
|
if (zkName == null)
|
||||||
+ replacementPackage
|
{
|
||||||
+ matcher.group(group++)
|
int lastdot = originalName.lastIndexOf(".");
|
||||||
+ replacementPrefix
|
String packageName = originalName.substring(0, lastdot);
|
||||||
+ matcher.group(group++);
|
String className = originalName.substring(lastdot+1);
|
||||||
|
//try convert V* to W*
|
||||||
|
if (className.startsWith(swingPrefix))
|
||||||
|
{
|
||||||
|
String zkClassName = zkPrefix + className.substring(1);
|
||||||
|
zkName = packageName + "." + zkClassName;
|
||||||
|
try {
|
||||||
|
Class<?> clazz = ADForm.class.getClassLoader().loadClass(zkName);
|
||||||
|
if (!isZkFormClass(clazz))
|
||||||
|
{
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return modifiedName;
|
//try just append W to the original class name
|
||||||
|
if (zkName == null)
|
||||||
|
{
|
||||||
|
String zkClassName = zkPrefix + className;
|
||||||
|
zkName = packageName + "." + zkClassName;
|
||||||
|
try {
|
||||||
|
Class<?> clazz = ADForm.class.getClassLoader().loadClass(zkName);
|
||||||
|
if (!isZkFormClass(clazz))
|
||||||
|
{
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zkName == null)
|
||||||
|
{
|
||||||
|
//finally try whether same name is used for zk
|
||||||
|
zkName = originalName;
|
||||||
|
try {
|
||||||
|
Class<?> clazz = ADForm.class.getClassLoader().loadClass(zkName);
|
||||||
|
if (!isZkFormClass(clazz))
|
||||||
|
{
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return zkName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isZkFormClass(Class<?> clazz) {
|
||||||
|
return IFormController.class.isAssignableFrom(clazz) || Component.class.isAssignableFrom(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -200,12 +306,20 @@ public abstract class ADForm extends Window implements EventListener
|
||||||
webClassName = ADClassNameMap.get(richClassName);
|
webClassName = ADClassNameMap.get(richClassName);
|
||||||
//fallback to dynamic translation
|
//fallback to dynamic translation
|
||||||
if (webClassName == null || webClassName.trim().length() == 0)
|
if (webClassName == null || webClassName.trim().length() == 0)
|
||||||
|
{
|
||||||
webClassName = translateFormClassName(richClassName);
|
webClassName = translateFormClassName(richClassName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (webClassName == null)
|
||||||
|
{
|
||||||
|
throw new ApplicationException("Web UI form not implemented for the swing form " +
|
||||||
|
richClassName);
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Create instance w/o parameters
|
// Create instance w/o parameters
|
||||||
obj = Class.forName(webClassName).newInstance();
|
obj = ADForm.class.getClassLoader().loadClass(webClassName).newInstance();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.adempiere.webui.process;
|
package org.adempiere.webui.process;
|
||||||
|
|
||||||
import org.adempiere.common.ADClassNameMap;
|
import org.adempiere.webui.util.ADClassNameMap;
|
||||||
import org.compiere.process.ProcessInfo;
|
import org.compiere.process.ProcessInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -47,14 +47,83 @@ public class WProcessInfo extends ProcessInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setClassName(String ClassName) {
|
public void setClassName(String className) {
|
||||||
String name = ClassName;
|
String zkName = null;
|
||||||
if (name != null && name.trim().length() > 0) {
|
if (className != null && className.trim().length() > 0) {
|
||||||
name = ADClassNameMap.get(ClassName);
|
zkName = ADClassNameMap.get(className);
|
||||||
if (name == null || name.trim().length() == 0) {
|
if (zkName == null)
|
||||||
name = ClassName;
|
{
|
||||||
|
zkName = dynamicTranslate(className);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super.setClassName(name);
|
if (zkName == null)
|
||||||
|
zkName = className;
|
||||||
|
super.setClassName(zkName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String dynamicTranslate(String className) {
|
||||||
|
String zkName = null;
|
||||||
|
String tail = null;
|
||||||
|
|
||||||
|
//null check
|
||||||
|
if (className == null || className.trim().length() == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
String zkPackage = "org.adempiere.webui.";
|
||||||
|
String zkPrefix = "W";
|
||||||
|
|
||||||
|
//first, try replace package
|
||||||
|
if (className.startsWith("org.compiere."))
|
||||||
|
{
|
||||||
|
tail = className.substring("org.compiere.".length());
|
||||||
|
}
|
||||||
|
else if(className.startsWith("org.adempiere."))
|
||||||
|
{
|
||||||
|
tail = className.substring("org.adempiere.".length());
|
||||||
|
}
|
||||||
|
if (tail != null)
|
||||||
|
{
|
||||||
|
zkName = zkPackage + tail;
|
||||||
|
try {
|
||||||
|
this.getClass().getClassLoader().loadClass(zkName);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//try replace package and add W prefix to class name
|
||||||
|
if (zkName == null)
|
||||||
|
{
|
||||||
|
zkName = zkPackage;
|
||||||
|
int lastdot = tail.lastIndexOf(".");
|
||||||
|
if (lastdot >= 0)
|
||||||
|
{
|
||||||
|
if (lastdot > 0)
|
||||||
|
zkName = zkName + tail.substring(0, lastdot+1);
|
||||||
|
zkName = zkName + zkPrefix + tail.substring(lastdot+1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
zkName = zkName + zkPrefix + tail;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.getClass().getClassLoader().loadClass(zkName);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//try append W prefix to class name
|
||||||
|
if (zkName == null)
|
||||||
|
{
|
||||||
|
int lastdot = className.lastIndexOf(".");
|
||||||
|
zkName = className.substring(0, lastdot) + ".W" + className.substring(lastdot+1);
|
||||||
|
try {
|
||||||
|
this.getClass().getClassLoader().loadClass(zkName);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
zkName = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return zkName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.adempiere.common;
|
package org.adempiere.webui.util;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -8,12 +8,7 @@ public class ADClassNameMap {
|
||||||
private static Map<String, String> map = new HashMap<String, String>();
|
private static Map<String, String> map = new HashMap<String, String>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
map.put("org.compiere.apps.form.ArchiveViewer", "org.adempiere.webui.apps.form.WArchiveViewer");
|
|
||||||
map.put("org.compiere.apps.wf.WFActivity", "org.adempiere.webui.apps.wf.WWFActivity");
|
|
||||||
map.put("org.compiere.apps.wf.WFPanel", "org.adempiere.webui.apps.wf.WFEditor");
|
map.put("org.compiere.apps.wf.WFPanel", "org.adempiere.webui.apps.wf.WFEditor");
|
||||||
map.put("org.compiere.process.InvoicePrint", "org.adempiere.webui.process.InvoicePrint");
|
|
||||||
map.put("org.compiere.process.CacheReset", "org.adempiere.webui.process.CacheReset");
|
|
||||||
map.put("org.adempiere.apps.graph.ViewPI", "org.adempiere.webui.apps.graph.WViewPI");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
Loading…
Reference in New Issue