From 21c2f0c05b90a07902456eb4cde0b0399e0c1bc5 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Mon, 17 Dec 2012 11:05:30 +0800 Subject: [PATCH 01/21] IDEMPIERE-254 2Pack Stabilization and Enhancement. Fixed pack in bug with generic po. --- org.adempiere.base/src/org/compiere/process/SvrProcess.java | 4 ++++ .../org/adempiere/pipo2/handler/GenericPOElementHandler.java | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/process/SvrProcess.java b/org.adempiere.base/src/org/compiere/process/SvrProcess.java index a4374b6f58..927867ff8f 100644 --- a/org.adempiere.base/src/org/compiere/process/SvrProcess.java +++ b/org.adempiere.base/src/org/compiere/process/SvrProcess.java @@ -108,8 +108,10 @@ public abstract class SvrProcess implements ProcessCall boolean success = false; + ClassLoader contextLoader = Thread.currentThread().getContextClassLoader(); try { + Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); m_ctx.put(PROCESS_INFO_CTX_KEY, m_pi); if (processUI != null) m_ctx.put(PROCESS_UI_CTX_KEY, processUI); @@ -143,6 +145,8 @@ public abstract class SvrProcess implements ProcessCall // outside transaction processing [ teo_sarca, 1646891 ] postProcess(!m_pi.isError()); + + Thread.currentThread().setContextClassLoader(contextLoader); } return !m_pi.isError(); diff --git a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/GenericPOElementHandler.java b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/GenericPOElementHandler.java index 161183c1a6..b115ae2865 100644 --- a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/GenericPOElementHandler.java +++ b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/GenericPOElementHandler.java @@ -73,8 +73,8 @@ public class GenericPOElementHandler extends AbstractElementHandler { String uuidColumn = PO.getUUIDColumnName(tableName); String idColumn = tableName + "_ID"; MTable table = MTable.get(ctx.ctx, tableName); - if ((!element.properties.containsKey(uuidColumn) || element.properties.get(uuidColumn).contents == null || element.properties.get(uuidColumn).contents.toString().trim().length() > 0) - && (!element.properties.containsKey(idColumn) || element.properties.get(idColumn).contents == null || element.properties.get(idColumn).contents.toString().trim().length() > 0)) { + if ((!element.properties.containsKey(uuidColumn) || element.properties.get(uuidColumn).contents == null || element.properties.get(uuidColumn).contents.toString().trim().length() == 0) + && (!element.properties.containsKey(idColumn) || element.properties.get(idColumn).contents == null || element.properties.get(idColumn).contents.toString().trim().length() == 0)) { POInfo info = POInfo.getPOInfo(ctx.ctx, table.getAD_Table_ID()); MColumn columns[] = table.getColumns(false); StringBuilder whereClause = new StringBuilder(); From 6b1f26159e856c4c43a8b204ed602e9761bf3d2a Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Mon, 17 Dec 2012 11:50:14 +0800 Subject: [PATCH 02/21] IDEMPIERE-92 - Integrate Selenium. Use widget name and instance name for uuid generation when id is not set. Change WEditor to use the common instanceName widget attribute. --- .../adempiere/webui/AdempiereIdGenerator.java | 23 +++++++++++++++++-- .../org/adempiere/webui/editor/WEditor.java | 6 +++-- .../src/test/SelectTabTest.java | 2 +- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java index 2cebb6c37d..24bf0f8d4e 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java @@ -44,6 +44,13 @@ public class AdempiereIdGenerator implements IdGenerator { public String nextComponentUuid(Desktop desktop, Component comp, ComponentInfo compInfo) { String prefix = comp.getId(); + if (prefix == null || prefix.length() == 0) { + String attribute = comp.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME); + if (attribute != null && attribute.length() > 0) { + prefix = getWidgetName(comp.getWidgetClass())+"0"+attribute; + } + } + if (prefix == null || prefix.length() == 0) { prefix = DEFAULT_ZK_COMP_PREFIX; } @@ -54,8 +61,15 @@ public class AdempiereIdGenerator implements IdGenerator { //only include id space owner to ease converting test case to use zk id selector instead of uuid if (parent instanceof IdSpace) { String id = parent.getId(); - if (id != null && id.length() > 0) - builder.insert(0, id+"_"); + if (id != null && id.length() > 0) { + builder.insert(0, id+"_"); + } else { + String attribute = parent.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME); + if (attribute != null && attribute.length() > 0) { + id = getWidgetName(parent.getWidgetClass())+"0"+attribute; + builder.insert(0, id+"_"); + } + } } parent = parent.getParent(); } @@ -85,6 +99,11 @@ public class AdempiereIdGenerator implements IdGenerator { return prefix + i; } + private String getWidgetName(String widgetClass) { + String name = widgetClass.substring(widgetClass.lastIndexOf(".")+1); + return name.toLowerCase(); + } + public static String escapeId(String prefix) { Pattern pattern = Pattern.compile("[^a-zA-Z_0-9]"); Matcher matcher = pattern.matcher(prefix); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java index 9b0490db1b..c14e5d38fb 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java @@ -22,6 +22,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; +import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.component.Bandbox; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.Datebox; @@ -109,9 +110,10 @@ public abstract class WEditor implements EventListener, PropertyChangeLis this.setComponent(comp); this.gridField = gridField; - comp.setWidgetAttribute("columnName", gridField.getColumnName()); if (gridField.getGridTab() != null) { - comp.setWidgetAttribute("qualifiedColumnName", gridField.getGridTab().getTableName()+"."+gridField.getColumnName()); + comp.setWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME, gridField.getGridTab().getTableName()+"0"+gridField.getColumnName()); + } else { + comp.setWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME, gridField.getColumnName()); } this.setMandatory(gridField.isMandatory(false)); this.readOnly = gridField.isReadOnly(); diff --git a/org.idempiere.ui.zk.selenium/src/test/SelectTabTest.java b/org.idempiere.ui.zk.selenium/src/test/SelectTabTest.java index 0bfe84cf52..d580ca30bd 100644 --- a/org.idempiere.ui.zk.selenium/src/test/SelectTabTest.java +++ b/org.idempiere.ui.zk.selenium/src/test/SelectTabTest.java @@ -26,7 +26,7 @@ public class SelectTabTest extends AbstractTestCase { selectTab("$Product_1 $detailPane @tabbox", "Business Partner"); assertEquals("Business Partner", selectedTab("$Product_1 $detailPane @tabbox")); - WebElement element = driver.findElement(Zk.jq("$Product_1 $Product @textbox[columnName=\"Name\"]")); + WebElement element = driver.findElement(Zk.jq("$Product_1 $Product @textbox[instanceName=\"M_Product0Name\"]")); assertNotNull(element); } } From 67a1f0588a5510faa16c3db6618c2f625e1df50e Mon Sep 17 00:00:00 2001 From: Deepak Pansheriya Date: Mon, 17 Dec 2012 15:48:00 +0530 Subject: [PATCH 03/21] IDEMPIERE-460 Making changes as per peer review --- ...201212131727_WS005_IdempiereWebservice.sql | 10 ++ ...201212131727_WS005_IdempiereWebservice.sql | 9 ++ org.idempiere.webservices/.classpath | 3 +- .../META-INF/MANIFEST.MF | 6 +- .../META-INF/cxf/services.xml | 4 +- .../src/com/bizidium/ws/CompositeService.java | 4 +- .../com/bizidium/ws/CompositeServiceImpl.java | 16 +- .../ADInterface/ADDataStatusListener.java | 2 +- .../idempiere}/ADInterface/ADInfo.java | 2 +- .../idempiere}/ADInterface/ADLookup.java | 4 +- .../ADInterface/CompiereService.java | 2 +- .../idempiere}/ADInterface/CompiereUtil.java | 2 +- .../idempiere}/ADInterface/InfoBPartner.java | 2 +- .../idempiere}/ADInterface/InfoProduct.java | 2 +- .../idempiere}/ADInterface/Info_Column.java | 2 +- .../ADInterface/ModelADService.java | 4 +- .../ADInterface/ModelADServiceImpl.java | 26 ++-- .../idempiere}/ADInterface/Process.java | 2 +- .../ADInterface/ReportEngineEx.java | 2 +- .../idempiere}/ADInterface/WWindowStatus.java | 2 +- .../webservices/AbstractService.java | 8 +- .../org/idempiere/webservices/Activator.java | 0 .../idempiere/webservices/IWSValidator.java | 18 +-- .../webservices/WebServiceActivator.java | 28 ---- .../WEB-INF/xsd/idempiere-schema.xsd | 141 +----------------- org.idempiere.webservices/build.properties | 2 +- 26 files changed, 78 insertions(+), 225 deletions(-) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/ADDataStatusListener.java (95%) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/ADInfo.java (87%) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/ADLookup.java (95%) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/CompiereService.java (96%) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/CompiereUtil.java (92%) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/InfoBPartner.java (96%) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/InfoProduct.java (96%) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/Info_Column.java (95%) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/ModelADService.java (95%) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/ModelADServiceImpl.java (95%) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/Process.java (96%) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/ReportEngineEx.java (96%) rename org.idempiere.webservices/WEB-INF/src/{com/_3e => org/idempiere}/ADInterface/WWindowStatus.java (95%) rename org.idempiere.webservices/{ => WEB-INF}/src/org/idempiere/webservices/Activator.java (100%) delete mode 100644 org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/WebServiceActivator.java diff --git a/migration/i1.0a-release/oracle/201212131727_WS005_IdempiereWebservice.sql b/migration/i1.0a-release/oracle/201212131727_WS005_IdempiereWebservice.sql index d5934ac91e..0e2a36cf46 100644 --- a/migration/i1.0a-release/oracle/201212131727_WS005_IdempiereWebservice.sql +++ b/migration/i1.0a-release/oracle/201212131727_WS005_IdempiereWebservice.sql @@ -251,6 +251,16 @@ INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Clien ALTER TABLE WS_WebServiceTypeAccess ADD WS_WebServiceTypeAccess_UU NVARCHAR2(36) DEFAULT NULL ; +-- Dec 17, 2012 12:03:20 PM IST +-- IDEMPIERE-460 Adding support for composite service +INSERT INTO AD_Column (IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,AD_Column_UU,IsUpdateable,ColumnName,Name,CreatedBy,Updated,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsAlwaysUpdateable) VALUES ('N',0,53163,205535,'D','N','N','N','N',36,'N',10,'N',1000001,'4a981564-a0d8-494e-b5a2-ae60bbb54404','Y','WS_WebServiceMethod_UU','WS_WebServiceMethod_UU',100,TO_DATE('2012-12-17 12:03:18','YYYY-MM-DD HH24:MI:SS'),0,'Y',TO_DATE('2012-12-17 12:03:18','YYYY-MM-DD HH24:MI:SS'),100,0,'N') +; + +-- Dec 17, 2012 12:03:20 PM IST +-- IDEMPIERE-460 Adding support for composite service +INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=205535 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID) +; + diff --git a/migration/i1.0a-release/postgresql/201212131727_WS005_IdempiereWebservice.sql b/migration/i1.0a-release/postgresql/201212131727_WS005_IdempiereWebservice.sql index 69c8327862..c187aa28d5 100644 --- a/migration/i1.0a-release/postgresql/201212131727_WS005_IdempiereWebservice.sql +++ b/migration/i1.0a-release/postgresql/201212131727_WS005_IdempiereWebservice.sql @@ -251,6 +251,15 @@ INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Clien ALTER TABLE WS_WebServiceTypeAccess ADD COLUMN WS_WebServiceTypeAccess_UU VARCHAR(36) DEFAULT NULL ; +-- Dec 17, 2012 12:03:20 PM IST +-- IDEMPIERE-460 Adding support for composite service +INSERT INTO AD_Column (IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,AD_Column_UU,IsUpdateable,ColumnName,Name,CreatedBy,Updated,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsAlwaysUpdateable) VALUES ('N',0,53163,205535,'D','N','N','N','N',36,'N',10,'N',1000001,'4a981564-a0d8-494e-b5a2-ae60bbb54404','Y','WS_WebServiceMethod_UU','WS_WebServiceMethod_UU',100,TO_TIMESTAMP('2012-12-17 12:03:18','YYYY-MM-DD HH24:MI:SS'),0,'Y',TO_TIMESTAMP('2012-12-17 12:03:18','YYYY-MM-DD HH24:MI:SS'),100,0,'N') +; + +-- Dec 17, 2012 12:03:20 PM IST +-- IDEMPIERE-460 Adding support for composite service +INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=205535 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID) +; diff --git a/org.idempiere.webservices/.classpath b/org.idempiere.webservices/.classpath index 2aea2704d7..6f33b3cfd4 100644 --- a/org.idempiere.webservices/.classpath +++ b/org.idempiere.webservices/.classpath @@ -1,6 +1,6 @@ - + @@ -20,7 +20,6 @@ - diff --git a/org.idempiere.webservices/META-INF/MANIFEST.MF b/org.idempiere.webservices/META-INF/MANIFEST.MF index 77666081bf..18e31ba641 100644 --- a/org.idempiere.webservices/META-INF/MANIFEST.MF +++ b/org.idempiere.webservices/META-INF/MANIFEST.MF @@ -31,11 +31,11 @@ Bundle-ClassPath: ., WEB-INF/lib/xmlbeans-2.5.0.jar, WEB-INF/lib/aopalliance-1.0.jar, WEB-INF/lib/commons-logging-1.1.1.jar, - WEB-INF/lib/Idempiere-XMLSBean-1.0.jar -Export-Package: com._3e.ADInterface, - org.compiere.model, + WEB-INF/lib/idempiere-xmlbeans-1.0.jar +Export-Package: org.compiere.model, org.idempiere.adInterface.x10, org.idempiere.adInterface.x10.impl, + org.idempiere.adinterface, org.idempiere.webservices, org.idempiere.webservices.fault Web-ContextPath: ADInterface diff --git a/org.idempiere.webservices/META-INF/cxf/services.xml b/org.idempiere.webservices/META-INF/cxf/services.xml index 745bf5475e..da7b9f577d 100644 --- a/org.idempiere.webservices/META-INF/cxf/services.xml +++ b/org.idempiere.webservices/META-INF/cxf/services.xml @@ -6,7 +6,7 @@ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"--> - + @@ -20,4 +20,4 @@ - + diff --git a/org.idempiere.webservices/WEB-INF/src/com/bizidium/ws/CompositeService.java b/org.idempiere.webservices/WEB-INF/src/com/bizidium/ws/CompositeService.java index 29ade1552c..667dcfae57 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/bizidium/ws/CompositeService.java +++ b/org.idempiere.webservices/WEB-INF/src/com/bizidium/ws/CompositeService.java @@ -6,12 +6,12 @@ import javax.jws.soap.SOAPBinding.ParameterStyle; import javax.jws.soap.SOAPBinding.Style; import javax.jws.soap.SOAPBinding.Use; -import org.idempiere.adInterface.x10.CompositeModelRequestDocument; +import org.idempiere.adInterface.x10.CompositeRequestDocument; import org.idempiere.adInterface.x10.CompositeResponsesDocument; @WebService(targetNamespace="http://idempiere.org/ADInterface/1_0") @SOAPBinding(style=Style.RPC,use=Use.LITERAL,parameterStyle=ParameterStyle.WRAPPED) public interface CompositeService { - public CompositeResponsesDocument compositeCRUD(CompositeModelRequestDocument reqs); + public CompositeResponsesDocument compositeOperation(CompositeRequestDocument reqs); } diff --git a/org.idempiere.webservices/WEB-INF/src/com/bizidium/ws/CompositeServiceImpl.java b/org.idempiere.webservices/WEB-INF/src/com/bizidium/ws/CompositeServiceImpl.java index 55ee817f48..5553086823 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/bizidium/ws/CompositeServiceImpl.java +++ b/org.idempiere.webservices/WEB-INF/src/com/bizidium/ws/CompositeServiceImpl.java @@ -21,8 +21,8 @@ import javax.jws.WebService; import org.compiere.util.CLogger; import org.compiere.util.Trx; import org.idempiere.adInterface.x10.ADLoginRequest; -import org.idempiere.adInterface.x10.CompositeModelRequest; -import org.idempiere.adInterface.x10.CompositeModelRequestDocument; +import org.idempiere.adInterface.x10.CompositeRequest; +import org.idempiere.adInterface.x10.CompositeRequestDocument; import org.idempiere.adInterface.x10.CompositeResponse; import org.idempiere.adInterface.x10.CompositeResponses; import org.idempiere.adInterface.x10.CompositeResponsesDocument; @@ -41,10 +41,10 @@ import org.idempiere.adInterface.x10.RunProcessResponseDocument; import org.idempiere.adInterface.x10.StandardResponse; import org.idempiere.adInterface.x10.StandardResponseDocument; import org.idempiere.adInterface.x10.WindowTabDataDocument; +import org.idempiere.adinterface.CompiereService; +import org.idempiere.adinterface.ModelADServiceImpl; import org.idempiere.webservices.AbstractService; -import com._3e.ADInterface.CompiereService; -import com._3e.ADInterface.ModelADServiceImpl; /** * Composite service interface for combining request and transaction management @@ -52,11 +52,11 @@ import com._3e.ADInterface.ModelADServiceImpl; * @author Deepak Pansheriya * */ -@WebService(endpointInterface = "com.bizidium.ws.CompositeService", serviceName = "compositeInterface") +@WebService(endpointInterface = "com.bizidium.ws.CompositeService", serviceName = "compositeInterface" ,targetNamespace="http://idempiere.org/ADInterface/1_0") public class CompositeServiceImpl extends AbstractService implements CompositeService { private static CLogger log = CLogger.getCLogger(CompositeServiceImpl.class); - private static String webServiceName = new String("biziInterface"); + private static String webServiceName = new String("CompositeInterface"); public CompositeServiceImpl() { @@ -64,14 +64,14 @@ public class CompositeServiceImpl extends AbstractService implements CompositeSe } - public CompositeResponsesDocument compositeCRUD(CompositeModelRequestDocument reqs) { + public CompositeResponsesDocument compositeOperation(CompositeRequestDocument reqs) { CompiereService m_cs = getCompiereService(); CompositeResponsesDocument ret = CompositeResponsesDocument.Factory.newInstance(); CompositeResponses resps = ret.addNewCompositeResponses(); - CompositeModelRequest req = reqs.getCompositeModelRequest(); + CompositeRequest req = reqs.getCompositeRequest(); String serviceType = req.getServiceType(); ADLoginRequest reqlogin = req.getADLoginRequest(); diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ADDataStatusListener.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADDataStatusListener.java similarity index 95% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ADDataStatusListener.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADDataStatusListener.java index f9520f7b0c..104f7f0549 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ADDataStatusListener.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADDataStatusListener.java @@ -1,4 +1,4 @@ -package com._3e.ADInterface; +package org.idempiere.adinterface; import java.util.Properties; diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ADInfo.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADInfo.java similarity index 87% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ADInfo.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADInfo.java index 37c4ec6944..e5074ee477 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ADInfo.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADInfo.java @@ -1,4 +1,4 @@ -package com._3e.ADInterface; +package org.idempiere.adinterface; import java.sql.PreparedStatement; import java.sql.SQLException; diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ADLookup.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADLookup.java similarity index 95% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ADLookup.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADLookup.java index b648478349..18bc42bd7b 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ADLookup.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADLookup.java @@ -1,4 +1,4 @@ -package com._3e.ADInterface; +package org.idempiere.adinterface; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -77,7 +77,7 @@ public class ADLookup { return whereClause; } - private DataSet getResult( com._3e.ADInterface.ADInfo info, DataSet ds, int count, String mode ) { + private DataSet getResult( org.idempiere.adinterface.ADInfo info, DataSet ds, int count, String mode ) { if ("count".equals(mode) && count > 1) { DataRow dr = ds.addNewDataRow(); DataField df = dr.addNewField(); diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/CompiereService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/CompiereService.java similarity index 96% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/CompiereService.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/CompiereService.java index 7a64257895..dc2b6bc6f1 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/CompiereService.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/CompiereService.java @@ -1,4 +1,4 @@ -package com._3e.ADInterface; +package org.idempiere.adinterface; import java.sql.PreparedStatement; import java.sql.ResultSet; diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/CompiereUtil.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/CompiereUtil.java similarity index 92% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/CompiereUtil.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/CompiereUtil.java index 232b8b42b6..dad7c4dd04 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/CompiereUtil.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/CompiereUtil.java @@ -1,4 +1,4 @@ -package com._3e.ADInterface; +package org.idempiere.adinterface; import java.util.Properties; diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/InfoBPartner.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/InfoBPartner.java similarity index 96% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/InfoBPartner.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/InfoBPartner.java index bf9c5f00bd..6aef6f1360 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/InfoBPartner.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/InfoBPartner.java @@ -1,4 +1,4 @@ -package com._3e.ADInterface; +package org.idempiere.adinterface; import java.sql.PreparedStatement; import java.sql.SQLException; diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/InfoProduct.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/InfoProduct.java similarity index 96% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/InfoProduct.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/InfoProduct.java index 69ac22ff7b..0d9cac450b 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/InfoProduct.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/InfoProduct.java @@ -1,4 +1,4 @@ -package com._3e.ADInterface; +package org.idempiere.adinterface; import java.math.BigDecimal; import java.sql.PreparedStatement; diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/Info_Column.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/Info_Column.java similarity index 95% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/Info_Column.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/Info_Column.java index b2582c406d..3d79ace50f 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/Info_Column.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/Info_Column.java @@ -11,7 +11,7 @@ * All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved. * Contributor(s): ______________________________________. *****************************************************************************/ -package com._3e.ADInterface; +package org.idempiere.adinterface; /** * Info Column Details diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ModelADService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ModelADService.java similarity index 95% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ModelADService.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ModelADService.java index 2098759695..c11b4d6e80 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ModelADService.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ModelADService.java @@ -27,7 +27,7 @@ * - GlobalQSS (http://www.globalqss.com) * ***********************************************************************/ -package com._3e.ADInterface; +package org.idempiere.adinterface; import javax.jws.WebService; @@ -44,7 +44,7 @@ import org.idempiere.adInterface.x10.RunProcessResponseDocument; import org.idempiere.adInterface.x10.StandardResponseDocument; import org.idempiere.adInterface.x10.WindowTabDataDocument; -@WebService(targetNamespace="http://3e.pl/ADInterface") +@WebService(targetNamespace="http://idempiere.org/ADInterface/1_0") @SOAPBinding(style=Style.RPC,use=Use.LITERAL,parameterStyle=ParameterStyle.WRAPPED) public interface ModelADService { diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ModelADServiceImpl.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ModelADServiceImpl.java similarity index 95% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ModelADServiceImpl.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ModelADServiceImpl.java index 192d2b7bf4..64b3128d26 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ModelADServiceImpl.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ModelADServiceImpl.java @@ -27,7 +27,7 @@ * - GlobalQSS (http://www.globalqss.com) * ***********************************************************************/ -package com._3e.ADInterface; +package org.idempiere.adinterface; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -110,7 +110,7 @@ import org.idempiere.webservices.fault.IdempiereServiceFault; * @author kolec * */ -@WebService(endpointInterface="com._3e.ADInterface.ModelADService", serviceName="ModelADService",targetNamespace="http://3e.pl/ADInterface") +@WebService(endpointInterface="org.idempiere.adinterface.ModelADService", serviceName="ModelADService",targetNamespace="http://idempiere.org/ADInterface/1_0") public class ModelADServiceImpl extends AbstractService implements ModelADService { private static CLogger log = CLogger.getCLogger(ModelADServiceImpl.class); @@ -241,7 +241,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic requestCtx.put("DocAction", docAction); // Fire Event - StandardResponseDocument retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIME_BEFORE_PARSE, po, null, trx, requestCtx, + StandardResponseDocument retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_PARSE, po, null, trx, requestCtx, resp, ret); if (retResp != null) return retResp; @@ -256,7 +256,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic } // Fire Event - retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIME_BEFORE_SAVE, po, null, trx, requestCtx, resp, ret); + retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_SAVE, po, null, trx, requestCtx, resp, ret); if (retResp != null) return retResp; @@ -266,7 +266,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic "Cannot save after set docAction: " + CLogger.retrieveErrorString("no log message")); // Fire Event - retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIME_AFTER_SAVE, po, null, trx, requestCtx, resp, ret); + retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_SAVE, po, null, trx, requestCtx, resp, ret); if (retResp != null) return retResp; @@ -713,7 +713,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic Map requestCtx = getRequestCtx(); DataField[] fields = dr.getFieldArray(); - StandardResponseDocument retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIME_BEFORE_PARSE, po, fields,trx,requestCtx, resp, ret); + StandardResponseDocument retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_PARSE, po, fields,trx,requestCtx, resp, ret); if (retResp != null) return retResp; @@ -721,19 +721,19 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic if(retResp!=null) return retResp; - retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIME_AFTER_PARSE, po, fields,trx,requestCtx, resp, ret); + retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_PARSE, po, fields,trx,requestCtx, resp, ret); if (retResp != null) return retResp; - retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIME_BEFORE_SAVE, po, fields,trx,requestCtx, resp, ret); + retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_SAVE, po, fields,trx,requestCtx, resp, ret); if (retResp != null) return retResp; if (!po.save()) return rollbackAndSetError(trx, resp, ret, true, "Cannot save record in " + tableName + ": " + CLogger.retrieveErrorString("no log message")); - retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIME_AFTER_SAVE, po, fields,trx,requestCtx, resp, ret); + retResp =invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_SAVE, po, fields,trx,requestCtx, resp, ret); if (retResp != null) return retResp; @@ -808,7 +808,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic MWebServiceType m_webservicetype = getWebServiceType(); Map requestCtx = getRequestCtx(); - StandardResponseDocument retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIME_BEFORE_PARSE, holderPo, fields, trx, + StandardResponseDocument retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_PARSE, holderPo, fields, trx, requestCtx, resp, ret); if (retResp != null) return retResp; @@ -817,7 +817,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic if (retResp != null) return retResp; - retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIME_AFTER_PARSE, holderPo, fields, trx, requestCtx, resp, ret); + retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_PARSE, holderPo, fields, trx, requestCtx, resp, ret); if (retResp != null) return retResp; @@ -917,7 +917,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic } } - retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIME_BEFORE_SAVE, holderPo, fields, trx, requestCtx, resp, ret); + retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_SAVE, holderPo, fields, trx, requestCtx, resp, ret); if (retResp != null) return retResp; @@ -925,7 +925,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic return rollbackAndSetError(trx, resp, ret, true, "Cannot save record in " + tableName + ": " + CLogger.retrieveErrorString("no log message")); - retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIME_AFTER_SAVE, holderPo, fields, trx, requestCtx, resp, ret); + retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_AFTER_SAVE, holderPo, fields, trx, requestCtx, resp, ret); if (retResp != null) return retResp; diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/Process.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/Process.java similarity index 96% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/Process.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/Process.java index 071d689b59..80673cb8c9 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/Process.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/Process.java @@ -1,4 +1,4 @@ -package com._3e.ADInterface; +package org.idempiere.adinterface; import java.io.ByteArrayOutputStream; import java.io.CharArrayWriter; diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ReportEngineEx.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ReportEngineEx.java similarity index 96% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ReportEngineEx.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ReportEngineEx.java index 047deaecfa..5fc397c8c1 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/ReportEngineEx.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ReportEngineEx.java @@ -1,4 +1,4 @@ -package com._3e.ADInterface; +package org.idempiere.adinterface; import java.io.BufferedWriter; import java.io.File; diff --git a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/WWindowStatus.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/WWindowStatus.java similarity index 95% rename from org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/WWindowStatus.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/WWindowStatus.java index e1958d84e5..2d9043f4cf 100644 --- a/org.idempiere.webservices/WEB-INF/src/com/_3e/ADInterface/WWindowStatus.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/WWindowStatus.java @@ -1,4 +1,4 @@ -package com._3e.ADInterface; +package org.idempiere.adinterface; import java.util.HashMap; import java.util.Map; diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java index 7223b187e2..2018b30ae9 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java @@ -53,8 +53,8 @@ import org.idempiere.adInterface.x10.OutputField; import org.idempiere.adInterface.x10.OutputFields; import org.idempiere.adInterface.x10.StandardResponse; import org.idempiere.adInterface.x10.StandardResponseDocument; +import org.idempiere.adinterface.CompiereService; -import com._3e.ADInterface.CompiereService; /** @@ -84,7 +84,7 @@ public class AbstractService { && m_cs.getM_AD_Warehouse_ID() == loginRequest.getWarehouseID() && loginRequest.getUser().equals(m_cs.getUser())) return authenticate(webService, method, serviceType, m_cs); // already logged with same data - String ret =invokeLoginValidator(loginRequest, m_cs.getM_ctx(), null, IWSValidator.TIME_BEFORE_LOGIN); + String ret =invokeLoginValidator(loginRequest, m_cs.getM_ctx(), null, IWSValidator.TIMING_BEFORE_LOGIN); if(ret!=null && ret.length()>0) return ret; @@ -158,7 +158,7 @@ public class AbstractService { return "Error logging in - no roles or user/pwd invalid for user " + loginRequest.getUser(); } - ret =invokeLoginValidator(loginRequest, m_cs.getM_ctx(), null, IWSValidator.TIME_AFTER_LOGIN); + ret =invokeLoginValidator(loginRequest, m_cs.getM_ctx(), null, IWSValidator.TIMING_AFTER_LOGIN); if(ret!=null && ret.length()>0) return ret; @@ -213,7 +213,7 @@ public class AbstractService { req.setAttribute("MWebServiceType", m_webservicetype); - String ret=invokeLoginValidator(null, m_cs.getM_ctx(), m_webservicetype, IWSValidator.TIME_ON_AUTHENTICATION); + String ret=invokeLoginValidator(null, m_cs.getM_ctx(), m_webservicetype, IWSValidator.TIMING_ON_AUTHORIZATION); if(ret!=null && ret.length()>0) return ret; diff --git a/org.idempiere.webservices/src/org/idempiere/webservices/Activator.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/Activator.java similarity index 100% rename from org.idempiere.webservices/src/org/idempiere/webservices/Activator.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/Activator.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/IWSValidator.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/IWSValidator.java index fb48ffae60..630fff3aaf 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/IWSValidator.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/IWSValidator.java @@ -11,17 +11,17 @@ import org.idempiere.adInterface.x10.ADLoginRequest; import org.idempiere.adInterface.x10.DataField; public interface IWSValidator { - public static final int TIME_BEFORE_PARSE=1; - public static final int TIME_AFTER_PARSE=2; - public static final int TIME_BEFORE_SAVE=3; - public static final int TIME_AFTER_SAVE=4; + public static final int TIMING_BEFORE_PARSE=1; + public static final int TIMING_AFTER_PARSE=2; + public static final int TIMING_BEFORE_SAVE=3; + public static final int TIMING_AFTER_SAVE=4; - public static final int TIME_BEFORE_LOGIN=5; - public static final int TIME_AFTER_LOGIN=6; - public static final int TIME_ON_AUTHENTICATION=7; + public static final int TIMING_BEFORE_LOGIN=5; + public static final int TIMING_AFTER_LOGIN=6; + public static final int TIMING_ON_AUTHORIZATION=7; - public static final int TIME_BEFORE_PROCESS=8; - public static final int TIME_AFTER_PROCESS=9; + public static final int TIMING_BEFORE_PROCESS=8; + public static final int TIMING_AFTER_PROCESS=9; public void validate(PO po,MWebServiceType m_webserviceType,DataField[] fields,int time,String trxName,Map requestCtx) throws IdempiereServiceFault; public void login(ADLoginRequest loginRequest,Properties ctx,MWebServiceType m_webserviceType,int time) throws IdempiereServiceFault; diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/WebServiceActivator.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/WebServiceActivator.java deleted file mode 100644 index d9c948cd4e..0000000000 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/WebServiceActivator.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.idempiere.webservices; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; - -public class WebServiceActivator implements BundleActivator{ - private static BundleContext bundleContext = null; - - /* (non-Javadoc) - * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) - */ - @Override - public void start(BundleContext context) throws Exception { - bundleContext = context; - } - - /* (non-Javadoc) - * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) - */ - @Override - public void stop(BundleContext context) throws Exception { - bundleContext = null; - } - - public static BundleContext getBundleContext() { - return bundleContext; - } -} diff --git a/org.idempiere.webservices/WEB-INF/xsd/idempiere-schema.xsd b/org.idempiere.webservices/WEB-INF/xsd/idempiere-schema.xsd index e199e2969a..5b0e478a0d 100644 --- a/org.idempiere.webservices/WEB-INF/xsd/idempiere-schema.xsd +++ b/org.idempiere.webservices/WEB-INF/xsd/idempiere-schema.xsd @@ -4,143 +4,6 @@ xmlns:tns="http://idempiere.org/ADInterface/1_0" elementFormDefault="qualified"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -530,8 +393,8 @@ - - + + diff --git a/org.idempiere.webservices/build.properties b/org.idempiere.webservices/build.properties index 9fd1f75988..5ff3a31763 100644 --- a/org.idempiere.webservices/build.properties +++ b/org.idempiere.webservices/build.properties @@ -23,7 +23,7 @@ bin.includes = META-INF/,\ WEB-INF/lib/commons-logging-1.1.1.jar,\ WEB-INF/lib/spring-aop-3.0.7.RELEASE.jar,\ WEB-INF/lib/spring-osgi-extender-1.2.1.jar,\ - WEB-INF/lib/Idempiere-XMLSBean-1.0.jar + WEB-INF/lib/idempiere-xmlbeans-1.0.jar src.includes = WEB-INF/classes/,\ WEB-INF/lib/,\ WEB-INF/web.xml,\ From 971cc102b4cfbd821f08fa20d1253af3a239b552 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Mon, 17 Dec 2012 21:26:19 +0800 Subject: [PATCH 04/21] minor: should export org.adempiere.webui.factory --- org.adempiere.ui.zk/META-INF/MANIFEST.MF | 1 + 1 file changed, 1 insertion(+) diff --git a/org.adempiere.ui.zk/META-INF/MANIFEST.MF b/org.adempiere.ui.zk/META-INF/MANIFEST.MF index f76cd10ca7..52e8080613 100644 --- a/org.adempiere.ui.zk/META-INF/MANIFEST.MF +++ b/org.adempiere.ui.zk/META-INF/MANIFEST.MF @@ -39,6 +39,7 @@ Export-Package: metainfo.zk, org.adempiere.webui.editor, org.adempiere.webui.event, org.adempiere.webui.exception, + org.adempiere.webui.factory, org.adempiere.webui.grid, org.adempiere.webui.install, org.adempiere.webui.panel, From 92c334886a853c360a8c39bf0f7e6adfffd47f21 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Mon, 17 Dec 2012 21:26:50 +0800 Subject: [PATCH 05/21] minor: should take gridtab from gridfield as default instead of null. --- .../src/org/adempiere/webui/editor/WebEditorFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WebEditorFactory.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WebEditorFactory.java index 2df940e220..b588dd9430 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WebEditorFactory.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WebEditorFactory.java @@ -47,7 +47,7 @@ public class WebEditorFactory public static WEditor getEditor(GridField gridField, boolean tableEditor) { - return getEditor(null, gridField, tableEditor); + return getEditor(gridField.getGridTab(), gridField, tableEditor); } public static WEditor getEditor(GridTab gridTab, GridField gridField, boolean tableEditor) From 2ea09aad3a2954c61c7b1a979a30846bc5085bb4 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Mon, 17 Dec 2012 22:37:19 +0800 Subject: [PATCH 06/21] IDEMPIERE-532 Zk: Grid view should use editor for rendering of column text instead of using hard-coded formatting. --- .../webui/adwindow/GridTabRowRenderer.java | 86 +++++-------------- .../org/adempiere/webui/editor/WEditor.java | 5 ++ .../adempiere/webui/editor/WImageEditor.java | 10 +++ 3 files changed, 36 insertions(+), 65 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridTabRowRenderer.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridTabRowRenderer.java index 8b10a0c64a..a75d7b104a 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridTabRowRenderer.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/GridTabRowRenderer.java @@ -12,17 +12,13 @@ *****************************************************************************/ package org.adempiere.webui.adwindow; -import java.sql.Timestamp; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.adempiere.util.GridRowCtx; -import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.component.Checkbox; import org.adempiere.webui.component.EditorBox; import org.adempiere.webui.component.NumberBox; @@ -40,7 +36,6 @@ import org.compiere.model.GridTab; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Msg; -import org.compiere.util.NamePair; import org.compiere.util.Util; import org.zkoss.zk.au.out.AuFocus; import org.zkoss.zk.ui.Component; @@ -76,9 +71,9 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt private int windowNo; private GridTabDataBinder dataBinder; private Map editors = new LinkedHashMap(); + private Map readOnlyEditors = new LinkedHashMap(); private Paging paging; - private Map> lookupCache = null; private RowListener rowListener; private Grid grid = null; @@ -157,68 +152,27 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt return checkBox; } - private String getDisplayText(Object value, GridField gridField) + private String getDisplayText(Object value, GridField gridField, int rowIndex) { if (value == null) return ""; + if (rowIndex >= 0) { + GridRowCtx gridRowCtx = new GridRowCtx(Env.getCtx(), gridTab, rowIndex); + if (!gridField.isDisplayed(gridRowCtx, true)) { + return ""; + } + } + if (gridField.isEncryptedField()) { return "********"; + } + else if (readOnlyEditors.get(gridField) != null) + { + WEditor editor = readOnlyEditors.get(gridField); + return editor.getDisplayTextForGridView(value); } - else if (gridField.isLookup()) - { - if (lookupCache != null) - { - Map cache = lookupCache.get(gridField.getColumnName()); - if (cache != null && cache.size() >0) - { - String text = cache.get(value); - if (text != null) - { - return text; - } - } - } - NamePair namepair = gridField.getLookup().get(value); - if (namepair != null) - { - String text = namepair.getName(); - if (lookupCache != null) - { - Map cache = lookupCache.get(gridField.getColumnName()); - if (cache == null) - { - cache = new HashMap(); - lookupCache.put(gridField.getColumnName(), cache); - } - cache.put(value, text); - } - return text; - } - else - return ""; - } - else if (DisplayType.getClass(gridField.getDisplayType(), false).equals(Timestamp.class)) - { - SimpleDateFormat dateFormat = DisplayType.getDateFormat(gridField.getDisplayType(), AEnv.getLanguage(Env.getCtx())); - return dateFormat.format((Timestamp)value); - } - else if (DisplayType.isNumeric(gridField.getDisplayType())) - { - return DisplayType.getNumberFormat(gridField.getDisplayType(), AEnv.getLanguage(Env.getCtx())).format(value); - } - else if (DisplayType.Button == gridField.getDisplayType()) - { - return ""; - } - else if (DisplayType.Image == gridField.getDisplayType()) - { - if (value == null || (Integer)value <= 0) - return ""; - else - return "..."; - } else return value.toString(); } @@ -236,7 +190,7 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt editor.addActionListener(buttonListener); component = editor.getComponent(); } else { - String text = getDisplayText(value, gridField); + String text = getDisplayText(value, gridField, rowIndex); Label label = new Label(); setLabelText(text, label); @@ -310,7 +264,7 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt if (component instanceof Label) { Label label = (Label)component; label.getChildren().clear(); - String text = getDisplayText(entry.getValue().getValue(), entry.getValue().getGridField()); + String text = getDisplayText(entry.getValue().getValue(), entry.getValue().getGridField(), -1); setLabelText(text, label); } else if (component instanceof Checkbox) { Checkbox checkBox = (Checkbox)component; @@ -425,6 +379,11 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt if (editor instanceof WButtonEditor) { ((WButtonEditor)editor).addActionListener(buttonListener); } + + //readonly for display text + WEditor readOnlyEditor = WebEditorFactory.getEditor(gridPanelFields[i], true); + readOnlyEditor.setReadWrite(false); + readOnlyEditors.put(gridPanelFields[i], readOnlyEditor); } if (!gridPanelFields[i].isDisplayedGrid() || gridPanelFields[i].isToolbarButton()) { @@ -583,21 +542,18 @@ public class GridTabRowRenderer implements RowRenderer, RowRendererExt * @see RendererCtrl#doCatch(Throwable) */ public void doCatch(Throwable ex) throws Throwable { - lookupCache = null; } /** * @see RendererCtrl#doFinally() */ public void doFinally() { - lookupCache = null; } /** * @see RendererCtrl#doTry() */ public void doTry() { - lookupCache = new HashMap>(); } /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java index c14e5d38fb..ef971e3e13 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java @@ -438,6 +438,11 @@ public abstract class WEditor implements EventListener, PropertyChangeLis * @return display text */ abstract public String getDisplay(); + + public String getDisplayTextForGridView(Object value) { + this.setValue(value); + return getDisplay(); + } /** * diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WImageEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WImageEditor.java index 4dd241d281..7692eb6507 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WImageEditor.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WImageEditor.java @@ -145,7 +145,17 @@ public class WImageEditor extends WEditor getComponent().setContent(img); } + @Override + public String getDisplayTextForGridView(Object value) { + if (value == null) { + return ""; + } else { + return "..."; + } + } + + @Override public String[] getEvents() { return LISTENER_EVENTS; From 74ad6793cb1e5ddff6c43844db2b55bcf5d87336 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Mon, 17 Dec 2012 22:45:58 +0800 Subject: [PATCH 07/21] IDEMPIERE-460 Wrong case for package name. --- .../{ADInterface => adinterface}/ADDataStatusListener.java | 0 .../src/org/idempiere/{ADInterface => adinterface}/ADInfo.java | 0 .../src/org/idempiere/{ADInterface => adinterface}/ADLookup.java | 0 .../idempiere/{ADInterface => adinterface}/CompiereService.java | 0 .../org/idempiere/{ADInterface => adinterface}/CompiereUtil.java | 0 .../org/idempiere/{ADInterface => adinterface}/InfoBPartner.java | 0 .../org/idempiere/{ADInterface => adinterface}/InfoProduct.java | 0 .../org/idempiere/{ADInterface => adinterface}/Info_Column.java | 0 .../idempiere/{ADInterface => adinterface}/ModelADService.java | 0 .../{ADInterface => adinterface}/ModelADServiceImpl.java | 0 .../src/org/idempiere/{ADInterface => adinterface}/Process.java | 0 .../idempiere/{ADInterface => adinterface}/ReportEngineEx.java | 0 .../org/idempiere/{ADInterface => adinterface}/WWindowStatus.java | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/ADDataStatusListener.java (100%) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/ADInfo.java (100%) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/ADLookup.java (100%) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/CompiereService.java (100%) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/CompiereUtil.java (100%) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/InfoBPartner.java (100%) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/InfoProduct.java (100%) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/Info_Column.java (100%) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/ModelADService.java (100%) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/ModelADServiceImpl.java (100%) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/Process.java (100%) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/ReportEngineEx.java (100%) rename org.idempiere.webservices/WEB-INF/src/org/idempiere/{ADInterface => adinterface}/WWindowStatus.java (100%) diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADDataStatusListener.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ADDataStatusListener.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADDataStatusListener.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ADDataStatusListener.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADInfo.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ADInfo.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADInfo.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ADInfo.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADLookup.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ADLookup.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ADLookup.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ADLookup.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/CompiereService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/CompiereService.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/CompiereUtil.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereUtil.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/CompiereUtil.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereUtil.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/InfoBPartner.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/InfoBPartner.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/InfoBPartner.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/InfoBPartner.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/InfoProduct.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/InfoProduct.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/InfoProduct.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/InfoProduct.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/Info_Column.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Info_Column.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/Info_Column.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Info_Column.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ModelADService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADService.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ModelADService.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADService.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ModelADServiceImpl.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ModelADServiceImpl.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/Process.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/Process.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/Process.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ReportEngineEx.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ReportEngineEx.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/ReportEngineEx.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ReportEngineEx.java diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/WWindowStatus.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/WWindowStatus.java similarity index 100% rename from org.idempiere.webservices/WEB-INF/src/org/idempiere/ADInterface/WWindowStatus.java rename to org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/WWindowStatus.java From 5495a2f2cb8614a473d442ff7515951292b933e9 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Mon, 17 Dec 2012 10:03:30 -0500 Subject: [PATCH 08/21] IDEMPIERE-460 Integrate and migrate 3e services / Peer review migration scripts --- .../oracle/201212131727_WS005_IdempiereWebservice.sql | 10 ---------- .../201212131727_WS005_IdempiereWebservice.sql | 10 ---------- 2 files changed, 20 deletions(-) diff --git a/migration/i1.0a-release/oracle/201212131727_WS005_IdempiereWebservice.sql b/migration/i1.0a-release/oracle/201212131727_WS005_IdempiereWebservice.sql index 0e2a36cf46..d5934ac91e 100644 --- a/migration/i1.0a-release/oracle/201212131727_WS005_IdempiereWebservice.sql +++ b/migration/i1.0a-release/oracle/201212131727_WS005_IdempiereWebservice.sql @@ -251,16 +251,6 @@ INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Clien ALTER TABLE WS_WebServiceTypeAccess ADD WS_WebServiceTypeAccess_UU NVARCHAR2(36) DEFAULT NULL ; --- Dec 17, 2012 12:03:20 PM IST --- IDEMPIERE-460 Adding support for composite service -INSERT INTO AD_Column (IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,AD_Column_UU,IsUpdateable,ColumnName,Name,CreatedBy,Updated,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsAlwaysUpdateable) VALUES ('N',0,53163,205535,'D','N','N','N','N',36,'N',10,'N',1000001,'4a981564-a0d8-494e-b5a2-ae60bbb54404','Y','WS_WebServiceMethod_UU','WS_WebServiceMethod_UU',100,TO_DATE('2012-12-17 12:03:18','YYYY-MM-DD HH24:MI:SS'),0,'Y',TO_DATE('2012-12-17 12:03:18','YYYY-MM-DD HH24:MI:SS'),100,0,'N') -; - --- Dec 17, 2012 12:03:20 PM IST --- IDEMPIERE-460 Adding support for composite service -INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=205535 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID) -; - diff --git a/migration/i1.0a-release/postgresql/201212131727_WS005_IdempiereWebservice.sql b/migration/i1.0a-release/postgresql/201212131727_WS005_IdempiereWebservice.sql index c187aa28d5..efb461b47b 100644 --- a/migration/i1.0a-release/postgresql/201212131727_WS005_IdempiereWebservice.sql +++ b/migration/i1.0a-release/postgresql/201212131727_WS005_IdempiereWebservice.sql @@ -251,16 +251,6 @@ INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Clien ALTER TABLE WS_WebServiceTypeAccess ADD COLUMN WS_WebServiceTypeAccess_UU VARCHAR(36) DEFAULT NULL ; --- Dec 17, 2012 12:03:20 PM IST --- IDEMPIERE-460 Adding support for composite service -INSERT INTO AD_Column (IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,AD_Column_UU,IsUpdateable,ColumnName,Name,CreatedBy,Updated,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsAlwaysUpdateable) VALUES ('N',0,53163,205535,'D','N','N','N','N',36,'N',10,'N',1000001,'4a981564-a0d8-494e-b5a2-ae60bbb54404','Y','WS_WebServiceMethod_UU','WS_WebServiceMethod_UU',100,TO_TIMESTAMP('2012-12-17 12:03:18','YYYY-MM-DD HH24:MI:SS'),0,'Y',TO_TIMESTAMP('2012-12-17 12:03:18','YYYY-MM-DD HH24:MI:SS'),100,0,'N') -; - --- Dec 17, 2012 12:03:20 PM IST --- IDEMPIERE-460 Adding support for composite service -INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=205535 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID) -; - From 4d9686559044c1f8ff8774c670e8ad9eda5ccec7 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Mon, 17 Dec 2012 14:17:58 -0500 Subject: [PATCH 09/21] IDEMPIERE-92 - Integrate Selenium / fix problem with WAcctViewer 14:15:30.889===========> zkoss.handleError:1352: >>java.lang.IllegalArgumentException: There is no WTableColumn at column 0 >> at org.adempiere.webui.component.WListItemRenderer.getColumn(WListItemRenderer.java:123) --- .../org/adempiere/webui/component/WListItemRenderer.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/WListItemRenderer.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/WListItemRenderer.java index 1cd892fade..658b638b8f 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/WListItemRenderer.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/WListItemRenderer.java @@ -195,9 +195,11 @@ public class WListItemRenderer implements ListitemRenderer, EventListene int rowIndex, int columnIndex) { ListCell listcell = new ListCell(); - WTableColumn column = getColumn(columnIndex); - if (column != null && column.getHeaderValue() != null) { - listcell.setWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME, column.getHeaderValue().toString()); + if (m_tableColumns.size() > columnIndex) { + WTableColumn column = getColumn(columnIndex); + if (column != null && column.getHeaderValue() != null) { + listcell.setWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME, column.getHeaderValue().toString()); + } } boolean isCellEditable = table != null ? table.isCellEditable(rowIndex, columnIndex) : false; From 2e5fb7c33f4623bbdc1369d372517407220a5836 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Mon, 17 Dec 2012 14:42:46 -0500 Subject: [PATCH 10/21] IDEMPIERE-217 Allocate Payment to Charge --- .../org/compiere/apps/form/VAllocation.java | 10 +---- .../webui/apps/form/WAllocation.java | 37 ++++++++++++------- .../org/compiere/apps/form/Allocation.java | 34 +++++++++++------ 3 files changed, 47 insertions(+), 34 deletions(-) diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/form/VAllocation.java b/org.adempiere.ui.swing/src/org/compiere/apps/form/VAllocation.java index d712224ed4..64259f6305 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/form/VAllocation.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/form/VAllocation.java @@ -361,20 +361,14 @@ public class VAllocation extends Allocation // Organization if (name.equals("AD_Org_ID")) { - if (value == null) - m_AD_Org_ID = 0; - else - m_AD_Org_ID = ((Integer) value).intValue(); + m_AD_Org_ID = ((Integer) value).intValue(); loadBPartner(); } // Charge else if (name.equals("C_Charge_ID") ) { - if ( value == null ) - m_C_Charge_ID = 0; - else - m_C_Charge_ID = ((Integer) value).intValue(); + m_C_Charge_ID = ((Integer) value).intValue(); setAllocateButton(); } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WAllocation.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WAllocation.java index c34f8ee0df..5dddbf4193 100755 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WAllocation.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WAllocation.java @@ -16,6 +16,10 @@ *****************************************************************************/ package org.adempiere.webui.apps.form; +import static org.compiere.model.SystemIDs.COLUMN_C_INVOICE_C_BPARTNER_ID; +import static org.compiere.model.SystemIDs.COLUMN_C_INVOICE_C_CURRENCY_ID; +import static org.compiere.model.SystemIDs.COLUMN_C_PERIOD_AD_ORG_ID; + import java.math.BigDecimal; import java.util.Vector; import java.util.logging.Level; @@ -47,18 +51,18 @@ import org.adempiere.webui.window.FDialog; import org.compiere.apps.form.Allocation; import org.compiere.model.MLookup; import org.compiere.model.MLookupFactory; -import static org.compiere.model.SystemIDs.*; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Msg; import org.compiere.util.Trx; +import org.compiere.util.TrxRunnable; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zul.Borderlayout; import org.zkoss.zul.Center; import org.zkoss.zul.North; -import org.zkoss.zul.South; import org.zkoss.zul.Separator; +import org.zkoss.zul.South; import org.zkoss.zul.Space; /** @@ -409,20 +413,14 @@ public class WAllocation extends Allocation // Organization if (name.equals("AD_Org_ID")) { - if (value == null) - m_AD_Org_ID = 0; - else - m_AD_Org_ID = ((Integer) value).intValue(); + m_AD_Org_ID = ((Integer) value).intValue(); loadBPartner(); } // Charge else if (name.equals("C_Charge_ID") ) { - if ( value == null ) - m_C_Charge_ID = 0; - else - m_C_Charge_ID = ((Integer) value).intValue(); + m_C_Charge_ID = ((Integer) value).intValue(); setAllocateButton(); } @@ -535,10 +533,21 @@ public class WAllocation extends Allocation Env.setContext(Env.getCtx(), form.getWindowNo(), "AD_Org_ID", m_AD_Org_ID); else Env.setContext(Env.getCtx(), form.getWindowNo(), "AD_Org_ID", ""); - Trx trx = Trx.get(Trx.createTrxName("AL"), true); - statusBar.setStatusLine(saveData(form.getWindowNo(), dateField.getValue(), paymentTable, invoiceTable, trx.getTrxName())); - trx.commit(); - trx.close(); + try + { + Trx.run(new TrxRunnable() + { + public void run(String trxName) + { + statusBar.setStatusLine(saveData(form.getWindowNo(), dateField.getValue(), paymentTable, invoiceTable, trxName)); + } + }); + } + catch (Exception e) + { + FDialog.error(form.getWindowNo(), form, "Error", e.getLocalizedMessage()); + return; + } } // saveData /** diff --git a/org.adempiere.ui/src/org/compiere/apps/form/Allocation.java b/org.adempiere.ui/src/org/compiere/apps/form/Allocation.java index 8c71261749..665a761f9d 100644 --- a/org.adempiere.ui/src/org/compiere/apps/form/Allocation.java +++ b/org.adempiere.ui/src/org/compiere/apps/form/Allocation.java @@ -138,9 +138,11 @@ public class Allocation sql = new StringBuilder( MRole.getDefault(Env.getCtx(), false).addAccessSQL( sql.toString(), "p", MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO ) ); log.fine("PaySQL=" + sql.toString()); + PreparedStatement pstmt = null; + ResultSet rs = null; try { - PreparedStatement pstmt = DB.prepareStatement(sql.toString(), null); + pstmt = DB.prepareStatement(sql.toString(), null); pstmt.setInt(1, m_C_Currency_ID); pstmt.setTimestamp(2, (Timestamp)date); pstmt.setInt(3, m_C_Currency_ID); @@ -148,7 +150,7 @@ public class Allocation pstmt.setInt(5, m_C_BPartner_ID); if (!isMultiCurrency) pstmt.setInt(6, m_C_Currency_ID); - ResultSet rs = pstmt.executeQuery(); + rs = pstmt.executeQuery(); while (rs.next()) { Vector line = new Vector(); @@ -171,13 +173,15 @@ public class Allocation // data.add(line); } - rs.close(); - pstmt.close(); } catch (SQLException e) { log.log(Level.SEVERE, sql.toString(), e); } + finally + { + DB.close(rs, pstmt); + } return data; } @@ -266,9 +270,11 @@ public class Allocation // role security sql = new StringBuilder( MRole.getDefault(Env.getCtx(), false).addAccessSQL( sql.toString(), "i", MRole.SQL_FULLYQUALIFIED, MRole.SQL_RO ) ); + PreparedStatement pstmt = null; + ResultSet rs = null; try { - PreparedStatement pstmt = DB.prepareStatement(sql.toString(), null); + pstmt = DB.prepareStatement(sql.toString(), null); pstmt.setInt(1, m_C_Currency_ID); pstmt.setTimestamp(2, (Timestamp)date); pstmt.setInt(3, m_C_Currency_ID); @@ -278,7 +284,7 @@ public class Allocation pstmt.setInt(7, m_C_BPartner_ID); if (!isMultiCurrency) pstmt.setInt(8, m_C_Currency_ID); - ResultSet rs = pstmt.executeQuery(); + rs = pstmt.executeQuery(); while (rs.next()) { Vector line = new Vector(); @@ -309,13 +315,15 @@ public class Allocation if (Env.ZERO.compareTo(open) != 0) data.add(line); } - rs.close(); - pstmt.close(); } catch (SQLException e) { log.log(Level.SEVERE, sql.toString(), e); } + finally + { + DB.close(rs, pstmt); + } return data; } @@ -441,6 +449,7 @@ public class Allocation applied = applied.subtract(discount); writeOff = Env.ZERO; // to be sure overUnder = Env.ZERO; + totalDiff = Env.ZERO; if (totalDiff.abs().compareTo(applied.abs()) < 0 // where less is available to allocate than open && totalDiff.signum() == applied.signum() ) // and the available amount has the same sign @@ -737,11 +746,12 @@ public class Allocation // Allocation Line MAllocationLine aLine = new MAllocationLine (alloc, chargeAmt.negate(), Env.ZERO, Env.ZERO, Env.ZERO); - aLine.set_CustomColumn("C_Charge_ID", m_C_Charge_ID); - //aLine.set_CustomColumn("ChargeAmt", chargeAmt); + aLine.setC_Charge_ID(m_C_Charge_ID); aLine.setC_BPartner_ID(m_C_BPartner_ID); - if (!aLine.save(trxName)) - log.log(Level.SEVERE, "Allocation Line not saved - Charge=" + m_C_Charge_ID); + if (!aLine.save(trxName)) { + StringBuilder msg = new StringBuilder("Allocation Line not saved - Charge=").append(m_C_Charge_ID); + throw new AdempiereException(msg.toString()); + } unmatchedApplied = unmatchedApplied.add(chargeAmt); } From 565b5b0dcabb249ac2cc9193a47519961a313e79 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Mon, 17 Dec 2012 17:00:28 -0500 Subject: [PATCH 11/21] IDEMPIERE-530 improve performance to enable attachments and chat buttons (Thanks to Juliana Corredor) --- .../oracle/201212131100_IDEMPIERE-530.sql | 6 + .../postgresql/201212131100_IDEMPIERE-530.sql | 6 + .../src/org/compiere/model/GridTab.java | 130 ++---------------- .../src/org/compiere/model/MAttachment.java | 20 ++- .../src/org/compiere/model/MChat.java | 19 ++- .../src/org/compiere/apps/APanel.java | 7 +- .../src/org/compiere/apps/Attachment.java | 17 ++- .../adwindow/AbstractADWindowContent.java | 8 +- .../adempiere/webui/panel/WAttachment.java | 12 +- 9 files changed, 77 insertions(+), 148 deletions(-) create mode 100644 migration/i1.0a-release/oracle/201212131100_IDEMPIERE-530.sql create mode 100644 migration/i1.0a-release/postgresql/201212131100_IDEMPIERE-530.sql diff --git a/migration/i1.0a-release/oracle/201212131100_IDEMPIERE-530.sql b/migration/i1.0a-release/oracle/201212131100_IDEMPIERE-530.sql new file mode 100644 index 0000000000..9282fcf507 --- /dev/null +++ b/migration/i1.0a-release/oracle/201212131100_IDEMPIERE-530.sql @@ -0,0 +1,6 @@ +CREATE UNIQUE INDEX cm_chat_record ON cm_chat (ad_table_id, record_id); + + +SELECT register_migration_script('201212131100_IDEMPIERE-530.sql') FROM dual +; + diff --git a/migration/i1.0a-release/postgresql/201212131100_IDEMPIERE-530.sql b/migration/i1.0a-release/postgresql/201212131100_IDEMPIERE-530.sql new file mode 100644 index 0000000000..9282fcf507 --- /dev/null +++ b/migration/i1.0a-release/postgresql/201212131100_IDEMPIERE-530.sql @@ -0,0 +1,6 @@ +CREATE UNIQUE INDEX cm_chat_record ON cm_chat (ad_table_id, record_id); + + +SELECT register_migration_script('201212131100_IDEMPIERE-530.sql') FROM dual +; + diff --git a/org.adempiere.base/src/org/compiere/model/GridTab.java b/org.adempiere.base/src/org/compiere/model/GridTab.java index d28f965484..c1a33e2449 100644 --- a/org.adempiere.base/src/org/compiere/model/GridTab.java +++ b/org.adempiere.base/src/org/compiere/model/GridTab.java @@ -28,7 +28,6 @@ import java.sql.SQLException; import java.sql.Timestamp; import java.text.MessageFormat; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Properties; import java.util.StringTokenizer; @@ -111,7 +110,7 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable /** * */ - private static final long serialVersionUID = 336562925897569888L; + private static final long serialVersionUID = -1638364577972806113L; public static final String DEFAULT_STATUS_MESSAGE = "NavigateOrUpdate"; @@ -163,10 +162,6 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable private String m_parentColumnName = ""; private String m_extendedWhere; - /** Attachments */ - private HashMap m_Attachments = null; - /** Chats */ - private HashMap m_Chats = null; /** Locks */ private ArrayList m_Lock = null; @@ -333,12 +328,6 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable // m_depOnField.clear(); m_depOnField = null; - if (m_Attachments != null) - m_Attachments.clear(); - m_Attachments = null; - if (m_Chats != null) - m_Chats.clear(); - m_Chats = null; // if (m_vo.isInitFields()) m_vo.getFields().clear(); @@ -2034,43 +2023,6 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable } // loadDependentInfo - - /************************************************************************** - * Load Attachments for this table - */ - public void loadAttachments() - { - log.fine("#" + m_vo.TabNo); - if (!canHaveAttachment()) - return; - - String SQL = "SELECT AD_Attachment_ID, Record_ID FROM AD_Attachment " - + "WHERE AD_Table_ID=?"; - try - { - if (m_Attachments == null) - m_Attachments = new HashMap(); - else - m_Attachments.clear(); - PreparedStatement pstmt = DB.prepareStatement(SQL, null); - pstmt.setInt(1, m_vo.AD_Table_ID); - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) - { - Integer key = new Integer(rs.getInt(2)); - Integer value = new Integer(rs.getInt(1)); - m_Attachments.put(key, value); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, "loadAttachments", e); - } - log.config("#" + m_Attachments.size()); - } // loadAttachment - /** * Can this tab have Attachments?. *

@@ -2091,13 +2043,7 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable */ public boolean hasAttachment() { - if (m_Attachments == null) - loadAttachments(); - if (m_Attachments == null || m_Attachments.isEmpty()) - return false; - // - Integer key = new Integer(m_mTable.getKeyID (m_currentRow)); - return m_Attachments.containsKey(key); + return getAD_AttachmentID() > 0; } // hasAttachment /** @@ -2106,54 +2052,11 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable */ public int getAD_AttachmentID() { - if (m_Attachments == null) - loadAttachments(); - if (m_Attachments.isEmpty()) - return 0; - // - Integer key = new Integer(m_mTable.getKeyID (m_currentRow)); - Integer value = (Integer)m_Attachments.get(key); - if (value == null) - return 0; - else - return value.intValue(); - } // getAttachmentID - - /************************************************************************** - * Load Chats for this table - */ - public void loadChats() - { - log.fine("#" + m_vo.TabNo); if (!canHaveAttachment()) - return; - - String sql = "SELECT CM_Chat_ID, Record_ID FROM CM_Chat " - + "WHERE AD_Table_ID=?"; - try - { - if (m_Chats == null) - m_Chats = new HashMap(); - else - m_Chats.clear(); - PreparedStatement pstmt = DB.prepareStatement(sql, null); - pstmt.setInt(1, m_vo.AD_Table_ID); - ResultSet rs = pstmt.executeQuery(); - while (rs.next()) - { - Integer key = new Integer(rs.getInt(2)); // Record_ID - Integer value = new Integer(rs.getInt(1)); // CM_Chat_ID - m_Chats.put(key, value); - } - rs.close(); - pstmt.close(); - } - catch (SQLException e) - { - log.log(Level.SEVERE, sql, e); - } - log.config("#" + m_Chats.size()); - } // loadChats + return 0; + int recordID = m_mTable.getKeyID(m_currentRow); + return MAttachment.getID(m_vo.AD_Table_ID, recordID); + } // getAttachmentID /** * Returns true, if current row has a Chat @@ -2161,13 +2064,7 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable */ public boolean hasChat() { - if (m_Chats == null) - loadChats(); - if (m_Chats == null || m_Chats.isEmpty()) - return false; - // - Integer key = new Integer(m_mTable.getKeyID (m_currentRow)); - return m_Chats.containsKey(key); + return getCM_ChatID() > 0; } // hasChat /** @@ -2176,17 +2073,10 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable */ public int getCM_ChatID() { - if (m_Chats == null) - loadChats(); - if (m_Chats.isEmpty()) + if (!canHaveAttachment()) return 0; - // - Integer key = new Integer(m_mTable.getKeyID (m_currentRow)); - Integer value = (Integer)m_Chats.get(key); - if (value == null) - return 0; - else - return value.intValue(); + int recordID = m_mTable.getKeyID(m_currentRow); + return MChat.getID(m_vo.AD_Table_ID, recordID); } // getCM_ChatID diff --git a/org.adempiere.base/src/org/compiere/model/MAttachment.java b/org.adempiere.base/src/org/compiere/model/MAttachment.java index d115d7d47e..ab45213663 100644 --- a/org.adempiere.base/src/org/compiere/model/MAttachment.java +++ b/org.adempiere.base/src/org/compiere/model/MAttachment.java @@ -26,6 +26,7 @@ import java.util.Properties; import java.util.logging.Level; import org.compiere.util.CLogger; +import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.MimeType; @@ -47,7 +48,7 @@ public class MAttachment extends X_AD_Attachment /** * */ - private static final long serialVersionUID = -8013716602070647299L; + private static final long serialVersionUID = -8261865873158774665L; /** * Get Attachment (if there are more than one attachment it gets the first in no specific order) @@ -94,9 +95,7 @@ public class MAttachment extends X_AD_Attachment */ public MAttachment(Properties ctx, int AD_Table_ID, int Record_ID, String trxName) { - this (ctx - , MAttachment.get(ctx, AD_Table_ID, Record_ID) == null ? 0 : MAttachment.get(ctx, AD_Table_ID, Record_ID).get_ID() - , trxName); + this (ctx, MAttachment.getID(AD_Table_ID, Record_ID) > 0 ? MAttachment.getID(AD_Table_ID, Record_ID) : 0, trxName); if (get_ID() == 0) { setAD_Table_ID (AD_Table_ID); setRecord_ID (Record_ID); @@ -598,4 +597,17 @@ public class MAttachment extends X_AD_Attachment return true; } + /** + * IDEMPIERE-530 + * Get the attachment ID based on table_id and record_id + * @param AD_Table_ID + * @param Record_ID + * @return AD_Attachment_ID + */ + public static int getID(int Table_ID, int Record_ID) { + String sql="SELECT AD_Attachment_ID FROM AD_Attachment WHERE AD_Table_ID=? AND Record_ID=?"; + int attachid = DB.getSQLValue(null, sql, Table_ID, Record_ID); + return attachid; + } + } // MAttachment diff --git a/org.adempiere.base/src/org/compiere/model/MChat.java b/org.adempiere.base/src/org/compiere/model/MChat.java index 4598ff4391..b55bc34d65 100644 --- a/org.adempiere.base/src/org/compiere/model/MChat.java +++ b/org.adempiere.base/src/org/compiere/model/MChat.java @@ -44,8 +44,7 @@ public class MChat extends X_CM_Chat /** * */ - private static final long serialVersionUID = -5053130533036069784L; - + private static final long serialVersionUID = 9165439123618441913L; /** * Get Chats Of Table - of client in context @@ -240,7 +239,19 @@ public class MChat extends X_CM_Chat } // entry // return history; - } // getHistory - + } // getHistory + + /** + * IDEMPIERE-530 + * Get the chat ID based on table_id and record_id + * @param AD_Table_ID + * @param Record_ID + * @return CM_Chat_ID + */ + public static int getID(int Table_ID, int Record_ID) { + String sql="SELECT CM_Chat_ID FROM CM_Chat WHERE AD_Table_ID=? AND Record_ID=?"; + int chatID = DB.getSQLValueEx(null, sql, Table_ID, Record_ID); + return chatID; + } } // MChat diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/APanel.java b/org.adempiere.ui.swing/src/org/compiere/apps/APanel.java index d536657b1f..aec0feedf7 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/APanel.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/APanel.java @@ -2304,11 +2304,10 @@ public final class APanel extends CPanel return; } - // Attachment va = - new Attachment (AEnv.getFrame(this), m_curWindowNo, + @SuppressWarnings("unused") + Attachment va = new Attachment (AEnv.getFrame(this), m_curWindowNo, m_curTab.getAD_AttachmentID(), m_curTab.getAD_Table_ID(), record_ID, null); // - m_curTab.loadAttachments(); // reload aAttachment.setPressed(m_curTab.hasAttachment()); } // attachment @@ -2345,7 +2344,6 @@ public final class APanel extends CPanel m_curTab.getCM_ChatID(), m_curTab.getAD_Table_ID(), record_ID, description, null); // - m_curTab.loadChats(); // reload aChat.setPressed(m_curTab.hasChat()); } // chat @@ -2368,7 +2366,6 @@ public final class APanel extends CPanel else { m_curTab.lock (Env.getCtx(), record_ID, aLock.getButton().isSelected()); - m_curTab.loadAttachments(); // reload } aLock.setPressed(m_curTab.isLocked()); } // lock diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/Attachment.java b/org.adempiere.ui.swing/src/org/compiere/apps/Attachment.java index 588a575c62..6d83eb01dc 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/Attachment.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/Attachment.java @@ -78,7 +78,7 @@ public final class Attachment extends CDialog int AD_Table_ID, int Record_ID, String trxName) { super (frame, Msg.getMsg(Env.getCtx(), "Attachment"), true); - // needs to be modal otherwise APanel does not recongize change. + // needs to be modal otherwise APanel does not recognize change. log.config("ID=" + AD_Attachment_ID + ", Table=" + AD_Table_ID + ", Record=" + Record_ID); // @@ -93,10 +93,10 @@ public final class Attachment extends CDialog log.log(Level.SEVERE, "", ex); } // Create Model - if (AD_Attachment_ID == 0) - m_attachment = new MAttachment (Env.getCtx(), AD_Table_ID, Record_ID, trxName); - else + if (AD_Attachment_ID > 0) m_attachment = new MAttachment (Env.getCtx(), AD_Attachment_ID, trxName); + else + m_attachment = new MAttachment (Env.getCtx(), AD_Table_ID, Record_ID, trxName); loadAttachments(); // try @@ -112,7 +112,7 @@ public final class Attachment extends CDialog /** Window No */ private int m_WindowNo; /** Attachment */ - private MAttachment m_attachment; + private MAttachment m_attachment = null; /** Change */ private boolean m_change = false; /** Logger */ @@ -380,7 +380,10 @@ public final class Attachment extends CDialog } } else + { m_attachment.delete(true); + m_attachment = null; + } dispose(); } // Cancel @@ -468,8 +471,10 @@ public final class Attachment extends CDialog private void deleteAttachment() { log.info(""); - if (ADialog.ask(m_WindowNo, this, "AttachmentDelete?")) + if (ADialog.ask(m_WindowNo, this, "AttachmentDelete?")) { m_attachment.delete(true); + m_attachment = null; + } } // deleteAttachment /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java index 0ae02e5cb9..c3d383bd17 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java @@ -801,7 +801,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements public void onEvent(Event event) throws Exception { adTabbox.getSelectedGridTab().lock(Env.getCtx(), adTabbox.getSelectedGridTab().getRecord_ID(), !toolbar.getButton("Lock").isPressed()); - adTabbox.getSelectedGridTab().loadAttachments(); // reload + adTabbox.getSelectedGridTab().loadLocks(); // reload toolbar.lock(adTabbox.getSelectedGridTab().isLocked()); } @@ -850,8 +850,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements EventListener listener = new EventListener() { @Override - public void onEvent(Event event) throws Exception { - adTabbox.getSelectedGridTab().loadAttachments(); // reload + public void onEvent(Event event) throws Exception { toolbar.getButton("Attachment").setPressed(adTabbox.getSelectedGridTab().hasAttachment()); focusToActivePanel(); } @@ -899,8 +898,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements WChat chat = new WChat(curWindowNo, adTabbox.getSelectedGridTab().getCM_ChatID(), adTabbox.getSelectedGridTab().getAD_Table_ID(), recordId, description, null); chat.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { @Override - public void onEvent(Event event) throws Exception { - adTabbox.getSelectedGridTab().loadChats(); + public void onEvent(Event event) throws Exception { toolbar.getButton("Chat").setPressed(adTabbox.getSelectedGridTab().hasChat()); focusToActivePanel(); Clients.clearBusy(getComponent()); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java index b60fe5a172..61bc845615 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WAttachment.java @@ -76,7 +76,7 @@ public class WAttachment extends Window implements EventListener private int m_WindowNo; /** Attachment */ - private MAttachment m_attachment; + private MAttachment m_attachment = null; /** Change */ private boolean m_change = false; @@ -168,10 +168,10 @@ public class WAttachment extends Window implements EventListener // Create Model - if (AD_Attachment_ID == 0) - m_attachment = new MAttachment (Env.getCtx(), AD_Table_ID, Record_ID, trxName); - else + if (AD_Attachment_ID > 0) m_attachment = new MAttachment (Env.getCtx(), AD_Attachment_ID, trxName); + else + m_attachment = new MAttachment (Env.getCtx(), AD_Table_ID, Record_ID, trxName); loadAttachments(); @@ -483,7 +483,10 @@ public class WAttachment extends Window implements EventListener } } else + { m_attachment.delete(true); + m_attachment = null; + } dispose(); } @@ -614,6 +617,7 @@ public class WAttachment extends Window implements EventListener if (result) { m_attachment.delete(true); + m_attachment = null; } } }); From bbba2cdd721035dc2920456dd3a715fc6bc33255 Mon Sep 17 00:00:00 2001 From: Juan David Arboleda Date: Mon, 17 Dec 2012 18:04:33 -0500 Subject: [PATCH 12/21] IDEMPIERE-364 Improve Grid Layout / Refactor customizegrid --- .../org/adempiere/webui/panel/CustomizeGridViewPanel.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/CustomizeGridViewPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/CustomizeGridViewPanel.java index 40cc1ebc76..adf062fdd3 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/CustomizeGridViewPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/CustomizeGridViewPanel.java @@ -408,13 +408,11 @@ public class CustomizeGridViewPanel extends Panel */ void migrateValueWithinYesList (int endIndex, List selObjects) { - int length = selObjects.size(); int iniIndex =0; Arrays.sort(selObjects.toArray()); ListElement endObject = (ListElement)yesModel.getElementAt(endIndex); - - for (int i = 0; i < length; i++) { - iniIndex = yesModel.indexOf(selObjects.get(i)); + for (ListElement selected : selObjects) { + iniIndex = yesModel.indexOf(selected); ListElement selObject = (ListElement)yesModel.getElementAt(iniIndex); yesModel.removeElement(selObject); endIndex = yesModel.indexOf(endObject); From 7516e37f1f4c02d8ff649f57833bc45c35a9ef47 Mon Sep 17 00:00:00 2001 From: Juan David Arboleda Date: Mon, 17 Dec 2012 18:19:21 -0500 Subject: [PATCH 13/21] IDEMPIERE-379 Reporting wizard for end users / Refactor --- .../webui/apps/form/WReportCustomization.java | 27 +- .../webui/panel/WRC1DisplayFieldsPanel.java | 52 +-- .../webui/panel/WRC2FieldOrderPanel.java | 159 ++++---- .../webui/panel/WRC3SortCriteriaPanel.java | 347 +++++++++--------- .../panel/WRC4GroupingCriteriaPanel.java | 14 +- .../webui/panel/WRC5SummaryFieldsPanel.java | 25 +- .../adempiere/webui/panel/WRCTabPanel.java | 20 +- 7 files changed, 322 insertions(+), 322 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WReportCustomization.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WReportCustomization.java index df49932e04..58fe8d7c29 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WReportCustomization.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WReportCustomization.java @@ -16,6 +16,7 @@ package org.adempiere.webui.apps.form; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.StringWriter; +import java.util.ArrayList; import java.util.Properties; import java.util.logging.Level; @@ -82,7 +83,7 @@ public class WReportCustomization implements IFormController,EventListener pfi ; private Auxheader headerPanel=new Auxheader(); private Listbox comboReport = new Listbox(); @@ -140,7 +141,11 @@ public class WReportCustomization implements IFormController,EventListener() ; + for (MPrintFormatItem item : m_reportEngine.getPrintFormat().getAllItems("IsPrinted DESC, NULLIF(SeqNo,0), Name")) { + pfi.add(item); + } + try { m_ctx = m_reportEngine.getCtx(); @@ -229,6 +234,7 @@ public class WReportCustomization implements IFormController,EventListener listColumns=new ArrayList(); SimpleListModel sortModel; + private Listbox sortList; public WRC2FieldOrderPanel() { super(); @@ -59,13 +61,9 @@ public class WRC2FieldOrderPanel extends WRCTabPanel implements EventListener(); - if (m_pfi != null && m_pfi.length > 0) { - for (int i = 0; i < m_pfi.length; i++) { - if (m_pfi[i] != null && m_pfi[i].isPrinted()) { - listColumns.add(m_pfi[i]); - } - } - } + for (MPrintFormatItem item : m_pfi) + if(item!=null && item.isPrinted()) + listColumns.add(item); } public void init() @@ -100,37 +98,21 @@ public class WRC2FieldOrderPanel extends WRCTabPanel implements EventListener selObjects = new ArrayList(); int targetIndex = sortList.getIndexOfItem(targetItem); - ListElement targetElement = (ListElement) sortModel.getElementAt(targetIndex); - ListElement draggedElement = (ListElement) sortModel.getElementAt(draggedIndex); - - int firstposition=0, secondposition=0; - MPrintFormatItem targetPFI = null; - MPrintFormatItem draggedPFI = null; - for(int j=0 ;j selObjects) + { + int iniIndex =0; + Arrays.sort(selObjects.toArray()); + ListElement selObject= null; + ListElement endObject = (ListElement)sortModel.getElementAt(endIndex); + int targetPFISeq = 0; + MPrintFormatItem draggedPFI = null; + + for (ListElement selected : selObjects) { + iniIndex = sortModel.indexOf(selected); + selObject = (ListElement)sortModel.getElementAt(iniIndex); + draggedPFI =listColumns.get(iniIndex); + sortModel.removeElement(selObject); + listColumns.remove(draggedPFI); + endIndex = sortModel.indexOf(endObject); + targetPFISeq = listColumns.get(endIndex).getSeqNo(); + listColumns.add(endIndex, draggedPFI); + sortModel.add(endIndex, selObject); + draggedPFI.setSeqNo(targetPFISeq - 5); + } + } + @Override public void onEvent(Event event) throws Exception { @@ -194,26 +202,15 @@ public class WRC2FieldOrderPanel extends WRCTabPanel implements EventListener 0 && listColumns != null) { int seq = 10; sortModel.removeAllElements(); - for (int i=0; i @@ -53,15 +55,13 @@ public class WRC3SortCriteriaPanel extends WRCTabPanel implements EventListener private Button bRemove = new Button(); private Button bUp = new Button(); private Button bDown = new Button(); - - public ArrayList yesItems=new ArrayList(); - public ArrayList noItems=new ArrayList(); - // SimpleListModel noModel = new SimpleListModel(); SimpleListModel yesModel = new SimpleListModel(); Listbox noList = new Listbox(); Listbox yesList = new Listbox(); + ArrayList yesItems =new ArrayList(); + ArrayList noItems =new ArrayList(); public WRC3SortCriteriaPanel() { super(); @@ -110,59 +110,7 @@ public class WRC3SortCriteriaPanel extends WRCTabPanel implements EventListener noList.addOnDropListener(crossListMouseListener); yesList.setItemDraggable(true); noList.setItemDraggable(true); - - EventListener yesListMouseMotionListener = new EventListener() - { - public void onEvent(Event event) throws Exception { - if (event instanceof DropEvent) - { - DropEvent me = (DropEvent) event; - ListItem startItem = (ListItem) me.getDragged(); - ListItem endItem = (ListItem) me.getTarget(); - if (startItem.getListbox() == endItem.getListbox() && startItem.getListbox() == yesList) - { - int startIndex = yesList.getIndexOfItem(startItem); - int endIndex = yesList.getIndexOfItem(endItem); - ListElement endElement = (ListElement) yesModel.getElementAt(endIndex); - ListElement startElement = (ListElement) yesModel.getElementAt(startIndex); - yesModel.removeElement(startElement); - endIndex = yesModel.indexOf(endElement); - yesModel.add(endIndex, startElement); - yesList.setSelectedIndex(endIndex); - - int firstposition=0, secondposition=0; - MPrintFormatItem targetPFI = null; - MPrintFormatItem draggedPFI = null; - for(int j=0 ;j (); noItems =new ArrayList(); - if (m_pfi.length > 0 && m_pfi != null ) { - int seq = 10; - for(int i=0 ; i < m_pfi.length ; i++ ){ - if (m_pfi[i].isPrinted() && m_pfi[i] != null) { - if (m_pfi[i].isOrderBy()) { - m_pfi[i].setSortNo(seq); - seq=seq+10; - yesItems.add(m_pfi[i]); - } else{ - noItems.add(m_pfi[i]); - } - } - } + for(int i=0 ; i< m_pfi.size();i++){ + MPrintFormatItem item = m_pfi.get(i); + if(item!=null && item.isPrinted()){ + if(item.isOrderBy()){ + yesItems.add(item); + }else{ + noItems.add(item); + } + } } - Collections.sort(yesItems, new Comparator() { @Override public int compare(MPrintFormatItem o1, MPrintFormatItem o2) { return o1.getSortNo()-o2.getSortNo(); } }); - + } + + @Override + public void refresh() { + + this.setListsColumns(); yesList.removeAllItems(); noList.removeAllItems(); if (yesItems.size() > 0 && yesItems != null) { yesModel.removeAllElements(); - for (int i=0 ; i < yesItems.size() ; i++) { - MPrintFormatItem pfi = yesItems.get(i); - if (pfi != null) { - int ID= pfi.get_ID(); - String name =pfi.getPrintName(); - if(name == null) - name=pfi.getName(); - KeyNamePair pair =new KeyNamePair(ID, name); - yesList.addItem(pair); - ListElement element =new ListElement(pfi.get_ID(), pfi.getName(), pfi.getSortNo(), true, pfi.getAD_Client_ID(), pfi.getAD_Org_ID()); - yesModel.addElement(element); - } + for (int i=0 ; i < yesItems.size() ; i++) { + int ID= yesItems.get(i).get_ID(); + String name = yesItems.get(i).getPrintName()==null? yesItems.get(i).getName():yesItems.get(i).getPrintName(); + yesList.addItem(new KeyNamePair(ID, name)); + yesModel.addElement(new ListElement(ID, name, yesItems.get(i).getSortNo(), true, yesItems.get(i).getAD_Client_ID(), yesItems.get(i).getAD_Org_ID())); } } - + if (noItems.size() > 0 && noItems != null) { noModel.removeAllElements(); for (int i=0 ; i < noItems.size() ; i++) { - MPrintFormatItem pfi = noItems.get(i); - if (pfi != null) { - int ID= pfi.get_ID(); - pfi.setSortNo(0); - pfi.setIsOrderBy(false); - String name =pfi.getPrintName(); - if(name == null) - name=pfi.getName(); - KeyNamePair pair =new KeyNamePair(ID, name); - noList.addItem(pair); - ListElement element =new ListElement(pfi.get_ID(), pfi.getName(), pfi.getSortNo(), false, pfi.getAD_Client_ID(), pfi.getAD_Org_ID()); - noModel.add(i,element); - } + int ID= noItems.get(i).get_ID(); + String name = noItems.get(i).getPrintName()== null ? noItems.get(i).getName() : noItems.get(i).getPrintName(); + noItems.get(i).setSortNo(0); + noItems.get(i).setIsOrderBy(false); + noList.addItem(new KeyNamePair(ID, name)); + noModel.add(i,new ListElement(ID, name, noItems.get(i).getSortNo(), false, noItems.get(i).getAD_Client_ID(), noItems.get(i).getAD_Org_ID())); } } } @@ -302,45 +235,104 @@ public class WRC3SortCriteriaPanel extends WRCTabPanel implements EventListener } Listbox listFrom = (source == bAdd || source == noList) ? noList : yesList; Listbox listTo = (source == bAdd || source == noList) ? yesList : noList; - SimpleListModel lmFrom = (source == bAdd || source == noList) ? - noModel : yesModel; - SimpleListModel lmTo = (lmFrom == yesModel) ? noModel : yesModel; + + int endIndex = yesList.getIndexOfItem(listTo.getSelectedItem()); + //Listto is empty. + if (endIndex<0 ) + endIndex=0; + + migrateLists (listFrom,listTo,endIndex); + } // migrateValueAcrossLists + + void migrateLists (Listbox listFrom , Listbox listTo , int endIndex) + { + int index = 0; + SimpleListModel lmFrom = (listFrom == yesList) ? yesModel:noModel; + SimpleListModel lmTo = (lmFrom == yesModel) ? noModel:yesModel; Set selectedItems = listFrom.getSelectedItems(); List selObjects = new ArrayList(); for (Object obj : selectedItems) { ListItem listItem = (ListItem) obj; - int index = listFrom.getIndexOfItem(listItem); + index = listFrom.getIndexOfItem(listItem); ListElement selObject = (ListElement)lmFrom.getElementAt(index); selObjects.add(selObject); } + index = 0; + boolean reOrder = false; + Arrays.sort(selObjects.toArray()); for (ListElement selObject : selObjects) { if (selObject == null) continue; lmFrom.removeElement(selObject); - lmTo.addElement(selObject); - - for (int j=0 ; j pp = new ArrayList(); + for(int i=0 ; i() { + @Override + public int compare(ListElement o1, ListElement o2) { + return o1.getSortNo()-o2.getSortNo(); + } + }); + for(ListElement ele : pp) { + int auxIndex = m_pfi.indexOf(getPrintFormatItem(ele.m_key)); + m_pfi.get(auxIndex).setSortNo(sortNo); + sortNo = sortNo + 10; + } + wc.setIsChanged(true); + } refresh(); if ( listTo.getSelectedItem() != null) { AuFocus focus = new AuFocus(listTo.getSelectedItem()); Clients.response(focus); } - - } // migrateValueAcrossLists + } + + /** + * Move within Yes List with Drag Event and Multiple Choice + * @param event event + */ + void migrateValueWithinYesList (int endIndex, List selObjects) + { + int iniIndex =0; + Arrays.sort(selObjects.toArray()); + ListElement selObject= null; + ListElement endObject = (ListElement)yesModel.getElementAt(endIndex); + for (ListElement selected : selObjects) { + iniIndex = yesModel.indexOf(selected); + selObject = (ListElement)yesModel.getElementAt(iniIndex); + yesModel.removeElement(selObject); + endIndex = yesModel.indexOf(endObject); + yesModel.add(endIndex, selObject); + } + int sortNo = 10; + int auxIndex =0; + yesList.removeAllItems(); + for(int i=0 ; i selObjects = new ArrayList(); + endIndex = yesList.getIndexOfItem(endItem); + for (Object obj : yesList.getSelectedItems()) { + ListItem listItem = (ListItem) obj; + int index = yesList.getIndexOfItem(listItem); + ListElement selObject = (ListElement)yesModel.getElementAt(index); + selObjects.add(selObject); } + migrateValueWithinYesList (endIndex, selObjects); } - wc.setIsChanged(true); - } - - refresh(); - // - noList.clearSelection(); - yesList.clearSelection(); - - yesList.setSelectedIndex(endIndex); - - } - } + } + } + } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WRC4GroupingCriteriaPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WRC4GroupingCriteriaPanel.java index 5025386c66..d9632c197b 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WRC4GroupingCriteriaPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/WRC4GroupingCriteriaPanel.java @@ -48,9 +48,9 @@ public class WRC4GroupingCriteriaPanel extends WRCTabPanel implements EventListe @Override public void refresh() { orderfield = new ArrayList(); - for(int i=0 ; i < m_pfi.length ; i++){ - if(m_pfi[i] != null && m_pfi[i].isOrderBy() && m_pfi[i].isPrinted()){ - orderfield.add(m_pfi[i]); + for(int i=0 ; i < m_pfi.size(); i++){ + if(m_pfi.get(i) != null && m_pfi.get(i).isOrderBy() && m_pfi.get(i).isPrinted()){ + orderfield.add(m_pfi.get(i)); } } dynamicInit(); @@ -59,11 +59,8 @@ public class WRC4GroupingCriteriaPanel extends WRCTabPanel implements EventListe @Override public void updatePFI() { for(int i=0 ; i(); - for(int i=0 ; i m_pfi; public MPrintFormat m_pf; public WReportCustomization wc; + public Map mapPFormatItem = new HashMap(); public abstract void refresh(); @@ -35,14 +42,21 @@ public abstract class WRCTabPanel extends Tabpanel { public void setMPrintFormat(MPrintFormat pf) { m_pf=pf; + for (MPrintFormatItem item : m_pf.getAllItems() ){ + mapPFormatItem.put(item.get_ID(), item); + } } - public void setPrintFormatItems(MPrintFormatItem[] pfis) { + public void setPrintFormatItems(ArrayList pfis) { m_pfi = pfis; } public void setWReportCustomization(WReportCustomization parent){ wc=parent; } - + + public MPrintFormatItem getPrintFormatItem(int AD_PrintFormatItem_ID) { + return mapPFormatItem.get(AD_PrintFormatItem_ID); + } + } From d3e8ef0a7a06705257e210cd26e9a3e9a45faada Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Mon, 17 Dec 2012 20:32:05 -0500 Subject: [PATCH 14/21] IDEMPIERE-455 Discover and fix FindBugs problems / Patterns Multithreaded correctness --- org.adempiere.base/src/org/compiere/acct/DocManager.java | 2 +- org.adempiere.base/src/org/compiere/db/CConnection.java | 6 +++--- org.adempiere.base/src/org/compiere/dbPort/Convert.java | 2 +- .../src/org/compiere/model/MEXPProcessor.java | 2 +- org.adempiere.base/src/org/compiere/model/MLocator.java | 2 +- .../src/org/compiere/model/MRequestType.java | 8 ++++---- org.adempiere.base/src/org/compiere/model/MSystem.java | 2 +- .../src/org/compiere/model/MUserDefWin.java | 2 +- .../src/org/compiere/model/TranslationTable.java | 2 +- .../src/org/compiere/print/ArchiveEngine.java | 2 +- .../src/org/compiere/print/util/SwapFile.java | 2 +- .../src/org/compiere/util/CCachedRowSet.java | 2 +- org.adempiere.base/src/org/compiere/util/CLogger.java | 2 +- org.adempiere.base/src/org/compiere/util/DB.java | 2 +- org.adempiere.base/src/org/compiere/util/Ini.java | 2 +- .../src/org/compiere/util/SecureEngine.java | 2 +- org.adempiere.base/src/org/compiere/util/WebInfo.java | 2 +- org.adempiere.base/src/org/compiere/util/WebUser.java | 2 +- .../src/org/compiere/wf/DocWorkflowManager.java | 2 +- .../equinox/http/servlet/internal/HttpServiceImpl.java | 2 +- .../equinox/http/servlet/internal/ProxyServlet.java | 4 ++-- .../org/eclipse/equinox/servletbridge/BridgeServlet.java | 6 +++--- .../server/org/compiere/server/AdempiereServerGroup.java | 2 +- .../main/servlet/org/compiere/web/AdempiereMonitor.java | 6 +++--- .../src/org/compiere/grid/ed/VAccountDialog.java | 2 +- .../jawsy/jawwa/zk/atmosphere/AtmosphereServerPush.java | 4 ++-- .../src/org/adempiere/webui/window/WAccountDialog.java | 2 +- .../src/org/compiere/wstore/StoreFilter.java | 2 +- .../src/org/compiere/db/DB_Oracle.java | 2 +- .../src/org/idempiere/fitnesse/fixture/AssertRecord.java | 2 +- .../org/idempiere/fitnesse/fixture/AssertVariable.java | 2 +- .../src/org/idempiere/fitnesse/fixture/CreateRecord.java | 2 +- .../src/org/idempiere/fitnesse/fixture/Login.java | 2 +- .../src/org/idempiere/fitnesse/fixture/ReadRecord.java | 2 +- .../src/org/idempiere/fitnesse/fixture/RunProcess.java | 2 +- .../src/org/idempiere/fitnesse/fixture/SetDocAction.java | 2 +- .../src/org/idempiere/fitnesse/fixture/SetVariable.java | 2 +- .../fitnesse/fixture/Static_iDempiereInstance.java | 2 +- .../src/org/idempiere/hazelcast/service/Activator.java | 2 +- 39 files changed, 50 insertions(+), 50 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/acct/DocManager.java b/org.adempiere.base/src/org/compiere/acct/DocManager.java index 3b2d00a234..3696376460 100644 --- a/org.adempiere.base/src/org/compiere/acct/DocManager.java +++ b/org.adempiere.base/src/org/compiere/acct/DocManager.java @@ -66,7 +66,7 @@ public class DocManager { return documentsTableName; } - private static void fillDocumentsTableArrays() { + private synchronized static void fillDocumentsTableArrays() { if (documentsTableID == null) { String sql = "SELECT t.AD_Table_ID, t.TableName " + "FROM AD_Table t, AD_Column c " + diff --git a/org.adempiere.base/src/org/compiere/db/CConnection.java b/org.adempiere.base/src/org/compiere/db/CConnection.java index 8a452470c9..58594c7d11 100644 --- a/org.adempiere.base/src/org/compiere/db/CConnection.java +++ b/org.adempiere.base/src/org/compiere/db/CConnection.java @@ -48,7 +48,7 @@ public class CConnection implements Serializable, Cloneable */ private static final long serialVersionUID = -7893119456331485444L; /** Connection */ - private static CConnection s_cc = null; + private volatile static CConnection s_cc = null; /** Logger */ private static CLogger log = CLogger.getCLogger (CConnection.class); @@ -86,7 +86,7 @@ public class CConnection implements Serializable, Cloneable * @param apps_host optional apps host for new connections * @return Connection Descriptor */ - public static CConnection get (String apps_host) + public synchronized static CConnection get (String apps_host) { if (s_cc == null) { @@ -1418,7 +1418,7 @@ public class CConnection implements Serializable, Cloneable * Get Last Exception of Apps Server Connection attempt * @return Exception or null */ - public Exception getAppsServerException () + public synchronized Exception getAppsServerException () { return m_appsException; } // getAppsServerException diff --git a/org.adempiere.base/src/org/compiere/dbPort/Convert.java b/org.adempiere.base/src/org/compiere/dbPort/Convert.java index 494449eb49..f669498599 100644 --- a/org.adempiere.base/src/org/compiere/dbPort/Convert.java +++ b/org.adempiere.base/src/org/compiere/dbPort/Convert.java @@ -432,7 +432,7 @@ public abstract class Convert */ public abstract boolean isOracle(); - public static void logMigrationScript(String oraStatement, String pgStatement) { + public synchronized static void logMigrationScript(String oraStatement, String pgStatement) { // Check AdempiereSys // check property Log migration script boolean logMigrationScript = false; diff --git a/org.adempiere.base/src/org/compiere/model/MEXPProcessor.java b/org.adempiere.base/src/org/compiere/model/MEXPProcessor.java index b2d69b69c2..c300207d61 100644 --- a/org.adempiere.base/src/org/compiere/model/MEXPProcessor.java +++ b/org.adempiere.base/src/org/compiere/model/MEXPProcessor.java @@ -51,7 +51,7 @@ public class MEXPProcessor extends X_EXP_Processor { /** Static Logger */ private static CLogger s_log = CLogger.getCLogger (MEXPProcessor.class); - private static MEXPProcessor processor= null; + private volatile static MEXPProcessor processor= null; private X_EXP_ProcessorParameter[] parameters = null; public static MEXPProcessor get(Properties ctx, int EXP_Processor_ID, String trxName) diff --git a/org.adempiere.base/src/org/compiere/model/MLocator.java b/org.adempiere.base/src/org/compiere/model/MLocator.java index 67c3d306a3..2ece305a49 100644 --- a/org.adempiere.base/src/org/compiere/model/MLocator.java +++ b/org.adempiere.base/src/org/compiere/model/MLocator.java @@ -186,7 +186,7 @@ public class MLocator extends X_M_Locator } // get /** Cache */ - private static CCache s_cache; + private volatile static CCache s_cache; /** Logger */ private static CLogger s_log = CLogger.getCLogger (MLocator.class); diff --git a/org.adempiere.base/src/org/compiere/model/MRequestType.java b/org.adempiere.base/src/org/compiere/model/MRequestType.java index e447537429..1e8363092e 100644 --- a/org.adempiere.base/src/org/compiere/model/MRequestType.java +++ b/org.adempiere.base/src/org/compiere/model/MRequestType.java @@ -196,7 +196,7 @@ public class MRequestType extends X_R_RequestType * Get Total No of requests of type * @return no */ - public int getTotalNo() + public synchronized int getTotalNo() { updateStatistics(); return m_totalNo; @@ -206,7 +206,7 @@ public class MRequestType extends X_R_RequestType * Get Open No of requests of type * @return no */ - public int getOpenNo() + public synchronized int getOpenNo() { updateStatistics(); return m_openNo; @@ -216,7 +216,7 @@ public class MRequestType extends X_R_RequestType * Get Closed in last 30 days of type * @return no */ - public int getClosed30No() + public synchronized int getClosed30No() { updateStatistics(); return m_closed30No; @@ -226,7 +226,7 @@ public class MRequestType extends X_R_RequestType * Get New in the last 30 days of type * @return no */ - public int getNew30No() + public synchronized int getNew30No() { updateStatistics(); return m_new30No; diff --git a/org.adempiere.base/src/org/compiere/model/MSystem.java b/org.adempiere.base/src/org/compiere/model/MSystem.java index fed85f1340..a983d7d81e 100644 --- a/org.adempiere.base/src/org/compiere/model/MSystem.java +++ b/org.adempiere.base/src/org/compiere/model/MSystem.java @@ -62,7 +62,7 @@ public class MSystem extends X_AD_System * @param ctx context * @return System */ - public static MSystem get (Properties ctx) + public synchronized static MSystem get (Properties ctx) { if (s_system != null) return s_system; diff --git a/org.adempiere.base/src/org/compiere/model/MUserDefWin.java b/org.adempiere.base/src/org/compiere/model/MUserDefWin.java index bd52bbfbb9..511b2eb0cf 100644 --- a/org.adempiere.base/src/org/compiere/model/MUserDefWin.java +++ b/org.adempiere.base/src/org/compiere/model/MUserDefWin.java @@ -35,7 +35,7 @@ public class MUserDefWin extends X_AD_UserDef_Win */ private static final long serialVersionUID = -5775251886672840324L; - private static List m_fullList = null; + private volatile static List m_fullList = null; /** * Standard constructor. diff --git a/org.adempiere.base/src/org/compiere/model/TranslationTable.java b/org.adempiere.base/src/org/compiere/model/TranslationTable.java index f6528a3feb..17ecde661c 100644 --- a/org.adempiere.base/src/org/compiere/model/TranslationTable.java +++ b/org.adempiere.base/src/org/compiere/model/TranslationTable.java @@ -65,7 +65,7 @@ public class TranslationTable * @param requery requery * @return number of active Translations */ - public static int getActiveLanguages (boolean requery) + public synchronized static int getActiveLanguages (boolean requery) { if (s_activeLanguages != null && !requery) return s_activeLanguages.intValue(); diff --git a/org.adempiere.base/src/org/compiere/print/ArchiveEngine.java b/org.adempiere.base/src/org/compiere/print/ArchiveEngine.java index 6594b201f9..db23742186 100644 --- a/org.adempiere.base/src/org/compiere/print/ArchiveEngine.java +++ b/org.adempiere.base/src/org/compiere/print/ArchiveEngine.java @@ -195,7 +195,7 @@ public class ArchiveEngine /** Logger */ private static CLogger log = CLogger.getCLogger(ArchiveEngine.class); /** Singleton */ - private static ArchiveEngine s_engine = null; + private volatile static ArchiveEngine s_engine = null; /************************************************************************** diff --git a/org.adempiere.base/src/org/compiere/print/util/SwapFile.java b/org.adempiere.base/src/org/compiere/print/util/SwapFile.java index 51c0764980..89f8f8438b 100644 --- a/org.adempiere.base/src/org/compiere/print/util/SwapFile.java +++ b/org.adempiere.base/src/org/compiere/print/util/SwapFile.java @@ -171,7 +171,7 @@ public class SwapFile freeBlocks(segment.getOffsets()); } - private void verifyOpen() { + private synchronized void verifyOpen() { if (randomAccessFile == null) { throw new RuntimeException("Swap file not open for read write access"); } diff --git a/org.adempiere.base/src/org/compiere/util/CCachedRowSet.java b/org.adempiere.base/src/org/compiere/util/CCachedRowSet.java index 13aa1a1168..16a889b3a5 100644 --- a/org.adempiere.base/src/org/compiere/util/CCachedRowSet.java +++ b/org.adempiere.base/src/org/compiere/util/CCachedRowSet.java @@ -52,7 +52,7 @@ public class CCachedRowSet extends CachedRowSetImpl implements CachedRowSet * @return Cached Row Set * @throws SQLException */ - public static CCachedRowSet get() throws SQLException + public synchronized static CCachedRowSet get() throws SQLException { CCachedRowSet crs = null; // only first time call diff --git a/org.adempiere.base/src/org/compiere/util/CLogger.java b/org.adempiere.base/src/org/compiere/util/CLogger.java index 072a064293..653746224e 100644 --- a/org.adempiere.base/src/org/compiere/util/CLogger.java +++ b/org.adempiere.base/src/org/compiere/util/CLogger.java @@ -116,7 +116,7 @@ public class CLogger extends Logger implements Serializable } // get /** Default Logger */ - private static CLogger s_logger = null; + private volatile static CLogger s_logger = null; /************************************************************************** diff --git a/org.adempiere.base/src/org/compiere/util/DB.java b/org.adempiere.base/src/org/compiere/util/DB.java index 28e5092a70..69282464a4 100644 --- a/org.adempiere.base/src/org/compiere/util/DB.java +++ b/org.adempiere.base/src/org/compiere/util/DB.java @@ -255,7 +255,7 @@ public final class DB * Set connection * @param cc connection */ - public static void setDBTarget (CConnection cc) + public synchronized static void setDBTarget (CConnection cc) { if (cc == null) throw new IllegalArgumentException("Connection is NULL"); diff --git a/org.adempiere.base/src/org/compiere/util/Ini.java b/org.adempiere.base/src/org/compiere/util/Ini.java index b39307c61e..9f121f7e69 100644 --- a/org.adempiere.base/src/org/compiere/util/Ini.java +++ b/org.adempiere.base/src/org/compiere/util/Ini.java @@ -224,7 +224,7 @@ public final class Ini implements Serializable }; /** Container for Properties */ - private static Properties s_prop = new Properties(); + private volatile static Properties s_prop = new Properties(); private static String s_propertyFileName = null; diff --git a/org.adempiere.base/src/org/compiere/util/SecureEngine.java b/org.adempiere.base/src/org/compiere/util/SecureEngine.java index 796a532060..ef9be7313c 100644 --- a/org.adempiere.base/src/org/compiere/util/SecureEngine.java +++ b/org.adempiere.base/src/org/compiere/util/SecureEngine.java @@ -217,7 +217,7 @@ public class SecureEngine /** Test String */ private static final String TEST = "This is a 0123456789 .,; -= Test!"; /** Secure Engine */ - private static SecureEngine s_engine = null; + private volatile static SecureEngine s_engine = null; /** The real Engine */ private SecureInterface implementation = null; diff --git a/org.adempiere.base/src/org/compiere/util/WebInfo.java b/org.adempiere.base/src/org/compiere/util/WebInfo.java index 07521402e8..d32b3ba5b0 100644 --- a/org.adempiere.base/src/org/compiere/util/WebInfo.java +++ b/org.adempiere.base/src/org/compiere/util/WebInfo.java @@ -64,7 +64,7 @@ public class WebInfo } // getGeneral /** General Info */ - private static WebInfo m_general = null; + private volatile static WebInfo m_general = null; /** * Constructor diff --git a/org.adempiere.base/src/org/compiere/util/WebUser.java b/org.adempiere.base/src/org/compiere/util/WebUser.java index 92db947e16..5f8fea21ca 100644 --- a/org.adempiere.base/src/org/compiere/util/WebUser.java +++ b/org.adempiere.base/src/org/compiere/util/WebUser.java @@ -107,7 +107,7 @@ public class WebUser } // get /** Short term Cache for immediate re-query/post (hit rate 20%) */ - private static WebUser s_cache = null; + private volatile static WebUser s_cache = null; /*************************************************************************/ diff --git a/org.adempiere.base/src/org/compiere/wf/DocWorkflowManager.java b/org.adempiere.base/src/org/compiere/wf/DocWorkflowManager.java index 5c4772a472..c5d91ac441 100644 --- a/org.adempiere.base/src/org/compiere/wf/DocWorkflowManager.java +++ b/org.adempiere.base/src/org/compiere/wf/DocWorkflowManager.java @@ -55,7 +55,7 @@ public class DocWorkflowManager implements DocWorkflowMgr } /** Document Workflow Manager */ - private static DocWorkflowManager s_mgr = null; + private volatile static DocWorkflowManager s_mgr = null; /** Logger */ private static CLogger log = CLogger.getCLogger(DocWorkflowManager.class); diff --git a/org.adempiere.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/HttpServiceImpl.java b/org.adempiere.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/HttpServiceImpl.java index 0d99739af1..8589e2986b 100644 --- a/org.adempiere.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/HttpServiceImpl.java +++ b/org.adempiere.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/HttpServiceImpl.java @@ -50,7 +50,7 @@ public class HttpServiceImpl implements HttpService, ExtendedHttpService { shutdown = true; } - private void checkShutdown() { + private synchronized void checkShutdown() { if (shutdown) throw new IllegalStateException("Service instance is already shutdown"); //$NON-NLS-1$ } diff --git a/org.adempiere.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ProxyServlet.java b/org.adempiere.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ProxyServlet.java index a9c051c653..f9d1854f9c 100644 --- a/org.adempiere.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ProxyServlet.java +++ b/org.adempiere.eclipse.equinox.http.servlet/src/org/eclipse/equinox/http/servlet/internal/ProxyServlet.java @@ -42,7 +42,7 @@ public class ProxyServlet extends HttpServlet implements Filter { Activator.addProxyServlet(this); } - public void destroy() { + public synchronized void destroy() { Activator.removeProxyServlet(this); proxyContext.destroy(); proxyContext = null; @@ -56,7 +56,7 @@ public class ProxyServlet extends HttpServlet implements Filter { process(req, resp, null); } - protected void process(HttpServletRequest req, HttpServletResponse resp, FilterChain filterChain) throws ServletException, IOException { + protected synchronized void process(HttpServletRequest req, HttpServletResponse resp, FilterChain filterChain) throws ServletException, IOException { proxyContext.initializeServletPath(req, filterChain); String alias = HttpServletRequestAdaptor.getDispatchPathInfo(req, filterChain); if (alias == null) diff --git a/org.adempiere.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/BridgeServlet.java b/org.adempiere.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/BridgeServlet.java index 177b467a4c..f66b1dcc74 100644 --- a/org.adempiere.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/BridgeServlet.java +++ b/org.adempiere.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/BridgeServlet.java @@ -35,7 +35,7 @@ public class BridgeServlet extends HttpServlet { private static HttpServlet servletDelegateInstance; private HttpServlet delegate; // true if current HttpServlet is an HTTP Filter and false otherwise. - private boolean delegateIsFilter; + private static boolean delegateIsFilter; private int delegateReferenceCount; /** @@ -175,7 +175,7 @@ public class BridgeServlet extends HttpServlet { try { // cache the flag if HttpServlet servlet delegate is an HTTP Filter. - instance.delegateIsFilter = (servletDelegate instanceof Filter); + BridgeServlet.delegateIsFilter = (servletDelegate instanceof Filter); // initialize the servlet delegate. servletDelegate.init(instance.getServletConfig()); } catch (ServletException e) { @@ -207,7 +207,7 @@ public class BridgeServlet extends HttpServlet { HttpServlet oldProxy = instance.delegate; instance.delegate = null; - instance.delegateIsFilter = false; + BridgeServlet.delegateIsFilter = false; while (instance.delegateReferenceCount != 0) { try { instance.wait(); diff --git a/org.adempiere.server/src/main/server/org/compiere/server/AdempiereServerGroup.java b/org.adempiere.server/src/main/server/org/compiere/server/AdempiereServerGroup.java index dad61e56e0..17393879c5 100644 --- a/org.adempiere.server/src/main/server/org/compiere/server/AdempiereServerGroup.java +++ b/org.adempiere.server/src/main/server/org/compiere/server/AdempiereServerGroup.java @@ -38,7 +38,7 @@ public class AdempiereServerGroup extends ThreadGroup } // get /** Group */ - private static AdempiereServerGroup s_group = null; + private volatile static AdempiereServerGroup s_group = null; /** * AdempiereServerGroup diff --git a/org.adempiere.server/src/main/servlet/org/compiere/web/AdempiereMonitor.java b/org.adempiere.server/src/main/servlet/org/compiere/web/AdempiereMonitor.java index ed7a7eb72e..36f006d63a 100644 --- a/org.adempiere.server/src/main/servlet/org/compiere/web/AdempiereMonitor.java +++ b/org.adempiere.server/src/main/servlet/org/compiere/web/AdempiereMonitor.java @@ -94,11 +94,11 @@ public class AdempiereMonitor extends HttpServlet /** Logger */ private static CLogger log = CLogger.getCLogger(AdempiereMonitor.class); /** The Server */ - private AdempiereServerMgr m_serverMgr = null; + private static AdempiereServerMgr m_serverMgr = null; /** Message */ - private p m_message = null; + private static p m_message = null; - private ArrayList m_dirAccessList = null; + private volatile static ArrayList m_dirAccessList = null; /** * Get diff --git a/org.adempiere.ui.swing/src/org/compiere/grid/ed/VAccountDialog.java b/org.adempiere.ui.swing/src/org/compiere/grid/ed/VAccountDialog.java index 6e5d986a3e..199af65e93 100644 --- a/org.adempiere.ui.swing/src/org/compiere/grid/ed/VAccountDialog.java +++ b/org.adempiere.ui.swing/src/org/compiere/grid/ed/VAccountDialog.java @@ -146,7 +146,7 @@ public final class VAccountDialog extends CDialog protected boolean m_changed = false; /** Accounting Schema */ - private static MAcctSchema s_AcctSchema = null; + private volatile static MAcctSchema s_AcctSchema = null; /** MWindow for AccountCombination */ private GridWindow m_mWindow = null; /** MTab for AccountCombination */ diff --git 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 index a9c8ef6dda..f45929b215 100644 --- 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 @@ -90,7 +90,7 @@ public class AtmosphereServerPush implements ServerPush { synchronized (info) { info.nActive = 1; //granted - info.notify(); + info.notifyAll(); } try { @@ -145,7 +145,7 @@ public class AtmosphereServerPush implements ServerPush { _active = null; synchronized (_mutex) { - _mutex.notify(); + _mutex.notifyAll(); } } } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WAccountDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WAccountDialog.java index b922167979..b7dcca971a 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WAccountDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/WAccountDialog.java @@ -123,7 +123,7 @@ public final class WAccountDialog extends Window protected boolean m_changed = false; /** Accounting Schema */ - private static MAcctSchema s_AcctSchema = null; + private volatile static MAcctSchema s_AcctSchema = null; /** MWindow for AccountCombination */ private GridWindow m_mWindow = null; /** MTab for AccountCombination */ diff --git a/org.adempiere.webstore.servlet/src/org/compiere/wstore/StoreFilter.java b/org.adempiere.webstore.servlet/src/org/compiere/wstore/StoreFilter.java index 33735ecf04..e18696dc1a 100644 --- a/org.adempiere.webstore.servlet/src/org/compiere/wstore/StoreFilter.java +++ b/org.adempiere.webstore.servlet/src/org/compiere/wstore/StoreFilter.java @@ -43,7 +43,7 @@ import org.compiere.util.WebEnv; public class StoreFilter implements javax.servlet.Filter { /** Logging */ - private static CLogger log = null; + private volatile static CLogger log = null; /** * Init diff --git a/org.compiere.db.oracle.provider/src/org/compiere/db/DB_Oracle.java b/org.compiere.db.oracle.provider/src/org/compiere/db/DB_Oracle.java index e65680e6ef..8ae60f5dc3 100644 --- a/org.compiere.db.oracle.provider/src/org/compiere/db/DB_Oracle.java +++ b/org.compiere.db.oracle.provider/src/org/compiere/db/DB_Oracle.java @@ -164,7 +164,7 @@ public class DB_Oracle implements AdempiereDatabase * @return Driver * @throws SQLException */ - public Driver getDriver() throws SQLException + public synchronized Driver getDriver() throws SQLException { if (s_driver == null) { diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/AssertRecord.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/AssertRecord.java index d6dce28088..4cf37ea271 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/AssertRecord.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/AssertRecord.java @@ -45,7 +45,7 @@ import fitnesse.fixtures.TableFixture; * @author Carlos Ruiz - globalqss */ public class AssertRecord extends TableFixture { - private static Instance adempiereInstance = null; + private volatile static Instance adempiereInstance = null; @Override protected void doStaticTable(int rows) { diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/AssertVariable.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/AssertVariable.java index 47e739b981..7a20125665 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/AssertVariable.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/AssertVariable.java @@ -36,7 +36,7 @@ import fitnesse.fixtures.TableFixture; * @author Carlos Ruiz - globalqss */ public class AssertVariable extends TableFixture { - private static Instance adempiereInstance = null; + private volatile static Instance adempiereInstance = null; @Override protected void doStaticTable(int rows) { diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/CreateRecord.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/CreateRecord.java index d4f4c470cd..2f6268d58a 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/CreateRecord.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/CreateRecord.java @@ -44,7 +44,7 @@ import fitnesse.fixtures.TableFixture; * @author Carlos Ruiz - globalqss */ public class CreateRecord extends TableFixture { - private static Instance adempiereInstance = null; + private volatile static Instance adempiereInstance = null; @Override protected void doStaticTable(int rows) { diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/Login.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/Login.java index ed39c9d727..0d8561108f 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/Login.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/Login.java @@ -39,7 +39,7 @@ import fitnesse.fixtures.TableFixture; */ public class Login extends TableFixture { private static final String LANGUAGE_EN_US = "en_US"; - private static Instance adempiereInstance = null; + private volatile static Instance adempiereInstance = null; private String m_user; private String m_password; private String m_language; diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/ReadRecord.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/ReadRecord.java index 28f1eac69e..7f5dd615ce 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/ReadRecord.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/ReadRecord.java @@ -45,7 +45,7 @@ import fitnesse.fixtures.TableFixture; * @author Carlos Ruiz - globalqss */ public class ReadRecord extends TableFixture { - private static Instance adempiereInstance = null; + private volatile static Instance adempiereInstance = null; @Override protected void doStaticTable(int rows) { diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/RunProcess.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/RunProcess.java index a4e34fe805..90b582f69a 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/RunProcess.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/RunProcess.java @@ -58,7 +58,7 @@ import fitnesse.fixtures.TableFixture; * @author Carlos Ruiz - globalqss */ public class RunProcess extends TableFixture { - private static Instance adempiereInstance = null; + private volatile static Instance adempiereInstance = null; private static CLogger log = CLogger.getCLogger(RunProcess.class); diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/SetDocAction.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/SetDocAction.java index 117f975ff7..97422214e0 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/SetDocAction.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/SetDocAction.java @@ -43,7 +43,7 @@ import fitnesse.fixtures.TableFixture; * @author Carlos Ruiz - globalqss */ public class SetDocAction extends TableFixture { - private static Instance adempiereInstance = null; + private volatile static Instance adempiereInstance = null; @Override protected void doStaticTable(int rows) { diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/SetVariable.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/SetVariable.java index a1c6a9d532..c5b65dcce6 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/SetVariable.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/SetVariable.java @@ -38,7 +38,7 @@ import fitnesse.fixtures.TableFixture; * @author Carlos Ruiz - globalqss */ public class SetVariable extends TableFixture { - private static Instance adempiereInstance = null; + private volatile static Instance adempiereInstance = null; @Override protected void doStaticTable(int rows) { diff --git a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/Static_iDempiereInstance.java b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/Static_iDempiereInstance.java index 506624e70e..8d10ee3480 100644 --- a/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/Static_iDempiereInstance.java +++ b/org.idempiere.fitnesse.fixture/src/org/idempiere/fitnesse/fixture/Static_iDempiereInstance.java @@ -32,7 +32,7 @@ package org.idempiere.fitnesse.fixture; * @author Carlos Ruiz - globalqss */ public class Static_iDempiereInstance { - private static Instance adempiereInstance; + private volatile static Instance adempiereInstance; public static Instance getInstance() { if (adempiereInstance == null) { diff --git a/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/Activator.java b/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/Activator.java index 9a57f5a743..853fd80b18 100644 --- a/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/Activator.java +++ b/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/Activator.java @@ -39,7 +39,7 @@ public class Activator implements BundleActivator { return context; } - private static HazelcastInstance hazelcastInstance; + private volatile static HazelcastInstance hazelcastInstance; private static AtomicReference> futureRef = new AtomicReference>(); /* From 49c1db3d7e896ee63083a18122d64106d152d855 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Tue, 18 Dec 2012 09:58:18 +0800 Subject: [PATCH 15/21] IDEMPIERE-206 Integrate fitnesse with iDempiere. Allow overriding of fitnesse server host address. --- fitnesse/src/fitnesse/client/FitServerServletInvoker.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fitnesse/src/fitnesse/client/FitServerServletInvoker.java b/fitnesse/src/fitnesse/client/FitServerServletInvoker.java index 62bab55f4f..2a87b0d9df 100644 --- a/fitnesse/src/fitnesse/client/FitServerServletInvoker.java +++ b/fitnesse/src/fitnesse/client/FitServerServletInvoker.java @@ -18,7 +18,11 @@ public class FitServerServletInvoker extends ServletInvoker { CommandLine commandLine = new CommandLine("url host port socketToken"); if (commandLine.parse(argv)) { servletUrl = commandLine.getArgument("url"); - fitnesseHostAddress = commandLine.getArgument("host"); + String host = System.getProperty("FITNESSE_HOST"); + if (host == null || host.trim().length() == 0) + fitnesseHostAddress = commandLine.getArgument("host"); + else + fitnesseHostAddress = host; fitnessePort = Integer.parseInt(commandLine.getArgument("port")); socketToken = Integer.parseInt(commandLine.getArgument("socketToken")); } else { From 4ff1981554f4ec5e18fd526033ad525c7560e695 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Tue, 18 Dec 2012 11:05:58 +0800 Subject: [PATCH 16/21] IDEMPIERE-206 Integrate fitnesse with iDempiere. Fixed deployment issue. --- org.idempiere.fitnesse.server/WEB-INF/web.xml | 2 +- org.idempiere.fitnesse.server/build.properties | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/org.idempiere.fitnesse.server/WEB-INF/web.xml b/org.idempiere.fitnesse.server/WEB-INF/web.xml index f69cea6c41..b3c915e0a8 100644 --- a/org.idempiere.fitnesse.server/WEB-INF/web.xml +++ b/org.idempiere.fitnesse.server/WEB-INF/web.xml @@ -1,5 +1,5 @@ - diff --git a/org.idempiere.fitnesse.server/build.properties b/org.idempiere.fitnesse.server/build.properties index cf8b6c7d9b..a5702fa03d 100644 --- a/org.idempiere.fitnesse.server/build.properties +++ b/org.idempiere.fitnesse.server/build.properties @@ -6,4 +6,5 @@ bin.includes = META-INF/,\ lib/fitlibrary-2.0.jar,\ lib/log4j-1.2.16.jar,\ lib/fitlibraryweb-2.0.jar,\ - lib/selenium-server-standalone-2.27.0.jar + lib/selenium-server-standalone-2.27.0.jar,\ + WEB-INF/ From 16773b295ba060a7d22ed736ce550d3434c21b6c Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Tue, 18 Dec 2012 11:48:50 +0800 Subject: [PATCH 17/21] IDEMPIERE-391 Scheduler improvements. Fixed session context management issue. --- org.adempiere.base/src/org/compiere/util/Env.java | 3 ++- .../src/main/server/org/compiere/server/Scheduler.java | 8 ++++---- .../web/server/command/ExecuteProcessCommand.java | 8 +++----- .../adempiere/web/server/command/ExecuteTaskCommand.java | 8 +++----- .../web/server/command/ExecuteWorkflowCommand.java | 8 +++----- .../adempiere/web/server/command/PostDocumentCommand.java | 8 +++----- .../adempiere/web/server/command/ResetCacheCommand.java | 8 +++----- .../adempiere/web/server/command/SendEmailCommand.java | 8 +++----- .../src/org/idempiere/adinterface/CompiereService.java | 3 ++- 9 files changed, 26 insertions(+), 36 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/util/Env.java b/org.adempiere.base/src/org/compiere/util/Env.java index f3f75276d8..1182442673 100644 --- a/org.adempiere.base/src/org/compiere/util/Env.java +++ b/org.adempiere.base/src/org/compiere/util/Env.java @@ -232,7 +232,8 @@ public final class Env } /** - * Set Context + * Replace the contents of the current session/process context. + * Don't use this to setup a new session/process context, use ServerContext.setCurrentInstance instead. * @param ctx context */ public static void setCtx (Properties ctx) diff --git a/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java b/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java index fbfddc204d..a456aada48 100644 --- a/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java +++ b/org.adempiere.server/src/main/server/org/compiere/server/Scheduler.java @@ -23,6 +23,7 @@ import java.text.SimpleDateFormat; import java.util.Properties; import java.util.logging.Level; +import org.adempiere.util.ServerContext; import org.compiere.model.MAttachment; import org.compiere.model.MClient; import org.compiere.model.MNote; @@ -106,8 +107,7 @@ public class Scheduler extends AdempiereServer Timestamp ts = new Timestamp(System.currentTimeMillis()); SimpleDateFormat dateFormat4Timestamp = new SimpleDateFormat("yyyy-MM-dd"); Env.setContext(m_schedulerctx, "#Date", dateFormat4Timestamp.format(ts)+" 00:00:00" ); // JDBC format - Properties currentctx = Env.getCtx(); - Env.setCtx(m_schedulerctx); + ServerContext.setCurrentInstance(m_schedulerctx); MProcess process = new MProcess(m_schedulerctx, m_model.getAD_Process_ID(), null); try @@ -129,8 +129,8 @@ public class Scheduler extends AdempiereServer m_trx.close(); } - // Restore system context - Env.setCtx(currentctx); + // clear thread local context + ServerContext.dispose(); // int no = m_model.deleteLog(); diff --git a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteProcessCommand.java b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteProcessCommand.java index b9c7df3f6c..f80cbeeda3 100644 --- a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteProcessCommand.java +++ b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteProcessCommand.java @@ -18,6 +18,7 @@ import java.util.Properties; import org.adempiere.exceptions.AdempiereException; import org.adempiere.util.RestletUtil; +import org.adempiere.util.ServerContext; import org.compiere.interfaces.impl.ServerBean; import org.compiere.model.MRole; import org.compiere.process.ProcessInfo; @@ -61,12 +62,9 @@ public class ExecuteProcessCommand extends ServerResource { } ServerBean bean = new ServerBean(); - //back up properties - Properties backup = new Properties(); - backup.putAll(Env.getCtx()); try { - Env.setCtx(context); + ServerContext.setCurrentInstance(context); if (procedureName != null && procedureName.trim().length() > 0) return bean.dbProcess(context, pi, procedureName); else @@ -74,7 +72,7 @@ public class ExecuteProcessCommand extends ServerResource { } finally { - Env.setCtx(backup); + ServerContext.dispose(); } } diff --git a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteTaskCommand.java b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteTaskCommand.java index be39be01de..a3cf5b482c 100644 --- a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteTaskCommand.java +++ b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteTaskCommand.java @@ -18,6 +18,7 @@ import java.util.Properties; import org.adempiere.exceptions.AdempiereException; import org.adempiere.util.RestletUtil; +import org.adempiere.util.ServerContext; import org.compiere.interfaces.impl.ServerBean; import org.compiere.model.MRole; import org.compiere.util.Env; @@ -57,17 +58,14 @@ public class ExecuteTaskCommand extends ServerResource { } ServerBean bean = new ServerBean(); - //back up properties - Properties backup = new Properties(); - backup.putAll(Env.getCtx()); try { - Env.setCtx(context); + ServerContext.setCurrentInstance(context); return bean.executeTask(context, AD_Task_ID); } finally { - Env.setCtx(backup); + ServerContext.dispose(); } } } diff --git a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteWorkflowCommand.java b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteWorkflowCommand.java index bc7eb9148a..f4f477b9a8 100644 --- a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteWorkflowCommand.java +++ b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ExecuteWorkflowCommand.java @@ -18,6 +18,7 @@ import java.util.Properties; import org.adempiere.exceptions.AdempiereException; import org.adempiere.util.RestletUtil; +import org.adempiere.util.ServerContext; import org.compiere.interfaces.impl.ServerBean; import org.compiere.model.MRole; import org.compiere.process.ProcessInfo; @@ -60,17 +61,14 @@ public class ExecuteWorkflowCommand extends ServerResource { } ServerBean bean = new ServerBean(); - //back up properties - Properties backup = new Properties(); - backup.putAll(Env.getCtx()); try { - Env.setCtx(context); + ServerContext.setCurrentInstance(context); return bean.workflow(context, pi, AD_Workflow_ID); } finally { - Env.setCtx(backup); + ServerContext.dispose(); } } } diff --git a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/PostDocumentCommand.java b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/PostDocumentCommand.java index eb4bb68315..71a2302f59 100644 --- a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/PostDocumentCommand.java +++ b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/PostDocumentCommand.java @@ -18,6 +18,7 @@ import java.util.Properties; import org.adempiere.exceptions.AdempiereException; import org.adempiere.util.RestletUtil; +import org.adempiere.util.ServerContext; import org.compiere.interfaces.impl.ServerBean; import org.compiere.util.Env; import org.restlet.representation.Representation; @@ -57,17 +58,14 @@ public class PostDocumentCommand extends ServerResource { boolean force = (Boolean) entity.get("force"); ServerBean bean = new ServerBean(); - //back up properties - Properties backup = new Properties(); - backup.putAll(Env.getCtx()); try { - Env.setCtx(context); + ServerContext.setCurrentInstance(context); msg = bean.postImmediate(context, AD_Client_ID, AD_Table_ID, Record_ID, force); } finally { - Env.setCtx(backup); + ServerContext.dispose(); } return msg; } diff --git a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ResetCacheCommand.java b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ResetCacheCommand.java index 9b445a5c31..86c66c2c63 100644 --- a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ResetCacheCommand.java +++ b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/ResetCacheCommand.java @@ -18,6 +18,7 @@ import java.util.Properties; import org.adempiere.exceptions.AdempiereException; import org.adempiere.util.RestletUtil; +import org.adempiere.util.ServerContext; import org.compiere.interfaces.impl.ServerBean; import org.compiere.util.Env; import org.restlet.representation.Representation; @@ -53,17 +54,14 @@ public class ResetCacheCommand extends ServerResource { String tableName = (String) entity.get("tableName"); ServerBean bean = new ServerBean(); - //back up properties - Properties backup = new Properties(); - backup.putAll(Env.getCtx()); try { - Env.setCtx(context); + ServerContext.setCurrentInstance(context); return bean.cacheReset(context, tableName, Record_ID); } finally { - Env.setCtx(backup); + ServerContext.dispose(); } } } diff --git a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/SendEmailCommand.java b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/SendEmailCommand.java index bd292b56ec..50b58c4746 100644 --- a/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/SendEmailCommand.java +++ b/org.adempiere.server/src/main/servlet/org/adempiere/web/server/command/SendEmailCommand.java @@ -18,6 +18,7 @@ import java.util.Properties; import org.adempiere.exceptions.AdempiereException; import org.adempiere.util.RestletUtil; +import org.adempiere.util.ServerContext; import org.compiere.interfaces.impl.ServerBean; import org.compiere.util.EMail; import org.compiere.util.Env; @@ -53,17 +54,14 @@ public class SendEmailCommand extends ServerResource { EMail email = (EMail) entity.get("email"); ServerBean bean = new ServerBean(); - //back up properties - Properties backup = new Properties(); - backup.putAll(Env.getCtx()); try { - Env.setCtx(context); + ServerContext.setCurrentInstance(context); return bean.sendEMail(context, email); } finally { - Env.setCtx(backup); + ServerContext.dispose(); } } } diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java index dc2b6bc6f1..1e9ae64852 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java @@ -8,6 +8,7 @@ import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Properties; +import org.adempiere.util.ServerContext; import org.compiere.model.MUser; import org.compiere.util.CLogger; import org.compiere.util.DB; @@ -113,7 +114,7 @@ public class CompiereService { { CompiereUtil.initWeb(); - Env.setCtx(m_ctx); + ServerContext.setCurrentInstance(m_ctx); Env.setContext( m_ctx, "#AD_Language", "en_US" ); m_lang = Language.getLanguage("en_US"); From dce3b0d46f5447326b19a8cb35a9464cf35e62b5 Mon Sep 17 00:00:00 2001 From: Richard Morales Date: Tue, 18 Dec 2012 12:03:23 -0500 Subject: [PATCH 18/21] IDEMPIERE-455 Discover and fix FindBugs problems / Eclipse warning -> raw type --- .../org/compiere/server/AdempiereServer.java | 24 +++++++++++++++---- .../adempiere/webui/adwindow/ADTabpanel.java | 11 +++++---- .../webui/apps/form/WTreeMaintenance.java | 9 +++---- .../webui/component/ListModelTable.java | 6 ++--- .../webui/component/SimpleTreeModel.java | 3 +-- .../adinterface/ModelADServiceImpl.java | 4 ++-- .../webservices/AbstractService.java | 6 ++--- 7 files changed, 40 insertions(+), 23 deletions(-) diff --git a/org.adempiere.server/src/main/server/org/compiere/server/AdempiereServer.java b/org.adempiere.server/src/main/server/org/compiere/server/AdempiereServer.java index 330100a4e2..66d4fe90d8 100644 --- a/org.adempiere.server/src/main/server/org/compiere/server/AdempiereServer.java +++ b/org.adempiere.server/src/main/server/org/compiere/server/AdempiereServer.java @@ -102,8 +102,8 @@ public abstract class AdempiereServer implements Runnable /** Initial nap is seconds */ private int m_initialNap = 0; - /** Milliseconds to sleep - 10 Min default */ - protected long m_sleepMS = 600000; + /** Milliseconds to sleep - 0 Sec default */ + protected long m_sleepMS = 0; /** Sleeping */ private volatile boolean m_sleeping = true; /** Server start time */ @@ -178,6 +178,17 @@ public abstract class AdempiereServer implements Runnable */ public void run () { + final Thread currentThread = Thread.currentThread(); + final String oldThreadName = currentThread.getName(); + String newThreadName = getName(); + boolean renamed = false; + if (!oldThreadName.equals(newThreadName)) { + try { + currentThread.setName(newThreadName); + renamed = true; + } catch (SecurityException e) {} + } + m_sleeping = false; if (m_start == 0) m_start = System.currentTimeMillis(); @@ -202,7 +213,7 @@ public abstract class AdempiereServer implements Runnable lastRun = new Timestamp(p_startWork); } } - + m_nextWork = MSchedule.getNextRunMS(lastRun.getTime(), p_model.getScheduleType(), p_model.getFrequencyType(), p_model.getFrequency(), p_model.getCronPattern()); @@ -214,7 +225,12 @@ public abstract class AdempiereServer implements Runnable p_model.setDateLastRun(lastRun); p_model.setDateNextRun(new Timestamp(m_nextWork)); p_model.saveEx(); - m_sleeping = true; + m_sleeping = true; + if (renamed) { + // Revert the name back if the current thread was renamed. + // We do not check the exception here because we know it works. + currentThread.setName(oldThreadName); + } } // run /** diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java index a3568a00ea..8bf26b8cd0 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java @@ -82,6 +82,7 @@ import org.zkoss.zul.Div; import org.zkoss.zul.Separator; import org.zkoss.zul.Space; import org.zkoss.zul.Style; +import org.zkoss.zul.TreeModel; import org.zkoss.zul.Treeitem; import org.zkoss.zul.Vlayout; import org.zkoss.zul.West; @@ -1051,10 +1052,10 @@ DataStatusListener, IADTabpanel, IdSpace private void deleteNode(int recordId) { if (recordId <= 0) return; - SimpleTreeModel model = (SimpleTreeModel) treePanel.getTree().getModel(); + SimpleTreeModel model = (SimpleTreeModel)(TreeModel) treePanel.getTree().getModel(); if (treePanel.getTree().getSelectedItem() != null) { - DefaultTreeNode treeNode = (DefaultTreeNode) treePanel.getTree().getSelectedItem().getValue(); + DefaultTreeNode treeNode = treePanel.getTree().getSelectedItem().getValue(); MTreeNode data = (MTreeNode) treeNode.getData(); if (data.getNode_ID() == recordId) { model.removeNode(treeNode); @@ -1075,7 +1076,7 @@ DataStatusListener, IADTabpanel, IdSpace boolean summary = gridTab.getValueAsBoolean("IsSummary"); String imageIndicator = (String)gridTab.getValue("Action"); // Menu - Action // - SimpleTreeModel model = (SimpleTreeModel) treePanel.getTree().getModel(); + SimpleTreeModel model = (SimpleTreeModel)(TreeModel) treePanel.getTree().getModel(); DefaultTreeNode treeNode = model.getRoot(); MTreeNode root = (MTreeNode) treeNode.getData(); MTreeNode node = new MTreeNode (gridTab.getRecord_ID(), 0, name, description, @@ -1096,9 +1097,9 @@ DataStatusListener, IADTabpanel, IdSpace treePanel.getTree().onInitRender(); } - SimpleTreeModel model = (SimpleTreeModel) treePanel.getTree().getModel(); + SimpleTreeModel model = (SimpleTreeModel)(TreeModel) treePanel.getTree().getModel(); if (treePanel.getTree().getSelectedItem() != null) { - DefaultTreeNode treeNode = (DefaultTreeNode) treePanel.getTree().getSelectedItem().getValue(); + DefaultTreeNode treeNode = treePanel.getTree().getSelectedItem().getValue(); MTreeNode data = (MTreeNode) treeNode.getData(); if (data.getNode_ID() == recordId) { int[] path = model.getPath(treeNode); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java index 457155b666..eeea80f191 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WTreeMaintenance.java @@ -51,6 +51,7 @@ import org.zkoss.zul.DefaultTreeNode; import org.zkoss.zul.Space; import org.zkoss.zul.Splitter; import org.zkoss.zul.Tree; +import org.zkoss.zul.TreeModel; import org.zkoss.zul.TreeNode; import org.zkoss.zul.Treeitem; @@ -304,8 +305,8 @@ public class WTreeMaintenance extends TreeMaintenance implements IFormController log.info("Selected=" + selected); if (selected != null) // allow add if not in tree { - SimpleTreeModel tm = (SimpleTreeModel) centerTree.getModel(); - DefaultTreeNode stn = tm.find(tm.getRoot(), selected.id); + SimpleTreeModel tm = (SimpleTreeModel)(TreeModel) centerTree.getModel(); + DefaultTreeNode stn = tm.find(tm.getRoot(), selected.id); if (stn != null) { int[] path = tm.getPath(stn); Treeitem ti = centerTree.renderItemByPath(path); @@ -348,7 +349,7 @@ public class WTreeMaintenance extends TreeMaintenance implements IFormController log.info("Item=" + item); if (item != null) { - SimpleTreeModel model = (SimpleTreeModel) centerTree.getModel(); + SimpleTreeModel model = (SimpleTreeModel)(TreeModel) centerTree.getModel(); DefaultTreeNode stn = model.find(model.getRoot(), item.id); if (stn != null) { MTreeNode tNode = (MTreeNode) stn.getData(); @@ -377,7 +378,7 @@ public class WTreeMaintenance extends TreeMaintenance implements IFormController log.info("Item=" + item); if (item != null) { - SimpleTreeModel model = (SimpleTreeModel) centerTree.getModel(); + SimpleTreeModel model = (SimpleTreeModel)(TreeModel) centerTree.getModel(); DefaultTreeNode stn = model.find(model.getRoot(), item.id); if (stn != null) model.removeNode(stn); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ListModelTable.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ListModelTable.java index 43a4f03009..9ef4c49d09 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ListModelTable.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ListModelTable.java @@ -40,7 +40,7 @@ import org.zkoss.zul.event.ListDataEvent; * @author Andrew Kimball * */ -public class ListModelTable extends ListModelList implements ListModelExt +public class ListModelTable extends ListModelList implements ListModelExt { /** * @@ -117,7 +117,7 @@ public class ListModelTable extends ListModelList implements ListModelExt */ private void ensureRowSize() { - Iterator> rowIterator = (Iterator>)this.getInnerList().iterator(); + Iterator> rowIterator = (Iterator>)(Object)this.getInnerList().iterator(); while (rowIterator.hasNext()) { @@ -324,7 +324,7 @@ public class ListModelTable extends ListModelList implements ListModelExt * (non-Javadoc) * @see org.zkoss.zul.ListModelList#sort(java.util.Comparator, boolean) */ - public void sort(Comparator cmpr, boolean ascending) + public void sort(Comparator cmpr, boolean ascending) { if (sorter != null) sorter.sort(cmpr, ascending); diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/SimpleTreeModel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/SimpleTreeModel.java index f8fa62a87d..596116a26a 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/SimpleTreeModel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/SimpleTreeModel.java @@ -41,7 +41,7 @@ import org.zkoss.zul.event.TreeDataEvent; * @author Low Heng Sin * */ -public class SimpleTreeModel extends org.zkoss.zul.DefaultTreeModel implements TreeitemRenderer, EventListener { +public class SimpleTreeModel extends org.zkoss.zul.DefaultTreeModel implements TreeitemRenderer, EventListener { /** * @@ -174,7 +174,6 @@ public class SimpleTreeModel extends org.zkoss.zul.DefaultTreeModel implements T return (DefaultTreeNode) super.getRoot(); } - @Override public DefaultTreeNode getChild(Object parent, int index) { return (DefaultTreeNode) super.getChild((TreeNode)parent, index); } diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java index 64b3128d26..5d9a9bad33 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java @@ -953,7 +953,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic private void setValueAccordingToClass(PO po, POInfo poinfo, DataField field, int idxcol) { CompiereService m_cs = getCompiereService(); // Evaluate the type of the column and assign a proper variable - Class columnClass = poinfo.getColumnClass(idxcol); + Class columnClass = poinfo.getColumnClass(idxcol); Object value = null; String strValue = field.getVal(); String lookupValue = field.getLval(); @@ -1047,7 +1047,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic //Is ctx variable if (fieldInput.getAD_Column_ID() == 0 && fieldInput.getColumnName() != null) { String varName = fieldInput.getColumnName(); - Class columnClass = getVariableType(varName, fieldInput.getAD_Reference_ID()); + Class columnClass = getVariableType(varName, fieldInput.getAD_Reference_ID()); Object objVal = convertToObj(field.getVal(),columnClass,varName); requestCtx.put(varName, objVal); diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java index 2018b30ae9..54b45acd81 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java @@ -435,7 +435,7 @@ public class AbstractService { * @param m_webservicetype * @return */ - protected Object convertToObj(String strValue,Class columnClass,String colName){ + protected Object convertToObj(String strValue,Class columnClass,String colName){ Object value = null; @@ -494,8 +494,8 @@ public class AbstractService { * @param displayType * @return */ - protected Class getVariableType(String columnName,int displayType){ - Class ColumnClass= null; + protected Class getVariableType(String columnName,int displayType){ + Class ColumnClass= null; if (columnName.equals("AD_Language") || columnName.equals("EntityType")) { ColumnClass = String.class; From d442f2c04d9888135569dc54070f646515497c7e Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Wed, 19 Dec 2012 16:23:33 +0800 Subject: [PATCH 19/21] IDEMPIERE-92 - Integrate Selenium. Make more class test ready. Added test case for IDEMPIERE-520. --- .../ZkSuite/ProductionTest/content.txt | 32 ++++++++ .../ZkSuite/ProductionTest/properties.xml | 12 +++ .../ProductionTestEmptyTable/content.txt | 31 ++++++++ .../ProductionTestEmptyTable/properties.xml | 12 +++ .../webui/adwindow/ADWindowContent.java | 1 + .../adwindow/AbstractADWindowContent.java | 3 + .../adempiere/webui/adwindow/BreadCrumb.java | 1 + .../src/fitlibrary/zk/ZkFixture.java | 48 ++++++++++++ .../src/test/AbstractTestCase.java | 38 ++++++++++ .../src/test/ProductionTest.java | 75 +++++++++++++++++++ .../src/test/SelectTabTest.java | 2 +- 11 files changed, 254 insertions(+), 1 deletion(-) create mode 100644 fitnesse/FitNesseRoot/ZkSuite/ProductionTest/content.txt create mode 100644 fitnesse/FitNesseRoot/ZkSuite/ProductionTest/properties.xml create mode 100644 fitnesse/FitNesseRoot/ZkSuite/ProductionTestEmptyTable/content.txt create mode 100644 fitnesse/FitNesseRoot/ZkSuite/ProductionTestEmptyTable/properties.xml create mode 100644 org.idempiere.ui.zk.selenium/src/test/ProductionTest.java diff --git a/fitnesse/FitNesseRoot/ZkSuite/ProductionTest/content.txt b/fitnesse/FitNesseRoot/ZkSuite/ProductionTest/content.txt new file mode 100644 index 0000000000..8acfa8a923 --- /dev/null +++ b/fitnesse/FitNesseRoot/ZkSuite/ProductionTest/content.txt @@ -0,0 +1,32 @@ +'''IDEMPIERE-520 Master/Detail bugs found using Production window''' + +!include -c ZkGardenAdminLogin + +!define windowId {$Production__Single_Product__1} + +|''open window''|!-Production (Single Product)-!| +|''wait response''| +|''window''|${windowId}|''click toolbar''|!-BtnNew-!| +|''wait response''| +|''element exists''|${windowId} $detailPane @tabbox| +|''lookup''|${windowId} $Production $M_Product_ID|''search''|!-PatioSet-!| +|''wait response''| +|''with''|${windowId} $Production $ProductionQty @decimalbox|''set text''|!-1-!| +|''window''|${windowId}|''click toolbar''|!-BtnSave-!| +|''wait response''| +|''window message''|${windowId}|is|!-Record saved-!| +|''window''|${windowId}|''click detail toolbar''|!-BtnNew-!| +|''wait response''| +|''text of''|${windowId} $recordInfo|is|!-+*1/1-!| +|''window''|${windowId}|''click toolbar''|!-BtnParentRecord-!| +|''wait response''| +|''window''|${windowId}|''click process button''|!-CreateFrom-!| +|''wait response''| +|''click''|${windowId} @window[title="Create Production"] $Ok| +|''wait response''| +|''window''|${windowId}|''click detail toolbar''|!-BtnEdit-!| +|''wait response''| +|''element visible''|${windowId} $detailPane @tab| +|''window''|${windowId}|''next record''| +|''wait response''| +|''element invisible''|${windowId} $detailPane @tab| diff --git a/fitnesse/FitNesseRoot/ZkSuite/ProductionTest/properties.xml b/fitnesse/FitNesseRoot/ZkSuite/ProductionTest/properties.xml new file mode 100644 index 0000000000..3e87512357 --- /dev/null +++ b/fitnesse/FitNesseRoot/ZkSuite/ProductionTest/properties.xml @@ -0,0 +1,12 @@ + + + true + true + true + true + true + true + + true + true + diff --git a/fitnesse/FitNesseRoot/ZkSuite/ProductionTestEmptyTable/content.txt b/fitnesse/FitNesseRoot/ZkSuite/ProductionTestEmptyTable/content.txt new file mode 100644 index 0000000000..2ebfb7bcb0 --- /dev/null +++ b/fitnesse/FitNesseRoot/ZkSuite/ProductionTestEmptyTable/content.txt @@ -0,0 +1,31 @@ +'''IDEMPIERE-520 Master/Detail bugs found using Production window''' + +!include -c ZkGardenAdminLogin + +!define windowId {$Production__Single_Product__1} + +|''open window''|!-Production (Single Product)-!| +|''wait response''| +|''element exists''|${windowId} $detailPane @tabbox| +|''lookup''|${windowId} $Production $M_Product_ID|''search''|!-PatioSet-!| +|''wait response''| +|''with''|${windowId} $Production $ProductionQty @decimalbox|''set text''|!-1-!| +|''window''|${windowId}|''click toolbar''|!-BtnSave-!| +|''wait response''| +|''window message''|${windowId}|is|!-Record saved-!| +|''window''|${windowId}|''click detail toolbar''|!-BtnNew-!| +|''wait response''| +|''text of''|${windowId} $recordInfo|is|!-+*1/1-!| +|''window''|${windowId}|''click toolbar''|!-BtnParentRecord-!| +|''wait response''| +|''window''|${windowId}|''click process button''|!-CreateFrom-!| +|''wait response''| +|''click''|${windowId} @window[title="Create Production"] $Ok| +|''wait response''| +|''window''|${windowId}|''click detail toolbar''|!-BtnEdit-!| +|''wait response''| +|''element visible''|${windowId} $detailPane @tab| +|''window''|${windowId}|''next record''| +|''wait response''| +|''element invisible''|${windowId} $detailPane @tab| + diff --git a/fitnesse/FitNesseRoot/ZkSuite/ProductionTestEmptyTable/properties.xml b/fitnesse/FitNesseRoot/ZkSuite/ProductionTestEmptyTable/properties.xml new file mode 100644 index 0000000000..3e87512357 --- /dev/null +++ b/fitnesse/FitNesseRoot/ZkSuite/ProductionTestEmptyTable/properties.xml @@ -0,0 +1,12 @@ + + + true + true + true + true + true + true + + true + true + diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADWindowContent.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADWindowContent.java index 48ea779551..5f57941945 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADWindowContent.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADWindowContent.java @@ -92,6 +92,7 @@ public class ADWindowContent extends AbstractADWindowContent toolbar.setWindowNo(getWindowNo()); breadCrumb = new BreadCrumb(getWindowNo()); breadCrumb.setToolbarListener(this); + breadCrumb.setId("breadCrumb"); div.appendChild(breadCrumb); //status bar diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java index c3d383bd17..6dc1fafce8 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/AbstractADWindowContent.java @@ -33,6 +33,7 @@ import java.util.TreeMap; import java.util.logging.Level; import org.adempiere.util.Callback; +import org.adempiere.webui.AdempiereIdGenerator; import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.WArchive; @@ -232,6 +233,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements { /** Initalise toolbar */ toolbar = new ADWindowToolbar(getWindowNo()); + toolbar.setId("windowToolbar"); toolbar.addListener(this); statusBar = new StatusBar(); @@ -2374,6 +2376,7 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements { Clients.showBusy(getComponent(), " "); final WCreateFromWindow window = (WCreateFromWindow) cf.getWindow(); + window.setWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME, AdempiereIdGenerator.escapeId(window.getTitle())); window.addEventListener(DialogEvents.ON_WINDOW_CLOSE, new EventListener() { @Override public void onEvent(Event event) throws Exception { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/BreadCrumb.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/BreadCrumb.java index db84e85855..0c0539f127 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/BreadCrumb.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/BreadCrumb.java @@ -132,6 +132,7 @@ public class BreadCrumb extends Div implements EventListener { btnRecordInfo.setTooltiptext(Util.cleanAmp(Msg.getMsg(Env.getCtx(), "Who"))); btnRecordInfo.addEventListener(Events.ON_CLICK, this); btnRecordInfo.setSclass("breadcrumb-record-info link"); + btnRecordInfo.setId("recordInfo"); toolbar.appendChild(btnRecordInfo); btnNext = createButton("Next", "Next", "Next"); toolbar.appendChild(btnNext); diff --git a/org.idempiere.ui.zk.selenium/src/fitlibrary/zk/ZkFixture.java b/org.idempiere.ui.zk.selenium/src/fitlibrary/zk/ZkFixture.java index 17f25b78d1..8a8d1bb139 100644 --- a/org.idempiere.ui.zk.selenium/src/fitlibrary/zk/ZkFixture.java +++ b/org.idempiere.ui.zk.selenium/src/fitlibrary/zk/ZkFixture.java @@ -98,6 +98,54 @@ public class ZkFixture extends SpiderFixture { return (String) widget.eval(webDriver, "getSelectedTab().getLabel()"); } + //--- Search (lookup) -- + @SimpleAction(wiki = "|''lookup''|xpath, id or other locator|''search''|value|", tooltip = "Search lookup with value.") + public void lookupSearch(String locator, String value) { + Widget widget = new Widget(locator + " @textbox"); + WebElement element = widget.findElement(webDriver); + element.click(); + widget.execute(webDriver, "setValue('"+value+"')"); + widget.execute(webDriver, "fireOnChange()"); + } + + // ---- window ( tab ) --- + @SimpleAction(wiki = "|''open window''|menu label|", tooltip = "Open window with label.") + public void openWindow(String label) { + comboboxSelectItem("$treeSearchCombo", label); + } + + @SimpleAction(wiki = "|''window''|xpath, id or other locator|''click process button''|button id|", tooltip = "Click a window's process button.") + public void windowClickProcessButton(String windowLocator, String btnId) { + click(windowLocator + " $windowToolbar $BtnProcess"); + waitResponse(); + click("@window[instanceName=\"processButtonPopup\"] $" + btnId); + } + + @SimpleAction(wiki = "|''window''|xpath, id or other locator|''click toolbar''|value|", tooltip = "Click a window's toolbar button") + public void windowClickToolbar(String windowLocator, String toolbarButtonId) { + click(windowLocator + " $windowToolbar $" + toolbarButtonId); + } + + @SimpleAction(wiki = "|''window''|xpath, id or other locator|''click detail toolbar''|value|", tooltip = "Click the detailpane's toolbar button") + public void windowClickDetailToolbar(String windowLocator, String toolbarButtonId) { + click(windowLocator + " $detailPane $" + toolbarButtonId + ":visible"); + } + + @SimpleAction(wiki = "|''window message''|xpath, id or other locator|", tooltip = "Current status message display for a window") + public String windowMessage(String windowLocator) { + return webDriver.findElement(Zk.jq(windowLocator +" $messages @label")).getText(); + } + + @SimpleAction(wiki = "|''window''|xpath, id or other locator|''next record''|value|", tooltip = "Navigate to next record.") + public void windowNextRecord(String windowLocator) { + click(windowLocator+" $breadCrumb $Next"); + } + + @SimpleAction(wiki = "|''window''|xpath, id or other locator|''previous record''|value|", tooltip = "Navigate to previous record.") + public void windowPreviousRecord(String windowLocator) { + click(windowLocator+" $breadCrumb $Previous"); + } + // -------- Wait Ajax Response ----- @SimpleAction(wiki = "|''wait response''|", tooltip = "Wait for ajax response with default timeout value.") public void waitResponse() { diff --git a/org.idempiere.ui.zk.selenium/src/test/AbstractTestCase.java b/org.idempiere.ui.zk.selenium/src/test/AbstractTestCase.java index e52f66023b..88537adca9 100644 --- a/org.idempiere.ui.zk.selenium/src/test/AbstractTestCase.java +++ b/org.idempiere.ui.zk.selenium/src/test/AbstractTestCase.java @@ -53,6 +53,14 @@ public class AbstractTestCase { element.click(); } + protected void search(String locator, String label) { + Widget widget = new Widget(locator + " @textbox"); + WebElement element = widget.findElement(driver); + element.click(); + widget.execute(driver, "setValue('"+label+"')"); + widget.execute(driver, "fireOnChange()"); + } + protected void selectCheckbox(String locator, boolean select) { final WebElement element = driver.findElement(Zk.jq("$"+locator+" ~ input")); if (element.isSelected()) { @@ -204,6 +212,36 @@ public class AbstractTestCase { return false; } } + + protected void openWindow(String label) { + comboboxSelectItem("$treeSearchCombo", label); + } + + protected void clickProcessButton(String windowId, String btnId) { + clickButton("$"+windowId + " $windowToolbar $BtnProcess"); + waitResponse(); + clickButton("@window[instanceName=\"processButtonPopup\"] $" + btnId); + } + + protected void clickToolbarButton(String windowId, String toolBarButtonId) { + clickButton("$" + windowId + " $windowToolbar $" + toolBarButtonId); + } + + protected void clickDetailToolbarButton(String windowId, String toolBarButtonId) { + clickButton("$" + windowId + " $detailPane $" + toolBarButtonId + ":visible"); + } + + protected WebElement getWindowMessageLabel(String windowId) { + return driver.findElement(Zk.jq("$"+windowId +" $messages @label")); + } + + protected void nextRecord(String windowId) { + clickButton("$"+windowId+" $breadCrumb $Next"); + } + + protected void previousRecord(String windowId) { + clickButton("$"+windowId+" $breadCrumb $Previous"); + } @After public void tearDown() throws Exception { diff --git a/org.idempiere.ui.zk.selenium/src/test/ProductionTest.java b/org.idempiere.ui.zk.selenium/src/test/ProductionTest.java new file mode 100644 index 0000000000..9191f0f182 --- /dev/null +++ b/org.idempiere.ui.zk.selenium/src/test/ProductionTest.java @@ -0,0 +1,75 @@ +package test; + +import org.idempiere.ui.zk.selenium.Zk; +import org.junit.Test; + +import static org.junit.Assert.*; +import org.openqa.selenium.WebElement; + +/** + * Test case for http://jira.idempiere.com/browse/IDEMPIERE-520 + * @author hengsin + * + */ +public class ProductionTest extends AbstractTestCase { + + @Test + public void testIDempiere520() throws Exception { + login(); + + String windowId = "Production__Single_Product__1"; + + openWindow("Production (Single Product)"); + + waitResponse(); + + //check detail is shown for new record + WebElement element = driver.findElement(Zk.jq("$"+windowId+" $detailPane @tabbox")); + + assertTrue(element != null && element.isDisplayed()); + + search("$"+windowId+" $Production $M_Product_ID", "PatioSet"); + waitResponse(); + + type("$"+windowId+" $Production $ProductionQty @decimalbox", "1"); + + + clickToolbarButton(windowId, "BtnSave"); + waitResponse(); + + //verify save successfull + element = getWindowMessageLabel(windowId); + assertTrue("Record saved".equals(element.getText())); + + clickDetailToolbarButton(windowId, "BtnNew"); + + //verify +*1/1 for is shown for new record + waitResponse(); + element = driver.findElement(Zk.jq("$"+windowId+" $recordInfo")); + assertEquals("+*1/1", element.getText()); + + //test for npe + clickToolbarButton(windowId, "BtnParentRecord"); + waitResponse(); + + //create production lines + clickProcessButton(windowId, "CreateFrom"); + waitResponse(); + clickButton("$"+windowId+" @window[title=\"Create Production\"] $Ok"); + waitResponse(); + + clickDetailToolbarButton(windowId, "BtnEdit"); + waitResponse(); + + //verify qc tab visible for first record + element = driver.findElement(Zk.jq("$"+windowId+" $detailPane @tab")); + assertTrue(element != null && element.isDisplayed()); + + nextRecord(windowId); + waitResponse(); + + //verify qc tab is invisible for first record + element = driver.findElement(Zk.jq("$"+windowId+" $detailPane @tab")); + assertTrue(element == null || !element.isDisplayed()); + } +} diff --git a/org.idempiere.ui.zk.selenium/src/test/SelectTabTest.java b/org.idempiere.ui.zk.selenium/src/test/SelectTabTest.java index d580ca30bd..f5fe8b26d5 100644 --- a/org.idempiere.ui.zk.selenium/src/test/SelectTabTest.java +++ b/org.idempiere.ui.zk.selenium/src/test/SelectTabTest.java @@ -16,7 +16,7 @@ public class SelectTabTest extends AbstractTestCase { public void testSelectTab() throws Exception { login(); waitResponse(); - comboboxSelectItem("$treeSearchCombo", "Product"); + openWindow("Product"); waitResponse(); clickButton("$findWindow_1 $simpleSearch $btnOk"); waitResponse(); From 4d6203f007040e5f0fd6dc4c2840236695319af4 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Wed, 19 Dec 2012 17:15:23 +0800 Subject: [PATCH 20/21] 1001804 Issue about cache with load balancer. List members in the cluster in About window. --- .../src/org/compiere/util/CLogMgt.java | 22 +++++++++++++++++++ .../idempiere/distributed/IClusterMember.java | 1 + .../hazelcast/service/ClusterMember.java | 15 ++++++++++++- .../hazelcast/service/ClusterServiceImpl.java | 4 ++-- 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/org.adempiere.base/src/org/compiere/util/CLogMgt.java b/org.adempiere.base/src/org/compiere/util/CLogMgt.java index 49b3fb372d..e74a46ad2c 100644 --- a/org.adempiere.base/src/org/compiere/util/CLogMgt.java +++ b/org.adempiere.base/src/org/compiere/util/CLogMgt.java @@ -23,6 +23,7 @@ import java.net.InetAddress; import java.sql.DriverManager; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Enumeration; import java.util.Iterator; import java.util.List; @@ -35,9 +36,12 @@ import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; +import org.adempiere.base.Service; import org.compiere.Adempiere; import org.compiere.db.CConnection; import org.compiere.model.MClient; +import org.idempiere.distributed.IClusterMember; +import org.idempiere.distributed.IClusterService; /** @@ -542,6 +546,24 @@ public class CLogMgt //thread info sb.append("Active Threads = " + Thread.activeCount()); // + //cluster info + if (Env.getAD_Client_ID(Env.getCtx()) == 0) { + IClusterService service = Service.locator().locate(IClusterService.class).getService(); + if (service != null) { + IClusterMember local = service.getLocalMember(); + Collection members = service.getMembers(); + if (!members.isEmpty()) + sb.append(NL).append("Cluster Nodes:").append(NL); + for(IClusterMember member : members) { + sb.append(member.toString()); + if (local != null && member.getId().equals(local.getId())) { + sb.append(" *"); + } + sb.append(NL); + } + } + } + return sb; } // getInfo diff --git a/org.adempiere.base/src/org/idempiere/distributed/IClusterMember.java b/org.adempiere.base/src/org/idempiere/distributed/IClusterMember.java index 0e9362796c..ceb56e344f 100644 --- a/org.adempiere.base/src/org/idempiere/distributed/IClusterMember.java +++ b/org.adempiere.base/src/org/idempiere/distributed/IClusterMember.java @@ -5,4 +5,5 @@ import java.net.InetAddress; public interface IClusterMember { public String getId(); public InetAddress getAddress(); + public int getPort(); } diff --git a/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/ClusterMember.java b/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/ClusterMember.java index cbd8f1bb71..73d33b389f 100644 --- a/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/ClusterMember.java +++ b/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/ClusterMember.java @@ -25,14 +25,16 @@ public class ClusterMember implements IClusterMember { private String id; private InetAddress address; + private int port; /** * @param id * @param address */ - public ClusterMember(String id, InetAddress address) { + public ClusterMember(String id, InetAddress address, int port) { this.id = id; this.address = address; + this.port = port; } /* (non-Javadoc) @@ -51,4 +53,15 @@ public class ClusterMember implements IClusterMember { return address; } + @Override + public int getPort() { + return port; + } + + @Override + public String toString() { + return getAddress().getHostAddress()+":"+getPort()+" "+id; + } + + } diff --git a/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/ClusterServiceImpl.java b/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/ClusterServiceImpl.java index 1a4ecd69d9..5ae7bdc0cf 100644 --- a/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/ClusterServiceImpl.java +++ b/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/ClusterServiceImpl.java @@ -40,7 +40,7 @@ public class ClusterServiceImpl implements IClusterService { Set members = Activator.getHazelcastInstance().getCluster().getMembers(); Set clusterMembers = new HashSet(); for(Member member : members) { - clusterMembers.add(new ClusterMember(member.getUuid(), member.getInetSocketAddress().getAddress())); + clusterMembers.add(new ClusterMember(member.getUuid(), member.getInetSocketAddress().getAddress(), member.getInetSocketAddress().getPort())); } return clusterMembers; } @@ -51,7 +51,7 @@ public class ClusterServiceImpl implements IClusterService { @Override public IClusterMember getLocalMember() { Member member = Activator.getHazelcastInstance().getCluster().getLocalMember(); - return new ClusterMember(member.getUuid(), member.getInetSocketAddress().getAddress()); + return new ClusterMember(member.getUuid(), member.getInetSocketAddress().getAddress(), member.getInetSocketAddress().getPort()); } /* (non-Javadoc) From 095aa767146f276f62e5a39f562015b26d35c955 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Wed, 19 Dec 2012 18:18:26 +0800 Subject: [PATCH 21/21] 1001804 Issue about cache with load balancer. Use hazelcast.xml from IDEMPIERE_HOME if available. --- .../hazelcast/service/Activator.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/Activator.java b/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/Activator.java index 853fd80b18..b84fc63eba 100644 --- a/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/Activator.java +++ b/org.idempiere.hazelcast.service/src/org/idempiere/hazelcast/service/Activator.java @@ -13,6 +13,10 @@ *****************************************************************************/ package org.idempiere.hazelcast.service; +import java.io.File; +import java.io.FileNotFoundException; +import java.net.MalformedURLException; +import java.net.URL; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -24,6 +28,8 @@ import org.compiere.model.ServerStateChangeListener; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; +import com.hazelcast.config.Config; +import com.hazelcast.config.FileSystemXmlConfig; import com.hazelcast.core.*; /** @@ -68,6 +74,21 @@ public class Activator implements BundleActivator { Future future = executor.submit(new Runnable() { @Override public void run() { + String dataArea = System.getProperty("osgi.install.area"); + if (dataArea != null && dataArea.trim().length() > 0) { + try { + URL url = new URL(dataArea); + File file = new File(url.getPath(), "hazelcast.xml"); + if (file.exists()) { + try { + Config config = new FileSystemXmlConfig(file); + hazelcastInstance = Hazelcast.newHazelcastInstance(config); + return; + } catch (FileNotFoundException e) {} + } + } catch (MalformedURLException e1) { + } + } hazelcastInstance = Hazelcast.newHazelcastInstance(null); } });