File:  [Repository] / FM2SQL / Attic / Convert.java
Revision 1.34: download - view: text, annotated - select for diffs - revision graph
Mon Feb 16 12:24:17 2004 UTC (20 years, 4 months ago) by rogo
Branches: MAIN
CVS tags: HEAD
convertBatch now same as convert

    1: import java.util.*;
    2: import java.sql.*;
    3: import java.awt.Cursor;
    4: import java.io.BufferedReader;
    5: import java.io.BufferedWriter;
    6: import java.io.File;
    7: import java.io.FileInputStream;
    8: import java.io.FileNotFoundException;
    9: import java.io.FileOutputStream;
   10: import java.io.InputStreamReader;
   11: import java.io.OutputStreamWriter;
   12: import java.io.PrintStream;
   13: import java.io.UnsupportedEncodingException;
   14: 
   15: import com.exploringxml.xml.Node;
   16: import com.exploringxml.xml.Xparse;
   17: 
   18: class Convert
   19: {
   20:   static DBBean bean = new DBBean();
   21:   static DBBean beanDest = new DBBean();
   22: 
   23:   static String user = "", passwd = "e1nste1n";
   24:   static String userDest = "postgres", passwdDest = "rogo";
   25:   static boolean batchRun = false;
   26:   static Vector databases = new Vector();
   27:   final static int numHits = 5000;
   28:   final static int numIntervalls = 2;
   29:   public static void main(String args[])
   30:   {
   31:     /*    try
   32:         {
   33:           //byte[] b = "ö".getBytes("UTF-8");
   34:         //  System.out.println("QueryString " +b[0]+" "+b[1]+(new String(b).getBytes()[0])+" "+new String(b).getBytes()[1]);
   35:         //System.out.println(new String(b,"UTF-8"));
   36:         } catch (UnsupportedEncodingException e)
   37:         {
   38:           e.printStackTrace();
   39:         }*/
   40:     FileOutputStream file = null;
   41:     if (args.length != 1)
   42:     {
   43:       System.out.println("Usage: java Convert <xml config file>");
   44:       System.exit(-1);
   45:     }
   46:     if (!(new File(args[0]).exists()))
   47:       System.exit(0);
   48:     try
   49:     {
   50:       file = new FileOutputStream("./log.txt");
   51:     } catch (FileNotFoundException e1)
   52:     {
   53:       e1.printStackTrace();
   54:     }
   55:     PrintStream stream = new PrintStream(file);
   56:     System.setOut(stream);
   57:     System.setErr(stream);
   58:     readXMLFile(args[0]);
   59:     System.out.println("Finished!");
   60:     //convert("jdbc:fmpro:http://141.14.237.74:8050","jdbc:postgresql://erebos/test",null,null);
   61:   }
   62:   public static void convertBatch(DBBean source, DBBean destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids,int mode) throws Exception
   63:   {
   64:     bean = source;
   65:     beanDest = destination;
   66:     convert(null,null,names,layouts,selects,creates,ids,mode);
   67:     if(true) return;
   68:     StringBuffer command = null;
   69:     try
   70:     {
   71:       bean.setConnection(source.url);
   72:       if (names == null)
   73:         names = bean.getTableNames();
   74:       //Collections.sort(names);
   75:       int tbIndex = 1;
   76: 
   77:       for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
   78:       {
   79:         Vector[] result = null;
   80:         try
   81:         {
   82:           String query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
   83:           String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
   84:           query = (selects != null) ? selects.get(tbIndex).toString() : query;
   85:           //if  vectors[1].get(i) != null)
   86:           if (!layout.equals(""))
   87:           {
   88:             System.out.println("before " + query + " table" + names.get(tbIndex));
   89:             layout = " layout " + bean.getQC() + layout + bean.getQC();
   90:             String name = names.get(tbIndex).toString();
   91:             StringBuffer queryLayout = new StringBuffer(query);
   92:             queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
   93:             query = queryLayout.toString();
   94:             System.out.println("added layout " + query);
   95: 
   96:           }
   97:           System.out.println(" performing query " + query);
   98:           //result = bean.getQueryData(query, null, 0);
   99:           bean.getConnection();
  100:           bean.makeQuery(query, 0);
  101:         } catch (Exception e)
  102:         {
  103:           System.out.println(e.getMessage());
  104:           e.printStackTrace();
  105:           continue;
  106:         }
  107:         //beanDest.setConnection("jdbc:postgresql://erebos/test3");
  108:         beanDest.setConnection(destination.url);
  109: 
  110:         Statement stm = beanDest.getConnection().createStatement();
  111: 
  112:         Vector tables = beanDest.getTableNames();
  113:         //   Collections.sort(tables);
  114:         System.out.println("converting table " + names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames()); 
  115:         tables = beanDest.getTableNames();
  116:         // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
  117:         stm = beanDest.getConnection().createStatement();
  118:         // System.exit(0);
  119:         if (mode == Convert.DataBase.CONVERT_MODE)
  120:         {
  121:           if (tables.indexOf(names.get(tbIndex)) >= 0)
  122:           {
  123:             stm.executeUpdate("drop table " + beanDest.getQC() + names.get(tbIndex) + beanDest.getQC());
  124:             tables.remove((String) names.get(tbIndex));
  125:             System.out.println("dropped table " + names.get(tbIndex));
  126:           } else if (tables.indexOf(convertText(names.get(tbIndex).toString())) >= 0)
  127:           {
  128:             stm.executeUpdate("drop table " + beanDest.getQC() + convertText((String) names.get(tbIndex)) + beanDest.getQC());
  129:             tables.remove(convertText((String) names.get(tbIndex)));
  130:             System.out.println("dropped table " + names.get(tbIndex));
  131:           }
  132: 
  133:           if (tables.indexOf(names.get(tbIndex)) < 0 && tables.indexOf(convertText(names.get(tbIndex).toString())) < 0)
  134:           {
  135:             if (creates.get(tbIndex).equals("") || creates.get(tbIndex).toString().toLowerCase().indexOf("create") < 0)
  136:             {
  137:               System.out.println("Warning empty or invalid create statement - creating one for you\n");
  138: 
  139:               command = new StringBuffer(50);
  140:               command.append("CREATE TABLE ");
  141:               command.append(beanDest.getQC());
  142:               command.append(convertText((String) names.get(tbIndex)));
  143:               command.append(beanDest.getQC());
  144:               command.append("(");
  145:               String type = null;
  146:               Vector columnNames = bean.getColumnNames();
  147:               for (int i = 0; i < columnNames.size() - 1; ++i)
  148:               {
  149:                 type = bean.metaData.getColumnTypeName(i + 1);
  150:                 //   System.out.println(i+" "+result[1].get(i)+" "+type);
  151:                 type = (type.equals("NUMBER")) ? "INT4" : type;
  152:                 type = (type.equals("CONTAINER")) ? "TEXT" : type;
  153: 
  154:                 command.append(beanDest.getQC() + convertText((String) columnNames.get(i)) + beanDest.getQC() + " " + type + ", ");
  155:               }
  156:               type = bean.metaData.getColumnTypeName(columnNames.size());
  157:               type = (type.equals("NUMBER")) ? "INT4" : type;
  158:               type = (type.equals("CONTAINER")) ? "TEXT" : type;
  159:               command.append(beanDest.getQC() + convertText((String) columnNames.get(columnNames.size() - 1)) + beanDest.getQC() + " " + type);
  160:               command.append(" )");
  161:             } else
  162:               command = new StringBuffer().append(creates.get(tbIndex).toString());
  163: 
  164:             System.out.println(command);
  165:             //  System.exit(0);
  166:             //command.append(DBBean.getQC());   
  167:             stm.executeUpdate(command.toString());
  168: 
  169:           }
  170:         }
  171:         Vector row = null;
  172:         command = new StringBuffer();
  173: 
  174:         command.append("INSERT  INTO ");
  175:         command.append(beanDest.getQC());
  176:         command.append(convertText((String) names.get(tbIndex)));
  177:         command.append(beanDest.getQC());
  178:         command.append(" values ( ");
  179: 
  180:         for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
  181:           command.append("?,");
  182:         command.append("?)");
  183:         PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
  184:         System.out.println(command);
  185:         while ((row = bean.getNextRow()) != null)
  186:         {
  187:           //print rows
  188:           Object obj = null;
  189:           for (int k = 0; k < row.size(); ++k)
  190:           {
  191:             obj = row.get(k);
  192:             if (obj instanceof ArrayList)
  193:               obj = ((List) obj).get(0);
  194:             String str = (obj == null) ? "NULL" : obj.toString();
  195:             if (!str.equals("NULL"))
  196:               pstm.setString(k + 1, str);
  197:             else
  198:               pstm.setNull(k + 1, Types.NULL);
  199:           }
  200:           pstm.execute();
  201: 
  202:         } // to for loop    
  203: 
  204:       }
  205:     } catch (Exception e)
  206:     {
  207:       System.out.println("Error while connecting to database " + e);
  208:       //dialog.setVisible(false);
  209:       //dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  210:       //FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  211:       java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
  212:       java.io.PrintStream stream = new java.io.PrintStream(b);
  213:       stream.print(command + "\n\n");
  214:       e.printStackTrace(stream);
  215:       System.err.println(b);
  216:       //FM2SQL.showErrorDialog(b.toString(), "Error occured !");
  217: 
  218:     }
  219:     //  dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  220:     //FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  221: 
  222:     //  dialog.setVisible(false); 
  223:   }
  224: 
  225:   public static void update(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception
  226:   {
  227:     FM2SQL.ProgressDialog dialog = null;
  228:     if (FM2SQL.fmInstance != null)
  229:     {
  230:       dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance);
  231:       dialog.setTitle("Conversion running ...");
  232:       dialog.title.setText("Getting table data ...");
  233:       dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
  234:       dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  235:       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  236:       dialog.thread = Thread.currentThread();
  237:     }
  238:     // setting user and passwd 
  239:     bean.setUserAndPasswd(user, passwd);
  240:     // setting user and passwd 
  241:     beanDest.setUserAndPasswd(userDest, passwdDest);
  242:     if (dialog != null)
  243:       dialog.setSize(400, 250);
  244:     StringBuffer command = null;
  245:     String query = null;
  246:     try
  247:     {
  248:       //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");    
  249:       //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");
  250:       bean.setConnection(source);
  251:       if (names == null)
  252:         names = bean.getTableNames();
  253:       // Collections.sort(names);
  254:       int tbIndex = 1;
  255: 
  256:       // System.out.println("Start at "+names.indexOf("archimedes_facsimiles"));
  257:       for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
  258:       {
  259:         Vector[] result = null;
  260:         try
  261:         {
  262:           query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
  263:           String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
  264:           query = (selects != null) ? selects.get(tbIndex).toString() : query;
  265:           //if  vectors[1].get(i) != null)
  266:           if (layout != "")
  267:           {
  268:             layout = " layout " + bean.getQC() + layout + bean.getQC();
  269:             String name = names.get(tbIndex).toString();
  270:             StringBuffer queryLayout = new StringBuffer(query);
  271:             queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
  272:             query = queryLayout.toString();
  273:             System.out.println("added layout  " + query);
  274: 
  275:           }
  276:           dialog.title.setText("Getting table data ...");
  277:           dialog.table.setText(names.get(tbIndex).toString());
  278:           dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
  279:           dialog.show();
  280:           bean.getConnection();
  281:           bean.makeQuery(query, 0);
  282:         } catch (Exception e)
  283:         {
  284:           continue;
  285:         }
  286:         //beanDest.setConnection("jdbc:postgresql://erebos/test3");
  287:         beanDest.setConnection(destination);
  288: 
  289:         Statement stm = beanDest.getConnection().createStatement();
  290: 
  291:         Vector tables = beanDest.getTableNames();
  292:         // Collections.sort(tables);
  293:         System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames()); 
  294:         tables = beanDest.getTableNames();
  295:         // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
  296:         stm = beanDest.getConnection().createStatement();
  297:         // System.exit(0);
  298: 
  299:         if (dialog != null)
  300:           dialog.title.setText("Writing table data ...");
  301: 
  302:         int j = -1;
  303: 
  304:         Vector row = null;
  305:         command = new StringBuffer();
  306: 
  307:         command.append("UPDATE ");
  308:         command.append(beanDest.getQC());
  309:         command.append(convertText((String) names.get(tbIndex)));
  310:         command.append(beanDest.getQC());
  311:         command.append(" SET  ");
  312: 
  313:         int size = bean.getColumnNames().size();
  314:         for (int i = 0; i < size - 1; ++i)
  315:           command.append(beanDest.getQC() + convertText((String) bean.getColumnNames().get(i)) + beanDest.getQC() + " = ? ,");
  316:         command.append(convertText((String) bean.getColumnNames().get(size - 1)) + " = ? ");
  317:         command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " =  ?");
  318:         PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
  319:         System.out.println(command + " " + tbIndex);
  320:         int rowCount = bean.getRowCount(query);
  321:         int idIndex = bean.getColumnNames().indexOf(ids.get(tbIndex));
  322:         while ((row = bean.getNextRow()) != null)
  323:         {
  324:           j++;
  325:           //print rows
  326:           Object obj = null;
  327:           /* for(int k=0;k<row.size()-1;++k)
  328:            {
  329:           		obj = row.get(k);
  330:           		//System.out.println("row "+obj+" "+k);
  331:           	 if(obj!=null&&!(obj instanceof ArrayList))
  332:           	 command.append("'"+convertUml(obj.toString())+"',"); 
  333:           	 else if(obj!=null&&   obj instanceof ArrayList)
  334:           	 command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"',"); 
  335:           	 else command.append("NULL,");
  336:            }
  337:            obj = row.get(row.size() - 1);
  338:            if (obj != null && !(obj instanceof ArrayList))
  339:            command.append("'"+convertUml(obj.toString())+"')"); 
  340:           	else
  341:           	if(obj!=null&&   obj instanceof ArrayList)
  342:           	 command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')");         //command.append(obj.toString()+")");
  343:           	 else command.append("NULL)");
  344:           	*/
  345:           //command.append("'"+row.get(row.size()-1)+"')"); 
  346:           //command.append(" )");
  347:           //  for(int k=0;k<row.size();++k)
  348: 
  349:           // System.out.println();
  350:           //   System.out.println(command+" "+j+" "+row.size()+" "+  ((Vector)result2[0].get(j)).size());
  351:           // System.out.println(command);
  352:           for (int k = 0; k < row.size(); ++k)
  353:           {
  354:             obj = row.get(k);
  355:             if (obj instanceof ArrayList)
  356:               obj = ((List) obj).get(0);
  357:             String str = (obj == null) ? "NULL" : obj.toString();
  358:             if (!str.equals("NULL"))
  359:               pstm.setString(k + 1, str);
  360:             else
  361:               pstm.setNull(k + 1, Types.NULL);
  362:           }
  363:           pstm.setString(row.size() + 1, row.get(idIndex).toString());
  364:           //System.out.println(pstm.toString());
  365:           // System.exit(0);
  366:           pstm.execute();
  367:           //stm.executeUpdate(command.toString());
  368:           if (dialog != null)
  369:             dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
  370:           // System.out.println( (int)(((double)(j+1)/(double)result[0].size())*100.0)+" "+result[0].size()+" "+j);
  371:           command = null;
  372:         } // to for loop    
  373: 
  374:       }
  375:     } catch (Exception e)
  376:     {
  377:       System.out.println("Error while connecting to database " + e);
  378:       if (dialog != null)
  379:       {
  380:         dialog.setVisible(false);
  381:         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  382:         FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  383:       }
  384:       java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
  385:       java.io.PrintStream stream = new java.io.PrintStream(b);
  386:       stream.print(command + "\n\n");
  387:       e.printStackTrace(stream);
  388:       FM2SQL.showErrorDialog(b.toString(), "Error occured !");
  389: 
  390:     }
  391:     if (dialog != null)
  392:     {
  393:       dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  394:       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  395: 
  396:       dialog.setVisible(false);
  397:     }
  398: 
  399:   }
  400:   /**
  401:    transfers the specified array of tables  to the destination database
  402:     and creates the table if it does not exist if it exists and mode is not append the table is dropped
  403:    
  404:    **/
  405:   public static void convert(String source, String destination, Vector names, Vector layouts, Vector selects, Vector creates, Vector ids, int mode) throws Exception
  406:   {
  407: 
  408:     FM2SQL.ProgressDialog dialog = null;
  409: 
  410:     if (FM2SQL.fmInstance != null)
  411:     {
  412:       dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance);
  413:       dialog.setTitle("Conversion running ...");
  414:       dialog.title.setText("Getting table data ...");
  415:       dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x + (FM2SQL.fmInstance.getWidth() - 400) / 2, FM2SQL.fmInstance.getLocationOnScreen().y + (FM2SQL.fmInstance.getHeight() - 250) / 2);
  416:       dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  417:       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  418:       dialog.thread = Thread.currentThread();
  419:       dialog.setSize(400, 250);
  420:     }
  421:     java.util.TreeSet myIds = new TreeSet();
  422:     int deltaID = 1;
  423:     String idField = "";
  424:     if (source != null && destination != null)
  425:     {
  426:       // setting user and passwd 
  427:       bean.setUserAndPasswd(user, passwd);
  428:       // setting user and passwd 
  429:       beanDest.setUserAndPasswd(userDest, passwdDest);
  430:     }
  431:     StringBuffer command = null;
  432:     String query = null;
  433:     try
  434:     {
  435:       //bean.setConnection("jdbc:fmpro:http://141.14.237.74:8050");    
  436:       //bean.setConnection("jdbc:postgresql://erebos/test","postgres","rogo");
  437:       if(source!=null)
  438:       bean.setConnection(source);
  439:       else
  440:       bean.setConnection(bean.url);
  441:       
  442:       if (names == null)
  443:         names = bean.getTableNames();
  444:       // Collections.sort(names);
  445:       int tbIndex = 1;
  446: 
  447:       // System.out.println("Start at "+names.indexOf("archimedes_facsimiles"));
  448:       for (tbIndex = 0; tbIndex < names.size(); ++tbIndex)
  449:       {
  450:         Vector[] result = null;
  451:         try
  452:         {
  453:           query = "select * from " + bean.getQC() + names.get(tbIndex).toString() + bean.getQC();
  454:           String layout = (layouts.isEmpty()) ? "" : layouts.get(tbIndex).toString();
  455:           query = (selects != null) ? selects.get(tbIndex).toString() : query;
  456:           //if  vectors[1].get(i) != null)
  457:           if (layout != "")
  458:           {
  459:             layout = " layout " + bean.getQC() + layout + bean.getQC();
  460:             String name = names.get(tbIndex).toString();
  461:             StringBuffer queryLayout = new StringBuffer(query);
  462:             queryLayout.insert(queryLayout.indexOf(name) + name.length() + 1, " " + layout);
  463:             query = queryLayout.toString();
  464:             System.out.println("added layout  " + query);
  465: 
  466:           }
  467:           //  if ( layout!= "")
  468:           //	 query += " layout " + bean.getQC() + layout + bean.getQC();
  469:           if (dialog != null)
  470:           {
  471:             dialog.title.setText("Reading table data ...");
  472:             dialog.table.setText(names.get(tbIndex).toString());
  473:             dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size());
  474:             dialog.show();
  475:           }
  476:           //result = bean.getQueryData(query, dialog, 0);
  477:           bean.getConnection();
  478:           bean.makeQuery(query, 50);
  479:           // @TODO id Vector must be used in querys while loop over id ranges where id>=start and id<=end
  480:           idField = ids.get(tbIndex).toString();
  481: 
  482:         } catch (Exception e)
  483:         {
  484:           System.out.println(e);
  485:           continue;
  486:         }
  487:         //beanDest.setConnection("jdbc:postgresql://erebos/test3");
  488:         if(destination!=null)
  489:         beanDest.setConnection(destination);
  490:         else
  491:         beanDest.setConnection(beanDest.url);
  492:         Statement stm = beanDest.getConnection().createStatement();
  493: 
  494:         Vector tables = beanDest.getTableNames();
  495:         // Collections.sort(tables);
  496:         System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames()); 
  497:         tables = beanDest.getTableNames();
  498:         // System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString()));
  499:         stm = beanDest.getConnection().createStatement();
  500:         // System.exit(0);
  501:         if (mode == Convert.DataBase.CONVERT_MODE)
  502:         {
  503:           if (tables.indexOf(names.get(tbIndex)) >= 0)
  504:           {
  505:             stm.executeUpdate("drop table " + beanDest.getQC() + names.get(tbIndex) + beanDest.getQC());
  506:             tables.remove((String) names.get(tbIndex));
  507:             System.out.println("dropped table" + names.get(tbIndex));
  508:           } else if (tables.indexOf(convertText(names.get(tbIndex).toString())) >= 0)
  509:           {
  510:             stm.executeUpdate("drop table " + beanDest.getQC() + convertText((String) names.get(tbIndex)) + beanDest.getQC());
  511:             tables.remove(convertText((String) names.get(tbIndex)));
  512:             System.out.println("dropped table" + names.get(tbIndex));
  513:           }
  514: 
  515:           if (tables.indexOf(names.get(tbIndex)) < 0 && tables.indexOf(convertText(names.get(tbIndex).toString())) < 0)
  516:           {
  517:             if (creates.get(tbIndex).equals("") || creates.get(tbIndex).toString().toLowerCase().indexOf("create") < 0)
  518:             {
  519:               System.out.println("Warning empty or invalid create statement - creating one for you\n");
  520: 
  521:               command = new StringBuffer(50);
  522:               command.append("CREATE TABLE ");
  523:               command.append(beanDest.getQC());
  524:               command.append(convertText((String) names.get(tbIndex)));
  525:               command.append(beanDest.getQC());
  526:               command.append("(");
  527:               String type = null;
  528:               Vector columnNames = bean.getColumnNames();
  529:               for (int i = 0; i < columnNames.size() - 1; ++i)
  530:               {
  531:                 type = bean.metaData.getColumnTypeName(i + 1);
  532:                 //   System.out.println(i+" "+result[1].get(i)+" "+type);
  533:                 type = (type.equals("NUMBER")) ? "INT4" : type;
  534:                 type = (type.equals("CONTAINER")) ? "TEXT" : type;
  535: 
  536:                 command.append(beanDest.getQC() + convertText((String) columnNames.get(i)) + beanDest.getQC() + " " + type + ", ");
  537:               }
  538:               type = bean.metaData.getColumnTypeName(columnNames.size());
  539:               type = (type.equals("NUMBER")) ? "INT4" : type;
  540:               type = (type.equals("CONTAINER")) ? "TEXT" : type;
  541:               command.append(beanDest.getQC() + convertText((String) columnNames.get(columnNames.size() - 1)) + beanDest.getQC() + " " + type);
  542:               command.append(" )");
  543: 
  544:               // System.out.println(command);
  545:               //  System.exit(0);
  546:               //command.append(DBBean.getQC());   
  547:             } else
  548:               command = new StringBuffer().append(creates.get(tbIndex).toString());
  549:             stm.executeUpdate(command.toString());
  550: 
  551:           }
  552:         }
  553:         if(dialog!=null)
  554:         dialog.title.setText("Writing table data ...");
  555: 
  556:         // prepare the insert statement
  557:         int j = -1;
  558:         Vector row = null;
  559:         command = new StringBuffer();
  560: 
  561:         command.append("INSERT  INTO ");
  562:         command.append(beanDest.getQC());
  563:         command.append(convertText((String) names.get(tbIndex)));
  564:         command.append(beanDest.getQC());
  565:         command.append(" values ( ");
  566: 
  567:         for (int i = 0; i < bean.getColumnNames().size() - 1; ++i)
  568:           command.append("?,");
  569:         command.append("?)");
  570:         PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString());
  571:         System.out.println(command);
  572:         int rowCount = (idField != "") ? myIds.size() : bean.getRowCount(query);
  573:         Vector vec = new Vector(myIds);
  574:         int endIndex = -1;
  575:         String tempQuery = query;
  576:         String tempID = bean.getQC() + idField + bean.getQC();
  577:         if (!idField.equals(""))
  578:         {
  579:           long startTime = System.currentTimeMillis();
  580:           int counter = -1;
  581:           while (true)
  582:           {
  583:             ++counter;
  584:             if (counter == 0&&dialog!=null)
  585:               dialog.title.setText("Check if data  is available");
  586:             else
  587:               if(dialog!=null)
  588:               dialog.title.setText("Check if more  data  is available");
  589:             myIds = bean.getIDVector(ids.get(tbIndex).toString(), (String) names.get(tbIndex), tempQuery, numHits);
  590:             if (myIds.isEmpty())
  591:               break;
  592:             vec = new Vector(myIds);
  593:             rowCount = vec.size();
  594:             System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size());
  595:             deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls);
  596:             if (vec.size() <= numIntervalls)
  597:             {
  598:               endIndex = 0;
  599:               deltaID = vec.size();
  600:             }
  601:             for (int k = 0; k < vec.size() - deltaID; k = k + deltaID)
  602:             {
  603:               System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement());
  604:               if (query.indexOf("where") > 0)
  605:                 tempQuery = query + " and " + tempID + ">=" + vec.get(k) + " and " + tempID + "<=" + vec.get(k + deltaID);
  606:               else
  607:                 tempQuery = query + "where " + tempID + ">=" + vec.get(k) + " and " + tempID + "<=" + vec.get(k + deltaID);
  608:               System.out.println(tempQuery);
  609:               if(dialog!=null)
  610:               dialog.title.setText("Reading table data ...");
  611: 
  612:               bean.makeQuery(tempQuery, deltaID);
  613:               if(dialog!=null)
  614:               dialog.title.setText("Writing table data ...");
  615: 
  616:               command = writeDatainDestTable(dialog, command, k, pstm, rowCount);
  617:               endIndex = k + deltaID;
  618:             }
  619:             System.out.println(endIndex);
  620:             if (endIndex == vec.size() - 1)
  621:               System.out.println("fits");
  622:             else
  623:             {
  624:               System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement());
  625: 
  626:               if (query.indexOf("where") > 0)
  627:                 tempQuery = query + " and " + tempID + ">=" + vec.get(endIndex) + " and " + tempID + "<=" + vec.lastElement();
  628:               else
  629:                 tempQuery = query + "where " + tempID + ">=" + vec.get(endIndex) + " and " + tempID + "<=" + vec.lastElement();
  630:               System.out.println(tempQuery);
  631:               if(dialog!=null)
  632:               dialog.title.setText("Reading table data ...");
  633:               bean.makeQuery(tempQuery, 0);
  634:               if(dialog!=null)
  635:               dialog.title.setText("Writing table data ...");
  636:               command = writeDatainDestTable(dialog, command, endIndex, pstm, rowCount);
  637:             }
  638:             if (query.indexOf("where") > 0)
  639:               tempQuery = query + " and " + tempID + ">" + vec.lastElement();
  640:             else
  641:               tempQuery = query + " where " + tempID + ">" + vec.lastElement();
  642: 
  643:           }
  644:           long endTime = System.currentTimeMillis();
  645:           System.out.println("Time for incremental convert elapsed " + (endTime - startTime));
  646:         } else
  647:         {
  648:           long startTime = System.currentTimeMillis();
  649: 
  650:           bean.makeQuery(query, 0);
  651:           command = writeDatainDestTable(dialog, command, j, pstm, rowCount);
  652:           long endTime = System.currentTimeMillis();
  653:           System.out.println("Time for old convert elapsed " + (endTime - startTime));
  654: 
  655:         }
  656:       }
  657:     } catch (Exception e)
  658:     {
  659:       System.out.println("Error while connecting to database " + e);
  660:       if (dialog != null)
  661:       {
  662:         dialog.setVisible(false);
  663:         dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  664:         FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  665:         java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream();
  666:         java.io.PrintStream stream = new java.io.PrintStream(b);
  667:         stream.print(command + "\n\n");
  668:         e.printStackTrace(stream);
  669:         FM2SQL.showErrorDialog(b.toString(), "Error occured !");
  670:       } else
  671:       {
  672:         e.printStackTrace();
  673: 
  674:       }
  675:     }
  676:     if (dialog != null)
  677:     {
  678:       dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  679:       FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  680:       dialog.setVisible(false);
  681:     }
  682:   }
  683:   private static StringBuffer writeDatainDestTable(FM2SQL.ProgressDialog dialog, StringBuffer command, int j, PreparedStatement pstm, int rowCount) throws Exception, SQLException
  684:   {
  685:     Vector row;
  686:     while ((row = bean.getNextRow()) != null)
  687:     {
  688:       j++;
  689:       // row = (Vector) result[0].get(j);
  690:       /*   command = new StringBuffer();
  691:       
  692:            command.append("INSERT  INTO ");
  693:            command.append(beanDest.getQC());
  694:            command.append(convertText((String) names.get(tbIndex)));
  695:            command.append(beanDest.getQC());
  696:            command.append(" values ( ");
  697:         */
  698:       //print rows
  699:       Object obj = null;
  700:       /* for(int k=0;k<row.size()-1;++k)
  701:        {
  702:           obj = row.get(k);
  703:           //System.out.println("row "+obj+" "+k);
  704:          if(obj!=null&&!(obj instanceof ArrayList))
  705:          command.append("'"+convertUml(obj.toString())+"',"); 
  706:          else if(obj!=null&&   obj instanceof ArrayList)
  707:          command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"',"); 
  708:          else command.append("NULL,");
  709:        }
  710:        obj = row.get(row.size() - 1);
  711:        if (obj != null && !(obj instanceof ArrayList))
  712:        command.append("'"+convertUml(obj.toString())+"')"); 
  713:         else
  714:         if(obj!=null&&   obj instanceof ArrayList)
  715:          command.append("'"+convertUml(((ArrayList)obj).get(0).toString())+"')");         //command.append(obj.toString()+")");
  716:          else command.append("NULL)");
  717:         */
  718:       //command.append("'"+row.get(row.size()-1)+"')"); 
  719:       //command.append(" )");
  720:       //  for(int k=0;k<row.size();++k)
  721: 
  722:       // System.out.println();
  723:       //   System.out.println(command+" "+j+" "+row.size()+" "+  ((Vector)result2[0].get(j)).size());
  724:       // System.out.println(command);
  725:       for (int k = 0; k < row.size(); ++k)
  726:       {
  727:         obj = row.get(k);
  728:         if (obj instanceof ArrayList)
  729:           obj = ((List) obj).get(0);
  730:         String str = (obj == null) ? "NULL" : obj.toString();
  731:         if (!str.equals("NULL"))
  732:           pstm.setString(k + 1, str);
  733:         else
  734:           pstm.setNull(k + 1, Types.NULL);
  735:       }
  736:       pstm.execute();
  737:       //stm.executeUpdate(command.toString());
  738:       if (dialog != null)
  739:         dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0));
  740:       // System.out.println( (int)(((double)(j+1)/(double)result[0].size())*100.0)+" "+result[0].size()+" "+j);
  741:       command = null;
  742:     } // to while loop    
  743:     return command;
  744:   }
  745: 
  746:   public static String convertText(String newName)
  747:   {
  748:     StringBuffer alterMe = new StringBuffer(newName.trim().toLowerCase());
  749:     int length = alterMe.length();
  750:     int j = 0;
  751:     int index = alterMe.indexOf(".fp5");
  752:     if (index >= 0)
  753:     {
  754:       alterMe.delete(index, index + 4);
  755:       length = length - 4;
  756:     }
  757: 
  758:     while (j < length)
  759:     {
  760:       if (alterMe.charAt(j) == ' ')
  761:       {
  762:         alterMe.setCharAt(j, '_');
  763:         //    if(j<length-1) j=j+1;
  764:       } else if (alterMe.charAt(j) == '_')
  765:       {
  766: 
  767:         if (alterMe.charAt(j + 1) == '_')
  768:           alterMe.deleteCharAt(j);
  769:         length = length - 1;
  770:         //  if(j<length-1) j=j+1;
  771:       } else if (alterMe.charAt(j) == 'ä')
  772:       {
  773:         alterMe.setCharAt(j, 'a');
  774:         alterMe.insert(j + 1, "e");
  775:         length = length + 1;
  776:         if (j < length - 1)
  777:           j = j + 1;
  778:       } else if (alterMe.charAt(j) == 'ö')
  779:       {
  780:         alterMe.setCharAt(j, 'o');
  781:         alterMe.insert(j + 1, "e");
  782:         length = length + 1;
  783:         if (j < length - 1)
  784:           j = j + 1;
  785:       } else if (alterMe.charAt(j) == 'ü')
  786:       {
  787:         alterMe.setCharAt(j, 'u');
  788:         alterMe.insert(j + 1, "e");
  789:         length = length + 1;
  790:         if (j < length - 1)
  791:           j = j + 1;
  792:       } else if (alterMe.charAt(j) == 'ß')
  793:       {
  794:         alterMe.setCharAt(j, 's');
  795:         alterMe.insert(j + 1, "s");
  796:         length = length + 1;
  797:         if (j < length - 1)
  798:           j = j + 1;
  799:       } else if (alterMe.charAt(j) == ':')
  800:       {
  801:         if (j < length - 1)
  802:         {
  803:           if (alterMe.charAt(j + 1) == ':')
  804:           {
  805:             alterMe.setCharAt(j, '_');
  806:             alterMe.delete(j + 1, j + 2);
  807:             length = length - 1;
  808: 
  809:           }
  810: 
  811:           if (j < length - 1)
  812:             j = j + 1;
  813:         }
  814:       } else if (alterMe.charAt(j) == '-')
  815:       {
  816:         alterMe.setCharAt(j, '_');
  817: 
  818:       } else if (alterMe.charAt(j) == '?')
  819:       {
  820:         // changed ? to _ because of update statement
  821:         alterMe.setCharAt(j, '_');
  822:         // length = length + 1;
  823:         // j=j+1;
  824:         System.out.println(alterMe);
  825:       } else if (alterMe.charAt(j) == '.')
  826:       {
  827:         if (j == length - 1)
  828:         {
  829:           alterMe.delete(j, j);
  830:           length--;
  831:         } else
  832:           alterMe.setCharAt(j, '_');
  833:       }
  834: 
  835:       ++j;
  836:     }
  837:     return alterMe.toString();
  838:   }
  839:   public static String convertToEntities(String newName)
  840:   {
  841:     StringBuffer alterMe = new StringBuffer(newName.trim());
  842:     int length = alterMe.length();
  843:     int j = 0;
  844: 
  845:     while (j < length)
  846:     {
  847: 
  848:       if (alterMe.charAt(j) == '>')
  849:       {
  850:         alterMe.setCharAt(j, '&');
  851:         alterMe.insert(j + 1, "gt;");
  852:         length = length + 2;
  853:         if (j < length - 1)
  854:           j = j + 1;
  855: 
  856:       } else if (alterMe.charAt(j) == '<')
  857:       {
  858:         alterMe.setCharAt(j, '&');
  859:         alterMe.insert(j + 1, "lt;");
  860:         length = length + 2;
  861:         if (j < length - 1)
  862:           j = j + 1;
  863: 
  864:       }
  865:       ++j;
  866:     }
  867:     return alterMe.toString();
  868:   }
  869:   public static String convertUml(String newName)
  870:   {
  871:     StringBuffer alterMe = new StringBuffer(newName.trim());
  872:     int length = alterMe.length();
  873:     int j = 0;
  874: 
  875:     while (j < length)
  876:     {
  877: 
  878:       if (alterMe.charAt(j) == '\'')
  879:       {
  880:         alterMe.setCharAt(j, '\\');
  881:         alterMe.insert(j + 1, "'");
  882:         length = length + 1;
  883:         if (j < length - 1)
  884:           j = j + 1;
  885:       }
  886:       /*   else
  887:          if (alterMe.charAt(j) == '"')
  888:          {
  889:       	 alterMe.setCharAt(j, '\\');
  890:       	 alterMe.insert(j + 1, "\"");
  891:       	 length = length + 1;
  892:       	 if(j<length-1) j=j+1;
  893:          }
  894:         else
  895:         if (alterMe.charAt(j) == '>')
  896:          {
  897:       	 alterMe.setCharAt(j, '\\');
  898:       	 alterMe.insert(j + 1, ">");
  899:       	 length = length + 1;
  900:       	 if(j<length-1) j=j+1;
  901:          }
  902:         else
  903:         if (alterMe.charAt(j) == '<')
  904:          {
  905:       	 alterMe.setCharAt(j, '\\');
  906:       	 alterMe.insert(j + 1, "<");
  907:       	 length = length + 1;
  908:       	 if(j<length-1) j=j+1;
  909:          }
  910:        else
  911:        if (alterMe.charAt(j) == '?')
  912:          {
  913:       	 alterMe.setCharAt(j, '\\');
  914:       	 alterMe.insert(j + 1, "?");
  915:       	 length = length + 1;
  916:       	 if(j<length-1) j=j+1;
  917:          }
  918:        else
  919:        if (alterMe.charAt(j) == '&')
  920:          {
  921:       	 alterMe.setCharAt(j, '\\');
  922:       	 alterMe.insert(j + 1, "&");
  923:       	 length = length + 1;
  924:       	 if(j<length-1) j=j+1;
  925:          }
  926:        else
  927:        if (alterMe.charAt(j) == '=')
  928:          {
  929:       	 alterMe.setCharAt(j, '\\');
  930:       	 alterMe.insert(j + 1, "=");
  931:       	 length = length + 1;
  932:       	 if(j<length-1) j=j+1;
  933:          }
  934:        else
  935:        if (alterMe.charAt(j) == ',')
  936:          {
  937:       	 alterMe.setCharAt(j, '\\');
  938:       	 alterMe.insert(j + 1, ",");
  939:       	 length = length + 1;
  940:       	 if(j<length-1) j=j+1;
  941:          }
  942:        else
  943:        if (alterMe.charAt(j) == '.')
  944:          {
  945:       	 alterMe.setCharAt(j, '\\');
  946:       	 alterMe.insert(j + 1, ".");
  947:       	 length = length + 1;
  948:       	 if(j<length-1) j=j+1;
  949:          }
  950:        else
  951:        if (alterMe.charAt(j) == '[')
  952:          {
  953:       	 alterMe.setCharAt(j, '\\');
  954:       	 alterMe.insert(j + 1, ".");
  955:       	 length = length + 1;
  956:       	 if(j<length-1) j=j+1;
  957:          }
  958:       else
  959:        if (alterMe.charAt(j) == ']')
  960:          {
  961:       	 alterMe.setCharAt(j, '\\');
  962:       	 alterMe.insert(j + 1, ".");
  963:       	 length = length + 1;
  964:       	 if(j<length-1) j=j+1;
  965:          }
  966:       else
  967:        if (alterMe.charAt(j) == '%')
  968:          {
  969:       	 alterMe.setCharAt(j, '\\');
  970:       	 alterMe.insert(j + 1, "%");
  971:       	 length = length + 1;
  972:       	 if(j<length-1) j=j+1;
  973:          }*/
  974:       ++j;
  975:     }
  976:     return alterMe.toString();
  977:   }
  978: 
  979:   public static void parseXMLConfig(StringBuffer sb)
  980:   {
  981:     boolean finished = false;
  982:     // parse string and build document tree
  983:     Xparse parser = new Xparse();
  984:     parser.changeEntities = true;
  985:     Node root = parser.parse(sb.toString());
  986:     // printContents(root);
  987:     Vector databases = new Vector();
  988:     Vector tables = new Vector();
  989:     Vector layouts = new Vector();
  990:     Vector selects = new Vector();
  991:     Vector creates = new Vector();
  992:     Vector ids = new Vector();
  993:     int mode = -1;
  994: 
  995:     try
  996:     {
  997:       Node tempNode = root.find("convert/source", new int[] { 1, 1 });
  998:       if (tempNode == null)
  999:         throw new Error("parse error source tag missing");
 1000:       System.out.println(tempNode.name);
 1001:       int length = countNodes(tempNode);
 1002:       for (int i = 1; i <= length; i++)
 1003:       {
 1004: 
 1005:         DBBean database = new DBBean();
 1006:         tables = new Vector();
 1007:         layouts = new Vector();
 1008:         selects = new Vector();
 1009:         creates = new Vector();
 1010:         ids = new Vector();
 1011:         // parse dataBase
 1012:         Node node = root.find("convert/source/database/url", new int[] { 1, 1, i, 1 });
 1013:         Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });
 1014:         Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });
 1015:         Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });
 1016:         Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });
 1017: 
 1018:         if (node3 == null)
 1019:           throw new Error("parse error database tag missing");
 1020:         if (node == null)
 1021:           throw new Error("parse error url tag missing");
 1022:         if (node1 == null)
 1023:           throw new Error("parse error user tag missing");
 1024:         if (node2 == null)
 1025:           throw new Error("parse error password tag missing");
 1026:         String url = node.getCharacters();
 1027:         String user = node1.getCharacters();
 1028:         String password = node2.getCharacters();
 1029:         database.setURL(url.trim());
 1030:         database.setUserAndPasswd(user.trim(), password.trim());
 1031:         System.out.println(node.name + " " + node.getCharacters());
 1032:         System.out.println(node1.name + " " + node1.getCharacters());
 1033:         System.out.println(node2.name + " " + node2.getCharacters());
 1034:         String modeString = "";
 1035:         if (nodeMode == null)
 1036:           modeString = "convert";
 1037:         else
 1038:           modeString = nodeMode.getCharacters();
 1039:         if (modeString.equals("convert"))
 1040:           mode = DataBase.CONVERT_MODE;
 1041:         else if (modeString.equals("append"))
 1042:           mode = DataBase.APPEND_MODE;
 1043:         else if (modeString.equals("update"))
 1044:           mode = DataBase.UPDATE_MODE;
 1045:         //   if(node3!=null)
 1046:         // System.out.println(node3.name);
 1047: 
 1048:         int length2 = countNodes(node3);
 1049: 
 1050:         System.out.println("number of tables " + length2);
 1051: 
 1052:         for (int j = 1; j <= length2; ++j)
 1053:         {
 1054:           Node node4 = root.find("convert/source/database/table", new int[] { 1, 1, i, j });
 1055:           Node node5 = root.find("convert/source/database/table/select", new int[] { 1, 1, i, j, 1 });
 1056:           Node node6 = root.find("convert/source/database/table/create", new int[] { 1, 1, i, j, 1 });
 1057:           if (node4 != null)
 1058:             System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));
 1059:           if (node5 != null)
 1060:             System.out.println(node5.name + " " + node5.getCharacters());
 1061:           if (node6 != null)
 1062:             System.out.println(node6.name + " " + node6.getCharacters());
 1063:           if (node4 == null)
 1064:             throw new Error("parse error table tag missing");
 1065:           // if(node5==null) throw new Error("parse error select tag missing");
 1066:           // if(node6==null) throw new Error("parse error create tag missing");
 1067:           String name = (String) node4.attributes.get("name");
 1068:           String layout = (String) node4.attributes.get("layout");
 1069:           String id = (String) node4.attributes.get("id");
 1070:           System.out.println("id was " + id);
 1071:           if (name == null)
 1072:             throw new Error("parse error required table tag attribute name missing");
 1073:           if (layout == null)
 1074:             layout = "";
 1075:           if (id == null)
 1076:             id = "";
 1077:           if (name.equals(""))
 1078:             throw new Error("parse error table tag attribute must not be empty");
 1079:           tables.add(name);
 1080:           layouts.add(layout);
 1081:           ids.add(id);
 1082:           String query = (node5 == null) ? "" : node5.getCharacters();
 1083:           if (query.equals(""))
 1084:             System.err.println("Warning empty select tag or  select tag missing !!");
 1085:           query = (query.equals("")) ? "select * from " + database.getQC() + name + database.getQC() : query;
 1086:           selects.add(query);
 1087:           if (node6 != null)
 1088:             creates.add(node6.getCharacters().trim());
 1089:           else
 1090:             creates.add("");
 1091: 
 1092:         }
 1093:         databases.add(new DataBase(database, tables, layouts, selects, creates, ids, mode));
 1094:       }
 1095:       DBBean database = new DBBean();
 1096:       // parse dataBase
 1097:       Node node = root.find("convert/destination/database/url", new int[] { 1, 1, 1, 1 });
 1098:       Node node1 = root.find("convert/destination/database/user", new int[] { 1, 1, 1, 1, 1 });
 1099:       Node node2 = root.find("convert/destination/database/password", new int[] { 1, 1, 1, 1, 1 });
 1100:       String url = node.getCharacters();
 1101:       String user = node1.getCharacters();
 1102:       String password = node2.getCharacters();
 1103:       System.out.println(url);
 1104:       database.setURL(url.trim());
 1105:       database.setUserAndPasswd(user.trim(), password.trim());
 1106:       //databases.add(database);
 1107:       for (Iterator iter = databases.iterator(); iter.hasNext();)
 1108:       {
 1109:         DataBase db = (DataBase) iter.next();
 1110:         if (mode != DataBase.UPDATE_MODE)
 1111:           convertBatch(db.bean, database, db.tables, db.layouts, db.selects, db.creates, db.ids,mode);
 1112:         else
 1113:           update(db.bean.url, database.url, db.tables, db.layouts, db.selects, db.creates, db.ids, mode);
 1114: 
 1115:       }
 1116:       // printContents(node3);
 1117:       //   FM2SQL.fmInstance=new FM2SQL();
 1118:     } catch (Exception e)
 1119:     {
 1120:       // TODO Auto-generated catch block
 1121:       e.printStackTrace();
 1122:     }
 1123:     /*
 1124:     Node tempNode=root.find(rootNode,new int[] {1});
 1125:     if(tempNode==null) return rtTag;
 1126:     int count=1;
 1127:     /* 
 1128:     for(int i=0;i<tempNode.contents.v.size();++i)
 1129:     {
 1130:       // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
 1131:     }*/
 1132:     /*
 1133:        if(tempNode.contents.v.size()==0) return rtTag;
 1134:        Node notNull=null;
 1135:        Node rtNode=root.find(rootNode+"/rt",new int[] {1,1});
 1136:        rtTag=(rtNode==null) ? "finished":rtNode.getCharacters();
 1137:        System.out.println("rt tag is "+ rtTag);
 1138:        int length=0;//(tempNode.contents.length()-1)/2;
 1139:        for(int i=0;i<tempNode.contents.v.size();++i)    {
 1140:          Node node=(Node)tempNode.contents.v.elementAt(i);
 1141:          if(node.type.equals("element"))
 1142:          if(node.name.equals("doc"))length++;
 1143:          // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
 1144:        }
 1145:       if(length==0) rtTag="finished";        
 1146:        while(count<=length)
 1147:        {
 1148:           //System.out.println(count+" "+length);
 1149:          tempNode=root.find(rootNode+"/doc",new int[] {1,count});
 1150:          if(tempNode==null)
 1151:          {
 1152:            rtTag="finished";
 1153:            break;
 1154:          }    
 1155:          Bundle.Document doc = new Bundle.Document();
 1156:          Hashtable attributes=tempNode.attributes;
 1157:          int docID=0;
 1158:          int ver=0;
 1159:           if(attributes != null)
 1160:          {
 1161:            docID=Integer.parseInt((String)attributes.get("id"));
 1162:            ver=Integer.parseInt((String)attributes.get("ver"));
 1163:            doc.addData("docID",(String)attributes.get("id"));
 1164:            doc.addData("ver",(String)attributes.get("ver"));
 1165:          }
 1166:          bundle.docs.put(new Integer(docID),doc);
 1167:          bundle.documents.addElement(doc);
 1168:          // System.out.println("id " +docID+" ver "+ver);
 1169:          Node fileNode=root.find(rootNode+"/doc/file",new int[] {1,count,1});
 1170:          attributes=(fileNode==null)? null:fileNode.attributes;
 1171:          int fileID=0;
 1172:          int fileVer=0;
 1173:          if(attributes != null)
 1174:          {
 1175:            fileID=Integer.parseInt((String)attributes.get("id"));
 1176:            fileVer=Integer.parseInt((String)attributes.get("ver"));
 1177:            doc.addData("fileID",(String)attributes.get("id"));
 1178:            doc.addData("fileVer",(String)attributes.get("ver"));
 1179:            // System.out.println("fileid " +fileID+" ver "+fileVer);
 1180:          }
 1181:       // add all Document tags to actual Document
 1182:          for(int i=0;i<tempNode.contents.v.size();++i)
 1183:          {   
 1184:            Node node=(Node)tempNode.contents.v.elementAt(i);
 1185:            if(node.type.equals("element"))
 1186:             {
 1187:               //System.out.println(node.name+" "+node.getCharacters()+" "+node.contents.v.size());
 1188:               if(node.contents.v.size()>1) 
 1189:               {
 1190:                 for(int j=0;j<node.contents.v.size();++j)
 1191:                 {  
 1192:                   Node node2=(Node)node.contents.v.elementAt(j);
 1193:                   if(node2.type.equals("element"))
 1194:                    {
 1195:                      doc.addData(node2.name,node2.getCharacters());
 1196:                      //System.out.println(node2.name+" "+node2.getCharacters()+" "+node2.contents.v.size());
 1197:                    }
 1198:                 }
 1199:               } else doc.addData(node.name,node.getCharacters());
 1200:            }
 1201:          }
 1202:          bundle.docsLocator.put(doc.locator,doc); 
 1203:     
 1204:        bundle.documents.addElement(doc);
 1205:          count++;
 1206:        }      */
 1207: 
 1208:     // System.out.println(bundle.docs.size());
 1209:     // return rtTag;
 1210:   }
 1211:   public static Vector getXMLConfig(String xmlFile)
 1212:   {
 1213:     StringBuffer sb = null;
 1214:     try
 1215:     {
 1216:       // read XML Metadata from a file
 1217:       FileInputStream fi = new FileInputStream(xmlFile);
 1218:       InputStreamReader isr = new InputStreamReader(fi, "UTF-8");
 1219:       BufferedReader buffr = new BufferedReader(isr);
 1220:       sb = new StringBuffer();
 1221:       int c = 0;
 1222:       while ((c = buffr.read()) != -1)
 1223:       {
 1224:         char ch = (char) c;
 1225:         sb.append(ch);
 1226:         // System.out.print((char)c);
 1227:       }
 1228: 
 1229:     } catch (Exception e)
 1230:     {
 1231:       e.printStackTrace();
 1232:     }
 1233: 
 1234:     boolean finished = false;
 1235:     // parse string and build document tree
 1236:     Xparse parser = new Xparse();
 1237:     parser.changeEntities = true;
 1238:     Node root = parser.parse(sb.toString());
 1239:     // printContents(root);
 1240:     Vector databases = new Vector();
 1241:     Vector tables = new Vector();
 1242:     Vector layouts = new Vector();
 1243:     Vector selects = new Vector();
 1244:     Vector creates = new Vector();
 1245:     Vector ids = new Vector();
 1246: 
 1247:     int mode = -1;
 1248:     try
 1249:     {
 1250:       Node tempNode = root.find("convert/source", new int[] { 1, 1 });
 1251:       if (tempNode == null)
 1252:         throw new Error("parse error source tag missing");
 1253:       System.out.println(tempNode.name);
 1254:       int length = countNodes(tempNode);
 1255:       for (int i = 1; i <= length; i++)
 1256:       {
 1257: 
 1258:         DBBean database = new DBBean();
 1259:         tables = new Vector();
 1260:         layouts = new Vector();
 1261:         selects = new Vector();
 1262:         creates = new Vector();
 1263:         ids = new Vector();
 1264:         // parse dataBase
 1265:         Node node = root.find("convert/source/database/url", new int[] { 1, 1, i, 1 });
 1266:         Node node1 = root.find("convert/source/database/user", new int[] { 1, 1, i, 1, 1 });
 1267:         Node node2 = root.find("convert/source/database/password", new int[] { 1, 1, i, 1, 1 });
 1268:         Node node3 = root.find("convert/source/database", new int[] { 1, 1, i });
 1269:         Node nodeMode = root.find("convert/source/database/mode", new int[] { 1, 1, i, 1, 1 });
 1270: 
 1271:         if (node3 == null)
 1272:           throw new Error("parse error database tag missing");
 1273:         if (node == null)
 1274:           throw new Error("parse error url tag missing");
 1275:         if (node1 == null)
 1276:           throw new Error("parse error user tag missing");
 1277:         if (node2 == null)
 1278:           throw new Error("parse error password tag missing");
 1279:         String url = node.getCharacters();
 1280:         String user = node1.getCharacters();
 1281:         String password = node2.getCharacters();
 1282:         database.setURL(url.trim());
 1283:         database.setUserAndPasswd(user.trim(), password.trim());
 1284:         System.out.println(node.name + " " + node.getCharacters());
 1285:         System.out.println(node1.name + " " + node1.getCharacters());
 1286:         System.out.println(node2.name + " " + node2.getCharacters());
 1287:         String modeString = "";
 1288:         if (nodeMode == null)
 1289:           modeString = "convert";
 1290:         else
 1291:           modeString = nodeMode.getCharacters();
 1292:         if (modeString.equals("convert"))
 1293:           mode = DataBase.CONVERT_MODE;
 1294:         else if (modeString.equals("append"))
 1295:           mode = DataBase.APPEND_MODE;
 1296:         else if (modeString.equals("update"))
 1297:           mode = DataBase.UPDATE_MODE;
 1298: 
 1299:         //   if(node3!=null)
 1300:         // System.out.println(node3.name);
 1301: 
 1302:         int length2 = countNodes(node3);
 1303: 
 1304:         System.out.println("number of tables " + length2);
 1305: 
 1306:         for (int j = 1; j <= length2; ++j)
 1307:         {
 1308:           Node node4 = root.find("convert/source/database/table", new int[] { 1, 1, i, j });
 1309:           Node node5 = root.find("convert/source/database/table/select", new int[] { 1, 1, i, j, 1 });
 1310:           Node node6 = root.find("convert/source/database/table/create", new int[] { 1, 1, i, j, 1 });
 1311:           if (node4 != null)
 1312:             System.out.println(node4.name + " " + node4.attributes.get("layout").equals(""));
 1313:           if (node5 != null)
 1314:             System.out.println(node5.name + " " + node5.getCharacters());
 1315:           if (node6 != null)
 1316:             System.out.println(node6.name + " " + node6.getCharacters());
 1317:           if (node4 == null)
 1318:             throw new Error("parse error table tag missing");
 1319:           // if(node5==null) throw new Error("parse error select tag missing");
 1320:           // if(node6==null) throw new Error("parse error create tag missing");
 1321:           String name = (String) node4.attributes.get("name");
 1322:           String layout = (String) node4.attributes.get("layout");
 1323:           String id = (String) node4.attributes.get("id");
 1324:           System.out.println("id was " + id);
 1325: 
 1326:           if (name == null)
 1327:             throw new Error("parse error required table tag attribute name missing");
 1328:           if (layout == null)
 1329:             layout = "";
 1330:           if (id == null)
 1331:             id = "";
 1332:           if (name.equals(""))
 1333:             throw new Error("parse error table tag attribute must not be empty");
 1334:           tables.add(name);
 1335:           layouts.add(layout);
 1336:           ids.add(id);
 1337:           String query = (node5 == null) ? "" : node5.getCharacters();
 1338:           if (query.equals(""))
 1339:             System.err.println("Warning empty select tag or  select tag missing !!");
 1340:           query = (query.equals("")) ? "select * from " + database.getQC() + name + database.getQC() : query;
 1341:           selects.add(query);
 1342:           if (node6 != null)
 1343:             creates.add(node6.getCharacters().trim());
 1344:           else
 1345:             creates.add("");
 1346: 
 1347:         }
 1348:         databases.add(new DataBase(database, tables, layouts, selects, creates, ids, mode));
 1349:       }
 1350:       DBBean database = new DBBean();
 1351:       // parse dataBase
 1352:       Node node = root.find("convert/destination/database/url", new int[] { 1, 1, 1, 1 });
 1353:       Node node1 = root.find("convert/destination/database/user", new int[] { 1, 1, 1, 1, 1 });
 1354:       Node node2 = root.find("convert/destination/database/password", new int[] { 1, 1, 1, 1, 1 });
 1355:       String url = node.getCharacters();
 1356:       String user = node1.getCharacters();
 1357:       String password = node2.getCharacters();
 1358:       System.out.println(url);
 1359:       database.setURL(url.trim());
 1360:       database.setUserAndPasswd(user.trim(), password.trim());
 1361:       databases.add(new DataBase(database, null, null, null, null, null, 0));
 1362:       //databases.add(database);
 1363:       /*    for (Iterator iter = databases.iterator(); iter.hasNext();)
 1364:          {
 1365:            DataBase db = (DataBase) iter.next();
 1366:            convertBatch(db.bean,database,db.tables,db.layouts,db.selects,db.creates);
 1367:           
 1368:          }*/
 1369:       // printContents(node3);
 1370:       //   FM2SQL.fmInstance=new FM2SQL();
 1371:     } catch (Exception e)
 1372:     {
 1373:       // TODO Auto-generated catch block
 1374:       e.printStackTrace();
 1375:     }
 1376:     return databases;
 1377:   }
 1378: 
 1379:   private static int countNodes(Node tempNode)
 1380:   {
 1381:     int length = 0;
 1382:     for (int i = 0; i < tempNode.contents.v.size(); ++i)
 1383:     {
 1384:       Node node = (Node) tempNode.contents.v.elementAt(i);
 1385:       if (node.type.equals("element"))
 1386:       {
 1387:         if (node.name.equals("database"))
 1388:           length++;
 1389:         if (node.name.equals("table"))
 1390:           length++;
 1391:       }
 1392: 
 1393:       // System.out.println(((Node)tempNode.contents.v.elementAt(i)).attributes+" "+i);
 1394:     }
 1395:     return length;
 1396:   }
 1397:   private static void printContents(Node root)
 1398:   {
 1399: 
 1400:     Vector contents = (root.index == null) ? root.contents.v : root.index.v;
 1401:     for (int i = 0; i < contents.size(); ++i)
 1402:     {
 1403:       Node n = (Node) contents.elementAt(i);
 1404:       if (n.type.equals("element"))
 1405:       {
 1406:         System.out.println("tag " + n.name);
 1407:         System.out.println(n.getCharacters());
 1408:         //contents=n.contents.v i=0;
 1409:       }
 1410:       // System.out.println(n.type);
 1411: 
 1412:     }
 1413:   }
 1414:   public static void readXMLFile(String xmlFile)
 1415:   {
 1416:     try
 1417:     {
 1418:       // read XML Metadata from a file
 1419:       FileInputStream fi = new FileInputStream(xmlFile);
 1420:       InputStreamReader isr = new InputStreamReader(fi, "UTF-8");
 1421:       BufferedReader buffr = new BufferedReader(isr);
 1422:       StringBuffer sb = new StringBuffer();
 1423:       int c = 0;
 1424:       while ((c = buffr.read()) != -1)
 1425:       {
 1426:         char ch = (char) c;
 1427:         sb.append(ch);
 1428:         // System.out.print((char)c);
 1429:       }
 1430:       parseXMLConfig(sb);
 1431:     } catch (Exception e)
 1432:     {
 1433:       e.printStackTrace();
 1434:     }
 1435:   }
 1436:   public static class DataBase
 1437:   {
 1438:     DBBean bean;
 1439:     Vector creates;
 1440:     Vector selects;
 1441:     Vector layouts;
 1442:     Vector tables;
 1443:     Vector ids;
 1444:     final static int CONVERT_MODE = 1;
 1445:     final static int APPEND_MODE = 2;
 1446:     final static int UPDATE_MODE = 3;
 1447:     int mode = -1;
 1448: 
 1449:     public DataBase(DBBean bean, Vector tables, Vector layouts, Vector selects, Vector creates, Vector ids, int mode)
 1450:     {
 1451:       this.bean = bean;
 1452:       this.tables = tables;
 1453:       this.layouts = layouts;
 1454:       this.selects = selects;
 1455:       this.creates = creates;
 1456:       this.ids = ids;
 1457:       this.mode = mode;
 1458:       this.bean.setIDVector(ids);
 1459:     }
 1460:     public void exportToXML(BufferedWriter buffr) throws Exception
 1461:     {
 1462:       // ids=bean.getIDVector();
 1463:       buffr.write("    <database>\n");
 1464:       buffr.write("      <url>" + bean.url + "</url>\n");
 1465:       buffr.write("      <user>" + bean.user + "</user>\n");
 1466:       buffr.write("      <password>" + bean.passwd + "</password>\n");
 1467:       String modeString = "";
 1468:       if (mode == CONVERT_MODE)
 1469:         modeString = "convert";
 1470:       else if (mode == APPEND_MODE)
 1471:         modeString = "append";
 1472:       else if (mode == UPDATE_MODE)
 1473:         modeString = "update";
 1474: 
 1475:       buffr.write("      <mode>" + modeString + "</mode>\n");
 1476:       int index = 0;
 1477:       while (index < tables.size())
 1478:       {
 1479:         String table = (String) tables.get(index);
 1480:         String layout = (String) layouts.get(index);
 1481:         String select = (String) selects.get(index);
 1482:         String create = (String) creates.get(index);
 1483:         String id = (String) ids.get(index);
 1484: 
 1485:         buffr.write("      <table name = \"" + table + "\" layout = \"" + layout + "\" id = \"" + id + "\" >\n");
 1486:         buffr.write("         <select>" + convertToEntities(select) + "</select>\n");
 1487:         if (!create.equals(""))
 1488:           buffr.write("         <create>" + create + "         </create>\n");
 1489:         buffr.write("      </table>\n");
 1490:         index++;
 1491:       }
 1492:       buffr.write("    </database>\n");
 1493:     }
 1494:     public String toString()
 1495:     {
 1496:       return bean.url + " " + tables;
 1497:     }
 1498: 
 1499:   }
 1500:   public static String convertToUTF8(Object command)
 1501:   {
 1502:     String str = null;
 1503:     try
 1504:     {
 1505:       str = new String(command.toString().getBytes("UTF-8"));
 1506:     } catch (UnsupportedEncodingException e)
 1507:     {
 1508:       // TODO Auto-generated catch block
 1509:       e.printStackTrace();
 1510:     }
 1511:     return str;
 1512:   }
 1513:   public static void writeConfig(String file, DataBase source, DataBase destination) throws Exception
 1514:   {
 1515:     if (!file.toLowerCase().endsWith(".xml"))
 1516:       file += ".xml";
 1517:     File f = new File(file);
 1518: 
 1519:     FileOutputStream fout = new FileOutputStream(f);
 1520:     OutputStreamWriter outsw = new OutputStreamWriter(fout, "UTF-8");
 1521:     BufferedWriter buffw = new BufferedWriter(outsw);
 1522:     buffw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
 1523:     buffw.newLine();
 1524:     buffw.write("<convert>\n");
 1525:     buffw.write("  <source>\n");
 1526:     source.exportToXML(buffw);
 1527:     buffw.write("  </source>\n");
 1528:     buffw.write("\n  <destination>\n");
 1529:     destination.exportToXML(buffw);
 1530:     buffw.write("  </destination>\n");
 1531:     buffw.write("</convert>\n");
 1532:     buffw.close();
 1533:   }
 1534: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>