*/
public void cloneContacts(String sContactsFilter, String sTargetWorkArea, String sNewOwnerId)
throws SQLException,IOException,InstantiationException,IllegalAccessException,
IOException, ClassNotFoundException, org.xml.sax.SAXException {
ListIterator oIter;
Statement oStmt= null;
ResultSet oRSet= null;
Object[] oPKOr = new Object[1];
Object[] oPKTr = new Object[1];
if (DebugFile.trace) {
DebugFile.writeln("Begin ModelManager.cloneContacts(" + sContactsFilter + "," + sTargetWorkArea + "," + sNewOwnerId + ")");
DebugFile.incIdent();
}
if (null==oConn)
throw new IllegalStateException("Not connected to database");
JDCConnection oJDC;
// Get a JDC Connection Wrapper
if (oConn instanceof JDCConnection)
oJDC = (JDCConnection) oConn;
else
oJDC = new JDCConnection(oConn, null);
String sContactXml = null;
String sCompanyXml = null;
if (oJDC.getPool()==null) {
switch (oJDC.getDataBaseProduct()) {
case JDCConnection.DBMS_MSSQL:
sContactXml = getResourceAsString("scripts/mssql/contact_clon.xml", sEncoding);
sCompanyXml = getResourceAsString("scripts/mssql/company_clon.xml", sEncoding);
break;
case JDCConnection.DBMS_MYSQL:
sContactXml = getResourceAsString("scripts/mysql/contact_clon.xml", sEncoding);
sCompanyXml = getResourceAsString("scripts/mysql/company_clon.xml", sEncoding);
break;
case JDCConnection.DBMS_ORACLE:
sContactXml = getResourceAsString("scripts/oracle/contact_clon.xml", sEncoding);
sCompanyXml = getResourceAsString("scripts/oracle/company_clon.xml", sEncoding);
break;
case JDCConnection.DBMS_POSTGRESQL:
sContactXml = getResourceAsString("scripts/postgresql/contact_clon.xml", sEncoding);
sCompanyXml = getResourceAsString("scripts/postgresql/company_clon.xml", sEncoding);
break;
default:
if (DebugFile.trace) {
DebugFile.writeln("Unsupported database");
DebugFile.decIdent();
}
throw new SQLException ("Unsupported database");
}
}
else {
FileSystemWorkArea oFsw = new FileSystemWorkArea(((DBBind)oJDC.getPool().getDatabaseBinding()).getProperties());
try {
switch (oJDC.getDataBaseProduct()) {
case JDCConnection.DBMS_MSSQL:
sContactXml = oFsw.readstorfilestr("datacopy/mssql/contact_clon.xml", sEncoding);
sCompanyXml = oFsw.readstorfilestr("datacopy/mssql/company_clon.xml", sEncoding);
break;
case JDCConnection.DBMS_MYSQL:
sContactXml = oFsw.readstorfilestr("datacopy/mysql/contact_clon.xml", sEncoding);
sCompanyXml = oFsw.readstorfilestr("datacopy/mysql/company_clon.xml", sEncoding);
break;
case JDCConnection.DBMS_ORACLE:
sContactXml = oFsw.readstorfilestr("datacopy/oracle/contact_clon.xml", sEncoding);
sCompanyXml = oFsw.readstorfilestr("datacopy/oracle/company_clon.xml", sEncoding);
break;
case JDCConnection.DBMS_POSTGRESQL:
sContactXml = oFsw.readstorfilestr("datacopy/postgresql/contact_clon.xml", sEncoding);
sCompanyXml = oFsw.readstorfilestr("datacopy/postgresql/company_clon.xml", sEncoding);
break;
default:
if (DebugFile.trace) {
DebugFile.writeln("Unsupported database "+oJDC.getMetaData().getDatabaseProductName());
DebugFile.decIdent();
}
throw new SQLException ("Unsupported database "+oJDC.getMetaData().getDatabaseProductName());
}
} catch (com.enterprisedt.net.ftp.FTPException neverthrown) { }
} // fi
Properties oParams = new Properties();
oParams.put("IdWorkArea", sTargetWorkArea);
oParams.put("IdOwner", sNewOwnerId==null ? "null" : sNewOwnerId);
DataStruct oCS = new DataStruct();
DataStruct oDS = new DataStruct();
oCS.setOriginConnection(oConn);
oCS.setTargetConnection(oConn);
oCS.setAutoCommit(false);
oDS.setOriginConnection(oConn);
oDS.setTargetConnection(oConn);
oDS.setAutoCommit(false);
oCS.parse (sCompanyXml, oParams);
oDS.parse (sContactXml, oParams);
try {
LinkedList<String> oContacts = new LinkedList<String>();
LinkedList<String> oCompanies = new LinkedList<String>();
oStmt = oConn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
oRSet = oStmt.executeQuery("SELECT gu_contact,gu_company,gu_workarea FROM k_contacts WHERE "+sContactsFilter);
while (oRSet.next()) {
oContacts.add(oRSet.getString(1));
String sCompany = oRSet.getString(2);
if (!oRSet.wasNull()) {
if (!sTargetWorkArea.equals(oRSet.getString(3))) {
oCompanies.add(sCompany);
}
}
} // wend
oRSet.close();
oRSet=null;
oStmt.close();
oStmt=null;
if (oCompanies.size()>0) {
oIter = oCompanies.listIterator();
while (oIter.hasNext()) {
oPKOr[0] = oIter.next();
oPKTr[0] = Gadgets.generateUUID();
oCS.insert(oPKOr, oPKTr, 1);
oCS.commit();
if (null!=oStrLog) oStrLog.append("New Company "+oPKTr[0]+" created successfully\n");
} // wend
} // fi
oIter = oContacts.listIterator();
while (oIter.hasNext()) {
oPKOr[0] = oIter.next();
oPKTr[0] = Gadgets.generateUUID();
oDS.insert(oPKOr, oPKTr, 1);
oDS.commit();
if (null!=oStrLog) oStrLog.append("New Contact "+oPKTr[0]+" created successfully\n");
} // wend