Recommit to recover history on files modified integrating libero

This commit is contained in:
Carlos Ruiz 2008-05-30 04:02:59 +00:00
parent 089bfcd9b5
commit dceffbc8e8
13 changed files with 2066 additions and 0 deletions

View File

@ -0,0 +1,104 @@
package org.compiere.model;
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;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
/**
* @author Trifon N. Trifonov
*/
public class MReplicationStrategy extends X_AD_ReplicationStrategy {
/**
*
*/
private static final long serialVersionUID = 1L;
/** Static Logger */
private static CLogger s_log = CLogger.getCLogger (MReplicationStrategy.class);
public MReplicationStrategy(Properties ctx, int AD_ReplicationStrategy_ID, String trxName) {
super(ctx, AD_ReplicationStrategy_ID, trxName);
}
public X_AD_ReplicationTable[] getReplicationTables() {
List<X_AD_ReplicationTable> resultList = new ArrayList<X_AD_ReplicationTable>();
StringBuffer sql = new StringBuffer("SELECT * ")
.append(" FROM ").append(X_AD_ReplicationTable.Table_Name)
.append(" WHERE ").append(X_AD_ReplicationTable.COLUMNNAME_AD_ReplicationStrategy_ID).append("=?") // #1
.append(" AND IsActive = ?") // #2
// .append(" ORDER BY ").append(orderBy)
;
PreparedStatement pstmt = null;
X_AD_ReplicationTable rplTable = null;
try {
pstmt = DB.prepareStatement (sql.toString(), get_TrxName());
pstmt.setInt(1, getAD_ReplicationStrategy_ID());
pstmt.setString(2, "Y");
ResultSet rs = pstmt.executeQuery ();
while ( rs.next() ) {
rplTable = new X_AD_ReplicationTable (getCtx(), rs, get_TrxName());
resultList.add(rplTable);
}
rs.close ();
pstmt.close ();
pstmt = null;
} catch (SQLException e) {
s_log.log(Level.SEVERE, sql.toString(), e);
} finally {
try {
if (pstmt != null) pstmt.close ();
pstmt = null;
} catch (Exception e) { pstmt = null; }
}
X_AD_ReplicationTable[] result = (X_AD_ReplicationTable[])resultList.toArray( new X_AD_ReplicationTable[0]);
return result;
}
public X_AD_ReplicationDocument[] getReplicationDocuments() {
List<X_AD_ReplicationDocument> resultList = new ArrayList<X_AD_ReplicationDocument>();
StringBuffer sql = new StringBuffer("SELECT * ")
.append(" FROM ").append(X_AD_ReplicationDocument.Table_Name)
.append(" WHERE ").append(X_AD_ReplicationDocument.COLUMNNAME_AD_ReplicationStrategy_ID).append("=?") // #1
.append(" AND IsActive = ?") // #2
// .append(" ORDER BY ").append(orderBy)
;
PreparedStatement pstmt = null;
X_AD_ReplicationDocument rplDocument = null;
try {
pstmt = DB.prepareStatement (sql.toString(), get_TrxName());
pstmt.setInt(1, getAD_ReplicationStrategy_ID());
pstmt.setString(2, "Y");
ResultSet rs = pstmt.executeQuery ();
while ( rs.next() ) {
rplDocument = new X_AD_ReplicationDocument (getCtx(), rs, get_TrxName());
resultList.add(rplDocument);
}
rs.close ();
pstmt.close ();
pstmt = null;
} catch (SQLException e) {
s_log.log(Level.SEVERE, sql.toString(), e);
} finally {
try {
if (pstmt != null) pstmt.close ();
pstmt = null;
} catch (Exception e) { pstmt = null; }
}
X_AD_ReplicationDocument[] result = (X_AD_ReplicationDocument[])resultList.toArray( new X_AD_ReplicationDocument[0]);
return result;
}
}

View File

@ -0,0 +1,56 @@
CREATE OR REPLACE VIEW RV_OPENITEMTODATE
(AD_ORG_ID, AD_CLIENT_ID, DOCUMENTNO, C_INVOICE_ID, C_ORDER_ID,
C_BPARTNER_ID, ISSOTRX, DATEINVOICED, DATEACCT, NETDAYS,
DUEDATE, DAYSDUE, DISCOUNTDATE, DISCOUNTAMT, GRANDTOTAL,
--PAIDAMT, OPENAMT,
C_CURRENCY_ID, C_CONVERSIONTYPE_ID, C_PAYMENTTERM_ID,
ISPAYSCHEDULEVALID, C_INVOICEPAYSCHEDULE_ID, INVOICECOLLECTIONTYPE, C_CAMPAIGN_ID, C_PROJECT_ID,
C_ACTIVITY_ID)
AS
SELECT i.AD_Org_ID, i.AD_Client_ID,
i.DocumentNo, i.C_Invoice_ID, i.C_Order_ID, i.C_BPartner_ID, i.IsSOTrx,
i.DateInvoiced, i.DateAcct,
p.NetDays,
paymentTermDueDate(i.C_PaymentTerm_ID, i.DateInvoiced) AS DueDate,
paymentTermDueDays(i.C_PaymentTerm_ID, i.DateInvoiced, getdate()) AS DaysDue,
addDays(i.DateInvoiced,p.DiscountDays) AS DiscountDate,
ROUND(i.GrandTotal*p.Discount/100,2) AS DiscountAmt,
i.GrandTotal,
--invoicePaid(i.C_Invoice_ID, i.C_Currency_ID, 1) AS PaidAmt,
--invoiceOpen(i.C_Invoice_ID,0) AS OpenAmt,
i.C_Currency_ID, i.C_ConversionType_ID,
i.C_PaymentTerm_ID,
i.IsPayScheduleValid, cast(null as number) AS C_InvoicePaySchedule_ID, i.InvoiceCollectionType,
i.C_Campaign_ID, i.C_Project_ID, i.C_Activity_ID
FROM RV_C_Invoice i
INNER JOIN C_PaymentTerm p ON (i.C_PaymentTerm_ID=p.C_PaymentTerm_ID)
WHERE -- i.IsPaid='N'
--invoiceOpen(i.C_Invoice_ID,0) <> 0 AND
i.IsPayScheduleValid<>'Y'
AND i.DocStatus<>'DR'
UNION
SELECT i.AD_Org_ID, i.AD_Client_ID,
i.DocumentNo, i.C_Invoice_ID, i.C_Order_ID, i.C_BPartner_ID, i.IsSOTrx,
i.DateInvoiced, i.DateAcct,
daysBetween(ips.DueDate,i.DateInvoiced) AS NetDays,
ips.DueDate,
daysBetween(getdate(),ips.DueDate) AS DaysDue,
ips.DiscountDate,
ips.DiscountAmt,
ips.DueAmt AS GrandTotal,
-- invoicePaid(i.C_Invoice_ID, i.C_Currency_ID, 1) AS PaidAmt,
-- invoiceOpen(i.C_Invoice_ID, ips.C_InvoicePaySchedule_ID) AS OpenAmt,
i.C_Currency_ID, i.C_ConversionType_ID,
i.C_PaymentTerm_ID,
i.IsPayScheduleValid, ips.C_InvoicePaySchedule_ID, i.InvoiceCollectionType,
i.C_Campaign_ID, i.C_Project_ID, i.C_Activity_ID
FROM RV_C_Invoice i
INNER JOIN C_InvoicePaySchedule ips ON (i.C_Invoice_ID=ips.C_Invoice_ID)
WHERE -- i.IsPaid='N'
--invoiceOpen(i.C_Invoice_ID,ips.C_InvoicePaySchedule_ID) <> 0 AND
i.IsPayScheduleValid='Y'
AND i.DocStatus<>'DR'
AND ips.IsValid='Y';

View File

@ -0,0 +1,56 @@
CREATE OR REPLACE VIEW RV_OPENITEMTODATE
(AD_ORG_ID, AD_CLIENT_ID, DOCUMENTNO, C_INVOICE_ID, C_ORDER_ID,
C_BPARTNER_ID, ISSOTRX, DATEINVOICED, DATEACCT, NETDAYS,
DUEDATE, DAYSDUE, DISCOUNTDATE, DISCOUNTAMT, GRANDTOTAL,
--PAIDAMT, OPENAMT,
C_CURRENCY_ID, C_CONVERSIONTYPE_ID, C_PAYMENTTERM_ID,
ISPAYSCHEDULEVALID, C_INVOICEPAYSCHEDULE_ID, INVOICECOLLECTIONTYPE, C_CAMPAIGN_ID, C_PROJECT_ID,
C_ACTIVITY_ID)
AS
SELECT i.AD_Org_ID, i.AD_Client_ID,
i.DocumentNo, i.C_Invoice_ID, i.C_Order_ID, i.C_BPartner_ID, i.IsSOTrx,
i.DateInvoiced, i.DateAcct,
p.NetDays,
paymentTermDueDate(i.C_PaymentTerm_ID, i.DateInvoiced) AS DueDate,
paymentTermDueDays(i.C_PaymentTerm_ID, i.DateInvoiced, getdate()) AS DaysDue,
addDays(i.DateInvoiced,p.DiscountDays) AS DiscountDate,
ROUND(i.GrandTotal*p.Discount/100,2) AS DiscountAmt,
i.GrandTotal,
--invoicePaid(i.C_Invoice_ID, i.C_Currency_ID, 1) AS PaidAmt,
--invoiceOpen(i.C_Invoice_ID,0) AS OpenAmt,
i.C_Currency_ID, i.C_ConversionType_ID,
i.C_PaymentTerm_ID,
i.IsPayScheduleValid, cast(null as numeric) AS C_InvoicePaySchedule_ID, i.InvoiceCollectionType,
i.C_Campaign_ID, i.C_Project_ID, i.C_Activity_ID
FROM RV_C_Invoice i
INNER JOIN C_PaymentTerm p ON (i.C_PaymentTerm_ID=p.C_PaymentTerm_ID)
WHERE -- i.IsPaid='N'
--invoiceOpen(i.C_Invoice_ID,0) <> 0 AND
i.IsPayScheduleValid<>'Y'
AND i.DocStatus<>'DR'
UNION
SELECT i.AD_Org_ID, i.AD_Client_ID,
i.DocumentNo, i.C_Invoice_ID, i.C_Order_ID, i.C_BPartner_ID, i.IsSOTrx,
i.DateInvoiced, i.DateAcct,
daysBetween(ips.DueDate,i.DateInvoiced) AS NetDays,
ips.DueDate,
daysBetween(getdate(),ips.DueDate) AS DaysDue,
ips.DiscountDate,
ips.DiscountAmt,
ips.DueAmt AS GrandTotal,
--invoicePaid(i.C_Invoice_ID, i.C_Currency_ID, 1) AS PaidAmt,
--invoiceOpen(i.C_Invoice_ID, ips.C_InvoicePaySchedule_ID) AS OpenAmt,
i.C_Currency_ID, i.C_ConversionType_ID,
i.C_PaymentTerm_ID,
i.IsPayScheduleValid, ips.C_InvoicePaySchedule_ID, i.InvoiceCollectionType,
i.C_Campaign_ID, i.C_Project_ID, i.C_Activity_ID
FROM RV_C_Invoice i
INNER JOIN C_InvoicePaySchedule ips ON (i.C_Invoice_ID=ips.C_Invoice_ID)
WHERE -- i.IsPaid='N'
--invoiceOpen(i.C_Invoice_ID,ips.C_InvoicePaySchedule_ID) <> 0 AND
i.IsPayScheduleValid='Y'
AND i.DocStatus<>'DR'
AND ips.IsValid='Y';

View File

@ -0,0 +1,106 @@
/**********************************************************************
* This file is part of Adempiere ERP Bazaar *
* http://www.adempiere.org *
* *
* Copyright (C) Trifon Trifonov. *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trifon Trifonov (trifonnt@users.sourceforge.net) *
* *
* Sponsors: *
* - E-evolution (http://www.e-evolution.com) *
***********************************************************************/
package org.adempiere.server;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import java.io.*;
/**
*
* @author Trifon N. Trifonov
*
*/
public class JAXPParserMaker {
public static StringBuffer text = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
.append("<C_BPartner AD_Client_Value=\"GardenWorld\" Version=\"3.2.0\">")
.append(" <AD_Client_ID>")
.append(" <AD_Client_Value>GardenWorld</AD_Client_Value>")
.append(" </AD_Client_ID>")
.append(" <AD_Org_ID>")
.append(" <Value>0</Value>")
.append(" <AD_Client_ID>")
.append(" <AD_Client_Value>SYSTEM</AD_Client_Value>")
.append(" </AD_Client_ID>")
.append(" </AD_Org_ID>")
.append(" <Value>C&amp;W-test05</Value>")
.append(" <Name>C&amp;W Construction-05</Name>")
.append(" <C_BP_Group_ID>")
.append(" <Value>Standard</Value>")
.append(" <AD_Client_ID>")
.append(" <AD_Client_Value>GardenWorld</AD_Client_Value>")
.append(" </AD_Client_ID>")
.append(" </C_BP_Group_ID>")
.append(" <Created DateFormat=\"MM/dd/yyyy hh:mm:ss\">04/11/2001 09:11:36</Created>")
.append(" <CreatedBy>")
.append(" <Name>SuperUser</Name>")
.append(" <AD_Client_ID>")
.append(" <AD_Client_Value>SYSTEM</AD_Client_Value>")
.append(" </AD_Client_ID>")
.append(" </CreatedBy>")
.append(" <Updated DateFormat=\"MM/dd/yyyy hh:mm:ss\">11/17/2007 01:49:50</Updated>")
.append(" <UpdatedBy>")
.append(" <Name>System</Name>")
.append(" <AD_Client_ID>")
.append(" <AD_Client_Value>SYSTEM</AD_Client_Value>")
.append(" </AD_Client_ID>")
.append(" </UpdatedBy>")
.append("</C_BPartner>")
;
public static void main(String[] args) {
try {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder parser = builderFactory.newDocumentBuilder();
try {
// Read the entire document into memory
Document document = parser.parse( new InputSource(new StringReader( text.toString() ) ) );
System.out.println( "Document = " + document);
// work with the document...
} catch (SAXException e) {
System.err.println(e);
} catch (IOException e) {
System.err.println(e);
}
} catch (ParserConfigurationException e) {
System.err.println("You need to install a JAXP aware parser.");
}
}
}

View File

@ -0,0 +1,124 @@
/**********************************************************************
* This file is part of Adempiere ERP Bazaar *
* http://www.adempiere.org *
* *
* Copyright (C) Trifon Trifonov. *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trifon Trifonov (trifonnt@users.sourceforge.net) *
* *
* Sponsors: *
* - E-evolution (http://www.e-evolution.com/) *
**********************************************************************/
package org.adempiere.server;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.Connection;
import javax.jms.Session;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.DeliveryMode;
import javax.jms.TextMessage;
public class SimpleMessageToTopic {
private static final String TOPIC_NAME = "ExampleTopic";
private static StringBuffer text = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
.append("<C_BPartner AD_Client_Value=\"GardenWorld\" Version=\"3.2.0\">")
.append(" <AD_Client_ID>")
.append(" <AD_Client_Value>GardenWorld</AD_Client_Value>")
.append(" </AD_Client_ID>")
.append(" <AD_Org_ID>")
.append(" <Value>0</Value>")
.append(" <AD_Client_ID>")
.append(" <AD_Client_Value>SYSTEM</AD_Client_Value>")
.append(" </AD_Client_ID>")
.append(" </AD_Org_ID>")
.append(" <Value>C&amp;W-test06</Value>")
.append(" <Name>C&amp;W Construction-06</Name>")
.append(" <C_BP_Group_ID>")
.append(" <Value>Standard</Value>")
.append(" <AD_Client_ID>")
.append(" <AD_Client_Value>GardenWorld</AD_Client_Value>")
.append(" </AD_Client_ID>")
.append(" </C_BP_Group_ID>")
.append(" <Created DateFormat=\"MM/dd/yyyy hh:mm:ss\">04/11/2001 09:11:36</Created>")
.append(" <CreatedBy>")
.append(" <Name>SuperUser</Name>")
.append(" <AD_Client_ID>")
.append(" <AD_Client_Value>SYSTEM</AD_Client_Value>")
.append(" </AD_Client_ID>")
.append(" </CreatedBy>")
.append(" <Updated DateFormat=\"MM/dd/yyyy hh:mm:ss\">11/17/2007 01:49:50</Updated>")
.append(" <UpdatedBy>")
.append(" <Name>System</Name>")
.append(" <AD_Client_ID>")
.append(" <AD_Client_Value>SYSTEM</AD_Client_Value>")
.append(" </AD_Client_ID>")
.append(" </UpdatedBy>")
.append("</C_BPartner>")
;
public static void main(String[] args) {
runTool("localhost", 61616);
}
public static void runTool(String host, int port) {
try {
// Create a ConnectionFactory
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
"tcp://"+host+":"+port);
// Create a Connection
Connection connection = connectionFactory.createConnection();
connection.setClientID("GardenWorld");
connection.start();
// Create a Session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Create the destination (Topic or Queue)
Destination destination = session.createTopic(TOPIC_NAME);
// Create a MessageProducer from the Session to the Topic or Queue
MessageProducer producer = session.createProducer(destination);
producer.setTimeToLive(10000);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
// Create a message
TextMessage message = session.createTextMessage(text.toString());
// Tell the producer to send the message
System.out.println("Sent message");
producer.send(message);
// Clean up
session.close();
connection.close();
} catch (Exception e) {
System.out.println("Caught: " + e);
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,57 @@
/**********************************************************************
* This file is part of Adempiere ERP Bazaar *
* http://www.adempiere.org *
* *
* Copyright (C) Trifon Trifonov. *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trifon Trifonov (trifonnt@users.sourceforge.net) *
* *
* Sponsors: *
* - E-evolution (http://www.e-evolution.com) *
***********************************************************************/
package org.adempiere.server.rpl;
import java.util.Properties;
import org.compiere.server.ReplicationProcessor;
/**
* Interface for Import processor
* @author Trifon Trifonov
*
*/
public interface IImportProcessor {
/**
* @param ctx
* @param expProcessor
* @param trxName
* @return void
* @throws Exception
*/
public void process(Properties ctx, ReplicationProcessor replicationProcessor, String trxName) throws Exception;
/**
*
* @throws Exception
*/
public void stop() throws Exception;
}

View File

@ -0,0 +1,140 @@
/**********************************************************************
* This file is part of Adempiere ERP Bazaar *
* http://www.adempiere.org *
* *
* Copyright (C) Trifon Trifonov. *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trifon Trifonov (trifonnt@users.sourceforge.net) *
* *
* Sponsors: *
* - E-evolution (http://www.e-evolution.com) *
***********************************************************************/
package org.adempiere.server.rpl;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
/**
* Utility class which helps with XML processing.
*
* @author Trifon Trifonov
* @version $Id$
*/
public class XMLHelper {
private static XPath xPath = XPathFactory.newInstance().newXPath();
public static Element getElement(String xPathExpression, Node node)
throws XPathExpressionException {
return (Element) xPath.evaluate(xPathExpression, node,
XPathConstants.NODE);
}
public static Node getNode(String xPathExpression, Node node)
throws XPathExpressionException {
return (Node) xPath
.evaluate(xPathExpression, node, XPathConstants.NODE);
}
public static NodeList getNodeList(String xPathExpression, Node node)
throws XPathExpressionException {
return (NodeList) xPath.evaluate(xPathExpression, node,
XPathConstants.NODESET);
}
public static Double getNumber(String xPathExpression, Node node)
throws XPathExpressionException {
return (Double) xPath.evaluate(xPathExpression, node,
XPathConstants.NUMBER);
}
public static String getString(String xPathExpression, Node node)
throws XPathExpressionException {
return (String) xPath.evaluate(xPathExpression, node,
XPathConstants.STRING);
}
public static Boolean getBoolean(String xPathExpression, Node node)
throws XPathExpressionException {
return (Boolean) xPath.evaluate(xPathExpression, node,
XPathConstants.BOOLEAN);
}
public static Document createDocumentFromFile(String pathToXmlFile)
throws ParserConfigurationException, SAXException, IOException {
// path to file is global
String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
// String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
// validate against XML Schema in dbsql2xml.xsd
// documentBuilderFactory.setNamespaceAware(true);
//INFO change validation to true. Someday when xsd file is complete...
documentBuilderFactory.setValidating(false);
documentBuilderFactory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
// documentBuilderFactory.setAttribute(JAXP_SCHEMA_SOURCE, new File(pathToXsdFile));
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(new File(pathToXmlFile));
return document;
}
public static Document createDocumentFromString(String str)
throws ParserConfigurationException, SAXException, IOException {
// path to file is global
// String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
// String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
// String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
// validate against XML Schema in dbsql2xml.xsd
// documentBuilderFactory.setNamespaceAware(true);
//INFO change validation to true. Someday when xsd file is complete...
documentBuilderFactory.setValidating(false);
// documentBuilderFactory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
// documentBuilderFactory.setAttribute(JAXP_SCHEMA_SOURCE, new File(pathToXsdFile));
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse( new InputSource(new StringReader( str ) ) );
return document;
}
}

View File

@ -0,0 +1,89 @@
/**********************************************************************
* This file is part of Adempiere ERP Bazaar *
* http://www.adempiere.org *
* *
* Copyright (C) Trifon Trifonov. *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trifon Trifonov (trifonnt@users.sourceforge.net) *
* *
* Sponsors: *
* - E-evolution (http://www.e-evolution.com/) *
**********************************************************************/
package org.adempiere.server.rpl.imp;
import java.util.Properties;
import org.adempiere.server.rpl.IImportProcessor;
import org.adempiere.server.rpl.XMLHelper;
import org.eevolution.model.MIMPProcessor;
import org.eevolution.model.X_IMP_ProcessorParameter;
import org.compiere.server.ReplicationProcessor;
import org.compiere.util.CLogger;
import org.w3c.dom.Document;
/**
*
* @author Trifon N. Trifonov
* @version $Id:$
*/
public class FileImportProcessor implements IImportProcessor {
/** Logger */
protected CLogger log = CLogger.getCLogger (FileImportProcessor.class);
public void process(Properties ctx, ReplicationProcessor replicationProcessor, String trxName)
throws Exception {
MIMPProcessor impProcessor = replicationProcessor.getMImportProcessor();
X_IMP_ProcessorParameter[] processorParameters = impProcessor.getIMP_ProcessorParameters(trxName);
String fileName = null;
if (processorParameters != null && processorParameters.length > 0) {
for (int i = 0; i < processorParameters.length; i++) {
log.info("ProcesParameter Value = " + processorParameters[i].getValue());
log.info("ProcesParameter ParameterValue = " + processorParameters[i].getParameterValue());
if (processorParameters[i].getValue().equals("fileName")) {
fileName = processorParameters[i].getParameterValue();
} else {
// Some other mandatory parameter here
}
}
}
if (fileName == null || fileName.length() == 0) {
throw new Exception("Missing IMP_ProcessorParameter with key 'fileName'!");
}
Document documentToBeImported = XMLHelper.createDocumentFromFile(fileName);
StringBuffer result = new StringBuffer();
ImportHelper impHelper = new ImportHelper( ctx );
impHelper.importXMLDocument(result, documentToBeImported, trxName );
// addLog(0, null, null, Msg.getMsg(ctx, "ImportModelProcessResult") + "\n" + result.toString());
}
public void stop() throws Exception {
// do nothing!
}
}

View File

@ -0,0 +1,604 @@
/**********************************************************************
* This file is part of Adempiere ERP Bazaar *
* http://www.adempiere.org *
* *
* Copyright (C) Trifon Trifonov. *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trifon Trifonov (trifonnt@users.sourceforge.net) *
* *
* Sponsors: *
* - 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.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Properties;
import java.util.logging.Level;
import javax.xml.xpath.XPathExpressionException;
import org.adempiere.server.rpl.XMLHelper;
import org.compiere.model.MClient;
import org.compiere.model.MColumn;
import org.eevolution.model.MEXPFormat;
import org.eevolution.model.MEXPFormatLine;
import org.compiere.model.MTable;
import org.compiere.model.PO;
import org.compiere.model.X_AD_Client;
import org.eevolution.model.X_EXP_FormatLine;
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;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* @author Trifon N. Trifonov
*/
public class ImportHelper {
/** Instance Logger */
private CLogger log = CLogger.getCLogger(ImportHelper.class);
/** Static Logger */
private static CLogger s_log = CLogger.getCLogger(ImportHelper.class);
/** Date Time Format */
private SimpleDateFormat m_dateTimeFormat = null;
/** Date Format */
private SimpleDateFormat m_dateFormat = null;
/** Custom Date Format */
private SimpleDateFormat m_customDateFormat = null;
/** Context */
private Properties ctx = null;
public ImportHelper(Properties ctx) {
this.ctx = ctx;
// Construct DateFromat and DateTimeFormat
m_dateTimeFormat = DisplayType.getDateFormat(DisplayType.DateTime, Env.getLanguage(ctx));
m_dateFormat = DisplayType.getDateFormat(DisplayType.Date, Env.getLanguage(ctx));
}
/**
* @param ctx
* @param result
* @param documentToBeImported
* @param trxName
* @throws Exception
* @throws SQLException
* @throws XPathExpressionException
*/
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)) {
throw new Exception(Msg.getMsg(ctx, "XMLClientValueMandatory"));
}
String version = null;
version = rootElement.getAttribute("Version");
log.info("Version = " + version);
if (version == null || "".equals(version)) {
throw new Exception(Msg.getMsg(ctx, "XMLVersionAttributeMandatory"));
}
MClient client = null;
client = getAD_ClientByValue(ctx, AD_Client_Value, trxName);
if (client == null) {
throw new Exception(Msg.getMsg(ctx, "XMLClientNotFound"));
}
log.info(client.toString());
String EXP_Format_Value = null;
EXP_Format_Value = rootElement.getNodeName();
log.info("EXP_Format_Value = " + EXP_Format_Value);
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) {
// 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) {
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) {
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...
boolean resultSave = po.saveReplica(true);
result.append("ResultSave=").append(resultSave).append("; ");
if (resultSave) {
// Success in save
} else {
// Failed in save
throw new Exception(Msg.getMsg(ctx, "EXPFormatFailedSave"));
}
}
/**
* @param result
* @param rootElement
* @param expFormat
* @throws Exception
* @throws XPathExpressionException
*/
@SuppressWarnings("unchecked")
private PO importElement(Properties ctx, StringBuffer result, Element rootElement,
MEXPFormat expFormat, 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;
// Find Record_ID by ???Value??? In fact by Columns set as Part Of Unique Index in Export Format!
record_ID = getID(ctx, expFormat, rootElement, rootElement.getNodeName(), trxName);
log.info("record_ID = " + record_ID);
PO po = table.getPO(record_ID, trxName);
log.info("PO.toString() = " + po.toString());
if (po.get_KeyColumns().length > 1 || po.get_KeyColumns().length < 1) {
throw new Exception(Msg.getMsg(ctx, "EDIMultiColumnNotSupported"));
}
StringBuffer orderBy = new StringBuffer(X_EXP_FormatLine.COLUMNNAME_IsMandatory).append(" DESC ")
.append(", ").append(X_EXP_FormatLine.COLUMNNAME_Position)
;
MEXPFormatLine[] formatLines = expFormat.getFormatLinesOrderedBy(orderBy.toString());
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++) {
log.info("=================== Beginnig of Format Line ===============================");
log.info("formatLines["+i+"]=[" + formatLines[i].toString() + "]");
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
/* <C_BPartner>
<AD_Org>
<Value>0</Value>
<AD_Client_Value>
<AD_Client_Value>SYSTEM</AD_Client_Value>
</AD_Client_Value>
</AD_Org>
...
<C_BPartner> */
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);
refRecord_ID = getID(ctx, referencedExpFormat, referencedNode, formatLines[i].getValue(), trxName);
log.info("refRecord_ID = " + refRecord_ID);
value = new Integer(refRecord_ID);
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
/* <C_Order>
<DocumentNo>GardenWorls</DocumentNo>
...
... <-- MUST save Master Record here! Else we can't set orderLine.setC_Order_ID(..)
<C_OrderLine>...</C_OrderLine>
<C_OrderLine>...</C_OrderLine>
</C_Order> */
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"));
}
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 + "]");
// 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, 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(formatLines[i].getAD_Column_ID(), value);
log.info("Set value of column ["+column.getColumnName()+"]=["+value+"]");
} else if (column.getAD_Reference_ID() == DisplayType.ID
|| column.getAD_Reference_ID() == DisplayType.Integer
|| column.getAD_Reference_ID() == DisplayType.Search
|| column.getAD_Reference_ID() == DisplayType.TableDir
|| column.getAD_Reference_ID() == DisplayType.Table
)
{
//
int intValue = Integer.parseInt(value.toString());
value = new Integer( intValue );
log.info("Abut to set int value of column ["+column.getColumnName()+"]=["+value+"]");
po.set_ValueOfColumn(formatLines[i].getAD_Column_ID(), intValue);
log.info("Set int value of column ["+column.getColumnName()+"]=["+value+"]");
} else if (column.getAD_Reference_ID() == DisplayType.Amount
|| column.getAD_Reference_ID() == DisplayType.Number
|| column.getAD_Reference_ID() == DisplayType.CostPrice
|| column.getAD_Reference_ID() == DisplayType.Quantity
)
{
//
double doubleValue = Double.parseDouble(value.toString());
value = new BigDecimal(doubleValue);
//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);
}
else {
//
try {
log.info("About to set value of column ["+column.getColumnName()+"]=["+value+"]");
po.set_ValueOfColumn(formatLines[i].getAD_Column_ID(), clazz.cast(value));
log.info("Set value of column ["+column.getColumnName()+"]=["+value+"]");
} 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("; ");
}
}
}
}
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(X_AD_Client.Table_Name)
.append(" WHERE ").append(X_AD_Client.COLUMNNAME_Value).append(" = ?")
// .append(" AND IsActive = ?")
;
//s_log.info(sql.toString());
s_log.info("Client_Value =[" + value + "]");
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;
}
}
return result;
}
public int getID(Properties ctx, MEXPFormat expFormat, Element rootElement, String rootNodeName, String trxName) throws Exception {
int result = 0;
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) {
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) {
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());
log.info("column = ["+column+"]");
if (MEXPFormatLine.TYPE_XMLElement.equals(uniqueFormatLines[i].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();
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())) {
// 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 = " + referencedExpFormat);
/*
<C_BPartner>
<AD_Org>
<Value>0</Value>
<AD_Client_Value>
<AD_Client_Value>SYSTEM</AD_Client_Value>
</AD_Client_Value>
</AD_Org>
...
<C_BPartner>
*/
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));
log.info("referencedNode = " + referencedNode);
record_ID = getID(ctx, referencedExpFormat, referencedNode, uniqueFormatLines[i].getValue(), trxName);
log.info("record_ID = " + record_ID);
values[i] = 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(column.getColumnName()).append(" = ? ");
} else {
sql.append(" AND ").append(column.getColumnName()).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 (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
{
pstmt.setObject(i+1, values[i]);
log.info("pstmt.setObject["+(i+1)+"] = [" + values[i]+"]");
}
}
ResultSet rs = pstmt.executeQuery();
if ( rs.next() ) {
result = rs.getInt(1);
}
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; }
}
log.info("result = " + result);
return result;
}
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())) {
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 {
result = new Timestamp(m_dateFormat.parse(valueString).getTime());
log.info("Custom Date Format; Parsed value = " + result.toString());
}
}
} else if (column.getAD_Reference_ID() == DisplayType.DateTime) {
if (valueString != null) {
if (formatLine.getDateFormat() != null && !"".equals(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 {
result = new Timestamp(m_dateTimeFormat.parse(valueString).getTime());
log.info("Custom Date Format; Parsed value = " + result.toString());
}
}
}
return result;
}
}

View File

@ -0,0 +1,154 @@
/**********************************************************************
* This file is part of Adempiere ERP Bazaar *
* http://www.adempiere.org *
* *
* Copyright (C) Trifon Trifonov. *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trifon Trifonov (trifonnt@users.sourceforge.net) *
* *
* Sponsors: *
* - E-evolution (http://www.e-evolution.com/) *
**********************************************************************/
package org.adempiere.server.rpl.imp;
import java.util.logging.Level;
import org.adempiere.server.rpl.XMLHelper;
import org.compiere.Adempiere;
import org.compiere.process.ProcessInfo;
import org.compiere.process.ProcessInfoParameter;
import org.compiere.process.SvrProcess;
import org.compiere.util.CLogMgt;
import org.compiere.util.Env;
import org.compiere.util.Msg;
import org.w3c.dom.Document;
/**
*
* @author Trifon N. Trifonov
* @author victor.perez@e-evolution.com
* FB [1963487 ] Is necessary new process to export and import with an Export
* @see http://sourceforge.net/tracker/?func=detail&atid=879335&aid=1963487&group_id=176962
* @version $Id:$
*/
public class ModelImporter extends SvrProcess {
/** Client Parameter */
protected int p_AD_Client_ID = 0;
/** Document Type Parameter */
protected int p_C_DocType_ID = 0;
/** Record ID */
protected int p_Record_ID = 0;
/** EXP_Format_ID */
protected int p_EXP_Format_ID = 0;
/** File Name **/
protected String p_FileName = "";
/** Table ID */
int AD_Table_ID = 0;
/**
* Get Parameters
*/
protected void prepare() {
p_Record_ID = getRecord_ID();
if (p_AD_Client_ID == 0)
p_AD_Client_ID = Env.getAD_Client_ID(getCtx());
AD_Table_ID = getTable_ID();
StringBuffer sb = new StringBuffer("AD_Table_ID=").append(AD_Table_ID);
sb.append("; Record_ID=").append(getRecord_ID());
// Parameter
ProcessInfoParameter[] para = getParameter();
for (int i = 0; i < para.length; i++) {
String name = para[i].getParameterName();
if (para[i].getParameter() == null)
;
else if (name.equals("EXP_Format_ID"))
p_EXP_Format_ID = para[i].getParameterAsInt();
else if (name.equals("FileName"))
p_FileName = (String)para[i].getParameter();
else
log.log(Level.SEVERE, "Unknown Parameter: " + name);
}
if(p_EXP_Format_ID == 0)
p_EXP_Format_ID = p_Record_ID;
if(p_FileName == null)
{
// Load XML file and parse it
String fileNameOr = org.compiere.util.Ini.findAdempiereHome()
+ System.getProperty("file.separator")
+ "data"
+ System.getProperty("file.separator")
+ "ExportFile.xml";
p_FileName = fileNameOr;
}
log.info(sb.toString());
}
/**
* Process
*
* @return info
*/
protected String doIt() throws Exception
{
StringBuffer result = new StringBuffer("");
// Load XML file and parse it
/*String fileNameOr = org.compiere.util.Ini.findAdempiereHome()
+ System.getProperty("file.separator")
+ "data"
+ System.getProperty("file.separator");
String pathToXmlFile = fileNameOr+"XmlExport-test.xml";
Document documentToBeImported = XMLHelper.createDocumentFromFile(pathToXmlFile);*/
Document documentToBeImported = XMLHelper.createDocumentFromFile(p_FileName);
ImportHelper impHelper = new ImportHelper(getCtx());
impHelper.importXMLDocument(result, documentToBeImported, get_TrxName());
addLog(0, null, null, Msg.getMsg(getCtx(), "ImportModelProcessResult") + "\n" + result.toString());
return result.toString();
}
public static void main(String[] args)
{
CLogMgt.setLoggerLevel(Level.INFO, null);
CLogMgt.setLevel(Level.INFO);
Adempiere.startupEnvironment(false);
ProcessInfo pi = new ProcessInfo("Test Import Model", 1000000);
pi.setAD_Client_ID(11);
pi.setAD_User_ID(100);
ModelImporter modelImporter = new ModelImporter();
modelImporter.startProcess(Env.getCtx(), pi, null);
System.out.println("Process=" + pi.getTitle() + " Error="+pi.isError() + " Summary=" + pi.getSummary());
}
}

View File

@ -0,0 +1,130 @@
/**********************************************************************
* This file is part of Adempiere ERP Bazaar *
* http://www.adempiere.org *
* *
* Copyright (C) Trifon Trifonov. *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trifon Trifonov (trifonnt@users.sourceforge.net) *
* *
* Sponsors: *
* - E-evolution (http://www.e-evolution.com/) *
**********************************************************************/
package org.adempiere.server.rpl.imp;
import java.util.Properties;
import org.adempiere.server.rpl.IImportProcessor;
import org.eevolution.model.MIMPProcessor;
import org.eevolution.model.X_IMP_ProcessorParameter;
import org.compiere.server.ReplicationProcessor;
import org.compiere.util.CLogger;
/**
* Aim of this class is to import records from JMS Server.
*
* @author Trifon N. Trifonov
* @version $Id:$
*/
public class TopicImportProcessor implements IImportProcessor {
/** Logger */
protected CLogger log = CLogger.getCLogger (TopicImportProcessor.class);
/**
* Topic Listener
*/
private TopicListener topicListener = null;
public void process(Properties ctx, ReplicationProcessor replicationProcessor, String trxName)
throws Exception {
log.info("replicationProcessor = " + replicationProcessor);
log.info("replicationProcessor.getMImportProcessor() = " + replicationProcessor.getMImportProcessor());
MIMPProcessor impProcessor = replicationProcessor.getMImportProcessor();
X_IMP_ProcessorParameter[] processorParameters = impProcessor.getIMP_ProcessorParameters(trxName);
String host = impProcessor.getHost();
int port = impProcessor.getPort();
String account = impProcessor.getAccount();
String password = impProcessor.getPasswordInfo();
// mandatory parameters!
String topicName = null;
String protocol = null;
boolean isDurableSubscription = true;
String subscriptionName = null;
String options = null;
String clientID = null;
if (processorParameters != null && processorParameters.length > 0) {
for (int i = 0; i < processorParameters.length; i++) {
log.info("ProcesParameter Value = " + processorParameters[i].getValue());
log.info("ProcesParameter ParameterValue = " + processorParameters[i].getParameterValue());
if (processorParameters[i].getValue().equals("topicName")) {
topicName = processorParameters[i].getParameterValue();
} else if (processorParameters[i].getValue().equals("protocol")) {
protocol = processorParameters[i].getParameterValue();
} else if (processorParameters[i].getValue().equals("isDurableSubscription")) {
isDurableSubscription = Boolean.parseBoolean( processorParameters[i].getParameterValue() );
} else if (processorParameters[i].getValue().equals("subscriptionName")) {
subscriptionName = processorParameters[i].getParameterValue();
} else if (processorParameters[i].getValue().equals("clientID")) {
clientID = processorParameters[i].getParameterValue();
} else {
// Some other mandatory parameter here
}
}
}
if (topicName == null || topicName.length() == 0) {
throw new Exception("Missing "+X_IMP_ProcessorParameter.Table_Name+" with key 'topicName'!");
}
if (protocol == null || protocol.length() == 0) {
throw new Exception("Missing "+X_IMP_ProcessorParameter.Table_Name+" with key 'protocol'!");
}
if (isDurableSubscription && subscriptionName == null || subscriptionName.length() == 0) {
throw new Exception("Missing "+X_IMP_ProcessorParameter.Table_Name+" with key 'subscriptionName'!");
}
if (clientID == null || clientID.length() == 0) {
throw new Exception("Missing "+X_IMP_ProcessorParameter.Table_Name+" with key 'clientID'!");
}
topicListener = new TopicListener(ctx, replicationProcessor, protocol, host, port
, isDurableSubscription, subscriptionName, topicName, clientID
, account, password, options, trxName);
topicListener.run();
log.info("Started topicListener = " + topicListener);
}
public void stop() throws Exception {
if ( topicListener != null ) {
topicListener.stop();
log.info("Stoped topicListener." );
}
}
}

View File

@ -0,0 +1,278 @@
/**********************************************************************
* This file is part of Adempiere ERP Bazaar *
* http://www.adempiere.org *
* *
* Copyright (C) Trifon Trifonov. *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trifon Trifonov (trifonnt@users.sourceforge.net) *
* *
* Sponsors: *
* - E-evolution (http://www.e-evolution.com/) *
**********************************************************************/
package org.adempiere.server.rpl.imp;
import java.util.Properties;
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import org.adempiere.server.rpl.XMLHelper;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.eevolution.model.MIMPProcessorLog;
import org.compiere.server.ReplicationProcessor;
import org.compiere.util.CLogger;
import org.w3c.dom.Document;
/**
* Listen for JMS Messages
* @author Trifon N. Trifonov
*/
public class TopicListener implements MessageListener {
/**
* Connection to JMS Server
*/
private Connection conn;
/**
* JMS Session
*/
private Session session;
/**
* JMS Topic
*/
private Topic topic;
// private String url="tcp://localhost:61616?jms.dispatchAsync=true&jms.useAsyncSend=true&jms.optimizeAcknowledge=true&jms.disableTimeStampsByDefault=true&jms.optimizedMessageDispatch=true&wireFormat.cacheEnabled=false&wireFormat.tightEncodingEnabled=false";
private String url="tcp://localhost:61616";
/**
* host where JMS server is running
*/
private String host = "localhost";
/**
* port of JMS Server
*/
private int port = 61616;
/**
* Network protocol
*/
private String protocol = "tcp";
/**
* Context
*/
private Properties ctx = null;
/**
* Transaction name
*/
private String trxName = null;
/**
* Topic Name
*/
private String topicName = null;
/**
* Replication processor
*/
private ReplicationProcessor replicationProcessor = null;
/** Logger */
protected CLogger log = CLogger.getCLogger (TopicListener.class);
/**
* Is Durable Subscription
*/
private boolean isDurableSubscription = false;
/**
* Subscription Name
*/
private String subscriptionName = null;
/**
* JMS Connection ClientID
*/
private String clientID = null;
/**
* String User Name
*/
private String userName = null;
/**
* Password
*/
private String password = null;
/**
*
*/
public TopicListener(Properties ctx, ReplicationProcessor replicationProcessor, String protocol, String host, int port
, boolean isDurableSubscription, String subscriptionName, String topicName
, String clientID, String userName, String password
, String options, String trxName) {
if ( host != null && !host.equals("") ) {
this.host = host;
}
if ( port > 0 ) {
this.port = port;
}
if ( protocol != null && !protocol.equals("") ) {
this.protocol = protocol;
}
this.topicName = topicName;
this.setUrl(this.protocol + "://" + this.host + ":" + this.port);
this.ctx = ctx;
this.trxName = trxName;
this.replicationProcessor = replicationProcessor;
this.isDurableSubscription = isDurableSubscription;
this.subscriptionName = subscriptionName;
this.clientID = clientID;
this.userName = userName;
this.password = password;
}
public void run() throws JMSException {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory( url );
log.finest("ActiveMQConnectionFactory = " + factory);
if (userName !=null && password != null) {
conn = factory.createConnection(userName, password);
} else {
conn = factory.createConnection();
}
log.finest("conn = " + conn );
conn.setClientID( clientID );
session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); // TODO - could be parameter
log.finest("session = " + session );
log.finest("topicName = " + topicName );
log.finest("subscriptionName = " + subscriptionName);
topic = session.createTopic( topicName );
log.finest("topic = " + topic );
MessageConsumer consumer = null;
if (isDurableSubscription) {
// http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.pmc.express.doc/tasks/tjn0012_.html
// The subscriptionName assigned to a durable subscription must be unique within a given client ID.
consumer = session.createDurableSubscriber( topic, subscriptionName );
} else {
consumer = session.createConsumer( topic );
}
log.finest("consumer = " + consumer );
consumer.setMessageListener( this );
conn.start();
log.finest("Waiting for JMS messages...");
//
MIMPProcessorLog pLog = new MIMPProcessorLog(replicationProcessor.getMImportProcessor(), "Connected to JMS Server. Waiting for messages!");
StringBuffer logReference = new StringBuffer("topicName = ").append(topicName)
.append(", subscriptionName = ").append( subscriptionName )
;
pLog.setReference( logReference.toString() );
boolean resultSave = pLog.save();
log.finest("Result Save = " + resultSave);
}
/**
*
*/
public void onMessage(Message message) {
if ( message instanceof TextMessage ) {
try {
TextMessage txtMessage = (TextMessage) message;
String text = txtMessage.getText();
//log.finest("Received message: \n" + text );
Document documentToBeImported = XMLHelper.createDocumentFromString( text );
StringBuffer result = new StringBuffer();
ImportHelper impHelper = new ImportHelper( ctx );
impHelper.importXMLDocument(result, documentToBeImported, trxName );
//
MIMPProcessorLog pLog = new MIMPProcessorLog(replicationProcessor.getMImportProcessor(), "Imported Document!");
//pLog.setReference("topicName = " + topicName );
if (text.length() > 2000 ) {
pLog.setTextMsg( text.substring(0, 1999) );
} else {
pLog.setTextMsg( text);
}
boolean resultSave = pLog.save();
log.finest("Result Save = " + resultSave);
} catch (Exception e) {
replicationProcessor.setProcessRunning(false);
e.printStackTrace();
}
} else {
log.finest("Received NO TEXT Message: " );
// Received non text message!!!
}
}
public void setUrl(String url) {
this.url = url;
}
public void stop() throws JMSException {
// Close JMS Connection
log.finest("Closing JMS Connection!");
conn.close();
}
}

View File

@ -0,0 +1,168 @@
/**********************************************************************
* This file is part of Adempiere ERP Bazaar *
* http://www.adempiere.org *
* *
* Copyright (C) Trifon Trifonov. *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trifon Trifonov (trifonnt@users.sourceforge.net) *
* *
* Sponsors: *
* - E-evolution (http://www.e-evolution.com/) *
**********************************************************************/
package org.compiere.server;
import java.sql.Timestamp;
import org.adempiere.server.rpl.IImportProcessor;
import org.compiere.model.MClient;
import org.eevolution.model.MIMPProcessor;
import org.eevolution.model.MIMPProcessorLog;
import org.eevolution.model.X_IMP_Processor_Type;
import org.compiere.util.TimeUtil;
/**
*
* @author Trifon N. Trifonov
*
*/
public class ReplicationProcessor extends AdempiereServer {
/** Last Summary */
private StringBuffer m_summary = new StringBuffer();
/** Client info */
private MClient m_client = null;
private MIMPProcessor mImportProcessor = null;
/**
* flag showing if process is working!
*/
private boolean isProcessRunning = false;
protected ReplicationProcessor(MIMPProcessor model, int initialNap) {
super (model, initialNap);
mImportProcessor = model;
m_client = MClient.get(mImportProcessor.getCtx(), mImportProcessor.getAD_Client_ID());
}
protected ReplicationProcessor(MIMPProcessor model) {
super (model, 30);
mImportProcessor = model;
m_client = MClient.get(mImportProcessor.getCtx(), mImportProcessor.getAD_Client_ID());
}
@SuppressWarnings("unchecked")
@Override
protected void doWork() {
if (isProcessRunning) {
// process is already started successfully!
} else {
// process is not started!
m_summary = new StringBuffer();
String trxName = mImportProcessor.get_TrxName();
if ( trxName == null || "".equals(trxName) ) {
// trxName = "ImportProcessor-" + System.currentTimeMillis();
}
log.fine("trxName = " + trxName);
log.fine("ImportProcessor = " + mImportProcessor);
int IMP_ProcessorType_ID = 0;
IMP_ProcessorType_ID = mImportProcessor.getIMP_Processor_Type_ID();
X_IMP_Processor_Type impProcessor_Type = new X_IMP_Processor_Type(mImportProcessor.getCtx(), IMP_ProcessorType_ID, trxName );
log.fine("impProcessor_Type = " + impProcessor_Type); // TODO --- REMOVE
String javaClass = impProcessor_Type.getJavaClass();
IImportProcessor importProcessor = null;
try {
Class clazz = Class.forName(javaClass);
importProcessor = (IImportProcessor)clazz.newInstance();
importProcessor.process(mImportProcessor.getCtx(), this, trxName );
} catch (Exception e) {
isProcessRunning = false;
log.fine("ReplicationProcessor caught an exception !!!" );
e.printStackTrace();
log.severe( e.getMessage() );
MIMPProcessorLog pLog = new MIMPProcessorLog(mImportProcessor, e.getMessage() );
pLog.setReference("#" + String.valueOf(p_runCount) + " - " + TimeUtil.formatElapsed(new Timestamp(p_startWork)));
boolean resultSave = pLog.save();
try {
importProcessor.stop();
} catch (Exception e1) {
e1.printStackTrace();
MIMPProcessorLog pLog2 = new MIMPProcessorLog(mImportProcessor, e1.getMessage() );
boolean resultSave2 = pLog2.save();
}
}
//
int no = mImportProcessor.deleteLog();
m_summary.append("Logs Records deleted=").append(no).append("; ");
//
MIMPProcessorLog pLog = new MIMPProcessorLog(mImportProcessor, m_summary.toString());
pLog.setReference("#" + String.valueOf(p_runCount) + " - " + TimeUtil.formatElapsed(new Timestamp(p_startWork)));
boolean resultSave = pLog.save();
}
}
@Override
public String getServerInfo()
{
return "#" + p_runCount + " - Last=" + m_summary.toString();
}
/**
* @return the isProcessRunning
*/
public boolean isProcessRunning() {
return isProcessRunning;
}
/**
* @param isProcessRunning the isProcessRunning to set
*/
public void setProcessRunning(boolean isProcessRunning) {
this.isProcessRunning = isProcessRunning;
}
/**
* @return the mImportProcessor
*/
public MIMPProcessor getMImportProcessor() {
return mImportProcessor;
}
/**
* @param importProcessor the mImportProcessor to set
*/
public void setMImportProcessor(MIMPProcessor importProcessor) {
mImportProcessor = importProcessor;
}
}