From e51ad389e70a6c53eba518de241992b5aaf30ec5 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Mon, 21 Mar 2016 23:41:04 +0100 Subject: [PATCH 01/15] IDEMPIERE-3052 Advanced Search on doctype on invoices or orders shows all the doctypes --- migration/i3.1/oracle/201603212338_IDEMPIERE-3052.sql | 11 +++++++++++ .../i3.1/postgresql/201603212338_IDEMPIERE-3052.sql | 8 ++++++++ 2 files changed, 19 insertions(+) create mode 100644 migration/i3.1/oracle/201603212338_IDEMPIERE-3052.sql create mode 100644 migration/i3.1/postgresql/201603212338_IDEMPIERE-3052.sql diff --git a/migration/i3.1/oracle/201603212338_IDEMPIERE-3052.sql b/migration/i3.1/oracle/201603212338_IDEMPIERE-3052.sql new file mode 100644 index 0000000000..e30068b75e --- /dev/null +++ b/migration/i3.1/oracle/201603212338_IDEMPIERE-3052.sql @@ -0,0 +1,11 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-3052 Advanced Search on doctype on invoices or orders shows all the doctypes +-- Mar 21, 2016 11:38:20 PM CET +UPDATE AD_Val_Rule SET Code='C_DocType.DocBaseType IN (''SOO'', ''POO'') AND C_DocType.IsSOTrx=''@IsSOTrx@'' AND COALESCE(C_DocType.DocSubTypeSO,'' '')<>''RM'' AND C_DocType.AD_Client_ID=@#AD_Client_ID@',Updated=TO_DATE('2016-03-21 23:38:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=133 +; + +SELECT register_migration_script('201603212338_IDEMPIERE-3052.sql') FROM dual +; + diff --git a/migration/i3.1/postgresql/201603212338_IDEMPIERE-3052.sql b/migration/i3.1/postgresql/201603212338_IDEMPIERE-3052.sql new file mode 100644 index 0000000000..aa7aae1c85 --- /dev/null +++ b/migration/i3.1/postgresql/201603212338_IDEMPIERE-3052.sql @@ -0,0 +1,8 @@ +-- IDEMPIERE-3052 Advanced Search on doctype on invoices or orders shows all the doctypes +-- Mar 21, 2016 11:38:20 PM CET +UPDATE AD_Val_Rule SET Code='C_DocType.DocBaseType IN (''SOO'', ''POO'') AND C_DocType.IsSOTrx=''@IsSOTrx@'' AND COALESCE(C_DocType.DocSubTypeSO,'' '')<>''RM'' AND C_DocType.AD_Client_ID=@#AD_Client_ID@',Updated=TO_TIMESTAMP('2016-03-21 23:38:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Val_Rule_ID=133 +; + +SELECT register_migration_script('201603212338_IDEMPIERE-3052.sql') FROM dual +; + From 18e494fd12b7d591f3b1eb7589dcee6416621176 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Tue, 22 Mar 2016 19:12:26 +0100 Subject: [PATCH 02/15] IDEMPIERE-3057 2Pack handler for SQL Statements that must not fail --- .../oracle/201603221737_IDEMPIERE-3057.sql | 19 +++ .../201603221737_IDEMPIERE-3057.sql | 16 ++ .../model/X_AD_Package_Exp_Detail.java | 4 +- org.adempiere.pipo.handlers/plugin.xml | 4 + .../handler/SQLMandatoryElementHandler.java | 142 ++++++++++++++++++ .../handler/SQLStatementElementHandler.java | 4 +- .../org/adempiere/pipo2/PackOutProcess.java | 4 +- 7 files changed, 189 insertions(+), 4 deletions(-) create mode 100644 migration/i3.1/oracle/201603221737_IDEMPIERE-3057.sql create mode 100644 migration/i3.1/postgresql/201603221737_IDEMPIERE-3057.sql create mode 100644 org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/SQLMandatoryElementHandler.java diff --git a/migration/i3.1/oracle/201603221737_IDEMPIERE-3057.sql b/migration/i3.1/oracle/201603221737_IDEMPIERE-3057.sql new file mode 100644 index 0000000000..7de443ebf7 --- /dev/null +++ b/migration/i3.1/oracle/201603221737_IDEMPIERE-3057.sql @@ -0,0 +1,19 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-3057 2Pack handler for SQL Statements that must not fail +-- Mar 22, 2016 5:34:50 PM CET +INSERT INTO AD_Ref_List (AD_Ref_List_ID,Name,AD_Reference_ID,Value,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Ref_List_UU) VALUES (200356,'SQL Mandatory',50004,'SQM',0,0,'Y',TO_DATE('2016-03-22 17:34:50','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2016-03-22 17:34:50','YYYY-MM-DD HH24:MI:SS'),100,'D','63605262-3ba3-4140-b839-4e5b0f8ad23d') +; + +-- Mar 22, 2016 5:35:42 PM CET +UPDATE AD_Field SET DisplayLogic='@Type@=''D''|Type@=''SQL''|Type@=''SQM''',Updated=TO_DATE('2016-03-22 17:35:42','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=50105 +; + +-- Mar 22, 2016 5:39:53 PM CET +UPDATE AD_Field SET DisplayLogic='@Type@=''SQL''|@Type@=''SQM''',Updated=TO_DATE('2016-03-22 17:39:53','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=50104 +; + +SELECT register_migration_script('201603221737_IDEMPIERE-3057.sql') FROM dual +; + diff --git a/migration/i3.1/postgresql/201603221737_IDEMPIERE-3057.sql b/migration/i3.1/postgresql/201603221737_IDEMPIERE-3057.sql new file mode 100644 index 0000000000..4a00c24928 --- /dev/null +++ b/migration/i3.1/postgresql/201603221737_IDEMPIERE-3057.sql @@ -0,0 +1,16 @@ +-- IDEMPIERE-3057 2Pack handler for SQL Statements that must not fail +-- Mar 22, 2016 5:34:50 PM CET +INSERT INTO AD_Ref_List (AD_Ref_List_ID,Name,AD_Reference_ID,Value,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,EntityType,AD_Ref_List_UU) VALUES (200356,'SQL Mandatory',50004,'SQM',0,0,'Y',TO_TIMESTAMP('2016-03-22 17:34:50','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2016-03-22 17:34:50','YYYY-MM-DD HH24:MI:SS'),100,'D','63605262-3ba3-4140-b839-4e5b0f8ad23d') +; + +-- Mar 22, 2016 5:35:42 PM CET +UPDATE AD_Field SET DisplayLogic='@Type@=''D''|Type@=''SQL''|Type@=''SQM''',Updated=TO_TIMESTAMP('2016-03-22 17:35:42','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=50105 +; + +-- Mar 22, 2016 5:39:53 PM CET +UPDATE AD_Field SET DisplayLogic='@Type@=''SQL''|@Type@=''SQM''',Updated=TO_TIMESTAMP('2016-03-22 17:39:53','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=50104 +; + +SELECT register_migration_script('201603221737_IDEMPIERE-3057.sql') FROM dual +; + diff --git a/org.adempiere.base/src/org/compiere/model/X_AD_Package_Exp_Detail.java b/org.adempiere.base/src/org/compiere/model/X_AD_Package_Exp_Detail.java index 36d400f806..79d2e829c8 100644 --- a/org.adempiere.base/src/org/compiere/model/X_AD_Package_Exp_Detail.java +++ b/org.adempiere.base/src/org/compiere/model/X_AD_Package_Exp_Detail.java @@ -30,7 +30,7 @@ public class X_AD_Package_Exp_Detail extends PO implements I_AD_Package_Exp_Deta /** * */ - private static final long serialVersionUID = 20151030L; + private static final long serialVersionUID = 20160322L; /** Standard Constructor */ public X_AD_Package_Exp_Detail (Properties ctx, int AD_Package_Exp_Detail_ID, String trxName) @@ -913,6 +913,8 @@ public class X_AD_Package_Exp_Detail extends PO implements I_AD_Package_Exp_Deta public static final String TYPE_ModelValidator = "MV"; /** Entity Type = ET */ public static final String TYPE_EntityType = "ET"; + /** SQL Mandatory = SQM */ + public static final String TYPE_SQLMandatory = "SQM"; /** Set Type. @param Type Type of Validation (SQL, Java Script, Java Language) diff --git a/org.adempiere.pipo.handlers/plugin.xml b/org.adempiere.pipo.handlers/plugin.xml index 911e41bc7d..20e921045b 100644 --- a/org.adempiere.pipo.handlers/plugin.xml +++ b/org.adempiere.pipo.handlers/plugin.xml @@ -152,6 +152,10 @@ class="org.adempiere.pipo2.handler.SQLStatementElementHandler" id="SQLStatement"> + + diff --git a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/SQLMandatoryElementHandler.java b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/SQLMandatoryElementHandler.java new file mode 100644 index 0000000000..8de3d8e3f5 --- /dev/null +++ b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/SQLMandatoryElementHandler.java @@ -0,0 +1,142 @@ +/********************************************************************** +* This file is part of iDempiere ERP Open Source * +* http://www.idempiere.org * +* * +* Copyright (C) Contributors * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * +* MA 02110-1301, USA. * +* * +* Contributors: * +* - Trek Global * +* - Carlos Ruiz - globalqss * +**********************************************************************/ + +package org.adempiere.pipo2.handler; + +import java.sql.PreparedStatement; +import java.sql.Statement; +import java.util.logging.Level; + +import javax.xml.transform.sax.TransformerHandler; + +import org.adempiere.exceptions.AdempiereException; +import org.adempiere.pipo2.AbstractElementHandler; +import org.adempiere.pipo2.Element; +import org.adempiere.pipo2.PIPOContext; +import org.adempiere.pipo2.PackOut; +import org.adempiere.pipo2.PackoutItem; +import org.adempiere.pipo2.SQLElementParameters; +import org.compiere.model.X_AD_Package_Imp_Detail; +import org.compiere.util.DB; +import org.compiere.util.Env; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.AttributesImpl; + +public class SQLMandatoryElementHandler extends AbstractElementHandler { + + public void startElement(PIPOContext ctx, Element element) throws SAXException { + String elementValue = element.getElementValue(); + + log.info(elementValue); + String DBType = getStringValue(element, "DBType"); + String sql = getStringValue(element, "statement"); + if (sql.endsWith(";") && !(sql.toLowerCase().endsWith("end;"))) + sql = sql.substring(0, sql.length() - 1); + sql = Env.parseContext(Env.getCtx(), 0, sql, false); + PreparedStatement pstmt = null; + X_AD_Package_Imp_Detail impDetail = createImportDetail(ctx, element.qName, "", 0); + try { + pstmt = DB.prepareStatement(sql, getTrxName(ctx)); + if (DBType.equals("ALL")) { + int n = pstmt.executeUpdate(); + if (log.isLoggable(Level.INFO)) log.info("Executed SQL Mandatory: "+ getStringValue(element, "statement") + " ReturnValue="+n); + } else if (DB.isOracle() && DBType.equals("Oracle")) { + int n = pstmt.executeUpdate(); + if (log.isLoggable(Level.INFO)) log.info("Executed SQL Mandatory for Oracle: "+ getStringValue(element, "statement") + " ReturnValue="+n); + } else if (DB.isPostgreSQL() + && ( DBType.equals("Postgres") + || DBType.equals("PostgreSQL") // backward compatibility with old packages developed by hand + ) + ) { + // Avoid convert layer - command specific for postgresql + // + // pstmt = DB.prepareStatement(sql, getTrxName(ctx)); + // pstmt.executeUpdate(); + // + Statement stmt = null; + try { + stmt = pstmt.getConnection().createStatement(); + int n = stmt.executeUpdate (sql); + if (log.isLoggable(Level.INFO)) log.info("Executed SQL Mandatory for PostgreSQL: "+ getStringValue(element,"statement") + " ReturnValue="+n); + } finally { + DB.close(stmt); + stmt = null; + } + } + logImportDetail (ctx, impDetail, 1, "SQLMandatory",1,"Execute"); + ctx.packIn.getNotifier().addSuccessLine("-> " + sql); + } catch (Exception e) { + ctx.packIn.getNotifier().addFailureLine("SQL Mandatory failed, error (" + e.getLocalizedMessage() + "):"); + logImportDetail (ctx, impDetail, 0, "SQLMandatory",1,"Execute"); + ctx.packIn.getNotifier().addFailureLine("-> " + sql); + log.log(Level.SEVERE,"SQLMandatory", e); + throw new AdempiereException(e); + } finally { + DB.close(pstmt); + pstmt = null; + } + } + + public void endElement(PIPOContext ctx, Element element) throws SAXException { + } + + public void create(PIPOContext ctx, TransformerHandler document) + throws SAXException { + String SQLMandatory = Env.getContext(ctx.ctx, SQLElementParameters.SQL_STATEMENT); + String DBType = Env.getContext(ctx.ctx, SQLElementParameters.DB_TYPE); + AttributesImpl atts = new AttributesImpl(); + addTypeName(atts, "custom"); + document.startElement("","","SQLMandatory",atts); + createSQLStatmentBinding(document, SQLMandatory, DBType); + document.endElement("","","SQLMandatory"); + } + + private void createSQLStatmentBinding( TransformerHandler document, String sqlMandatory, String DBType) throws SAXException + { + document.startElement("","","DBType", new AttributesImpl()); + char[] contents = DBType.toCharArray(); + document.characters(contents,0,contents.length); + document.endElement("","","DBType"); + + document.startElement("","","statement", new AttributesImpl()); + contents = sqlMandatory.toCharArray(); + document.startCDATA(); + document.characters(contents,0,contents.length); + document.endCDATA(); + document.endElement("","","statement"); + + } + + public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int field) throws Exception + { + PackoutItem detail = packout.getCurrentPackoutItem(); + Env.setContext(packout.getCtx().ctx, SQLElementParameters.SQL_STATEMENT, (String)detail.getProperty(SQLElementParameters.SQL_STATEMENT)); + Env.setContext(packout.getCtx().ctx, SQLElementParameters.DB_TYPE, (String)detail.getProperty(SQLElementParameters.DB_TYPE)); + this.create(packout.getCtx(), packoutHandler); + packout.getCtx().ctx.remove(SQLElementParameters.SQL_STATEMENT); + packout.getCtx().ctx.remove(SQLElementParameters.DB_TYPE); + } +} diff --git a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/SQLStatementElementHandler.java b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/SQLStatementElementHandler.java index cf88b9cec9..fab99602f2 100644 --- a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/SQLStatementElementHandler.java +++ b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/SQLStatementElementHandler.java @@ -104,10 +104,10 @@ public class SQLStatementElementHandler extends AbstractElementHandler { } savepoint = null; } - ctx.packIn.getNotifier().addFailureLine("SQL statement failed but ignored, error (" + e.getLocalizedMessage() + "): " + sql); + ctx.packIn.getNotifier().addFailureLine("SQL statement failed but ignored, error (" + e.getLocalizedMessage() + "): "); logImportDetail (ctx, impDetail, 0, "SQLStatement",1,"Execute"); ctx.packIn.getNotifier().addFailureLine("-> " + sql); - log.log(Level.SEVERE,"SQLSatement", e); + log.log(Level.SEVERE,"SQLStatement", e); } finally { DB.close(pstmt); pstmt = null; diff --git a/org.adempiere.pipo/src/org/adempiere/pipo2/PackOutProcess.java b/org.adempiere.pipo/src/org/adempiere/pipo2/PackOutProcess.java index dc3fe229b6..d6ffe9d340 100644 --- a/org.adempiere.pipo/src/org/adempiere/pipo2/PackOutProcess.java +++ b/org.adempiere.pipo/src/org/adempiere/pipo2/PackOutProcess.java @@ -183,6 +183,8 @@ public class PackOutProcess extends SvrProcess return I_AD_Role.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_SQLStatement.equals(type)) return "SQLStatement"; + else if (X_AD_Package_Exp_Detail.TYPE_SQLMandatory.equals(type)) + return "SQLMandatory"; else if (X_AD_Package_Exp_Detail.TYPE_Table.equals(type)) return I_AD_Table.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_Window.equals(type)) @@ -202,7 +204,7 @@ public class PackOutProcess extends SvrProcess if (MPackageExpDetail.TYPE_Data.equals(type)) { properties.put(DataElementParameters.AD_TABLE_ID, dtl.getAD_Table_ID()); properties.put(DataElementParameters.SQL_STATEMENT, dtl.getSQLStatement()); - } else if (MPackageExpDetail.TYPE_SQLStatement.equals(type)) { + } else if (MPackageExpDetail.TYPE_SQLStatement.equals(type) || MPackageExpDetail.TYPE_SQLMandatory.equals(type)) { properties.put(SQLElementParameters.SQL_STATEMENT, dtl.getSQLStatement()); properties.put(SQLElementParameters.DB_TYPE, dtl.getDBType()); } else if (MPackageExpDetail.TYPE_File_CodeOrOther.equals(type)) { From b716da12a91aeaff84c2a4ccc379cfa0462f78b4 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Tue, 22 Mar 2016 22:47:34 +0100 Subject: [PATCH 03/15] IDEMPIERE-2266 ZK7 - MSession.load: NO Data found for AD_Session_ID --- .../org/adempiere/webui/panel/LoginPanel.java | 62 ++++++++++--------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java index 341b6b7ba3..f92dbecaeb 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java @@ -150,36 +150,40 @@ public class LoginPanel extends Window implements EventListener try { int AD_Session_ID = Integer.parseInt(data[0]); - MSession session = new MSession(Env.getCtx(), AD_Session_ID, null); - if (session.get_ID() == AD_Session_ID) + int cnt = DB.getSQLValueEx(null, "SELECT COUNT(*) FROM AD_Session WHERE AD_Session_ID=?", AD_Session_ID); + if (cnt == 1) { - int AD_User_ID = session.getCreatedBy(); - MUser user = MUser.get(Env.getCtx(), AD_User_ID); - if (user != null && user.get_ID() == AD_User_ID) + MSession session = new MSession(Env.getCtx(), AD_Session_ID, null); + if (session.get_ID() == AD_Session_ID) { - String token = data[1]; - if (BrowserToken.validateToken(session, user, token)) - { - if (MSystem.isZKRememberUserAllowed()) { - if (email_login) { - txtUserId.setValue(user.getEMail()); - } else { - if (user.getLDAPUser() != null && user.getLDAPUser().length() > 0) { - txtUserId.setValue(user.getLDAPUser()); - } else { - txtUserId.setValue(user.getName()); - } - } - onUserIdChange(AD_User_ID); - chkRememberMe.setChecked(true); - } - if (MSystem.isZKRememberPasswordAllowed()) { - txtPassword.setValue(token); - txtPassword.setAttribute("user.token.hash", token); - txtPassword.setAttribute("user.token.sid", AD_Session_ID); - } - chkSelectRole.setChecked(false); - } + int AD_User_ID = session.getCreatedBy(); + MUser user = MUser.get(Env.getCtx(), AD_User_ID); + if (user != null && user.get_ID() == AD_User_ID) + { + String token = data[1]; + if (BrowserToken.validateToken(session, user, token)) + { + if (MSystem.isZKRememberUserAllowed()) { + if (email_login) { + txtUserId.setValue(user.getEMail()); + } else { + if (user.getLDAPUser() != null && user.getLDAPUser().length() > 0) { + txtUserId.setValue(user.getLDAPUser()); + } else { + txtUserId.setValue(user.getName()); + } + } + onUserIdChange(AD_User_ID); + chkRememberMe.setChecked(true); + } + if (MSystem.isZKRememberPasswordAllowed()) { + txtPassword.setValue(token); + txtPassword.setAttribute("user.token.hash", token); + txtPassword.setAttribute("user.token.sid", AD_Session_ID); + } + chkSelectRole.setChecked(false); + } + } } } } catch (Exception e) { @@ -567,7 +571,7 @@ public class LoginPanel extends Window implements EventListener // IDEMPIERE-617 String x_Forward_IP = Executions.getCurrent().getHeader("X-Forwarded-For"); if (x_Forward_IP == null) { - x_Forward_IP = currSess.getRemoteAddr(); + x_Forward_IP = Executions.getCurrent().getRemoteAddr(); } logAuthFailure.log(x_Forward_IP, "/webui", userId, loginErrMsg); From 8bf236657c89bb2acc6909d1605b58e678f25ddc Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 23 Mar 2016 01:50:03 +0100 Subject: [PATCH 04/15] IDEMPIERE-3058 Make 2Pack transaction safe (for postgres) - added sysconfig 2PACK_COMMIT_DDL - by default now in postgresql the 2pack process everything in one transaction and rollback all in case of failure - now 2Pack is marked as failed if there are unresolved elements - fix a locking issue when creating change log and 2pack has locked ad_table foreign key - the Incremental2PackActivator now reprocess the packages that are not marked as Completed successfully - the Incremental2PackActivator stop processing more packin versions if one fails --- .../oracle/201603222022_IDEMPIERE-3058.sql | 23 ++++++++++++ .../201603222022_IDEMPIERE-3058.sql | 20 ++++++++++ .../src/org/compiere/model/MColumn.java | 34 ++++++++++++----- .../src/org/compiere/model/MIndexColumn.java | 2 +- .../src/org/compiere/model/MSysConfig.java | 5 ++- .../pipo2/handler/ColumnElementHandler.java | 11 ++++-- .../pipo2/handler/TableElementHandler.java | 11 ++++-- .../handler/TableIndexElementHandler.java | 11 ++++-- .../src/org/adempiere/pipo2/PackIn.java | 7 +++- .../org/adempiere/pipo2/PackInHandler.java | 37 ++++++++++--------- .../utils/Incremental2PackActivator.java | 11 ++++-- 11 files changed, 129 insertions(+), 43 deletions(-) create mode 100644 migration/i3.1/oracle/201603222022_IDEMPIERE-3058.sql create mode 100644 migration/i3.1/postgresql/201603222022_IDEMPIERE-3058.sql diff --git a/migration/i3.1/oracle/201603222022_IDEMPIERE-3058.sql b/migration/i3.1/oracle/201603222022_IDEMPIERE-3058.sql new file mode 100644 index 0000000000..a403ca18e7 --- /dev/null +++ b/migration/i3.1/oracle/201603222022_IDEMPIERE-3058.sql @@ -0,0 +1,23 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-3058 Make 2Pack transaction safe (for postgres) +-- Mar 22, 2016 7:30:44 PM CET +INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200076,0,0,TO_DATE('2016-03-22 19:30:38','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2016-03-22 19:30:38','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','2PACK_COMMIT_DDL','N','If set to Y 2Pack tries to behave in PostgreSQL same as with Oracle - committing before and after DDL statements','D','S','112f7659-c30f-45df-a505-ba85c4b6f83a') +; + +-- Mar 22, 2016 8:30:02 PM CET +UPDATE AD_Column SET AD_Reference_ID=30, FKConstraintType=NULL,Updated=TO_DATE('2016-03-22 20:30:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=50025 +; + +-- Mar 22, 2016 9:59:58 PM CET +UPDATE AD_Column SET FieldLength=2000,Updated=TO_DATE('2016-03-22 21:59:58','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=50073 +; + +-- Mar 22, 2016 10:00:02 PM CET +ALTER TABLE AD_Package_Imp_Detail MODIFY Name VARCHAR2(2000) DEFAULT NULL +; + +SELECT register_migration_script('201603222022_IDEMPIERE-3058.sql') FROM dual +; + diff --git a/migration/i3.1/postgresql/201603222022_IDEMPIERE-3058.sql b/migration/i3.1/postgresql/201603222022_IDEMPIERE-3058.sql new file mode 100644 index 0000000000..f71a241f8c --- /dev/null +++ b/migration/i3.1/postgresql/201603222022_IDEMPIERE-3058.sql @@ -0,0 +1,20 @@ +-- IDEMPIERE-3058 Make 2Pack transaction safe (for postgres) +-- Mar 22, 2016 7:30:44 PM CET +INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200076,0,0,TO_TIMESTAMP('2016-03-22 19:30:38','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2016-03-22 19:30:38','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','2PACK_COMMIT_DDL','N','If set to Y 2Pack tries to behave in PostgreSQL same as with Oracle - committing before and after DDL statements','D','S','112f7659-c30f-45df-a505-ba85c4b6f83a') +; + +-- Mar 22, 2016 8:30:02 PM CET +UPDATE AD_Column SET AD_Reference_ID=30, FKConstraintType=NULL,Updated=TO_TIMESTAMP('2016-03-22 20:30:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=50025 +; + +-- Mar 22, 2016 9:59:58 PM CET +UPDATE AD_Column SET FieldLength=2000,Updated=TO_TIMESTAMP('2016-03-22 21:59:58','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=50073 +; + +-- Mar 22, 2016 10:00:02 PM CET +INSERT INTO t_alter_column values('ad_package_imp_detail','Name','VARCHAR(2000)',null,'NULL') +; + +SELECT register_migration_script('201603222022_IDEMPIERE-3058.sql') FROM dual +; + diff --git a/org.adempiere.base/src/org/compiere/model/MColumn.java b/org.adempiere.base/src/org/compiere/model/MColumn.java index 9b90e4dd40..c98f4d1b5e 100644 --- a/org.adempiere.base/src/org/compiere/model/MColumn.java +++ b/org.adempiere.base/src/org/compiere/model/MColumn.java @@ -51,7 +51,12 @@ public class MColumn extends X_AD_Column /** * */ - private static final long serialVersionUID = -7261365443985547106L; + private static final long serialVersionUID = 3082823885314140209L; + + public static MColumn get (Properties ctx, int AD_Column_ID) + { + return get(ctx, AD_Column_ID, null); + } /** * Get MColumn from Cache @@ -59,13 +64,15 @@ public class MColumn extends X_AD_Column * @param AD_Column_ID id * @return MColumn */ - public static MColumn get (Properties ctx, int AD_Column_ID) + public static MColumn get(Properties ctx, int AD_Column_ID, String trxName) { Integer key = new Integer (AD_Column_ID); MColumn retValue = (MColumn) s_cache.get (key); - if (retValue != null) + if (retValue != null) { + retValue.set_TrxName(trxName); return retValue; - retValue = new MColumn (ctx, AD_Column_ID, null); + } + retValue = new MColumn (ctx, AD_Column_ID, trxName); if (retValue.get_ID () != 0) s_cache.put (key, retValue); return retValue; @@ -84,15 +91,21 @@ public class MColumn extends X_AD_Column return table.getColumn(columnName); } // get + public static String getColumnName (Properties ctx, int AD_Column_ID) + { + return getColumnName (ctx, AD_Column_ID, null); + } + /** * Get Column Name * @param ctx context * @param AD_Column_ID id + * @param trxName transaction * @return Column Name or null */ - public static String getColumnName (Properties ctx, int AD_Column_ID) + public static String getColumnName (Properties ctx, int AD_Column_ID, String trxName) { - MColumn col = MColumn.get(ctx, AD_Column_ID); + MColumn col = MColumn.get(ctx, AD_Column_ID, trxName); if (col.get_ID() == 0) return null; return col.getColumnName(); @@ -709,9 +722,12 @@ public class MColumn extends X_AD_Column } else if (DisplayType.Table == refid || DisplayType.Search == refid) { X_AD_Reference ref = new X_AD_Reference(getCtx(), getAD_Reference_Value_ID(), get_TrxName()); if (X_AD_Reference.VALIDATIONTYPE_TableValidation.equals(ref.getValidationType())) { - MRefTable rt = new MRefTable(getCtx(), getAD_Reference_Value_ID(), get_TrxName()); - if (rt != null) - foreignTable = rt.getAD_Table().getTableName(); + int cnt = DB.getSQLValueEx(get_TrxName(), "SELECT COUNT(*) FROM AD_Ref_Table WHERE AD_Reference_ID=?", getAD_Reference_Value_ID()); + if (cnt == 1) { + MRefTable rt = new MRefTable(getCtx(), getAD_Reference_Value_ID(), get_TrxName()); + if (rt != null) + foreignTable = rt.getAD_Table().getTableName(); + } } } else if (DisplayType.List == refid || DisplayType.Payment == refid) { foreignTable = "AD_Ref_List"; diff --git a/org.adempiere.base/src/org/compiere/model/MIndexColumn.java b/org.adempiere.base/src/org/compiere/model/MIndexColumn.java index 9d86b2b2b0..cbc64eb0c3 100644 --- a/org.adempiere.base/src/org/compiere/model/MIndexColumn.java +++ b/org.adempiere.base/src/org/compiere/model/MIndexColumn.java @@ -74,7 +74,7 @@ public class MIndexColumn extends X_AD_IndexColumn { if (sql != null && sql.length() > 0) return sql; int AD_Column_ID = getAD_Column_ID(); - return MColumn.getColumnName(getCtx(), AD_Column_ID); + return MColumn.getColumnName(getCtx(), AD_Column_ID, get_TrxName()); } /** diff --git a/org.adempiere.base/src/org/compiere/model/MSysConfig.java b/org.adempiere.base/src/org/compiere/model/MSysConfig.java index 510205cbb7..79b5764038 100644 --- a/org.adempiere.base/src/org/compiere/model/MSysConfig.java +++ b/org.adempiere.base/src/org/compiere/model/MSysConfig.java @@ -39,10 +39,10 @@ import org.compiere.util.DisplayType; */ public class MSysConfig extends X_AD_SysConfig { - /** + /** * */ - private static final long serialVersionUID = -5124493725187310483L; + private static final long serialVersionUID = 5139119853639605887L; public static final String ADDRESS_VALIDATION = "ADDRESS_VALIDATION"; public static final String ALERT_SEND_ATTACHMENT_AS_XLS = "ALERT_SEND_ATTACHMENT_AS_XLS"; @@ -130,6 +130,7 @@ public class MSysConfig extends X_AD_SysConfig public static final String SYSTEM_IN_MAINTENANCE_MODE = "SYSTEM_IN_MAINTENANCE_MODE"; public static final String SYSTEM_INSERT_CHANGELOG = "SYSTEM_INSERT_CHANGELOG"; public static final String SYSTEM_NATIVE_SEQUENCE = "SYSTEM_NATIVE_SEQUENCE"; + public static final String TWOPACK_COMMIT_DDL = "2PACK_COMMIT_DDL"; public static final String TWOPACK_HANDLE_TRANSLATIONS = "2PACK_HANDLE_TRANSLATIONS"; public static final String USE_EMAIL_FOR_LOGIN = "USE_EMAIL_FOR_LOGIN"; public static final String USER_LOCKING_MAX_ACCOUNT_LOCK_MINUTES = "USER_LOCKING_MAX_ACCOUNT_LOCK_MINUTES"; diff --git a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/ColumnElementHandler.java b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/ColumnElementHandler.java index 89cc6b344a..50bd809429 100644 --- a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/ColumnElementHandler.java +++ b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/ColumnElementHandler.java @@ -36,6 +36,7 @@ import org.adempiere.pipo2.exception.POSaveFailedException; import org.compiere.model.I_AD_Column; import org.compiere.model.I_AD_Table; import org.compiere.model.MColumn; +import org.compiere.model.MSysConfig; import org.compiere.model.MTable; import org.compiere.model.X_AD_Column; import org.compiere.model.X_AD_Element; @@ -260,8 +261,10 @@ public class ColumnElementHandler extends AbstractElementHandler { log.info(sql); //make it consistent for oracle and postgresql - if (!trx.commit()) - return -1; + if (MSysConfig.getBooleanValue(MSysConfig.TWOPACK_COMMIT_DDL, false)) { + if (!trx.commit()) + return -1; + } if (sql.indexOf(DB.SQLSTATEMENT_SEPARATOR) == -1) { int ret = DB.executeUpdate(sql, false, trx.getTrxName()); @@ -279,7 +282,9 @@ public class ColumnElementHandler extends AbstractElementHandler { } } } - trx.commit(true); + if (MSysConfig.getBooleanValue(MSysConfig.TWOPACK_COMMIT_DDL, false)) { + trx.commit(true); + } } else { return 0; } diff --git a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/TableElementHandler.java b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/TableElementHandler.java index 39f779d536..ba2769a5d2 100644 --- a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/TableElementHandler.java +++ b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/TableElementHandler.java @@ -36,6 +36,7 @@ import org.adempiere.pipo2.PoFiller; import org.adempiere.pipo2.exception.DatabaseAccessException; import org.adempiere.pipo2.exception.POSaveFailedException; import org.compiere.model.I_AD_Table; +import org.compiere.model.MSysConfig; import org.compiere.model.MTable; import org.compiere.model.MTableIndex; import org.compiere.model.MViewComponent; @@ -126,12 +127,16 @@ public class TableElementHandler extends AbstractElementHandler { private int validateDatabaseView(PIPOContext ctx, MTable table) { Trx trx = Trx.get(getTrxName(ctx), true); - if (!trx.commit()) - return 0; + if (MSysConfig.getBooleanValue(MSysConfig.TWOPACK_COMMIT_DDL, false)) { + if (!trx.commit()) + return 0; + } try { DatabaseViewValidate.validateDatabaseView(ctx.ctx, table, trx.getTrxName(), null); - trx.commit(true); + if (MSysConfig.getBooleanValue(MSysConfig.TWOPACK_COMMIT_DDL, false)) { + trx.commit(true); + } } catch (Exception e) { log.log(Level.SEVERE, e.getLocalizedMessage(), e); trx.rollback(); diff --git a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/TableIndexElementHandler.java b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/TableIndexElementHandler.java index 2c353699d5..006725fd66 100644 --- a/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/TableIndexElementHandler.java +++ b/org.adempiere.pipo.handlers/src/org/adempiere/pipo2/handler/TableIndexElementHandler.java @@ -30,6 +30,7 @@ import org.adempiere.pipo2.exception.DatabaseAccessException; import org.adempiere.pipo2.exception.POSaveFailedException; import org.compiere.model.MIndexColumn; import org.compiere.model.MMessage; +import org.compiere.model.MSysConfig; import org.compiere.model.MTableIndex; import org.compiere.model.X_AD_Package_Imp_Detail; import org.compiere.process.TableIndexValidate; @@ -102,12 +103,16 @@ public class TableIndexElementHandler extends AbstractElementHandler { private int validateTableIndex(PIPOContext ctx, MTableIndex tableIndex) { Trx trx = Trx.get(getTrxName(ctx), true); - if (!trx.commit()) - return 0; + if (MSysConfig.getBooleanValue(MSysConfig.TWOPACK_COMMIT_DDL, false)) { + if (!trx.commit()) + return 0; + } try { TableIndexValidate.validateTableIndex(ctx.ctx, tableIndex, trx.getTrxName(), null); - trx.commit(true); + if (MSysConfig.getBooleanValue(MSysConfig.TWOPACK_COMMIT_DDL, false)) { + trx.commit(true); + } } catch (Exception e) { log.log(Level.SEVERE, e.getLocalizedMessage(), e); trx.rollback(); diff --git a/org.adempiere.pipo/src/org/adempiere/pipo2/PackIn.java b/org.adempiere.pipo/src/org/adempiere/pipo2/PackIn.java index ff2c95685c..e9d4294750 100644 --- a/org.adempiere.pipo/src/org/adempiere/pipo2/PackIn.java +++ b/org.adempiere.pipo/src/org/adempiere/pipo2/PackIn.java @@ -37,6 +37,7 @@ import java.util.zip.ZipFile; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; +import org.adempiere.exceptions.AdempiereException; import org.compiere.model.MSysConfig; import org.compiere.model.PO; import org.compiere.model.X_AD_Package_Imp_Detail; @@ -175,10 +176,12 @@ public class PackIn { } msg = "End Parser"; log.info(msg); - if (handler.getUnresolvedCount() > 0) - handler.dumpUnresolvedElements(); msg = "Processed="+handler.getElementsProcessed()+" Un-Resolved="+handler.getUnresolvedCount(); getNotifier().addStatusLine(msg); + if (handler.getUnresolvedCount() > 0) { + handler.dumpUnresolvedElements(); + throw new AdempiereException("Unresolved elements"); + } return msg; } catch (Exception e) { log.log(Level.SEVERE, "importXML:", e); diff --git a/org.adempiere.pipo/src/org/adempiere/pipo2/PackInHandler.java b/org.adempiere.pipo/src/org/adempiere/pipo2/PackInHandler.java index 466bf47061..d75a152d85 100644 --- a/org.adempiere.pipo/src/org/adempiere/pipo2/PackInHandler.java +++ b/org.adempiere.pipo/src/org/adempiere/pipo2/PackInHandler.java @@ -297,8 +297,6 @@ public class PackInHandler extends DefaultHandler { else elementValue = uri + localName; - X_AD_Package_Imp packageImp = new X_AD_Package_Imp(m_ctx.ctx, AD_Package_Imp_ID, null); - packageImp.setProcessed(true); if (elementValue.equals("idempiere")){ processDeferElements(); @@ -314,14 +312,8 @@ public class PackInHandler extends DefaultHandler { } packIn.getNotifier().addStatusLine(packageStatus); - //Update package history log with package status - packageImp.setPK_Status(packageStatus); - packageImp.saveEx(); - - //Update package list with package status - X_AD_Package_Imp_Inst packageInst = new X_AD_Package_Imp_Inst(m_ctx.ctx, AD_Package_Imp_Inst_ID, null); - packageInst.setPK_Status(packageStatus); - packageInst.saveEx(); + updPackageImpNoTrx(); + updPackageImpInstNoTrx(); //reset setupHandlers(); @@ -334,23 +326,34 @@ public class PackInHandler extends DefaultHandler { } catch (RuntimeException re) { packageStatus = "Import Failed"; packIn.getNotifier().addStatusLine(packageStatus); - //Update package history log with package status - packageImp.setPK_Status(packageStatus); - packageImp.saveEx(); + updPackageImpNoTrx(); throw re; } catch (SAXException se) { packageStatus = "Import Failed"; packIn.getNotifier().addStatusLine(packageStatus); - //Update package history log with package status - packageImp.setPK_Status(packageStatus); - packageImp.saveEx(); + updPackageImpNoTrx(); throw se; } } } } // endElement - private void processDeferElements() throws SAXException { + private void updPackageImpNoTrx() { + // NOTE: Updating out of model to avoid change log insert that can cause locks + //Update package history log with package status + DB.executeUpdateEx("UPDATE AD_Package_Imp SET Processed=?, PK_Status=?, UpdatedBy=?, Updated=SYSDATE WHERE AD_Package_Imp_ID=?", + new Object[] {"Y", packageStatus, Env.getAD_User_ID(m_ctx.ctx), AD_Package_Imp_ID}, + null); + } + + private void updPackageImpInstNoTrx() { + // NOTE: Updating out of model to avoid change log insert that can cause locks + DB.executeUpdateEx("UPDATE AD_Package_Imp_Inst SET PK_Status=?, UpdatedBy=?, Updated=SYSDATE WHERE AD_Package_Imp_Inst_ID=?", + new Object[] {packageStatus, Env.getAD_User_ID(m_ctx.ctx), AD_Package_Imp_Inst_ID}, + null); + } + + private void processDeferElements() throws SAXException { if (defer.isEmpty()) return; diff --git a/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/Incremental2PackActivator.java b/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/Incremental2PackActivator.java index 7e5754b62d..a168bd9877 100644 --- a/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/Incremental2PackActivator.java +++ b/org.adempiere.plugin.utils/src/org/adempiere/plugin/utils/Incremental2PackActivator.java @@ -90,7 +90,7 @@ public class Incremental2PackActivator implements BundleActivator, ServiceTracke // e.g. 1.0.0.qualifier, check only the "1.0.0" part String bundleVersionPart = getVersion(); String installedVersionPart = null; - String where = "Name=?"; + String where = "Name=? AND PK_Status = 'Completed successfully'"; Query q = new Query(Env.getCtx(), X_AD_Package_Imp.Table_Name, where.toString(), null); q.setParameters(new Object[] { getName() }); @@ -163,7 +163,10 @@ public class Incremental2PackActivator implements BundleActivator, ServiceTracke }); for(TwoPackEntry entry : list) { - packIn(entry.url); + if (!packIn(entry.url)) { + // stop processing further packages if one fail + break; + } } } @@ -175,7 +178,7 @@ public class Incremental2PackActivator implements BundleActivator, ServiceTracke return v; } - protected void packIn(URL packout) { + protected boolean packIn(URL packout) { if (packout != null && service != null) { String path = packout.getPath(); String suffix = path.substring(path.lastIndexOf("_")); @@ -195,6 +198,7 @@ public class Incremental2PackActivator implements BundleActivator, ServiceTracke service.merge(context, zipfile); } catch (Throwable e) { logger.log(Level.SEVERE, "Pack in failed.", e); + return false; } finally{ if (zipstream != null) { try { @@ -204,6 +208,7 @@ public class Incremental2PackActivator implements BundleActivator, ServiceTracke } System.out.println(getName() + " " + packout.getPath() + " installed"); } + return true; } protected BundleContext getContext() { From 8a22cf781a56981375d07fc71aec431ec7a459e6 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Wed, 6 Apr 2016 14:40:48 -0500 Subject: [PATCH 05/15] IDEMPIERE-3058 Make 2Pack transaction safe / fix oracle script as advised by Dirk Niemeyer --- migration/i3.1/oracle/201603222022_IDEMPIERE-3058.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migration/i3.1/oracle/201603222022_IDEMPIERE-3058.sql b/migration/i3.1/oracle/201603222022_IDEMPIERE-3058.sql index a403ca18e7..030be6fd2a 100644 --- a/migration/i3.1/oracle/201603222022_IDEMPIERE-3058.sql +++ b/migration/i3.1/oracle/201603222022_IDEMPIERE-3058.sql @@ -15,7 +15,7 @@ UPDATE AD_Column SET FieldLength=2000,Updated=TO_DATE('2016-03-22 21:59:58','YYY ; -- Mar 22, 2016 10:00:02 PM CET -ALTER TABLE AD_Package_Imp_Detail MODIFY Name VARCHAR2(2000) DEFAULT NULL +ALTER TABLE AD_Package_Imp_Detail MODIFY Name NVARCHAR2(2000) DEFAULT NULL ; SELECT register_migration_script('201603222022_IDEMPIERE-3058.sql') FROM dual From 8d87994630cdb81dd03242c261d3777cc035d180 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Sun, 17 Apr 2016 21:05:31 -0700 Subject: [PATCH 06/15] IDEMPIERE-3071 Cache Reset process dont work if set Show Help = "Run silently - Take Defaults" --- .../src/org/compiere/apps/ProcessDialog.java | 11 +++++----- .../org/compiere/apps/ProcessModalDialog.java | 5 +++-- .../org/compiere/apps/ProcessParameter.java | 2 +- .../webui/apps/AbstractProcessDialog.java | 11 ++++++---- .../adempiere/webui/apps/ProcessDialog.java | 21 ++++++++++++------- 5 files changed, 30 insertions(+), 20 deletions(-) diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessDialog.java b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessDialog.java index ffe997d0d0..97442342c8 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessDialog.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessDialog.java @@ -48,6 +48,7 @@ import org.adempiere.util.Callback; import org.adempiere.util.IProcessUI; import org.compiere.model.MPInstance; import org.compiere.model.MPInstancePara; +import org.compiere.model.MProcess; import org.compiere.print.ReportCtl; import org.compiere.print.ReportEngine; import org.compiere.process.ProcessInfo; @@ -362,14 +363,14 @@ public class ProcessDialog extends CFrame centerPanel.add(separator, BorderLayout.NORTH); centerPanel.add(parameterPanel, BorderLayout.CENTER); } else { - if (m_ShowHelp != null && m_ShowHelp.equals("N")) { + if (m_ShowHelp != null && MProcess.SHOWHELP_DonTShowHelp.equals(m_ShowHelp)) { bOK.doClick(); // don't ask first click // anyway show resulting window } } // Check if the process is a silent one - if(m_ShowHelp != null && m_ShowHelp.equals("S")) + if(m_ShowHelp != null && MProcess.SHOWHELP_RunSilently_TakeDefaults.equals(m_ShowHelp)) bOK.doClick(); querySaved(); @@ -548,8 +549,8 @@ public class ProcessDialog extends CFrame if (m_IsReport && !pi.isError()) bOK.doClick(); - // If the process is a silent one and no errors occured, close the dialog - if(m_ShowHelp != null && m_ShowHelp.equals("S")) + // If the process is a silent one and no errors occurred, close the dialog + if(m_ShowHelp != null && MProcess.SHOWHELP_RunSilently_TakeDefaults.equals(m_ShowHelp)) bOK.doClick(); } // unlockUI @@ -560,7 +561,7 @@ public class ProcessDialog extends CFrame public boolean isUILocked() { return m_isLocked; - } // isLoacked + } // isUILocked /** * Method to be executed async. diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessModalDialog.java b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessModalDialog.java index f933628069..7c27f62ebc 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessModalDialog.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessModalDialog.java @@ -33,6 +33,7 @@ import javax.swing.JSeparator; import org.adempiere.exceptions.DBException; import org.adempiere.util.IProcessUI; +import org.compiere.model.MProcess; import org.compiere.process.ProcessInfo; import org.compiere.swing.CButton; import org.compiere.swing.CDialog; @@ -310,7 +311,7 @@ public class ProcessModalDialog extends CDialog centerPanel.add(separator, BorderLayout.NORTH); centerPanel.add(parameterPanel, BorderLayout.CENTER); } else { - if (m_ShowHelp != null && m_ShowHelp.equals("N")) { + if (m_ShowHelp != null && MProcess.SHOWHELP_DonTShowHelp.equals(m_ShowHelp)) { m_autoStart = true; } if (m_autoStart) @@ -318,7 +319,7 @@ public class ProcessModalDialog extends CDialog } // Check if the process is a silent one - if(m_ShowHelp != null && m_ShowHelp.equals("S")) + if(m_ShowHelp != null && MProcess.SHOWHELP_RunSilently_TakeDefaults.equals(m_ShowHelp)) bOK.doClick(); dialog.revalidate(); diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessParameter.java b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessParameter.java index 71f7ef8367..d2ed7d0e9d 100644 --- a/org.adempiere.ui.swing/src/org/compiere/apps/ProcessParameter.java +++ b/org.adempiere.ui.swing/src/org/compiere/apps/ProcessParameter.java @@ -555,7 +555,7 @@ public class ProcessParameter extends CDialog { MProcess m_process = new MProcess(Env.getCtx(), m_processInfo.getAD_Process_ID(), null); - if(m_process.getShowHelp() != null && m_process.getShowHelp().equals("S")) + if(m_process.getShowHelp() != null && MProcess.SHOWHELP_RunSilently_TakeDefaults.equals(m_process.getShowHelp())) { // It is defined as a silent process if(saveParameters()) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AbstractProcessDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AbstractProcessDialog.java index be9ebacebb..656a1d955d 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AbstractProcessDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/AbstractProcessDialog.java @@ -221,25 +221,28 @@ public abstract class AbstractProcessDialog extends Window implements IProcessUI m_pi.setTitle(m_Name); parameterPanel = new ProcessParameterPanel(m_WindowNo, m_pi); + layout(); if ( !parameterPanel.init() ) { - if (m_ShowHelp != null && m_ShowHelp.equals("N")) + if (m_ShowHelp != null && MProcess.SHOWHELP_DonTShowHelp.equals(m_ShowHelp)) autoStart = true; if (autoStart) { + bOK.setDisabled(true); + bCancel.setDisabled(true); autoStart(); return true; } } // Check if the process is a silent one - if (isValid() && m_ShowHelp != null && m_ShowHelp.equals("S")) + if (isValid() && m_ShowHelp != null && MProcess.SHOWHELP_RunSilently_TakeDefaults.equals(m_ShowHelp)) { + bOK.setDisabled(true); + bCancel.setDisabled(true); autoStart(); return true; } - - layout(); return true; } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java index e7a67baf4f..a3812afb34 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/ProcessDialog.java @@ -39,6 +39,7 @@ import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.theme.ThemeManager; import org.adempiere.webui.window.FDialog; import org.adempiere.webui.window.SimplePDFViewer; +import org.compiere.model.MProcess; import org.compiere.model.X_AD_CtxHelp; import org.compiere.print.ReportEngine; import org.compiere.process.ProcessInfo; @@ -270,6 +271,7 @@ public class ProcessDialog extends AbstractProcessDialog implements EventListene } private void showBusyMask(Window window) { + if (getParent() != null) { getParent().appendChild(getMask()); StringBuilder script = new StringBuilder("var w=zk.Widget.$('#"); script.append(getParent().getUuid()).append("');"); @@ -279,6 +281,7 @@ public class ProcessDialog extends AbstractProcessDialog implements EventListene script.append("w.busy=true;"); } Clients.response(new AuScript(script.toString())); + } } private void hideBusyMask() @@ -322,10 +325,12 @@ public class ProcessDialog extends AbstractProcessDialog implements EventListene bOK.setLabel(Msg.getMsg(Env.getCtx(), "Parameter")); bOK.setImage(ThemeManager.getThemeResource("images/Reset16.png")); - + bOK.setDisabled(false); + bCancel.setLabel(Msg.getMsg(Env.getCtx(), "Close")); bCancel.setImage(ThemeManager.getThemeResource("images/Cancel16.png")); - + bCancel.setDisabled(false); + isParameterPage = false; m_ids = pi.getIDs(); @@ -458,8 +463,8 @@ public class ProcessDialog extends AbstractProcessDialog implements EventListene { // if (!afterProcessTask()) { - // If the process is a silent one and no errors occured, close the dialog - if(getShowHelp() != null && getShowHelp().equals("S")) + // If the process is a silent one and no errors occurred, close the dialog + if(getShowHelp() != null && MProcess.SHOWHELP_RunSilently_TakeDefaults.equals(getShowHelp())) this.dispose(); } } @@ -570,8 +575,8 @@ public class ProcessDialog extends AbstractProcessDialog implements EventListene } } - // If the process is a silent one and no errors occured, close the dialog - if(getShowHelp() != null && getShowHelp().equals("S")) + // If the process is a silent one and no errors occurred, close the dialog + if(getShowHelp() != null && MProcess.SHOWHELP_RunSilently_TakeDefaults.equals(getShowHelp())) this.dispose(); } @@ -653,8 +658,8 @@ public class ProcessDialog extends AbstractProcessDialog implements EventListene } } - // If the process is a silent one and no errors occured, close the dialog - if(getShowHelp() != null && getShowHelp().equals("S")) + // If the process is a silent one and no errors occurred, close the dialog + if(getShowHelp() != null && MProcess.SHOWHELP_RunSilently_TakeDefaults.equals(getShowHelp())) this.dispose(); } From 3d765f262e4f3f73c9e0bb21ddc043c0fc1034f2 Mon Sep 17 00:00:00 2001 From: hieplq Date: Tue, 19 Apr 2016 03:19:04 +0700 Subject: [PATCH 07/15] IDEMPIERE-3077:update beanshell by security problem refer:https://github.com/beanshell/beanshell --- org.adempiere.base/.classpath | 2 +- org.adempiere.base/META-INF/MANIFEST.MF | 4 ++-- org.adempiere.base/build.properties | 4 ++-- org.adempiere.base/copyjars.xml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/org.adempiere.base/.classpath b/org.adempiere.base/.classpath index dca11cb25b..21a8494ee6 100644 --- a/org.adempiere.base/.classpath +++ b/org.adempiere.base/.classpath @@ -1,9 +1,9 @@ + - diff --git a/org.adempiere.base/META-INF/MANIFEST.MF b/org.adempiere.base/META-INF/MANIFEST.MF index 9fa4627e99..46edd7d5b2 100644 --- a/org.adempiere.base/META-INF/MANIFEST.MF +++ b/org.adempiere.base/META-INF/MANIFEST.MF @@ -4,7 +4,6 @@ Bundle-Name: iDempiere Core Bundle-SymbolicName: org.adempiere.base;singleton:=true Bundle-Version: 3.1.0.qualifier Bundle-ClassPath: base.jar, - bsh-2.0b5.jar, bsh-engine.jar, groovy-engine.jar, jython-engine.jar, @@ -19,7 +18,8 @@ Bundle-ClassPath: base.jar, super-csv-2.2.0.jar, barcode4j-2.1.jar, bcprov-jdk15on-1.46.jar, - passay-1.0.jar + passay-1.0.jar, + bsh-2.0b6.jar Export-Package: bsh, bsh.classpath, bsh.collection, diff --git a/org.adempiere.base/build.properties b/org.adempiere.base/build.properties index 8ad0b737b9..df32192598 100644 --- a/org.adempiere.base/build.properties +++ b/org.adempiere.base/build.properties @@ -1,7 +1,6 @@ bin.includes = META-INF/,\ base.jar,\ plugin.xml,\ - bsh-2.0b5.jar,\ bsh-engine.jar,\ groovy-engine.jar,\ jython-engine.jar,\ @@ -34,7 +33,8 @@ bin.includes = META-INF/,\ schema/,\ barcode4j-2.1.jar,\ bcprov-jdk15on-1.46.jar,\ - passay-1.0.jar + passay-1.0.jar,\ + bsh-2.0b6.jar output.base.jar = bin/ src.includes = schema/ source.base.jar = src/ diff --git a/org.adempiere.base/copyjars.xml b/org.adempiere.base/copyjars.xml index 1fe2a28dad..7a56316f22 100644 --- a/org.adempiere.base/copyjars.xml +++ b/org.adempiere.base/copyjars.xml @@ -1,6 +1,6 @@ - +