commit/iDempiere: 20 new changesets

199 views
Skip to first unread message

Bitbucket

unread,
Jun 20, 2012, 5:10:59 AM6/20/12
to idempi...@googlegroups.com
20 new commits in iDempiere:


https://bitbucket.org/idempiere/idempiere/changeset/966dd680d966/
changeset: 966dd680d966
branch: development
user: hengsin
date: 2012-06-20 09:11:42
summary: IDEMPIERE-310 JasperReport: Compilation of JRXML is broken
IDEMPIERE-311 JasperReport: Loading pdf font from classpath is not working
affected #: 26 files
Diff too large to display.

https://bitbucket.org/idempiere/idempiere/changeset/60de8649f399/
changeset: 60de8649f399
branch: development
user: hengsin
date: 2012-06-20 09:12:03
summary: IDEMPIERE-301 Possible circular dependency problem with org.adempiere.report.jasper.* plugins
affected #: 1 file

diff -r 966dd680d96632acc8281d67649d1288d3a13d51 -r 60de8649f3998ea2394185075886ddbc2d5cd8e0 org.adempiere.ui.swing/META-INF/MANIFEST.MF
--- a/org.adempiere.ui.swing/META-INF/MANIFEST.MF
+++ b/org.adempiere.ui.swing/META-INF/MANIFEST.MF
@@ -62,7 +62,9 @@
org.jdesktop.swingx.treetable,
org.jdesktop.swingx.util
Require-Bundle: org.adempiere.base;bundle-version="1.0.0",
- org.adempiere.ui;bundle-version="1.0.0"
+ org.adempiere.ui;bundle-version="1.0.0",
+ org.adempiere.report.jasper;bundle-version="1.0.0",
+ org.adempiere.report.jasper.library;bundle-version="1.0.0"
Eclipse-ExtensibleAPI: true
Eclipse-RegisterBuddy: org.adempiere.base
Bundle-RequiredExecutionEnvironment: JavaSE-1.6



https://bitbucket.org/idempiere/idempiere/changeset/73b446c4e327/
changeset: 73b446c4e327
branch: development
user: hengsin
date: 2012-06-20 09:26:08
summary: IDEMPIERE-312 Performance: Use JDK ThreadPool API for dynamically created thread
affected #: 6 files

diff -r 60de8649f3998ea2394185075886ddbc2d5cd8e0 -r 73b446c4e3277f5ade86edf1b038d71430cd97f8 org.adempiere.base/src/org/adempiere/base/BaseActivator.java
--- a/org.adempiere.base/src/org/adempiere/base/BaseActivator.java
+++ b/org.adempiere.base/src/org/adempiere/base/BaseActivator.java
@@ -20,6 +20,7 @@
package org.adempiere.base;

import org.adempiere.base.equinox.StackTraceCommand;
+import org.compiere.Adempiere;
import org.eclipse.osgi.framework.console.CommandProvider;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
@@ -53,6 +54,7 @@
@Override
public void stop(BundleContext context) throws Exception {
bundleContext = null;
+ Adempiere.stop();
}

public static BundleContext getBundleContext() {


diff -r 60de8649f3998ea2394185075886ddbc2d5cd8e0 -r 73b446c4e3277f5ade86edf1b038d71430cd97f8 org.adempiere.base/src/org/compiere/Adempiere.java
--- a/org.adempiere.base/src/org/compiere/Adempiere.java
+++ b/org.adempiere.base/src/org/compiere/Adempiere.java
@@ -23,6 +23,9 @@
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
import java.util.logging.Level;

import javax.jnlp.BasicService;
@@ -103,6 +106,9 @@

/** Logging */
private static CLogger log = null;
+
+ /** Thread pool **/
+ private static ThreadPoolExecutor threadPoolExecutor = null;

static {
ClassLoader loader = Adempiere.class.getClassLoader();
@@ -504,6 +510,22 @@
if (isClient && Ini.isPropertyBool(Ini.P_TRACEFILE))
CLogMgt.addHandler(new CLogFile(Ini.findAdempiereHome(), true, isClient));

+ //setup specific log level
+ Properties properties = Ini.getProperties();
+ for(Object key : properties.keySet())
+ {
+ if (key instanceof String)
+ {
+ String s = (String)key;
+ if (s.endsWith("."+Ini.P_TRACELEVEL))
+ {
+ String level = properties.getProperty(s);
+ s = s.substring(0, s.length() - ("."+Ini.P_TRACELEVEL).length());
+ CLogMgt.setLevel(s, level);
+ }
+ }
+ }
+
// Set UI
if (isClient)
{
@@ -514,12 +536,43 @@
// Set Default Database Connection from Ini
DB.setDBTarget(CConnection.get(getCodeBaseHost()));

+ createThreadPool();
+
if (isClient) // don't test connection
return false; // need to call

return startupEnvironment(isClient);
} // startup

+ private static void createThreadPool() {
+ int min = 20;
+ int max = 200;
+ Properties properties = Ini.getProperties();
+ String maxSize = properties.getProperty("MaxThreadPoolSize");
+ String minSize = properties.getProperty("MinThreadPoolSize");
+ if (maxSize != null) {
+ try {
+ max = Integer.parseInt(maxSize);
+ } catch (Exception e) {}
+ }
+ if (minSize != null) {
+ try {
+ min = Integer.parseInt(minSize);
+ } catch (Exception e) {}
+ }
+ if (max < min) {
+ max = min;
+ }
+ if (max <= 0) {
+ max = 200;
+ }
+ if (min < 0) {
+ min = 20;
+ }
+ // start thread pool
+ threadPoolExecutor = new ThreadPoolExecutor(min, max, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
+ }
+
/**
* Startup Adempiere Environment.
* Automatically called for Server connections
@@ -591,4 +644,14 @@
public static URL getResource(String name) {
return Core.getResourceFinder().getResource(name);
}
+
+ public static synchronized void stop() {
+ if (threadPoolExecutor != null) {
+ threadPoolExecutor.shutdown();
+ }
+ }
+
+ public static ThreadPoolExecutor getThreadPoolExecutor() {
+ return threadPoolExecutor;
+ }
} // Adempiere


diff -r 60de8649f3998ea2394185075886ddbc2d5cd8e0 -r 73b446c4e3277f5ade86edf1b038d71430cd97f8 org.adempiere.base/src/org/compiere/model/GridTable.java
--- a/org.adempiere.base/src/org/compiere/model/GridTable.java
+++ b/org.adempiere.base/src/org/compiere/model/GridTable.java
@@ -35,12 +35,14 @@
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.concurrent.Future;
import java.util.logging.Level;

import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;

import org.adempiere.exceptions.DBException;
+import org.compiere.Adempiere;
import org.compiere.util.CLogMgt;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
@@ -214,7 +216,7 @@

/** Vetoable Change Bean support */
private VetoableChangeSupport m_vetoableChangeSupport = new VetoableChangeSupport(this);
- private Thread m_loaderThread;
+ private Future<?> m_loaderFuture;
/** Property of Vetoable Bean support "RowChange" */
public static final String PROPERTY = "MTable-RowSave";

@@ -618,8 +620,7 @@
m_loader.run();
else
{
- m_loaderThread = new Thread(m_loader, "TLoader");
- m_loaderThread.start();
+ m_loaderFuture = Adempiere.getThreadPoolExecutor().submit(m_loader);
}
}
else
@@ -656,17 +657,17 @@
public void loadComplete()
{
// Wait for loader
- if (m_loaderThread != null)
+ if (m_loaderFuture != null)
{
- if (m_loaderThread.isAlive())
+ if (!m_loaderFuture.isDone())
{
try
{
- m_loaderThread.join();
+ m_loaderFuture.get();
}
- catch (InterruptedException ie)
+ catch (Exception ie)
{
- log.log(Level.SEVERE, "Join interrupted", ie);
+ log.log(Level.SEVERE, "Interrupted", ie);
}
}
}
@@ -684,7 +685,7 @@
*/
public boolean isLoading()
{
- if (m_loaderThread != null && m_loaderThread.isAlive())
+ if (m_loaderFuture != null && !m_loaderFuture.isDone())
return true;
return false;
} // isLoading
@@ -723,16 +724,17 @@
}

// Stop loader
- while (m_loaderThread != null && m_loaderThread.isAlive())
+ while (m_loaderFuture != null && !m_loaderFuture.isDone())
{
log.fine("Interrupting Loader ...");
- m_loaderThread.interrupt();
+ m_loaderFuture.cancel(true);
try
{
Thread.sleep(200); // .2 second
}
catch (InterruptedException ie)
{}
+ m_loaderFuture = null;
}

if (!m_inserting)
@@ -787,7 +789,7 @@
m_rowData = null;
m_oldValue = null;
m_loader = null;
- m_loaderThread = null;
+ m_loaderFuture = null;
} // dispose

/**
@@ -985,7 +987,7 @@

// need to wait for data read into buffer
int loops = 0;
- while (row >= m_sort.size() && m_loaderThread != null && m_loaderThread.isAlive() && loops < 15)
+ while (row >= m_sort.size() && m_loaderFuture != null && !m_loaderFuture.isDone() && loops < 15)
{
log.fine("Waiting for loader row=" + row + ", size=" + m_sort.size());
try


diff -r 60de8649f3998ea2394185075886ddbc2d5cd8e0 -r 73b446c4e3277f5ade86edf1b038d71430cd97f8 org.adempiere.base/src/org/compiere/model/MLookup.java
--- a/org.adempiere.base/src/org/compiere/model/MLookup.java
+++ b/org.adempiere.base/src/org/compiere/model/MLookup.java
@@ -23,8 +23,10 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
+import java.util.concurrent.Future;
import java.util.logging.Level;

+import org.compiere.Adempiere;
import org.compiere.util.CLogMgt;
import org.compiere.util.DB;
import org.compiere.util.DisplayType;
@@ -67,8 +69,11 @@
log.fine(m_info.KeyColumn);

// load into local lookup, if already cached
- if (MLookupCache.loadFromCache (m_info, m_lookup))
- return;
+ if (Ini.isClient())
+ {
+ if (MLookupCache.loadFromCache (m_info, m_lookup))
+ return;
+ }

// Don't load Search or CreatedBy/UpdatedBy
if (m_info.DisplayType == DisplayType.Search
@@ -124,9 +129,10 @@
{
if (m_info != null)
log.fine(m_info.KeyColumn + ": dispose");
- if (m_loader != null && m_loader.isAlive())
- m_loader.interrupt();
+ if (m_loaderFuture != null && !m_loaderFuture.isDone())
+ m_loaderFuture.cancel(true);
m_loader = null;
+ m_loaderFuture = null;
//
if (m_lookup != null)
m_lookup.clear();
@@ -145,17 +151,18 @@
*/
public void loadComplete()
{
- if (m_loader != null && m_loader.isAlive())
+ if (m_loaderFuture != null && !m_loaderFuture.isDone())
{
- try
+ try
{
- m_loader.join();
- m_loader = null;
+ m_loaderFuture.get();
}
- catch (InterruptedException ie)
+ catch (Exception ie)
{
log.log(Level.SEVERE, m_info.KeyColumn + ": Interrupted", ie);
- }
+ }
+ m_loader = null;
+ m_loaderFuture = null;
}
} // loadComplete

@@ -188,7 +195,7 @@
return retValue;

// Not found and waiting for loader
- if (m_loader != null && m_loader.isAlive())
+ if (m_loaderFuture != null && !m_loaderFuture.isDone())
{
log.finer((m_info.KeyColumn==null ? "ID="+m_info.Column_ID : m_info.KeyColumn) + ": waiting for Loader");
loadComplete();
@@ -332,7 +339,7 @@
*/
private ArrayList<Object> getData (boolean onlyValidated, boolean loadParent)
{
- if (m_loader != null && m_loader.isAlive())
+ if (m_loaderFuture != null && !m_loaderFuture.isDone())
{
log.fine((m_info.KeyColumn==null ? "ID="+m_info.Column_ID : m_info.KeyColumn)
+ ": waiting for Loader");
@@ -407,6 +414,7 @@
private HashMap<Object,Object> m_lookupDirect = null;
/** Save last unsuccessful */
private Object m_directNullKey = null;
+ private Future<?> m_loaderFuture;

/**
* Get Data Direct from Table.
@@ -592,7 +600,7 @@
log.fine(m_info.KeyColumn + ": start");

m_loader = new MLoader();
- m_loader.start();
+ m_loaderFuture = Adempiere.getThreadPoolExecutor().submit(m_loader);
loadComplete();
log.fine(m_info.KeyColumn + ": #" + m_lookup.size());

@@ -631,7 +639,7 @@
/**************************************************************************
* MLookup Loader
*/
- class MLoader extends Thread implements Serializable
+ class MLoader implements Serializable, Runnable
{
/**
*
@@ -643,9 +651,6 @@
*/
public MLoader()
{
- super("MLoader-" + m_info.KeyColumn);
- // if (m_info.KeyColumn.indexOf("C_InvoiceLine_ID") != -1)
- // log.info(m_info.KeyColumn);
} // Loader

private long m_startTime = System.currentTimeMillis();
@@ -656,7 +661,8 @@
public void run()
{
long startTime = System.currentTimeMillis();
- MLookupCache.loadStart (m_info);
+ if (Ini.isClient())
+ MLookupCache.loadStart (m_info);
String sql = m_info.Query;

// not validated
@@ -697,7 +703,7 @@
}
}
// check
- if (isInterrupted())
+ if (Thread.interrupted())
{
log.log(Level.WARNING, m_info.KeyColumn + ": Loader interrupted");
return;
@@ -727,11 +733,20 @@
{
if (rows++ > MAX_ROWS)
{
- log.warning(m_info.KeyColumn + ": Loader - Too many records");
+ String s = m_info.KeyColumn + ": Loader - Too many records";
+ if (m_info.Column_ID > 0)
+ {
+ MColumn mColumn = MColumn.get(m_info.ctx, m_info.Column_ID);
+ String column = mColumn.getColumnName();
+ s = s + ", Column="+column;
+ String tableName = MTable.getTableName(m_info.ctx, mColumn.getAD_Table_ID());
+ s = s + ", Table="+tableName;
+ }
+ log.warning(s);
break;
}
// check for interrupted every 10 rows
- if (rows % 20 == 0 && isInterrupted())
+ if (rows % 20 == 0 && Thread.interrupted())
break;

// load data
@@ -773,7 +788,8 @@
+ " - ms=" + String.valueOf(System.currentTimeMillis()-m_startTime)
+ " (" + String.valueOf(System.currentTimeMillis()-startTime) + ")");
// if (m_allLoaded)
- MLookupCache.loadEnd (m_info, m_lookup);
+ if (Ini.isClient())
+ MLookupCache.loadEnd (m_info, m_lookup);
} // run
} // Loader



diff -r 60de8649f3998ea2394185075886ddbc2d5cd8e0 -r 73b446c4e3277f5ade86edf1b038d71430cd97f8 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java
@@ -9,6 +9,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
+import java.util.concurrent.Future;
import java.util.logging.Level;

import org.adempiere.util.IProcessMonitor;
@@ -22,6 +23,7 @@
import org.adempiere.webui.session.SessionManager;
import org.adempiere.webui.window.FDialog;
import org.adempiere.webui.window.SimplePDFViewer;
+import org.compiere.Adempiere;
import org.compiere.model.SystemIDs;
import org.compiere.print.ReportEngine;
import org.compiere.process.ProcessInfo;
@@ -90,7 +92,7 @@
private Center center;
private North north;

-
+
/**
* Dialog to start a process/report
* @param ctx
@@ -197,7 +199,8 @@
private boolean isParameterPage = true;
private String initialMessage;
private BusyDialog progressWindow;
- private Thread thread;
+ @SuppressWarnings("unused")
+ private Future<?> future;
private ProcessDialogRunnable processDialogRunnable;

private static final String ON_STATUS_UPDATE = "onStatusUpdate";
@@ -333,13 +336,12 @@
p.put(AdempiereWebUI.ZK_DESKTOP_SESSION_KEY, desktop);

processDialogRunnable = new ProcessDialogRunnable(p);
- thread = new Thread(processDialogRunnable);
- thread.start();
+ future = Adempiere.getThreadPoolExecutor().submit(processDialogRunnable);
}

private void onComplete() {
Env.getCtx().putAll(processDialogRunnable.getProperties());
- thread = null;
+ future = null;
processDialogRunnable = null;
unlockUI(m_pi);
}


diff -r 60de8649f3998ea2394185075886ddbc2d5cd8e0 -r 73b446c4e3277f5ade86edf1b038d71430cd97f8 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java
@@ -20,6 +20,7 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
+import java.util.concurrent.Future;
import java.util.logging.Level;

import org.adempiere.util.IProcessMonitor;
@@ -31,6 +32,7 @@
import org.adempiere.webui.component.VerticalBox;
import org.adempiere.webui.component.Window;
import org.adempiere.webui.event.DialogEvents;
+import org.compiere.Adempiere;
import org.compiere.process.ProcessInfo;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
@@ -70,7 +72,7 @@
private static final long serialVersionUID = -7109707014309321369L;
private boolean m_autoStart;
private VerticalBox dialogBody;
-
+
/**
* @param aProcess
* @param WindowNo
@@ -84,7 +86,7 @@
m_WindowNo = WindowNo;
m_pi = pi;
m_autoStart = autoStart;
-
+
log.info("Process=" + pi.getAD_Process_ID());
try
{
@@ -143,9 +145,11 @@
dialogBody.appendChild(div);
centerPanel = new Panel();
dialogBody.appendChild(centerPanel);
- div = new Div();
- div.setStyle("text-align: right");
+// div = new Div();
+// div.setStyle("text-align: right");
Hbox hbox = new Hbox();
+ hbox.setWidth("100%");
+ hbox.setStyle("margin-top: 10px");
Button btn = new Button("Ok");
LayoutUtils.addSclass("action-text-button", btn);
btn.setId("Ok");
@@ -158,8 +162,9 @@
btn.addEventListener(Events.ON_CLICK, this);

hbox.appendChild(btn);
- div.appendChild(hbox);
- dialogBody.appendChild(div);
+ hbox.setPack("end");
+// div.appendChild(hbox);
+ dialogBody.appendChild(hbox);
this.appendChild(dialogBody);

}
@@ -185,7 +190,8 @@
private BusyDialog progressWindow;
private boolean isLocked = false;
private org.adempiere.webui.apps.ProcessModalDialog.ProcessDialogRunnable processDialogRunnable;
- private Thread thread;
+ @SuppressWarnings("unused")
+ private Future<?> future;

/**
* Set Visible
@@ -317,14 +323,14 @@
* launch process
*/
private void startProcess()
- {
+ {
m_pi.setPrintPreview(true);

if (m_processMonitor != null) {
m_processMonitor.lockUI(m_pi);
Clients.clearBusy();
}
-
+
lockUI(m_pi);

//use echo, otherwise lock ui wouldn't work
@@ -361,8 +367,7 @@
p.put(AdempiereWebUI.ZK_DESKTOP_SESSION_KEY, desktop);

processDialogRunnable = new ProcessDialogRunnable(p);
- thread = new Thread(processDialogRunnable);
- thread.start();
+ future = Adempiere.getThreadPoolExecutor().submit(processDialogRunnable);
}

private void hideBusyDialog() {
@@ -409,14 +414,14 @@

private void onComplete() {
Env.getCtx().putAll(processDialogRunnable.getProperties());
- thread = null;
+ future = null;
processDialogRunnable = null;
- dispose();
+ dispose();
if (m_processMonitor != null) {
m_processMonitor.unlockUI(m_pi);
}
unlockUI(m_pi);
- Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null));
+ Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null));
}

@Override



https://bitbucket.org/idempiere/idempiere/changeset/2b892417d840/
changeset: 2b892417d840
branch: development
user: hengsin
date: 2012-06-20 09:50:54
summary: IDEMPIERE-311 JasperReport: Loading pdf font from classpath is not working
affected #: 1 file

diff -r 73b446c4e3277f5ade86edf1b038d71430cd97f8 -r 2b892417d840f62b3f71b797272990c92749bb1d org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkJRViewer.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkJRViewer.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkJRViewer.java
@@ -8,11 +8,11 @@
import javax.servlet.http.HttpServletRequest;

import net.sf.jasperreports.engine.JRExporterParameter;
-import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRCsvExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
+import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;

@@ -149,7 +149,11 @@
log.log(Level.FINE, "Path="+path + " Prefix="+prefix);
}
File file = File.createTempFile(prefix, ".pdf", new File(path));
- JasperExportManager.exportReportToPdfFile(jasperPrint, file.getAbsolutePath());
+ JRPdfExporter exporter = new JRPdfExporter();
+ exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
+ exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, file.getAbsolutePath());
+ exporter.setParameter(JRExporterParameter.CLASS_LOADER, exporter.getClass().getClassLoader());
+ exporter.exportReport();
media = new AMedia(getTitle(), "pdf", "application/pdf", file, true);





https://bitbucket.org/idempiere/idempiere/changeset/d8b8be8eda8d/
changeset: d8b8be8eda8d
branch: development
user: hengsin
date: 2012-06-20 09:53:10
summary: IDEMPIERE-309 Process UI: Add ask and file download dialog support
affected #: 31 files

diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.base/src/org/adempiere/util/Callback.java
--- /dev/null
+++ b/org.adempiere.base/src/org/adempiere/util/Callback.java
@@ -0,0 +1,25 @@
+/******************************************************************************
+ * Copyright (C) 2012 Heng Sin Low *
+ * Copyright (C) 2012 Trek Global *
+ * 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. *
+ *****************************************************************************/
+package org.adempiere.util;
+
+/**
+ *
+ * @author hengsin
+ *
+ * @param <T>
+ */
+public interface Callback<T> {
+
+ public void onCallback(T result);
+}


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.base/src/org/adempiere/util/IProcessMonitor.java
--- a/org.adempiere.base/src/org/adempiere/util/IProcessMonitor.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.adempiere.util;
-
-import org.compiere.process.ProcessInfo;
-
-public interface IProcessMonitor {
-
- /**
- * Lock User Interface.
- * Called from the Worker before processing
- * @param pi process info
- */
- public void lockUI (ProcessInfo pi);
-
- /**
- * Unlock User Interface.
- * Called from the Worker when processing is done
- * @param pi process info
- */
- public void unlockUI (ProcessInfo pi);
-
- /**
- * Is the UI locked
- * @return true, if UI is locked
- */
- public boolean isUILocked();
-
- /**
- *
- * @param message
- */
- public void statusUpdate(String message);
-
-}


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.base/src/org/adempiere/util/IProcessUI.java
--- /dev/null
+++ b/org.adempiere.base/src/org/adempiere/util/IProcessUI.java
@@ -0,0 +1,86 @@
+/******************************************************************************
+ * Copyright (C) 2012 Heng Sin Low *
+ * Copyright (C) 2012 Trek Global *
+ * 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. *
+ *****************************************************************************/
+package org.adempiere.util;
+
+import java.io.File;
+
+import org.compiere.process.ProcessInfo;
+
+/**
+ *
+ * @author hengsin
+ *
+ */
+public interface IProcessUI {
+
+ /**
+ * Lock User Interface.
+ * Called from the Worker before processing
+ * @param pi process info
+ */
+ public void lockUI (ProcessInfo pi);
+
+ /**
+ * Unlock User Interface.
+ * Called from the Worker when processing is done
+ * @param pi process info
+ */
+ public void unlockUI (ProcessInfo pi);
+
+ /**
+ * Is the UI locked
+ * @return true, if UI is locked
+ */
+ public boolean isUILocked();
+
+ /**
+ * Provide status feedback to user
+ * @param message
+ */
+ public void statusUpdate(String message);
+
+ /**
+ * Prompt for user input.
+ *
+ * Example Usage in process:
+ * <pre>
+ * final StringBuffer answer = new StringBuffer();
+ * aProcessMonitor.ask(adMessage, new Callback<String>() {
+ * @Override
+ * public void onCallback(String result) {
+ * answer.append(result != null ? result : "-");
+ * }
+ * });
+ *
+ * //wait for answer
+ * while (answer.length() == 0) {
+ * try {
+ * Thread.sleep(200);
+ * } catch (InterruptedException e) {}
+ * }
+ *
+ * //process answer from user
+ * ...
+ * </pre>
+ * @param message
+ * @param callback
+ */
+ public void ask(String message, Callback<String> callback);
+
+ /**
+ * add to list of file available for download after process end
+ * @param file
+ */
+ public void download(File file);
+}


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.base/src/org/adempiere/util/ProcessUtil.java
--- a/org.adempiere.base/src/org/adempiere/util/ProcessUtil.java
+++ b/org.adempiere.base/src/org/adempiere/util/ProcessUtil.java
@@ -144,7 +144,7 @@
* @param managedTrx false if trx is managed by caller
* @return boolean
*/
- public static boolean startJavaProcess(Properties ctx, ProcessInfo pi, Trx trx, boolean managedTrx, IProcessMonitor processMonitor) {
+ public static boolean startJavaProcess(Properties ctx, ProcessInfo pi, Trx trx, boolean managedTrx, IProcessUI processMonitor) {
String className = pi.getClassName();
if (className == null) {
MProcess proc = new MProcess(ctx, pi.getAD_Process_ID(), trx.getTrxName());
@@ -208,14 +208,14 @@
boolean success = false;
try
{
- process.setProcessMonitor(processMonitor);
+ process.setProcessUI(processMonitor);
success = process.startProcess(ctx, pi, trx);
if (success && trx != null && managedTrx)
{
trx.commit(true);
}
}
- catch (Exception e)
+ catch (Throwable e)
{
pi.setSummary (Msg.getMsg(Env.getCtx(), "ProcessError") + " " + e.getLocalizedMessage(), true);
log.log(Level.SEVERE, pi.getClassName(), e);


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.base/src/org/compiere/process/ProcessCall.java
--- a/org.adempiere.base/src/org/compiere/process/ProcessCall.java
+++ b/org.adempiere.base/src/org/compiere/process/ProcessCall.java
@@ -18,7 +18,7 @@

import java.util.Properties;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.compiere.util.Trx;

/**
@@ -49,6 +49,6 @@
/**
* @param processMonitor
*/
- public void setProcessMonitor(IProcessMonitor processMonitor);
+ public void setProcessUI(IProcessUI processUI);

} // ProcessCall


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.base/src/org/compiere/process/SvrProcess.java
--- a/org.adempiere.base/src/org/compiere/process/SvrProcess.java
+++ b/org.adempiere.base/src/org/compiere/process/SvrProcess.java
@@ -25,7 +25,7 @@
import java.util.Properties;
import java.util.logging.Level;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.compiere.model.MPInstance;
import org.compiere.model.PO;
import org.compiere.util.CLogger;
@@ -52,7 +52,7 @@
public abstract class SvrProcess implements ProcessCall
{
public static final String PROCESS_INFO_CTX_KEY = "ProcessInfo";
- public static final String PROCESS_MONITOR_CTX_KEY = "ProcessMonitor";
+ public static final String PROCESS_UI_CTX_KEY = "ProcessUI";

/**
* Server Process.
@@ -75,7 +75,7 @@
private PO m_lockedObject = null;
/** Process Main transaction */
private Trx m_trx;
- private IProcessMonitor processMonitor;
+ protected IProcessUI processUI;

/** Common Error Message */
protected static String MSG_SaveErrorRowNotFound = "@SaveErrorRowNotFound@";
@@ -111,14 +111,14 @@
try
{
m_ctx.put(PROCESS_INFO_CTX_KEY, m_pi);
- if (processMonitor != null)
- m_ctx.put(PROCESS_MONITOR_CTX_KEY, processMonitor);
+ if (processUI != null)
+ m_ctx.put(PROCESS_UI_CTX_KEY, processUI);
success = process();
}
finally
{
m_ctx.remove(PROCESS_INFO_CTX_KEY);
- m_ctx.remove(PROCESS_MONITOR_CTX_KEY);
+ m_ctx.remove(PROCESS_UI_CTX_KEY);
if (localTrx)
{
if (success)
@@ -536,9 +536,9 @@
} // get_TrxName

@Override
- public void setProcessMonitor(IProcessMonitor monitor)
+ public void setProcessUI(IProcessUI monitor)
{
- processMonitor = monitor;
+ processUI = monitor;
}

/**
@@ -547,9 +547,9 @@
*/
protected void statusUpdate(String message)
{
- if (processMonitor != null)
+ if (processUI != null)
{
- processMonitor.statusUpdate(message);
+ processUI.statusUpdate(message);
}
}
} // SvrProcess


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.base/src/org/compiere/util/ASyncProcess.java
--- a/org.adempiere.base/src/org/compiere/util/ASyncProcess.java
+++ b/org.adempiere.base/src/org/compiere/util/ASyncProcess.java
@@ -16,7 +16,7 @@
*****************************************************************************/
package org.compiere.util;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.compiere.process.ProcessInfo;

/**
@@ -38,7 +38,7 @@
* @version $Id: ASyncProcess.java,v 1.2 2006/07/30 00:51:05 jjanke Exp $
* @deprecated
*/
-public interface ASyncProcess extends IProcessMonitor
+public interface ASyncProcess extends IProcessUI
{
/**
* Method to be executed async.


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.pipo/src/org/adempiere/pipo2/PackOutProcess.java
--- a/org.adempiere.pipo/src/org/adempiere/pipo2/PackOutProcess.java
+++ b/org.adempiere.pipo/src/org/adempiere/pipo2/PackOutProcess.java
@@ -97,17 +97,10 @@

if (packageExp.getAD_Package_Exp_ID() == p_PackOut_ID){
//Create the package documentation
- packoutDirectory = packageExp.getFile_Directory();
- if (packoutDirectory == null || packoutDirectory.trim().length() == 0) {
- packoutDirectory = Adempiere.getAdempiereHome().trim();
- if (!packoutDirectory.endsWith("/") && !packoutDirectory.endsWith("\\"))
- packoutDirectory+= File.separator;
- packoutDirectory = packoutDirectory + "packout" + File.separator;
- } else {
- packoutDirectory = packoutDirectory.trim();
- if (!packoutDirectory.endsWith("/") && !packoutDirectory.endsWith("\\"))
- packoutDirectory+= File.separator;
- }
+ packoutDirectory = Adempiere.getAdempiereHome().trim();
+ if (!packoutDirectory.endsWith("/") && !packoutDirectory.endsWith("\\"))
+ packoutDirectory+= File.separator;
+ packoutDirectory = packoutDirectory + "packout" + File.separator;

//create packout folder if needed
File packoutDirectoryFile = new File(packoutDirectory);
@@ -152,6 +145,9 @@
throw e;
}

+ if (processUI != null)
+ processUI.download(new File(exportFile));
+
return "Exported="+processedCount + " File=" + exportFile;
} // doIt



diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.report.jasper/src/org/compiere/report/ReportStarter.java
--- a/org.adempiere.report.jasper/src/org/compiere/report/ReportStarter.java
+++ b/org.adempiere.report.jasper/src/org/compiere/report/ReportStarter.java
@@ -65,7 +65,7 @@
import org.adempiere.base.Service;
import org.adempiere.exceptions.AdempiereException;
import org.adempiere.exceptions.DBException;
-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.compiere.model.MAttachment;
import org.compiere.model.MAttachmentEntry;
import org.compiere.model.MProcess;
@@ -120,7 +120,8 @@

private ProcessInfo processInfo;
private MAttachment attachment;
- private IProcessMonitor m_processMonitor;
+ @SuppressWarnings("unused")
+ private IProcessUI m_processUI;

/**
* @author rlemeill
@@ -1164,8 +1165,8 @@
}

@Override
- public void setProcessMonitor(IProcessMonitor processMonitor) {
- m_processMonitor = processMonitor;
+ public void setProcessUI(IProcessUI processUI) {
+ m_processUI = processUI;
}

}
\ No newline at end of file


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.swing/src/org/compiere/apps/APanel.java
--- a/org.adempiere.ui.swing/src/org/compiere/apps/APanel.java
+++ b/org.adempiere.ui.swing/src/org/compiere/apps/APanel.java
@@ -29,6 +29,7 @@
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
+import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -59,7 +60,8 @@
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.Callback;
+import org.adempiere.util.IProcessUI;
import org.compiere.apps.form.FormFrame;
import org.compiere.apps.search.Find;
import org.compiere.grid.APanelTab;
@@ -144,7 +146,7 @@
* @sponsor www.metas.de
*/
public final class APanel extends CPanel
- implements DataStatusListener, ChangeListener, ActionListener, IProcessMonitor, SystemIDs
+ implements DataStatusListener, ChangeListener, ActionListener, IProcessUI, SystemIDs
{
/**
*
@@ -2968,4 +2970,16 @@

} // updateToolBarAndMenuWithRestriction

+ @Override
+ public void ask(String message, Callback<String> callback) {
+ boolean b = ADialog.ask(m_curWindowNo, this, message);
+ if (callback != null) {
+ callback.onCallback(b ? "OK" : "CANCEL");
+ }
+ }
+
+ @Override
+ public void download(File file) {
+ }
+
} // APanel


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.swing/src/org/compiere/apps/ClientProcessCtrl.java
--- a/org.adempiere.ui.swing/src/org/compiere/apps/ClientProcessCtrl.java
+++ b/org.adempiere.ui.swing/src/org/compiere/apps/ClientProcessCtrl.java
@@ -2,7 +2,7 @@

import java.awt.Container;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.compiere.model.MPInstance;
import org.compiere.process.ProcessInfo;
import org.compiere.util.CLogger;
@@ -34,7 +34,7 @@
* @param trx Transaction
* @return worker started ProcessCtl instance or null for workflow
*/
- public static ProcessCtl process (IProcessMonitor parent, int WindowNo, ProcessInfo pi, Trx trx)
+ public static ProcessCtl process (IProcessUI parent, int WindowNo, ProcessInfo pi, Trx trx)
{
log.fine("WindowNo=" + WindowNo + " - " + pi);



diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.swing/src/org/compiere/apps/ProcessCtl.java
--- a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessCtl.java
+++ b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessCtl.java
@@ -21,7 +21,7 @@
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.compiere.model.MPInstance;
import org.compiere.process.ProcessInfo;
import org.compiere.util.CLogger;
@@ -64,7 +64,7 @@
* @param trx Transaction
* @return worker started ProcessCtl instance or null for workflow
*/
- public static ProcessCtl process (IProcessMonitor parent, int WindowNo, ProcessInfo pi, Trx trx)
+ public static ProcessCtl process (IProcessUI parent, int WindowNo, ProcessInfo pi, Trx trx)
{
log.fine("WindowNo=" + WindowNo + " - " + pi);

@@ -142,7 +142,7 @@
* @param trx Transaction
* @return worker started ProcessCtl instance or null for workflow
*/
- public static ProcessCtl process(IProcessMonitor parent, int WindowNo, IProcessParameter parameter, ProcessInfo pi, Trx trx)
+ public static ProcessCtl process(IProcessUI parent, int WindowNo, IProcessParameter parameter, ProcessInfo pi, Trx trx)
{
log.fine("WindowNo=" + WindowNo + " - " + pi);

@@ -206,7 +206,7 @@
* @param trx Transaction
* Created in process(), VInvoiceGen.generateInvoices
*/
- public ProcessCtl (IProcessMonitor parent, int WindowNo, ProcessInfo pi, Trx trx)
+ public ProcessCtl (IProcessUI parent, int WindowNo, ProcessInfo pi, Trx trx)
{
super(parent, WindowNo, pi, trx);
} // ProcessCtl
@@ -317,14 +317,14 @@
abstract class ProcessUpdateRunnable implements Runnable
{
protected ProcessInfo pi = null;
- protected IProcessMonitor parent = null;
+ protected IProcessUI parent = null;

public void setProcessInfo(ProcessInfo pi)
{
this.pi = pi;
}

- public void setParent(IProcessMonitor parent)
+ public void setParent(IProcessUI parent)
{
this.parent = parent;
}


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.swing/src/org/compiere/apps/ProcessDialog.java
--- a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessDialog.java
+++ b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessDialog.java
@@ -24,6 +24,7 @@
import java.awt.GraphicsConfiguration;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.io.File;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -36,7 +37,8 @@

import org.adempiere.exceptions.AdempiereException;
import org.adempiere.exceptions.DBException;
-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.Callback;
+import org.adempiere.util.IProcessUI;
import org.compiere.model.SystemIDs;
import org.compiere.print.ReportCtl;
import org.compiere.print.ReportEngine;
@@ -68,7 +70,7 @@
* <li>BF [ 1963128 ] Running a process w/o trl should display an error
*/
public class ProcessDialog extends CFrame
- implements ActionListener, IProcessMonitor, SystemIDs
+ implements ActionListener, IProcessUI, SystemIDs
{
/**
*
@@ -523,4 +525,18 @@
message.setText(status);
}

+ @Override
+ public void ask(String message, Callback<String> callback) {
+ boolean b = ADialog.ask(m_WindowNo, this, message);
+ if (callback != null) {
+ callback.onCallback(b ? "OK" : "CANCEL");
+ }
+ }
+
+ @Override
+ public void download(File file) {
+ // TODO Auto-generated method stub
+
+ }
+
} // ProcessDialog


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.swing/src/org/compiere/apps/ProcessModalDialog.java
--- a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessModalDialog.java
+++ b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessModalDialog.java
@@ -32,7 +32,7 @@
import javax.swing.JSeparator;

import org.adempiere.exceptions.DBException;
-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.compiere.process.ProcessInfo;
import org.compiere.swing.CButton;
import org.compiere.swing.CDialog;
@@ -76,13 +76,13 @@
* @param autoStart
*/
public ProcessModalDialog (Properties ctx, Frame parent, String title,
- IProcessMonitor aProcess, int WindowNo, int AD_Process_ID,
+ IProcessUI aProcess, int WindowNo, int AD_Process_ID,
int tableId, int recordId, boolean autoStart)
{
super(parent, title, true);
log.info("Process=" + AD_Process_ID );
m_ctx = ctx;
- m_processMonitor = aProcess;
+ m_processUI = aProcess;
m_WindowNo = WindowNo;
m_AD_Process_ID = AD_Process_ID;
m_tableId = tableId;
@@ -99,7 +99,7 @@
}
} // ProcessDialog

- private IProcessMonitor m_processMonitor;
+ private IProcessUI m_processUI;
private int m_WindowNo;
private Properties m_ctx;
private int m_tableId;
@@ -333,7 +333,7 @@
{
if (e.getSource() == bOK)
{
- ProcessCtl.process(m_processMonitor, m_WindowNo, parameterPanel, m_pi, null);
+ ProcessCtl.process(m_processUI, m_WindowNo, parameterPanel, m_pi, null);
dispose();
}



diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.swing/src/org/compiere/apps/form/VGenPanel.java
--- a/org.adempiere.ui.swing/src/org/compiere/apps/form/VGenPanel.java
+++ b/org.adempiere.ui.swing/src/org/compiere/apps/form/VGenPanel.java
@@ -18,6 +18,7 @@
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.io.File;
import java.util.logging.Level;

import javax.swing.JOptionPane;
@@ -28,7 +29,8 @@
import javax.swing.event.TableModelListener;

import org.adempiere.plaf.AdempierePLAF;
-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.Callback;
+import org.adempiere.util.IProcessUI;
import org.compiere.apps.ADialog;
import org.compiere.apps.ADialogDialog;
import org.compiere.apps.AEnv;
@@ -58,7 +60,7 @@
* Generate custom form panel
*
*/
-public class VGenPanel extends CPanel implements ActionListener, ChangeListener, TableModelListener, IProcessMonitor
+public class VGenPanel extends CPanel implements ActionListener, ChangeListener, TableModelListener, IProcessUI
{
/**
*
@@ -385,4 +387,18 @@
public void statusUpdate(String message) {
statusBar.setStatusLine(message);
}
+
+ @Override
+ public void ask(String message, Callback<String> callback) {
+ boolean b = ADialog.ask(m_WindowNo, this, message);
+ if (callback != null) {
+ callback.onCallback(b ? "OK" : "CANCEL");
+ }
+ }
+
+ @Override
+ public void download(File file) {
+ // TODO Auto-generated method stub
+
+ }
}
\ No newline at end of file


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.swing/src/org/compiere/apps/form/VPaySelect.java
--- a/org.adempiere.ui.swing/src/org/compiere/apps/form/VPaySelect.java
+++ b/org.adempiere.ui.swing/src/org/compiere/apps/form/VPaySelect.java
@@ -25,6 +25,7 @@
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.io.File;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.logging.Level;
@@ -35,7 +36,8 @@
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.Callback;
+import org.adempiere.util.IProcessUI;
import org.compiere.apps.ADialog;
import org.compiere.apps.AEnv;
import org.compiere.apps.ConfirmPanel;
@@ -66,7 +68,7 @@
* @author Jorg Janke
* @version $Id: VPaySelect.java,v 1.2 2008/07/11 08:20:12 cruiz Exp $
*/
-public class VPaySelect extends PaySelect implements FormPanel, ActionListener, TableModelListener, IProcessMonitor, SystemIDs
+public class VPaySelect extends PaySelect implements FormPanel, ActionListener, TableModelListener, IProcessUI, SystemIDs
{
/** @todo withholding */
private CPanel panel = new CPanel();
@@ -444,4 +446,18 @@
public void statusUpdate(String message) {
dataStatus.setText(message);
}
+
+ @Override
+ public void ask(String message, Callback<String> callback) {
+ boolean b = ADialog.ask(m_WindowNo, null, message);
+ if (callback != null) {
+ callback.onCallback(b ? "OK" : "CANCEL");
+ }
+ }
+
+ @Override
+ public void download(File file) {
+ // TODO Auto-generated method stub
+
+ }
} // VPaySelect


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.swing/src/org/compiere/print/AReport.java
--- a/org.adempiere.ui.swing/src/org/compiere/print/AReport.java
+++ b/org.adempiere.ui.swing/src/org/compiere/print/AReport.java
@@ -27,7 +27,7 @@
import javax.swing.JComponent;
import javax.swing.JPopupMenu;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.compiere.apps.ADialog;
import org.compiere.apps.ClientProcessCtrl;
import org.compiere.apps.ProcessCtl;
@@ -73,7 +73,7 @@
* @param parent The invoking parent window
* @param WindowNo The invoking parent window number
*/
- public AReport (int AD_Table_ID, JComponent invoker, MQuery query, IProcessMonitor parent, int WindowNo)
+ public AReport (int AD_Table_ID, JComponent invoker, MQuery query, IProcessUI parent, int WindowNo)
{
log.config("AD_Table_ID=" + AD_Table_ID + " " + query);
if (!MRole.getDefault().isCanReport(AD_Table_ID))
@@ -100,7 +100,7 @@
* @param whereExtended The filtering where clause
* @param WindowNo The invoking parent window number
*/
- public AReport (int AD_Table_ID, JComponent invoker, MQuery query, IProcessMonitor parent, int WindowNo, String whereExtended)
+ public AReport (int AD_Table_ID, JComponent invoker, MQuery query, IProcessUI parent, int WindowNo, String whereExtended)
{
log.config("AD_Table_ID=" + AD_Table_ID + " " + query);
if (!MRole.getDefault().isCanReport(AD_Table_ID))
@@ -129,7 +129,7 @@
/** Logger */
private static CLogger log = CLogger.getCLogger(AReport.class);
/** The parent window for locking/unlocking during process execution */
- IProcessMonitor parent;
+ IProcessUI parent;
/** The filter to apply to this report */
String m_whereExtended;
/** The parent window number */


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.swing/src/org/eevolution/form/VInOutInvoiceGen.java
--- a/org.adempiere.ui.swing/src/org/eevolution/form/VInOutInvoiceGen.java
+++ b/org.adempiere.ui.swing/src/org/eevolution/form/VInOutInvoiceGen.java
@@ -22,6 +22,7 @@
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.VetoableChangeListener;
+import java.io.File;
import java.math.BigDecimal;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@@ -38,7 +39,8 @@
import javax.swing.event.TableModelListener;

import org.adempiere.plaf.AdempierePLAF;
-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.Callback;
+import org.adempiere.util.IProcessUI;
import org.compiere.apps.ADialog;
import org.compiere.apps.ADialogDialog;
import org.compiere.apps.AEnv;
@@ -84,7 +86,7 @@
*/
public class VInOutInvoiceGen extends CPanel
implements FormPanel, ActionListener, VetoableChangeListener,
- ChangeListener, TableModelListener, IProcessMonitor, SystemIDs
+ ChangeListener, TableModelListener, IProcessUI, SystemIDs
{
/**
*
@@ -901,4 +903,18 @@
public void statusUpdate(String message) {
statusBar.setStatusLine(message);
}
+
+ @Override
+ public void ask(String message, Callback<String> callback) {
+ boolean b = ADialog.ask(m_WindowNo, this, message);
+ if (callback != null) {
+ callback.onCallback(b ? "OK" : "CANCEL");
+ }
+ }
+
+ @Override
+ public void download(File file) {
+ // TODO Auto-generated method stub
+
+ }
} // VInOutGen


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java
@@ -12,7 +12,8 @@
import java.util.concurrent.Future;
import java.util.logging.Level;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.Callback;
+import org.adempiere.util.IProcessUI;
import org.adempiere.util.ServerContext;
import org.adempiere.webui.AdempiereWebUI;
import org.adempiere.webui.component.Button;
@@ -22,6 +23,7 @@
import org.adempiere.webui.process.WProcessInfo;
import org.adempiere.webui.session.SessionManager;
import org.adempiere.webui.window.FDialog;
+import org.adempiere.webui.window.MultiFileDownloadDialog;
import org.adempiere.webui.window.SimplePDFViewer;
import org.compiere.Adempiere;
import org.compiere.model.SystemIDs;
@@ -81,7 +83,7 @@
* @author arboleda - globalqss
* - Implement ShowHelp option on processes and reports
*/
-public class ProcessDialog extends Window implements EventListener<Event>, IProcessMonitor, SystemIDs
+public class ProcessDialog extends Window implements EventListener<Event>, IProcessUI, SystemIDs
{
/**
* generate serial version ID
@@ -92,6 +94,7 @@
private Center center;
private North north;

+ private List<File> downloadFiles;

/**
* Dialog to start a process/report
@@ -315,6 +318,9 @@
m_pi.setPrintPreview(true);

this.lockUI(m_pi);
+
+ downloadFiles = new ArrayList<File>();
+
Clients.response(new AuEcho(this, "runProcess", null));
}

@@ -344,6 +350,12 @@
future = null;
processDialogRunnable = null;
unlockUI(m_pi);
+ if (downloadFiles.size() > 0) {
+ MultiFileDownloadDialog downloadDialog = new MultiFileDownloadDialog(downloadFiles.toArray(new File[0]));
+ downloadDialog.setPage(this.getPage());
+ downloadDialog.setTitle(m_pi.getTitle());
+ Events.postEvent(downloadDialog, new Event(MultiFileDownloadDialog.ON_SHOW));
+ }
}

private void onStatusUpdate(Event event) {
@@ -664,4 +676,19 @@
public void statusUpdate(String message) {
Executions.schedule(getDesktop(), this, new Event(ON_STATUS_UPDATE, this, message));
}
+
+ @Override
+ public void ask(final String message, final Callback<String> callback) {
+ Executions.schedule(getDesktop(), new EventListener<Event>() {
+ @Override
+ public void onEvent(Event event) throws Exception {
+ FDialog.ask(m_WindowNo, null, message, callback);
+ }
+ }, new Event("onAsk"));
+ }
+
+ @Override
+ public void download(File file) {
+ downloadFiles.add(file);
+ }
} // ProcessDialog


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessModalDialog.java
@@ -16,14 +16,18 @@
*****************************************************************************/
package org.adempiere.webui.apps;

+import java.io.File;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Properties;
import java.util.concurrent.Future;
import java.util.logging.Level;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.Callback;
+import org.adempiere.util.IProcessUI;
import org.adempiere.util.ServerContext;
import org.adempiere.webui.AdempiereWebUI;
import org.adempiere.webui.LayoutUtils;
@@ -32,6 +36,8 @@
import org.adempiere.webui.component.VerticalBox;
import org.adempiere.webui.component.Window;
import org.adempiere.webui.event.DialogEvents;
+import org.adempiere.webui.window.FDialog;
+import org.adempiere.webui.window.MultiFileDownloadDialog;
import org.compiere.Adempiere;
import org.compiere.process.ProcessInfo;
import org.compiere.util.CLogger;
@@ -61,7 +67,7 @@
* @author arboleda - globalqss
* - Implement ShowHelp option on processes and reports
*/
-public class ProcessModalDialog extends Window implements EventListener<Event>, IProcessMonitor, DialogEvents
+public class ProcessModalDialog extends Window implements EventListener<Event>, IProcessUI, DialogEvents
{
private static final String ON_STATUS_UPDATE = "onStatusUpdate";
private static final String ON_COMPLETE = "onComplete";
@@ -73,20 +79,37 @@
private boolean m_autoStart;
private VerticalBox dialogBody;

+ private List<File> downloadFiles;
+
/**
* @param aProcess
* @param WindowNo
* @param pi
* @param autoStart
*/
- public ProcessModalDialog(IProcessMonitor aProcess, int WindowNo, ProcessInfo pi, boolean autoStart)
+ public ProcessModalDialog(int WindowNo, ProcessInfo pi, boolean autoStart)
+ {
+ this(null, WindowNo, pi, autoStart);
+ }
+
+ /**
+ * @param aProcess
+ * @param WindowNo
+ * @param pi
+ * @param autoStart
+ */
+ public ProcessModalDialog(EventListener<Event> listener, int WindowNo, ProcessInfo pi, boolean autoStart)
{
m_ctx = Env.getCtx();
- m_processMonitor = aProcess;
m_WindowNo = WindowNo;
m_pi = pi;
m_autoStart = autoStart;

+ if (listener != null)
+ {
+ addEventListener(ON_MODAL_CLOSE, listener);
+ }
+
log.info("Process=" + pi.getAD_Process_ID());
try
{
@@ -99,19 +122,22 @@
}
}

+ public ProcessModalDialog (int WindowNo, int AD_Process_ID, int tableId, int recordId, boolean autoStart)
+ {
+ this(null, WindowNo, AD_Process_ID, tableId, recordId, autoStart);
+ }
+
/**
* Dialog to start a process/report
- * @param ctx
- * @param aProcess
* @param WindowNo
* @param AD_Process_ID
* @param tableId
* @param recordId
* @param autoStart
*/
- public ProcessModalDialog ( IProcessMonitor aProcess, int WindowNo, int AD_Process_ID, int tableId, int recordId, boolean autoStart)
+ public ProcessModalDialog (EventListener<Event> listener, int WindowNo, int AD_Process_ID, int tableId, int recordId, boolean autoStart)
{
- this(aProcess, WindowNo, new ProcessInfo("", AD_Process_ID, tableId, recordId), autoStart);
+ this(listener, WindowNo, new ProcessInfo("", AD_Process_ID, tableId, recordId), autoStart);
}

/**
@@ -119,7 +145,6 @@
* @param ctx
* @param parent not used
* @param title not used
- * @param aProcess
* @param WindowNo
* @param AD_Process_ID
* @param tableId
@@ -128,10 +153,10 @@
* @deprecated
*/
public ProcessModalDialog (Window parent, String title,
- IProcessMonitor aProcess, int WindowNo, int AD_Process_ID,
+ int WindowNo, int AD_Process_ID,
int tableId, int recordId, boolean autoStart)
{
- this(aProcess, WindowNo, AD_Process_ID, tableId, recordId, autoStart);
+ this(WindowNo, AD_Process_ID, tableId, recordId, autoStart);
} // ProcessDialog

private void initComponents() {
@@ -145,8 +170,6 @@
dialogBody.appendChild(div);
centerPanel = new Panel();
dialogBody.appendChild(centerPanel);
-// div = new Div();
-// div.setStyle("text-align: right");
Hbox hbox = new Hbox();
hbox.setWidth("100%");
hbox.setStyle("margin-top: 10px");
@@ -163,13 +186,11 @@

hbox.appendChild(btn);
hbox.setPack("end");
-// div.appendChild(hbox);
dialogBody.appendChild(hbox);
this.appendChild(dialogBody);

}

- private IProcessMonitor m_processMonitor;
private int m_WindowNo;
private Properties m_ctx;
private String m_Name = null;
@@ -326,12 +347,9 @@
{
m_pi.setPrintPreview(true);

- if (m_processMonitor != null) {
- m_processMonitor.lockUI(m_pi);
- Clients.clearBusy();
- }
+ lockUI(m_pi);

- lockUI(m_pi);
+ downloadFiles = new ArrayList<File>();

//use echo, otherwise lock ui wouldn't work
Clients.response(new AuEcho(this, "runProcess", null));
@@ -416,11 +434,14 @@
Env.getCtx().putAll(processDialogRunnable.getProperties());
future = null;
processDialogRunnable = null;
+ unlockUI(m_pi);
+ if (downloadFiles.size() > 0) {
+ MultiFileDownloadDialog downloadDialog = new MultiFileDownloadDialog(downloadFiles.toArray(new File[0]));
+ downloadDialog.setPage(this.getPage());
+ downloadDialog.setTitle(m_pi.getTitle());
+ Events.postEvent(downloadDialog, new Event(MultiFileDownloadDialog.ON_SHOW));
+ }
dispose();
- if (m_processMonitor != null) {
- m_processMonitor.unlockUI(m_pi);
- }
- unlockUI(m_pi);
Events.sendEvent(this, new Event(ON_MODAL_CLOSE, this, null));
}

@@ -482,4 +503,19 @@
return properties;
}
}
+
+ @Override
+ public void ask(final String message, final Callback<String> callback) {
+ Executions.schedule(getDesktop(), new EventListener<Event>() {
+ @Override
+ public void onEvent(Event event) throws Exception {
+ FDialog.ask(m_WindowNo, null, message, callback);
+ }
+ }, new Event("onAsk"));
+ }
+
+ @Override
+ public void download(File file) {
+ downloadFiles.add(file);
+ }
} // ProcessDialog


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/WProcessCtl.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/WProcessCtl.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/WProcessCtl.java
@@ -16,7 +16,7 @@
*****************************************************************************/
package org.adempiere.webui.apps;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.adempiere.webui.component.Window;
import org.compiere.apps.AbstractProcessCtl;
import org.compiere.apps.IProcessParameter;
@@ -48,12 +48,11 @@
* lockUI and unlockUI if parent is a ASyncProcess
* <br>
*
- * @param aProcessMonitor ASyncProcess & Container
* @param WindowNo window no
* @param pi ProcessInfo process info
* @param trx Transaction
*/
- public static void process (IProcessMonitor aProcessMonitor, int WindowNo, ProcessInfo pi, Trx trx)
+ public static void process (int WindowNo, ProcessInfo pi, Trx trx)
{
log.fine("WindowNo=" + WindowNo + " - " + pi);

@@ -82,7 +81,7 @@
pi.setAD_PInstance_ID (instance.getAD_PInstance_ID());

// Get Parameters (Dialog)
- ProcessModalDialog para = new ProcessModalDialog(aProcessMonitor, WindowNo, pi, false);
+ ProcessModalDialog para = new ProcessModalDialog(WindowNo, pi, false);
if (para.isValid())
{
para.setWidth("500px");
@@ -105,13 +104,13 @@
* <br>
* Called from ProcessDialog.actionPerformed
*
- * @param aProcessMonitor ASyncProcess & Container
+ * @param aProcessUI ASyncProcess & Container
* @param WindowNo window no
* @param paraPanel Process Parameter Panel
* @param pi ProcessInfo process info
* @param trx Transaction
*/
- public static void process(IProcessMonitor aProcessMonitor, int WindowNo, IProcessParameter parameter, ProcessInfo pi, Trx trx)
+ public static void process(IProcessUI aProcessUI, int WindowNo, IProcessParameter parameter, ProcessInfo pi, Trx trx)
{
log.fine("WindowNo=" + WindowNo + " - " + pi);

@@ -153,7 +152,7 @@
}

// execute
- WProcessCtl worker = new WProcessCtl(aProcessMonitor, WindowNo, pi, trx);
+ WProcessCtl worker = new WProcessCtl(aProcessUI, WindowNo, pi, trx);
worker.run();
}

@@ -163,9 +162,9 @@
* @param pi
* @param trx
*/
- public WProcessCtl(IProcessMonitor aProcessMonitor, int WindowNo, ProcessInfo pi,
+ public WProcessCtl(IProcessUI aProcessUI, int WindowNo, ProcessInfo pi,
Trx trx) {
- super(aProcessMonitor, WindowNo, pi, trx);
+ super(aProcessUI, WindowNo, pi, trx);
}

@Override


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/WReport.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/WReport.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/WReport.java
@@ -46,7 +46,7 @@
* @author Low Heng Sin
*
*/
-public class WReport implements EventListener {
+public class WReport implements EventListener<Event> {

/**
* Constructor
@@ -227,7 +227,7 @@
ProcessInfo pi = new ProcessInfo ("", pf.getJasperProcess_ID(), pf.getAD_Table_ID(), Record_ID);

// Execute Process
- WProcessCtl.process(null, WindowNo, pi, null);
+ WProcessCtl.process(WindowNo, pi, null);
}
else
{


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WPaySelect.java
@@ -18,11 +18,13 @@
*****************************************************************************/
package org.adempiere.webui.apps.form;

+import java.io.File;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.logging.Level;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.Callback;
+import org.adempiere.util.IProcessUI;
import org.adempiere.webui.apps.ProcessModalDialog;
import org.adempiere.webui.component.Button;
import org.adempiere.webui.component.Checkbox;
@@ -52,6 +54,7 @@
import org.compiere.util.KeyNamePair;
import org.compiere.util.Msg;
import org.compiere.util.ValueNamePair;
+import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.SuspendNotAllowedException;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
@@ -73,15 +76,10 @@
* @version $Id: VPaySelect.java,v 1.3 2006/07/30 00:51:28 jjanke Exp $
*/
public class WPaySelect extends PaySelect
- implements IFormController, EventListener, WTableModelListener, IProcessMonitor, SystemIDs
+ implements IFormController, EventListener<Event>, WTableModelListener, IProcessUI, SystemIDs
{
/** @todo withholding */

- /**
- *
- */
- private static final long serialVersionUID = -6031404894392912610L;
-
private CustomForm form = new CustomForm();

//
@@ -447,4 +445,20 @@
@Override
public void statusUpdate(String message) {
}
+
+ @Override
+ public void ask(final String message, final Callback<String> callback) {
+ Executions.schedule(form.getDesktop(), new EventListener<Event>() {
+ @Override
+ public void onEvent(Event event) throws Exception {
+ FDialog.ask(m_WindowNo, null, message, callback);
+ }
+ }, new Event("onAsk"));
+ }
+
+ @Override
+ public void download(File file) {
+ // TODO Auto-generated method stub
+
+ }
} // VPaySelect


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/DynamicMediaLink.java
--- /dev/null
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/DynamicMediaLink.java
@@ -0,0 +1,59 @@
+/******************************************************************************
+ * Copyright (C) 2012 Heng Sin Low *
+ * Copyright (C) 2012 Trek Global *
+ * 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. *
+ *****************************************************************************/
+package org.adempiere.webui.component;
+
+
+import org.zkoss.util.media.AMedia;
+import org.zkoss.zk.ui.event.Event;
+import org.zkoss.zk.ui.event.EventListener;
+import org.zkoss.zk.ui.event.Events;
+import org.zkoss.zul.A;
+import org.zkoss.zul.Filedownload;
+
+/**
+ * @author hengsin
+ *
+ */
+public class DynamicMediaLink extends A {
+
+ /**
+ * generated serial id
+ */
+ private static final long serialVersionUID = 5017833977652241179L;
+
+ private AMedia media;
+
+ public DynamicMediaLink() {
+ super();
+ this.addEventListener(Events.ON_CLICK, new EventListener<Event>() {
+
+ @Override
+ public void onEvent(Event event) throws Exception {
+ Filedownload.save(media);
+ }
+ });
+ }
+
+ public DynamicMediaLink(String label, String image) {
+ super(label, image);
+ }
+
+ public DynamicMediaLink(String label) {
+ super(label);
+ }
+
+ public void setMedia(AMedia media) {
+ this.media = media;
+ }
+}


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java
@@ -19,6 +19,7 @@

import java.util.Properties;

+import org.adempiere.util.Callback;
import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.apps.AEnv;
import org.compiere.util.Env;
@@ -39,7 +40,7 @@
* @date Jul 31, 2007
*/

-public class Messagebox extends Window implements EventListener
+public class Messagebox extends Window implements EventListener<Event>
{
/**
* generated serial version ID
@@ -62,6 +63,8 @@
private Image img = new Image();

private int returnValue;
+ private Callback<String> callback;
+ private String callbackValue;

/** A OK button. */
public static final int OK = 0x0001;
@@ -193,8 +196,14 @@

public int show(String message, String title, int buttons, String icon)
{
+ return show(message, title, buttons, icon, null);
+ }
+
+ public int show(String message, String title, int buttons, String icon, Callback<String> callback)
+ {
this.msg = message;
this.imgSrc = icon;
+ this.callback = callback;

btnOk.setVisible(false);
btnCancel.setVisible(false);
@@ -244,9 +253,14 @@

public static int showDialog(String message, String title, int buttons, String icon) throws InterruptedException
{
+ return showDialog(message, title, buttons, icon, null);
+ }
+
+ public static int showDialog(String message, String title, int buttons, String icon, Callback<String> callback) throws InterruptedException
+ {
Messagebox msg = new Messagebox();

- return msg.show(message, title, buttons, icon);
+ return msg.show(message, title, buttons, icon, callback);
}

public void onEvent(Event event) throws Exception
@@ -254,35 +268,53 @@
if (event == null)
return;

+ callbackValue = null;
+
if (event.getTarget() == btnOk)
{
returnValue = OK;
+ callbackValue = "OK";
}
else if (event.getTarget() == btnCancel)
{
returnValue = CANCEL;
+ callbackValue = "CANCEL";
}
else if (event.getTarget() == btnYes)
{
returnValue = YES;
+ callbackValue = "YES";
}
else if (event.getTarget() == btnNo)
{
returnValue = NO;
+ callbackValue = "NO";
}
else if (event.getTarget() == btnAbort)
{
returnValue = ABORT;
+ callbackValue = "ABORT";
}
else if (event.getTarget() == btnRetry)
{
returnValue = RETRY;
+ callbackValue = "RETRY";
}
else if (event.getTarget() == btnIgnore)
{
returnValue = IGNORE;
+ callbackValue = "IGNORE";
}

this.detach();
}
+
+ @Override
+ public void detach() {
+ super.detach();
+ if (callback != null)
+ {
+ callback.onCallback(callbackValue);
+ }
+ }
}


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/AbstractADWindowPanel.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/AbstractADWindowPanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/AbstractADWindowPanel.java
@@ -29,7 +29,7 @@
import java.util.Vector;
import java.util.logging.Level;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.Callback;
import org.adempiere.webui.WArchive;
import org.adempiere.webui.WRequest;
import org.adempiere.webui.WZoomAcross;
@@ -54,7 +54,6 @@
import org.adempiere.webui.panel.action.ExportAction;
import org.adempiere.webui.part.AbstractUIPart;
import org.adempiere.webui.session.SessionManager;
-import org.adempiere.webui.util.Callback;
import org.adempiere.webui.window.FDialog;
import org.adempiere.webui.window.FindWindow;
import org.adempiere.webui.window.WChat;
@@ -90,7 +89,6 @@
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
-import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Button;
import org.zkoss.zul.Div;
import org.zkoss.zul.Hbox;
@@ -122,7 +120,7 @@
* https://sourceforge.net/tracker/?func=detail&aid=2985892&group_id=176962&atid=955896
*/
public abstract class AbstractADWindowPanel extends AbstractUIPart implements ToolbarListener,
- EventListener<Event>, DataStatusListener, ActionListener, IProcessMonitor, SystemIDs
+ EventListener<Event>, DataStatusListener, ActionListener, SystemIDs
{
private static final CLogger logger;

@@ -161,8 +159,6 @@

private Component parent;

- private boolean m_uiLocked;
-
private boolean m_findCancelled;

private int embeddedTabindex = -1;
@@ -996,44 +992,50 @@
*/
public void onEvent(Event event)
{
- if (!Events.ON_SELECT.equals(event.getName()))
- return;
-
- IADTabList tabList = null;
- Component target = event.getTarget();
- if (target instanceof IADTabList)
+ if (Events.ON_SELECT.equals(event.getName()))
{
- tabList = (IADTabList) target;
+ IADTabList tabList = null;
+ Component target = event.getTarget();
+ if (target instanceof IADTabList)
+ {
+ tabList = (IADTabList) target;
+ }
+ else
+ {
+ target = target.getParent();
+ while(target != null)
+ {
+ if (target instanceof IADTabList)
+ {
+ tabList = (IADTabList) target;
+ break;
+ }
+ target = target.getParent();
+ }
+ }
+
+ if (tabList != null)
+ {
+ int newTabIndex = tabList.getSelectedIndex();
+
+ if (setActiveTab(newTabIndex))
+ {
+ //force sync model
+ tabList.refresh();
+ }
+ else
+ {
+ //reset to original
+ tabList.setSelectedIndex(curTabIndex);
+ }
+ }
}
- else
+ else if (event.getTarget() instanceof ProcessModalDialog)
{
- target = target.getParent();
- while(target != null)
- {
- if (target instanceof IADTabList)
- {
- tabList = (IADTabList) target;
- break;
- }
- target = target.getParent();
- }
+ ProcessModalDialog dialog = (ProcessModalDialog) event.getTarget();
+ onModalClose(dialog.getProcessInfo());
+ onRefresh(false);
}
-
- if (tabList != null)
- {
- int newTabIndex = tabList.getSelectedIndex();
-
- if (setActiveTab(newTabIndex))
- {
- //force sync model
- tabList.refresh();
- }
- else
- {
- //reset to original
- tabList.setSelectedIndex(curTabIndex);
- }
- }
}

private boolean setActiveTab(int newTabIndex) {
@@ -1935,12 +1937,11 @@
int table_ID = curTab.getAD_Table_ID();
int record_ID = curTab.getRecord_ID();

- ProcessModalDialog dialog = new ProcessModalDialog(this,getWindowNo(),
- AD_Process_ID,table_ID, record_ID, true);
+ ProcessModalDialog dialog = new ProcessModalDialog(this, getWindowNo(), AD_Process_ID,table_ID, record_ID, true);
if (dialog.isValid()) {
dialog.setPosition("center");
- dialog.setPage(this.getComponent().getPage());
- dialog.doModal();
+ dialog.setPage(this.getComponent().getPage());
+ dialog.doHighlighted();
}
}

@@ -2349,8 +2350,7 @@
}
else
{
- ProcessModalDialog dialog = new ProcessModalDialog(this, curWindowNo,
- wButton.getProcess_ID(), table_ID, record_ID, startWOasking);
+ ProcessModalDialog dialog = new ProcessModalDialog(this, curWindowNo, wButton.getProcess_ID(), table_ID, record_ID, startWOasking);

if (dialog.isValid())
{
@@ -2358,12 +2358,6 @@
dialog.setVisible(true);
dialog.setPosition("center");
dialog.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED);
- dialog.addEventListener(DialogEvents.ON_MODAL_CLOSE, new EventListener<Event>() {
- @Override
- public void onEvent(Event event) throws Exception {
- onRefresh(false);
- }
- });
AEnv.showWindow(dialog);
}
else
@@ -2428,48 +2422,9 @@
}

/**
- * @return boolean
- */
- public boolean isUILocked() {
- return m_uiLocked;
- }
-
- /**
* @param pi
*/
- public void lockUI(ProcessInfo pi) {
- if (m_uiLocked) return;
-
- m_uiLocked = true;
-
- if (Executions.getCurrent() != null)
- Clients.showBusy(null);
- else
- {
- try {
- //acquire desktop, 2 second timeout
- Executions.activate(getComponent().getDesktop(), 2000);
- try {
- Clients.showBusy(null);
- } catch(Error ex){
- throw ex;
- } finally{
- //release full control of desktop
- Executions.deactivate(getComponent().getDesktop());
- }
- } catch (Exception e) {
- logger.log(Level.WARNING, "Failed to lock UI.", e);
- }
- }
- }
-
- /**
- * @param pi
- */
- public void unlockUI(ProcessInfo pi) {
- if (!m_uiLocked) return;
-
- m_uiLocked = false;
+ private void onModalClose(ProcessInfo pi) {
boolean notPrint = pi != null
&& pi.getAD_Process_ID() != curTab.getAD_Process_ID()
&& pi.isReportingProcess() == false;
@@ -2482,7 +2437,6 @@
{
updateUI(pi);
}
- Clients.clearBusy(null);
}
else
{
@@ -2494,7 +2448,6 @@
{
updateUI(pi);
}
- Clients.clearBusy(null);
} catch(Error ex){
throw ex;
} finally{
@@ -2502,23 +2455,15 @@
Executions.deactivate(getComponent().getDesktop());
}
} catch (Exception e) {
- logger.log(Level.WARNING, "Failed to update UI upon unloc.", e);
+ logger.log(Level.WARNING, "Failed to update UI upon unlock.", e);
}
}
}

- @Override
- public void statusUpdate(String message) {
- statusBar.setStatusLine(message);
- }
-
private void updateUI(ProcessInfo pi) {
- // Refresh data
- curTab.dataRefresh(false);
// Timeout
if (pi.isTimeout()) // set temporarily to R/O
Env.setContext(ctx, curWindowNo, "Processed", "Y");
- curTabpanel.dynamicDisplay(0);
// Update Status Line
String summary = pi.getSummary();
if (summary != null && summary.indexOf('@') != -1)
@@ -2553,5 +2498,4 @@
public int getWindowNo() {
return curWindowNo;
}
-
}


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/Callback.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/util/Callback.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/******************************************************************************
- * Copyright (C) 2012 Heng Sin Low *
- * Copyright (C) 2012 Trek Global *
- * 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. *
- *****************************************************************************/
-package org.adempiere.webui.util;
-
-/**
- *
- * @author hengsin
- *
- * @param <T>
- */
-public interface Callback<T> {
-
- public void onCallback(T result);
-}


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FDialog.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FDialog.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FDialog.java
@@ -26,6 +26,7 @@
import org.compiere.util.Trace;

import org.zkoss.zk.ui.Component;
+import org.adempiere.util.Callback;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.component.Messagebox;

@@ -267,7 +268,7 @@
return ask(windowNo, comp, s);
}

- /**************************************************************************
+ /**************************************************************************
* Ask Question with question icon and (OK) (Cancel) buttons
*
* @param WindowNo Number of Window
@@ -279,10 +280,26 @@

public static boolean ask(int windowNo, Component comp, String adMessage)
{
+ return ask(windowNo, comp, adMessage, (Callback<String>)null);
+ }
+
+ /**************************************************************************
+ * Ask Question with question icon and (OK) (Cancel) buttons
+ *
+ * @param WindowNo Number of Window
+ * @param c Container (owner)
+ * @param AD_Message Message to be translated
+ *
+ * @return true, if OK
+ */
+
+ public static boolean ask(int windowNo, Component comp, String adMessage, Callback<String> callback)
+ {
try
{
String s = Msg.getMsg(Env.getCtx(), adMessage).replace("\n", "<br>");
- int response = Messagebox.showDialog(s, AEnv.getDialogHeader(Env.getCtx(), windowNo), Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION);
+ int response = Messagebox.showDialog(s, AEnv.getDialogHeader(Env.getCtx(), windowNo),
+ Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, callback);

return (response == Messagebox.OK);
}


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/MultiFileDownloadDialog.java
--- /dev/null
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/MultiFileDownloadDialog.java
@@ -0,0 +1,80 @@
+/******************************************************************************
+ * Copyright (C) 2012 Heng Sin Low *
+ * Copyright (C) 2012 Trek Global *
+ * 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. *
+ *****************************************************************************/
+package org.adempiere.webui.window;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+import javax.activation.MimetypesFileTypeMap;
+
+import org.adempiere.webui.component.DynamicMediaLink;
+import org.adempiere.webui.component.Window;
+import org.zkoss.util.media.AMedia;
+import org.zkoss.zk.ui.event.Event;
+import org.zkoss.zk.ui.event.EventListener;
+import org.zkoss.zul.Vlayout;
+
+/**
+ * @author hengsin
+ *
+ */
+public class MultiFileDownloadDialog extends Window {
+
+ public static final String ON_SHOW = "onShow";
+ /**
+ * generated serial dialog
+ */
+ private static final long serialVersionUID = -6078788264410182680L;
+ private File[] files;
+
+ public MultiFileDownloadDialog(File[] files) {
+ super();
+ this.files = files;
+ this.addEventListener(ON_SHOW, new EventListener<Event>() {
+ @Override
+ public void onEvent(Event event) throws Exception {
+ MultiFileDownloadDialog.this.show();
+ }
+ });
+ }
+
+ private void show() {
+ Vlayout layout = new Vlayout();
+ layout.setStyle("padding-top: 10px; padding-bottom: 10px;");
+ appendChild(layout);
+ MimetypesFileTypeMap mimeMap = new MimetypesFileTypeMap();
+ for(File file : files) {
+ try {
+ AMedia media = new AMedia(file, mimeMap.getContentType(file), null);
+ DynamicMediaLink link = new DynamicMediaLink();
+ layout.appendChild(link);
+ link.setMedia(media);
+ link.setLabel(media.getName());
+ link.setStyle("margin: 5px;");
+ } catch (FileNotFoundException e) {
+ }
+ }
+
+ this.setClosable(true);
+ this.setSizable(true);
+ this.setMaximizable(true);
+ this.setBorder("normal");
+ this.setContentStyle("min-height: 200px; min-width:300px");
+ this.setPosition("center");
+ if (this.getTitle() == null || this.getTitle().length() == 0) {
+ this.setTitle("Downloads");
+ }
+ this.doHighlighted();
+ }
+}


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui/src/org/compiere/apps/AbstractProcessCtl.java
--- a/org.adempiere.ui/src/org/compiere/apps/AbstractProcessCtl.java
+++ b/org.adempiere.ui/src/org/compiere/apps/AbstractProcessCtl.java
@@ -22,7 +22,7 @@
import java.sql.ResultSet;
import java.util.logging.Level;

-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.adempiere.util.ProcessUtil;
import org.compiere.db.CConnection;
import org.compiere.interfaces.Server;
@@ -62,10 +62,10 @@
* @param trx Transaction
* Created in process(), VInvoiceGen.generateInvoices
*/
- public AbstractProcessCtl (IProcessMonitor aProcessMonitor, int WindowNo, ProcessInfo pi, Trx trx)
+ public AbstractProcessCtl (IProcessUI aProcessUI, int WindowNo, ProcessInfo pi, Trx trx)
{
windowno = WindowNo;
- m_processMonitor = aProcessMonitor;
+ m_processUI = aProcessUI;
m_pi = pi;
m_trx = trx; // handeled correctly
} // ProcessCtl
@@ -73,7 +73,7 @@
/** Windowno */
private int windowno;
/** Parenr */
- private IProcessMonitor m_processMonitor;
+ private IProcessUI m_processUI;
/** Process Info */
private ProcessInfo m_pi;
private Trx m_trx;
@@ -276,7 +276,7 @@
{
m_pi.setReportingProcess(true);
// Start Report -----------------------------------------------
- boolean ok = ReportCtl.start(m_processMonitor, windowno, m_pi, IsDirectPrint);
+ boolean ok = ReportCtl.start(m_processUI, windowno, m_pi, IsDirectPrint);
m_pi.setSummary("Report", !ok);
unlock ();
}
@@ -322,12 +322,12 @@
return m_pi;
}

- protected IProcessMonitor getProcessMonitor()
+ protected IProcessUI getProcessMonitor()
{
- return m_processMonitor;
+ return m_processUI;
}

- protected IProcessMonitor getParent()
+ protected IProcessUI getParent()
{
return getProcessMonitor();
}
@@ -445,7 +445,7 @@
if (m_pi.getClassName().toLowerCase().startsWith(MRule.SCRIPT_PREFIX)) {
return ProcessUtil.startScriptProcess(Env.getCtx(), m_pi, m_trx);
} else {
- return ProcessUtil.startJavaProcess(Env.getCtx(), m_pi, m_trx, true, m_processMonitor);
+ return ProcessUtil.startJavaProcess(Env.getCtx(), m_pi, m_trx, true, m_processUI);
}
}
return !m_pi.isError();


diff -r 2b892417d840f62b3f71b797272990c92749bb1d -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 org.adempiere.ui/src/org/compiere/print/ReportCtl.java
--- a/org.adempiere.ui/src/org/compiere/print/ReportCtl.java
+++ b/org.adempiere.ui/src/org/compiere/print/ReportCtl.java
@@ -21,7 +21,7 @@

import org.adempiere.base.Service;
import org.adempiere.exceptions.AdempiereException;
-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.compiere.model.MPaySelectionCheck;
import org.compiere.model.MProcess;
import org.compiere.model.MQuery;
@@ -92,7 +92,7 @@
* @param IsDirectPrint if true, prints directly - otherwise View
* @return true if created
*/
- static public boolean start (IProcessMonitor parent, int WindowNo, ProcessInfo pi, boolean IsDirectPrint)
+ static public boolean start (IProcessUI parent, int WindowNo, ProcessInfo pi, boolean IsDirectPrint)
{
pi.setPrintPreview(!IsDirectPrint);
return start(parent, WindowNo, pi);
@@ -109,7 +109,7 @@
* @param IsDirectPrint if true, prints directly - otherwise View
* @return true if created
*/
- static public boolean start (IProcessMonitor parent, int WindowNo, ProcessInfo pi)
+ static public boolean start (IProcessUI parent, int WindowNo, ProcessInfo pi)
{
s_log.info("start - " + pi);

@@ -261,7 +261,7 @@
* @param printerName Specified printer name
* @return true if success
*/
- public static boolean startDocumentPrint(int type, MPrintFormat customPrintFormat, int Record_ID, IProcessMonitor parent, int WindowNo, String printerName)
+ public static boolean startDocumentPrint(int type, MPrintFormat customPrintFormat, int Record_ID, IProcessUI parent, int WindowNo, String printerName)
{
return(startDocumentPrint(type, customPrintFormat, Record_ID, parent, WindowNo, true, printerName));
}
@@ -276,7 +276,7 @@
* @param IsDirectPrint if true, prints directly - otherwise View
* @return true if success
*/
- public static boolean startDocumentPrint(int type, int Record_ID, IProcessMonitor parent, int WindowNo,
+ public static boolean startDocumentPrint(int type, int Record_ID, IProcessUI parent, int WindowNo,
boolean IsDirectPrint)
{
return(startDocumentPrint(type, null, Record_ID, parent, WindowNo, IsDirectPrint, null ));
@@ -291,7 +291,7 @@
* @param printerName Specified printer name
* @return true if success
*/
- public static boolean startDocumentPrint (int type, MPrintFormat customPrintFormat, int Record_ID, IProcessMonitor parent, int WindowNo,
+ public static boolean startDocumentPrint (int type, MPrintFormat customPrintFormat, int Record_ID, IProcessUI parent, int WindowNo,
boolean IsDirectPrint, String printerName)
{
ReportEngine re = ReportEngine.get (Env.getCtx(), type, Record_ID);



https://bitbucket.org/idempiere/idempiere/changeset/c078cbf36853/
changeset: c078cbf36853
branch: development
user: hengsin
date: 2012-06-20 10:01:15
summary: IDEMPIERE-309 Process UI: Add ask and file download dialog support
affected #: 2 files

diff -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 -r c078cbf36853d7ef6395929fb2af7fc61791932a org.adempiere.base/src/org/compiere/model/MYear.java
--- a/org.adempiere.base/src/org/compiere/model/MYear.java
+++ b/org.adempiere.base/src/org/compiere/model/MYear.java
@@ -27,7 +27,7 @@
import java.util.logging.Level;

import org.adempiere.exceptions.FillMandatoryException;
-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.compiere.process.SvrProcess;
import org.compiere.util.Env;
import org.compiere.util.Language;
@@ -233,7 +233,7 @@
cal.set(Calendar.MILLISECOND, 0);

//
- IProcessMonitor processMonitor = Env.getProcessMonitor(getCtx());
+ IProcessUI processMonitor = Env.getProcessUI(getCtx());
for (int month = 0; month < 12; month++)
{



diff -r d8b8be8eda8d5f0a2352ed709fc4e2d177538110 -r c078cbf36853d7ef6395929fb2af7fc61791932a org.adempiere.base/src/org/compiere/util/Env.java
--- a/org.adempiere.base/src/org/compiere/util/Env.java
+++ b/org.adempiere.base/src/org/compiere/util/Env.java
@@ -47,7 +47,7 @@

import org.adempiere.base.Core;
import org.adempiere.base.IResourceFinder;
-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.adempiere.util.ServerContextProvider;
import org.compiere.db.CConnection;
import org.compiere.model.GridWindowVO;
@@ -1695,9 +1695,9 @@
} // getWindow

//Current Process
- public static IProcessMonitor getProcessMonitor(Properties ctx)
+ public static IProcessUI getProcessUI(Properties ctx)
{
- return (IProcessMonitor) ctx.get(SvrProcess.PROCESS_MONITOR_CTX_KEY);
+ return (IProcessUI) ctx.get(SvrProcess.PROCESS_UI_CTX_KEY);
}

public static ProcessInfo getProcessInfo(Properties ctx)



https://bitbucket.org/idempiere/idempiere/changeset/2c19bb580835/
changeset: 2c19bb580835
branch: development
user: hengsin
date: 2012-06-20 10:02:13
summary: IDEMPIERE-144 Performance: Reduce use of modal dialog
affected #: 1 file

diff -r c078cbf36853d7ef6395929fb2af7fc61791932a -r 2c19bb580835ec6c25a08d1909361cba10b43bc4 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WRecordInfo.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WRecordInfo.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WRecordInfo.java
@@ -86,7 +86,6 @@
{
super ();
this.setTitle(title);
- this.setAttribute("modal", Boolean.TRUE);
this.setWidth("500px");
this.setHeight("400px");
this.setBorder("normal");
@@ -101,6 +100,7 @@
{
log.log(Level.SEVERE, "", e);
}
+ this.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED);
AEnv.showCenterScreen(this);
} // RecordInfo




https://bitbucket.org/idempiere/idempiere/changeset/5abe14ce70fa/
changeset: 5abe14ce70fa
branch: development
user: hengsin
date: 2012-06-20 10:03:25
summary: IDEMPIERE-313 Logging: Add support for setting of logging level by package
affected #: 5 files

diff -r 2c19bb580835ec6c25a08d1909361cba10b43bc4 -r 5abe14ce70faa82c9703f645b8c7f3e024fe1a96 org.adempiere.base/src/org/compiere/util/CLogFile.java
--- a/org.adempiere.base/src/org/compiere/util/CLogFile.java
+++ b/org.adempiere.base/src/org/compiere/util/CLogFile.java
@@ -141,7 +141,7 @@
if (isClient)
fileName += "client.";
else
- fileName += (CLogMgt.getRootLoggerName() +".");
+ fileName += "idempiere.";
m_fileNameDate = getFileNameDate(System.currentTimeMillis());
fileName += m_fileNameDate + "_";
for (int i = 0; i < 100; i++)


diff -r 2c19bb580835ec6c25a08d1909361cba10b43bc4 -r 5abe14ce70faa82c9703f645b8c7f3e024fe1a96 org.adempiere.base/src/org/compiere/util/CLogMgt.java
--- a/org.adempiere.base/src/org/compiere/util/CLogMgt.java
+++ b/org.adempiere.base/src/org/compiere/util/CLogMgt.java
@@ -48,9 +48,6 @@
*/
public class CLogMgt
{
- public static final String DEFAULT_ROOT_LOGGER_NAME = "adempiere";
- public static final String ROOT_LOGGER_NAME_PROPERTY = "org.adempiere.log.root";
-
/**
* Initialize Logging
* @param isClient client
@@ -147,7 +144,7 @@
// Check Loggers
if (!handlerNames.contains(CLogErrorBuffer.class.getName()))
addHandler(new CLogErrorBuffer());
- if (!handlerNames.contains(CLogConsole.class.getName()))
+ if (isClient && !handlerNames.contains(CLogConsole.class.getName()))
addHandler(new CLogConsole());
if (!handlerNames.contains(CLogFile.class.getName()))
{
@@ -164,14 +161,6 @@
} // initialize


- public static String getRootLoggerName() {
- String root = Env.getCtx().getProperty(ROOT_LOGGER_NAME_PROPERTY);
- if (root == null || root.trim().length() == 0)
- root = DEFAULT_ROOT_LOGGER_NAME;
- return root;
- }
-
-
/** Logger */
private static Logger log = Logger.getAnonymousLogger();
/** LOG Levels */
@@ -267,25 +256,39 @@
*/
public static void setLevel (Level level)
{
+ setLevel(null, level);
+ }
+
+ /**
+ * Set Level for all handlers
+ * @param level log level
+ */
+ public static void setLevel (String loggerName, Level level)
+ {
if (level == null)
return;
- Logger rootLogger = getRootLogger();
- rootLogger.setLevel(level);
- Handler[] handlers = rootLogger.getHandlers();
- if (handlers == null || handlers.length == 0)
+ Logger logger = loggerName == null || loggerName.trim().length() == 0 ? getRootLogger() : CLogger.getCLogger(loggerName, false);
+ logger.setLevel(level);
+
+ if (loggerName == null || loggerName.trim().length() == 0)
{
- initialize(true);
- handlers = rootLogger.getHandlers();
+ Handler[] handlers = logger.getHandlers();
+ if (handlers == null || handlers.length == 0)
+ {
+ initialize(true);
+ }
+
+ // JDBC if ALL
+ setJDBCDebug(level.intValue() == Level.ALL.intValue());
+ //
}
- //
- for (int i = 0; i < handlers.length; i++)
+ else
{
- handlers[i].setLevel(level);
+ if (!logger.getUseParentHandlers())
+ {
+ logger.setUseParentHandlers(true);
+ }
}
-
- // JDBC if ALL
- setJDBCDebug(level.intValue() == Level.ALL.intValue());
- //
} // setHandlerLevel

/**
@@ -303,6 +306,11 @@
*/
public static void setLevel (String levelString)
{
+ setLevel(null, levelString);
+ } // setLevel
+
+ public static void setLevel(String loggerName, String levelString)
+ {
if (levelString == null)
return;
//
@@ -310,12 +318,12 @@
{
if (LEVELS[i].getName().equals(levelString))
{
- setLevel(LEVELS[i]);
+ setLevel(loggerName, LEVELS[i]);
return;
}
}
log.log(Level.CONFIG, "Ignored: " + levelString);
- } // setLevel
+ }

/**
* Set JDBC Debug
@@ -670,7 +678,7 @@

private static Logger getRootLogger()
{
- Logger rootLogger = Logger.getLogger(getRootLoggerName());
+ Logger rootLogger = Logger.getLogger("");
if (rootLogger.getUseParentHandlers())
{
rootLogger.setUseParentHandlers(false);


diff -r 2c19bb580835ec6c25a08d1909361cba10b43bc4 -r 5abe14ce70faa82c9703f645b8c7f3e024fe1a96 org.adempiere.base/src/org/compiere/util/CLogger.java
--- a/org.adempiere.base/src/org/compiere/util/CLogger.java
+++ b/org.adempiere.base/src/org/compiere/util/CLogger.java
@@ -46,18 +46,47 @@
*/
public static synchronized CLogger getCLogger (String className)
{
+ return getCLogger(className, true);
+ }
+
+ /**
+ * Get Logger
+ * @param className class name
+ * @param usePackageLevel
+ * @return Logger
+ */
+ public static synchronized CLogger getCLogger (String className, boolean usePackageLevel)
+ {
// CLogMgt.initialize();
LogManager manager = LogManager.getLogManager();
if (className == null || className.trim().length() == 0)
- className = CLogMgt.getRootLoggerName();
- else
- className = CLogMgt.getRootLoggerName() + "." + className;
+ className = "";
+
Logger result = manager.getLogger(className);
if (result != null && result instanceof CLogger)
return (CLogger)result;
+
+ Logger packageLogger = null;
+ if (className.indexOf(".") > 0 && usePackageLevel)
+ {
+ String s = className.substring(0, className.lastIndexOf("."));
+ while(s.indexOf(".") > 0)
+ {
+ result = manager.getLogger(s);
+ if (result != null && result instanceof CLogger)
+ {
+ packageLogger = result;
+ break;
+ }
+ s = s.substring(0, s.lastIndexOf("."));
+ }
+ }
//
CLogger newLogger = new CLogger(className, null);
- newLogger.setLevel(CLogMgt.getLevel());
+ if (packageLogger != null && packageLogger.getLevel() != null)
+ newLogger.setLevel(packageLogger.getLevel());
+ else
+ newLogger.setLevel(CLogMgt.getLevel());
manager.addLogger(newLogger);
return newLogger;
} // getLogger


diff -r 2c19bb580835ec6c25a08d1909361cba10b43bc4 -r 5abe14ce70faa82c9703f645b8c7f3e024fe1a96 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/SessionContextListener.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/SessionContextListener.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/SessionContextListener.java
@@ -81,7 +81,6 @@
SessionManager.getAppDesktop().showURL(url, true);
}
});
- ctx.put(CLogMgt.ROOT_LOGGER_NAME_PROPERTY, WebUIServlet.WEBUI_ROOT_LOGGER_NAME);
ctx.setProperty(SERVLET_SESSION_ID, httpSession.getId());
session.setAttribute(SESSION_CTX, ctx);
}


diff -r 2c19bb580835ec6c25a08d1909361cba10b43bc4 -r 5abe14ce70faa82c9703f645b8c7f3e024fe1a96 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/WebUIServlet.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/WebUIServlet.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/WebUIServlet.java
@@ -30,7 +30,6 @@
import javax.servlet.http.HttpServletResponse;

import org.compiere.Adempiere;
-import org.compiere.util.CLogMgt;
import org.compiere.util.CLogger;
import org.compiere.util.Ini;
import org.zkoss.zk.ui.http.DHtmlLayoutServlet;
@@ -46,8 +45,6 @@
*/
public class WebUIServlet extends DHtmlLayoutServlet
{
- public static final String WEBUI_ROOT_LOGGER_NAME = "webui";
-
private static final long serialVersionUID = 1L;

/** Logger for the class * */
@@ -64,7 +61,6 @@
SessionManager.getAppDesktop().showURL(url, true);
}
});
- serverContext.put(CLogMgt.ROOT_LOGGER_NAME_PROPERTY, WEBUI_ROOT_LOGGER_NAME);
ServerContext.setCurrentInstance(serverContext);

String propertyFile = Ini.getFileName(false);
@@ -78,20 +74,15 @@
boolean started = Adempiere.startup(false);
if(!started)
{
- throw new ServletException("Could not start ADempiere");
+ throw new ServletException("Could not start iDempiere");
}
}
- else
- {
- CLogMgt.initialize(false);
- CLogMgt.setLevel(Ini.getProperty(Ini.P_TRACELEVEL));
- }

logger = CLogger.getCLogger(WebUIServlet.class);

- logger.log(Level.OFF, "ADempiere web ui service started successfully");
+ logger.log(Level.OFF, "iDempiere web ui service started successfully");
/**
- * End ADempiere Start
+ * End iDempiere Start
*/
}




https://bitbucket.org/idempiere/idempiere/changeset/18165e1bdb1b/
changeset: 18165e1bdb1b
branch: development
user: hengsin
date: 2012-06-20 10:04:42
summary: IDEMPIERE-309 Process UI: Add ask and file download dialog support
affected #: 1 file

diff -r 5abe14ce70faa82c9703f645b8c7f3e024fe1a96 -r 18165e1bdb1b3df9e304d1c66f315ef8b54e310b org.adempiere.base/src/org/compiere/model/MPayment.java
--- a/org.adempiere.base/src/org/compiere/model/MPayment.java
+++ b/org.adempiere.base/src/org/compiere/model/MPayment.java
@@ -28,7 +28,7 @@
import java.util.logging.Level;

import org.adempiere.exceptions.AdempiereException;
-import org.adempiere.util.IProcessMonitor;
+import org.adempiere.util.IProcessUI;
import org.compiere.process.DocAction;
import org.compiere.process.DocumentEngine;
import org.compiere.process.ProcessCall;
@@ -1591,7 +1591,8 @@
private String m_processMsg = null;
/** Just Prepared Flag */
private boolean m_justPrepared = false;
- private IProcessMonitor m_processMonitor;
+ @SuppressWarnings("unused")
+ private IProcessUI m_processUI;

/**
* Unlock Document.
@@ -2619,8 +2620,8 @@


@Override
- public void setProcessMonitor(IProcessMonitor processMonitor) {
- m_processMonitor = processMonitor;
+ public void setProcessUI(IProcessUI processMonitor) {
+ m_processUI = processMonitor;
}

} // MPayment



https://bitbucket.org/idempiere/idempiere/changeset/95b35c4c85da/
changeset: 95b35c4c85da
branch: development
user: hengsin
date: 2012-06-20 10:07:53
summary: IDEMPIERE-314 Performance: Use map for the looking up of column index by ColumnName or AD_Column_ID
affected #: 1 file

diff -r 18165e1bdb1b3df9e304d1c66f315ef8b54e310b -r 95b35c4c85da54d5155f5871b264b13bdf08e9a2 org.adempiere.base/src/org/compiere/model/POInfo.java
--- a/org.adempiere.base/src/org/compiere/model/POInfo.java
+++ b/org.adempiere.base/src/org/compiere/model/POInfo.java
@@ -22,6 +22,8 @@
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Properties;
import java.util.logging.Level;

@@ -126,7 +128,10 @@
private boolean m_hasKeyColumn = false;
/** Table needs keep log*/
private boolean m_IsChangeLog = false;
-
+ /** column name to index map **/
+ private Map<String, Integer> m_columnNameMap;
+ /** ad_column_id to index map **/
+ private Map<Integer, Integer> m_columnIdMap;

/**
* Load Table/Column Info
@@ -135,6 +140,8 @@
*/
private void loadInfo (boolean baseLanguage, String trxName)
{
+ m_columnNameMap = new HashMap<String, Integer>();
+ m_columnIdMap = new HashMap<Integer, Integer>();
ArrayList<POInfoColumn> list = new ArrayList<POInfoColumn>(15);
StringBuffer sql = new StringBuffer();
sql.append("SELECT t.TableName, c.ColumnName,c.AD_Reference_ID," // 1..3
@@ -205,6 +212,9 @@
IsTranslated, IsEncrypted,
IsAllowLogging, IsAllowCopy);
list.add(col);
+
+ m_columnNameMap.put(ColumnName.toUpperCase(), list.size() - 1);
+ m_columnIdMap.put(AD_Column_ID, list.size() - 1);
}
}
catch (SQLException e)
@@ -293,11 +303,10 @@
*/
public int getColumnIndex (String ColumnName)
{
- for (int i = 0; i < m_columns.length; i++)
- {
- if (ColumnName.equalsIgnoreCase(m_columns[i].ColumnName)) // teo_sarca : modified to compare ignoring case [ 1619179 ]
- return i;
- }
+ Integer i = m_columnNameMap.get(ColumnName.toUpperCase());
+ if (i != null)
+ return i.intValue();
+
return -1;
} // getColumnIndex

@@ -308,11 +317,10 @@
*/
public int getColumnIndex (int AD_Column_ID)
{
- for (int i = 0; i < m_columns.length; i++)
- {
- if (AD_Column_ID == m_columns[i].AD_Column_ID)
- return i;
- }
+ Integer i = m_columnIdMap.get(AD_Column_ID);
+ if (i != null)
+ return i.intValue();
+
return -1;
} // getColumnIndex

@@ -731,11 +739,11 @@

/**
* Build select clause
- * @return stringbuffer
+ * @return stringbuilder
*/
- public StringBuffer buildSelect()
+ public StringBuilder buildSelect()
{
- StringBuffer sql = new StringBuffer("SELECT ");
+ StringBuilder sql = new StringBuilder("SELECT ");
int size = getColumnCount();
for (int i = 0; i < size; i++)
{



https://bitbucket.org/idempiere/idempiere/changeset/7ab6fae01553/
changeset: 7ab6fae01553
branch: development
user: hengsin
date: 2012-06-20 10:11:27
summary: IDEMPIERE-146 Performance: Report Engine always read all data into memory. Make print element serializable to prepare for future virtualization of report data.
affected #: 2 files

diff -r 95b35c4c85da54d5155f5871b264b13bdf08e9a2 -r 7ab6fae0155389a2b723d1a6aa72bb0c675b2a1a org.adempiere.base/src/org/compiere/print/PrintData.java
--- a/org.adempiere.base/src/org/compiere/print/PrintData.java
+++ b/org.adempiere.base/src/org/compiere/print/PrintData.java
@@ -75,7 +75,7 @@
* @param name data element name
* @param nodes ArrayList with nodes (content not checked)
*/
- public PrintData (Properties ctx, String name, ArrayList<Object> nodes)
+ public PrintData (Properties ctx, String name, ArrayList<Serializable> nodes)
{
if (name == null)
throw new IllegalArgumentException("Name cannot be null");
@@ -90,9 +90,9 @@
/** Data Structure Name */
private String m_name;
/** Data Structure rows */
- private ArrayList<ArrayList<Object>> m_rows = new ArrayList<ArrayList<Object>>();
+ private ArrayList<ArrayList<Serializable>> m_rows = new ArrayList<ArrayList<Serializable>>();
/** Current Row Data Structure elements */
- private ArrayList<Object> m_nodes = null;
+ private ArrayList<Serializable> m_nodes = null;
/** Current Row */
private int m_row = -1;
/** List of Function Rows */
@@ -246,7 +246,7 @@
*/
public void addRow (boolean functionRow, int levelNo)
{
- m_nodes = new ArrayList<Object>();
+ m_nodes = new ArrayList<Serializable>();
m_row = m_rows.size();
m_rows.add (m_nodes);
if (functionRow)
@@ -265,7 +265,7 @@
if (row < 0 || row >= m_rows.size())
return false;
m_row = row;
- m_nodes = (ArrayList<Object>)m_rows.get(m_row);
+ m_nodes = m_rows.get(m_row);
return true;
}



diff -r 95b35c4c85da54d5155f5871b264b13bdf08e9a2 -r 7ab6fae0155389a2b723d1a6aa72bb0c675b2a1a org.adempiere.base/src/org/compiere/print/PrintDataElement.java
--- a/org.adempiere.base/src/org/compiere/print/PrintDataElement.java
+++ b/org.adempiere.base/src/org/compiere/print/PrintDataElement.java
@@ -16,6 +16,7 @@
*****************************************************************************/
package org.compiere.print;

+import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;

@@ -32,9 +33,15 @@
* @author Jorg Janke
* @version $Id: PrintDataElement.java,v 1.2 2006/07/30 00:53:02 jjanke Exp $
*/
-public class PrintDataElement
+public class PrintDataElement implements Serializable
{
/**
+ * generated serialize id
+ */
+ private static final long serialVersionUID = -4823568539698752659L;
+
+
+ /**
* Print Data Element Constructor
* @param columnName name
* @param value display value
@@ -42,7 +49,7 @@
* @param isPKey is primary key
* @param isPageBreak if true force page break
*/
- public PrintDataElement (String columnName, Object value, int displayType, boolean isPKey, boolean isPageBreak, String format)
+ public PrintDataElement (String columnName, Serializable value, int displayType, boolean isPKey, boolean isPageBreak, String format)
{
if (columnName == null)
throw new IllegalArgumentException("PrintDataElement - Name cannot be null");
@@ -61,7 +68,7 @@
* @param pattern Number/date format pattern
* @param displayType optional displayType
*/
- public PrintDataElement(String columnName, Object value, int displayType, String pattern)
+ public PrintDataElement(String columnName, Serializable value, int displayType, String pattern)
{
this (columnName, value, displayType, false, false, pattern);
} // PrintDataElement
@@ -69,7 +76,7 @@
/** Data Name */
private String m_columnName;
/** Data Value */
- private Object m_value;
+ private Serializable m_value;
/** Display Type */
private int m_displayType;
/** Is Primary Key */



https://bitbucket.org/idempiere/idempiere/changeset/3ae2049aeed4/
changeset: 3ae2049aeed4
branch: development
user: hengsin
date: 2012-06-20 10:12:33
summary: minor - change to output valid html comment as the dummy message for streaming server push.
affected #: 1 file

diff -r 7ab6fae0155389a2b723d1a6aa72bb0c675b2a1a -r 3ae2049aeed40e36ce8913ee30f0e13095a1a23b org.adempiere.ui.zk/WEB-INF/src/fi/jawsy/jawwa/zk/atmosphere/AtmosphereServerPush.java
--- a/org.adempiere.ui.zk/WEB-INF/src/fi/jawsy/jawwa/zk/atmosphere/AtmosphereServerPush.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/fi/jawsy/jawwa/zk/atmosphere/AtmosphereServerPush.java
@@ -135,7 +135,7 @@
break;
case WEBSOCKET :
case STREAMING:
- resource.getResponse().getWriter().write("@");
+ resource.getResponse().getWriter().write("<!-- dummy -->");
resource.getResponse().getWriter().flush();
break;
}



https://bitbucket.org/idempiere/idempiere/changeset/57acd1f309df/
changeset: 57acd1f309df
branch: development
user: hengsin
date: 2012-06-20 10:13:38
summary: minor - Call GC and finalization when we open the about window so that we can better observe the changes in heap space.
affected #: 1 file

diff -r 3ae2049aeed40e36ce8913ee30f0e13095a1a23b -r 57acd1f309dfd99756030cfdd2e1bffcf2b9e73f org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/AboutWindow.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/AboutWindow.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/AboutWindow.java
@@ -93,6 +93,9 @@

private void init() {

+ System.runFinalization();
+ System.gc();
+
this.setPosition("center");
this.setTitle(ThemeManager.getBrowserTitle());
this.setClosable(true);



https://bitbucket.org/idempiere/idempiere/changeset/19db6bb449b1/
changeset: 19db6bb449b1
branch: development
user: hengsin
date: 2012-06-20 10:14:48
summary: Minor - Make the Summary checkbox control align better with the other toolbar buttons.
affected #: 1 file

diff -r 57acd1f309dfd99756030cfdd2e1bffcf2b9e73f -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/ZkReportViewer.java
@@ -245,9 +245,13 @@
comboReport.setTooltiptext(Msg.translate(Env.getCtx(), "AD_PrintFormat_ID"));
toolBar.appendChild(comboReport);

+ toolBar.appendChild(new Separator("vertical"));
+
summary.setText(Msg.getMsg(Env.getCtx(), "Summary"));
toolBar.appendChild(summary);

+ toolBar.appendChild(new Separator("vertical"));
+
bCustomize.setImage("/images/Preference24.png");
bCustomize.setTooltiptext(Util.cleanAmp(Msg.getMsg(Env.getCtx(), "PrintCustomize")));
toolBar.appendChild(bCustomize);
@@ -440,6 +444,7 @@
private void dynInit()
{
summary.addActionListener(this);
+ summary.setStyle("font-size: 14px");

fillComboReport(m_reportEngine.getPrintFormat().get_ID());




https://bitbucket.org/idempiere/idempiere/changeset/1eff520ce458/
changeset: 1eff520ce458
branch: development
user: hengsin
date: 2012-06-20 10:16:11
summary: IDEMPIERE-308 Performance: Replace use of StringBuffer and String concatenation with StringBuilder
affected #: 13 files

diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.base/src/org/compiere/model/MCity.java
--- a/org.adempiere.base/src/org/compiere/model/MCity.java
+++ b/org.adempiere.base/src/org/compiere/model/MCity.java
@@ -30,7 +30,7 @@
* @author Mario Calderon / Carlos Ruiz
*/
public final class MCity extends X_C_City
- implements Comparator, Serializable
+ implements Comparator<Object>, Serializable
{
/**
*


diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.base/src/org/compiere/model/MCountry.java
--- a/org.adempiere.base/src/org/compiere/model/MCountry.java
+++ b/org.adempiere.base/src/org/compiere/model/MCountry.java
@@ -41,7 +41,7 @@
* <li>BF [ 2695078 ] Country is not translated on invoice
*/
public final class MCountry extends X_C_Country
- implements Comparator, Serializable, SystemIDs
+ implements Comparator<Object>, Serializable, SystemIDs
{
/**
*


diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.base/src/org/compiere/model/MLocation.java
--- a/org.adempiere.base/src/org/compiere/model/MLocation.java
+++ b/org.adempiere.base/src/org/compiere/model/MLocation.java
@@ -44,7 +44,7 @@
* <li>BF [ 3002736 ] MLocation.get cache all MLocations
* https://sourceforge.net/tracker/?func=detail&aid=3002736&group_id=176962&atid=879332
*/
-public class MLocation extends X_C_Location implements Comparator
+public class MLocation extends X_C_Location implements Comparator<Object>
{
/**
*


diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.base/src/org/compiere/model/MMeasureCalc.java
--- a/org.adempiere.base/src/org/compiere/model/MMeasureCalc.java
+++ b/org.adempiere.base/src/org/compiere/model/MMeasureCalc.java
@@ -97,7 +97,7 @@
public String getSqlPI (MGoalRestriction[] restrictions,
String MeasureScope, String MeasureDataType, Timestamp reportDate, MRole role)
{
- StringBuffer sb = new StringBuffer(getSelectClause())
+ StringBuilder sb = new StringBuilder(getSelectClause())
.append(" ")
.append(getWhereClause());
// Date Restriction
@@ -141,7 +141,7 @@
public String getSqlBarChart (MGoalRestriction[] restrictions,
String MeasureDisplay, Timestamp startDate, MRole role)
{
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
String dateCol = null;
String groupBy = null;
if (getDateColumn() != null
@@ -208,7 +208,7 @@
{
MQuery query = new MQuery(getAD_Table_ID());
//
- StringBuffer sql = new StringBuffer("SELECT ").append(getKeyColumn()).append(" ");
+ StringBuilder sql = new StringBuilder("SELECT ").append(getKeyColumn()).append(" ");
String from = getSelectClause();
int index = from.indexOf("FROM ");
if (index == -1)
@@ -235,7 +235,7 @@
}
String finalSQL = addRestrictions(sql.toString(), restrictions, role);
// Execute
- StringBuffer where = new StringBuffer();
+ StringBuilder where = new StringBuilder();
PreparedStatement pstmt = null;
try
{
@@ -269,7 +269,7 @@
if (where.length() == 0)
return MQuery.getNoRecordQuery(query.getTableName(), false);
//
- StringBuffer whereClause = new StringBuffer (getKeyColumn())
+ StringBuilder whereClause = new StringBuilder (getKeyColumn())
.append(" IN (").append(where).append(")");
query.addRestriction(whereClause.toString());
query.setRecordCount(1);
@@ -307,7 +307,7 @@
MGoalRestriction[] restrictions, MRole role,
String tableName, String orgColumn, String bpColumn, String pColumn)
{
- StringBuffer sb = new StringBuffer(sql);
+ StringBuilder sb = new StringBuilder(sql);
// Org Restrictions
if (orgColumn != null)
{
@@ -459,7 +459,7 @@
*/
public String toString ()
{
- StringBuffer sb = new StringBuffer ("MMeasureCalc[");
+ StringBuilder sb = new StringBuilder ("MMeasureCalc[");
sb.append (get_ID()).append ("-").append (getName()).append ("]");
return sb.toString ();
} // toString


diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.base/src/org/compiere/model/MQuery.java
--- a/org.adempiere.base/src/org/compiere/model/MQuery.java
+++ b/org.adempiere.base/src/org/compiere/model/MQuery.java
@@ -621,7 +621,7 @@
if (qualified && (m_TableName == null || m_TableName.length() == 0))
qualified = false;
//
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if (! isActive())
return sb.toString();

@@ -661,7 +661,7 @@
*/
public String getInfo ()
{
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
int currentDepth = 0;
if (m_TableName != null)
sb.append(m_TableName).append(": ");
@@ -701,7 +701,7 @@
*/
public String getWhereClause (int index)
{
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if (index >= 0 && index < m_list.size())
{
Restriction r = (Restriction)m_list.get(index);
@@ -1090,7 +1090,7 @@
if (DirectWhereClause != null)
return DirectWhereClause;
//
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
if (tableName != null && tableName.length() > 0)
{
// Assumes - REPLACE(INITCAP(variable),'s','X') or UPPER(variable)
@@ -1184,7 +1184,7 @@
{
if (InfoDisplay_to == null)
return InfoDisplay;
- StringBuffer sb = new StringBuffer(InfoDisplay);
+ StringBuilder sb = new StringBuilder(InfoDisplay);
sb.append(" - ").append(InfoDisplay_to);
return sb.toString();
} // getInfoDisplay


diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.base/src/org/compiere/model/MRegion.java
--- a/org.adempiere.base/src/org/compiere/model/MRegion.java
+++ b/org.adempiere.base/src/org/compiere/model/MRegion.java
@@ -40,7 +40,7 @@
* @version $Id: MRegion.java,v 1.3 2006/07/30 00:58:36 jjanke Exp $
*/
public final class MRegion extends X_C_Region
- implements Comparator, Serializable, SystemIDs
+ implements Comparator<Object>, Serializable, SystemIDs
{
/**
*


diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.base/src/org/compiere/model/MRfQResponseLineQty.java
--- a/org.adempiere.base/src/org/compiere/model/MRfQResponseLineQty.java
+++ b/org.adempiere.base/src/org/compiere/model/MRfQResponseLineQty.java
@@ -29,7 +29,7 @@
* @author Jorg Janke
* @version $Id: MRfQResponseLineQty.java,v 1.3 2006/07/30 00:51:03 jjanke Exp $
*/
-public class MRfQResponseLineQty extends X_C_RfQResponseLineQty implements Comparator
+public class MRfQResponseLineQty extends X_C_RfQResponseLineQty implements Comparator<Object>
{
/**
*


diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.base/src/org/compiere/model/MTable.java
--- a/org.adempiere.base/src/org/compiere/model/MTable.java
+++ b/org.adempiere.base/src/org/compiere/model/MTable.java
@@ -404,7 +404,7 @@
PO po = null;
POInfo info = POInfo.getPOInfo(getCtx(), getAD_Table_ID(), trxName);
if (info == null) return null;
- StringBuffer sqlBuffer = info.buildSelect();
+ StringBuilder sqlBuffer = info.buildSelect();
sqlBuffer.append(" WHERE ").append(whereClause);
String sql = sqlBuffer.toString();
PreparedStatement pstmt = null;


diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.base/src/org/compiere/model/Query.java
--- a/org.adempiere.base/src/org/compiere/model/Query.java
+++ b/org.adempiere.base/src/org/compiere/model/Query.java
@@ -352,7 +352,7 @@
throw new DBException("Table "+table+" has 0 or more than 1 key columns");
}

- StringBuffer selectClause = new StringBuffer("SELECT ");
+ StringBuilder selectClause = new StringBuilder("SELECT ");
selectClause.append(keys[0]);
selectClause.append(" FROM ").append(table.getTableName());
String sql = buildSQL(selectClause, true);
@@ -437,7 +437,7 @@
}
}

- StringBuffer sqlSelect = new StringBuffer("SELECT ").append(sqlFunction).append("(")
+ StringBuilder sqlSelect = new StringBuilder("SELECT ").append(sqlFunction).append("(")
.append(sqlExpression).append(")")
.append(" FROM ").append(table.getTableName());

@@ -530,7 +530,7 @@
*/
public boolean match() throws DBException
{
- String sql = buildSQL(new StringBuffer("SELECT 1 FROM ").append(table.getTableName()), false);
+ String sql = buildSQL(new StringBuilder("SELECT 1 FROM ").append(table.getTableName()), false);
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
@@ -558,7 +558,7 @@
public <T extends PO> Iterator<T> iterate() throws DBException
{
String[] keys = table.getKeyColumns();
- StringBuffer sqlBuffer = new StringBuffer(" SELECT ");
+ StringBuilder sqlBuffer = new StringBuilder(" SELECT ");
for (int i = 0; i < keys.length; i++) {
if (i > 0)
sqlBuffer.append(", ");
@@ -634,7 +634,7 @@
* @param selectClause optional; if null the select clause will be build according to POInfo
* @return final SQL
*/
- private final String buildSQL(StringBuffer selectClause, boolean useOrderByClause)
+ private final String buildSQL(StringBuilder selectClause, boolean useOrderByClause)
{
if (selectClause == null)
{
@@ -646,7 +646,7 @@
selectClause = info.buildSelect();
}

- StringBuffer whereBuffer = new StringBuffer();
+ StringBuilder whereBuffer = new StringBuilder();
if (!Util.isEmpty(this.whereClause, true))
{
if (whereBuffer.length() > 0)
@@ -679,7 +679,7 @@
+" AND s.T_Selection_ID="+table.getTableName()+"."+keys[0]+")");
}

- StringBuffer sqlBuffer = new StringBuffer(selectClause);
+ StringBuilder sqlBuffer = new StringBuilder(selectClause);
if (whereBuffer.length() > 0)
{
sqlBuffer.append(" WHERE ").append(whereBuffer);
@@ -706,18 +706,21 @@
if (this.onlyActiveRecords)
{
DB.setParameter(pstmt, i++, true);
- log.finest("Parameter IsActive = Y");
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Parameter IsActive = Y");
}
if (this.onlyClient_ID)
{
int AD_Client_ID = Env.getAD_Client_ID(ctx);
DB.setParameter(pstmt, i++, AD_Client_ID);
- log.finest("Parameter AD_Client_ID = "+AD_Client_ID);
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Parameter AD_Client_ID = "+AD_Client_ID);
}
if (this.onlySelection_ID > 0)
{
DB.setParameter(pstmt, i++, this.onlySelection_ID);
- log.finest("Parameter Selection AD_PInstance_ID = "+this.onlySelection_ID);
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Parameter Selection AD_PInstance_ID = "+this.onlySelection_ID);
}
return pstmt.executeQuery();
}
@@ -734,7 +737,7 @@
throw new DBException("Table "+table+" has 0 or more than 1 key columns");
}

- StringBuffer selectClause = new StringBuffer("SELECT ");
+ StringBuilder selectClause = new StringBuilder("SELECT ");
selectClause.append(keys[0]);
selectClause.append(" FROM ").append(table.getTableName());
String sql = buildSQL(selectClause, true);


diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.base/src/org/compiere/print/DataEngine.java
--- a/org.adempiere.base/src/org/compiere/print/DataEngine.java
+++ b/org.adempiere.base/src/org/compiere/print/DataEngine.java
@@ -16,6 +16,7 @@
*****************************************************************************/
package org.compiere.print;

+import java.io.Serializable;
import java.sql.Clob;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@@ -146,15 +147,15 @@
//
if (format.getAD_ReportView_ID() != 0)
{
- String sql = "SELECT t.AD_Table_ID, t.TableName, rv.Name, rv.WhereClause "
- + "FROM AD_Table t"
- + " INNER JOIN AD_ReportView rv ON (t.AD_Table_ID=rv.AD_Table_ID) "
- + "WHERE rv.AD_ReportView_ID=?"; // 1
+ StringBuilder sql = new StringBuilder("SELECT t.AD_Table_ID, t.TableName, rv.Name, rv.WhereClause ")
+ .append("FROM AD_Table t")
+ .append(" INNER JOIN AD_ReportView rv ON (t.AD_Table_ID=rv.AD_Table_ID) ")
+ .append("WHERE rv.AD_ReportView_ID=?"); // 1
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
- pstmt = DB.prepareStatement(sql, m_trxName);
+ pstmt = DB.prepareStatement(sql.toString(), m_trxName);
pstmt.setInt(1, format.getAD_ReportView_ID());
rs = pstmt.executeQuery();
if (rs.next())
@@ -169,7 +170,7 @@
}
catch (SQLException e)
{
- log.log(Level.SEVERE, sql, e);
+ log.log(Level.SEVERE, sql.toString(), e);
return null;
}
finally
@@ -214,8 +215,11 @@
{
m_startTime = System.currentTimeMillis();
log.info(reportName + " - " + m_language.getAD_Language());
- log.fine("TableName=" + tableName + ", Query=" + query);
- log.fine("Format=" + format);
+ if (log.isLoggable(Level.FINE))
+ {
+ log.fine("TableName=" + tableName + ", Query=" + query);
+ log.fine("Format=" + format);
+ }
ArrayList<PrintDataColumn> columns = new ArrayList<PrintDataColumn>();
m_group = new PrintDataGroup();

@@ -224,49 +228,50 @@
ArrayList<String> orderColumns = new ArrayList<String>(orderAD_Column_IDs.length);
for (int i = 0; i < orderAD_Column_IDs.length; i++)
{
- log.finest("Order AD_Column_ID=" + orderAD_Column_IDs[i]);
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Order AD_Column_ID=" + orderAD_Column_IDs[i]);
orderColumns.add(""); // initial value overwritten with fully qualified name
}

// Direct SQL w/o Reference Info
- StringBuffer sqlSELECT = new StringBuffer("SELECT ");
- StringBuffer sqlFROM = new StringBuffer(" FROM ").append(tableName);
+ StringBuilder sqlSELECT = new StringBuilder("SELECT ");
+ StringBuilder sqlFROM = new StringBuilder(" FROM ").append(tableName);
ArrayList<String> groupByColumns = new ArrayList<String>();
//
boolean IsGroupedBy = false;
//
- String sql = "SELECT c.AD_Column_ID,c.ColumnName," // 1..2
- + "c.AD_Reference_ID,c.AD_Reference_Value_ID," // 3..4
- + "c.FieldLength,c.IsMandatory,c.IsKey,c.IsParent," // 5..8
- + "COALESCE(rvc.IsGroupFunction,'N'),rvc.FunctionColumn," // 9..10
- + "pfi.IsGroupBy,pfi.IsSummarized,pfi.IsAveraged,pfi.IsCounted, " // 11..14
- + "pfi.IsPrinted,pfi.SortNo,pfi.IsPageBreak, " // 15..17
- + "pfi.IsMinCalc,pfi.IsMaxCalc, " // 18..19
- + "pfi.isRunningTotal,pfi.RunningTotalLines, " // 20..21
- + "pfi.IsVarianceCalc, pfi.IsDeviationCalc, " // 22..23
- + "c.ColumnSQL, COALESCE(pfi.FormatPattern, c.FormatPattern) " // 24, 25
+ StringBuilder sql = new StringBuilder("SELECT c.AD_Column_ID,c.ColumnName,") // 1..2
+ .append("c.AD_Reference_ID,c.AD_Reference_Value_ID,") // 3..4
+ .append("c.FieldLength,c.IsMandatory,c.IsKey,c.IsParent,") // 5..8
+ .append("COALESCE(rvc.IsGroupFunction,'N'),rvc.FunctionColumn,") // 9..10
+ .append("pfi.IsGroupBy,pfi.IsSummarized,pfi.IsAveraged,pfi.IsCounted, ") // 11..14
+ .append("pfi.IsPrinted,pfi.SortNo,pfi.IsPageBreak, ") // 15..17
+ .append("pfi.IsMinCalc,pfi.IsMaxCalc, ") // 18..19
+ .append("pfi.isRunningTotal,pfi.RunningTotalLines, ") // 20..21
+ .append("pfi.IsVarianceCalc, pfi.IsDeviationCalc, ") // 22..23
+ .append("c.ColumnSQL, COALESCE(pfi.FormatPattern, c.FormatPattern) ") // 24, 25
//BEGIN http://jira.idempiere.com/browse/IDEMPIERE-153
- + " , pfi.isDesc " //26
+ .append(" , pfi.isDesc ") //26
//END
- + "FROM AD_PrintFormat pf"
- + " INNER JOIN AD_PrintFormatItem pfi ON (pf.AD_PrintFormat_ID=pfi.AD_PrintFormat_ID)"
- + " INNER JOIN AD_Column c ON (pfi.AD_Column_ID=c.AD_Column_ID)"
- + " LEFT OUTER JOIN AD_ReportView_Col rvc ON (pf.AD_ReportView_ID=rvc.AD_ReportView_ID AND c.AD_Column_ID=rvc.AD_Column_ID) "
- + "WHERE pf.AD_PrintFormat_ID=?" // #1
- + " AND pfi.IsActive='Y' AND (pfi.IsPrinted='Y' OR c.IsKey='Y' OR pfi.SortNo > 0) "
- + " AND pfi.PrintFormatType IN ('"
+ .append("FROM AD_PrintFormat pf")
+ .append(" INNER JOIN AD_PrintFormatItem pfi ON (pf.AD_PrintFormat_ID=pfi.AD_PrintFormat_ID)")
+ .append(" INNER JOIN AD_Column c ON (pfi.AD_Column_ID=c.AD_Column_ID)")
+ .append(" LEFT OUTER JOIN AD_ReportView_Col rvc ON (pf.AD_ReportView_ID=rvc.AD_ReportView_ID AND c.AD_Column_ID=rvc.AD_Column_ID) ")
+ .append("WHERE pf.AD_PrintFormat_ID=?") // #1
+ .append(" AND pfi.IsActive='Y' AND (pfi.IsPrinted='Y' OR c.IsKey='Y' OR pfi.SortNo > 0) ")
+ .append(" AND pfi.PrintFormatType IN ('"
+ MPrintFormatItem.PRINTFORMATTYPE_Field
+ "','"
+ MPrintFormatItem.PRINTFORMATTYPE_Image
+ "','"
+ MPrintFormatItem.PRINTFORMATTYPE_PrintFormat
- + "') "
- + "ORDER BY pfi.IsPrinted DESC, pfi.SeqNo"; // Functions are put in first column
+ + "') ")
+ .append("ORDER BY pfi.IsPrinted DESC, pfi.SeqNo"); // Functions are put in first column
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
- pstmt = DB.prepareStatement(sql, m_trxName);
+ pstmt = DB.prepareStatement(sql.toString(), m_trxName);
pstmt.setInt(1, format.get_ID());
rs = pstmt.executeQuery();

@@ -556,7 +561,7 @@
else if (index == -1)
{
// => Table.Column,
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append(tableName).append(".").append(ColumnName);
sqlSELECT.append(sb).append(",");
if (!IsGroupFunction)
@@ -565,7 +570,7 @@
else
{
// => Function(Table.Column) AS Column -- function has @ where column name goes
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append(FunctionColumn.substring(0, index))
.append(tableName).append(".").append(ColumnName)
.append(FunctionColumn.substring(index+1));
@@ -621,7 +626,8 @@
if (columns.size() == 0)
{
log.log(Level.SEVERE, "No Colums - Delete Report Format " + reportName + " and start again");
- log.finest("No Colums - SQL=" + sql + " - ID=" + format.get_ID());
+ if (log.isLoggable(Level.FINEST))
+ log.finest("No Colums - SQL=" + sql + " - ID=" + format.get_ID());
return null;
}

@@ -636,7 +642,7 @@
/**
* Assemble final SQL - delete last SELECT ','
*/
- StringBuffer finalSQL = new StringBuffer();
+ StringBuilder finalSQL = new StringBuilder();
finalSQL.append(sqlSELECT.substring(0, sqlSELECT.length()-1))
.append(sqlFROM);

@@ -666,7 +672,7 @@
if (role.getAD_Role_ID() == 0 && !Ini.isClient())
; // System Access
else
- finalSQL = new StringBuffer (role.addAccessSQL (finalSQL.toString (),
+ finalSQL = new StringBuilder (role.addAccessSQL (finalSQL.toString (),
tableName, MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO));
}

@@ -709,8 +715,11 @@
pd.setSQL(finalSQL.toString());
pd.setHasLevelNo(hasLevelNo);

- log.finest (finalSQL.toString ());
- log.finest ("Group=" + m_group);
+ if (log.isLoggable(Level.FINEST))
+ {
+ log.finest (finalSQL.toString ());
+ log.finest ("Group=" + m_group);
+ }
return pd;
} // getPrintDataInfo

@@ -751,19 +760,19 @@
//
TableReference tr = new TableReference();
//
- String SQL = "SELECT t.TableName, ck.ColumnName AS KeyColumn," // 1..2
- + " cd.ColumnName AS DisplayColumn, rt.IsValueDisplayed, cd.IsTranslated "
- + "FROM AD_Ref_Table rt"
- + " INNER JOIN AD_Table t ON (rt.AD_Table_ID = t.AD_Table_ID)"
- + " INNER JOIN AD_Column ck ON (rt.AD_Key = ck.AD_Column_ID)"
- + " INNER JOIN AD_Column cd ON (rt.AD_Display = cd.AD_Column_ID) "
- + "WHERE rt.AD_Reference_ID=?" // 1
- + " AND rt.IsActive = 'Y' AND t.IsActive = 'Y'";
+ StringBuilder SQL = new StringBuilder("SELECT t.TableName, ck.ColumnName AS KeyColumn,") // 1..2
+ .append(" cd.ColumnName AS DisplayColumn, rt.IsValueDisplayed, cd.IsTranslated ")
+ .append("FROM AD_Ref_Table rt")
+ .append(" INNER JOIN AD_Table t ON (rt.AD_Table_ID = t.AD_Table_ID)")
+ .append(" INNER JOIN AD_Column ck ON (rt.AD_Key = ck.AD_Column_ID)")
+ .append(" INNER JOIN AD_Column cd ON (rt.AD_Display = cd.AD_Column_ID) ")
+ .append("WHERE rt.AD_Reference_ID=?") // 1
+ .append(" AND rt.IsActive = 'Y' AND t.IsActive = 'Y'");
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
- pstmt = DB.prepareStatement(SQL, null);
+ pstmt = DB.prepareStatement(SQL.toString(), null);
pstmt.setInt (1, AD_Reference_Value_ID);
rs = pstmt.executeQuery();
if (rs.next())
@@ -777,7 +786,7 @@
}
catch (SQLException ex)
{
- log.log(Level.SEVERE, SQL, ex);
+ log.log(Level.SEVERE, SQL.toString(), ex);
}
finally
{
@@ -993,7 +1002,7 @@
pde = new PrintDataElement(pdc.getColumnName(), s, pdc.getDisplayType(), pdc.getFormatPattern());
}
else
- pde = new PrintDataElement(pdc.getColumnName(), obj, pdc.getDisplayType(), pdc.getFormatPattern());
+ pde = new PrintDataElement(pdc.getColumnName(), (Serializable)obj, pdc.getDisplayType(), pdc.getFormatPattern());
}
}
} // Value only
@@ -1120,12 +1129,14 @@
{
if (m_runningTotalLines < 1) // -1 = none
return;
- log.fine("(" + m_runningTotalLines + ") - Row=" + rowNo
- + ", mod=" + rowNo % m_runningTotalLines);
+ if (log.isLoggable(Level.FINE))
+ log.fine("(" + m_runningTotalLines + ") - Row=" + rowNo
+ + ", mod=" + rowNo % m_runningTotalLines);
if (rowNo % m_runningTotalLines != 0)
return;

- log.fine("Row=" + rowNo);
+ if (log.isLoggable(Level.FINE))
+ log.fine("Row=" + rowNo);
PrintDataColumn pdc = null;
int start = 0;
if (rowNo == 0) // no page break on page 1


diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.base/src/org/compiere/print/ReportEngine.java
--- a/org.adempiere.base/src/org/compiere/print/ReportEngine.java
+++ b/org.adempiere.base/src/org/compiere/print/ReportEngine.java
@@ -431,7 +431,8 @@
PrintServiceAttributeSet - length=1
queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
**/
- log.fine("attributeUpdate - " + psae);
+ if (log.isLoggable(Level.FINE))
+ log.fine("attributeUpdate - " + psae);
// PrintUtil.dump (psae.getAttributes());
} // attributeUpdate

@@ -978,7 +979,8 @@
return false;
}

- log.fine(uri.toString());
+ if (log.isLoggable(Level.FINE))
+ log.fine(uri.toString());

try
{
@@ -1111,20 +1113,20 @@
int Client_ID = -1;

// Get AD_Table_ID and TableName
- String sql = "SELECT rv.AD_ReportView_ID,rv.WhereClause,"
- + " t.AD_Table_ID,t.TableName, pf.AD_PrintFormat_ID, pf.IsForm, pf.AD_Client_ID "
- + "FROM AD_PInstance pi"
- + " INNER JOIN AD_Process p ON (pi.AD_Process_ID=p.AD_Process_ID)"
- + " INNER JOIN AD_ReportView rv ON (p.AD_ReportView_ID=rv.AD_ReportView_ID)"
- + " INNER JOIN AD_Table t ON (rv.AD_Table_ID=t.AD_Table_ID)"
- + " LEFT OUTER JOIN AD_PrintFormat pf ON (p.AD_ReportView_ID=pf.AD_ReportView_ID AND pf.AD_Client_ID IN (0,?) AND pf.IsActive='Y') "
- + "WHERE pi.AD_PInstance_ID=? " // #2
- + "ORDER BY pf.AD_Client_ID DESC, pf.IsDefault DESC"; // own first
+ StringBuilder sql = new StringBuilder("SELECT rv.AD_ReportView_ID,rv.WhereClause,")
+ .append(" t.AD_Table_ID,t.TableName, pf.AD_PrintFormat_ID, pf.IsForm, pf.AD_Client_ID ")
+ .append("FROM AD_PInstance pi")
+ .append(" INNER JOIN AD_Process p ON (pi.AD_Process_ID=p.AD_Process_ID)")
+ .append(" INNER JOIN AD_ReportView rv ON (p.AD_ReportView_ID=rv.AD_ReportView_ID)")
+ .append(" INNER JOIN AD_Table t ON (rv.AD_Table_ID=t.AD_Table_ID)")
+ .append(" LEFT OUTER JOIN AD_PrintFormat pf ON (p.AD_ReportView_ID=pf.AD_ReportView_ID AND pf.AD_Client_ID IN (0,?) AND pf.IsActive='Y') ")
+ .append("WHERE pi.AD_PInstance_ID=? ") // #2
+ .append("ORDER BY pf.AD_Client_ID DESC, pf.IsDefault DESC"); // own first
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
- pstmt = DB.prepareStatement(sql, null);
+ pstmt = DB.prepareStatement(sql.toString(), null);
pstmt.setInt(1, AD_Client_ID);
pstmt.setInt(2, pi.getAD_PInstance_ID());
rs = pstmt.executeQuery();
@@ -1155,15 +1157,15 @@
if (AD_ReportView_ID == 0)
{
// Check Print format in Report Directly
- sql = "SELECT t.AD_Table_ID,t.TableName, pf.AD_PrintFormat_ID, pf.IsForm "
- + "FROM AD_PInstance pi"
- + " INNER JOIN AD_Process p ON (pi.AD_Process_ID=p.AD_Process_ID)"
- + " INNER JOIN AD_PrintFormat pf ON (p.AD_PrintFormat_ID=pf.AD_PrintFormat_ID)"
- + " INNER JOIN AD_Table t ON (pf.AD_Table_ID=t.AD_Table_ID) "
- + "WHERE pi.AD_PInstance_ID=?";
+ sql = new StringBuilder("SELECT t.AD_Table_ID,t.TableName, pf.AD_PrintFormat_ID, pf.IsForm ")
+ .append("FROM AD_PInstance pi")
+ .append(" INNER JOIN AD_Process p ON (pi.AD_Process_ID=p.AD_Process_ID)")
+ .append(" INNER JOIN AD_PrintFormat pf ON (p.AD_PrintFormat_ID=pf.AD_PrintFormat_ID)")
+ .append(" INNER JOIN AD_Table t ON (pf.AD_Table_ID=t.AD_Table_ID) ")
+ .append("WHERE pi.AD_PInstance_ID=?");
try
{
- pstmt = DB.prepareStatement(sql, null);
+ pstmt = DB.prepareStatement(sql.toString(), null);
pstmt.setInt(1, pi.getAD_PInstance_ID());
rs = pstmt.executeQuery();
if (rs.next())
@@ -1332,115 +1334,115 @@
MClient client = MClient.get(ctx);
Language language = client.getLanguage();
// Get Document Info
- String sql = null;
+ StringBuilder sql = null;
if (type == CHECK)
- sql = "SELECT bad.Check_PrintFormat_ID," // 1
- + " c.IsMultiLingualDocument,bp.AD_Language,bp.C_BPartner_ID,d.DocumentNo " // 2..5
- + "FROM C_PaySelectionCheck d"
- + " INNER JOIN C_PaySelection ps ON (d.C_PaySelection_ID=ps.C_PaySelection_ID)"
- + " INNER JOIN C_BankAccountDoc bad ON (ps.C_BankAccount_ID=bad.C_BankAccount_ID AND d.PaymentRule=bad.PaymentRule)"
- + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
- + " INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID) "
- + "WHERE d.C_PaySelectionCheck_ID=?"; // info from BankAccount
+ sql = new StringBuilder("SELECT bad.Check_PrintFormat_ID,") // 1
+ .append(" c.IsMultiLingualDocument,bp.AD_Language,bp.C_BPartner_ID,d.DocumentNo ") // 2..5
+ .append("FROM C_PaySelectionCheck d")
+ .append(" INNER JOIN C_PaySelection ps ON (d.C_PaySelection_ID=ps.C_PaySelection_ID)")
+ .append(" INNER JOIN C_BankAccountDoc bad ON (ps.C_BankAccount_ID=bad.C_BankAccount_ID AND d.PaymentRule=bad.PaymentRule)")
+ .append(" INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)")
+ .append(" INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID) ")
+ .append("WHERE d.C_PaySelectionCheck_ID=?"); // info from BankAccount
else if (type == DUNNING)
- sql = "SELECT dl.Dunning_PrintFormat_ID,"
- + " c.IsMultiLingualDocument,bp.AD_Language,bp.C_BPartner_ID,dr.DunningDate "
- + "FROM C_DunningRunEntry d"
- + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
- + " INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID)"
- + " INNER JOIN C_DunningRun dr ON (d.C_DunningRun_ID=dr.C_DunningRun_ID)"
- + " INNER JOIN C_DunningLevel dl ON (dl.C_DunningLevel_ID=d.C_DunningLevel_ID) "
- + "WHERE d.C_DunningRunEntry_ID=?"; // info from Dunning
+ sql = new StringBuilder("SELECT dl.Dunning_PrintFormat_ID,")
+ .append(" c.IsMultiLingualDocument,bp.AD_Language,bp.C_BPartner_ID,dr.DunningDate ")
+ .append("FROM C_DunningRunEntry d")
+ .append(" INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)")
+ .append(" INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID)")
+ .append(" INNER JOIN C_DunningRun dr ON (d.C_DunningRun_ID=dr.C_DunningRun_ID)")
+ .append(" INNER JOIN C_DunningLevel dl ON (dl.C_DunningLevel_ID=d.C_DunningLevel_ID) ")
+ .append("WHERE d.C_DunningRunEntry_ID=?"); // info from Dunning
else if (type == REMITTANCE)
- sql = "SELECT pf.Remittance_PrintFormat_ID,"
- + " c.IsMultiLingualDocument,bp.AD_Language,bp.C_BPartner_ID,d.DocumentNo "
- + "FROM C_PaySelectionCheck d"
- + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
- + " INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)"
- + " INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID) "
- + "WHERE d.C_PaySelectionCheck_ID=?" // info from PrintForm
- + " AND pf.AD_Org_ID IN (0,d.AD_Org_ID) ORDER BY pf.AD_Org_ID DESC";
+ sql = new StringBuilder("SELECT pf.Remittance_PrintFormat_ID,")
+ .append(" c.IsMultiLingualDocument,bp.AD_Language,bp.C_BPartner_ID,d.DocumentNo ")
+ .append("FROM C_PaySelectionCheck d")
+ .append(" INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)")
+ .append(" INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)")
+ .append(" INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID) ")
+ .append("WHERE d.C_PaySelectionCheck_ID=?") // info from PrintForm
+ .append(" AND pf.AD_Org_ID IN (0,d.AD_Org_ID) ORDER BY pf.AD_Org_ID DESC");
else if (type == PROJECT)
- sql = "SELECT pf.Project_PrintFormat_ID,"
- + " c.IsMultiLingualDocument,bp.AD_Language,bp.C_BPartner_ID,d.Value "
- + "FROM C_Project d"
- + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
- + " INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)"
- + " LEFT OUTER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID) "
- + "WHERE d.C_Project_ID=?" // info from PrintForm
- + " AND pf.AD_Org_ID IN (0,d.AD_Org_ID) ORDER BY pf.AD_Org_ID DESC";
+ sql = new StringBuilder("SELECT pf.Project_PrintFormat_ID,")
+ .append(" c.IsMultiLingualDocument,bp.AD_Language,bp.C_BPartner_ID,d.Value ")
+ .append("FROM C_Project d")
+ .append(" INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)")
+ .append(" INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)")
+ .append(" LEFT OUTER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID) ")
+ .append("WHERE d.C_Project_ID=?") // info from PrintForm
+ .append(" AND pf.AD_Org_ID IN (0,d.AD_Org_ID) ORDER BY pf.AD_Org_ID DESC");
else if (type == MANUFACTURING_ORDER)
- sql = "SELECT pf.Manuf_Order_PrintFormat_ID,"
- + " c.IsMultiLingualDocument,bp.AD_Language, 0 , d.DocumentNo "
- + "FROM PP_Order d"
- + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
- + " LEFT OUTER JOIN AD_User u ON (u.AD_User_ID=d.Planner_ID)"
- + " LEFT OUTER JOIN C_BPartner bp ON (u.C_BPartner_ID=bp.C_BPartner_ID) "
- + " INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)"
- + "WHERE d.PP_Order_ID=?" // info from PrintForm
- + " AND pf.AD_Org_ID IN (0,d.AD_Org_ID) ORDER BY pf.AD_Org_ID DESC";
+ sql = new StringBuilder("SELECT pf.Manuf_Order_PrintFormat_ID,")
+ .append(" c.IsMultiLingualDocument,bp.AD_Language, 0 , d.DocumentNo ")
+ .append("FROM PP_Order d")
+ .append(" INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)")
+ .append(" LEFT OUTER JOIN AD_User u ON (u.AD_User_ID=d.Planner_ID)")
+ .append(" LEFT OUTER JOIN C_BPartner bp ON (u.C_BPartner_ID=bp.C_BPartner_ID) ")
+ .append(" INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)")
+ .append("WHERE d.PP_Order_ID=?") // info from PrintForm
+ .append(" AND pf.AD_Org_ID IN (0,d.AD_Org_ID) ORDER BY pf.AD_Org_ID DESC");
else if (type == DISTRIBUTION_ORDER)
- sql = "SELECT pf.Distrib_Order_PrintFormat_ID,"
- + " c.IsMultiLingualDocument,bp.AD_Language, bp.C_BPartner_ID , d.DocumentNo "
- + "FROM DD_Order d"
- + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
- + " INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)"
- + " LEFT OUTER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID) "
- + "WHERE d.DD_Order_ID=?" // info from PrintForm
- + " AND pf.AD_Org_ID IN (0,d.AD_Org_ID) ORDER BY pf.AD_Org_ID DESC";
+ sql = new StringBuilder("SELECT pf.Distrib_Order_PrintFormat_ID,")
+ .append(" c.IsMultiLingualDocument,bp.AD_Language, bp.C_BPartner_ID , d.DocumentNo ")
+ .append("FROM DD_Order d")
+ .append(" INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)")
+ .append(" INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)")
+ .append(" LEFT OUTER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID) ")
+ .append("WHERE d.DD_Order_ID=?") // info from PrintForm
+ .append(" AND pf.AD_Org_ID IN (0,d.AD_Org_ID) ORDER BY pf.AD_Org_ID DESC");
else if (type == RFQ)
- sql = "SELECT COALESCE(t.AD_PrintFormat_ID, pf.AD_PrintFormat_ID),"
- + " c.IsMultiLingualDocument,bp.AD_Language,bp.C_BPartner_ID,rr.Name "
- + "FROM C_RfQResponse rr"
- + " INNER JOIN C_RfQ r ON (rr.C_RfQ_ID=r.C_RfQ_ID)"
- + " INNER JOIN C_RfQ_Topic t ON (r.C_RfQ_Topic_ID=t.C_RfQ_Topic_ID)"
- + " INNER JOIN AD_Client c ON (rr.AD_Client_ID=c.AD_Client_ID)"
- + " INNER JOIN C_BPartner bp ON (rr.C_BPartner_ID=bp.C_BPartner_ID),"
- + " AD_PrintFormat pf "
- + "WHERE pf.AD_Client_ID IN (0,rr.AD_Client_ID)"
- + " AND pf.AD_Table_ID=725 AND pf.IsTableBased='N'" // from RfQ PrintFormat
- + " AND rr.C_RfQResponse_ID=? " // Info from RfQTopic
- + "ORDER BY t.AD_PrintFormat_ID, pf.AD_Client_ID DESC, pf.AD_Org_ID DESC";
+ sql = new StringBuilder("SELECT COALESCE(t.AD_PrintFormat_ID, pf.AD_PrintFormat_ID),")
+ .append(" c.IsMultiLingualDocument,bp.AD_Language,bp.C_BPartner_ID,rr.Name ")
+ .append("FROM C_RfQResponse rr")
+ .append(" INNER JOIN C_RfQ r ON (rr.C_RfQ_ID=r.C_RfQ_ID)")
+ .append(" INNER JOIN C_RfQ_Topic t ON (r.C_RfQ_Topic_ID=t.C_RfQ_Topic_ID)")
+ .append(" INNER JOIN AD_Client c ON (rr.AD_Client_ID=c.AD_Client_ID)")
+ .append(" INNER JOIN C_BPartner bp ON (rr.C_BPartner_ID=bp.C_BPartner_ID),")
+ .append(" AD_PrintFormat pf ")
+ .append("WHERE pf.AD_Client_ID IN (0,rr.AD_Client_ID)")
+ .append(" AND pf.AD_Table_ID=725 AND pf.IsTableBased='N'") // from RfQ PrintFormat
+ .append(" AND rr.C_RfQResponse_ID=? ") // Info from RfQTopic
+ .append("ORDER BY t.AD_PrintFormat_ID, pf.AD_Client_ID DESC, pf.AD_Org_ID DESC");
// Fix [2574162] Priority to choose invoice print format not working
else if (type == ORDER || type == INVOICE)
- sql = "SELECT pf.Order_PrintFormat_ID,pf.Shipment_PrintFormat_ID," // 1..2
+ sql = new StringBuilder("SELECT pf.Order_PrintFormat_ID,pf.Shipment_PrintFormat_ID,") // 1..2
// Prio: 1. BPartner 2. DocType, 3. PrintFormat (Org) // see InvoicePrint
- + " COALESCE (bp.Invoice_PrintFormat_ID,dt.AD_PrintFormat_ID,pf.Invoice_PrintFormat_ID)," // 3
- + " pf.Project_PrintFormat_ID, pf.Remittance_PrintFormat_ID," // 4..5
- + " c.IsMultiLingualDocument, bp.AD_Language," // 6..7
- + " COALESCE(dt.DocumentCopies,0)+COALESCE(bp.DocumentCopies,1), " // 8
- + " dt.AD_PrintFormat_ID,bp.C_BPartner_ID,d.DocumentNo " // 9..11
- + "FROM " + DOC_BASETABLES[type] + " d"
- + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
- + " INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)"
- + " INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID)"
- + " LEFT OUTER JOIN C_DocType dt ON ((d.C_DocType_ID>0 AND d.C_DocType_ID=dt.C_DocType_ID) OR (d.C_DocType_ID=0 AND d.C_DocTypeTarget_ID=dt.C_DocType_ID)) "
- + "WHERE d." + DOC_IDS[type] + "=?" // info from PrintForm
- + " AND pf.AD_Org_ID IN (0,d.AD_Org_ID) "
- + "ORDER BY pf.AD_Org_ID DESC";
+ .append(" COALESCE (bp.Invoice_PrintFormat_ID,dt.AD_PrintFormat_ID,pf.Invoice_PrintFormat_ID),") // 3
+ .append(" pf.Project_PrintFormat_ID, pf.Remittance_PrintFormat_ID,") // 4..5
+ .append(" c.IsMultiLingualDocument, bp.AD_Language,") // 6..7
+ .append(" COALESCE(dt.DocumentCopies,0)+COALESCE(bp.DocumentCopies,1), ") // 8
+ .append(" dt.AD_PrintFormat_ID,bp.C_BPartner_ID,d.DocumentNo ") // 9..11
+ .append("FROM " + DOC_BASETABLES[type] + " d")
+ .append(" INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)")
+ .append(" INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)")
+ .append(" INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID)")
+ .append(" LEFT OUTER JOIN C_DocType dt ON ((d.C_DocType_ID>0 AND d.C_DocType_ID=dt.C_DocType_ID) OR (d.C_DocType_ID=0 AND d.C_DocTypeTarget_ID=dt.C_DocType_ID)) ")
+ .append("WHERE d." + DOC_IDS[type] + "=?") // info from PrintForm
+ .append(" AND pf.AD_Org_ID IN (0,d.AD_Org_ID) ")
+ .append("ORDER BY pf.AD_Org_ID DESC");
else // Get PrintFormat from Org or 0 of document client
- sql = "SELECT pf.Order_PrintFormat_ID,pf.Shipment_PrintFormat_ID," // 1..2
+ sql = new StringBuilder("SELECT pf.Order_PrintFormat_ID,pf.Shipment_PrintFormat_ID,") // 1..2
// Prio: 1. BPartner 2. DocType, 3. PrintFormat (Org) // see InvoicePrint
- + " COALESCE (bp.Invoice_PrintFormat_ID,dt.AD_PrintFormat_ID,pf.Invoice_PrintFormat_ID)," // 3
- + " pf.Project_PrintFormat_ID, pf.Remittance_PrintFormat_ID," // 4..5
- + " c.IsMultiLingualDocument, bp.AD_Language," // 6..7
- + " COALESCE(dt.DocumentCopies,0)+COALESCE(bp.DocumentCopies,1), " // 8
- + " dt.AD_PrintFormat_ID,bp.C_BPartner_ID,d.DocumentNo, " // 9..11
- + " pf.Manuf_Order_PrintFormat_ID, pf.Distrib_Order_PrintFormat_ID " // 12..13
- + "FROM " + DOC_BASETABLES[type] + " d"
- + " INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)"
- + " INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)"
- + " INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID)"
- + " LEFT OUTER JOIN C_DocType dt ON (d.C_DocType_ID=dt.C_DocType_ID) "
- + "WHERE d." + DOC_IDS[type] + "=?" // info from PrintForm
- + " AND pf.AD_Org_ID IN (0,d.AD_Org_ID) "
- + "ORDER BY pf.AD_Org_ID DESC";
+ .append(" COALESCE (bp.Invoice_PrintFormat_ID,dt.AD_PrintFormat_ID,pf.Invoice_PrintFormat_ID),") // 3
+ .append(" pf.Project_PrintFormat_ID, pf.Remittance_PrintFormat_ID,") // 4..5
+ .append(" c.IsMultiLingualDocument, bp.AD_Language,") // 6..7
+ .append(" COALESCE(dt.DocumentCopies,0)+COALESCE(bp.DocumentCopies,1), ") // 8
+ .append(" dt.AD_PrintFormat_ID,bp.C_BPartner_ID,d.DocumentNo, ") // 9..11
+ .append(" pf.Manuf_Order_PrintFormat_ID, pf.Distrib_Order_PrintFormat_ID ") // 12..13
+ .append("FROM " + DOC_BASETABLES[type] + " d")
+ .append(" INNER JOIN AD_Client c ON (d.AD_Client_ID=c.AD_Client_ID)")
+ .append(" INNER JOIN AD_PrintForm pf ON (c.AD_Client_ID=pf.AD_Client_ID)")
+ .append(" INNER JOIN C_BPartner bp ON (d.C_BPartner_ID=bp.C_BPartner_ID)")
+ .append(" LEFT OUTER JOIN C_DocType dt ON (d.C_DocType_ID=dt.C_DocType_ID) ")
+ .append("WHERE d." + DOC_IDS[type] + "=?") // info from PrintForm
+ .append(" AND pf.AD_Org_ID IN (0,d.AD_Org_ID) ")
+ .append("ORDER BY pf.AD_Org_ID DESC");
//
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
- pstmt = DB.prepareStatement(sql, trxName);
+ pstmt = DB.prepareStatement(sql.toString(), trxName);
pstmt.setInt(1, Record_ID);
rs = pstmt.executeQuery();
if (rs.next()) // first record only
@@ -1530,16 +1532,16 @@
what[0] = ORDER;
what[1] = C_Order_ID;
//
- String sql = "SELECT dt.DocSubTypeSO "
- + "FROM C_DocType dt, C_Order o "
- + "WHERE o.C_DocType_ID=dt.C_DocType_ID"
- + " AND o.C_Order_ID=?";
+ StringBuilder sql = new StringBuilder("SELECT dt.DocSubTypeSO ")
+ .append("FROM C_DocType dt, C_Order o ")
+ .append("WHERE o.C_DocType_ID=dt.C_DocType_ID")
+ .append(" AND o.C_Order_ID=?");
String DocSubTypeSO = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
- pstmt = DB.prepareStatement(sql, null);
+ pstmt = DB.prepareStatement(sql.toString(), null);
pstmt.setInt(1, C_Order_ID);
rs = pstmt.executeQuery();
if (rs.next())
@@ -1548,11 +1550,11 @@
// @Trifon - Order is not completed(C_DoctType_ID=0) then try with C_DocTypeTarget_ID
// [ 2819637 ] Wrong print format on non completed order - https://sourceforge.net/tracker/?func=detail&aid=2819637&group_id=176962&atid=879332
if (DocSubTypeSO == null || "".equals(DocSubTypeSO)) {
- sql = "SELECT dt.DocSubTypeSO "
- + "FROM C_DocType dt, C_Order o "
- + "WHERE o.C_DocTypeTarget_ID=dt.C_DocType_ID"
- + " AND o.C_Order_ID=?";
- pstmt = DB.prepareStatement(sql, null);
+ sql = new StringBuilder("SELECT dt.DocSubTypeSO ")
+ .append("FROM C_DocType dt, C_Order o ")
+ .append("WHERE o.C_DocTypeTarget_ID=dt.C_DocType_ID")
+ .append(" AND o.C_Order_ID=?");
+ pstmt = DB.prepareStatement(sql.toString(), null);
pstmt.setInt(1, C_Order_ID);
rs = pstmt.executeQuery();
if (rs.next()) {
@@ -1583,14 +1585,14 @@

// Get Record_ID of Invoice/Receipt
if (what[0] == INVOICE)
- sql = "SELECT C_Invoice_ID REC FROM C_Invoice WHERE C_Order_ID=?" // 1
- + " ORDER BY C_Invoice_ID DESC";
+ sql = new StringBuilder("SELECT C_Invoice_ID REC FROM C_Invoice WHERE C_Order_ID=?") // 1
+ .append(" ORDER BY C_Invoice_ID DESC");
else
- sql = "SELECT M_InOut_ID REC FROM M_InOut WHERE C_Order_ID=?" // 1
- + " ORDER BY M_InOut_ID DESC";
+ sql = new StringBuilder("SELECT M_InOut_ID REC FROM M_InOut WHERE C_Order_ID=?") // 1
+ .append(" ORDER BY M_InOut_ID DESC");
try
{
- pstmt = DB.prepareStatement(sql, null);
+ pstmt = DB.prepareStatement(sql.toString(), null);
pstmt.setInt(1, C_Order_ID);
rs = pstmt.executeQuery();
if (rs.next())
@@ -1610,7 +1612,8 @@
DB.close(rs, pstmt);
rs = null; pstmt = null;
}
- log.fine("Order => " + what[0] + " ID=" + what[1]);
+ if (log.isLoggable(Level.FINE))
+ log.fine("Order => " + what[0] + " ID=" + what[1]);
return what;
} // getDocumentWhat



diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.base/src/org/compiere/print/layout/LayoutEngine.java
--- a/org.adempiere.base/src/org/compiere/print/layout/LayoutEngine.java
+++ b/org.adempiere.base/src/org/compiere/print/layout/LayoutEngine.java
@@ -318,7 +318,8 @@
if (!paperChange)
paperChange = !paper.equals(m_paper);
//
- log.fine(paper + " - Header=" + headerHeight + ", Footer=" + footerHeight);
+ if (log.isLoggable(Level.FINE))
+ log.fine(paper + " - Header=" + headerHeight + ", Footer=" + footerHeight);
m_paper = paper;
m_headerHeight = headerHeight;
m_footerHeight = footerHeight;
@@ -405,8 +406,11 @@
height = m_footerHeight;
m_footer.setBounds (x, y, w, height);

- log.fine("Paper=" + m_paper + ",HeaderHeight=" + m_headerHeight + ",FooterHeight=" + m_footerHeight
- + " => Header=" + m_header + ",Contents=" + m_content + ",Footer=" + m_footer);
+ if (log.isLoggable(Level.FINE))
+ {
+ log.fine("Paper=" + m_paper + ",HeaderHeight=" + m_headerHeight + ",FooterHeight=" + m_footerHeight
+ + " => Header=" + m_header + ",Contents=" + m_content + ",Footer=" + m_footer);
+ }
} // calculatePageSize

/**
@@ -582,7 +586,8 @@
&& m_position[AREA_CONTENT].getX() == m_content.x
&& m_position[AREA_CONTENT].getY() == m_content.y)
{
- log.fine("skipped");
+ if (log.isLoggable(Level.FINE))
+ log.fine("skipped");
return m_pageNo;
}

@@ -597,7 +602,8 @@
m_position[AREA_CONTENT].setLocation(m_content.x, m_content.y);
m_position[AREA_FOOTER].setLocation(m_footer.x, m_footer.y);
m_maxHeightSinceNewLine = new float[] {0f, 0f, 0f};
- log.finer("Page=" + m_pageNo);
+ if (log.isLoggable(Level.FINE))
+ log.finer("Page=" + m_pageNo);
return m_pageNo;
} // newPage

@@ -620,14 +626,16 @@
if (isYspaceFor(m_maxHeightSinceNewLine[m_area]))
{
m_position[m_area].setLocation(xPos, m_position[m_area].y + m_maxHeightSinceNewLine[m_area]);
- log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
}
else if (m_area == AREA_CONTENT)
{
log.finest("Not enough Y space "
+ m_lastHeight[m_area] + " - remaining " + getYspace() + " - Area=" + m_area);
newPage(true, false);
- log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
}
else // footer/header
{
@@ -766,7 +774,8 @@
else if (m_area == AREA_FOOTER)
part = m_footer;
m_position[m_area].setLocation(part.x + p.getX(), part.y + p.getY());
- log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
} // setPosition

/**
@@ -795,7 +804,8 @@
protected void setX (float x)
{
m_position[m_area].x = x;
- log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
} // setX

/**
@@ -807,7 +817,8 @@
if (xOffset == 0f)
return;
m_position[m_area].x += xOffset;
- log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
} // addX

/**
@@ -826,7 +837,8 @@
protected void setY (int y)
{
m_position[m_area].y = y;
- log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
} // setY

/**
@@ -840,14 +852,16 @@
if (isYspaceFor(yOffset))
{
m_position[m_area].y += yOffset;
- log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
}
else if (m_area == AREA_CONTENT)
{
log.finest("Not enough Y space "
+ m_lastHeight[m_area] + " - remaining " + getYspace() + " - Area=" + m_area);
newPage(true, true);
- log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
}
else
{
@@ -1147,13 +1161,15 @@
{
if (!isXspaceFor(m_lastWidth[m_area]))
{
- log.finest("Not enough X space for "
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Not enough X space for "
+ m_lastWidth[m_area] + " - remaining " + getXspace() + " - Area=" + m_area);
newLine ();
}
if (m_area == AREA_CONTENT && !isYspaceFor(m_lastHeight[m_area]))
{
- log.finest("Not enough Y space "
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Not enough Y space "
+ m_lastHeight[m_area] + " - remaining " + getYspace() + " - Area=" + m_area);
newPage (true, true);
}
@@ -1235,13 +1251,15 @@
MQuery query = new MQuery (format.getAD_Table_ID());
query.addRestriction(item.getColumnName(), MQuery.EQUAL, new Integer(Record_ID));
format.setTranslationViewQuery(query);
- log.fine(query.toString());
+ if (log.isLoggable(Level.FINE))
+ log.fine(query.toString());
//
DataEngine de = new DataEngine(format.getLanguage(),m_TrxName);
PrintData includedData = de.getPrintData(data.getCtx(), format, query);
if (includedData == null)
return null;
- log.fine(includedData.toString());
+ if (log.isLoggable(Level.FINE))
+ log.fine(includedData.toString());
//
element = layoutTable (format, includedData, item.getXSpace());
// handle multi page tables
@@ -1263,13 +1281,15 @@

if (!isXspaceFor(m_lastWidth[m_area]))
{
- log.finest("Not enough X space for "
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Not enough X space for "
+ m_lastWidth[m_area] + " - remaining " + getXspace() + " - Area=" + m_area);
newLine ();
}
if (m_area == AREA_CONTENT && !isYspaceFor(m_lastHeight[m_area]))
{
- log.finest("Not enough Y space "
+ if (log.isLoggable(Level.FINEST))
+ log.finest("Not enough Y space "
+ m_lastHeight[m_area] + " - remaining " + getYspace() + " - Area=" + m_area);
newPage (true, false);
}
@@ -1353,7 +1373,8 @@
// Convert AmtInWords Content to alpha
if (item.getColumnName().equals("AmtInWords"))
{
- log.fine("AmtInWords: " + stringContent);
+ if (log.isLoggable(Level.FINE))
+ log.fine("AmtInWords: " + stringContent);
stringContent = Msg.getAmtInWords (m_format.getLanguage(), stringContent);
content = stringContent;
}
@@ -1647,7 +1668,8 @@
if (printData.isPageBreak())
{
pageBreak.add(new Integer(row));
- log.finer("PageBreak row=" + row);
+ if (log.isLoggable(Level.FINER))
+ log.finer("PageBreak row=" + row);
}
}
// Summary/Line Levels for Finanial Reports


diff -r 19db6bb449b11d79768c5e0022d43e1c88c07fd3 -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DashboardController.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DashboardController.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DashboardController.java
@@ -141,7 +141,7 @@
String htmlContent = dp.getHTML();
if(htmlContent != null)
{
- StringBuffer result = new StringBuffer("<html><head>");
+ StringBuilder result = new StringBuilder("<html><head>");

URL url = getClass().getClassLoader().getResource("org/compiere/images/PAPanel.css");
InputStreamReader ins;



https://bitbucket.org/idempiere/idempiere/changeset/660492c3c1d8/
changeset: 660492c3c1d8
branch: development
user: hengsin
date: 2012-06-20 10:16:27
summary: minor - typo.
affected #: 1 file

diff -r 1eff520ce458da6b9793bed7e7a4cc5ef3ac2e52 -r 660492c3c1d80f0fd6e38b4bf9f74411e8020317 org.adempiere.pipo.handlers/plugin.xml
--- a/org.adempiere.pipo.handlers/plugin.xml
+++ b/org.adempiere.pipo.handlers/plugin.xml
@@ -74,7 +74,7 @@
</handler><handler
class="org.adempiere.pipo2.handler.MessageElementHandler"
- id="AD_Messsage">
+ id="AD_Message"></handler><handler
class="org.adempiere.pipo2.handler.DynValRuleElementHandler"



https://bitbucket.org/idempiere/idempiere/changeset/5578eb226cf2/
changeset: 5578eb226cf2
branch: development
user: hengsin
date: 2012-06-20 10:57:12
summary: IDEMPIERE-145 Performance: PO should use PreparedStatement
affected #: 1 file

diff -r 660492c3c1d80f0fd6e38b4bf9f74411e8020317 -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a org.adempiere.base/src/org/compiere/model/PO.java
--- a/org.adempiere.base/src/org/compiere/model/PO.java
+++ b/org.adempiere.base/src/org/compiere/model/PO.java
@@ -30,6 +30,7 @@
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Properties;
import java.util.UUID;
import java.util.logging.Level;
@@ -55,6 +56,7 @@
import org.compiere.util.DisplayType;
import org.compiere.util.Env;
import org.compiere.util.Evaluatee;
+import org.compiere.util.Ini;
import org.compiere.util.Msg;
import org.compiere.util.SecureEngine;
import org.compiere.util.Trace;
@@ -95,7 +97,7 @@
* <li>https://sourceforge.net/tracker/?func=detail&aid=2947622&group_id=176962&atid=879332
*/
public abstract class PO
- implements Serializable, Comparator, Evaluatee, Cloneable
+ implements Serializable, Comparator<Object>, Evaluatee, Cloneable
{
/**
*
@@ -283,7 +285,7 @@
*/
public String toString()
{
- StringBuffer sb = new StringBuffer("PO[")
+ StringBuilder sb = new StringBuilder("PO[")
.append(get_WhereClause(true)).append("]");
return sb.toString();
} // toString
@@ -814,7 +816,7 @@
(String) value, get_TrxName()) != null)
;
else {
- StringBuffer validValues = new StringBuffer();
+ StringBuilder validValues = new StringBuilder();
for (ValueNamePair vp : MRefList.getList(getCtx(), p_info.getColumn(index).AD_Reference_Value_ID, false))
validValues.append(" - ").append(vp.getValue());
throw new IllegalArgumentException(ColumnName + " Invalid value - "
@@ -1288,7 +1290,7 @@
{
m_trxName = trxName;
boolean success = true;
- StringBuffer sql = new StringBuffer("SELECT ");
+ StringBuilder sql = new StringBuilder("SELECT ");
int size = get_ColumnCount();
for (int i = 0; i < size; i++)
{
@@ -1877,7 +1879,7 @@
{
// Load translation from database
int ID = ((Integer)m_IDs[0]).intValue();
- StringBuffer sql = new StringBuffer ("SELECT ").append(columnName)
+ StringBuilder sql = new StringBuilder("SELECT ").append(columnName)
.append(" FROM ").append(p_info.getTableName()).append("_Trl WHERE ")
.append(m_KeyColumns[0]).append("=?")
.append(" AND AD_Language=?");
@@ -2320,10 +2322,30 @@
*/
protected boolean saveUpdate()
{
+ boolean ok = doUpdate(isLogSQLScript());
+
+ return saveFinish (false, ok);
+ } // saveUpdate
+
+ private boolean isLogSQLScript() {
+ boolean logMigrationScript = false;
+ if (Ini.isClient()) {
+ logMigrationScript = Ini.isPropertyBool(Ini.P_LOGMIGRATIONSCRIPT);
+ } else {
+ String sysProperty = Env.getCtx().getProperty("LogMigrationScript", "N");
+ logMigrationScript = "y".equalsIgnoreCase(sysProperty) || "true".equalsIgnoreCase(sysProperty);
+ }
+ return logMigrationScript;
+ }
+
+ private boolean doUpdate(boolean withValues) {
+ //params for insert statement
+ List<Object> params = new ArrayList<Object>();
+
String where = get_WhereClause(true);
//
boolean changes = false;
- StringBuffer sql = new StringBuffer ("UPDATE ");
+ StringBuilder sql = new StringBuilder ("UPDATE ");
sql.append(p_info.getTableName()).append( " SET ");
boolean updated = false;
boolean updatedBy = false;
@@ -2399,30 +2421,68 @@
changes = true;
sql.append(columnName).append("=");

- // values
- if (value == Null.NULL)
- sql.append("NULL");
- else if (value instanceof Integer || value instanceof BigDecimal)
- sql.append(encrypt(i,value));
- else if (c == Boolean.class)
+ if (withValues)
{
- boolean bValue = false;
- if (value instanceof Boolean)
- bValue = ((Boolean)value).booleanValue();
+ // values
+ if (value == Null.NULL)
+ sql.append("NULL");
+ else if (value instanceof Integer || value instanceof BigDecimal)
+ sql.append(value);
+ else if (c == Boolean.class)
+ {
+ boolean bValue = false;
+ if (value instanceof Boolean)
+ bValue = ((Boolean)value).booleanValue();
+ else
+ bValue = "Y".equals(value);
+ sql.append(encrypt(i,bValue ? "'Y'" : "'N'"));
+ }
+ else if (value instanceof Timestamp)
+ sql.append(DB.TO_DATE((Timestamp)encrypt(i,value),p_info.getColumnDisplayType(i) == DisplayType.Date));
+ else {
+ if (value.toString().length() == 0) {
+ // [ 1722057 ] Encrypted columns throw error if saved as null
+ // don't encrypt NULL
+ sql.append(DB.TO_STRING(value.toString()));
+ } else {
+ sql.append(encrypt(i,DB.TO_STRING(value.toString())));
+ }
+ }
+ }
+ else
+ {
+ if (value instanceof Timestamp && dt == DisplayType.Date)
+ sql.append("trunc(cast(? as date))");
else
- bValue = "Y".equals(value);
- sql.append(encrypt(i,bValue ? "'Y'" : "'N'"));
- }
- else if (value instanceof Timestamp)
- sql.append(DB.TO_DATE((Timestamp)encrypt(i,value),p_info.getColumnDisplayType(i) == DisplayType.Date));
- else {
- if (value.toString().length() == 0) {
- // [ 1722057 ] Encrypted columns throw error if saved as null
- // don't encrypt NULL
- sql.append(DB.TO_STRING(value.toString()));
- } else {
- sql.append(encrypt(i,DB.TO_STRING(value.toString())));
+ sql.append("?");
+
+ if (value == Null.NULL)
+ {
+ params.add(null);
}
+ else if (c == Boolean.class)
+ {
+ boolean bValue = false;
+ if (value instanceof Boolean)
+ bValue = ((Boolean)value).booleanValue();
+ else
+ bValue = "Y".equals(value);
+ params.add(encrypt(i,bValue ? "Y" : "N"));
+ }
+ else if (c == String.class)
+ {
+ if (value.toString().length() == 0) {
+ // [ 1722057 ] Encrypted columns throw error if saved as null
+ // don't encrypt NULL
+ params.add(null);
+ } else {
+ params.add(encrypt(i,value));
+ }
+ }
+ else
+ {
+ params.add(value);
+ }
}

// Change Log - Only
@@ -2463,7 +2523,22 @@
String column = (String)it.next();
String value = (String)m_custom.get(column);
int index = p_info.getColumnIndex(column);
- sql.append(column).append("=").append(encrypt(index,value));
+ if (withValues)
+ {
+ sql.append(column).append("=").append(encrypt(index,value));
+ }
+ else
+ {
+ sql.append(column).append("=?");
+ if (value == null || value.toString().length() == 0)
+ {
+ params.add(null);
+ }
+ else
+ {
+ params.add(encrypt(index,value));
+ }
+ }
}
m_custom = null;
}
@@ -2479,13 +2554,29 @@
{
Timestamp now = new Timestamp(System.currentTimeMillis());
set_ValueNoCheck("Updated", now);
- sql.append(",Updated=").append(DB.TO_DATE(now, false));
+ if (withValues)
+ {
+ sql.append(",Updated=").append(DB.TO_DATE(now, false));
+ }
+ else
+ {
+ sql.append(",Updated=?");
+ params.add(now);
+ }
}
if (!updatedBy) // UpdatedBy not explicitly set
{
int AD_User_ID = Env.getContextAsInt(p_ctx, "#AD_User_ID");
set_ValueNoCheck("UpdatedBy", new Integer(AD_User_ID));
- sql.append(",UpdatedBy=").append(AD_User_ID);
+ if (withValues)
+ {
+ sql.append(",UpdatedBy=").append(AD_User_ID);
+ }
+ else
+ {
+ sql.append(",UpdatedBy=?");
+ params.add(AD_User_ID);
+ }
}
sql.append(" WHERE ").append(where);
/** @todo status locking goes here */
@@ -2493,9 +2584,11 @@
log.finest(sql.toString());
int no = 0;
if (isUseTimeoutForUpdate())
- no = DB.executeUpdateEx(sql.toString(), m_trxName, QUERY_TIME_OUT);
+ no = withValues ? DB.executeUpdateEx(sql.toString(), m_trxName, QUERY_TIME_OUT)
+ : DB.executeUpdateEx(sql.toString(), params.toArray(), m_trxName, QUERY_TIME_OUT);
else
- no = DB.executeUpdate(sql.toString(), m_trxName);
+ no = withValues ? DB.executeUpdate(sql.toString(), m_trxName)
+ : DB.executeUpdate(sql.toString(), params.toArray(), false, m_trxName);
boolean ok = no == 1;
if (ok)
ok = lobSave();
@@ -2508,12 +2601,14 @@
log.log(Level.WARNING, "#" + no
+ " - [" + m_trxName + "] - " + p_info.getTableName() + "." + where);
}
- return saveFinish (false, ok);
+ return ok;
}
-
- // nothing changed, so OK
- return saveFinish (false, true);
- } // saveUpdate
+ else
+ {
+ // nothing changed, so OK
+ return true;
+ }
+ }

private boolean isUseTimeoutForUpdate() {
return "true".equalsIgnoreCase(System.getProperty(USE_TIMEOUT_FOR_UPDATE, "false"))
@@ -2598,6 +2693,12 @@
}
}

+ boolean ok = doInsert(isLogSQLScript());
+ return saveFinish (true, ok);
+ } // saveNew
+
+ private boolean doInsert(boolean withValues) {
+ int index;
lobReset();

// Change Log
@@ -2606,10 +2707,13 @@
log.fine("No Session found");
int AD_ChangeLog_ID = 0;

+ //params for insert statement
+ List<Object> params = new ArrayList<Object>();
+
// SQL
- StringBuffer sqlInsert = new StringBuffer("INSERT INTO ");
+ StringBuilder sqlInsert = new StringBuilder("INSERT INTO ");
sqlInsert.append(p_info.getTableName()).append(" (");
- StringBuffer sqlValues = new StringBuffer(") VALUES (");
+ StringBuilder sqlValues = new StringBuilder(") VALUES (");
int size = get_ColumnCount();
boolean doComma = false;
for (int i = 0; i < size; i++)
@@ -2640,14 +2744,61 @@
//
// Based on class of definition, not class of value
Class<?> c = p_info.getColumnClass(i);
- try
- {
- if (c == Object.class) // may have need to deal with null values differently
- sqlValues.append (saveNewSpecial (value, i));
+ if (withValues)
+ {
+ try
+ {
+ if (c == Object.class) // may have need to deal with null values differently
+ sqlValues.append (saveNewSpecial (value, i));
+ else if (value == null || value.equals (Null.NULL))
+ sqlValues.append ("NULL");
+ else if (value instanceof Integer || value instanceof BigDecimal)
+ sqlValues.append (value);
+ else if (c == Boolean.class)
+ {
+ boolean bValue = false;
+ if (value instanceof Boolean)
+ bValue = ((Boolean)value).booleanValue();
+ else
+ bValue = "Y".equals(value);
+ sqlValues.append (encrypt(i,bValue ? "'Y'" : "'N'"));
+ }
+ else if (value instanceof Timestamp)
+ sqlValues.append (DB.TO_DATE ((Timestamp)encrypt(i,value), p_info.getColumnDisplayType (i) == DisplayType.Date));
+ else if (c == String.class)
+ sqlValues.append (encrypt(i,DB.TO_STRING ((String)value)));
+ else if (DisplayType.isLOB(dt))
+ sqlValues.append("null"); // no db dependent stuff here
+ else
+ sqlValues.append (saveNewSpecial (value, i));
+ }
+ catch (Exception e)
+ {
+ String msg = "";
+ if (m_trxName != null)
+ msg = "[" + m_trxName + "] - ";
+ msg += p_info.toString(i)
+ + " - Value=" + value
+ + "(" + (value==null ? "null" : value.getClass().getName()) + ")";
+ log.log(Level.SEVERE, msg, e);
+ throw new DBException(e); // fini
+ }
+ }
+ else
+ {
+ if (value instanceof Timestamp && dt == DisplayType.Date)
+ sqlValues.append("trunc(cast(? as date))");
+ else
+ sqlValues.append("?");
+
+ if (DisplayType.isLOB(dt))
+ {
+ params.add(null);
+ }
else if (value == null || value.equals (Null.NULL))
- sqlValues.append ("NULL");
- else if (value instanceof Integer || value instanceof BigDecimal)
- sqlValues.append (encrypt(i,value));
+ {
+ params.add(null);
+ }
else if (c == Boolean.class)
{
boolean bValue = false;
@@ -2655,27 +2806,23 @@
bValue = ((Boolean)value).booleanValue();
else
bValue = "Y".equals(value);
- sqlValues.append (encrypt(i,bValue ? "'Y'" : "'N'"));
+ params.add(encrypt(i,bValue ? "Y" : "N"));
}
- else if (value instanceof Timestamp)
- sqlValues.append (DB.TO_DATE ((Timestamp)encrypt(i,value), p_info.getColumnDisplayType (i) == DisplayType.Date));
else if (c == String.class)
- sqlValues.append (encrypt(i,DB.TO_STRING ((String)value)));
- else if (DisplayType.isLOB(dt))
- sqlValues.append("null"); // no db dependent stuff here
+ {
+ if (value.toString().length() == 0)
+ {
+ params.add(null);
+ }
+ else
+ {
+ params.add(encrypt(i,value));
+ }
+ }
else
- sqlValues.append (saveNewSpecial (value, i));
- }
- catch (Exception e)
- {
- String msg = "";
- if (m_trxName != null)
- msg = "[" + m_trxName + "] - ";
- msg += p_info.toString(i)
- + " - Value=" + value
- + "(" + (value==null ? "null" : value.getClass().getName()) + ")";
- log.log(Level.SEVERE, msg, e);
- throw new DBException(e); // fini
+ {
+ params.add(value);
+ }
}

// Change Log - Only
@@ -2685,7 +2832,7 @@
&& p_info.isAllowLogging(i) // logging allowed
&& !p_info.isEncrypted(i) // not encrypted
&& !p_info.isVirtualColumn(i) // no virtual column
- && !"Password".equals(columnName)
+ && !"Password".equals(p_info.getColumnName(i))
&& (insertLog.equalsIgnoreCase("Y")
|| (insertLog.equalsIgnoreCase("K") && p_info.getColumn(i).IsKey))
)
@@ -2709,6 +2856,8 @@
String column = (String)it.next();
index = p_info.getColumnIndex(column);
String value = (String)m_custom.get(column);
+ if (value == null)
+ continue;
if (doComma)
{
sqlInsert.append(",");
@@ -2717,15 +2866,30 @@
else
doComma = true;
sqlInsert.append(column);
- //jz for ad_issue, some value may include ' in a string???
- sqlValues.append(encrypt(index, value));
+ if (withValues)
+ {
+ sqlValues.append(encrypt(index, value));
+ }
+ else
+ {
+ sqlValues.append("?");
+ if (value == null || value.toString().length() == 0)
+ {
+ params.add(null);
+ }
+ else
+ {
+ params.add(encrypt(index, value));
+ }
+ }
}
m_custom = null;
}
sqlInsert.append(sqlValues)
.append(")");
//
- int no = DB.executeUpdate(sqlInsert.toString(), m_trxName);
+ int no = withValues ? DB.executeUpdate(sqlInsert.toString(), m_trxName)
+ : DB.executeUpdate(sqlInsert.toString(), params.toArray(), false, m_trxName);
boolean ok = no == 1;
if (ok)
{
@@ -2751,8 +2915,8 @@
else
log.log(Level.WARNING, "[" + m_trxName + "]" + msg);
}
- return saveFinish (true, ok);
- } // saveNew
+ return ok;
+ }

/**
* Get ID for new record during save.
@@ -2774,7 +2938,7 @@
*/
public String get_WhereClause (boolean withValues)
{
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
for (int i = 0; i < m_IDs.length; i++)
{
if (i != 0)
@@ -2936,7 +3100,7 @@
PO_Record.deleteCascade(AD_Table_ID, Record_ID, localTrxName);

// The Delete Statement
- StringBuffer sql = new StringBuffer ("DELETE FROM ") //jz why no FROM??
+ StringBuilder sql = new StringBuilder ("DELETE FROM ") //jz why no FROM??
.append(p_info.getTableName())
.append(" WHERE ")
.append(get_WhereClause(true));
@@ -3149,8 +3313,8 @@
|| !(m_IDs[0] instanceof Integer))
return true;
//
- StringBuffer iColumns = new StringBuffer();
- StringBuffer sColumns = new StringBuffer();
+ StringBuilder iColumns = new StringBuilder();
+ StringBuilder sColumns = new StringBuilder();
for (int i = 0; i < p_info.getColumnCount(); i++)
{
if (p_info.isColumnTranslated(i))
@@ -3175,7 +3339,7 @@
int uuidColumnId = DB.getSQLValue(get_TrxName(), "SELECT col.AD_Column_ID FROM AD_Column col INNER JOIN AD_Table tbl ON col.AD_Table_ID = tbl.AD_Table_ID WHERE tbl.TableName=? AND col.ColumnName=?",
tableName+"_Trl", PO.getUUIDColumnName(tableName+"_Trl"));

- StringBuffer sql = new StringBuffer ("INSERT INTO ")
+ StringBuilder sql = new StringBuilder ("INSERT INTO ")
.append(tableName).append("_Trl (AD_Language,")
.append(keyColumn).append(", ")
.append(iColumns)
@@ -3237,7 +3401,7 @@
//
String tableName = p_info.getTableName();
String keyColumn = m_KeyColumns[0];
- StringBuffer sql = new StringBuffer ("UPDATE ")
+ StringBuilder sql = new StringBuilder ("UPDATE ")
.append(tableName).append("_Trl SET ");
//
if (client.isAutoUpdateTrl(tableName))
@@ -3290,7 +3454,7 @@
//
String tableName = p_info.getTableName();
String keyColumn = m_KeyColumns[0];
- StringBuffer sql = new StringBuffer ("DELETE FROM ")
+ StringBuilder sql = new StringBuilder ("DELETE FROM ")
.append(tableName).append("_Trl WHERE ")
.append(keyColumn).append("=").append(get_ID());
int no = DB.executeUpdate(sql.toString(), trxName);
@@ -3341,7 +3505,7 @@
}

// Create SQL Statement - INSERT
- StringBuffer sb = new StringBuffer("INSERT INTO ")
+ StringBuilder sb = new StringBuilder("INSERT INTO ")
.append(acctTable)
.append(" (").append(get_TableName())
.append("_ID, C_AcctSchema_ID, AD_Client_ID,AD_Org_ID,IsActive, Created,CreatedBy,Updated,UpdatedBy ");
@@ -3428,7 +3592,7 @@
int uuidColumnId = DB.getSQLValue(get_TrxName(), "SELECT col.AD_Column_ID FROM AD_Column col INNER JOIN AD_Table tbl ON col.AD_Table_ID = tbl.AD_Table_ID WHERE tbl.TableName=? AND col.ColumnName=?",
tableName, PO.getUUIDColumnName(tableName));

- StringBuffer sb = new StringBuffer ("INSERT INTO ")
+ StringBuilder sb = new StringBuilder ("INSERT INTO ")
.append(tableName)
.append(" (AD_Client_ID,AD_Org_ID, IsActive,Created,CreatedBy,Updated,UpdatedBy, "
+ "AD_Tree_ID, Node_ID, Parent_ID, SeqNo");
@@ -3477,7 +3641,7 @@
int id = get_ID();
if (id == 0)
id = get_IDOld();
- StringBuffer sb = new StringBuffer ("DELETE FROM ")
+ StringBuilder sb = new StringBuilder ("DELETE FROM ")
.append(MTree_Base.getNodeTableName(treeType))
.append(" n WHERE Node_ID=").append(id)
.append(" AND EXISTS (SELECT * FROM AD_Tree t "
@@ -3693,7 +3857,7 @@
*/
public void dump (int index)
{
- StringBuffer sb = new StringBuffer(" ").append(index);
+ StringBuilder sb = new StringBuilder(" ").append(index);
if (index < 0 || index >= get_ColumnCount())
{
log.finest(sb.append(": invalid").toString());
@@ -3725,7 +3889,7 @@
public static int[] getAllIDs (String TableName, String WhereClause, String trxName)
{
ArrayList<Integer> list = new ArrayList<Integer>();
- StringBuffer sql = new StringBuffer("SELECT ");
+ StringBuilder sql = new StringBuilder("SELECT ");
sql.append(TableName).append("_ID FROM ").append(TableName);
if (WhereClause != null && WhereClause.length() > 0)
sql.append(" WHERE ").append(WhereClause);



https://bitbucket.org/idempiere/idempiere/changeset/e7affeaa7620/
changeset: e7affeaa7620
branch: development
user: hengsin
date: 2012-06-20 10:58:04
summary: Fixed setup and installation script.
affected #: 19 files

diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/build.xml
--- a/org.adempiere.server-feature/build.xml
+++ b/org.adempiere.server-feature/build.xml
@@ -58,10 +58,6 @@
<copy file="utils/myEnvironmentTemplate.bat"
tofile="utils/myEnvironment.bat" filtering="yes" overwrite="yes" />

- <copy file="utils/RUN_GetAdempiereTemplate.bat"
- tofile="utils/RUN_GetAdempiere.bat" filtering="yes" overwrite="yes" />
- <copy file="utils/RUN_PutExportTemplate.bat"
- tofile="utils/RUN_PutExport.bat" filtering="yes" overwrite="yes" /><copy file="utils/RUN_WinEnvTemplate.bat"
tofile="utils/RUN_WinEnv.bat" filtering="yes" overwrite="yes" />

@@ -86,10 +82,6 @@
<copy file="utils/myEnvironmentTemplate.sh"
tofile="utils/myEnvironment.sh" filtering="yes" overwrite="yes" />

- <copy file="utils/RUN_GetAdempiereTemplate.sh"
- tofile="utils/RUN_GetAdempiere.sh" filtering="yes" overwrite="yes" />
- <copy file="utils/RUN_PutExportTemplate.sh"
- tofile="utils/RUN_PutExport.sh" filtering="yes" overwrite="yes" /><copy file="utils/RUN_UnixEnvTemplate.sh"
tofile="utils/RUN_UnixEnv.sh" filtering="yes" overwrite="yes" />



diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/console-setup-alt.bat
--- a/org.adempiere.server-feature/console-setup-alt.bat
+++ b/org.adempiere.server-feature/console-setup-alt.bat
@@ -18,7 +18,7 @@

:START
@REM Setup idempiere.properties and idempiereEnv.properties
-@"%JAVA%" -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.2.v20120110-1415.jar -clean -noRegistryCache -application org.adempiere.install.console-application
+@"%JAVA%" -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.*.jar -application org.adempiere.install.console-application

@Echo ErrorLevel = %ERRORLEVEL%
@IF NOT ERRORLEVEL = 1 GOTO NEXT
@@ -30,7 +30,7 @@

:NEXT
@REM setup tomcat
-@"%JAVA%" -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.2.v20120110-1415.jar -clean -noRegistryCache -application org.eclipse.ant.core.antRunner -buildfile build.xml
+@"%JAVA%" -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.*.jar -application org.eclipse.ant.core.antRunner -buildfile build.xml

@Echo .
@Echo For problems, check log file in base directory


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/console-setup-alt.sh
--- a/org.adempiere.server-feature/console-setup-alt.sh
+++ b/org.adempiere.server-feature/console-setup-alt.sh
@@ -16,10 +16,10 @@


# Setup idempiere.properties and idempiereEnv.properties
-$JAVA -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.2.v20120110-1415.jar -application org.adempiere.install.console-application
+$JAVA -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.*.jar -application org.adempiere.install.console-application

# Setup Tomcat
-$JAVA -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.2.v20120110-1415.jar -application org.eclipse.ant.core.antRunner -buildfile build.xml
+$JAVA -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.*.jar -application org.eclipse.ant.core.antRunner -buildfile build.xml

echo ===================================
echo Make .sh executable & set Env


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/idempiere-server.bat
--- a/org.adempiere.server-feature/idempiere-server.bat
+++ b/org.adempiere.server-feature/idempiere-server.bat
@@ -17,4 +17,4 @@
@Echo Starting iDempiere Server ...
@Echo =======================================

-@"%JAVA%" -Dosgi.compatibility.bootdelegation=true -Dosgi.noShutdown=true -Dosgi.framework.activeThreadType=normal -XX:MaxPermSize=192m -jar plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar -console -application org.adempiere.server.application
+@"%JAVA%" -Dosgi.compatibility.bootdelegation=true -Dosgi.noShutdown=true -Dosgi.framework.activeThreadType=normal -XX:MaxPermSize=192m -jar plugins/org.eclipse.equinox.launcher_1.*.jar -console 12612 -application org.adempiere.server.application


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/idempiere-server.sh
--- a/org.adempiere.server-feature/idempiere-server.sh
+++ b/org.adempiere.server-feature/idempiere-server.sh
@@ -13,4 +13,4 @@
echo Starting iDempiere Server
echo ===================================

-$JAVA -Dosgi.compatibility.bootdelegation=true -Dosgi.noShutdown=true -Dosgi.framework.activeThreadType=normal -XX:MaxPermSize=192m -jar plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar -console -application org.adempiere.server.application
+$JAVA -Dosgi.compatibility.bootdelegation=true -Dosgi.noShutdown=true -Dosgi.framework.activeThreadType=normal -XX:MaxPermSize=192m -jar plugins/org.eclipse.equinox.launcher_1.*.jar -console 12612 -application org.adempiere.server.application


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/server.product
--- a/org.adempiere.server-feature/server.product
+++ b/org.adempiere.server-feature/server.product
@@ -7,7 +7,7 @@
</configIni><launcherArgs>
- <programArgs>-console --launcher.XXMaxPermSize 192m</programArgs>
+ <programArgs>-console 12612 --launcher.XXMaxPermSize 192m</programArgs><vmArgs>-Dosgi.noShutdown=true -Dosgi.framework.activeThreadType=normal -Dosgi.compatibility.bootdelegation=true</vmArgs><vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac></launcherArgs>


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/server.product.launch
--- a/org.adempiere.server-feature/server.product.launch
+++ b/org.adempiere.server-feature/server.product.launch
@@ -22,7 +22,7 @@
<stringAttribute key="product" value="org.adempiere.server.server_product"/><stringAttribute key="productFile" value="/org.adempiere.server-feature/server.product"/><stringAttribute key="selected_target_plugins" value="com.springsource.javax.activation@default:default,com.springsource.javax.ejb@default:default,com.springsource.javax.jms@default:default,com.springsource.javax.mail@default:default,com.springsource.javax.management.j2ee@default:default,com.springsource.javax.persistence@default:default,com.springsource.javax.transaction@default:default,com.springsource.javax.xml.bind@default:default,com.springsource.javax.xml.rpc@default:default,com.springsource.javax.xml.soap@default:default,com.springsource.javax.xml.stream@default:default,com.springsource.net.sf.cglib@default:default,com.springsource.org.aopalliance@default:default,com.springsource.org.apache.activemq@default:default,com.springsource.org.apache.catalina.ha@default:false,com.springsource.org.apache.catalina.tribes@default:false,com.springsource.org.apache.catalina@default:default,com.springsource.org.apache.commons.logging@default:default,com.springsource.org.apache.coyote@default:false,com.springsource.org.apache.el@default:default,com.springsource.org.apache.jasper@default:false,com.springsource.org.apache.juli.extras@default:default,com.springsource.org.apache.kahadb@default:default,com.springsource.org.apache.tomcat.api@default:default,com.springsource.org.apache.tomcat.util@default:false,com.springsource.org.apache.xmlcommons@default:default,com.springsource.org.eclipse.jdt.core.compiler.batch@default:default,com.springsource.slf4j.api@default:default,com.springsource.slf4j.jcl@default:false,javax.annotation@default:default,javax.el@default:default,javax.servlet.jsp.jstl@default:default,javax.servlet.jsp@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.ant@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.httpclient@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.poi@default:default,org.apache.taglibs.standard.glassfish@default:default,org.apache.xerces@default:default,org.apache.xml.resolver@default:default,org.apache.xml.serializer@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime@4:true,org.eclipse.core.variables@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.ecf.provider.filetransfer.httpclient.ssl@default:false,org.eclipse.ecf.provider.filetransfer.httpclient@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.ecf@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.ds@3:true,org.eclipse.equinox.event@3:true,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.equinox.http.registry@default:true,org.eclipse.equinox.launcher.gtk.linux.x86_64@default:false,org.eclipse.equinox.launcher@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.equinox.p2.console@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.equinox.p2.ql@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.p2.touchpoint.eclipse@default:default,org.eclipse.equinox.p2.touchpoint.natives@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.equinox.util@default:default,org.eclipse.gemini.web.core@4:true,org.eclipse.gemini.web.extender@4:true,org.eclipse.gemini.web.tomcat@4:true,org.eclipse.osgi.services@3:true,org.eclipse.osgi@-1:true,org.eclipse.virgo.util.common@default:default,org.eclipse.virgo.util.io@default:default,org.eclipse.virgo.util.math@default:default,org.eclipse.virgo.util.osgi@default:default,org.eclipse.virgo.util.parser.manifest@default:default,org.hamcrest.core@default:default,org.junit@default:default,org.restlet.ext.servlet@default:default,org.restlet@4:true,org.sat4j.core@default:default,org.sat4j.pb@default:default,org.springframework.aop@default:default,org.springframework.beans@default:default,org.springframework.context@default:default,org.springframework.core@default:default,org.springframework.osgi.core@default:default,org.springframework.osgi.io@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="org.adempiere.base.callout@default:default,org.adempiere.base.process@default:default,org.adempiere.base@4:true,org.adempiere.eclipse.equinox.http.servlet@default:true,org.adempiere.eclipse.equinox.http.servletbridge@default:true,org.adempiere.eclipse.equinox.servletbridge@default:true,org.adempiere.extend@default:false,org.adempiere.install@4:true,org.adempiere.payment.processor@default:default,org.adempiere.pipo.handlers@default:default,org.adempiere.pipo@default:default,org.adempiere.plugin.utils@default:default,org.adempiere.replication.server@4:true,org.adempiere.replication@default:default,org.adempiere.report.jasper.library@default:default,org.adempiere.report.jasper.webapp@4:true,org.adempiere.report.jasper@default:default,org.adempiere.server@4:true,org.adempiere.tomcat.config@default:false,org.adempiere.ui.zk@4:true,org.adempiere.ui@default:default,org.adempiere.webstore.resource@default:false,org.adempiere.webstore.servlet@default:default,org.adempiere.webstore@4:true,org.apache.ecs@default:default,org.compiere.db.oracle.provider@default:default,org.compiere.db.postgresql.provider@default:default,org.zkoss.zk.library@default:true"/>
+<stringAttribute key="selected_workspace_plugins" value="org.adempiere.base.callout@default:default,org.adempiere.base.process@default:default,org.adempiere.base@4:true,org.adempiere.eclipse.equinox.http.servlet@default:true,org.adempiere.eclipse.equinox.http.servletbridge@default:true,org.adempiere.eclipse.equinox.servletbridge@default:true,org.adempiere.extend@default:false,org.adempiere.install@4:true,org.adempiere.payment.processor@default:default,org.adempiere.pipo.handlers@default:default,org.adempiere.pipo@default:default,org.adempiere.plugin.utils@default:default,org.adempiere.replication.server@4:true,org.adempiere.replication@default:default,org.adempiere.report.jasper.font.demo@default:default,org.adempiere.report.jasper.library@default:default,org.adempiere.report.jasper.webapp@4:true,org.adempiere.report.jasper@default:default,org.adempiere.server@4:true,org.adempiere.tomcat.config@default:false,org.adempiere.ui.zk@4:true,org.adempiere.ui@default:default,org.adempiere.webstore.resource@default:false,org.adempiere.webstore.servlet@default:default,org.adempiere.webstore@4:true,org.apache.ecs@default:default,org.compiere.db.oracle.provider@default:default,org.compiere.db.postgresql.provider@default:default,org.zkoss.zk.library@default:true"/><booleanAttribute key="show_selected_only" value="false"/><booleanAttribute key="tracing" value="false"/><booleanAttribute key="useCustomFeatures" value="false"/>


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/setup-alt.bat
--- a/org.adempiere.server-feature/setup-alt.bat
+++ b/org.adempiere.server-feature/setup-alt.bat
@@ -18,7 +18,7 @@

:START
@REM Setup idempiere.properties and idempiereEnv.properties
-@"%JAVA%" -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.2.v20120110-1415.jar -application org.adempiere.install.application -consoleLog
+@"%JAVA%" -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.*.jar -application org.adempiere.install.application -consoleLog

@Echo ErrorLevel = %ERRORLEVEL%
@IF NOT ERRORLEVEL = 1 GOTO NEXT
@@ -31,7 +31,7 @@
:NEXT
@REM setup tomcat
@Echo ... Setup Tomcat
-@"%JAVA%" -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.2.v20120110-1415.jar -application org.eclipse.ant.core.antRunner -buildfile build.xml
+@"%JAVA%" -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.*.jar -application org.eclipse.ant.core.antRunner -buildfile build.xml

@Echo ...
@Echo For problems, check log file in base directory


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/setup-alt.sh
--- a/org.adempiere.server-feature/setup-alt.sh
+++ b/org.adempiere.server-feature/setup-alt.sh
@@ -15,11 +15,11 @@
fi

#setup idempiere.properties and idempiereEnv.propertiess
-$JAVA -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.2.v20120110-1415.jar -application org.adempiere.install.application -consoleLog
+$JAVA -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.*.jar -application org.adempiere.install.application -consoleLog

echo ... Setup Tomcat
#setup tomcat
-$JAVA -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.2.v20120110-1415.jar -application org.eclipse.ant.core.antRunner -buildfile build.xml
+$JAVA -Dosgi.noShutdown=false -Dosgi.compatibility.bootdelegation=true -Dosgi.install.area=setup -jar plugins/org.eclipse.osgi_3.7.*.jar -application org.eclipse.ant.core.antRunner -buildfile build.xml

echo ... Make .sh executable
chmod -R a+x *.sh


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/utils.unix/RUN_Server2.sh
--- a/org.adempiere.server-feature/utils.unix/RUN_Server2.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-# iDempiere Server Start
-
-if [ $IDEMPIERE_HOME ]; then
- cd $IDEMPIERE_HOME/utils
-fi
-
-. ./myEnvironment.sh Server
-
-## Check Java Home
-if [ $JAVA_HOME ]; then
- JAVA=$JAVA_HOME/bin/java
-else
- JAVA=java
- echo JAVA_HOME is not set.
- echo You may not be able to start Adempiere
- echo Set JAVA_HOME to the directory of your local JDK.
-fi
-
-# To use your own Encryption class (implementing org.compiere.util.SecureInterface),
-# you need to set it here (and in the client start script) - example:
-# SECURE=-DADEMPIERE_SECURE=org.compiere.util.Secure
-SECURE=
-
-VMARGS="-Dosgi.compatibility.bootdelegation=true -Djava.awt.headless=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -DIDEMPIERE_HOME=$IDEMPIERE_HOME"
-# headless option if you don't have X installed on the server
-$JAVA -server $VMARGS -jar $IDEMPIERE_HOME/osgi/org.eclipse.osgi_3.6.0.v20100517.jar -install $IDEMPIERE_HOME/osgi -configuration $IDEMPIERE_HOME/osgi/server -clean -console
-
-


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/utils.unix/RUN_Server2Stop.sh
--- a/org.adempiere.server-feature/utils.unix/RUN_Server2Stop.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-# ADempiere Server Stop script
-
-if [ $IDEMPIERE_HOME ]; then
- cd $IDEMPIERE_HOME/utils
-fi
-
-. ./myEnvironment.sh Server
-echo Adempiere Server Stop - $IDEMPIERE_HOME \($ADEMPIERE_DB_NAME\)
-
-JBOSS_LIB=$JBOSS_HOME/lib
-export JBOSS_LIB
-JBOSS_SERVERLIB=$JBOSS_HOME/server/adempiere/lib
-export JBOSS_SERVERLIB
-JBOSS_CLASSPATH=$IDEMPIERE_HOME/lib/jboss.jar:$JBOSS_LIB/jboss-system.jar:
-export JBOSS_CLASSPATH
-
-echo sh $JBOSS_HOME/bin/shutdown.sh --server=jnp://$ADEMPIERE_APPS_SERVER:$ADEMPIERE_JNP_PORT --shutdown
-sh $JBOSS_HOME/bin/shutdown.sh --server=jnp://$ADEMPIERE_APPS_SERVER:$ADEMPIERE_JNP_PORT --shutdown


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/utils.unix/unix/MAC_OS_X/idempiere
--- a/org.adempiere.server-feature/utils.unix/unix/MAC_OS_X/idempiere
+++ b/org.adempiere.server-feature/utils.unix/unix/MAC_OS_X/idempiere
@@ -35,14 +35,14 @@
StartService ()
{
IDEMPIERESTATUS=$(ps ax | grep -v grep | grep server| grep $EXECDIR|wc -l)
- if [ $IDEMPIERESTATUS != 0 ] ; then
+ if [ $IDEMPIERESTATUS != 0 ] ; then
ConsoleMessage "idempiere is already running"
return 1
fi
ConsoleMessage "Starting iDempiere ERP: "
export LOGFILE=$IDEMPIERE_HOME/log/idempiere_`date +%Y%m%d%H%M%S`.log
export LOOKFILE=$IDEMPIERE_HOME/server.log
- su root -c "cd $EXECDIR/utils;$EXECDIR/utils/RUN_Server2.sh &> $LOGFILE &"
+ su root -c "cd $EXECDIR;$EXECDIR/idempiere-server.sh &> $LOGFILE &"
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
# wait for server to be confirmed as started in logfile
@@ -58,7 +58,7 @@
fi
done

-if [ $STATUSTEST -eq 0 ]
+ if [ $STATUSTEST -eq 0 ]
then
ConsoleMessage "Service hasn't started within the timeout allowed, please review file $LOGFILE to see the status of the service"
else
@@ -80,36 +80,25 @@
return 1
fi
ConsoleMessage "Stopping iDempiere ERP: "
- export LASTLOG=`ls -t $IDEMPIERE_HOME/log/idempiere_??????????????.log | head -1`
- export LOOKFILE=$IDEMPIERE_HOME/log/server.log
- su root -c "cd $EXECDIR/utils;$EXECDIR/utils/RUN_Server2Stop.sh &> /dev/null &"
RETVAL=$?
- if [ $RETVAL -eq 0 ] ; then
- # wait for server to be confirmed as halted in logfile
- STATUSTEST=0
- ITERATIONS=0
- while [ $STATUSTEST -eq 0 ] ; do
- sleep 2
- tail -n 5 $LOOKFILE | grep 'Shutdown complete' &> /dev/null && STATUSTEST=1
- ITERATIONS=`expr $ITERATIONS + 1`
- if [ $ITERATIONS -gt $MAXITERATIONS ]
- then
- break
- fi
- done
- if [ $STATUSTEST -eq 0 ]
- then
- ConsoleMessage "Service hasn't stopped within the timeout allowed, please review file $LASTLOG to see the status of the service"
- else
- ConsoleMessage "idempiere Stopped"
- fi
- echo
+ # try direct kill with signal 15, then signal 9
+ kill -15 `ps ax | grep -v grep | grep $EXECDIR | sed -e 's/^ *//g' | cut -f 1 -d " "`
+ sleep 5
+ IDEMPIERESTATUS=$(ps ax | grep -v grep | grep server| grep $EXECDIR|wc -l)
+ if [ $IDEMPIERESTATUS -ne 0 ] ; then
+ ConsoleMessage "Service stopped with kill -15"
else
- ConsoleMessage "idempiere Failed to Stop"
- echo
+ echo "Trying direct kill with signal -9"
+ kill -9 `ps ax | grep -v grep | grep $EXECDIR | sed -e 's/^ *//g' | cut -f 1 -d " "`
+ sleep 5
+ IDEMPIERESTATUS=$(ps ax | grep -v grep | grep server| grep $EXECDIR|wc -l)
+ if [ $IDEMPIERESTATUS -ne 0 ] ; then
+ ConsoleMessage "Service stopped with kill -9"
+ else
+ ConsoleMessage "Service hasn't stopped"
+ fi
fi
return $RETVAL
-
}




diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/utils.unix/unix/idempiere_Debian.sh
--- a/org.adempiere.server-feature/utils.unix/unix/idempiere_Debian.sh
+++ b/org.adempiere.server-feature/utils.unix/unix/idempiere_Debian.sh
@@ -18,24 +18,22 @@

# initialization
# adjust these variables to your environment
-EXECDIR=/opt/idempiere/iDempiere
+IDEMPIERE_HOME=/home/idempiere/idempiere-server
IDEMPIEREUSER=idempiere
# Instead of using ENVFILE you can set JAVA_HOME, IDEMPIERE_HOME and add JAVA_HOME/bin to PATH
# in this case you can comment the source lines for ENVFILE below
# detected some problems with Hardy Heron ubuntu using the bash source command
-ENVFILE=/home/idempiere/.bashrc
-# STOPMESSAGE="Halting VM" # Message when using java 5
-STOPMESSAGE="INFO.*Server\].*Shutdown complete" # Message when using java 6
+ENVFILE=$IDEMPIERE_HOME/utils/myEnvironment.sh

. /lib/lsb/init-functions

RETVAL=0
IDEMPIERESTATUS=
-MAXITERATIONS=60 # 2 seconds every iteration, max wait 2 minutes)
+MAXITERATIONS=60

getidempierestatus() {
- IDEMPIERESTATUSSTRING=$(ps ax | grep -v grep | grep $EXECDIR)
- echo $IDEMPIERESTATUSSTRING | grep -q $EXECDIR
+ IDEMPIERESTATUSSTRING=$(ps ax | grep -v grep | grep $IDEMPIERE_HOME)
+ echo $IDEMPIERESTATUSSTRING | grep -q $IDEMPIERE_HOME
IDEMPIERESTATUS=$?
}

@@ -46,10 +44,11 @@
return 1
fi
echo -n "Starting iDempiere ERP: "
+ cd $IDEMPIERE_HOME/utils
. $ENVFILE
export LOGFILE=$IDEMPIERE_HOME/log/idempiere_`date +%Y%m%d%H%M%S`.log
su $IDEMPIEREUSER -c "mkdir -p IDEMPIERE_HOME/log"
- su $IDEMPIEREUSER -c "cd $EXECDIR/utils;$EXECDIR/utils/RUN_Server2.sh &> $LOGFILE &"
+ su $IDEMPIEREUSER -c "cd $IDEMPIERE_HOME;$IDEMPIERE_HOME/idempiere-server.sh &> $LOGFILE &"
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
# wait for server to be confirmed as started in logfile
@@ -57,7 +56,7 @@
ITERATIONS=0
while [ $STATUSTEST -eq 0 ] ; do
sleep 2
- tail -n 9 $LOGFILE | grep -q 'INFO.*\[Server\].*Started in' && STATUSTEST=1
+ tail -n 9 $LOGFILE | grep -q '.*WebUIServlet.*started successfully.*' && STATUSTEST=1
echo -n "."
ITERATIONS=`expr $ITERATIONS + 1`
if [ $ITERATIONS -gt $MAXITERATIONS ]
@@ -76,63 +75,36 @@
log_failure_msg "Service not started"
echo
fi
+ RETVAL=$?
return $RETVAL
}

stop () {
getidempierestatus
if [ $IDEMPIERESTATUS -ne 0 ] ; then
- echo "iDempiere is already stopped"
- return 1
+ echo "iDempiere is already stopped"
+ return 1
fi
echo -n "Stopping iDempiere ERP: "
+ cd $IDEMPIERE_HOME/utils
. $ENVFILE
- # export LASTLOG=`ls -t $IDEMPIERE_HOME/log/adempiere_??????????????.log | head -1`
- export LASTLOG=$IDEMPIERE_HOME/adempiere/log/server.log
- su $IDEMPIEREUSER -c "cd $EXECDIR/utils;$EXECDIR/utils/RUN_Server2Stop.sh &> /dev/null &"
- RETVAL=$?
- if [ $RETVAL -eq 0 ] ; then
- # wait for server to be confirmed as halted in logfile
- STATUSTEST=0
- ITERATIONS=0
- while [ $STATUSTEST -eq 0 ] ; do
- sleep 2
- tail -n 9 $LASTLOG | grep -q "$STOPMESSAGE" && STATUSTEST=1
- echo -n "."
- ITERATIONS=`expr $ITERATIONS + 1`
- if [ $ITERATIONS -gt $MAXITERATIONS ]
- then
- break
- fi
- done
- if [ $STATUSTEST -eq 0 ]
- then
- log_warning_msg "Service hasn't stopped within the timeout allowed, please review file $LASTLOG to see the status of the service"
- log_warning_msg "Trying direct kill with signal -15"
- # idempiere didn't finish - try direct kill with signal 15, then signal 9
- kill -15 `ps ax | grep -v grep | grep $EXECDIR | sed -e 's/^ *//g' | cut -f 1 -d " "`
- sleep 5
- getidempierestatus
- if [ $IDEMPIERESTATUS -ne 0 ] ; then
- log_success_msg "Service stopped with kill -15"
- else
- echo "Trying direct kill with signal -9"
- kill -9 `ps ax | grep -v grep | grep $EXECDIR | sed -e 's/^ *//g' | cut -f 1 -d " "`
- sleep 5
- getidempierestatus
- if [ $IDEMPIERESTATUS -ne 0 ] ; then
- log_success_msg "Service stopped with kill -9"
- else
- log_warning_msg "Service hasn't stopped"
- fi
- fi
- else
- log_success_msg "Service stopped"
- fi
- echo
+ log_warning_msg "Trying direct kill with signal -15"
+ # try direct kill with signal 15, then signal 9
+ kill -15 -`ps ax o pgid,command | grep -v grep | grep $IDEMPIERE_HOME | sed -e 's/^ *//g' | cut -f 1 -d " "`
+ sleep 5
+ getidempierestatus
+ if [ $IDEMPIERESTATUS -ne 0 ] ; then
+ log_success_msg "Service stopped with kill -15"
else
- log_failure_msg "Service not stopped"
- echo
+ echo "Trying direct kill with signal -9"
+ kill -9 -`ps ax o pgid,command | grep -v grep | grep $IDEMPIERE_HOME | sed -e 's/^ *//g' | cut -f 1 -d " "`
+ sleep 5
+ getidempierestatus
+ if [ $IDEMPIERESTATUS -ne 0 ] ; then
+ log_success_msg "Service stopped with kill -9"
+ else
+ log_warning_msg "Service hasn't stopped"
+ fi
fi
return $RETVAL
}
@@ -146,19 +118,19 @@
condrestart () {
getidempierestatus
if [ $IDEMPIERESTATUS -eq 0 ] ; then
- restart
+ restart
fi
}

-rhstatus () {
+status () {
getidempierestatus
if [ $IDEMPIERESTATUS -eq 0 ] ; then
- echo
- echo "iDempiere is running:"
- ps ax | grep -v grep | grep $EXECDIR | sed 's/^[[:space:]]*\([[:digit:]]*\).*:[[:digit:]][[:digit:]][[:space:]]\(.*\)/\1 \2/'
- echo
- else
- echo "iDempiere is stopped"
+ echo
+ echo "iDempiere is running:"
+ ps ax | grep -v grep | grep $IDEMPIERE_HOME | sed 's/^[[:space:]]*\([[:digit:]]*\).*:[[:digit:]][[:digit:]][[:space:]]\(.*\)/\1 \2/'
+ echo
+ else
+ echo "iDempiere is stopped"
fi
}

@@ -179,7 +151,7 @@
condrestart
;;
status)
- rhstatus
+ status
;;
*)
echo $"Usage: $0 {start|stop|reload|restart|condrestart|status}"


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/utils.unix/unix/idempiere_RedHat.sh
--- a/org.adempiere.server-feature/utils.unix/unix/idempiere_RedHat.sh
+++ b/org.adempiere.server-feature/utils.unix/unix/idempiere_RedHat.sh
@@ -17,11 +17,9 @@

# initialization
# adjust these variables to your environment
-EXECDIR=/home/idempiere/iDempiere
-ENVFILE=/home/idempiere/.bash_profile
+IDEMPIERE_HOME=/home/idempiere/idempiere-server
+ENVFILE=$IDEMPIERE_HOME/utils/myEnvironment.sh
IDEMPIEREUSER=idempiere
-# STOPMESSAGE="Halting VM" # Message when using java 5
-STOPMESSAGE="INFO.*Server\].*Shutdown complete" # Message when using java 6

. /etc/rc.d/init.d/functions

@@ -30,22 +28,22 @@
MAXITERATIONS=60 # 2 seconds every iteration, max wait 2 minutes)

getidempierestatus() {
- IDEMPIERESTATUSSTRING=$(ps ax | grep -v grep | grep $EXECDIR)
- echo $IDEMPIERESTATUSSTRING | grep -q $EXECDIR
+ IDEMPIERESTATUSSTRING=$(ps ax | grep -v grep | grep $IDEMPIERE_HOME)
+ echo $IDEMPIERESTATUSSTRING | grep -q $IDEMPIERE_HOME
IDEMPIERESTATUS=$?
}

start () {
getidempierestatus
if [ $IDEMPIERESTATUS -eq 0 ] ; then
- echo "idempiere is already running"
- return 1
+ echo "iDempiere is already running"
+ return 1
fi
echo -n "Starting ADempiere ERP: "
source $ENVFILE
export LOGFILE=$IDEMPIERE_HOME/log/idempiere_`date +%Y%m%d%H%M%S`.log
su $IDEMPIEREUSER -c "mkdir -p $IDEMPIERE_HOME/log"
- su $IDEMPIEREUSER -c "cd $EXECDIR/utils;$EXECDIR/utils/RUN_Server2.sh &> $LOGFILE &"
+ su $IDEMPIEREUSER -c "cd $IDEMPIERE_HOME;$IDEMPIERE_HOME/idempiere-server.sh &> $LOGFILE &"
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
# wait for server to be confirmed as started in logfile
@@ -53,12 +51,12 @@
ITERATIONS=0
while [ $STATUSTEST -eq 0 ] ; do
sleep 2
- tail -n 9 $LOGFILE | grep -q 'INFO.*\[Server\].*Started in' && STATUSTEST=1
+ tail -n 9 $LOGFILE | grep -q '.*WebUIServlet.*started successfully.*' && STATUSTEST=1
echo -n "."
ITERATIONS=`expr $ITERATIONS + 1`
if [ $ITERATIONS -gt $MAXITERATIONS ]
then
- break
+ break
fi
done
if [ $STATUSTEST -eq 0 ]
@@ -79,58 +77,30 @@
stop () {
getidempierestatus
if [ $IDEMPIERESTATUS -ne 0 ] ; then
- echo "idempiere is already stopped"
- return 1
+ echo "idempiere is already stopped"
+ return 1
fi
- echo -n "Stopping ADempiere ERP: "
+ echo -n "Stopping iDempiere ERP: "
source $ENVFILE
- # export LASTLOG=`ls -t $IDEMPIERE_HOME/log/idempiere_??????????????.log | head -1`
- export LASTLOG=$IDEMPIERE_HOME/log/server.log
- su $IDEMPIEREUSER -c "cd $EXECDIR/utils;$EXECDIR/utils/RUN_Server2Stop.sh &> /dev/null &"
- RETVAL=$?
- if [ $RETVAL -eq 0 ] ; then
- # wait for server to be confirmed as halted in logfile
- STATUSTEST=0
- ITERATIONS=0
- while [ $STATUSTEST -eq 0 ] ; do
- sleep 2
- tail -n 9 $LASTLOG | grep -q "$STOPMESSAGE" && STATUSTEST=1
- echo -n "."
- ITERATIONS=`expr $ITERATIONS + 1`
- if [ $ITERATIONS -gt $MAXITERATIONS ]
- then
- break
- fi
- done
- if [ $STATUSTEST -eq 0 ]
- then
- echo "Service hasn't stopped within the timeout allowed, please review file $LASTLOG to see the status of the service"
- echo "Trying direct kill with signal -15"
- # Adempiere didn't finish - try direct kill with signal 15, then signal 9
- kill -15 `ps ax | grep -v grep | grep $EXECDIR | sed -e 's/^ *//g' | cut -f 1 -d " "`
- sleep 5
- getidempierestatus
- if [ $IDEMPIERESTATUS -ne 0 ] ; then
- echo_success
- else
- echo "Trying direct kill with signal -9"
- kill -9 `ps ax | grep -v grep | grep $EXECDIR | sed -e 's/^ *//g' | cut -f 1 -d " "`
- sleep 5
- getidempierestatus
- if [ $IDEMPIERESTATUS -ne 0 ] ; then
- echo_success
- else
- echo_warning
- fi
- fi
- else
+ echo "Trying direct kill with signal -15"
+ # Adempiere didn't finish - try direct kill with signal 15, then signal 9
+ kill -15 `ps ax | grep -v grep | grep $IDEMPIERE_HOME | sed -e 's/^ *//g' | cut -f 1 -d " "`
+ sleep 5
+ getidempierestatus
+ if [ $IDEMPIERESTATUS -ne 0 ] ; then
+ echo_success
+ else
+ echo "Trying direct kill with signal -9"
+ kill -9 `ps ax | grep -v grep | grep $IDEMPIERE_HOME | sed -e 's/^ *//g' | cut -f 1 -d " "`
+ sleep 5
+ getidempierestatus
+ if [ $IDEMPIERESTATUS -ne 0 ] ; then
echo_success
- fi
- echo
- else
- echo_failure
- echo
+ else
+ echo_warning
+ fi
fi
+ RETVAL=$?
return $RETVAL
}

@@ -147,12 +117,12 @@
fi
}

-rhstatus () {
+status () {
getidempierestatus
if [ $IDEMPIERESTATUS -eq 0 ] ; then
echo
echo "idempiere is running:"
- ps ax | grep -v grep | grep $EXECDIR | sed 's/^[[:space:]]*\([[:digit:]]*\).*:[[:digit:]][[:digit:]][[:space:]]\(.*\)/\1 \2/'
+ ps ax | grep -v grep | grep $IDEMPIERE_HOME | sed 's/^[[:space:]]*\([[:digit:]]*\).*:[[:digit:]][[:digit:]][[:space:]]\(.*\)/\1 \2/'
echo
else
echo "idempiere is stopped"
@@ -176,7 +146,7 @@
condrestart
;;
status)
- rhstatus
+ status
;;
*)
echo $"Usage: $0 {start|stop|reload|restart|condrestart|status}"


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/utils.windows/RUN_Server2.bat
--- a/org.adempiere.server-feature/utils.windows/RUN_Server2.bat
+++ /dev/null
@@ -1,25 +0,0 @@
-@if (%IDEMPIERE_HOME%) == () (CALL myEnvironment.bat Server) else (CALL %IDEMPIERE_HOME%\utils\myEnvironment.bat Server)
-@Title Adempiere Server Start - %IDEMPIERE_HOME% (%ADEMPIERE_APPS_TYPE%)
-
-@Rem $Id: RUN_Server2.bat,v 1.24 2005/10/26 00:38:18 jjanke Exp $
-
-:CHECK_JAVA:
-@if not "%JAVA_HOME%" == "" goto JAVA_HOME_OK
-@Set JAVA=java
-@Echo JAVA_HOME is not set.
-@Echo You may not be able to start Adempiere
-@Echo Set JAVA_HOME to the directory of your local JDK.
-@Echo You could set it via WinEnv.js e.g.:
-@Echo cscript WinEnv.js C:\Adempiere C:\j2sdk1.4.2_06
-@goto CHECK_ADEMPIERE
-:JAVA_HOME_OK
-@Set JAVA=%JAVA_HOME%\bin\java
-
-@Rem To use your own Encryption class (implementing org.compiere.util.SecureInterface),
-@Rem you need to set it here (and in the client start script) - example:
-@Rem SET SECURE=-DADEMPIERE_SECURE=org.compiere.util.Secure
-@SET SECURE=
-
-VMARGS="-Dosgi.compatibility.bootdelegation=true -Djava.awt.headless=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -DIDEMPIERE_HOME=%IDEMPIERE_HOME%"
-# headless option if you don't have X installed on the server
-@"%JAVA%" -server %VMARGS% -jar %IDEMPIERE_HOME%/osgi/org.eclipse.osgi_3.6.0.v20100517.jar -install %IDEMPIERE_HOME%/osgi -configuration %IDEMPIERE_HOME%/osgi/server -clean -console


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/utils.windows/RUN_Server2Stop.bat
--- a/org.adempiere.server-feature/utils.windows/RUN_Server2Stop.bat
+++ /dev/null
@@ -1,28 +0,0 @@
-@if (%IDEMPIERE_HOME%) == () (CALL myEnvironment.bat Server) else (CALL %IDEMPIERE_HOME%\utils\myEnvironment.bat Server)
-@Title Adempiere Server Stop - %IDEMPIERE_HOME%
-
-@Rem $Id: RUN_Server2Stop.bat,v 1.12 2005/09/06 02:46:16 jjanke Exp $
-
-@IF '%ADEMPIERE_APPS_TYPE%' == 'jboss' GOTO JBOSS
-@GOTO UNSUPPORTED
-
-:JBOSS
-@Set NOPAUSE=Yes
-@Set JBOSS_LIB=%JBOSS_HOME%\lib
-@Set JBOSS_SERVERLIB=%JBOSS_HOME%\server\adempiere\lib
-@Set JBOSS_CLASSPATH=%IDEMPIERE_HOME%\lib\jboss.jar;%JBOSS_LIB%\jboss-system.jar
-
-@CD %JBOSS_HOME%\bin
-Call shutdown --server=jnp://%ADEMPIERE_APPS_SERVER%:%ADEMPIERE_JNP_PORT% --shutdown
-
-@Echo Done Stopping Adempiere Apps Server %IDEMPIERE_HOME% (%ADEMPIERE_DB_NAME%)
-@GOTO END
-
-:UNSUPPORTED
-@Echo Apps Server stop of %ADEMPIERE_APPS_TYPE% not supported
-
-:END
-@Rem Sleep 30
-@CHOICE /C YN /T 30 /D N > NUL
-
-@Exit
\ No newline at end of file


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/utils.windows/RUN_Start.bat
--- a/org.adempiere.server-feature/utils.windows/RUN_Start.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@if (%IDEMPIERE_HOME%) == () (CALL myEnvironment.bat Server) else (CALL %IDEMPIERE_HOME%\utils\myEnvironment.bat Server)
-@Title Start Adempiere - %IDEMPIERE_HOME% (%ADEMPIERE_DB_NAME%)
-
-@Rem $Id: RUN_Start.bat,v 1.11 2005/01/22 21:59:15 jjanke Exp $
-
-@Echo Starting Database
-@CALL %ADEMPIERE_DB_PATH%\Start.bat
-
-@START %IDEMPIERE_HOME%\utils\RUN_Server2.bat


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/utils.windows/RUN_Stop.bat
--- a/org.adempiere.server-feature/utils.windows/RUN_Stop.bat
+++ /dev/null
@@ -1,9 +0,0 @@
-@if (%IDEMPIERE_HOME%) == () (CALL myEnvironment.bat Server) else (CALL %IDEMPIERE_HOME%\utils\myEnvironment.bat Server)
-@Title Stop Adempiere - %IDEMPIERE_HOME% (%ADEMPIERE_DB_NAME%)
-
-@Rem $Id: RUN_Stop.bat,v 1.11 2005/01/22 21:59:15 jjanke Exp $
-
-@CALL %IDEMPIERE_HOME%\utils\RUN_Server2Stop.bat
-
-@CALL %ADEMPIERE_DB_PATH%\Stop.bat
-


diff -r 5578eb226cf2c9bbb0aa3253a9c87e820b43e48a -r e7affeaa7620f46705767a40f5e7cc51ff55269a org.adempiere.server-feature/utils.windows/windows/idempiere_Service_Uninstall.bat
--- a/org.adempiere.server-feature/utils.windows/windows/idempiere_Service_Uninstall.bat
+++ b/org.adempiere.server-feature/utils.windows/windows/idempiere_Service_Uninstall.bat
@@ -4,5 +4,5 @@

if (%IDEMPIERE_HOME%) == () (CALL myEnvironment.bat Server) else (CALL %IDEMPIERE_HOME%\utils\myEnvironment.bat Server)

-NET STOP Adempiere
-%IDEMPIERE_HOME%\utils\windows\AdempiereService.exe -uninstall Adempiere
+NET STOP idempiere
+%IDEMPIERE_HOME%\utils\windows\idempiereService.exe -uninstall idempiere



https://bitbucket.org/idempiere/idempiere/changeset/ee1bbabba638/
changeset: ee1bbabba638
branch: development
user: hengsin
date: 2012-06-20 10:58:28
summary: minor - fixed login dialog header text color.
affected #: 1 file

diff -r e7affeaa7620f46705767a40f5e7cc51ff55269a -r ee1bbabba6389e2d7628626f84208135fc99f4da org.adempiere.ui.zk/theme/default/css/theme.css.dsp
--- a/org.adempiere.ui.zk/theme/default/css/theme.css.dsp
+++ b/org.adempiere.ui.zk/theme/default/css/theme.css.dsp
@@ -37,7 +37,7 @@
}

.login-box-header-txt {
- color: white;
+ color: white !important;
font-weight: bold;
position: relative;
top: 30px;



https://bitbucket.org/idempiere/idempiere/changeset/89cbe8f91b75/
changeset: 89cbe8f91b75
branch: development
user: hengsin
date: 2012-06-20 10:59:58
summary: IDEMPIERE-300 zk6: Search workflow process -> java.lang.IndexOutOfBoundsException
affected #: 1 file

diff -r ee1bbabba6389e2d7628626f84208135fc99f4da -r 89cbe8f91b75881ec78ae83682f70cb6c76267ab org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java
@@ -1695,7 +1695,8 @@
}

public void OnPostVisible() {
- Clients.response(new AuFocus(m_sEditors.get(0).getComponent()));
+ if (m_sEditors.size() > 0)
+ Clients.response(new AuFocus(m_sEditors.get(0).getComponent()));
}

/**

Repository URL: https://bitbucket.org/idempiere/idempiere/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
Reply all
Reply to author
Forward
0 new messages