From 4b2f7a14ac9df7ef58ff9282a073f003b6cc9a00 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Wed, 25 Jul 2007 14:04:39 +0000 Subject: [PATCH] [ 1754519 ] Refactoring of PackInHandler - Further stabilization and refactoring after testing with the Fixed Asset package. [ 1759822 ] 2Pack - few bugs fixed, including NASTY one - many thanks for Igor's contributed fixed. * Other - Added display of AdempiereProperties in Preference window's info tab. - Added data conversion from string to integer in PO.setValue - Added msequence existence check in Mtable.afterSave - Fixed ddl generation issue for column with display type button --- .../pipo/AbstractElementHandler.java | 123 ++++--- base/src/org/adempiere/pipo/Element.java | 4 + base/src/org/adempiere/pipo/IDFinder.java | 72 +++- base/src/org/adempiere/pipo/PackIn.java | 120 +++++-- .../src/org/adempiere/pipo/PackInHandler.java | 24 +- .../handler/CodeSnipitElementHandler.java | 10 +- .../pipo/handler/ColumnElementHandler.java | 91 ++++-- .../pipo/handler/DataElementHandler.java | 23 +- .../pipo/handler/DistFileElementHandler.java | 4 +- .../handler/DynValRuleElementHandler.java | 4 +- .../pipo/handler/FieldElementHandler.java | 307 +++++++++++------- .../pipo/handler/FormElementHandler.java | 6 +- .../pipo/handler/MessageElementHandler.java | 6 +- .../handler/PrintFormatElementHandler.java | 1 + .../PrintFormatItemElementHandler.java | 37 ++- .../pipo/handler/ProcessElementHandler.java | 10 +- .../handler/ProcessParaElementHandler.java | 3 +- .../pipo/handler/ReferenceElementHandler.java | 8 + .../handler/ReferenceListElementHandler.java | 24 +- .../handler/ReferenceTableElementHandler.java | 9 +- .../handler/ReportViewColElementHandler.java | 3 +- .../pipo/handler/TabElementHandler.java | 37 ++- .../pipo/handler/TableElementHandler.java | 44 ++- .../pipo/handler/TaskElementHandler.java | 114 ++++--- .../pipo/handler/UserRoleElementHandler.java | 2 +- .../handler/WindowAccessElementHandler.java | 8 + .../pipo/handler/WindowElementHandler.java | 41 ++- .../pipo/handler/WorkbenchElementHandler.java | 4 +- .../pipo/handler/WorkflowElementHandler.java | 4 +- base/src/org/compiere/model/MColumn.java | 7 +- base/src/org/compiere/model/MLookup.java | 2 +- base/src/org/compiere/model/MTable.java | 6 +- base/src/org/compiere/model/PO.java | 16 + base/src/org/compiere/util/CLogMgt.java | 1 + 34 files changed, 758 insertions(+), 417 deletions(-) diff --git a/base/src/org/adempiere/pipo/AbstractElementHandler.java b/base/src/org/adempiere/pipo/AbstractElementHandler.java index a6664aecf3..ea8839de79 100644 --- a/base/src/org/adempiere/pipo/AbstractElementHandler.java +++ b/base/src/org/adempiere/pipo/AbstractElementHandler.java @@ -22,6 +22,7 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.Properties; +import java.util.logging.Level; import javax.xml.transform.sax.TransformerHandler; @@ -92,26 +93,26 @@ public abstract class AbstractElementHandler implements ElementHandler { id = MSequence.getNextID (Env.getAD_Client_ID(ctx), "AD_Package_Imp_Detail", getTrxName(ctx)); - StringBuffer sqlB = new StringBuffer ("Insert INTO AD_Package_Imp_Detail" - + "(AD_Client_ID, AD_Org_ID, CreatedBy, UpdatedBy, " - + "AD_PACKAGE_IMP_DETAIL_ID, AD_PACKAGE_IMP_ID, TYPE, NAME," - + " ACTION, SUCCESS, AD_ORIGINAL_ID, AD_BACKUP_ID, TABLENAME, AD_TABLE_ID)" - + "VALUES(" - + " "+ Env.getAD_Client_ID(ctx) - + ", "+ Env.getAD_Org_ID(ctx) - + ", "+ Env.getAD_User_ID(ctx) - + ", "+ Env.getAD_User_ID(ctx) - + ", " + id - + ", " + getPackageImpId(ctx) - + ", '" + objectType - + "', '" + objectName - + "', '" + objectStatus - + "', 'Success'" - + ", "+objectID - + ", "+objectIDBackup - + ", '"+tableName - + "', "+AD_Table_ID - +")"); + StringBuffer sqlB = new StringBuffer ("Insert INTO AD_Package_Imp_Detail") + .append( "(AD_Client_ID, AD_Org_ID, CreatedBy, UpdatedBy, " ) + .append( "AD_PACKAGE_IMP_DETAIL_ID, AD_PACKAGE_IMP_ID, TYPE, NAME," ) + .append( " ACTION, SUCCESS, AD_ORIGINAL_ID, AD_BACKUP_ID, TABLENAME, AD_TABLE_ID)" ) + .append( "VALUES(" ) + .append( " "+ Env.getAD_Client_ID(ctx) ) + .append( ", "+ Env.getAD_Org_ID(ctx) ) + .append( ", "+ Env.getAD_User_ID(ctx) ) + .append( ", "+ Env.getAD_User_ID(ctx) ) + .append( ", " + id ) + .append( ", " + getPackageImpId(ctx) ) + .append( ", '" + objectType ) + .append( "', '" + objectName ) + .append( "', '" + objectStatus ) + .append( "', 'Success'" ) + .append( ", "+objectID ) + .append( ", "+objectIDBackup ) + .append( ", '"+tableName ) + .append( "', "+AD_Table_ID ) + .append(")"); int no = DB.executeUpdate (sqlB.toString(), getTrxName(ctx)); if (no == -1) log.info("Insert to import detail failed"); @@ -131,26 +132,26 @@ public abstract class AbstractElementHandler implements ElementHandler { id = MSequence.getNextID (Env.getAD_Client_ID(ctx), "AD_Package_Imp_Detail", getTrxName(ctx)); - StringBuffer sqlB = new StringBuffer ("Insert INTO AD_Package_Imp_Detail" - + "(AD_Client_ID, AD_Org_ID, CreatedBy, UpdatedBy, " - + "AD_PACKAGE_IMP_DETAIL_ID, AD_PACKAGE_IMP_ID, TYPE, NAME," - + " ACTION, SUCCESS, AD_ORIGINAL_ID, AD_BACKUP_ID, TABLENAME, AD_TABLE_ID)" - + "VALUES(" - + " "+ Env.getAD_Client_ID(ctx) - + ", "+ Env.getAD_Org_ID(ctx) - + ", "+ Env.getAD_User_ID(ctx) - + ", "+ Env.getAD_User_ID(ctx) - + ", " + id - + ", " + getPackageImpId(ctx) - + ", '" + objectType - + "', '" + objectName - + "', '" + objectStatus - + "', 'Failure'" - + ", "+objectID - + ", "+objectIDBackup - + ", '"+tableName - + "', "+AD_Table_ID - +")"); + StringBuffer sqlB = new StringBuffer ("Insert INTO AD_Package_Imp_Detail") + .append( "(AD_Client_ID, AD_Org_ID, CreatedBy, UpdatedBy, " ) + .append( "AD_PACKAGE_IMP_DETAIL_ID, AD_PACKAGE_IMP_ID, TYPE, NAME," ) + .append( " ACTION, SUCCESS, AD_ORIGINAL_ID, AD_BACKUP_ID, TABLENAME, AD_TABLE_ID)" ) + .append( "VALUES(" ) + .append( " "+ Env.getAD_Client_ID(ctx) ) + .append( ", "+ Env.getAD_Org_ID(ctx) ) + .append( ", "+ Env.getAD_User_ID(ctx) ) + .append( ", "+ Env.getAD_User_ID(ctx) ) + .append( ", " + id ) + .append( ", " + getPackageImpId(ctx) ) + .append( ", '" + objectType ) + .append( "', '" + objectName ) + .append( "', '" + objectStatus ) + .append( "', 'Failure'" ) + .append( ", "+objectID ) + .append( ", "+objectIDBackup ) + .append( ", '"+tableName ) + .append( "', "+AD_Table_ID ) + .append( ")"); int no = DB.executeUpdate (sqlB.toString(), getTrxName(ctx)); if (no == -1) log.info("Insert to import detail failed"); @@ -245,23 +246,23 @@ public abstract class AbstractElementHandler implements ElementHandler { else ;//Ignore - StringBuffer sqlB = new StringBuffer ("Insert INTO AD_Package_Imp_Backup" - + "(AD_Client_ID, AD_Org_ID, CreatedBy, UpdatedBy, " - + "AD_PACKAGE_IMP_BACKUP_ID, AD_PACKAGE_IMP_DETAIL_ID, AD_PACKAGE_IMP_ID," - + " AD_TABLE_ID, AD_COLUMN_ID, AD_REFERENCE_ID, COLVALUE)" - + "VALUES(" - + " "+ Env.getAD_Client_ID(ctx) - + ", "+ Env.getAD_Org_ID(ctx) - + ", "+ Env.getAD_User_ID(ctx) - + ", "+ Env.getAD_User_ID(ctx) - + ", " + idBackup - + ", " + idDetail - + ", " + getPackageImpId(ctx) - + ", " + tableID - + ", " + columnID - + ", " + referenceID - + ", '" + (colValue != null ? colValue : from.get_Value(i)) - +"')"); + StringBuffer sqlB = new StringBuffer ("Insert INTO AD_Package_Imp_Backup") + .append( "(AD_Client_ID, AD_Org_ID, CreatedBy, UpdatedBy, " ) + .append( "AD_PACKAGE_IMP_BACKUP_ID, AD_PACKAGE_IMP_DETAIL_ID, AD_PACKAGE_IMP_ID," ) + .append( " AD_TABLE_ID, AD_COLUMN_ID, AD_REFERENCE_ID, COLVALUE)" ) + .append( "VALUES(" ) + .append( " "+ Env.getAD_Client_ID(ctx) ) + .append( ", "+ Env.getAD_Org_ID(ctx) ) + .append( ", "+ Env.getAD_User_ID(ctx) ) + .append( ", "+ Env.getAD_User_ID(ctx) ) + .append( ", " + idBackup ) + .append( ", " + idDetail ) + .append( ", " + getPackageImpId(ctx) ) + .append( ", " + tableID ) + .append( ", " + columnID ) + .append( ", " + referenceID ) + .append( ", '" + (colValue != null ? colValue : from.get_Value(i)) ) + .append( "')"); int no = DB.executeUpdate (sqlB.toString(), getTrxName(ctx)); if (no == -1) @@ -333,13 +334,11 @@ public abstract class AbstractElementHandler implements ElementHandler { } source.close(); target.close(); - - - System.out.println("Successfully copied " + byteCount + " bytes."); + //System.out.println("Successfully copied " + byteCount + " bytes."); } catch (Exception e) { System.out.println("Error occurred while copying. "+ byteCount + " bytes copied."); - System.out.println(e.toString()); + log.log(Level.SEVERE, e.getLocalizedMessage(), e); success = -1; } @@ -372,5 +371,5 @@ public abstract class AbstractElementHandler implements ElementHandler { protected String getPackageDirectory(Properties ctx) { return Env.getContext(ctx, "PackageDirectory"); - } + } } diff --git a/base/src/org/adempiere/pipo/Element.java b/base/src/org/adempiere/pipo/Element.java index 4a4acebd94..8c2437c410 100644 --- a/base/src/org/adempiere/pipo/Element.java +++ b/base/src/org/adempiere/pipo/Element.java @@ -32,6 +32,10 @@ public class Element { public Attributes attributes; //defer for later reprocessing public boolean defer = false; + //parent element + public Element parent; + //resolved db recordid, store for reference by child element + public int recordId = 0; /** * @param uri diff --git a/base/src/org/adempiere/pipo/IDFinder.java b/base/src/org/adempiere/pipo/IDFinder.java index e96b9efdcc..1d4e6b2e89 100644 --- a/base/src/org/adempiere/pipo/IDFinder.java +++ b/base/src/org/adempiere/pipo/IDFinder.java @@ -44,7 +44,11 @@ public class IDFinder { */ public static int get_ID (String tableName, String name, int AD_Client_ID, String trxName) { int id = 0; - StringBuffer sqlB = new StringBuffer ("select "+tableName+"_ID from "+tableName+" where name=?"); + StringBuffer sqlB = new StringBuffer ("select ") + .append(tableName) + .append("_ID from ") + .append(tableName) + .append(" where name=?"); if (!tableName.startsWith("AD_")) sqlB = sqlB.append(" and AD_Client_ID=?"); @@ -77,17 +81,25 @@ public class IDFinder { */ public static int get_IDWithColumn (String tableName, String columnName, Object value, int AD_Client_ID, String trxName) { int id = 0; - StringBuffer sqlB = new StringBuffer ("select "+tableName+"_ID from "+tableName+" where UPPER("+columnName+")=?"); + StringBuffer sqlB = new StringBuffer ("select ") + .append(tableName) + .append("_ID from ") + .append(tableName) + .append(" where ") + .append(columnName) + .append(" = ?"); //StringBuffer sqlC = new StringBuffer ("select "+tableName+"_ID from "+tableName+" where "+columnName+"="+value.toString()); if (!tableName.startsWith("AD_")) sqlB = sqlB.append(" and AD_Client_ID=?"); //here! - sqlB = sqlB.append(" Order By "+tableName+"_ID"); + sqlB = sqlB.append(" Order By ") + .append(tableName) + .append("_ID"); try { PreparedStatement pstmt = DB.prepareStatement(sqlB.toString(), trxName); if (value instanceof String) - pstmt.setString(1, ((String)value).toUpperCase()); + pstmt.setString(1, (String)value); else if (value instanceof Integer) pstmt.setInt(1, ((Integer)value).intValue()); if (!tableName.startsWith("AD_")) @@ -117,13 +129,22 @@ public class IDFinder { */ public static int get_IDWithMaster (String tableName, String name, String tableNameMaster, String nameMaster, String trxName) { int id = 0; - StringBuffer sqlB = new StringBuffer ("select "+tableName+"_ID from "+tableName+" where UPPER(name)=? and " - + tableNameMaster+"_ID = (select "+tableNameMaster+"_ID from "+tableNameMaster+" where UPPER(name)=?)"); + StringBuffer sqlB = new StringBuffer ("select ") + .append(tableName) + .append("_ID from ") + .append(tableName) + .append(" where name = ? and ") + .append(tableNameMaster) + .append("_ID = (select ") + .append(tableNameMaster) + .append("_ID from ") + .append(tableNameMaster) + .append(" where name = ?)"); try { PreparedStatement pstmt = DB.prepareStatement(sqlB.toString(), trxName); - pstmt.setString(1, name.toUpperCase()); - pstmt.setString(2, nameMaster.toUpperCase()); + pstmt.setString(1, name); + pstmt.setString(2, nameMaster); ResultSet rs = pstmt.executeQuery(); if (rs.next()) id = rs.getInt(1); @@ -149,8 +170,14 @@ public class IDFinder { public static int get_IDWithMasterAndColumn (String tableName, String columnName, String name, String tableNameMaster, int masterID, String trxName) { int id = 0; - StringBuffer sqlB = new StringBuffer ("select "+tableName+"_ID from "+tableName+" where UPPER("+columnName+")=? and " - + tableNameMaster+"_ID =?"); + StringBuffer sqlB = new StringBuffer ("select ") + .append(tableName) + .append("_ID from ") + .append(tableName) + .append(" where ") + .append(columnName) + .append(" = ? and ") + .append(tableNameMaster+"_ID =?"); //StringBuffer sqlC = new StringBuffer ("select "+tableName+"_ID from "+tableName+" where "+columnName+"="+name+" and " // + tableNameMaster+"_ID ="+masterID); log.info(sqlB.toString()); @@ -158,7 +185,7 @@ public class IDFinder { try { PreparedStatement pstmt = DB.prepareStatement(sqlB.toString(), trxName); - pstmt.setString(1, name.toUpperCase()); + pstmt.setString(1, name); pstmt.setInt(2, masterID); ResultSet rs = pstmt.executeQuery(); if (rs.next()) @@ -184,8 +211,13 @@ public class IDFinder { */ public static int get_IDWithMaster (String tableName, String name, String tableNameMaster, int masterID, String trxName) { int id = 0; - StringBuffer sqlB = new StringBuffer ("select "+tableName+"_ID from "+tableName+" where name=? and " - + tableNameMaster+"_ID=?"); + StringBuffer sqlB = new StringBuffer ("select ") + .append(tableName) + .append("_ID from ") + .append(tableName) + .append(" where name=? and ") + .append(tableNameMaster) + .append("_ID=?"); try { PreparedStatement pstmt = DB.prepareStatement(sqlB.toString(), trxName); @@ -215,13 +247,17 @@ public class IDFinder { */ public static int getIDbyName (String tableName, String name, int AD_Client_ID, String trxName) { int id = 0; - String sql = "SELECT "+tableName+"_ID " - + "FROM "+tableName+" " - + "WHERE name=?"; + StringBuffer sql = new StringBuffer("SELECT ") + .append(tableName) + .append("_ID ") + .append("FROM ") + .append(tableName) + .append(" ") + .append("WHERE name=?"); if (!tableName.startsWith("AD_")) - sql = sql + " AND AD_Client_ID=?"; + sql.append(" AND AD_Client_ID=?"); try { - PreparedStatement pstmt = DB.prepareStatement(sql, trxName); + PreparedStatement pstmt = DB.prepareStatement(sql.toString(), trxName); pstmt.setString(1, name); if (!tableName.startsWith("AD_")) pstmt.setInt(2, AD_Client_ID); diff --git a/base/src/org/adempiere/pipo/PackIn.java b/base/src/org/adempiere/pipo/PackIn.java index 5b41fc0f8c..ffe3cdfdc3 100644 --- a/base/src/org/adempiere/pipo/PackIn.java +++ b/base/src/org/adempiere/pipo/PackIn.java @@ -20,6 +20,8 @@ package org.adempiere.pipo; import java.io.File; import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParser; + +import org.compiere.Adempiere; import org.compiere.process.ProcessInfoParameter; import org.compiere.process.SvrProcess; import org.compiere.util.CLogger; @@ -29,7 +31,10 @@ import org.compiere.util.CLogMgt; import org.compiere.util.DB; import org.compiere.util.Env; import org.compiere.util.Ini; +import org.compiere.util.Trx; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; import java.util.logging.*; @@ -42,10 +47,59 @@ public class PackIn extends SvrProcess { /** Logger */ private CLogger log = CLogger.getCLogger("PackIn"); - public static String m_UpdateMode = "false"; + //update system maintain dictionary, default to true + public static String m_UpdateMode = "true"; public static String m_Database = "Oracle"; public static String m_Package_Dir = null; public int p_PackIn_ID = 0; + + private Map tableCache = new HashMap(); + private Map columnCache = new HashMap(); + + /** + * add to table id cache + * @param tableName + * @param tableId + */ + public void addTable(String tableName, int tableId) { + tableCache.put(tableName, tableId); + } + + /** + * Find table id from cache + * @param tableName + * @return tableId + */ + public int getTableId(String tableName) { + if (tableCache.containsKey(tableName)) + return tableCache.get(tableName).intValue(); + else + return 0; + } + + /** + * add to column id cache + * @param tableName + * @param columnName + * @param columnId + */ + public void addColumn(String tableName, String columnName, int columnId) { + columnCache.put(tableName+"."+columnName, columnId); + } + + /** + * find column id from cache + * @param tableName + * @param columnName + * @return column id + */ + public int getColumnId(String tableName, String columnName) { + String key = tableName+"."+columnName; + if (columnCache.containsKey(key)) + return columnCache.get(key).intValue(); + else + return 0; + } protected void prepare() { p_PackIn_ID = getRecord_ID(); @@ -61,7 +115,7 @@ public class PackIn extends SvrProcess { * xml file to read * @return status message */ - public String importXML(String fileName, Properties ctx, String trxName) { + public String importXML(String fileName, Properties ctx, String trxName) throws Exception { log.info("importXML:" + fileName); File in = new File(fileName); if (!in.exists()) { @@ -87,7 +141,7 @@ public class PackIn extends SvrProcess { return "OK."; } catch (Exception e) { log.log(Level.SEVERE, "importXML:", e); - return e.toString(); + throw e; } } @@ -97,21 +151,22 @@ public class PackIn extends SvrProcess { * @return "" * */ - protected String doIt() { + protected String doIt() throws Exception { X_AD_Package_Imp_Proc adPackageImp = new X_AD_Package_Imp_Proc(getCtx(), p_PackIn_ID, null); // Create Target directory if required - String fileSeparator = null; - File tempfile = new File(""); - fileSeparator = tempfile.separator; - File targetDir = new File(adPackageImp.getAD_Package_Dir() + fileSeparator + String packageDirectory = adPackageImp.getAD_Package_Dir(); + if (packageDirectory == null || packageDirectory.trim().length() == 0) { + packageDirectory = Adempiere.getAdempiereHome(); + } + File targetDir = new File( packageDirectory + File.separator + "packages"); if (!targetDir.exists()) { - boolean success = (new File(adPackageImp.getAD_Package_Dir() - + fileSeparator + "packages")).mkdirs(); + boolean success = (new File(packageDirectory + + File.separator + "packages")).mkdirs(); if (!success) { log.info("Target directory creation failed"); } @@ -123,26 +178,26 @@ public class PackIn extends SvrProcess { String PackageName = CreateZipFile.getParentDir(zipFilepath); CreateZipFile.unpackFile(zipFilepath, targetDir); - String dict_file = adPackageImp.getAD_Package_Dir() + fileSeparator - + "packages" + fileSeparator + PackageName + fileSeparator - + "dict" + fileSeparator + "PackOut.xml"; + String dict_file = packageDirectory + File.separator + + "packages" + File.separator + PackageName + File.separator + + "dict" + File.separator + "PackOut.xml"; log.info("dict file->" + dict_file); - PackIn impXML = new PackIn(); + PackIn packIn = new PackIn(); if (adPackageImp.isAD_Override_Dict() == true) - impXML.m_UpdateMode = "true"; + packIn.m_UpdateMode = "true"; else - impXML.m_UpdateMode = "false"; + packIn.m_UpdateMode = "false"; - impXML.m_Package_Dir = adPackageImp.getAD_Package_Dir() + fileSeparator - + "packages" + fileSeparator + PackageName + fileSeparator; + packIn.m_Package_Dir = packageDirectory + File.separator + + "packages" + File.separator + PackageName + File.separator; if (DB.isOracle()) - impXML.m_Database = "Oracle"; + packIn.m_Database = "Oracle"; else if (DB.isPostgreSQL()) - impXML.m_Database = "PostgreSQL"; + packIn.m_Database = "PostgreSQL"; // call XML Handler - impXML.importXML(dict_file, getCtx(), get_TrxName()); + String msg = packIn.importXML(dict_file, getCtx(), get_TrxName()); // Generate Model Classes // globalqss - don't call Generate Model must be done manual @@ -151,7 +206,7 @@ public class PackIn extends SvrProcess { // "org.compiere.model","'U'"}; // org.compiere.util.GenerateModel.main(args) ; - return "Finish Process"; + return msg; } // doIt /*************************************************************************** @@ -176,7 +231,7 @@ public class PackIn extends SvrProcess { Ini.setProperty(Ini.P_ADEMPIERESYS, true); } - PackIn impXML = new PackIn(); + PackIn packIn = new PackIn(); // org.compiere.Compiere.startupEnvironment(true); // Force connection if there are enough parameters. Else we work with // Compiere.properties @@ -185,7 +240,7 @@ public class PackIn extends SvrProcess { // Integer.valueOf(args[2]).intValue(), args[5], args[3], args[4]); CConnection cc = CConnection.get(); // System.out.println("DB Connect String1:"+cc.getDbName()); - impXML.m_Database = cc.getType(); + packIn.m_Database = cc.getType(); DB.setDBTarget(cc); } @@ -226,10 +281,21 @@ public class PackIn extends SvrProcess { CLogMgt.setLevel(logLevel); CLogMgt.setLoggerLevel(logLevel, null); - // impXML.setUpdateMode(args[7]); - impXML.m_UpdateMode = args[7]; + if (args.length >= 8) + packIn.m_UpdateMode = args[7]; - impXML.importXML(file, Env.getCtx(), null); + String trxName = Trx.createTrxName("PackIn"); + try { + packIn.importXML(file, Env.getCtx(), trxName); + Trx trx = Trx.get(trxName, false); + if (trx != null) + trx.commit(true); + } catch (Exception e) { + System.out.println("Import Failed: " + e.getLocalizedMessage()); + Trx trx = Trx.get(trxName, false); + if (trx != null) + trx.rollback(); + } System.exit(0); } // main diff --git a/base/src/org/adempiere/pipo/PackInHandler.java b/base/src/org/adempiere/pipo/PackInHandler.java index 15c0df8e69..640c062c34 100644 --- a/base/src/org/adempiere/pipo/PackInHandler.java +++ b/base/src/org/adempiere/pipo/PackInHandler.java @@ -326,7 +326,7 @@ public class PackInHandler extends DefaultHandler { .append( ", '" + atts.getValue("CompVer") ) .append( "', '" + atts.getValue("Version") ) .append( "', '" + atts.getValue("DataBase") ) - .append( "', '" + atts.getValue("Description").replaceAll("'","''").replaceAll(",","") ) + .append( "', '" + atts.getValue("Description").replaceAll("'","''")) .append( "', '" + atts.getValue("Name") ) .append( "', '" + atts.getValue("creator") ) .append( "', '" + atts.getValue("creatorcontact") ) @@ -357,7 +357,7 @@ public class PackInHandler extends DefaultHandler { .append( ", '" + atts.getValue("CompVer") ) .append( "', '" + atts.getValue("Version") ) .append( "', '" + atts.getValue("DataBase") ) - .append( "', '" + atts.getValue("Description").replaceAll("'","''").replaceAll(",","") ) + .append( "', '" + atts.getValue("Description").replaceAll("'","''")) .append( "', '" + atts.getValue("Name") ) .append( "', '" + atts.getValue("creator") ) .append( "', '" + atts.getValue("creatorcontact") ) @@ -387,20 +387,27 @@ public class PackInHandler extends DefaultHandler { Env.setContext(m_ctx, "PackageDirectory", packageDirectory); m_ctx.put("Document", hd_document); m_ctx.put("DocumentAttributes", attsOut); + m_ctx.put("PackInProcess", packIn); } else if (elementValue.equals("menu")) { //defer - Element e = new Element(uri, localName, qName, atts); + Element e = new Element(uri, localName, qName, new AttributesImpl(atts)); + if (stack.size() > 0) + e.parent = stack.peek(); + stack.push(e); menus.add(e); } else { - Element e = new Element(uri, localName, qName, atts); + Element e = new Element(uri, localName, qName, new AttributesImpl(atts)); + if (stack.size() > 0) + e.parent = stack.peek(); stack.push(e); ElementHandler handler = handlers.get(elementValue); if (handler != null) handler.startElement(m_ctx, e); - if (e.defer) + if (e.defer) { defer.add(new DeferEntry(e, true)); + } } } // startElement @@ -642,6 +649,8 @@ public class PackInHandler extends DefaultHandler { handler.endElement(m_ctx, e); if (e.defer) defer.add(new DeferEntry(e, false)); + else + log.info("Processed: " + e.getElementValue() + " - " + e.attributes.getValue(0)); } } // endElement @@ -677,6 +686,11 @@ public class PackInHandler extends DefaultHandler { int endSize = defer.size(); if (startSize == endSize) break; } while (defer.size() > 0); + + if (defer.size() > 0) { + //TODO + throw new RuntimeException("Failed to resolve dependency for " + defer.size() + " elements."); + } } // globalqss - add support for trx in 3.1.2 diff --git a/base/src/org/adempiere/pipo/handler/CodeSnipitElementHandler.java b/base/src/org/adempiere/pipo/handler/CodeSnipitElementHandler.java index 8af1715876..cc70e398ff 100644 --- a/base/src/org/adempiere/pipo/handler/CodeSnipitElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/CodeSnipitElementHandler.java @@ -67,20 +67,18 @@ public class CodeSnipitElementHandler extends AbstractElementHandler { String packagePath=null; String sourcePath=null; - //get compiere-all directory + //get adempiere-all directory try { - packagePath = currentDirectory.getCanonicalPath(); + packagePath = getPackageDirectory(ctx); File parentDirectory = new File(packagePath); - while (!parentDirectory.getName().equals("packages")){ parentDirectory = parentDirectory.getParentFile(); } parentDirectory = parentDirectory.getParentFile(); sourcePath = parentDirectory.getCanonicalPath(); } catch (IOException e1) { - System.out.println("Can't find compiere-all directory."); - } - + System.out.println("Can't find adempiere-all directory."); + } // Create backup directory if required File backupDir = new File(packagePath+File.separator+"backup"+File.separator); diff --git a/base/src/org/adempiere/pipo/handler/ColumnElementHandler.java b/base/src/org/adempiere/pipo/handler/ColumnElementHandler.java index 6cfa32252e..fef3030175 100644 --- a/base/src/org/adempiere/pipo/handler/ColumnElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/ColumnElementHandler.java @@ -27,6 +27,7 @@ import javax.xml.transform.sax.TransformerHandler; import org.adempiere.pipo.AbstractElementHandler; import org.adempiere.pipo.Element; +import org.adempiere.pipo.PackIn; import org.adempiere.pipo.exception.DatabaseAccessException; import org.adempiere.pipo.exception.POSaveFailedException; import org.compiere.model.MColumn; @@ -43,19 +44,40 @@ public class ColumnElementHandler extends AbstractElementHandler { public void startElement(Properties ctx, Element element) throws SAXException { + PackIn packIn = (PackIn)ctx.get("PackInProcess"); String elementValue = element.getElementValue(); Attributes atts = element.attributes; log.info(elementValue + " " + atts.getValue("ColumnName")); int success = 0; String entitytype = atts.getValue("EntityType"); - if (entitytype.compareTo("U") == 0 || entitytype.compareTo("D") == 0 - && getUpdateMode(ctx).compareTo("true") == 0) { + if (entitytype.equals("U") || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { + if (element.parent != null && element.parent.getElementValue().equals("table") && + element.parent.defer) { + element.defer = true; + return; + } String columnName = atts.getValue("ColumnName"); - - int tableid = get_IDWithColumn(ctx, "AD_Table", "TableName", atts - .getValue("ADTableNameID")); - int id = get_IDWithMasterAndColumn(ctx, "AD_Column", "ColumnName", + String tableName = atts.getValue("ADTableNameID"); + int tableid = 0; + if (element.parent != null && element.parent.getElementValue().equals("table") && + element.parent.recordId > 0) { + tableid = element.parent.recordId; + } else { + tableid = packIn.getTableId(tableName); + } + if (tableid <= 0) { + tableid = get_IDWithColumn(ctx, "AD_Table", "TableName", tableName); + if (tableid > 0) + packIn.addTable(tableName, tableid); + } + int id = packIn.getColumnId(tableName, columnName); + if (id <= 0) { + id = get_IDWithMasterAndColumn(ctx, "AD_Column", "ColumnName", columnName, "AD_Table", tableid); + if (id > 0) { + packIn.addColumn(tableName, columnName, id); + } + } MColumn m_Column = new MColumn(ctx, id, getTrxName(ctx)); int AD_Backup_ID = -1; String Object_Status = null; @@ -193,19 +215,22 @@ public class ColumnElementHandler extends AbstractElementHandler { } // Don't create database column for virtual columns - // Don't create columns by default, just if getIsSyncDatabase='Y' + boolean syncDatabase = "Y".equalsIgnoreCase(atts.getValue("getIsSyncDatabase")); if (recreateColumn) { - String sync = atts.getValue("getIsSyncDatabase"); - if (m_Column.isVirtualColumn() || sync == null - || (!sync.equals("Y"))) + if (m_Column.isVirtualColumn() || !syncDatabase) recreateColumn = false; } + if (tableName.equals("A_Depreciation") && columnName.equals("Processed")) { + System.out.println("A_Depreciation.Processed: " + recreateColumn); + } + if (m_Column.save(getTrxName(ctx)) == true) { record_log(ctx, 1, m_Column.getName(), "Column", m_Column .get_ID(), AD_Backup_ID, Object_Status, "AD_Column", get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Column")); + element.recordId = m_Column.getAD_Column_ID(); } else { record_log(ctx, 0, m_Column.getName(), "Column", m_Column .get_ID(), AD_Backup_ID, Object_Status, "AD_Column", @@ -214,8 +239,8 @@ public class ColumnElementHandler extends AbstractElementHandler { throw new POSaveFailedException("Column"); } - if (recreateColumn) { - success = createcolumn(ctx, m_Column); + if (recreateColumn || syncDatabase) { + success = createColumn(ctx, m_Column, recreateColumn); if (success == 1) { record_log(ctx, 1, m_Column.getColumnName(), "dbColumn", @@ -246,7 +271,7 @@ public class ColumnElementHandler extends AbstractElementHandler { * @param v_IsMandatory * */ - private int createcolumn(Properties ctx, MColumn column) { + private int createColumn(Properties ctx, MColumn column, boolean doAlter) { MTable table = new MTable(ctx, column.getAD_Table_ID(), getTrxName(ctx)); if (table.isView()) return 0; @@ -280,11 +305,13 @@ public class ColumnElementHandler extends AbstractElementHandler { // rsc = md.getColumns(catalog, schema, tableName, columnName); if (rsc.next()) { - // update existing column - boolean notNull = DatabaseMetaData.columnNoNulls == rsc - .getInt("NULLABLE"); - sql = column.getSQLModify(table, - column.isMandatory() != notNull); + if (doAlter) { + // update existing column + boolean notNull = DatabaseMetaData.columnNoNulls == rsc + .getInt("NULLABLE"); + sql = column.getSQLModify(table, + column.isMandatory() != notNull); + } } else { // No existing column sql = column.getSQLAdd(table); @@ -295,19 +322,21 @@ public class ColumnElementHandler extends AbstractElementHandler { rst.close(); rst = null; - log.info(sql); - - if (sql.indexOf(DB.SQLSTATEMENT_SEPARATOR) == -1) { - no = DB.executeUpdate(sql, false, getTrxName(ctx)); - } else { - String statements[] = sql.split(DB.SQLSTATEMENT_SEPARATOR); - for (int i = 0; i < statements.length; i++) { - int count = DB.executeUpdate(statements[i], false, - getTrxName(ctx)); - no += count; + //execute modify or add if needed + if (sql != null && sql.trim().length() > 0) { + log.info(sql); + + if (sql.indexOf(DB.SQLSTATEMENT_SEPARATOR) == -1) { + no = DB.executeUpdate(sql, false, getTrxName(ctx)); + } else { + String statements[] = sql.split(DB.SQLSTATEMENT_SEPARATOR); + for (int i = 0; i < statements.length; i++) { + int count = DB.executeUpdate(statements[i], false, + getTrxName(ctx)); + no += count; + } } } - } catch (SQLException e) { log.log(Level.SEVERE, e.getLocalizedMessage(), e); if (rsc != null) { @@ -443,9 +472,7 @@ public class ColumnElementHandler extends AbstractElementHandler { .isUpdateable() == true ? "true" : "false")); atts.addAttribute("", "", "Name", "CDATA", (m_Column.getName() != null ? m_Column.getName() : "")); - atts.addAttribute("", "", "getIsSyncDatabase", "CDATA", (m_Column - .getIsSyncDatabase() != null ? m_Column.getIsSyncDatabase() - : "")); + atts.addAttribute("", "", "getIsSyncDatabase", "CDATA", "Y"); atts .addAttribute("", "", "ReadOnlyLogic", "CDATA", (m_Column .getReadOnlyLogic() != null ? m_Column diff --git a/base/src/org/adempiere/pipo/handler/DataElementHandler.java b/base/src/org/adempiere/pipo/handler/DataElementHandler.java index 1dfa07f0af..5783530698 100644 --- a/base/src/org/adempiere/pipo/handler/DataElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/DataElementHandler.java @@ -34,6 +34,7 @@ import org.adempiere.pipo.AbstractElementHandler; import org.adempiere.pipo.Element; import org.adempiere.pipo.GenericPO; import org.adempiere.pipo.IDFinder; +import org.adempiere.pipo.exception.POSaveFailedException; import org.compiere.model.POInfo; import org.compiere.model.X_AD_Package_Exp_Detail; import org.compiere.util.DB; @@ -46,7 +47,7 @@ public class DataElementHandler extends AbstractElementHandler { private GenericPO genericPO = null; int AD_Backup_ID = -1; - String Object_Status = null; + String objectStatus = null; String d_tablename = null; private DataRowElementHandler rowHandler = new DataRowElementHandler(); @@ -101,10 +102,10 @@ public class DataElementHandler extends AbstractElementHandler { genericPO = new GenericPO(ctx, id, getTrxName(ctx)); if (id > 0){ AD_Backup_ID = copyRecord(ctx,d_tablename,genericPO); - Object_Status = "Update"; + objectStatus = "Update"; } else{ - Object_Status = "New"; + objectStatus = "New"; AD_Backup_ID =0; } } @@ -131,7 +132,7 @@ public class DataElementHandler extends AbstractElementHandler { ResultSet rs = pstmt.executeQuery(); if (rs.next()) { - Object_Status = "Update"; + objectStatus = "Update"; genericPO = new GenericPO(ctx, rs, getTrxName(ctx)); rs.close(); pstmt.close(); @@ -142,7 +143,7 @@ public class DataElementHandler extends AbstractElementHandler { rs.close(); pstmt.close(); pstmt = null; - Object_Status = "New"; + objectStatus = "New"; // set keyXname. CURRENT_KEY = "key1name"; if (!atts.getValue(CURRENT_KEY).equals("")) { @@ -202,9 +203,11 @@ public class DataElementHandler extends AbstractElementHandler { public void endElement(Properties ctx, Element element) throws SAXException { if (genericPO != null) { if (genericPO.save(getTrxName(ctx))== true) - record_log (ctx, 1, genericPO.get_TableName(),"Data", genericPO.get_ID(),AD_Backup_ID, Object_Status,d_tablename,get_IDWithColumn(ctx, "AD_Table", "TableName", d_tablename)); - else - record_log (ctx, 0, genericPO.get_TableName(),"Data", genericPO.get_ID(),AD_Backup_ID, Object_Status,d_tablename,get_IDWithColumn(ctx, "AD_Table", "TableName", d_tablename)); + record_log (ctx, 1, genericPO.get_TableName(),"Data", genericPO.get_ID(),AD_Backup_ID, objectStatus,d_tablename,get_IDWithColumn(ctx, "AD_Table", "TableName", d_tablename)); + else { + record_log (ctx, 0, genericPO.get_TableName(),"Data", genericPO.get_ID(),AD_Backup_ID, objectStatus,d_tablename,get_IDWithColumn(ctx, "AD_Table", "TableName", d_tablename)); + throw new POSaveFailedException("GenericPO"); + } genericPO = null; } @@ -229,9 +232,9 @@ public class DataElementHandler extends AbstractElementHandler { String isUpdateable = DB.getSQLValueString(getTrxName(ctx), sql.toString(),id); sql = new StringBuffer ("SELECT IsKey FROM AD_column WHERE AD_Column_ID = ?"); String isKey = DB.getSQLValueString(getTrxName(ctx), sql.toString(),id); - if (isKey.equals("N") && + if (("New".equals(objectStatus)) || (isKey.equals("N") && isUpdateable.equals("Y") && - (!atts.getValue("name").equals("CreatedBy")||!atts.getValue("name").equals("UpdatedBy"))) { + (!atts.getValue("name").equals("CreatedBy")||!atts.getValue("name").equals("UpdatedBy")))) { if (atts.getValue("value") != null && !atts.getValue("value").equals("null")) { if (atts.getValue("class").equals("String") || atts.getValue("class").equals("Text") || atts.getValue("class").equals("List")|| atts.getValue("class").equals("Yes-No") diff --git a/base/src/org/adempiere/pipo/handler/DistFileElementHandler.java b/base/src/org/adempiere/pipo/handler/DistFileElementHandler.java index d6f65ac079..9fc97854a8 100644 --- a/base/src/org/adempiere/pipo/handler/DistFileElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/DistFileElementHandler.java @@ -63,7 +63,7 @@ public class DistFileElementHandler extends AbstractElementHandler { String packagePath=null; String sourcePath=null; - //get compiere-all directory + //get adempiere-all directory try { packagePath = getPackageDirectory(ctx); File parentDirectory = new File(packagePath); @@ -73,7 +73,7 @@ public class DistFileElementHandler extends AbstractElementHandler { parentDirectory = parentDirectory.getParentFile(); sourcePath = parentDirectory.getCanonicalPath(); } catch (IOException e1) { - System.out.println("Can't find compiere-all directory."); + System.out.println("Can't find adempiere-all directory."); } diff --git a/base/src/org/adempiere/pipo/handler/DynValRuleElementHandler.java b/base/src/org/adempiere/pipo/handler/DynValRuleElementHandler.java index 3439ff5d14..639bae8053 100644 --- a/base/src/org/adempiere/pipo/handler/DynValRuleElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/DynValRuleElementHandler.java @@ -40,7 +40,7 @@ public class DynValRuleElementHandler extends AbstractElementHandler { Attributes atts = element.attributes; log.info(elementValue+" "+atts.getValue("Name")); String entitytype = atts.getValue("EntityType"); - if (entitytype.equals("U") || entitytype.equals("D") && getUpdateMode(ctx).equals("true")) { + if (entitytype.equals("U") || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { String name = atts.getValue("Name"); int id = get_IDWithColumn(ctx, "AD_Val_Rule", "name", name); @@ -55,7 +55,7 @@ public class DynValRuleElementHandler extends AbstractElementHandler { Object_Status = "New"; AD_Backup_ID =0; } - m_ValRule.setDescription(atts.getValue("Description").replaceAll("'","''").replaceAll(",","")); + m_ValRule.setDescription(atts.getValue("Description").replaceAll("'","''")); m_ValRule.setEntityType(atts.getValue("EntityType")); m_ValRule.setIsActive(atts.getValue("isActive") != null ? Boolean.valueOf(atts.getValue("isActive")).booleanValue():true); m_ValRule.setName(name); diff --git a/base/src/org/adempiere/pipo/handler/FieldElementHandler.java b/base/src/org/adempiere/pipo/handler/FieldElementHandler.java index 8fdcaed58c..372b28eddf 100644 --- a/base/src/org/adempiere/pipo/handler/FieldElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/FieldElementHandler.java @@ -23,6 +23,7 @@ import javax.xml.transform.sax.TransformerHandler; import org.adempiere.pipo.AbstractElementHandler; import org.adempiere.pipo.Element; +import org.adempiere.pipo.PackIn; import org.compiere.model.MField; import org.compiere.model.X_AD_Field; import org.compiere.util.DB; @@ -33,76 +34,133 @@ import org.xml.sax.helpers.AttributesImpl; public class FieldElementHandler extends AbstractElementHandler { - public void startElement(Properties ctx, Element element) throws SAXException { + public void startElement(Properties ctx, Element element) + throws SAXException { + PackIn packIn = (PackIn)ctx.get("PackInProcess"); String elementValue = element.getElementValue(); Attributes atts = element.attributes; - log.info(elementValue+" "+atts.getValue("Name")); + log.info(elementValue + " " + atts.getValue("Name")); String entitytype = atts.getValue("EntityType"); - if (entitytype.compareTo("U") == 0 || entitytype.compareTo("D") == 0 && getUpdateMode(ctx).compareTo("true") == 0) { + if (entitytype.equals("U") + || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { + if (element.parent != null && element.parent.getElementValue().equals("tab") && + element.parent.defer) { + element.defer = true; + return; + } String name = atts.getValue("Name"); String tabname = atts.getValue("ADTabNameID"); String colname = atts.getValue("ADColumnNameID"); -// log.info("Column Name ->"+colname); -// log.info("Database Name ->"+m_DatabaseType); - int tableid = get_IDWithColumn(ctx, "AD_Table", "TableName", atts.getValue("ADTableNameID")); - int windowid = get_ID(ctx, "AD_Window", atts.getValue("ADWindowNameID")); - //log.info("Column Name ->"+colname); - int columnid = get_IDWithMasterAndColumn (ctx, "AD_Column","ColumnName", colname, "AD_Table", tableid); - //log.info("ColumnID->"+columnid); - StringBuffer sqlB = new StringBuffer ("select AD_Tab_ID from AD_Tab where AD_Window_ID = " + windowid) - .append( " and Name = '"+tabname +"'" ) - .append( " and AD_Table_ID = ?"); - int tabid = DB.getSQLValue(getTrxName(ctx), sqlB.toString (), tableid); - - if (tabid > 0 ) - { - - sqlB = new StringBuffer ("select AD_Field_ID from AD_Field where AD_Column_ID = "+columnid - + " and AD_Tab_ID = ?"); - int id = DB.getSQLValue(getTrxName(ctx), sqlB.toString (), tabid); + String tableName = atts.getValue("ADTableNameID"); + int tableid = packIn.getTableId(tableName); + if (tableid <= 0) { + tableid = get_IDWithColumn(ctx, "AD_Table", "TableName", tableName); + if (tableid > 0) + packIn.addTable(tableName, tableid); + } + if (tableid <= 0) { + element.defer = true; + return; + } + int windowid = get_ID(ctx, "AD_Window", atts + .getValue("ADWindowNameID")); + if (windowid <= 0) { + element.defer = true; + return; + } + int columnid = packIn.getColumnId(tableName, colname); + if (columnid <= 0) { + columnid = get_IDWithMasterAndColumn(ctx, "AD_Column", + "ColumnName", colname, "AD_Table", tableid); + if (columnid > 0) + packIn.addColumn(tableName, colname, columnid); + } + if (columnid <= 0) { + element.defer = true; + return; + } + int tabid = 0; + if (element.parent != null && element.parent.getElementValue().equals("tab") && + element.parent.recordId > 0) { + tabid = element.parent.recordId; + } else { + StringBuffer sqlB = new StringBuffer( + "select AD_Tab_ID from AD_Tab where AD_Window_ID = " + + windowid).append(" and Name = '" + tabname + "'") + .append(" and AD_Table_ID = ?"); + tabid = DB.getSQLValue(getTrxName(ctx), sqlB.toString(), + tableid); + if (element.parent != null && element.parent.getElementValue().equals("tab") && tabid > 0) { + element.parent.recordId = tabid; + } + } + if (tabid > 0) { + StringBuffer sqlB = new StringBuffer( + "select AD_Field_ID from AD_Field where AD_Column_ID = ") + .append(columnid) + .append(" and AD_Tab_ID = ?"); + int id = DB + .getSQLValue(getTrxName(ctx), sqlB.toString(), tabid); MField m_Field = new MField(ctx, id, getTrxName(ctx)); int AD_Backup_ID = -1; String Object_Status = null; - if (id > 0){ - AD_Backup_ID = copyRecord(ctx, "AD_Field",m_Field); - Object_Status = "Update"; - } - else{ + if (id > 0) { + AD_Backup_ID = copyRecord(ctx, "AD_Field", m_Field); + Object_Status = "Update"; + } else { Object_Status = "New"; - AD_Backup_ID =0; + AD_Backup_ID = 0; } m_Field.setName(atts.getValue("Name")); m_Field.setAD_Column_ID(columnid); - name = atts.getValue("ADFieldGroupNameID"); + name = atts.getValue("ADFieldGroupNameID"); id = get_IDWithColumn(ctx, "AD_FieldGroup", "Name", name); - m_Field.setAD_FieldGroup_ID(id); - m_Field.setAD_Tab_ID(tabid); - m_Field.setEntityType (atts.getValue("EntityType")); - m_Field.setIsSameLine(Boolean.valueOf(atts.getValue("SameLine")).booleanValue()); - m_Field.setIsCentrallyMaintained(Boolean.valueOf(atts.getValue("isCentrallyMaintained")).booleanValue()); - m_Field.setIsDisplayed(Boolean.valueOf(atts.getValue("Displayed")).booleanValue()); - //m_Field.setIsEncrypted(Boolean.valueOf(atts.getValue("isEncrypted")).booleanValue()); - m_Field.setIsFieldOnly(Boolean.valueOf(atts.getValue("isFieldOnly")).booleanValue()); - m_Field.setIsHeading(Boolean.valueOf(atts.getValue("isHeading")).booleanValue()); - m_Field.setIsReadOnly(Boolean.valueOf(atts.getValue("isReadOnly")).booleanValue()); + m_Field.setAD_FieldGroup_ID(id); + m_Field.setAD_Tab_ID(tabid); + m_Field.setEntityType(atts.getValue("EntityType")); + m_Field.setIsSameLine(Boolean + .valueOf(atts.getValue("SameLine")).booleanValue()); + m_Field.setIsCentrallyMaintained(Boolean.valueOf( + atts.getValue("isCentrallyMaintained")).booleanValue()); + m_Field.setIsDisplayed(Boolean.valueOf( + atts.getValue("Displayed")).booleanValue()); + // m_Field.setIsEncrypted(Boolean.valueOf(atts.getValue("isEncrypted")).booleanValue()); + m_Field.setIsFieldOnly(Boolean.valueOf( + atts.getValue("isFieldOnly")).booleanValue()); + m_Field.setIsHeading(Boolean + .valueOf(atts.getValue("isHeading")).booleanValue()); + m_Field.setIsReadOnly(Boolean.valueOf( + atts.getValue("isReadOnly")).booleanValue()); m_Field.setSeqNo(Integer.parseInt(atts.getValue("SeqNo"))); - m_Field.setDisplayLength(Integer.parseInt(atts.getValue("DisplayLength"))); - m_Field.setDescription(atts.getValue("Description").replaceAll("'","''").replaceAll(",","")); - m_Field.setHelp(atts.getValue("Help").replaceAll("'","''").replaceAll(",","")); - m_Field.setIsActive(atts.getValue("isActive") != null ? Boolean.valueOf(atts.getValue("isActive")).booleanValue():true); + m_Field.setDisplayLength(Integer.parseInt(atts + .getValue("DisplayLength"))); + m_Field.setDescription(atts.getValue("Description").replaceAll( + "'", "''").replaceAll(",", "")); + m_Field.setHelp(atts.getValue("Help").replaceAll("'", "''") + .replaceAll(",", "")); + m_Field.setIsActive(atts.getValue("isActive") != null ? Boolean + .valueOf(atts.getValue("isActive")).booleanValue() + : true); m_Field.setSortNo(new BigDecimal(atts.getValue("SortNo"))); m_Field.setDisplayLogic(atts.getValue("DisplayLogic")); - if (m_Field.save(getTrxName(ctx)) == true){ - record_log (ctx, 1, m_Field.getName(),"Field", m_Field.get_ID(),AD_Backup_ID, Object_Status,"AD_Field",get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Field")); + if (m_Field.save(getTrxName(ctx)) == true) { + record_log(ctx, 1, m_Field.getName(), "Field", m_Field + .get_ID(), AD_Backup_ID, Object_Status, "AD_Field", + get_IDWithColumn(ctx, "AD_Table", "TableName", + "AD_Field")); + element.recordId = m_Field.getAD_Field_ID(); + } else { + record_log(ctx, 0, m_Field.getName(), "Field", m_Field + .get_ID(), AD_Backup_ID, Object_Status, "AD_Field", + get_IDWithColumn(ctx, "AD_Table", "TableName", + "AD_Field")); } - else{ - record_log (ctx, 0, m_Field.getName(),"Field", m_Field.get_ID(),AD_Backup_ID, Object_Status,"AD_Field",get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Field")); - } - } - else - log.severe("Tab do not exist to field Name: "+ name); - - } + } else { + element.defer = true; + return; + } + + } } public void endElement(Properties ctx, Element element) throws SAXException { @@ -110,82 +168,97 @@ public class FieldElementHandler extends AbstractElementHandler { public void create(Properties ctx, TransformerHandler document) throws SAXException { - int AD_Field_ID = Env.getContextAsInt(ctx, X_AD_Field.COLUMNNAME_AD_Field_ID); - X_AD_Field m_Field = new X_AD_Field (ctx, AD_Field_ID, null); + int AD_Field_ID = Env.getContextAsInt(ctx, + X_AD_Field.COLUMNNAME_AD_Field_ID); + X_AD_Field m_Field = new X_AD_Field(ctx, AD_Field_ID, null); AttributesImpl atts = new AttributesImpl(); - createFieldBinding(atts,m_Field); - document.startElement("","","field",atts); - document.endElement("","","field"); + createFieldBinding(atts, m_Field); + document.startElement("", "", "field", atts); + document.endElement("", "", "field"); } - private AttributesImpl createFieldBinding( AttributesImpl atts, X_AD_Field m_Field) - { + private AttributesImpl createFieldBinding(AttributesImpl atts, + X_AD_Field m_Field) { String sql = null; - String name = null; + String name = null; atts.clear(); - if (m_Field.getAD_Column_ID()> 0 ){ + if (m_Field.getAD_Column_ID() > 0) { sql = "SELECT ColumnName FROM AD_Column WHERE AD_Column_ID=?"; - name = DB.getSQLValueString(null,sql,m_Field.getAD_Column_ID()); - atts.addAttribute("","","ADColumnNameID","CDATA",name); - } - else - atts.addAttribute("","","ADColumnNameID","CDATA",""); - - if (m_Field.getAD_Column_ID()> 0 ){ + name = DB.getSQLValueString(null, sql, m_Field.getAD_Column_ID()); + atts.addAttribute("", "", "ADColumnNameID", "CDATA", name); + } else + atts.addAttribute("", "", "ADColumnNameID", "CDATA", ""); + + if (m_Field.getAD_Column_ID() > 0) { sql = "SELECT AD_Table_ID FROM AD_Column WHERE AD_Column_ID=?"; - int idTable = DB.getSQLValue(null, sql,m_Field.getAD_Column_ID()); + int idTable = DB.getSQLValue(null, sql, m_Field.getAD_Column_ID()); sql = "SELECT TableName FROM AD_Table WHERE AD_Table_ID=?"; - name = DB.getSQLValueString(null,sql,idTable); - atts.addAttribute("","","ADTableNameID","CDATA",name); - } - else - atts.addAttribute("","","ADTableNameID","CDATA",""); - if (m_Field.getAD_FieldGroup_ID()> 0 ){ + name = DB.getSQLValueString(null, sql, idTable); + atts.addAttribute("", "", "ADTableNameID", "CDATA", name); + } else + atts.addAttribute("", "", "ADTableNameID", "CDATA", ""); + if (m_Field.getAD_FieldGroup_ID() > 0) { sql = "SELECT Name FROM AD_FieldGroup WHERE AD_FieldGroup_ID=?"; - name = DB.getSQLValueString(null,sql,m_Field.getAD_FieldGroup_ID()); - atts.addAttribute("","","ADFieldGroupNameID","CDATA",name); - } - else - atts.addAttribute("","","ADFieldGroupNameID","CDATA",""); - - if (m_Field.getAD_Field_ID()> 0 ){ + name = DB.getSQLValueString(null, sql, m_Field + .getAD_FieldGroup_ID()); + atts.addAttribute("", "", "ADFieldGroupNameID", "CDATA", name); + } else + atts.addAttribute("", "", "ADFieldGroupNameID", "CDATA", ""); + + if (m_Field.getAD_Field_ID() > 0) { sql = "SELECT Name FROM AD_Field WHERE AD_Field_ID=?"; - name = DB.getSQLValueString(null,sql,m_Field.getAD_Field_ID()); - atts.addAttribute("","","ADFieldNameID","CDATA",name); - } - else - atts.addAttribute("","","ADFieldNameID","CDATA",""); - - if (m_Field.getAD_Tab_ID()> 0 ){ - sql = "SELECT Name FROM AD_Tab WHERE AD_Tab_ID=?"; - name = DB.getSQLValueString(null,sql,m_Field.getAD_Tab_ID()); - atts.addAttribute("","","ADTabNameID","CDATA",name); - sql = "SELECT AD_Window_ID FROM AD_Tab WHERE AD_Tab_ID=?"; - int windowid = DB.getSQLValue(null,sql,m_Field.getAD_Tab_ID()); + name = DB.getSQLValueString(null, sql, m_Field.getAD_Field_ID()); + atts.addAttribute("", "", "ADFieldNameID", "CDATA", name); + } else + atts.addAttribute("", "", "ADFieldNameID", "CDATA", ""); + + if (m_Field.getAD_Tab_ID() > 0) { + sql = "SELECT Name FROM AD_Tab WHERE AD_Tab_ID=?"; + name = DB.getSQLValueString(null, sql, m_Field.getAD_Tab_ID()); + atts.addAttribute("", "", "ADTabNameID", "CDATA", name); + sql = "SELECT AD_Window_ID FROM AD_Tab WHERE AD_Tab_ID=?"; + int windowid = DB.getSQLValue(null, sql, m_Field.getAD_Tab_ID()); sql = "SELECT Name FROM AD_Window WHERE AD_Window_ID=?"; - name = DB.getSQLValueString(null,sql,windowid); - atts.addAttribute("","","ADWindowNameID","CDATA",name); - } - else - atts.addAttribute("","","ADTabNameID","CDATA",""); - - atts.addAttribute("","","EntityType","CDATA",(m_Field.getEntityType () != null ? m_Field.getEntityType ():"")); - atts.addAttribute("","","Name","CDATA",(m_Field.getName () != null ? m_Field.getName ():"")); - atts.addAttribute("","","SameLine","CDATA", (m_Field.isSameLine() == true ? "true":"false")); - atts.addAttribute("","","isCentrallyMaintained","CDATA",(m_Field.isCentrallyMaintained()== true ? "true":"false")); - atts.addAttribute("","","Displayed","CDATA",(m_Field.isDisplayed()== true ? "true":"false")); - atts.addAttribute("","","isActive","CDATA",(m_Field.isActive()== true ? "true":"false")); - atts.addAttribute("","","isEncrypted","CDATA",(m_Field.isEncrypted()== true ? "true":"false")); - atts.addAttribute("","","isFieldOnly","CDATA",(m_Field.isFieldOnly()== true ? "true":"false")); - atts.addAttribute("","","isHeading","CDATA",(m_Field.isHeading()== true ? "true":"false")); - atts.addAttribute("","","isReadOnly","CDATA",(m_Field.isReadOnly()== true ? "true":"false")); - atts.addAttribute("","","SeqNo","CDATA", "" + (m_Field.getSeqNo())); - atts.addAttribute("","","DisplayLength","CDATA",(m_Field.getDisplayLength () > 0 ? "" + m_Field.getDisplayLength():"0")); - atts.addAttribute("","","Description","CDATA",(m_Field.getDescription () != null ? m_Field.getDescription():"")); - atts.addAttribute("","","Help","CDATA",(m_Field.getHelp () != null ? m_Field.getHelp():"")); - atts.addAttribute("","","SortNo","CDATA",(m_Field.getSortNo () != null ? m_Field.getSortNo().toString():"")); - atts.addAttribute("","","DisplayLogic","CDATA",(m_Field.getDisplayLogic () != null ? m_Field.getDisplayLogic():"")); - atts.addAttribute("","","ObscureType","CDATA",(m_Field.getObscureType () != null ? m_Field.getObscureType():"")); + name = DB.getSQLValueString(null, sql, windowid); + atts.addAttribute("", "", "ADWindowNameID", "CDATA", name); + } else + atts.addAttribute("", "", "ADTabNameID", "CDATA", ""); + + atts.addAttribute("", "", "EntityType", "CDATA", (m_Field + .getEntityType() != null ? m_Field.getEntityType() : "")); + atts.addAttribute("", "", "Name", "CDATA", + (m_Field.getName() != null ? m_Field.getName() : "")); + atts.addAttribute("", "", "SameLine", "CDATA", + (m_Field.isSameLine() == true ? "true" : "false")); + atts.addAttribute("", "", "isCentrallyMaintained", "CDATA", (m_Field + .isCentrallyMaintained() == true ? "true" : "false")); + atts.addAttribute("", "", "Displayed", "CDATA", + (m_Field.isDisplayed() == true ? "true" : "false")); + atts.addAttribute("", "", "isActive", "CDATA", + (m_Field.isActive() == true ? "true" : "false")); + atts.addAttribute("", "", "isEncrypted", "CDATA", (m_Field + .isEncrypted() == true ? "true" : "false")); + atts.addAttribute("", "", "isFieldOnly", "CDATA", (m_Field + .isFieldOnly() == true ? "true" : "false")); + atts.addAttribute("", "", "isHeading", "CDATA", + (m_Field.isHeading() == true ? "true" : "false")); + atts.addAttribute("", "", "isReadOnly", "CDATA", + (m_Field.isReadOnly() == true ? "true" : "false")); + atts.addAttribute("", "", "SeqNo", "CDATA", "" + (m_Field.getSeqNo())); + atts.addAttribute("", "", "DisplayLength", "CDATA", + (m_Field.getDisplayLength() > 0 ? "" + + m_Field.getDisplayLength() : "0")); + atts.addAttribute("", "", "Description", "CDATA", (m_Field + .getDescription() != null ? m_Field.getDescription() : "")); + atts.addAttribute("", "", "Help", "CDATA", + (m_Field.getHelp() != null ? m_Field.getHelp() : "")); + atts.addAttribute("", "", "SortNo", "CDATA", + (m_Field.getSortNo() != null ? m_Field.getSortNo().toString() + : "")); + atts.addAttribute("", "", "DisplayLogic", "CDATA", (m_Field + .getDisplayLogic() != null ? m_Field.getDisplayLogic() : "")); + atts.addAttribute("", "", "ObscureType", "CDATA", (m_Field + .getObscureType() != null ? m_Field.getObscureType() : "")); return atts; } } diff --git a/base/src/org/adempiere/pipo/handler/FormElementHandler.java b/base/src/org/adempiere/pipo/handler/FormElementHandler.java index 5df622c610..e20c45b292 100644 --- a/base/src/org/adempiere/pipo/handler/FormElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/FormElementHandler.java @@ -38,7 +38,7 @@ public class FormElementHandler extends AbstractElementHandler { log.info(elementValue+" "+atts.getValue("ADFormNameID")); String entitytype = atts.getValue("EntityType"); - if (entitytype.compareTo("U") == 0 || entitytype.compareTo("D") == 0 && getUpdateMode(ctx).compareTo("true") == 0 ) { + if (entitytype.equals("U") || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { String name = atts.getValue("ADFormNameID"); int id = get_ID(ctx, "AD_Form", name); MForm m_Form = new MForm(ctx, id, getTrxName(ctx)); @@ -55,9 +55,9 @@ public class FormElementHandler extends AbstractElementHandler { m_Form.setClassname (atts.getValue("Classname")); m_Form.setIsBetaFunctionality (Boolean.valueOf(atts.getValue("isBetaFunctionality")).booleanValue()); m_Form.setAccessLevel(atts.getValue("AccessLevel")); - m_Form.setDescription(atts.getValue("Description").replaceAll("'","''").replaceAll(",","")); + m_Form.setDescription(atts.getValue("Description").replaceAll("'","''")); m_Form.setEntityType(atts.getValue("EntityType")); - m_Form.setHelp(atts.getValue("Help").replaceAll(",","")); + m_Form.setHelp(atts.getValue("Help")); m_Form.setIsActive(atts.getValue("isActive") != null ? Boolean.valueOf(atts.getValue("isActive")).booleanValue():true); m_Form.setName(atts.getValue("Name")); diff --git a/base/src/org/adempiere/pipo/handler/MessageElementHandler.java b/base/src/org/adempiere/pipo/handler/MessageElementHandler.java index 549c15559c..443ece9833 100644 --- a/base/src/org/adempiere/pipo/handler/MessageElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/MessageElementHandler.java @@ -41,7 +41,7 @@ public class MessageElementHandler extends AbstractElementHandler { Attributes atts = element.attributes; log.info(elementValue+" "+atts.getValue("Value")); String entitytype = atts.getValue("EntityType"); - if (entitytype.equals("U") || entitytype.equals("D") && getUpdateMode(ctx).equals("true")) { + if (entitytype.equals("U") || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { String value = atts.getValue("Value"); int id = get_IDWithColumn(ctx, "AD_Message", "value", value); @@ -56,8 +56,8 @@ public class MessageElementHandler extends AbstractElementHandler { Object_Status = "New"; AD_Backup_ID =0; } - m_Message.setMsgText(atts.getValue("MsgText").replaceAll("'","''").replaceAll(",","")); - m_Message.setMsgTip(atts.getValue("MsgTip").replaceAll("'","''").replaceAll(",","")); + m_Message.setMsgText(atts.getValue("MsgText").replaceAll("'","''")); + m_Message.setMsgTip(atts.getValue("MsgTip").replaceAll("'","''")); m_Message.setEntityType(atts.getValue("EntityType")); m_Message.setIsActive(atts.getValue("isActive") != null ? Boolean.valueOf(atts.getValue("isActive")).booleanValue():true); m_Message.setValue(value); diff --git a/base/src/org/adempiere/pipo/handler/PrintFormatElementHandler.java b/base/src/org/adempiere/pipo/handler/PrintFormatElementHandler.java index af98ca7436..1711013c23 100644 --- a/base/src/org/adempiere/pipo/handler/PrintFormatElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/PrintFormatElementHandler.java @@ -161,6 +161,7 @@ public class PrintFormatElementHandler extends AbstractElementHandler { m_PrintFormat.get_ID(), AD_Backup_ID, Object_Status, "AD_PrintFormat", get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_PrintFormat")); + element.recordId = m_PrintFormat.getAD_PrintFormat_ID(); } else { record_log(ctx, 0, m_PrintFormat.getName(), "PrintFormat", m_PrintFormat.get_ID(), AD_Backup_ID, Object_Status, diff --git a/base/src/org/adempiere/pipo/handler/PrintFormatItemElementHandler.java b/base/src/org/adempiere/pipo/handler/PrintFormatItemElementHandler.java index 7a70ec2441..ffd0a8716f 100644 --- a/base/src/org/adempiere/pipo/handler/PrintFormatItemElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/PrintFormatItemElementHandler.java @@ -39,6 +39,11 @@ public class PrintFormatItemElementHandler extends AbstractElementHandler { String Object_Status = null; Attributes atts = element.attributes; log.info(elementValue + " " + atts.getValue("Name")); + if (element.parent != null && element.parent.getElementValue().equals("printformat") && + element.parent.defer) { + element.defer = true; + return; + } String name = atts.getValue("Name"); int id = get_IDWithMaster(ctx, "AD_PrintFormatItem", name, @@ -56,7 +61,16 @@ public class PrintFormatItemElementHandler extends AbstractElementHandler { } m_PrintFormatItem.setName(name); name = atts.getValue("ADPrintFormatNameID"); - id = get_IDWithColumn(ctx, "AD_PrintFormat", "Name", name); + if (element.parent != null && element.parent.getElementValue().equals("printformat") && + element.parent.recordId != 0) { + id = element.parent.recordId; + } else { + id = get_IDWithColumn(ctx, "AD_PrintFormat", "Name", name); + if (element.parent != null && element.parent.getElementValue().equals("printformat") && + id > 0) { + element.parent.recordId = id; + } + } if (id <= 0) { element.defer = true; return; @@ -76,31 +90,40 @@ public class PrintFormatItemElementHandler extends AbstractElementHandler { name = atts.getValue("ADPrintGraphID"); if (name != null && name.trim().length() > 0) { id = get_IDWithColumn(ctx, "AD_PrintGraph", "Name", name); + //TODO: export and import of ad_printgraph + /* if (id <= 0) { element.defer = true; return; - } - m_PrintFormatItem.setAD_PrintGraph_ID(id); + }*/ + if (id > 0) + m_PrintFormatItem.setAD_PrintGraph_ID(id); } name = atts.getValue("ADPrintColorID"); if (name != null && name.trim().length() > 0) { id = get_IDWithColumn(ctx, "AD_PrintColor", "Name", name); + //TODO: export and import of ad_printcolor + /* if (id <= 0) { element.defer = true; return; - } - m_PrintFormatItem.setAD_PrintColor_ID(id); + }*/ + if (id > 0) + m_PrintFormatItem.setAD_PrintColor_ID(id); } name = atts.getValue("ADPrintFontID"); if (name != null && name.trim().length() > 0) { id = get_IDWithColumn(ctx, "AD_PrintFont", "Name", name); + //TODO: export and import of print font + /* if (id <= 0) { element.defer = true; return; - } - m_PrintFormatItem.setAD_PrintFont_ID(id); + }*/ + if (id > 0) + m_PrintFormatItem.setAD_PrintFont_ID(id); } m_PrintFormatItem.setPrintName(atts.getValue("PrintName")); diff --git a/base/src/org/adempiere/pipo/handler/ProcessElementHandler.java b/base/src/org/adempiere/pipo/handler/ProcessElementHandler.java index d3139b1424..46fd328bc2 100644 --- a/base/src/org/adempiere/pipo/handler/ProcessElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/ProcessElementHandler.java @@ -29,7 +29,6 @@ import org.adempiere.pipo.Element; import org.adempiere.pipo.PackOut; import org.adempiere.pipo.exception.DatabaseAccessException; import org.adempiere.pipo.exception.POSaveFailedException; -import org.compiere.model.MProcess; import org.compiere.model.MSequence; import org.compiere.model.X_AD_Process; import org.compiere.model.X_AD_Process_Para; @@ -50,22 +49,21 @@ public class ProcessElementHandler extends AbstractElementHandler { log.info(elementValue + " " + atts.getValue("Name")); int id = 0; String entitytype = atts.getValue("EntityType"); - if (entitytype.compareTo("U") == 0 || entitytype.compareTo("D") == 0 - && getUpdateMode(ctx).compareTo("true") == 0) { + if (entitytype.equals("U") || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { String name = atts.getValue("Name"); // Get New process. id = get_ID(ctx, "AD_Process", name); - MProcess m_Process = null; + X_AD_Process m_Process = null; int AD_Backup_ID = -1; String Object_Status = null; if (id > 0) { - m_Process = new MProcess(ctx, id, getTrxName(ctx)); + m_Process = new X_AD_Process(ctx, id, getTrxName(ctx)); AD_Backup_ID = copyRecord(ctx, "AD_Process", m_Process); Object_Status = "Update"; } else { - m_Process = new MProcess(ctx, id, getTrxName(ctx)); + m_Process = new X_AD_Process(ctx, id, getTrxName(ctx)); id = MSequence.getNextID(Env.getAD_Client_ID(ctx), "AD_Process", getTrxName(ctx)); m_Process.setAD_Process_ID(id); diff --git a/base/src/org/adempiere/pipo/handler/ProcessParaElementHandler.java b/base/src/org/adempiere/pipo/handler/ProcessParaElementHandler.java index 59c968e5c1..a2bb416245 100644 --- a/base/src/org/adempiere/pipo/handler/ProcessParaElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/ProcessParaElementHandler.java @@ -39,8 +39,7 @@ public class ProcessParaElementHandler extends AbstractElementHandler { log.info(elementValue + " " + atts.getValue("Name")); String entitytype = atts.getValue("EntityType"); - if (entitytype.compareTo("U") == 0 || entitytype.compareTo("D") == 0 - && getUpdateMode(ctx).compareTo("true") == 0) { + if (entitytype.equals("U") || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { String name = atts.getValue("Name"); int id = get_IDWithMaster(ctx, "AD_Process_Para", name, diff --git a/base/src/org/adempiere/pipo/handler/ReferenceElementHandler.java b/base/src/org/adempiere/pipo/handler/ReferenceElementHandler.java index 698854b28c..0051183cd4 100644 --- a/base/src/org/adempiere/pipo/handler/ReferenceElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/ReferenceElementHandler.java @@ -19,6 +19,8 @@ package org.adempiere.pipo.handler; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; import java.util.logging.Level; @@ -41,6 +43,8 @@ public class ReferenceElementHandler extends AbstractElementHandler { private ReferenceListElementHandler listHandler = new ReferenceListElementHandler(); private ReferenceTableElementHandler tableHandler = new ReferenceTableElementHandler(); + + private List references = new ArrayList(); public void startElement(Properties ctx, Element element) throws SAXException { @@ -63,6 +67,9 @@ public class ReferenceElementHandler extends AbstractElementHandler { if (id > 0) { AD_Backup_ID = copyRecord(ctx, "AD_Reference", m_Reference); Object_Status = "Update"; + if (references.contains(id)) { + return; + } } else { Object_Status = "New"; AD_Backup_ID = 0; @@ -84,6 +91,7 @@ public class ReferenceElementHandler extends AbstractElementHandler { m_Reference.get_ID(), AD_Backup_ID, Object_Status, "AD_Reference", get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Reference")); + references.add(m_Reference.getAD_Reference_ID()); } else { record_log(ctx, 0, m_Reference.getName(), "Reference", m_Reference.get_ID(), AD_Backup_ID, Object_Status, diff --git a/base/src/org/adempiere/pipo/handler/ReferenceListElementHandler.java b/base/src/org/adempiere/pipo/handler/ReferenceListElementHandler.java index bfbac99f42..4a6dc1ffe3 100644 --- a/base/src/org/adempiere/pipo/handler/ReferenceListElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/ReferenceListElementHandler.java @@ -41,32 +41,30 @@ public class ReferenceListElementHandler extends AbstractElementHandler { log.info(elementValue + " " + atts.getValue("Name")); // TODO: Solve for date issues with valuefrom valueto String entitytype = atts.getValue("EntityType"); - if (entitytype.compareTo("U") == 0 || entitytype.compareTo("D") == 0 - && getUpdateMode(ctx).compareTo("true") == 0) { + if (entitytype.equals("U") || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { String name = atts.getValue("Name"); - int Referenceid = get_IDWithColumn(ctx, "AD_Reference", "Name", + String value = atts.getValue("Value"); + int AD_Reference_ID = get_IDWithColumn(ctx, "AD_Reference", "Name", atts.getValue("ADRefenceNameID")); - int id = get_IDWithMaster(ctx, "AD_Ref_List", name, "AD_Reference", - Referenceid); - X_AD_Ref_List m_Ref_List = new X_AD_Ref_List(ctx, id, + int AD_Ref_List_ID = get_IDWithMasterAndColumn(ctx, "AD_Ref_List", "Value", value, "AD_Reference", AD_Reference_ID); + X_AD_Ref_List m_Ref_List = new X_AD_Ref_List(ctx, AD_Ref_List_ID, getTrxName(ctx)); - if (id > 0) { + if (AD_Ref_List_ID > 0) { AD_Backup_ID = copyRecord(ctx, "AD_Ref_List", m_Ref_List); Object_Status = "Update"; } else { Object_Status = "New"; AD_Backup_ID = 0; } - name = atts.getValue("ADRefenceNameID"); - id = get_IDWithColumn(ctx, "AD_Reference", "Name", name); - m_Ref_List.setAD_Reference_ID(id); - m_Ref_List.setDescription(atts.getValue("Description").replaceAll( - "'", "''").replaceAll(",", "")); + + m_Ref_List.setAD_Reference_ID(AD_Reference_ID); + m_Ref_List.setDescription(atts.getValue("Description").replaceAll("'", "''")); m_Ref_List.setEntityType(atts.getValue("EntityType")); m_Ref_List.setName(atts.getValue("Name")); + m_Ref_List.setValue(value); m_Ref_List.setIsActive(atts.getValue("isActive") != null ? Boolean .valueOf(atts.getValue("isActive")).booleanValue() : true); - m_Ref_List.setValue(atts.getValue("Value")); + if (m_Ref_List.save(getTrxName(ctx)) == true) { record_log(ctx, 1, m_Ref_List.getName(), "Reference List", m_Ref_List.get_ID(), AD_Backup_ID, Object_Status, diff --git a/base/src/org/adempiere/pipo/handler/ReferenceTableElementHandler.java b/base/src/org/adempiere/pipo/handler/ReferenceTableElementHandler.java index cb3710176b..840c5cbc5d 100644 --- a/base/src/org/adempiere/pipo/handler/ReferenceTableElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/ReferenceTableElementHandler.java @@ -48,8 +48,7 @@ public class ReferenceTableElementHandler extends AbstractElementHandler { Attributes atts = element.attributes; String entitytype = atts.getValue("EntityType"); String name = atts.getValue("ADRefenceNameID"); - if (entitytype.compareTo("U") == 0 || entitytype.compareTo("D") == 0 - && getUpdateMode(ctx).compareTo("true") == 0) { + if (entitytype.equals("U") || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { StringBuffer sqlB = new StringBuffer( "SELECT AD_Reference_ID FROM AD_Reference WHERE Name= ?"); int id = DB.getSQLValue(getTrxName(ctx), sqlB.toString(), name); @@ -126,10 +125,8 @@ public class ReferenceTableElementHandler extends AbstractElementHandler { name, "AD_Table", tableId); String entityType = atts.getValue("EntityType"); String isValueDisplayed = atts.getValue("IsValueDisplayed"); - String OrderByClause = atts.getValue("OrderByClause").replaceAll( - "'", "''").replaceAll(",", ""); - String WhereClause = atts.getValue("WhereClause").replaceAll("'", - "''").replaceAll(",", ""); + String OrderByClause = atts.getValue("OrderByClause").replaceAll("'", "''"); + String WhereClause = atts.getValue("WhereClause").replaceAll("'","''"); if (count > 0) { sqlB = new StringBuffer("UPDATE AD_Ref_Table ").append( "SET AD_Table_ID = " + tableId).append( diff --git a/base/src/org/adempiere/pipo/handler/ReportViewColElementHandler.java b/base/src/org/adempiere/pipo/handler/ReportViewColElementHandler.java index 304db6316a..5411ce482a 100644 --- a/base/src/org/adempiere/pipo/handler/ReportViewColElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/ReportViewColElementHandler.java @@ -44,8 +44,7 @@ public class ReportViewColElementHandler extends AbstractElementHandler { String entitytype = atts.getValue("EntityType"); String name = atts.getValue("ADReportViewColID"); - if (entitytype.compareTo("U") == 0 || entitytype.compareTo("D") == 0 - && getUpdateMode(ctx).compareTo("true") == 0) { + if (entitytype.equals("U") || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { int id = get_ID(ctx, "AD_Reportview_Col", name); X_AD_ReportView_Col m_Reportview_Col = new X_AD_ReportView_Col(ctx, id, getTrxName(ctx)); diff --git a/base/src/org/adempiere/pipo/handler/TabElementHandler.java b/base/src/org/adempiere/pipo/handler/TabElementHandler.java index 6c2e4e724c..72b44a5439 100644 --- a/base/src/org/adempiere/pipo/handler/TabElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/TabElementHandler.java @@ -27,6 +27,7 @@ import org.adempiere.pipo.AbstractElementHandler; import org.adempiere.pipo.Element; import org.adempiere.pipo.PackOut; import org.adempiere.pipo.exception.DatabaseAccessException; +import org.adempiere.pipo.exception.POSaveFailedException; import org.compiere.model.MTab; import org.compiere.model.X_AD_Field; import org.compiere.model.X_AD_Tab; @@ -45,11 +46,33 @@ public class TabElementHandler extends AbstractElementHandler { Attributes atts = element.attributes; log.info(elementValue+" "+atts.getValue("ADTabNameID")); String entitytype = atts.getValue("EntityType"); - if (entitytype.compareTo("U") == 0 || entitytype.compareTo("D") == 0 && getUpdateMode(ctx).compareTo("true") == 0) { - + if (entitytype.equals("U") || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { + if (element.parent != null && element.parent.getElementValue().equals("window") + && element.parent.defer) { + element.defer = true; + return; + } String name = atts.getValue("ADTabNameID"); int tableid = get_IDWithColumn(ctx, "AD_Table", "TableName", atts.getValue("ADTableNameID")); - int windowid = get_ID(ctx, "AD_Window", atts.getValue("ADWindowNameID")); + if (tableid <= 0) { + element.defer = true; + return; + } + int windowid = 0; + if (element.parent != null && element.parent.getElementValue().equals("window") + && element.parent.recordId > 0) { + windowid = element.parent.recordId; + } else { + windowid = get_ID(ctx, "AD_Window", atts.getValue("ADWindowNameID")); + if (element.parent != null && element.parent.getElementValue().equals("window") + && windowid > 0) { + element.parent.recordId = windowid; + } + } + if (windowid <= 0) { + element.defer = true; + return; + } StringBuffer sqlB = new StringBuffer ("select AD_Tab_ID from AD_Tab where AD_Window_ID = " + windowid + " and Name = '"+name +"'" + " and AD_Table_ID = ?"); @@ -110,10 +133,10 @@ public class TabElementHandler extends AbstractElementHandler { m_Tab.setIncluded_Tab_ID(id); } m_Tab.setCommitWarning(atts.getValue("CommitWarning")); - m_Tab.setDescription(atts.getValue("Description").replaceAll("'","''").replaceAll(",","")); + m_Tab.setDescription(atts.getValue("Description").replaceAll("'","''")); m_Tab.setEntityType (atts.getValue("EntityType")); m_Tab.setHasTree(Boolean.valueOf(atts.getValue("isHasTree")).booleanValue()); - m_Tab.setHelp (atts.getValue("Help").replaceAll("'","''").replaceAll(",","")); + m_Tab.setHelp (atts.getValue("Help").replaceAll("'","''")); m_Tab.setIsActive(atts.getValue("isActive") != null ? Boolean.valueOf(atts.getValue("isActive")).booleanValue():true); m_Tab.setImportFields (atts.getValue("ImportFields")); m_Tab.setIsInfoTab (Boolean.valueOf(atts.getValue("isInfoTab")).booleanValue()); @@ -140,9 +163,11 @@ public class TabElementHandler extends AbstractElementHandler { m_Tab.setIsAdvancedTab(Boolean.valueOf(atts.getValue("isAdvancedTab")).booleanValue()); } if (m_Tab.save(getTrxName(ctx)) == true){ - record_log (ctx, 1, m_Tab.getName(),"Tab", m_Tab.get_ID(),AD_Backup_ID, Object_Status,"AD_Tab",get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Tab")); + record_log (ctx, 1, m_Tab.getName(),"Tab", m_Tab.get_ID(),AD_Backup_ID, Object_Status,"AD_Tab",get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Tab")); + element.recordId = m_Tab.getAD_Tab_ID(); } else { record_log (ctx, 0, m_Tab.getName(),"Tab", m_Tab.get_ID(),AD_Backup_ID, Object_Status,"AD_Tab",get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Tab")); + throw new POSaveFailedException("Tab"); } } diff --git a/base/src/org/adempiere/pipo/handler/TableElementHandler.java b/base/src/org/adempiere/pipo/handler/TableElementHandler.java index b72e24bf97..be65e3d13c 100644 --- a/base/src/org/adempiere/pipo/handler/TableElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/TableElementHandler.java @@ -27,7 +27,9 @@ import javax.xml.transform.sax.TransformerHandler; import org.adempiere.pipo.AbstractElementHandler; import org.adempiere.pipo.Element; +import org.adempiere.pipo.PackIn; import org.adempiere.pipo.PackOut; +import org.adempiere.pipo.exception.POSaveFailedException; import org.compiere.model.MTable; import org.compiere.model.X_AD_Column; import org.compiere.model.X_AD_Package_Exp_Detail; @@ -41,7 +43,10 @@ import org.xml.sax.helpers.AttributesImpl; public class TableElementHandler extends AbstractElementHandler { private ColumnElementHandler columnHandler = new ColumnElementHandler(); + private Listtables = new ArrayList(); + public void startElement(Properties ctx, Element element) throws SAXException { + PackIn packIn = (PackIn)ctx.get("PackInProcess"); String elementValue = element.getElementValue(); Attributes atts = element.attributes; log.info(elementValue+" "+atts.getValue("ADTableNameID")); @@ -50,8 +55,16 @@ public class TableElementHandler extends AbstractElementHandler { if (entitytype.equals("U") || entitytype.equals("D") && getUpdateMode(ctx).equals("true")) { String tableName = atts.getValue("ADTableNameID"); - - int id = get_IDWithColumn(ctx, "AD_Table", "TableName", tableName); + int id = packIn.getTableId(tableName); + if (id <= 0) { + id = get_IDWithColumn(ctx, "AD_Table", "TableName", tableName); + if (id > 0) + packIn.addTable(tableName, id); + } + if (id > 0 && isTableProcess(ctx, id)) { + System.out.println("skip table, already process"); + return; + } MTable m_Table = new MTable(ctx, id, getTrxName(ctx)); int AD_Backup_ID = -1; @@ -79,9 +92,9 @@ public class TableElementHandler extends AbstractElementHandler { m_Table.setAD_Val_Rule_ID(id); m_Table.setAccessLevel (atts.getValue("AccessLevel")); - m_Table.setDescription(atts.getValue("Description").replaceAll("'","''").replaceAll(",","")); + m_Table.setDescription(atts.getValue("Description").replaceAll("'","''")); m_Table.setEntityType(atts.getValue("EntityType")); - m_Table.setHelp(atts.getValue("Help").replaceAll("'","''").replaceAll(",","")); + m_Table.setHelp(atts.getValue("Help").replaceAll("'","''")); m_Table.setIsActive(atts.getValue("isActive") != null ? Boolean.valueOf(atts.getValue("isActive")).booleanValue():true); m_Table.setImportTable(atts.getValue("ImportTable")); m_Table.setIsChangeLog(Boolean.valueOf(atts.getValue("isChangeLog")).booleanValue()); @@ -96,10 +109,14 @@ public class TableElementHandler extends AbstractElementHandler { // log.info("in3"); getDocumentAttributes(ctx).clear(); if (m_Table.save(getTrxName(ctx)) == true){ - record_log (ctx, 1, m_Table.getName(),"Table", m_Table.get_ID(),AD_Backup_ID, Object_Status,"AD_Table",get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Table")); + record_log (ctx, 1, m_Table.getName(),"Table", m_Table.get_ID(),AD_Backup_ID, Object_Status,"AD_Table",get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Table")); + tables.add(m_Table.getAD_Table_ID()); + packIn.addTable(tableName, m_Table.getAD_Table_ID()); + element.recordId = m_Table.getAD_Table_ID(); } else{ record_log (ctx, 0, m_Table.getName(),"Table", m_Table.get_ID(),AD_Backup_ID, Object_Status,"AD_Table",get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Table")); + throw new POSaveFailedException("Table"); } } } @@ -112,7 +129,7 @@ public class TableElementHandler extends AbstractElementHandler { int AD_Table_ID = Env.getContextAsInt(ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Table_ID); PackOut packOut = (PackOut)ctx.get("PackOutProcess"); - boolean exported = isTableExported(ctx, AD_Table_ID); + boolean exported = isTableProcess(ctx, AD_Table_ID); AttributesImpl atts = new AttributesImpl(); //Export table if not already done so if (!exported){ @@ -202,19 +219,12 @@ public class TableElementHandler extends AbstractElementHandler { ctx.remove(X_AD_Column.COLUMNNAME_AD_Column_ID); } - private boolean isTableExported(Properties ctx, int AD_Table_ID) { - Listtables = (List)ctx.get("ExportedTables"); - if (tables == null) { - tables = new ArrayList(); + private boolean isTableProcess(Properties ctx, int AD_Table_ID) { + if (tables.contains(AD_Table_ID)) + return true; + else { tables.add(AD_Table_ID); return false; - } else { - if (tables.contains(AD_Table_ID)) - return true; - else { - tables.add(AD_Table_ID); - return false; - } } } diff --git a/base/src/org/adempiere/pipo/handler/TaskElementHandler.java b/base/src/org/adempiere/pipo/handler/TaskElementHandler.java index 9e4bcbd27e..1a80d4b257 100644 --- a/base/src/org/adempiere/pipo/handler/TaskElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/TaskElementHandler.java @@ -22,6 +22,7 @@ import javax.xml.transform.sax.TransformerHandler; import org.adempiere.pipo.AbstractElementHandler; import org.adempiere.pipo.Element; +import org.adempiere.pipo.exception.POSaveFailedException; import org.compiere.model.MTask; import org.compiere.model.X_AD_Task; import org.compiere.util.DB; @@ -32,37 +33,47 @@ import org.xml.sax.helpers.AttributesImpl; public class TaskElementHandler extends AbstractElementHandler { - public void startElement(Properties ctx, Element element) throws SAXException { + public void startElement(Properties ctx, Element element) + throws SAXException { String elementValue = element.getElementValue(); Attributes atts = element.attributes; - log.info(elementValue+" "+atts.getValue("ADTaskNameID")); + log.info(elementValue + " " + atts.getValue("ADTaskNameID")); String entitytype = atts.getValue("EntityType"); - if (entitytype.compareTo("U") == 0 || entitytype.compareTo("D") == 0 && getUpdateMode(ctx).compareTo("true") == 0 ) { + if (entitytype.equals("U") + || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { String name = atts.getValue("ADTaskNameID"); int id = get_ID(ctx, "AD_Task", name); MTask m_Task = new MTask(ctx, id, getTrxName(ctx)); int AD_Backup_ID = -1; String Object_Status = null; - if (id > 0){ - AD_Backup_ID = copyRecord(ctx, "AD_Task",m_Task); - Object_Status = "Update"; - } - else{ + if (id > 0) { + AD_Backup_ID = copyRecord(ctx, "AD_Task", m_Task); + Object_Status = "Update"; + } else { Object_Status = "New"; - AD_Backup_ID =0; - } - m_Task.setAccessLevel(atts.getValue("AccessLevel")); - m_Task.setDescription(atts.getValue("Description").replaceAll("'","''").replaceAll(",","")); - m_Task.setEntityType(atts.getValue("EntityType")); - m_Task.setHelp(atts.getValue("Help").replaceAll("'","''").replaceAll(",","")); - m_Task.setIsActive(atts.getValue("isActive") != null ? Boolean.valueOf(atts.getValue("isActive")).booleanValue():true); - m_Task.setName(name); - m_Task.setOS_Command(atts.getValue("OS_Command")); - if (m_Task.save(getTrxName(ctx)) == true){ - record_log (ctx, 1, m_Task.getName(),"Task", m_Task.get_ID(),AD_Backup_ID, Object_Status,"AD_Task",get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Task")); + AD_Backup_ID = 0; } - else{ - record_log (ctx, 0, m_Task.getName(),"Task", m_Task.get_ID(),AD_Backup_ID, Object_Status,"AD_Task",get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Task")); + m_Task.setAccessLevel(atts.getValue("AccessLevel")); + m_Task.setDescription(atts.getValue("Description").replaceAll("'", + "''").replaceAll(",", "")); + m_Task.setEntityType(atts.getValue("EntityType")); + m_Task.setHelp(atts.getValue("Help").replaceAll("'", "''") + .replaceAll(",", "")); + m_Task.setIsActive(atts.getValue("isActive") != null ? Boolean + .valueOf(atts.getValue("isActive")).booleanValue() : true); + m_Task.setName(name); + m_Task.setOS_Command(atts.getValue("OS_Command")); + if (m_Task.save(getTrxName(ctx)) == true) { + record_log(ctx, 1, m_Task.getName(), "Task", m_Task.get_ID(), + AD_Backup_ID, Object_Status, "AD_Task", + get_IDWithColumn(ctx, "AD_Table", "TableName", + "AD_Task")); + } else { + record_log(ctx, 0, m_Task.getName(), "Task", m_Task.get_ID(), + AD_Backup_ID, Object_Status, "AD_Task", + get_IDWithColumn(ctx, "AD_Table", "TableName", + "AD_Task")); + throw new POSaveFailedException("Task"); } } } @@ -73,35 +84,42 @@ public class TaskElementHandler extends AbstractElementHandler { public void create(Properties ctx, TransformerHandler document) throws SAXException { int AD_Task_ID = Env.getContextAsInt(ctx, "AD_Task_ID"); - X_AD_Task m_Task = new X_AD_Task (ctx, AD_Task_ID, null); - AttributesImpl atts = new AttributesImpl(); - createTaskBinding(atts,m_Task); - document.startElement("","","task",atts); - document.endElement("","","task"); - + X_AD_Task m_Task = new X_AD_Task(ctx, AD_Task_ID, null); + AttributesImpl atts = new AttributesImpl(); + createTaskBinding(atts, m_Task); + document.startElement("", "", "task", atts); + document.endElement("", "", "task"); + } - - private static AttributesImpl createTaskBinding( AttributesImpl atts, X_AD_Task m_Task) - { + + private static AttributesImpl createTaskBinding(AttributesImpl atts, + X_AD_Task m_Task) { String sql = null; - String name = null; - atts.clear(); - if (m_Task.getAD_Task_ID()> 0 ){ - sql = "SELECT Name FROM AD_Task WHERE AD_Task_ID=?"; - name = DB.getSQLValueString(null,sql,m_Task.getAD_Task_ID()); - } - if (name != null ) - atts.addAttribute("","","ADTaskNameID","CDATA",name); - else - atts.addAttribute("","","ADTaskNameID","CDATA",""); - atts.addAttribute("","","AccessLevel","CDATA",(m_Task.getAccessLevel () != null ? m_Task.getAccessLevel ():"")); - atts.addAttribute("","","Description","CDATA",(m_Task.getDescription () != null ? m_Task.getDescription ():"")); - atts.addAttribute("","","EntityType","CDATA",(m_Task.getEntityType () != null ? m_Task.getEntityType ():"")); - atts.addAttribute("","","Help","CDATA",(m_Task.getHelp () != null ? m_Task.getHelp ():"")); - atts.addAttribute("","","isActive","CDATA",(m_Task.isActive()== true ? "true":"false")); - atts.addAttribute("","","Name","CDATA",(m_Task.getName () != null ? m_Task.getName ():"")); - atts.addAttribute("","","OS_Command","CDATA",(m_Task.getOS_Command () != null ? m_Task.getOS_Command ():"")); - return atts; + String name = null; + atts.clear(); + if (m_Task.getAD_Task_ID() > 0) { + sql = "SELECT Name FROM AD_Task WHERE AD_Task_ID=?"; + name = DB.getSQLValueString(null, sql, m_Task.getAD_Task_ID()); + } + if (name != null) + atts.addAttribute("", "", "ADTaskNameID", "CDATA", name); + else + atts.addAttribute("", "", "ADTaskNameID", "CDATA", ""); + atts.addAttribute("", "", "AccessLevel", "CDATA", (m_Task + .getAccessLevel() != null ? m_Task.getAccessLevel() : "")); + atts.addAttribute("", "", "Description", "CDATA", (m_Task + .getDescription() != null ? m_Task.getDescription() : "")); + atts.addAttribute("", "", "EntityType", "CDATA", (m_Task + .getEntityType() != null ? m_Task.getEntityType() : "")); + atts.addAttribute("", "", "Help", "CDATA", + (m_Task.getHelp() != null ? m_Task.getHelp() : "")); + atts.addAttribute("", "", "isActive", "CDATA", + (m_Task.isActive() == true ? "true" : "false")); + atts.addAttribute("", "", "Name", "CDATA", + (m_Task.getName() != null ? m_Task.getName() : "")); + atts.addAttribute("", "", "OS_Command", "CDATA", (m_Task + .getOS_Command() != null ? m_Task.getOS_Command() : "")); + return atts; } } diff --git a/base/src/org/adempiere/pipo/handler/UserRoleElementHandler.java b/base/src/org/adempiere/pipo/handler/UserRoleElementHandler.java index 2befda888a..76d4490485 100644 --- a/base/src/org/adempiere/pipo/handler/UserRoleElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/UserRoleElementHandler.java @@ -59,7 +59,7 @@ public class UserRoleElementHandler extends AbstractElementHandler { orgid = DB.getSQLValue(getTrxName(ctx),sqlB.toString(),name); } - sqlB = new StringBuffer ("SELECT count(*) FROM AD_User_Roles WHERE AD_User_ID = ? and AD_Role_ID = ? and AD_Org_ID = "+orgid); + sqlB = new StringBuffer ("SELECT count(*) FROM AD_User_Roles WHERE AD_User_ID = ? and AD_Role_ID = ?"); int count = DB.getSQLValue(getTrxName(ctx),sqlB.toString(),userid,roleid); int AD_Backup_ID = -1; diff --git a/base/src/org/adempiere/pipo/handler/WindowAccessElementHandler.java b/base/src/org/adempiere/pipo/handler/WindowAccessElementHandler.java index da9347ef79..c97a296f14 100644 --- a/base/src/org/adempiere/pipo/handler/WindowAccessElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/WindowAccessElementHandler.java @@ -43,12 +43,20 @@ public class WindowAccessElementHandler extends AbstractElementHandler { String name = atts.getValue("rolename"); sqlB = new StringBuffer ("SELECT AD_Role_ID FROM AD_Role WHERE Name= ?"); roleid = DB.getSQLValue(getTrxName(ctx),sqlB.toString(),name); + if (roleid <= 0) { + element.defer = true; + return; + } } if (atts.getValue("windowname")!=null){ String name = atts.getValue("windowname"); sqlB = new StringBuffer ("SELECT AD_Window_ID FROM AD_Window WHERE Name= ?"); windowid = DB.getSQLValue(getTrxName(ctx),sqlB.toString(),name); + if (windowid <= 0) { + element.defer = true; + return; + } } sqlB = new StringBuffer ("SELECT count(*) FROM AD_Window_Access WHERE AD_Role_ID=? and AD_Window_ID=?"); diff --git a/base/src/org/adempiere/pipo/handler/WindowElementHandler.java b/base/src/org/adempiere/pipo/handler/WindowElementHandler.java index 115d11a7cf..946f0f66c9 100644 --- a/base/src/org/adempiere/pipo/handler/WindowElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/WindowElementHandler.java @@ -51,8 +51,7 @@ public class WindowElementHandler extends AbstractElementHandler { Attributes atts = element.attributes; log.info(elementValue + " " + atts.getValue("Name")); String entitytype = atts.getValue("EntityType"); - if (entitytype.compareTo("U") == 0 || entitytype.compareTo("D") == 0 - && getUpdateMode(ctx).compareTo("true") == 0) { + if (entitytype.equals("U") || (entitytype.equals("D") && getUpdateMode(ctx).equals("true"))) { String name = atts.getValue("Name"); int id = get_ID(ctx, "AD_Window", name); MWindow m_Window = new MWindow(ctx, id, getTrxName(ctx)); @@ -70,21 +69,27 @@ public class WindowElementHandler extends AbstractElementHandler { name = atts.getValue("ADImageNameID"); if (name != null && name.trim().length() > 0) { id = get_IDWithColumn(ctx, "AD_Image", "Name", name); + //TODO: export and import of ad_image + /* if (id <= 0) { element.defer = true; return; - } - m_Window.setAD_Image_ID(id); + }*/ + if (id > 0) + m_Window.setAD_Image_ID(id); } name = atts.getValue("ADColorNameID"); if (name != null && name.trim().length() > 0) { id = get_IDWithColumn(ctx, "AD_Color", "Name", name); + //TODO: export and import of ad_color + /* if (id <= 0) { element.defer = true; return; - } - m_Window.setAD_Color_ID(id); + }*/ + if (id > 0) + m_Window.setAD_Color_ID(id); } m_Window.setDescription(atts.getValue("Description").replaceAll( @@ -111,6 +116,7 @@ public class WindowElementHandler extends AbstractElementHandler { .get_ID(), AD_Backup_ID, Object_Status, "AD_Window", get_IDWithColumn(ctx, "AD_Table", "TableName", "AD_Window")); + element.recordId = m_Window.getAD_Window_ID(); } else { record_log(ctx, 0, m_Window.getName(), "Window", m_Window .get_ID(), AD_Backup_ID, Object_Status, "AD_Window", @@ -170,6 +176,8 @@ public class WindowElementHandler extends AbstractElementHandler { } pstmt = null; } + + //TODO: export of ad_image and ad_color use // Loop tags. document.endElement("", "", "window"); @@ -232,19 +240,26 @@ public class WindowElementHandler extends AbstractElementHandler { if (m_Window.getAD_Image_ID() > 0) { sql = "SELECT Name FROM AD_Image WHERE AD_Image_ID=?"; name = DB.getSQLValueString(null, sql, m_Window.getAD_Image_ID()); + if (name != null) + atts.addAttribute("", "", "ADImageNameID", "CDATA", name); + else + atts.addAttribute("", "", "ADImageNameID", "CDATA", ""); } - if (name != null) - atts.addAttribute("", "", "ADImageNameID", "CDATA", name); - else + else { atts.addAttribute("", "", "ADImageNameID", "CDATA", ""); + } + if (m_Window.getAD_Color_ID() > 0) { sql = "SELECT Name FROM AD_Color WHERE AD_Color_ID=?"; name = DB.getSQLValueString(null, sql, m_Window.getAD_Color_ID()); - } - if (name != null) - atts.addAttribute("", "", "ADColorNameID", "CDATA", name); - else + if (name != null) + atts.addAttribute("", "", "ADColorNameID", "CDATA", name); + else + atts.addAttribute("", "", "ADColorNameID", "CDATA", ""); + } else { atts.addAttribute("", "", "ADColorNameID", "CDATA", ""); + } + atts.addAttribute("", "", "Description", "CDATA", (m_Window .getDescription() != null ? m_Window.getDescription() : "")); atts.addAttribute("", "", "EntityType", "CDATA", (m_Window diff --git a/base/src/org/adempiere/pipo/handler/WorkbenchElementHandler.java b/base/src/org/adempiere/pipo/handler/WorkbenchElementHandler.java index 655c52935f..3530f09a78 100644 --- a/base/src/org/adempiere/pipo/handler/WorkbenchElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/WorkbenchElementHandler.java @@ -59,9 +59,9 @@ public class WorkbenchElementHandler extends AbstractElementHandler { int tableid = get_IDWithColumn(ctx, "AD_Table", "TableName", atts.getValue("ADTableNameID")); int columnid = get_IDWithMasterAndColumn (ctx, "AD_Column","ColumnName", atts.getValue("ADColumnNameID"), "AD_Table", tableid); m_Workbench.setAD_Column_ID(columnid); - m_Workbench.setDescription(atts.getValue("Description").replaceAll("'","''").replaceAll(",","")); + m_Workbench.setDescription(atts.getValue("Description").replaceAll("'","''")); m_Workbench.setEntityType(atts.getValue("EntityType")); - m_Workbench.setHelp(atts.getValue("Help").replaceAll("'","''").replaceAll(",","")); + m_Workbench.setHelp(atts.getValue("Help").replaceAll("'","''")); m_Workbench.setIsActive(atts.getValue("isActive") != null ? Boolean.valueOf(atts.getValue("isActive")).booleanValue():true); m_Workbench.setName(atts.getValue("Name")); //m_Workbench.setPA_Goal_ID(Integer.parseInt(atts.getValue("PAGoalID"))); diff --git a/base/src/org/adempiere/pipo/handler/WorkflowElementHandler.java b/base/src/org/adempiere/pipo/handler/WorkflowElementHandler.java index ba2b3c990a..0e1949d90f 100644 --- a/base/src/org/adempiere/pipo/handler/WorkflowElementHandler.java +++ b/base/src/org/adempiere/pipo/handler/WorkflowElementHandler.java @@ -54,8 +54,8 @@ public class WorkflowElementHandler extends AbstractElementHandler { String entitytype = atts.getValue("EntityType"); log.info("entitytype " + atts.getValue("EntityType")); - if (entitytype.equals("U") || entitytype.equals("D") - && getUpdateMode(ctx).equals("true")) { + if (entitytype.equals("U") || (entitytype.equals("D") + && getUpdateMode(ctx).equals("true"))) { log.info("entitytype is a U or D"); String workflowName = atts.getValue("Name"); diff --git a/base/src/org/compiere/model/MColumn.java b/base/src/org/compiere/model/MColumn.java index d404a1d201..9198cfebe6 100644 --- a/base/src/org/compiere/model/MColumn.java +++ b/base/src/org/compiere/model/MColumn.java @@ -309,7 +309,9 @@ public class MColumn extends X_AD_Column { if (DisplayType.isText(getAD_Reference_ID()) || getAD_Reference_ID() == DisplayType.List - || getAD_Reference_ID() == DisplayType.YesNo) + || getAD_Reference_ID() == DisplayType.YesNo + || (getAD_Reference_ID() == DisplayType.Button && + !(getColumnName().endsWith("_ID")))) { if (!defaultValue.startsWith("'") && !defaultValue.endsWith("'")) defaultValue = DB.TO_STRING(defaultValue); @@ -354,7 +356,8 @@ public class MColumn extends X_AD_Column if (DisplayType.isText(getAD_Reference_ID()) || getAD_Reference_ID() == DisplayType.List || getAD_Reference_ID() == DisplayType.YesNo - || getAD_Reference_ID() == DisplayType.Table) + || (getAD_Reference_ID() == DisplayType.Button && + !(getColumnName().endsWith("_ID")))) { if (!defaultValue.startsWith("'") && !defaultValue.endsWith("'")) defaultValue = DB.TO_STRING(defaultValue); diff --git a/base/src/org/compiere/model/MLookup.java b/base/src/org/compiere/model/MLookup.java index 79c752c67a..b1a91c86a8 100644 --- a/base/src/org/compiere/model/MLookup.java +++ b/base/src/org/compiere/model/MLookup.java @@ -734,7 +734,7 @@ public final class MLookup extends Lookup implements Serializable } catch (SQLException e) { - log.log(Level.SEVERE, m_info.KeyColumn + ": Loader - " + sql, e); + log.log(Level.SEVERE, m_info.KeyColumn + ", " + m_info.Column_ID + " : Loader - " + sql, e); } int size = m_lookup.size(); log.finer(m_info.KeyColumn diff --git a/base/src/org/compiere/model/MTable.java b/base/src/org/compiere/model/MTable.java index 94c35ce45e..a1fd69f383 100644 --- a/base/src/org/compiere/model/MTable.java +++ b/base/src/org/compiere/model/MTable.java @@ -614,11 +614,13 @@ public class MTable extends X_AD_Table // Sync Table ID if (newRecord) { - MSequence.createTableSequence(getCtx(), getTableName(), get_TrxName()); + MSequence seq = MSequence.get(getCtx(), getTableName(), get_TrxName()); + if (seq == null || seq.get_ID() == 0) + MSequence.createTableSequence(getCtx(), getTableName(), get_TrxName()); } else { - MSequence seq = MSequence.get(getCtx(), getTableName()); + MSequence seq = MSequence.get(getCtx(), getTableName(), get_TrxName()); if (seq == null || seq.get_ID() == 0) MSequence.createTableSequence(getCtx(), getTableName(), get_TrxName()); else if (!seq.getName().equals(getTableName())) diff --git a/base/src/org/compiere/model/PO.java b/base/src/org/compiere/model/PO.java index d022ce0575..b7f2a70539 100644 --- a/base/src/org/compiere/model/PO.java +++ b/base/src/org/compiere/model/PO.java @@ -754,6 +754,22 @@ public abstract class PO else if (p_info.getColumnClass(index) == Boolean.class && ("Y".equals(value) || "N".equals(value)) ) m_newValues[index] = new Boolean("Y".equals(value)); + else if (p_info.getColumnClass(index) == Integer.class + && value.getClass() == String.class) + { + try + { + int intValue = Integer.parseInt((String)value); + m_newValues[index] = Integer.valueOf(intValue); + } + catch (Exception e) + { + log.warning (ColumnName + + " - Class invalid: " + value.getClass().toString() + + ", Should be " + p_info.getColumnClass(index).toString() + ": " + value); + m_newValues[index] = null; + } + } else { log.warning (ColumnName diff --git a/base/src/org/compiere/util/CLogMgt.java b/base/src/org/compiere/util/CLogMgt.java index 7fb24220f9..a85eb3e16e 100644 --- a/base/src/org/compiere/util/CLogMgt.java +++ b/base/src/org/compiere/util/CLogMgt.java @@ -499,6 +499,7 @@ public class CLogMgt sb.append(getMsg("ImplementationVersion")).append(eq).append(org.compiere.Adempiere.getImplementationVersion()).append(NL); // sb.append("AdempiereHome = ").append(Adempiere.getAdempiereHome()).append(NL); + sb.append("AdempiereProperties = ").append(Ini.getPropertyFileName()).append(NL); sb.append(Env.getLanguage(Env.getCtx())).append(NL); MClient client = MClient.get(Env.getCtx()); sb.append(client).append(NL);