version 1.50, 2004/03/18 09:31:01
|
version 1.55, 2004/06/01 10:29:48
|
Line 1
|
Line 1
|
|
/* |
|
* Convert.java -- Converter class - Filemaker to SQL Converter |
|
* Copyright (C) 2003 Robert Gordesch (rogo@mpiwg-berlin.mpg.de) |
|
* 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. Please read license.txt for the full details. A copy of |
|
* the GPL may be found at http://www.gnu.org/copyleft/lgpl.html 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., 59 Temple |
|
* Place, Suite 330, Boston, MA 02111-1307 USA Created on 15.09.2003 by |
|
* rogo |
|
*/ |
|
|
import java.util.*; |
import java.util.*; |
import java.sql.*; |
import java.sql.*; |
import java.awt.Cursor; |
import java.awt.Cursor; |
Line 64 class Convert
|
Line 78 class Convert
|
bean = source; |
bean = source; |
beanDest = destination; |
beanDest = destination; |
convert(null,null,names,layouts,selects,creates,ids,mode,delimiter); |
convert(null,null,names,layouts,selects,creates,ids,mode,delimiter); |
if(true) return; |
if (true) |
|
return; |
StringBuffer command = null; |
StringBuffer command = null; |
try |
try |
{ |
{ |
Line 249 class Convert
|
Line 264 class Convert
|
FM2SQL.ProgressDialog dialog = null; |
FM2SQL.ProgressDialog dialog = null; |
if (FM2SQL.fmInstance != null) |
if (FM2SQL.fmInstance != null) |
{ |
{ |
dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance); |
dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean); |
dialog.setTitle("Conversion running ..."); |
dialog.setTitle("Conversion 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); |
Line 448 class Convert
|
Line 463 class Convert
|
* @throws Exception |
* @throws Exception |
*/ |
*/ |
|
|
|
|
public static void convert(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode,String delimiter) throws Exception |
public static void convert(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode,String delimiter) throws Exception |
{ |
{ |
|
|
Line 456 class Convert
|
Line 470 class Convert
|
|
|
if (FM2SQL.fmInstance != null) |
if (FM2SQL.fmInstance != null) |
{ |
{ |
dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance); |
dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean); |
dialog.setTitle("Conversion running ..."); |
dialog.setTitle("Conversion 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); |
Line 469 class Convert
|
Line 483 class Convert
|
int deltaID = 1; |
int deltaID = 1; |
String idField = ""; |
String idField = ""; |
String destTableName = ""; |
String destTableName = ""; |
|
String[] fieldNames = null; |
if (source != null && destination != null) |
if (source != null && destination != null) |
{ |
{ |
// setting user and passwd |
// setting user and passwd |
Line 549 class Convert
|
Line 564 class Convert
|
String create =creates.get(tbIndex).toString().toLowerCase(); |
String create =creates.get(tbIndex).toString().toLowerCase(); |
int fromIndex = create.indexOf("table")+5; |
int fromIndex = create.indexOf("table")+5; |
int toIndex = create.indexOf("("); |
int toIndex = create.indexOf("("); |
|
int endIndex = create.indexOf(")", toIndex); |
|
|
destTableName = create.substring(fromIndex,toIndex).replaceAll(beanDest.getQC(),"").trim(); |
destTableName = create.substring(fromIndex,toIndex).replaceAll(beanDest.getQC(),"").trim(); |
System.out.println("destTable "+destTableName); |
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 |
} 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()); |
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 630 class Convert
|
Line 708 class Convert
|
command.append(beanDest.getQC()); |
command.append(beanDest.getQC()); |
command.append(destTableName); //convertText((String) names.get(tbIndex))); |
command.append(destTableName); //convertText((String) names.get(tbIndex))); |
command.append(beanDest.getQC()); |
command.append(beanDest.getQC()); |
|
command.append(" ("); |
|
for (int i = 0; i < fieldNames.length; i++) |
|
{ |
|
command.append(fieldNames[i]); |
|
if (i < fieldNames.length - 1) |
|
command.append(","); |
|
} |
|
command.append(") "); |
|
|
command.append(" values ( "); |
command.append(" values ( "); |
|
|
Line 654 class Convert
|
Line 740 class Convert
|
++counter; |
++counter; |
if (counter == 0&&dialog!=null) |
if (counter == 0&&dialog!=null) |
dialog.title.setText("Check if data is available"); |
dialog.title.setText("Check if data is available"); |
else |
else if (dialog != null) |
if(dialog!=null) |
|
dialog.title.setText("Check if more data is available"); |
dialog.title.setText("Check if more data is available"); |
myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits); |
myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits); |
if (myIds.isEmpty()) |
if (myIds.isEmpty()) |
Line 810 class Convert
|
Line 895 class Convert
|
for (int k = 0; k < row.size(); ++k) |
for (int k = 0; k < row.size(); ++k) |
{ |
{ |
obj = row.get(k); |
obj = row.get(k); |
if (obj instanceof ArrayList) |
|
if (obj instanceof ArrayList) |
if (obj instanceof ArrayList) |
obj = formatFileMakerArray((List) obj,delimiter); |
obj = formatFileMakerArray((List) obj,delimiter); |
|
|
String str = (obj == null) ? "NULL" : obj.toString(); |
String str = (obj == null) ? "NULL" : obj.toString(); |
if (!str.equals("NULL")) |
if (obj instanceof Double) |
|
{ |
|
pstm.setDouble(k + 1, ((Double) obj).doubleValue()); |
|
} else if (!str.equals("NULL")) |
pstm.setString(k + 1, str); |
pstm.setString(k + 1, str); |
else |
else |
pstm.setNull(k + 1, Types.NULL); |
pstm.setNull(k + 1, Types.NULL); |
Line 1130 class Convert
|
Line 1218 class Convert
|
throw new Error("parse error user tag missing"); |
throw new Error("parse error user tag missing"); |
if (node2 == null) |
if (node2 == null) |
throw new Error("parse error password tag missing"); |
throw new Error("parse error password tag missing"); |
if(delimiterNode!=null) delimiter = delimiterNode.getCharacters(); |
if (delimiterNode != null) |
|
delimiter = delimiterNode.getCharacters(); |
String url = node.getCharacters(); |
String url = node.getCharacters(); |
String user = node1.getCharacters(); |
String user = node1.getCharacters(); |
String password = node2.getCharacters(); |
String password = node2.getCharacters(); |
Line 1590 class Convert
|
Line 1679 class Convert
|
FM2SQL.ProgressDialog dialog = null; |
FM2SQL.ProgressDialog dialog = null; |
if (FM2SQL.fmInstance != null) |
if (FM2SQL.fmInstance != null) |
{ |
{ |
dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance); |
dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance, bean); |
dialog.setTitle("Conversion running ..."); |
dialog.setTitle("Conversion 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); |