/hsqldb/src/org/hsqldb/util/ZaurusDatabaseManager.java
Java | 670 lines | 469 code | 114 blank | 87 comment | 156 complexity | 1a63f12accf03cde2524342400d61d19 MD5 | raw file
- /* Copyright (c) 2001-2008, The HSQL Development Group
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * Neither the name of the HSQL Development Group nor the names of its
- * contributors may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- package org.hsqldb.util;
- import java.io.IOException;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- import java.awt.BorderLayout;
- import java.awt.Button;
- import java.awt.CardLayout;
- import java.awt.Dimension;
- import java.awt.FileDialog;
- import java.awt.Font;
- import java.awt.Frame;
- import java.awt.GridLayout;
- import java.awt.Insets;
- import java.awt.Menu;
- import java.awt.MenuBar;
- import java.awt.MenuItem;
- import java.awt.Panel;
- import java.awt.TextArea;
- import java.awt.Toolkit;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.KeyEvent;
- import java.awt.event.KeyListener;
- import java.awt.event.WindowListener;
- import java.awt.image.MemoryImageSource;
- import org.hsqldb.lib.java.JavaSystem;
- /**
- * Class declaration
- *
- *
- * @version 1.0.0.1
- * @author ulrivo@users
- *
- */
- public class ZaurusDatabaseManager extends DatabaseManager
- implements ActionListener, WindowListener, KeyListener {
- // (ulrivo): new buttons to switch the cards
- Button butTree;
- Button butCommand;
- Button butResult;
- Button butEditor;
- // (ulrivo): Panel pCard with CardLayout inside Frame fMain
- Panel pCard;
- CardLayout layoutCard;
- // the editor/input form
- ZaurusEditor eEditor;
- // (ulrivo): variables set by arguments from the commandline
- static String defDriver;
- static String defURL;
- static String defUser;
- static String defPassword;
- static String defQuery;
- static String defDirectory;
- static String defDatabase;
- static int defWidth = 237;
- static int defHeight = 259;
- static int defLocX = 0;
- static int defLocY = 0;
- /**
- * Method declaration
- *
- *
- * @param c
- */
- public void connect(Connection c) {
- if (c == null) {
- return;
- }
- if (cConn != null) {
- try {
- cConn.close();
- } catch (SQLException e) {}
- }
- cConn = c;
- try {
- dMeta = cConn.getMetaData();
- sStatement = cConn.createStatement();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- refreshTree();
- }
- /**
- * Method declaration
- *
- *
- * @param arg
- */
- public static void main(String[] arg) {
- bMustExit = true;
- // (ulrivo): read all arguments from the command line
- int i = 0;
- while (i < arg.length) {
- if (arg[i].equalsIgnoreCase("-driver") && (i + 1 < arg.length)) {
- i++;
- defDriver = arg[i];
- } else if (arg[i].equalsIgnoreCase("-url")
- && (i + 1 < arg.length)) {
- i++;
- defURL = arg[i];
- } else if (arg[i].equalsIgnoreCase("-width")
- && (i + 1 < arg.length)) {
- i++;
- try {
- defWidth = Integer.parseInt(arg[i]);
- } catch (Exception e) {}
- } else if (arg[i].equalsIgnoreCase("-height")
- && (i + 1 < arg.length)) {
- i++;
- try {
- defHeight = Integer.parseInt(arg[i]);
- } catch (Exception e) {}
- } else if (arg[i].equalsIgnoreCase("-locx")
- && (i + 1 < arg.length)) {
- i++;
- try {
- defLocX = Integer.parseInt(arg[i]);
- } catch (Exception e) {}
- } else if (arg[i].equalsIgnoreCase("-locy")
- && (i + 1 < arg.length)) {
- i++;
- try {
- defLocY = Integer.parseInt(arg[i]);
- } catch (Exception e) {}
- } else if (arg[i].equalsIgnoreCase("-user")
- && (i + 1 < arg.length)) {
- i++;
- defUser = arg[i];
- } else if (arg[i].equalsIgnoreCase("-password")
- && (i + 1 < arg.length)) {
- i++;
- defPassword = arg[i];
- } else if (arg[i].equalsIgnoreCase("-query")
- && (i + 1 < arg.length)) {
- i++;
- defQuery = arg[i];
- } else if (arg[i].equalsIgnoreCase("-defDirectory")
- && (i + 1 < arg.length)) {
- i++;
- defDirectory = arg[i];
- } else if (arg[i].equalsIgnoreCase("-database")
- && (i + 1 < arg.length)) {
- i++;
- defDatabase = arg[i];
- } else {
- showUsage();
- return;
- }
- i++;
- }
- ZaurusDatabaseManager m = new ZaurusDatabaseManager();
- m.main();
- // (ulrivo): make default connection if arguments set via the command line
- Connection c = null;
- if ((defDriver != null && defURL != null) || (defDatabase != null)) {
- if (defDatabase != null) {
- defDriver = "org.hsqldb.jdbcDriver";
- defURL = "jdbc:hsqldb:" + defDatabase;
- defUser = "sa";
- defPassword = "";
- }
- try {
- Class.forName(defDriver).newInstance();
- c = DriverManager.getConnection(defURL, defUser, defPassword);
- } catch (Exception e) {
- System.out.println("No connection for " + defDriver + " at "
- + defURL);
- e.printStackTrace();
- }
- } else {
- c = ZaurusConnectionDialog.createConnection(m.fMain, "Connect",
- new Insets(defWidth, defHeight, defLocX, defLocY));
- }
- if (c == null) {
- return;
- }
- m.connect(c);
- }
- private static void showUsage() {
- System.out.println(
- "Usage: java org.hsqldb.util.ZaurusDatabaseManager [options]");
- System.out.println("where options could be:");
- System.out.println(
- "If the next two options are set, the specified connection will be used:");
- System.out.println(" -driver dr");
- System.out.println(" -url address");
- System.out.println("-user name");
- System.out.println("-password passw");
- System.out.println("Alternative the database argument is used,");
- System.out.println(
- "and the hsqldb Driver Standalone is choosen for user 'sa'.");
- System.out.println("-database db");
- System.out.println(
- "-query qu the query qu will be read during initialization");
- System.out.println(
- "-defaultDirectory defdir default dir for the file open dialog");
- System.out.println(
- "If the next two options are set, the frame will be set to the specified values:");
- System.out.println(" -width width");
- System.out.println(" -height height");
- System.out.println("-locX positon left ");
- System.out.println("-locY positon top ");
- System.out.println("");
- System.out.println(
- "1. Example: java org.hsqldb.util.ZaurusDatabaseManager +");
- System.out.println(" -driver 'org.hsqldb.jdbcDriver' +");
- System.out.println(" -url 'jdbc:hsqldb:test'");
- System.out.println(
- "2. Example: java org.hsqldb.util.ZaurusDatabaseManager +");
- System.out.println(" -database 'test'");
- }
- /**
- * Method declaration
- *
- */
- public void main() {
- fMain = new Frame("HSQLDB Database Manager for Zaurus");
- imgEmpty = createImage(new MemoryImageSource(2, 2, new int[4 * 4], 2,
- 2));
- fMain.setIconImage(imgEmpty);
- fMain.addWindowListener(this);
- MenuBar bar = new MenuBar();
- // no shortcuts used
- String[] fitems = {
- "-Connect...", "--", "-Open Script...", "-Save Script...",
- "-Save Result...", "--", "-Exit"
- };
- addMenu(bar, "File", fitems);
- String[] vitems = {
- "-Refresh Tree", "--", "-View Tree", "-View Command",
- "-View Result", "-View Editor", "--", "-Results in Grid",
- "-Results in Text"
- };
- addMenu(bar, "View", vitems);
- String[] sitems = {
- "-SELECT", "-INSERT", "-UPDATE", "-DELETE", "--", "-CREATE TABLE",
- "-DROP TABLE", "-CREATE INDEX", "-DROP INDEX", "--", "-SCRIPT",
- "-SHUTDOWN", "--", "-Test Script"
- };
- addMenu(bar, "SQL", sitems);
- Menu recent = new Menu("Recent");
- mRecent = new Menu("Recent");
- bar.add(mRecent);
- String[] soptions = {
- "-AutoCommit on", "-AutoCommit off", "-Commit", "-Rollback", "--",
- "-Disable MaxRows", "-Set MaxRows to 100", "--", "-Logging on",
- "-Logging off", "--",
- "-Insert test data" // , "-Transfer"
- };
- addMenu(bar, "Options", soptions);
- String[] shelp = { "-Show HTML-Help in browser" };
- addMenu(bar, "?", shelp);
- fMain.setMenuBar(bar);
- fMain.setSize(defWidth, defHeight);
- fMain.add("Center", this);
- initGUI();
- sRecent = new String[iMaxRecent];
- Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
- Dimension size = fMain.getSize();
- // (ulrivo): arguments from command line or
- // full size on screen with less than 640 width
- if (d.width > 640) {
- fMain.setLocation((d.width - size.width) / 2,
- (d.height - size.height) / 2);
- } else if (defWidth > 0 && defHeight > 0) {
- fMain.setLocation(defLocX, defLocY);
- fMain.setSize(defWidth, defHeight);
- } else {
- fMain.setLocation(0, 0);
- fMain.setSize(d);
- }
- fMain.show();
- // (ulrivo): load query from command line
- if (defQuery != null) {
- txtCommand.setText(DatabaseManagerCommon.readFile(defQuery));
- }
- txtCommand.requestFocus();
- }
- /**
- * Method declaration
- *
- *
- * @param k
- */
- public void keyTyped(KeyEvent k) {
- // Strg+Enter or Shift+Enter executes the actual SQL statement in command panel
- if (k.getKeyChar() == '\n'
- && (k.isControlDown() || k.isShiftDown())) {
- k.consume();
- execute();
- layoutCard.show(pCard, "result");
- }
- }
- public void keyPressed(KeyEvent k) {
- // System.out.println("Key pressed: " + k.getKeyCode());
- }
- /**
- * Method declaration
- *
- *
- * @param ev
- */
- public void actionPerformed(ActionEvent ev) {
- String s = ev.getActionCommand();
- if (s == null) {
- if (ev.getSource() instanceof MenuItem) {
- MenuItem i;
- s = ((MenuItem) ev.getSource()).getLabel();
- }
- }
- if (s.equals("Execute")) {
- execute();
- layoutCard.show(pCard, "result");
- } else if (s.equals("Tree")) {
- layoutCard.show(pCard, "tree");
- } else if (s.equals("Command")) {
- layoutCard.show(pCard, "command");
- } else if (s.equals("Result")) {
- layoutCard.show(pCard, "result");
- } else if (s.equals("Editor")) {
- layoutCard.show(pCard, "editor");
- } else if (s.equals("Exit")) {
- windowClosing(null);
- } else if (s.equals("Logging on")) {
- JavaSystem.setLogToSystem(true);
- } else if (s.equals("Logging off")) {
- JavaSystem.setLogToSystem(false);
- } else if (s.equals("Refresh Tree")) {
- refreshTree();
- layoutCard.show(pCard, "tree");
- } else if (s.startsWith("#")) {
- int i = Integer.parseInt(s.substring(1));
- txtCommand.setText(sRecent[i]);
- } else if (s.equals("Connect...")) {
- connect(ZaurusConnectionDialog.createConnection(fMain, "Connect",
- new Insets(defWidth, defHeight, defLocX, defLocY)));
- refreshTree();
- layoutCard.show(pCard, "tree");
- } else if (s.equals("View Tree")) {
- layoutCard.show(pCard, "tree");
- } else if (s.equals("View Command")) {
- layoutCard.show(pCard, "command");
- } else if (s.equals("View Result")) {
- layoutCard.show(pCard, "result");
- } else if (s.equals("View Editor")) {
- layoutCard.show(pCard, "editor");
- } else if (s.equals("Results in Grid")) {
- iResult = 0;
- pResult.removeAll();
- pResult.add("Center", gResult);
- pResult.doLayout();
- layoutCard.show(pCard, "result");
- } else if (s.equals("Open Script...")) {
- FileDialog f = new FileDialog(fMain, "Open Script",
- FileDialog.LOAD);
- // (ulrivo): set default directory if set from command line
- if (defDirectory != null) {
- f.setDirectory(defDirectory);
- }
- f.show();
- String file = f.getFile();
- if (file != null) {
- txtCommand.setText(
- DatabaseManagerCommon.readFile(f.getDirectory() + file));
- }
- layoutCard.show(pCard, "command");
- } else if (s.equals("Save Script...")) {
- FileDialog f = new FileDialog(fMain, "Save Script",
- FileDialog.SAVE);
- // (ulrivo): set default directory if set from command line
- if (defDirectory != null) {
- f.setDirectory(defDirectory);
- }
- f.show();
- String file = f.getFile();
- if (file != null) {
- DatabaseManagerCommon.writeFile(f.getDirectory() + file,
- txtCommand.getText());
- }
- } else if (s.equals("Save Result...")) {
- FileDialog f = new FileDialog(fMain, "Save Result",
- FileDialog.SAVE);
- // (ulrivo): set default directory if set from command line
- if (defDirectory != null) {
- f.setDirectory(defDirectory);
- }
- f.show();
- String file = f.getFile();
- if (file != null) {
- showResultInText();
- DatabaseManagerCommon.writeFile(f.getDirectory() + file,
- txtResult.getText());
- }
- } else if (s.equals("Results in Text")) {
- iResult = 1;
- pResult.removeAll();
- pResult.add("Center", txtResult);
- pResult.doLayout();
- showResultInText();
- layoutCard.show(pCard, "result");
- } else if (s.equals("AutoCommit on")) {
- try {
- cConn.setAutoCommit(true);
- } catch (SQLException e) {}
- } else if (s.equals("AutoCommit off")) {
- try {
- cConn.setAutoCommit(false);
- } catch (SQLException e) {}
- } else if (s.equals("Commit")) {
- try {
- cConn.commit();
- } catch (SQLException e) {}
- } else if (s.equals("Insert test data")) {
- insertTestData();
- layoutCard.show(pCard, "result");
- } else if (s.equals("Rollback")) {
- try {
- cConn.rollback();
- } catch (SQLException e) {}
- } else if (s.equals("Disable MaxRows")) {
- try {
- sStatement.setMaxRows(0);
- } catch (SQLException e) {}
- } else if (s.equals("Set MaxRows to 100")) {
- try {
- sStatement.setMaxRows(100);
- } catch (SQLException e) {}
- } else if (s.equals("SELECT")) {
- showHelp(DatabaseManagerCommon.selectHelp);
- } else if (s.equals("INSERT")) {
- showHelp(DatabaseManagerCommon.insertHelp);
- } else if (s.equals("UPDATE")) {
- showHelp(DatabaseManagerCommon.updateHelp);
- } else if (s.equals("DELETE")) {
- showHelp(DatabaseManagerCommon.deleteHelp);
- } else if (s.equals("CREATE TABLE")) {
- showHelp(DatabaseManagerCommon.createTableHelp);
- } else if (s.equals("DROP TABLE")) {
- showHelp(DatabaseManagerCommon.dropTableHelp);
- } else if (s.equals("CREATE INDEX")) {
- showHelp(DatabaseManagerCommon.createIndexHelp);
- } else if (s.equals("DROP INDEX")) {
- showHelp(DatabaseManagerCommon.dropIndexHelp);
- } else if (s.equals("CHECKPOINT")) {
- showHelp(DatabaseManagerCommon.checkpointHelp);
- } else if (s.equals("SCRIPT")) {
- showHelp(DatabaseManagerCommon.scriptHelp);
- } else if (s.equals("SHUTDOWN")) {
- showHelp(DatabaseManagerCommon.shutdownHelp);
- } else if (s.equals("SET")) {
- showHelp(DatabaseManagerCommon.setHelp);
- } else if (s.equals("Test Script")) {
- showHelp(DatabaseManagerCommon.testHelp);
- } else if (s.equals("Show HTML-Help in browser")) {
- try {
- System.out.println("Starting Opera on index.html");
- Runtime.getRuntime().exec(new String[] {
- "opera", "/home/QtPalmtop/help/html/hsqldb/index.html"
- });
- } catch (IOException e) {
- System.out.println("A problem with Opera occured.");
- }
- }
- }
- /**
- * Method declaration
- *
- */
- private void initGUI() {
- Panel pQuery = new Panel();
- Panel pCommand = new Panel();
- // define a Panel pCard which takes four different cards/views:
- // tree of tables, command SQL text area, result window and an editor/input form
- pCard = new Panel();
- layoutCard = new CardLayout(2, 2);
- pCard.setLayout(layoutCard);
- // four buttons at the top to quickly switch between the four views
- butTree = new Button("Tree");
- butCommand = new Button("Command");
- butResult = new Button("Result");
- butEditor = new Button("Editor");
- butTree.addActionListener(this);
- butCommand.addActionListener(this);
- butResult.addActionListener(this);
- butEditor.addActionListener(this);
- Panel pButtons = new Panel();
- pButtons.setLayout(new GridLayout(1, 4, 8, 8));
- pButtons.add(butTree);
- pButtons.add(butCommand);
- pButtons.add(butResult);
- pButtons.add(butEditor);
- pResult = new Panel();
- pQuery.setLayout(new BorderLayout());
- pCommand.setLayout(new BorderLayout());
- pResult.setLayout(new BorderLayout());
- Font fFont = new Font("Dialog", Font.PLAIN, 12);
- txtCommand = new TextArea(5, 40);
- txtCommand.addKeyListener(this);
- txtResult = new TextArea(20, 40);
- txtCommand.setFont(fFont);
- txtResult.setFont(new Font("Courier", Font.PLAIN, 12));
- butExecute = new Button("Execute");
- butExecute.addActionListener(this);
- pCommand.add("South", butExecute);
- pCommand.add("Center", txtCommand);
- gResult = new Grid();
- setLayout(new BorderLayout());
- pResult.add("Center", gResult);
- tTree = new Tree();
- tTree.setMinimumSize(new Dimension(200, 100));
- gResult.setMinimumSize(new Dimension(200, 300));
- eEditor = new ZaurusEditor();
- pCard.add("tree", tTree);
- pCard.add("command", pCommand);
- pCard.add("result", pResult);
- pCard.add("editor", eEditor);
- fMain.add("Center", pCard);
- fMain.add("North", pButtons);
- doLayout();
- fMain.pack();
- }
- protected void refreshTree() {
- super.refreshTree();
- eEditor.refresh(cConn);
- }
- }