From 4a3169246e5be5ebb3a75b9e475a4265fb1f54e3 Mon Sep 17 00:00:00 2001 From: vpj-cd Date: Tue, 24 Nov 2009 21:51:07 +0000 Subject: [PATCH] Replication Broadcast Implementation https://sourceforge.net/tracker/index.php?func=detail&aid=2712329&group_id=176962&atid=879335 --- .../model/X_AD_ReplicationDocument.java | 4 +- .../compiere/model/X_AD_ReplicationTable.java | 4 +- .../605_FR2712329BroadcastReplication.sql | 30 + .../605_FR2712329BroadcastReplication.sql | 30 + .../server/rpl/imp/ImportHelper.java | 949 +++++++++--------- 5 files changed, 522 insertions(+), 495 deletions(-) create mode 100755 migration/354a-trunk/oracle/605_FR2712329BroadcastReplication.sql create mode 100755 migration/354a-trunk/postgresql/605_FR2712329BroadcastReplication.sql diff --git a/base/src/org/compiere/model/X_AD_ReplicationDocument.java b/base/src/org/compiere/model/X_AD_ReplicationDocument.java index 5857d54b05..a85de7db96 100644 --- a/base/src/org/compiere/model/X_AD_ReplicationDocument.java +++ b/base/src/org/compiere/model/X_AD_ReplicationDocument.java @@ -29,7 +29,7 @@ public class X_AD_ReplicationDocument extends PO implements I_AD_ReplicationDocu /** * */ - private static final long serialVersionUID = 20090915L; + private static final long serialVersionUID = 20091124L; /** Standard Constructor */ public X_AD_ReplicationDocument (Properties ctx, int AD_ReplicationDocument_ID, String trxName) @@ -197,6 +197,8 @@ public class X_AD_ReplicationDocument extends PO implements I_AD_ReplicationDocu public static final String REPLICATIONTYPE_Merge = "M"; /** Reference = R */ public static final String REPLICATIONTYPE_Reference = "R"; + /** Broadcast = B */ + public static final String REPLICATIONTYPE_Broadcast = "B"; /** Set Replication Type. @param ReplicationType Type of Data Replication diff --git a/base/src/org/compiere/model/X_AD_ReplicationTable.java b/base/src/org/compiere/model/X_AD_ReplicationTable.java index b66b40b342..fba0f4ac6c 100644 --- a/base/src/org/compiere/model/X_AD_ReplicationTable.java +++ b/base/src/org/compiere/model/X_AD_ReplicationTable.java @@ -30,7 +30,7 @@ public class X_AD_ReplicationTable extends PO implements I_AD_ReplicationTable, /** * */ - private static final long serialVersionUID = 20090915L; + private static final long serialVersionUID = 20091124L; /** Standard Constructor */ public X_AD_ReplicationTable (Properties ctx, int AD_ReplicationTable_ID, String trxName) @@ -207,6 +207,8 @@ public class X_AD_ReplicationTable extends PO implements I_AD_ReplicationTable, public static final String REPLICATIONTYPE_Merge = "M"; /** Reference = R */ public static final String REPLICATIONTYPE_Reference = "R"; + /** Broadcast = B */ + public static final String REPLICATIONTYPE_Broadcast = "B"; /** Set Replication Type. @param ReplicationType Type of Data Replication diff --git a/migration/354a-trunk/oracle/605_FR2712329BroadcastReplication.sql b/migration/354a-trunk/oracle/605_FR2712329BroadcastReplication.sql new file mode 100755 index 0000000000..33b102b5b5 --- /dev/null +++ b/migration/354a-trunk/oracle/605_FR2712329BroadcastReplication.sql @@ -0,0 +1,30 @@ +-- Aug 14, 2009 1:26:52 PM ECT +-- Improve the Application Dictionary +INSERT INTO AD_Ref_List (AD_Client_ID,AD_Org_ID,AD_Ref_List_ID,AD_Reference_ID,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,Value) VALUES (0,0,53503,126,TO_DATE('2009-08-14 13:26:35','YYYY-MM-DD HH24:MI:SS'),100,'EE05','Y','Broadcast',TO_DATE('2009-08-14 13:26:35','YYYY-MM-DD HH24:MI:SS'),100,'B') +; + +-- Aug 14, 2009 1:27:09 PM ECT +-- Improve the Application Dictionary +INSERT INTO AD_Ref_List_Trl (AD_Language,AD_Ref_List_ID, Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Ref_List_ID, t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Ref_List t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Ref_List_ID=53503 AND EXISTS (SELECT * FROM AD_Ref_List_Trl tt WHERE tt.AD_Language!=l.AD_Language OR tt.AD_Ref_List_ID!=t.AD_Ref_List_ID) +; + +-- Aug 14, 2009 1:27:40 PM ECT +-- Improve the Application Dictionary +UPDATE AD_Ref_List SET Description='Broadcast ->>',Updated=TO_DATE('2009-08-14 13:27:40','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=53503 +; + +-- Aug 14, 2009 1:27:40 PM ECT +-- Improve the Application Dictionary +UPDATE AD_Ref_List_Trl SET IsTranslated='N' WHERE AD_Ref_List_ID=53503 +; + +-- Aug 14, 2009 1:38:32 PM ECT +-- Improve the Application Dictionary +UPDATE AD_Ref_List SET Description='Broadcast <<->>',Updated=TO_DATE('2009-08-14 13:38:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=53503 +; + +-- Aug 14, 2009 1:38:32 PM ECT +-- Improve the Application Dictionary +UPDATE AD_Ref_List_Trl SET IsTranslated='N' WHERE AD_Ref_List_ID=53503 +; + diff --git a/migration/354a-trunk/postgresql/605_FR2712329BroadcastReplication.sql b/migration/354a-trunk/postgresql/605_FR2712329BroadcastReplication.sql new file mode 100755 index 0000000000..de67506607 --- /dev/null +++ b/migration/354a-trunk/postgresql/605_FR2712329BroadcastReplication.sql @@ -0,0 +1,30 @@ +-- Aug 14, 2009 1:27:08 PM ECT +-- Improve the Application Dictionary +INSERT INTO AD_Ref_List (AD_Client_ID,AD_Org_ID,AD_Ref_List_ID,AD_Reference_ID,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,Value) VALUES (0,0,53503,126,TO_TIMESTAMP('2009-08-14 13:26:35','YYYY-MM-DD HH24:MI:SS'),100,'EE05','Y','Broadcast',TO_TIMESTAMP('2009-08-14 13:26:35','YYYY-MM-DD HH24:MI:SS'),100,'B') +; + +-- Aug 14, 2009 1:27:09 PM ECT +-- Improve the Application Dictionary +INSERT INTO AD_Ref_List_Trl (AD_Language,AD_Ref_List_ID, Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Ref_List_ID, t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Ref_List t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Ref_List_ID=53503 AND EXISTS (SELECT * FROM AD_Ref_List_Trl tt WHERE tt.AD_Language!=l.AD_Language OR tt.AD_Ref_List_ID!=t.AD_Ref_List_ID) +; + +-- Aug 14, 2009 1:27:40 PM ECT +-- Improve the Application Dictionary +UPDATE AD_Ref_List SET Description='Broadcast ->>',Updated=TO_TIMESTAMP('2009-08-14 13:27:40','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=53503 +; + +-- Aug 14, 2009 1:27:40 PM ECT +-- Improve the Application Dictionary +UPDATE AD_Ref_List_Trl SET IsTranslated='N' WHERE AD_Ref_List_ID=53503 +; + +-- Aug 14, 2009 1:38:32 PM ECT +-- Improve the Application Dictionary +UPDATE AD_Ref_List SET Description='Broadcast <<->>',Updated=TO_TIMESTAMP('2009-08-14 13:38:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Ref_List_ID=53503 +; + +-- Aug 14, 2009 1:38:32 PM ECT +-- Improve the Application Dictionary +UPDATE AD_Ref_List_Trl SET IsTranslated='N' WHERE AD_Ref_List_ID=53503 +; + diff --git a/serverRoot/src/main/server/org/adempiere/server/rpl/imp/ImportHelper.java b/serverRoot/src/main/server/org/adempiere/server/rpl/imp/ImportHelper.java index 970728fd6c..a56cbe3b40 100644 --- a/serverRoot/src/main/server/org/adempiere/server/rpl/imp/ImportHelper.java +++ b/serverRoot/src/main/server/org/adempiere/server/rpl/imp/ImportHelper.java @@ -24,24 +24,23 @@ * - Trifon Trifonov (trifonnt@users.sourceforge.net) * * * * Sponsors: * - * - e-Evolution (http://www.e-evolution.com/) * + * - E-evolution (http://www.e-evolution.com/) * **********************************************************************/ package org.adempiere.server.rpl.imp; import java.math.BigDecimal; -import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.List; import java.util.Properties; -import java.util.logging.Level; import javax.xml.xpath.XPathExpressionException; import org.adempiere.process.rpl.exp.ExportHelper; import org.adempiere.server.rpl.XMLHelper; +import org.compiere.model.I_AD_Client; import org.compiere.model.MClient; import org.compiere.model.MColumn; import org.compiere.model.MEXPFormat; @@ -50,9 +49,9 @@ import org.compiere.model.MReplicationStrategy; import org.compiere.model.MTable; import org.compiere.model.ModelValidator; import org.compiere.model.PO; +import org.compiere.model.Query; import org.compiere.model.X_AD_ReplicationTable; import org.compiere.util.CLogger; -import org.compiere.util.DB; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Msg; @@ -65,16 +64,6 @@ import org.w3c.dom.NodeList; * @author Antonio CaƱaveral, e-Evolution *
  • [ 2195016 ] Implementation delete records messages *
  • http://sourceforge.net/tracker/index.php?func=detail&aid=2195016&group_id=176962&atid=879332 - *
  • Otras Modificaciones Posteriores - * @author victor.perez@e-evolution.com, www.e-evolution.com - *
  • BF[2836406] Error when try get ID but do not is the first field - *
  • - * @author michael.judd@akunagroup.com, http://www.akunagroup.com - *
  • BF[2861697] Incorrect string conversion - *
  • https://sourceforge.net/tracker/index.php?func=detail&aid=2861697&group_id=176962&atid=879332 - * @author michael.judd@akunagroup.com, http://www.akunagroup.com - *
  • BF[2863095] Missing DisplayType.Search in ImportHelper - *
  • https://sourceforge.net/tracker/?func=detail&aid=2863095&group_id=176962&atid=879332 */ public class ImportHelper { @@ -96,7 +85,8 @@ public class ImportHelper { /** Context */ private Properties ctx = null; - public ImportHelper(Properties ctx) { + public ImportHelper(Properties ctx) + { this.ctx = ctx; // Construct DateFromat and DateTimeFormat m_dateTimeFormat = DisplayType.getDateFormat(DisplayType.DateTime, Env.getLanguage(ctx)); @@ -115,37 +105,33 @@ public class ImportHelper { public void importXMLDocument(StringBuffer result, Document documentToBeImported, String trxName) throws Exception, SQLException, XPathExpressionException { - //Element rootNode = importedDocument.getFirstChild(); Element rootElement = documentToBeImported.getDocumentElement(); - //NodeList nl = rootElement.getChildNodes(); - // iterate over all address nodes and find the one that has the correct addressee - //for (int i = 0; i < nl.getLength(); i++) { /* */ } // Find which Export format to Load... String AD_Client_Value = null; - //AD_Client_Value = XMLHelper.getString("@AD_Client_Value", rootNode); + AD_Client_Value = rootElement.getAttribute("AD_Client_Value"); log.info("AD_Client_Value = " + AD_Client_Value); - if (AD_Client_Value == null || "".equals(AD_Client_Value)) { + if (AD_Client_Value == null || Util.isEmpty(AD_Client_Value)) + { throw new Exception(Msg.getMsg(ctx, "XMLClientValueMandatory")); } String version = null; version = rootElement.getAttribute("Version"); log.info("Version = " + version); - if (version == null || "".equals(version)) { + if (version == null || Util.isEmpty(version)) + { throw new Exception(Msg.getMsg(ctx, "XMLVersionAttributeMandatory")); } ///Getting Attributes. - - ; - int ReplicationMode = new Integer(rootElement.getAttribute("ReplicationMode")); String ReplicationType = rootElement.getAttribute("ReplicationType"); int ReplicationEvent = new Integer(rootElement.getAttribute("ReplicationEvent")); MClient client = null; client = getAD_ClientByValue(ctx, AD_Client_Value, trxName); - if (client == null) { + if (client == null) + { throw new Exception(Msg.getMsg(ctx, "XMLClientNotFound")); } log.info(client.toString()); @@ -156,40 +142,70 @@ public class ImportHelper { MEXPFormat expFormat = null; expFormat = MEXPFormat.getFormatByValueAD_Client_IDAndVersion(ctx, EXP_Format_Value, client.getAD_Client_ID(), version, trxName); - if (expFormat == null || expFormat.getEXP_Format_ID() == 0) { + if (expFormat == null || expFormat.getEXP_Format_ID() == 0) + { // Fall back to SYSTEM Client. // Try to search Export format defined for SYSTEM Client!!! MClient systemClient = null; systemClient = MClient.get(ctx, 0); - if (systemClient == null) { + if (systemClient == null) + { throw new Exception(Msg.getMsg(ctx, "XMLClientNotFound")); } log.info(systemClient.toString()); expFormat = MEXPFormat.getFormatByValueAD_Client_IDAndVersion(ctx, EXP_Format_Value, systemClient.getAD_Client_ID(), version, trxName); } - if (expFormat == null || expFormat.getEXP_Format_ID() == 0) { + if (expFormat == null || expFormat.getEXP_Format_ID() == 0) + { throw new Exception(Msg.getMsg(ctx, "EXPFormatNotFound")); } log.info("expFormat = " + expFormat.toString()); - PO po = importElement(ctx, result, rootElement, expFormat, trxName); - // Here must invoke other method else we get cycle... + PO po = importElement(ctx, result, rootElement, expFormat, ReplicationType, trxName); + boolean resultSave=false; - if(ReplicationEvent == ModelValidator.TYPE_BEFORE_DELETE || - ReplicationEvent == ModelValidator.TYPE_BEFORE_DELETE_REPLICATION || - ReplicationEvent == ModelValidator.TYPE_DELETE) + + if(po != null) { - resultSave=po.delete(true); - } else { - //TODO: Create a Replication Type "BROADCAST" now we are using MERGE - if(ReplicationType.equals(X_AD_ReplicationTable.REPLICATIONTYPE_Merge)) + // Here must invoke other method else we get cycle... + if (ModelValidator.TYPE_BEFORE_DELETE == ReplicationEvent + || ModelValidator.TYPE_BEFORE_DELETE_REPLICATION == ReplicationEvent + || ModelValidator.TYPE_DELETE == ReplicationEvent) { - resultSave = po.saveReplica(true); - MReplicationStrategy rplStrategy = new MReplicationStrategy(client.getCtx(), client.getAD_ReplicationStrategy_ID(), null); - ExportHelper expHelper = new ExportHelper(client, rplStrategy); - expHelper.exportRecord( po, MReplicationStrategy.REPLICATION_TABLE, X_AD_ReplicationTable.REPLICATIONTYPE_Reference, ModelValidator.TYPE_AFTER_CHANGE); - } else { - resultSave = po.saveReplica(true); + resultSave=po.delete(true); + } + else + { + if(X_AD_ReplicationTable.REPLICATIONTYPE_Broadcast.equals(ReplicationType)) + { + resultSave = po.saveReplica(true); + MReplicationStrategy rplStrategy = new MReplicationStrategy(client.getCtx(), client.getAD_ReplicationStrategy_ID(), null); + ExportHelper expHelper = new ExportHelper(client, rplStrategy); + expHelper.exportRecord( po, + MReplicationStrategy.REPLICATION_TABLE, + X_AD_ReplicationTable.REPLICATIONTYPE_Merge, + ModelValidator.TYPE_AFTER_CHANGE); + } + else if(X_AD_ReplicationTable.REPLICATIONTYPE_Merge.equals(ReplicationType) + || X_AD_ReplicationTable.REPLICATIONTYPE_Reference.equals(ReplicationType)) + { + resultSave = po.saveReplica(true); + } + /*else if (X_AD_ReplicationTable.REPLICATIONTYPE_Reference.equals(ReplicationType)) + { + //Do nothing?? + }*/ + else if(X_AD_ReplicationTable.REPLICATIONTYPE_Local.equals(ReplicationType)) + { + //Do nothing?? + } + else + { + // Replication Type is not one of the possible values...ERROR + throw new Exception(Msg.getMsg(ctx, "EXPReplicationTypeNonValidType")); + } + + } } @@ -222,555 +238,503 @@ public class ImportHelper { */ @SuppressWarnings("unchecked") private PO importElement(Properties ctx, StringBuffer result, Element rootElement, - MEXPFormat expFormat, String trxName) throws Exception, XPathExpressionException + MEXPFormat expFormat, String ReplicationType, String trxName) throws Exception, XPathExpressionException { - // get AD_Table ID from export Format. - int AD_Table_ID = expFormat.getAD_Table_ID(); - - // Load appropriate Model class... - MTable table = MTable.get(ctx, AD_Table_ID); - log.info("Table = " + table); - - int record_ID = 0; - String whereClause=""; - // Find Record_ID by ???Value??? In fact by Columns set as Part Of Unique Index in Export Format! - if(table.getKeyColumns().length == 1) - { - record_ID = getID(ctx, expFormat, rootElement, rootElement.getNodeName(), trxName); - log.info("record_ID = " + record_ID); - }else - { - whereClause = getID(ctx, expFormat, rootElement, rootElement.getNodeName(),trxName,true); - log.info("WHERE = " + whereClause); - } - PO po=null; - if(record_ID>0) - po = table.getPO(record_ID, trxName); - else if(whereClause.length()>0) - po=table.getPO(whereClause, trxName); - else - po = table.getPO(record_ID, trxName); + //Getting the Object for the replicate + PO po = getObjectFromFormat(ctx, expFormat, rootElement, rootElement.getNodeName(), trxName); - if(po==null) + if(po == null) + { throw new Exception(Msg.getMsg(ctx, "Can't Load PO Object")); + } + if(X_AD_ReplicationTable.REPLICATIONTYPE_Reference.equals(ReplicationType)) //If this is just for push and exists we do nothing + { + if(po.get_ID() == 0) + { + return null; + } + } + log.info("PO.toString() = " + po.toString()); - if (po.get_KeyColumns().length < 1) { + if (po.get_KeyColumns().length < 1) + { throw new Exception(Msg.getMsg(ctx, "EDIMultiColumnNotSupported")); } StringBuffer orderBy = new StringBuffer(MEXPFormatLine.COLUMNNAME_IsMandatory).append(" DESC ") - .append(", ").append(MEXPFormatLine.COLUMNNAME_Position) - ; + .append(", ").append(MEXPFormatLine.COLUMNNAME_Position); + MEXPFormatLine[] formatLines = expFormat.getFormatLinesOrderedBy(orderBy.toString()); - if (formatLines == null || formatLines.length < 1) { + if (formatLines == null || formatLines.length < 1) + { throw new Exception(Msg.getMsg(ctx, "EXPFormatNoLines")); } - Object value = null; // Iterate all Export Format Lines (even this marked as part of unique index) // and set value of column! - for (int i = 0; i < formatLines.length; i++) { + for (MEXPFormatLine formatLine : formatLines) + { log.info("=================== Beginnig of Format Line ==============================="); - log.info("formatLines["+i+"]=[" + formatLines[i].toString() + "]"); + log.info("formatLine: [" + formatLine.toString() + "]"); + //Get the value + Object value = getValueFromFormat(formatLine,po,rootElement,result,ReplicationType,trxName); + //Set the value + setReplicaValues(value, formatLine, po, result); + } + return po; + } + + /** + * Get the value from format + * @param line + * @param po + * @param rootElement + * @param result + * @param ReplicationType + * @param trxName + * @return Object with the Value + * @throws Exception + */ + private Object getValueFromFormat(MEXPFormatLine line,PO po,Element rootElement, + StringBuffer result, String ReplicationType, String trxName) throws Exception + { + Object value = null; + + if (MEXPFormatLine.TYPE_XMLElement.equals(line.getType())) + { + // XML Element + value = XMLHelper.getString(line.getValue(), rootElement); + log.info("value=[" + value + "]"); - if (MEXPFormatLine.TYPE_XMLElement.equals(formatLines[i].getType())) { - // XML Element - value = XMLHelper.getString(formatLines[i].getValue(), rootElement); - log.info("value=[" + value + "]"); - - } else if (MEXPFormatLine.TYPE_ReferencedEXPFormat.equals(formatLines[i].getType())) { - // Referenced Export Format -/* - - 0 - - SYSTEM - - - ... - */ + } + else if (MEXPFormatLine.TYPE_ReferencedEXPFormat.equals(line.getType())) + { + // Referenced Export Format + MEXPFormat referencedExpFormat = new MEXPFormat(ctx, line.getEXP_EmbeddedFormat_ID(), trxName); + log.info("referencedExpFormat = " + referencedExpFormat); - MEXPFormat referencedExpFormat = new MEXPFormat(ctx, formatLines[i].getEXP_EmbeddedFormat_ID(), trxName); - log.info("referencedExpFormat = " + referencedExpFormat); - - int refRecord_ID = 0; - // Find Record_ID by ???Value??? In fact by Columns set as Part Of Unique Index in Export Format! - String xPath = null; - //xPath = ""+rootElement.getNodeName() + "/" + formatLines[i].getValue() + ""; // Do not work - xPath = "" + formatLines[i].getValue() + ""; // - - log.info("SEARCH FOR XML Element = " + xPath); - Element referencedNode = XMLHelper.getElement(xPath, rootElement); - - //NodeList nodeList = XMLHelper.getNodeList(xPath, rootElement); - //referencedNode = (Element)nodeList.item(0); - - log.info("referencedNode = " + referencedNode); - if(referencedNode!=null) - { - refRecord_ID = getID(ctx, referencedExpFormat, referencedNode, formatLines[i].getValue(), trxName); - log.info("refRecord_ID = " + refRecord_ID); - value = new Integer(refRecord_ID); - } - else - { - log.info("NULL VALUE FOR " + xPath.toString()); - value=null; - } - log.info("value=[" + value + "]"); - } else if (MEXPFormatLine.TYPE_EmbeddedEXPFormat.equals(formatLines[i].getType())) { - boolean resSave = false; - if (po.get_ID() == 0) { - resSave = po.saveReplica(true); - result.append("ResultSave-MasterPO=").append(resSave).append("; "); - log.info("ResultSave-MasterPO = " + resSave); - } else { - resSave = true; - } - if (resSave) { - // Success in save - } else { - throw new Exception("Failed to save Master PO"); - } - // Embedded Export Format -/* - GardenWorls - ... - ... <-- MUST save Master Record here! Else we can't set orderLine.setC_Order_ID(..) - ... - ... - */ - MEXPFormat referencedExpFormat = new MEXPFormat(ctx, formatLines[i].getEXP_EmbeddedFormat_ID(), trxName); - log.info("embeddedExpFormat = " + referencedExpFormat); - - NodeList nodeList = XMLHelper.getNodeList("/"+rootElement.getNodeName() + "/" + formatLines[i].getValue(), rootElement); - for (int j = 0; j < nodeList.getLength(); j++) { - Element referencedElement = (Element)nodeList.item(j); - log.info("EmbeddedEXPFormat - referencedElement.getNodeName = " + referencedElement.getNodeName()); - - PO embeddedPo = null; - // Import embedded PO - log.info("=== BEGIN RECURSION CALL ==="); - embeddedPo = importElement(ctx, result, referencedElement, referencedExpFormat, trxName); - log.info("embeddedPo = " + embeddedPo); - - //embeddedPo.set_CustomColumn(po.get_KeyColumns()[0], po.get_ID()); - //log.info("embeddedPo.set"+po.get_KeyColumns()[0]+" = [" + po.get_ID()+"]"); - - boolean rSave = embeddedPo.saveReplica(true); - result.append("ResultSave-EmbeddedPO=").append(rSave).append("; "); - } - - } else if (MEXPFormatLine.TYPE_XMLAttribute.equals(formatLines[i].getType())) { - // XML Attribute - value = XMLHelper.getString("@" + formatLines[i].getValue(), rootElement); - log.info("value=[" + value + "]"); - } else { - // Export Format Line is not one of two possible values...ERROR - throw new Exception(Msg.getMsg(ctx, "EXPFormatLineNonValidType")); + int refRecord_ID = 0; + // Find Record_ID by ???Value??? In fact by Columns set as Part Of Unique Index in Export Format! + String xPath = null; + xPath = "" + line.getValue() + ""; + + log.info("Seach for XML Element = " + xPath); + Element referencedNode = XMLHelper.getElement(xPath, rootElement); + + log.info("referencedNode = " + referencedNode); + if(referencedNode!=null) + { + refRecord_ID = getID(ctx, referencedExpFormat, referencedNode, line.getValue(), trxName); + log.info("refRecord_ID = " + refRecord_ID); + value = new Integer(refRecord_ID); } - if (value == null) { - - } else { -/* if (column.getColumnName().equals("AD_Client_ID")) { - //Env.setContext(Env.getCtx(), "#AD_Client_ID", value.toString()); - } - if (column.getColumnName().equals("AD_Org_ID")) { - //Env.setContext(Env.getCtx(), "#AD_Org_ID", value.toString()); - } */ - if ( MEXPFormatLine.TYPE_EmbeddedEXPFormat.equals(formatLines[i].getType()) ) { - // do nothing - } else { - MColumn column = MColumn.get(ctx, formatLines[i].getAD_Column_ID()); - log.info("column=[" + column + "]"); + else + { + log.info("NULL VALUE FOR " + xPath.toString()); + value=null; + } + log.info("value=[" + value + "]"); + } + else if (MEXPFormatLine.TYPE_EmbeddedEXPFormat.equals(line.getType())) + { + boolean resSave = false; + if (po.get_ID() == 0) + { + resSave = po.saveReplica(true); + result.append("ResultSave-MasterPO=").append(resSave).append("; "); + log.info("ResultSave-MasterPO = " + resSave); + } + else + { + resSave = true; + } + + if (!resSave) + { + throw new Exception("Failed to save Master PO"); + } + + // Embedded Export Format It is used for Parent-Son records like Order&OrderLine + MEXPFormat referencedExpFormat = new MEXPFormat(ctx, line.getEXP_EmbeddedFormat_ID(), trxName); + log.info("embeddedExpFormat = " + referencedExpFormat); - // Clazz - Class clazz = DisplayType.getClass(column.getAD_Reference_ID(), true); - // Handle Posted - if (column.getColumnName().equalsIgnoreCase("Posted") - || column.getColumnName().equalsIgnoreCase("Processed") - || column.getColumnName().equalsIgnoreCase("Processing")) + NodeList nodeList = XMLHelper.getNodeList("/"+rootElement.getNodeName() + "/" + line.getValue(), rootElement); + for (int j = 0; j < nodeList.getLength(); j++) + { + Element referencedElement = (Element)nodeList.item(j); + log.info("EmbeddedEXPFormat - referencedElement.getNodeName = " + referencedElement.getNodeName()); + + PO embeddedPo = null; + // Import embedded PO + log.info("=== BEGIN RECURSION CALL ==="); + embeddedPo = importElement(ctx, result, referencedElement, referencedExpFormat,ReplicationType, trxName); + log.info("embeddedPo = " + embeddedPo); + + boolean rSave = embeddedPo.saveReplica(true); + result.append("ResultSave-EmbeddedPO=").append(rSave).append("; "); + } + + } + else if (MEXPFormatLine.TYPE_XMLAttribute.equals(line.getType())) + { + // XML Attribute + value = XMLHelper.getString("@" + line.getValue(), rootElement); + log.info("value=[" + value + "]"); + } + else + { + // Export Format Line is not one of the possible values...ERROR + throw new Exception(Msg.getMsg(ctx, "EXPFormatLineNonValidType")); + } + + return value; + } + + /** + * + * @param value + * @param line + * @param po + * @param result + * @throws Exception + */ + private void setReplicaValues(Object value,MEXPFormatLine line,PO po,StringBuffer result)throws Exception + { + if (value !=null) + { + if (!MEXPFormatLine.TYPE_EmbeddedEXPFormat.equals(line.getType()) ) + { + MColumn column = MColumn.get(ctx, line.getAD_Column_ID()); + log.info("column=[" + column + "]"); + + // Clazz + Class clazz = DisplayType.getClass(column.getAD_Reference_ID(), true); + + // Handle Posted + if (column.getColumnName().equalsIgnoreCase("Posted") + || column.getColumnName().equalsIgnoreCase("Processed") + || column.getColumnName().equalsIgnoreCase("Processing")) + { + clazz = Boolean.class; + } else if (column.getColumnName().equalsIgnoreCase("Record_ID")) + { + clazz = Integer.class; + } else if (column.getColumnName().equalsIgnoreCase("AD_Language") + || column.getColumnName().equalsIgnoreCase("EntityType")) + { + clazz = String.class; + } + log.info("clazz = " + clazz.getName()); + + // Handle Date and Time + value = handleDateTime(value, column, line); + + log.info("formatLinesType = " + line.getType()); + + if (MEXPFormatLine.TYPE_EmbeddedEXPFormat.equals( line.getType() ) ) + { + // DO NOTHING + throw new Exception("We can't be here!!!"); + } else + { + if ( DisplayType.DateTime == column.getAD_Reference_ID() + || DisplayType.Date == column.getAD_Reference_ID()) { - clazz = Boolean.class; - } else if (column.getColumnName().equalsIgnoreCase("Record_ID")) - { - clazz = Integer.class; - } else if (column.getColumnName().equalsIgnoreCase("AD_Language") - || column.getColumnName().equalsIgnoreCase("EntityType")) - { - clazz = String.class; - } - log.info("clazz = " + clazz.getName()); - // Handle Date and Time - value = handleDateTime(value, column, formatLines[i]); - - log.info("formatLinesType = " + formatLines[i].getType()); - if (MEXPFormatLine.TYPE_EmbeddedEXPFormat.equals( formatLines[i].getType() ) ) { - // DO NOTHING - throw new Exception("We can't be here!!!"); - } else { - if (column.getAD_Reference_ID() == DisplayType.DateTime - || column.getAD_Reference_ID() == DisplayType.Date + // + po.set_ValueOfColumn(line.getAD_Column_ID(), value); + log.info("Set value of column ["+column.getColumnName()+"]=["+value+"]"); + } + else if ( DisplayType.isID(column.getAD_Reference_ID()) + || DisplayType.Integer == column.getAD_Reference_ID() ) + { + // + if (! Util.isEmpty(value.toString())) { - // - po.set_ValueOfColumn(formatLines[i].getAD_Column_ID(), value); - log.info("Set value of column ["+column.getColumnName()+"]=["+value+"]"); - } else if (DisplayType.isID(column.getAD_Reference_ID()) - || column.getAD_Reference_ID() == DisplayType.Integer - ) + int intValue = Integer.parseInt(value.toString()); + value = new Integer( intValue ); + }else { - // - if (! Util.isEmpty(value.toString())) - { - int intValue = Integer.parseInt(value.toString()); - value = new Integer( intValue ); - }else - value=null; - log.info("About to set int value of column ["+column.getColumnName()+"]=["+value+"]"); - po.set_ValueOfColumn(formatLines[i].getAD_Column_ID(), value); - log.info("Set int value of column ["+column.getColumnName()+"]=["+value+"]"); - } else if (DisplayType.isNumeric(column.getAD_Reference_ID()) - && column.getAD_Reference_ID() != DisplayType.Integer) - { - // - if (! Util.isEmpty(value.toString())) - { - double doubleValue = Double.parseDouble(value.toString()); - value = new BigDecimal(doubleValue); - }else - value=null; - //value = new Double( doubleValue ); - log.info("About to set BigDecimal value of column ["+column.getColumnName()+"]=["+value+"]"); - po.set_ValueOfColumn(formatLines[i].getAD_Column_ID(), value); - log.info("Set BigDecimal value of column ["+column.getColumnName()+"]=["+value+"]"); - } - else if(column.getAD_Reference_ID() == DisplayType.YesNo) - { - po.set_ValueOfColumn(formatLines[i].getAD_Column_ID(), value); + value=null; } - else { - // - try { + + log.info("About to set int value of column ["+column.getColumnName()+"]=["+value+"]"); + + po.set_ValueOfColumn(line.getAD_Column_ID(), value); + + log.info("Set int value of column ["+column.getColumnName()+"]=["+value+"]"); + + } + else if ( DisplayType.isNumeric(column.getAD_Reference_ID()) + && column.getAD_Reference_ID() != DisplayType.Integer) + { + // + if (!Util.isEmpty(value.toString())) + { + double doubleValue = Double.parseDouble(value.toString()); + value = new BigDecimal(doubleValue); + } + else + { + value=null; + } + //value = new Double( doubleValue ); + + log.info("About to set BigDecimal value of column ["+column.getColumnName()+"]=["+value+"]"); + + po.set_ValueOfColumn(line.getAD_Column_ID(), value); + + log.info("Set BigDecimal value of column ["+column.getColumnName()+"]=["+value+"]"); + } + else if(DisplayType.YesNo == column.getAD_Reference_ID()) + { + po.set_ValueOfColumn(line.getAD_Column_ID(), value); + } + else + { + // + try { log.info("About to set value of column ["+column.getColumnName()+"]=["+value+"]"); + if(clazz == Boolean.class) - po.set_ValueOfColumn(formatLines[i].getAD_Column_ID(), value); + { + po.set_ValueOfColumn(line.getAD_Column_ID(), value); + } else - po.set_ValueOfColumn(formatLines[i].getAD_Column_ID(), clazz.cast(value)); + { + po.set_ValueOfColumn(line.getAD_Column_ID(), clazz.cast(value)); + } + log.info("Set value of column ["+column.getColumnName()+"]=["+value+"]"); - } catch (ClassCastException ex) { + } + catch (ClassCastException ex) + { ex.printStackTrace(); throw new Exception(ex); } - - //po.set_ValueOfColumn(formatLines[i].getAD_Column_ID(), value); - } - result.append(column.getColumnName()).append("=").append(value).append("; "); + } - } - } - - } + result.append(column.getColumnName()).append("=").append(value).append("; "); + }//end else + }//end if TYPE_EmbeddedEXPFormat + }//end if value !=null - return po; } - + public static MClient getAD_ClientByValue(Properties ctx, String value, String trxName) throws SQLException { - MClient result = null; - - StringBuffer sql = new StringBuffer("SELECT AD_Client_ID ") - .append(" FROM ").append(MClient.Table_Name) - .append(" WHERE ").append(MClient.COLUMNNAME_Value).append(" = ?") - // .append(" AND IsActive = ?") - ; - //s_log.info(sql.toString()); - s_log.info("Client_Value =[" + value + "]"); + final String whereClause = I_AD_Client.COLUMNNAME_Value + "= ? "; + MClient result = new Query(ctx,I_AD_Client.Table_Name,whereClause,trxName) + .setParameters(new Object[]{value}) + .firstOnly(); - PreparedStatement pstmt = null; - try { - pstmt = DB.prepareStatement(sql.toString(), trxName); - pstmt.setString(1, value); - ResultSet rs = pstmt.executeQuery(); - if (rs.next()) { - int AD_Client_ID = rs.getInt(1); - s_log.info("AD_Client_ID = " + AD_Client_ID); - result = new MClient(ctx, AD_Client_ID, trxName); - } - rs.close(); - pstmt.close(); - pstmt = null; - } catch (SQLException e) { - s_log.log(Level.SEVERE, sql.toString(), e); - throw e; - } finally { - try { - if (pstmt != null) - pstmt.close(); - pstmt = null; - } catch (Exception e) { - pstmt = null; - } + s_log.info("Client_Value =[" + value + "]"); + if(result != null) + { + s_log.info("AD_Client_ID = " + result.getAD_Client_ID()); } - + return result; } - - private PreparedStatement getIDValues(Properties ctx, MEXPFormat expFormat, Element rootElement, String rootNodeName, String trxName) throws Exception { - if (expFormat == null || rootElement == null || rootNodeName == null) { + /** + * This Method gets the PO record, from the exportFormat + * @param ctx + * @param expFormat + * @param rootElement + * @param rootNodeName + * @param trxName + * @throws Exception + * */ + private PO getObjectFromFormat(Properties ctx, MEXPFormat expFormat, Element rootElement, String rootNodeName, String trxName) throws Exception + { + List values = null; + + if (expFormat == null || rootElement == null || rootNodeName == null) + { throw new IllegalArgumentException("expFormat, rootNode and RootnodeName can't be null!"); } + log.info("expFormat = " + expFormat); log.info("rootNode.getNodeName() = " + rootElement.getNodeName()); log.info("rootNodeName = " + rootNodeName); - if (rootElement.getParentNode() != null) { + + if (rootElement.getParentNode() != null) + { log.info("rootNode.ParentName = " + rootElement.getParentNode().getNodeName()); } - // get AD_Table ID from export Format. - int AD_Table_ID = expFormat.getAD_Table_ID(); - - // Load appropriate Model class... - MTable table = MTable.get(ctx, AD_Table_ID); - log.info("Table = " + table); - - //Select * FROM table.getTableName() WHERE Value or ANY IDENTIFIER column - StringBuffer sql = new StringBuffer("SELECT * ") - .append(" FROM ").append(table.getTableName()) - .append(" WHERE ") - ; // Get list with all Unique columns! MEXPFormatLine[] uniqueFormatLines = expFormat.getUniqueColumns(); - if (uniqueFormatLines == null || uniqueFormatLines.length < 1) { + if (uniqueFormatLines == null || uniqueFormatLines.length < 1) + { throw new Exception(Msg.getMsg(ctx, "EXPFormatLineNoUniqueColumns")); } - Object[] values = new Object[uniqueFormatLines.length]; - for (int i = 0; i < uniqueFormatLines.length; i++) { - log.info("--- iterate unique column with index = ["+i+"]"); - MColumn column = MColumn.get(ctx, uniqueFormatLines[i].getAD_Column_ID()); + + Object[] cols = new Object[uniqueFormatLines.length]; + Object[] params = new Object[uniqueFormatLines.length]; + StringBuffer whereClause= new StringBuffer(""); + int col = 0; + for (MEXPFormatLine uniqueFormatLine : uniqueFormatLines) + { + MColumn column = MColumn.get(ctx, uniqueFormatLine.getAD_Column_ID()); log.info("column = ["+column+"]"); String valuecol=column.getColumnName(); - if (DisplayType.isNumeric(column.getAD_Reference_ID()) - && column.getAD_Reference_ID() != DisplayType.Integer) - { - valuecol="Round("+valuecol+",2)"; - } - if (MEXPFormatLine.TYPE_XMLElement.equals(uniqueFormatLines[i].getType())) { + if (MEXPFormatLine.TYPE_XMLElement.equals(uniqueFormatLine.getType())) + { // XML Element - //values[i] = XMLHelper.getString("/"+rootElement.getNodeName() + "/" + uniqueFormatLines[i].getValue(), rootElement); String xPath = null; - //xPath = "/"+rootNodeName + "/" + uniqueFormatLines[i].getValue(); -- works - //xPath = "/"+ uniqueFormatLines[i].getValue(); // do not work - xPath = ""+ uniqueFormatLines[i].getValue(); + xPath = ""+ uniqueFormatLine.getValue(); + cols[col] = XMLHelper.getString(xPath, rootElement); + log.info("values[" + col + "]=" + cols[col]); - values[i] = XMLHelper.getString(xPath, rootElement); - //log.info("xml PATH =" + rootElement.getNodeName() + "." + xPath ); - log.info("values[" + i + "]=" + values[i]); - - } else if (MEXPFormatLine.TYPE_ReferencedEXPFormat.equals(uniqueFormatLines[i].getType())) { + } + else if (MEXPFormatLine.TYPE_ReferencedEXPFormat.equals(uniqueFormatLine.getType())) + { // Referenced Export Format - log.info("referencedExpFormat.EXP_EmbeddedFormat_ID = " + uniqueFormatLines[i].getEXP_EmbeddedFormat_ID()); - MEXPFormat referencedExpFormat = new MEXPFormat(ctx, uniqueFormatLines[i].getEXP_EmbeddedFormat_ID(), trxName); + log.info("referencedExpFormat.EXP_EmbeddedFormat_ID = " + uniqueFormatLine.getEXP_EmbeddedFormat_ID()); + MEXPFormat referencedExpFormat = new MEXPFormat(ctx, uniqueFormatLine.getEXP_EmbeddedFormat_ID(), trxName); log.info("referencedExpFormat = " + referencedExpFormat); - /* - - - 0 - - SYSTEM - - - ... - - */ + int record_ID = 0; // Find Record_ID by ???Value??? In fact by Columns set as Part Of Unique Index in Export Format! - Element referencedNode = ((Element) rootElement.getElementsByTagName(uniqueFormatLines[i].getValue()).item(0)); + Element referencedNode = ((Element) rootElement.getElementsByTagName(uniqueFormatLine.getValue()).item(0)); log.info("referencedNode = " + referencedNode); - record_ID = getID(ctx, referencedExpFormat, referencedNode, uniqueFormatLines[i].getValue(), trxName); + record_ID = getID(ctx, referencedExpFormat, referencedNode, uniqueFormatLine.getValue(), trxName); log.info("record_ID = " + record_ID); - values[i] = new Integer(record_ID); - } else { + cols[col] = new Integer(record_ID); + } + else + { // Export Format Line is not one of two possible values...ERROR throw new Exception(Msg.getMsg(ctx, "EXPFormatLineNonValidType")); } - if (i == 0) { - sql.append(" ").append(valuecol).append(" = ? "); - } else { - sql.append(" AND ").append(valuecol).append(" = ? "); - } - } - log.info("sql = " + sql.toString()); - - PreparedStatement pstmt = null; - try { - pstmt = DB.prepareStatement (sql.toString(), trxName); - for (int i = 0; i < uniqueFormatLines.length; i++) { - MColumn col = MColumn.get(ctx, uniqueFormatLines[i].getAD_Column_ID()); + if ( DisplayType.DateTime == column.getAD_Reference_ID() + || DisplayType.Date == column.getAD_Reference_ID()) + { - if (col.getAD_Reference_ID() == DisplayType.DateTime - || col.getAD_Reference_ID() == DisplayType.Date) - { - - Timestamp value = (Timestamp)handleDateTime(values[i], col , uniqueFormatLines[i]); - pstmt.setTimestamp(i+1, value); - } - else if(col.getAD_Reference_ID() == DisplayType.String) - { - String value = (String)values[i]; - pstmt.setString(i+1, value); - } - else if (DisplayType.isNumeric(col.getAD_Reference_ID()) - && col.getAD_Reference_ID() != DisplayType.Integer) - { - BigDecimal value = new BigDecimal((String)values[i]); - pstmt.setBigDecimal(i+1, value.setScale(2, BigDecimal.ROUND_HALF_UP)); - } - else if (DisplayType.isID(col.getAD_Reference_ID()) - || col.getAD_Reference_ID() == DisplayType.Integer) - { - String stringValue = (String)values[i].toString(); - int value = Integer.parseInt(stringValue); - pstmt.setInt(i+1, value); - log.info("pstmt.setInt["+(i+1)+"] = [" + value +"]"); - } - else - { - pstmt.setObject(i+1, values[i]); - log.info("pstmt.setObject["+(i+1)+"] = [" + values[i]+"]"); - } - + Timestamp value = (Timestamp)handleDateTime(cols[col], column , uniqueFormatLine); + params[col] = value; + } + else if(column.getAD_Reference_ID() == DisplayType.String) + { + params[col] = (String)cols[col]; + } + else if( DisplayType.Amount == column.getAD_Reference_ID() + || DisplayType.Number == column.getAD_Reference_ID() + || DisplayType.CostPrice == column.getAD_Reference_ID() + || DisplayType.Quantity == column.getAD_Reference_ID()) + { + valuecol="Round("+valuecol+",2)"; + params[col] = new BigDecimal((String)cols[col]).setScale(2, BigDecimal.ROUND_HALF_UP); + } + else + { + params[col] = cols[col]; } - return pstmt; - - } catch (SQLException e) { - s_log.log(Level.SEVERE, sql.toString(), e); - throw e; - } + if (col == 0) { + whereClause.append(" ").append(valuecol).append(" = ? "); + } else { + whereClause.append(" AND ").append(valuecol).append(" = ? "); + } + col++; + } + + Query query = new Query(ctx,MTable.get(ctx, expFormat.getAD_Table_ID()),whereClause.toString(),trxName) + .setParameters(params); + values = query.list(); + + if(values.size()>1)//The Return Object must be always one + { + throw new Exception(Msg.getMsg(ctx, "EXPFormatIncorrectFormatDefinition")); + } + + if(values.size()<=0)//Means that is a new record + { + return MTable.get(ctx, expFormat.getAD_Table_ID()).getPO(0,trxName); + } + + return values.get(0);//Return the first (unique) record. } - public int getID(Properties ctx, MEXPFormat expFormat, Element rootElement, String rootNodeName, String trxName) throws Exception { - int result = 0; - - PreparedStatement pstmt = getIDValues(ctx,expFormat,rootElement,rootNodeName,trxName); - try - { - //We do this, because, what about if the ID is not the first column - //BF[2836406] - int AD_Table_ID = expFormat.getAD_Table_ID(); - MTable table = MTable.get(ctx, AD_Table_ID); - String columns[]=table.getKeyColumns(); // Must be always One - - if(columns==null || columns.length!=1) - { - throw new Exception(Msg.getMsg(ctx, "EXPFormatLineNoUniqueColumns")); - } - - ResultSet rs = pstmt.executeQuery(); - if ( rs.next() ) - { - result = rs.getInt(rs.findColumn(columns[0])); - } - rs.close (); - pstmt.close (); - pstmt = null; - } catch (SQLException e) { - throw e; - } finally { - try { - if (pstmt != null) - { - pstmt.close (); - } - pstmt = null; - } catch (Exception e) { pstmt = null; } - } - log.info("result = " + result); - return result; - } - - public String getID(Properties ctx, MEXPFormat expFormat, Element rootElement,String rootNodeName, String trxName,boolean multikey) throws Exception + /** + * This Method gets the ID value of the current referenced element to put in the imported Object + * Exp: AD_Org_ID of the Product. + * Must be allays one result. + * @param ctx + * @param expFormat + * @param rootElement + * @param rootNodeName + * @param trxName + * @throws Exception + * */ + private int getID(Properties ctx, MEXPFormat expFormat, Element rootElement, String rootNodeName, String trxName) throws Exception { - String result=""; - PreparedStatement pstmt = getIDValues(ctx,expFormat,rootElement,rootNodeName,trxName); - try - { + int record_id = 0; - int AD_Table_ID = expFormat.getAD_Table_ID(); - MTable table = MTable.get(ctx, AD_Table_ID); - String columns[]=table.getKeyColumns(); - //BF[2836406] - if(columns==null || columns.length <= 0) - { - throw new Exception(Msg.getMsg(ctx, "EXPFormatNoIDs")); //TODO Correct Exception Name - } - log.warning("Multiple columns ID. Table = "+ table.getTableName() +" Columns="+ columns); - - ResultSet rs = pstmt.executeQuery(); - if ( rs.next() ) - { - for(String column : columns) - { - result += " AND " + column + " = "+ rs.getInt(rs.findColumn(column)); - } - } - if(result.length()>0) - result = result.substring(4); - - rs.close (); - pstmt.close (); - pstmt = null; - } catch (SQLException e) { - throw e; - } finally { - try { - if (pstmt != null) - { - pstmt.close (); - } - pstmt = null; - } catch (Exception e) { pstmt = null; } + PO po = getObjectFromFormat(ctx,expFormat,rootElement,rootNodeName,trxName); + if (po != null) + { + record_id = po.get_ID(); } - return result; + log.info("record_id = " + record_id); + + return record_id; } - private Object handleDateTime(Object value, MColumn column, MEXPFormatLine formatLine) throws ParseException { + private Object handleDateTime(Object value, MColumn column, MEXPFormatLine formatLine) throws ParseException + { String valueString = null; valueString = value.toString(); // We are sure that value is not null Object result = value; - if (column.getAD_Reference_ID() == DisplayType.Date) { - if (valueString != null) { - if (formatLine.getDateFormat() != null && !"".equals(formatLine.getDateFormat())) { + if (DisplayType.Date == column.getAD_Reference_ID()) + { + if (valueString != null) + { + if (formatLine.getDateFormat() != null && !Util.isEmpty(formatLine.getDateFormat())) + { m_customDateFormat = new SimpleDateFormat( formatLine.getDateFormat() ); // "MM/dd/yyyy"; MM/dd/yyyy hh:mm:ss result = new Timestamp(m_customDateFormat.parse(valueString).getTime()); log.info("Custom Date Format; Parsed value = " + result.toString()); - } else { + } + else + { //result = new Timestamp(m_dateFormat.parse(valueString).getTime()); //log.info("Custom Date Format; Parsed value = " + result.toString()); //NOW Using Standard Japanese Format yyyy-mm-dd hh:mi:ss.mil so don't care about formats.... - if(valueString==null||valueString.length()<=0) + if( valueString == null + || valueString.length() <= 0 ) + { result=null; + } else + { result = Timestamp.valueOf(valueString); + } } } - } else if (column.getAD_Reference_ID() == DisplayType.DateTime) { - if (valueString != null) { - if (formatLine.getDateFormat() != null && !"".equals(formatLine.getDateFormat())) { + } + else if (DisplayType.DateTime == column.getAD_Reference_ID()) + { + if (valueString != null) + { + if (formatLine.getDateFormat() != null && !Util.isEmpty(formatLine.getDateFormat())) + { m_customDateFormat = new SimpleDateFormat( formatLine.getDateFormat() ); // "MM/dd/yyyy" result = new Timestamp(m_customDateFormat.parse(valueString).getTime()); log.info("Custom Date Format; Parsed value = " + result.toString()); - } else { + } + else + { //result = new Timestamp(m_dateTimeFormat.parse(valueString).getTime()); //log.info("Custom Date Format; Parsed value = " + result.toString()); //NOW Using Standard Japanese Format yyyy-mm-dd hh:mi:ss.mil so don't care about formats.... @@ -782,5 +746,4 @@ public class ImportHelper { } return result; } - }