📄 createtablescriptsgenerator.java
字号:
/* * CreateTableScriptsGenerator.java * * Copyright (C) 2002, 2003, 2004, 2005, 2006 Takis Diakoumis * * 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 any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */package org.executequery.gui.scriptgenerators;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.util.Hashtable;import java.util.Vector;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JOptionPane;import javax.swing.JProgressBar;import javax.swing.SwingUtilities;import org.executequery.GUIUtilities;import org.executequery.gui.GeneratedScriptViewer;import org.executequery.gui.browser.ColumnConstraint;import org.executequery.gui.browser.ColumnData;import org.executequery.util.Log;import org.underworldlabs.util.DateUtils;import org.underworldlabs.swing.util.SwingWorker;/* ---------------------------------------------------------- * CVS NOTE: Changes to the CVS repository prior to the * release of version 3.0.0beta1 has meant a * resetting of CVS revision numbers. * ---------------------------------------------------------- *//** * * @author Takis Diakoumis * @version $Revision: 1.5 $ * @date $Date: 2006/07/16 06:48:37 $ */public class CreateTableScriptsGenerator { public static final int SUCCESS = 0; public static final int CANCEL_FAIL = 1; /** The generator object */ private ScriptGenerator generator; /** The progress dialog */ private ProgressDialog progDialog; /** The worker thread */ private SwingWorker worker; /** The file to save to */ private File file; public CreateTableScriptsGenerator(ScriptGenerator generator) { this.generator = generator; } public void generate() { worker = new SwingWorker() { public Object construct() { return doWork(); } public void finished() { progDialog.setStatus(-1); Hashtable result = (Hashtable)get(); try { Thread.sleep(400); } catch (InterruptedException intExc) {} progDialog.dispose(); if (result.containsKey("Done")) { int yesno = GUIUtilities.displayYesNoDialog( "The script was generated successfully to " + result.get("Done") + ".\nDo you wish to view the generated script?", "Finished"); if (yesno == JOptionPane.YES_OPTION) { final String script = (String)result.get("script"); //String fileName = (String)result.get("Done"); SwingUtilities.invokeLater(new Runnable() { public void run() { GUIUtilities.addCentralPane( GeneratedScriptViewer.TITLE, GeneratedScriptViewer.FRAME_ICON, new GeneratedScriptViewer(script, file), GeneratedScriptViewer.TITLE, true); } }); } generator.setResult(SUCCESS); generator.dispose(); return; } else if (result.containsKey("cancelled")) { GUIUtilities.displayInformationMessage("Process Cancelled."); generator.setResult(CANCEL_FAIL); } else if (result.containsKey("Failed")) { String message = "An error occured generating the script.\n"; Object object = result.get("Failed"); if (object instanceof Exception) { Exception e = (Exception)object; message += "\n" + e.getMessage(); GUIUtilities.displayExceptionErrorDialog(message, e); } else { GUIUtilities.displayErrorMessage(message); } generator.setResult(CANCEL_FAIL); } generator.dispose(); } }; worker.start(); } private Object doWork() { Vector selections = generator.getSelectedTables(); Hashtable result = new Hashtable(); file = new File(generator.getScriptFilePath()); progDialog = new ProgressDialog(selections.size()); PrintWriter writer = null; String CREATE_TABLE = "CREATE TABLE "; String ALTER_TABLE = "ALTER TABLE "; String NOT_NULL = " NOT NULL"; String CONSTRAINT = "CONSTRAINT "; String KEY = " KEY "; String REFERENCES = " REFERENCES "; String ADD = " ADD "; String EMPTY = ""; char B_OPEN = '('; char B_CLOSE = ')'; char SPACE = ' '; char NEW_LINE = '\n'; char COMMA = ','; char SEMI_COLON = ';'; char DOT = '.'; boolean includeConstraints = generator.includeConstraints(); boolean useCreateForConstraints = generator.includeConstraintsInCreate(); boolean useAlterForConstraints = generator.includeConstraintsAsAlter(); StringBuffer pKeys = null; StringBuffer fKeys = null; if (useAlterForConstraints) { pKeys = new StringBuffer(); fKeys = new StringBuffer(); } try { generator.enableButtons(false); Log.info("Generating SQL script..."); writer = new PrintWriter(new FileWriter(file, false), true); StringBuffer sb_script = new StringBuffer(1000); StringBuffer sb_header = new StringBuffer(500); String line_1 = "-- ---------------------------------------------------\n"; sb_header.append(line_1).append("--\n-- SQL script "). append("generated by Execute Query.\n-- Generated "); DateUtils dt = new DateUtils(); sb_header.append(dt.getLongDateTime()).append("\n--\n"). append(line_1).append("--\n-- Program: "). append(file.getName()).append("\n-- Description: SQL create "). append("tables script.\n-- Schema: "). append(generator.getSchemaName()).append("\n-- Database: "). append(generator.getDatabaseProductName()).append("\n--\n").append(line_1). append(NEW_LINE).append(NEW_LINE); writer.println(sb_header.toString()); sb_script.append(sb_header); sb_header = null; line_1 = null; dt = null; int sepLength = -1; StringBuffer sb = new StringBuffer(500); StringBuffer sb_spaces_1 = new StringBuffer(50); StringBuffer sb_spaces_2 = new StringBuffer(30); String initialSpaces = " "; int s_size = selections.size(); Vector columnConstraints = new Vector(); for (int i = 0; i < s_size; i++) { if (Thread.interrupted()) { file.delete(); progDialog.setStatus(-1); throw new InterruptedException(); } String tableName = selections.elementAt(i).toString(); ColumnData[] cda = generator.getColumnDataArray(tableName); sb.append(CREATE_TABLE). append(tableName). append(SPACE). append(B_OPEN); if (cda.length > 0) { sb_spaces_1.append(initialSpaces); int tn_length = tableName.length(); // spaces between beginning of line and column name for (int k = 0; k < tn_length; k++) { sb_spaces_1.append(SPACE); } String spaces_1 = sb_spaces_1.toString(); for (int j = 0; j < cda.length; j++) { ColumnData column = cda[j]; sepLength = getSpaceLength(cda) + 5; if (j > 0) { sb.append(spaces_1); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -