version 1.60, 2004/07/09 10:26:39
|
version 1.64, 2004/07/28 11:21:01
|
Line 25 import java.io.OutputStreamWriter;
|
Line 25 import java.io.OutputStreamWriter;
|
import java.io.PrintStream; |
import java.io.PrintStream; |
import java.io.UnsupportedEncodingException; |
import java.io.UnsupportedEncodingException; |
import java.net.URL; |
import java.net.URL; |
import java.net.URLConnection; |
|
import java.sql.PreparedStatement; |
import java.sql.PreparedStatement; |
import java.sql.SQLException; |
import java.sql.SQLException; |
import java.sql.Statement; |
import java.sql.Statement; |
Line 572 class Convert
|
Line 571 class Convert
|
// System.exit(0); |
// System.exit(0); |
|
|
// determine destTableName from createStatement or from source table name |
// determine destTableName from createStatement or from source table name |
if (!creates.get(tbIndex).equals("")) |
ConversionProperties prop= getFieldNamesAndDestTableName(creates.get(tbIndex).toString(),query,names.get(tbIndex).toString()); |
{ |
destTableName = prop.destTableName; |
String create = creates.get(tbIndex).toString().toLowerCase(); |
fieldNames = prop.fieldNames; |
int fromIndex = create.indexOf("table") + 5; |
|
int toIndex = create.indexOf("("); |
|
int endIndex = create.indexOf(")", toIndex); |
|
|
|
destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim(); |
|
System.out.println("destTable " + destTableName); |
|
// retrieve field_names from select statement |
|
if (query.indexOf("*") < 0) |
|
{ |
|
int selectEndIndex = query.indexOf("from"); |
|
StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ","); |
|
int numFields = tokenizer.countTokens(); |
|
fieldNames = new String[numFields]; |
|
int fieldIndex = 0; |
|
while (tokenizer.hasMoreTokens()) |
|
{ |
|
String fieldName = tokenizer.nextToken().trim(); |
|
fieldNames[fieldIndex] = convertText(fieldName); |
|
System.out.println(fieldNames[fieldIndex]); |
|
fieldIndex++; |
|
} |
|
|
|
} else |
|
{ |
|
// use create statement for field names |
|
StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex), ","); |
|
int numFields = tokenizer.countTokens(); |
|
fieldNames = new String[numFields]; |
|
int fieldIndex = 0; |
|
while (tokenizer.hasMoreTokens()) |
|
{ |
|
String fieldName = tokenizer.nextToken().trim(); |
|
int index = fieldName.lastIndexOf(" "); |
|
fieldNames[fieldIndex] = fieldName.substring(0, index); |
|
System.out.println(fieldNames[fieldIndex]); |
|
fieldIndex++; |
|
} |
|
} |
|
} else |
|
{ |
|
destTableName = convertText(names.get(tbIndex).toString()); |
|
|
|
// retrieve field_names from select statement |
|
if (query.indexOf("*") < 0) |
|
{ |
|
int selectEndIndex = query.indexOf("from"); |
|
StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ","); |
|
int numFields = tokenizer.countTokens(); |
|
fieldNames = new String[numFields]; |
|
int fieldIndex = 0; |
|
while (tokenizer.hasMoreTokens()) |
|
{ |
|
String fieldName = tokenizer.nextToken().trim(); |
|
fieldNames[fieldIndex] = convertText(fieldName); |
|
// System.out.println("field "+ fieldNames[fieldIndex]); |
|
fieldIndex++; |
|
} |
|
|
|
} else |
|
{ |
|
Vector fieldNamesVec = bean.getColumnNames(); |
|
fieldNames = new String[fieldNamesVec.size()]; |
|
int fieldIndex = -1; |
|
for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();) |
|
{ |
|
String element = (String) iter.next(); |
|
fieldNames[++fieldIndex] = bean.getQC() + convertText(element) + bean.getQC(); |
|
// System.out.println("field " + fieldNames[fieldIndex]); |
|
} |
|
} |
|
} |
|
if (mode == Convert.DataBase.CONVERT_MODE) |
if (mode == Convert.DataBase.CONVERT_MODE) |
{ |
{ |
|
|
Line 1262 class Convert
|
Line 1190 class Convert
|
mode = DataBase.UPDATE_MODE; |
mode = DataBase.UPDATE_MODE; |
else if (modeString.equals("delete")) |
else if (modeString.equals("delete")) |
mode = DataBase.DELETE_MODE; |
mode = DataBase.DELETE_MODE; |
|
else if (modeString.equals("synchronize")) |
|
mode = DataBase.SYNCHRONIZE_MODE; |
|
|
// if(node3!=null) |
// if(node3!=null) |
// System.out.println(node3.name); |
// System.out.println(node3.name); |
Line 1330 class Convert
|
Line 1260 class Convert
|
for (Iterator iter = databases.iterator(); iter.hasNext();) |
for (Iterator iter = databases.iterator(); iter.hasNext();) |
{ |
{ |
DataBase db = (DataBase) iter.next(); |
DataBase db = (DataBase) iter.next(); |
if (mode != DataBase.UPDATE_MODE) |
if (mode == DataBase.CONVERT_MODE || mode == DataBase.APPEND_MODE) |
convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter); |
convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids, mode, db.delimiter); |
else |
else |
|
if (mode == DataBase.UPDATE_MODE) |
update(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode); |
update(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode); |
|
else if(mode==DataBase.SYNCHRONIZE_MODE) |
|
{ |
|
user =bean.user; |
|
passwd =bean.passwd; |
|
userDest =database.user; |
|
passwdDest =database.passwd; |
|
|
|
synchronize(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode); |
|
} |
} |
} |
// printContents(node3); |
// printContents(node3); |
// FM2SQL.fmInstance=new FM2SQL(); |
// FM2SQL.fmInstance=new FM2SQL(); |
Line 1594 class Convert
|
Line 1533 class Convert
|
e.printStackTrace(); |
e.printStackTrace(); |
} |
} |
} |
} |
|
/** |
|
* Helper class for Conversion etc |
|
* Holds the some data |
|
* @author rogo |
|
* |
|
*/ |
|
|
|
public static class ConversionProperties |
|
{ |
|
String destTableName; |
|
String[] fieldNames ; |
|
public ConversionProperties() |
|
{ |
|
} |
|
public ConversionProperties(String destTableName, String[] fieldNames) |
|
{ |
|
this.destTableName = destTableName; |
|
this.fieldNames = fieldNames; |
|
|
|
} |
|
|
|
} |
/** |
/** |
* Helper class for XML-File parsing |
* Helper class for XML-File parsing |
* Holds the parsed data |
* Holds the parsed data |
Line 1616 class Convert
|
Line 1576 class Convert
|
final static int APPEND_MODE = 2; |
final static int APPEND_MODE = 2; |
final static int UPDATE_MODE = 3; |
final static int UPDATE_MODE = 3; |
final static int DELETE_MODE = 4; |
final static int DELETE_MODE = 4; |
|
final static int SYNCHRONIZE_MODE = 5; |
|
|
int mode = -1; |
int mode = -1; |
|
|
Line 1934 class Convert
|
Line 1895 class Convert
|
// TODO using id based algorithm |
// TODO using id based algorithm |
public static void synchronize(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception |
public static void synchronize(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception |
{ |
{ |
|
System.out.println(" bin in synchronize!!!"); |
FM2SQL.ProgressDialog dialog = null; |
FM2SQL.ProgressDialog dialog = null; |
if (FM2SQL.fmInstance != null) |
if (FM2SQL.fmInstance != null) |
{ |
{ |
dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean); |
dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean); |
dialog.setTitle("Conversion running ..."); |
dialog.setTitle("Synchronize running ..."); |
dialog.title.setText("Getting table data ..."); |
dialog.title.setText("Getting table data ..."); |
dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2); |
dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2); |
dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); |
dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); |
Line 1979 class Convert
|
Line 1941 class Convert
|
String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString(); |
String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString(); |
query = (selects != null) ? selects.get(tbIndex).toString() : query; |
query = (selects != null) ? selects.get(tbIndex).toString() : query; |
//if vectors[1].get(i) != null) |
//if vectors[1].get(i) != null) |
if (layout != "") |
if (!layout.equals("")) |
{ |
{ |
layout = " layout " + bean.getQC() + layout + bean.getQC(); |
layout = " layout " + bean.getQC() + layout + bean.getQC(); |
String name = names.get(tbIndex).toString(); |
String name = names.get(tbIndex).toString(); |
Line 1989 class Convert
|
Line 1951 class Convert
|
System.out.println("added layout " + query); |
System.out.println("added layout " + query); |
|
|
} |
} |
|
if(dialog!=null) { |
dialog.title.setText("Getting table data ..."); |
dialog.title.setText("Getting table data ..."); |
dialog.table.setText(names.get(tbIndex).toString()); |
dialog.table.setText(names.get(tbIndex).toString()); |
dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size()); |
dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size()); |
dialog.show(); |
dialog.show(); |
|
} |
bean.getConnection(); |
bean.getConnection(); |
bean.makeQuery(query, 50); |
bean.makeQuery(query, 50); |
idField = ids.get(tbIndex).toString(); |
idField = ids.get(tbIndex).toString(); |
Line 2049 class Convert
|
Line 2013 class Convert
|
// Deletion will work this way |
// Deletion will work this way |
Vector deleted = new Vector(vec); |
Vector deleted = new Vector(vec); |
Vector linesToDelete = new Vector(vecDest); |
Vector linesToDelete = new Vector(vecDest); |
|
|
|
TreeSet linesToAppend = new TreeSet(vec); |
|
// remove all lines that are already in dest database |
|
linesToAppend.removeAll(vecDest); |
// remove all lines that should not be deleted |
// remove all lines that should not be deleted |
linesToDelete.removeAll(deleted); |
linesToDelete.removeAll(deleted); |
|
System.out.println("linesToAppend "+linesToAppend+" "+vecDest+" "+destTableName); |
|
System.out.println("linesToDelete "+linesToDelete+" "+vecDest+" "+destTableName); |
|
// prepare new query for next chunk |
|
if (query.indexOf("where") > 0) |
|
tempQuery = query + " and " + tempID + ">='" + vec.firstElement() + "' and "+tempID + "<='" + vec.lastElement() + "' order by "+tempID; |
|
else |
|
tempQuery = query + " where " + tempID + ">='" + vec.firstElement() + "' and "+tempID + "<='" + vec.lastElement() + "'";// order by "+tempID; |
|
System.out.println("tempQuery is now "+tempQuery+" order by "+tempID); |
|
// bean.makeQuery(tempQuery,vec.size()); |
|
Vector[] vectors=bean.getQueryData(tempQuery,vec.size()); |
|
int idIndex = vectors[1].indexOf(idField); |
|
for (Iterator iter = vectors[0].iterator(); iter.hasNext();) |
|
{ |
|
Vector line = (Vector) iter.next(); |
|
System.out.println("line "+linesToAppend.contains(line.get(idIndex))); |
|
} |
|
System.out.println( ); |
// System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size()); |
// System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size()); |
/// @TODO complete delete task remove query show lines to be deleted let user choose if he wants that |
/// @TODO complete delete task remove query show lines to be deleted let user choose if he wants that |
System.out.println("number of lines to be deleted " + linesToDelete.size()); |
System.out.println("number of lines to be deleted " + linesToDelete.size()); |
deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls); |
deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls); |
|
System.out.println("deltaID "+deltaID); |
|
System.exit(0); |
|
|
beanDest.setConnection(destination); |
beanDest.setConnection(destination); |
|
|
Statement stm = beanDest.getConnection().createStatement(); |
Statement stm = beanDest.getConnection().createStatement(); |
Line 2645 class Convert
|
Line 2633 class Convert
|
} |
} |
return buf.toString(); |
return buf.toString(); |
} |
} |
|
public static ConversionProperties getFieldNamesAndDestTableName(String create,String query,String tableName ) |
|
{ |
|
String[] fieldNames = null; |
|
String destTableName = null; |
|
// determine destTableName from createStatement or from source table name |
|
if (!create.equals("")) |
|
{ |
|
int fromIndex = create.toLowerCase().indexOf("table") + 5; |
|
int toIndex = create.indexOf("("); |
|
int endIndex = create.indexOf(")", toIndex); |
|
|
|
destTableName = create.substring(fromIndex, toIndex).replaceAll(beanDest.getQC(), "").trim(); |
|
System.out.println("destTable " + destTableName); |
|
// retrieve field_names from select statement |
|
// TODO problem with different fieldNames in create statement will overwrite them |
|
if (query.indexOf("*") < 0) |
|
{ |
|
int selectEndIndex = query.indexOf("from"); |
|
StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ","); |
|
int numFields = tokenizer.countTokens(); |
|
fieldNames = new String[numFields]; |
|
int fieldIndex = 0; |
|
while (tokenizer.hasMoreTokens()) |
|
{ |
|
String fieldName = tokenizer.nextToken().trim(); |
|
fieldNames[fieldIndex] = convertText(fieldName); |
|
System.out.println(fieldNames[fieldIndex]); |
|
fieldIndex++; |
|
} |
|
|
|
} else |
|
{ |
|
// use create statement for field names |
|
StringTokenizer tokenizer = new StringTokenizer(create.substring(toIndex + 1, endIndex), ","); |
|
int numFields = tokenizer.countTokens(); |
|
fieldNames = new String[numFields]; |
|
int fieldIndex = 0; |
|
while (tokenizer.hasMoreTokens()) |
|
{ |
|
String fieldName = tokenizer.nextToken().trim(); |
|
int index = fieldName.lastIndexOf(" "); |
|
fieldNames[fieldIndex] = fieldName.substring(0, index); |
|
System.out.println(fieldNames[fieldIndex]); |
|
fieldIndex++; |
|
} |
|
} |
|
} else |
|
{ |
|
destTableName = convertText(tableName); |
|
|
|
// retrieve field_names from select statement |
|
if (query.indexOf("*") < 0) |
|
{ |
|
int selectEndIndex = query.indexOf("from"); |
|
StringTokenizer tokenizer = new StringTokenizer(query.substring(6, selectEndIndex), ","); |
|
int numFields = tokenizer.countTokens(); |
|
fieldNames = new String[numFields]; |
|
int fieldIndex = 0; |
|
while (tokenizer.hasMoreTokens()) |
|
{ |
|
String fieldName = tokenizer.nextToken().trim(); |
|
fieldNames[fieldIndex] = convertText(fieldName); |
|
// System.out.println("field "+ fieldNames[fieldIndex]); |
|
fieldIndex++; |
|
} |
|
|
|
} else |
|
{ |
|
Vector fieldNamesVec = bean.getColumnNames(); |
|
fieldNames = new String[fieldNamesVec.size()]; |
|
int fieldIndex = -1; |
|
for (Iterator iter = fieldNamesVec.iterator(); iter.hasNext();) |
|
{ |
|
String element = (String) iter.next(); |
|
fieldNames[++fieldIndex] = bean.getQC() + convertText(element) + bean.getQC(); |
|
// System.out.println("field " + fieldNames[fieldIndex]); |
|
} |
|
} |
|
} |
|
return new ConversionProperties(destTableName,fieldNames); |
|
} |
} |
} |
|
|