--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="content-type"
+ content="text/html; charset=ISO-8859-1">
+ <title>Choosing a Bookmark Name</title>
+ <link rel="stylesheet" href="book.css" charset="ISO-8859-1" type="text/css"></head>
+</head>
+<body>
+<h1>Choosing a Bookmark Name</h1>
+<p>Provide a unique name for your bookmark:</p>
+
+<img src="images/new_bookmark/page3.gif" />
+
+</body>
+</html>
<p>Once this menu item is selected, you will see the "New Bookmark" wizard:</p>
-<img src="images/newbookmark_wizard.gif" />
+<img src="images/new_bookmark/page1.gif" />
+
+<p>Creating Bookmarks involve four things:
+
+<ol>
+<li><a href="jdbc_driver.html">specify a JDBC Driver</a>;
+<li><a href="jdbc_connection_details.html">provide the connection details (userid, password and JDBC URL)</a>;
+<li><a href="bookmark_name.html">choose a name for your bookmark</a>; and
+<li><a href="schema_rules.html">optionally, specify which schemas you want to view</a>.
+</ol>
-<p>The data that the form asks of you is:
-<ul>
- <li><b>Bookmark name:</b> Is your private name of the bookmark you
- are creating. It will appear in the view after is created. For example <span
- style="font-weight: bold;">Test</span>.</li>
- <li><b>Username:</b> The username for accessing the database. For
- example <span style="font-weight: bold;">SCOTT</span> for the classical Oracle
- examples.</li>
- <li><b>Password:</b> The password for that username. For example
- "TIGER" for the "SCOTT" user.</li>
- <li><b>Prompt for Password:</b> Check this box if you want to be prompted for a password
- every time you try to connect to the database.</li>
- <li><b>Schema</b>: (optional): The schema of the user. We can leave
- it blank.</li>
- <li><b>Connect</b>: Connect string, the format is (for Oracle) <font
- face="Geneva, Arial, Helvetica, sans-serif" size="2"><span
- style="font-weight: bold;">jdbc:[database]:[type]:@[host]:[port]:[database]</span>,
- for example, for an Oracle database called DEV based on the same computer
- you could put <span style="font-weight: bold;">jdbc:oracle:thin:@localhost:1521:DEV</span>.</font></li>
- <li><b>Driver</b>: The driver name, it should be in the documentation
- of the JDBC driver. For Oracle, is usually <span
- style="font-weight: bold;">oracle.jdbc.OracleDriver</span> or <span
- style="font-weight: bold;">oracle.jdbc.driver.OracleDriver </span> (Oracle before
- version 9)</li>
- <li><b>Type</b>: The type of the database. It will be used by Quantum
- to adapt the SQL queries to the particular incompatibilites of each. The generic
- should work for most of the features, so if you don't find your database on
- the drop-down, use the <span
- style="font-weight: bold;">Generic SQL</span>.<br>
- </li>
- <li><b>Driver Filename</b>: You can select the <span
- style="font-weight: bold;">.jar</span> or <span
- style="font-weight: bold;">.zip</span> file where the driver is located. For
- example in Oracle is usually at <span
- style="font-weight: bold;">C:\Oracle\jdbc\lib\classes12.jar</span>, being C:\Oracle
- the installation directory of oracle.</li>
-</ul>
-<p>Other examples (only as orientation, your particular data may be
-different)<br>
-<p>
-For <span style="font-weight: bold;">MySql</span> (in Windows):</p>
-<pre>Connect: <span style="font-weight: bold;">jdbc:mysql://localhost/test</span><br>Driver: <span
- style="font-weight: bold;">com.mysql.jdbc.Driver</span><br>Driver Filename: <span
- style="font-weight: bold;">C:\mysql\jdbc\mysql-connector-java-2.0.4-bin.jar</span><br>
-</pre>
- <p>For <span
- style="font-weight: bold;">PostgreSql</span> (in Linux):</p>
-<pre>
- <br>Connect: <span
- style="font-weight: bold;">jdbc:postgresql://localhost/emsdevel</span><br>Driver: <span
- style="font-weight: bold;">org.postgresql.Driver</span><br>driver filename: <span
- style="font-weight: bold;">/opt/postgresql/share/java/postgresql.jar</span></pre>
</body>
</html>
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="content-type"
+ content="text/html; charset=ISO-8859-1">
+ <title>Specifying JDBC Connection Details</title>
+ <link rel="stylesheet" href="book.css" charset="ISO-8859-1" type="text/css"></head>
+</head>
+<body>
+<h1>Specifying JDBC Connection Details</h1>
+<p>Once a JDBC Driver has been selected, provide the JDBC connection details such as
+userid, password and JDBC connection URL.</p>
+
+<img src="images/new_bookmark/page2.gif" />
+
+<p>Please note that passwords are stored relatively unsecurely in a QuantumDB
+configuration file. A more secure option might be to select the "Prompt for
+Password" option. When this option is selected, QuantumDB will prompt the user
+for a password whenever it tries to connect to the database.
+
+<p>QuantumDB provides extra JDBC URL assistance for some well-known drivers. For example,
+if you're using the standard PostgreSQL driver, <code>org.postgresql.Driver</code>, you'll
+see the following screen:</p>
+
+<img src="images/new_bookmark/page2_postgresql.gif" />
+
+<p>Similarly, the standard IBM Informix driver provides the following screen:</p>
+
+<img src="images/new_bookmark/page2_informix.gif" />
+
+
+
+</body>
+</html>
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="content-type"
+ content="text/html; charset=ISO-8859-1">
+ <title>Creating a QuantumDB Bookmark</title>
+ <link rel="stylesheet" href="book.css" charset="ISO-8859-1" type="text/css"></head>
+</head>
+<body>
+<h1>Specifying a JDBC Driver</h1>
+<p>QuantumDB uses standard JDBC Drivers to access databases. The first step in
+setting up a database bookmark is, therefore, selecting a JDBC Driver.</p>
+
+<img src="images/new_bookmark/page1.gif" />
+
+<p>The first time you try to configure a bookmark, QuantumDB will already recognize
+one driver: the standard JDBC-ODBC driver provided with the Java Runtime Environment.
+For some people, this will be sufficient to access databases, but most people will
+probably choose to set up additional drivers.
+
+<p>Select the "Add Driver..." button to choose an alternate driver.</p>
+
+<img src="images/new_bookmark/add_driver.gif" />
+
+<p>Provide the details for the new driver. Most drivers require at least one .jar file.
+Specify the location of the .jar file(s), and the driver class name. Note that once you
+specify the .jar locations, you can use the "Browse..." button beside the class name
+field to select valid driver class names.
+
+<p>Finally, the Add Driver Wizard asks for a database type. If you're setting up a fairly
+standard driver (such as, for example, the standard Oracle or DB2 driver), QuantumDB will
+probably recognize the driver class name and select the appropriate driver from the list.
+Otherwise, choose the corresponding database type or, if your database type isn't listed,
+select "Generic JDBC".
+
+<p>The database type helps QuantumDB provide defaults for later parts of the bookmark set-up
+process, and also tells the plugin how to support some of the non-standard database features
+(such as sequences).
+
+</body>
+</html>
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <meta http-equiv="content-type"
+ content="text/html; charset=ISO-8859-1">
+ <title>Choosing Which Schemas You Want to View</title>
+ <link rel="stylesheet" href="book.css" charset="ISO-8859-1" type="text/css"></head>
+</head>
+<body>
+<h1>Choosing Which Schemas You Want to View</h1>
+<p>Optionally, the fourth page of the Bookmark Wizard lets you choose which
+schemas you want to work with.</p>
+
+<img src="images/new_bookmark/page4.gif" />
+
+<p>By default, bookmarks are set up to view all schemas.
+
+<p>If your database doesn't support schemas (like, for example, MySQL), then the
+schema selection rule has no effect.
+
+</body>
+</html>
<toc label="QuantumDB User's Guide" topic="doc/index.html">
<topic label="Getting Started">
<topic label="Opening the Quantum DB Perspective" href="doc/getting_started_perspective.html" />
- <topic label="Creating bookmarks" href="doc/getting_started_connections.html" />
+ <topic label="Creating bookmarks" href="doc/getting_started_connections.html">
+ <topic label="Choosing JDBC Drivers" href="doc/jdbc_driver.html" />
+ <topic label="JDBC Connection Details" href="doc/jdbc_connection_details.html" />
+ <topic label="Selecting a Bookmark Name" href="doc/bookmark_name.html" />
+ <topic label="Choosing Schemas" href="doc/schema_rules.html" />
+ </topic>
</topic>
</toc>
<plugin
id="net.sourceforge.phpeclipse.quantum.sql"
name="%quantum.name"
- version="2.3.3"
- provider-name="Tom Schneider, Julen Parra, BC Holmes"
+ version="2.4.1"
+ provider-name="Tom Schneider, Julen Parra, BC Holmes, JSurfer.de"
class="com.quantum.QuantumPlugin">
<runtime>
<view name="%driverview.name"
icon="icons/driver.gif"
category="com.quantum.views"
- class="com.quantum.view.JDBCDriverView"
+ class="com.quantum.view.driver.JDBCDriverView"
id="com.quantum.view.JDBCDriverView">
</view>
<view
<page
name="PHP Connecting"
category="com.quantum.preferences"
- class="com.quantum.preferences.php.PHPSQLConnectionPreferencePage"
- id="com.quantum.preferences.php.PHPSQLConnectionPreferencePage">
+ class="com.quantum.php.preferences.PHPSQLConnectionPreferencePage"
+ id="com.quantum.php.preferences.PHPSQLConnectionPreferencePage">
</page>
<page
name="PHP Templates"
category="com.quantum.preferences"
- class="com.quantum.preferences.php.PHPSQLTemplatesPreferencePage"
- id="com.quantum.preferences.php.PHPSQLTemplatesPreferencePage">
+ class="com.quantum.php.preferences.PHPSQLTemplatesPreferencePage"
+ id="com.quantum.php.preferences.PHPSQLTemplatesPreferencePage">
</page>
</extension>
<!-- Menu for Bookmark View -->
public static final String CLASS = "class";
public static final String CLEAR = "clear";
public static final String CLOSE = "close";
+ public static final String CLOSE_DISABLED = "close_disabled";
+ public static final String CLOSE_ALL = "close_all";
+ public static final String CLOSE_ALL_DISABLED = "close_all_disabled";
public static final String COLUMN = "column";
public static final String CONNECT = "connect";
public static final String CONNECTED = "connected";
public static final String EDIT = "edit";
public static final String ENTITYGROUP = "entitygroup";
public static final String EXPORT = "export";
+ public static final String EXTERNAL_JAR = "external_jar";
public static final String FILTER = "filter";
public static final String FOREIGNKEY = "foreignkey";
public static final String FULLDATA = "fulldata";
public static final String SUBSET = "subset";
public static final String SUCCESS = "success";
public static final String TABLE = "bigtable";
+ public static final String TABLE_DETAILS = "table_details";
public static final String TEMPLATE = "template";
public static final String TORQUE = "torque";
public static final String TRIGGER = "trigger";
* @param default1
* @return
*/
- private static Image getImage(String imageName, AbstractUIPlugin plugin) {
+ public static Image getImage(String imageName, AbstractUIPlugin plugin) {
ImageRegistry registry = plugin.getImageRegistry();
String key = stripSuffix(imageName);
Image image = registry.get(getVersionAppropriateImage(key));
addImage(registry, url, CLASS);
addImage(registry, url, CLEAR);
addImage(registry, url, CLOSE);
+ addImage(registry, url, CLOSE_DISABLED);
+ addImage(registry, url, CLOSE_ALL);
+ addImage(registry, url, CLOSE_ALL_DISABLED);
addImage(registry, url, COLUMN);
addImage(registry, url, CONNECT);
addImage(registry, url, CONNECTED);
addImage(registry, url, EDIT);
addImage(registry, url, ENTITYGROUP);
addImage(registry, url, EXPORT);
+ addImage(registry, url, EXTERNAL_JAR);
addImage(registry, url, FILTER);
addImage(registry, url, FOREIGNKEY);
addImage(registry, url, FULLDATA);
addImage(registry, url, SUBSET);
addImage(registry, url, SUCCESS);
addImage(registry, url, TABLE);
+ addImage(registry, url, TABLE_DETAILS);
addImage(registry, url, TEMPLATE);
addImage(registry, url, TORQUE);
addImage(registry, url, TRIGGER);
if (!VersioningHelper.isEclipse30()) {
addImage(registry, url, CLOSE + VERSION_2);
+ addImage(registry, url, CLOSE_ALL + VERSION_2);
addImage(registry, url, COPY + VERSION_2);
addImage(registry, url, DELETE + VERSION_2);
addImage(registry, url, EXPORT + VERSION_2);
+ addImage(registry, url, EXTERNAL_JAR + VERSION_2);
addImage(registry, url, IMPORT + VERSION_2);
addImage(registry, url, PASTE + VERSION_2);
addImage(registry, url, REFRESH + VERSION_2);
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbench;
sysClip = new Clipboard(null);
}
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.Plugin#shutdown()
- */
- public void shutdown() throws CoreException {
-// if (!sysClip.isDisposed()) {
-// sysClip.dispose();
-// }
- super.shutdown();
- }
-
+
/**
* Write the bookmarks and subsets to a file, saving them for next use of the quantum plugin
* @param target
getPreferenceStore().setDefault("quantum.string.bold", false); //$NON-NLS-1$
getPreferenceStore().setDefault("quantum.comment.bold", false); //$NON-NLS-1$
getPreferenceStore().setDefault("quantum.numeric.bold", false); //$NON-NLS-1$
- PreferenceConverter.setDefault(getPreferenceStore(), "quantum.font", (FontData) null); //$NON-NLS-1$
- getPreferenceStore().setDefault("com.quantum.model.Bookmark.queryHistorySize", 20); //$NON-NLS-1$
+ PreferenceConverter.setDefault(getPreferenceStore(), "quantum.font", //$NON-NLS-1$
+ JFaceResources.getTextFont().getFontData());
+ getPreferenceStore().setDefault("com.quantum.model.Bookmark.queryHistorySize", 20); //$NON-NLS-1$
getPreferenceStore().setDefault(
bookmarkview.deleteRowsAction = Delete all rows
bookmarkview.customCopyAction = Custom Copy
bookmarkview.confirmDeleteAllRows = Are you sure you want to delete all the rows from this table?
-sqlqueryview.executeQuery = Execute Query (Ctrl+Shift+Q)
sqlqueryview.importQuery = Import Query
sqlqueryview.exportQuery = Export Query
sqlqueryview.clear = Clear
tableview.update = Update...
tableview.insert = Insert...
tableview.delete = Delete...
-tableview.filterSort = Sort or Filter Table...
tableview.showAll = Toggle Show All Table Rows
tableview.defaultEncoding = Set Default Encoding
tableview.UTF8Encoding = Set UTF-8
SubsetView.DeletesTheSelectedColumns=Deletes the selected column
SubsetView.DeletesTheSelectedObject=Deletes the selected object
SubsetView.DeletesTheSelectedSubset=Deletes the selected subset
-TableView.FilterAndSort=Filter and Sort
TableView.UpdateRow=Update Row
TableView.InsertRow=Insert Row
TableView.DeleteRow=Delete Row
+TableView.PHPSelectRow=PHP Select Row
+TableView.PHPUpdateRow=PHP Update Row
+TableView.PHPInsertRow=PHP Insert Row
+TableView.PHPDeleteRow=PHP Delete Row
TableAdapter.to=\ to
TableAdapter.of=\ of
TableAdapter.full=\ (FULL)
BookmarkWizard.Schema=Schema (optional)
BookmarkWizard.ConnectAst=*JDBC URL
BookmarkWizard.DriverAst=*Driver
-BookmarkWizard.TypeAst=*Type
+BookmarkWizard.TypeAst=Type
BookmarkWizard.Prompt=Prompt for password
BookmarkWizard.DriverFilenameAst=*Driver Filename
BookmarkWizard.Browse=Browse...
com.quantum.wizards.AddDriverWizard.windowTitle=New JDBC Driver
com.quantum.wizards.AddDriverWizard$PageImpl.title=JDBC Driver
com.quantum.wizards.AddDriverWizard$PageImpl.description=Provide the following information about the driver.
-com.quantum.wizards.AddDriverWizard$PageImpl.browse=Browse
-com.quantum.wizards.AddDriverWizard$PageImpl.fileName=File name:
-com.quantum.wizards.AddDriverWizard$PageImpl.driverClassName=Class name:
+com.quantum.wizards.AddDriverWizard.addExternalJar=Add External Jar...
+com.quantum.wizards.AddDriverWizard.removeJar=Remove Jar...
+com.quantum.wizards.AddDriverWizard.browse=Browse...
+com.quantum.wizards.AddDriverWizard.jars=Driver Jars:
+com.quantum.wizards.AddDriverWizard.driverClassName=Class name:
com.quantum.adapters.DatabaseAdapter.GENERIC = Generic JDBC
com.quantum.adapters.DatabaseAdapter.HSQLDB = HSQL (Hypersonic)
com.quantum.adapters.DatabaseAdapter.REDBRICK = Red Brick
com.quantum.adapters.DatabaseAdapter.SYBASE = Sybase
com.quantum.adapters.DatabaseAdapter.POINTBASE = Pointbase
+com.quantum.adapters.DatabaseAdapter.JDBC_ODBC_BRIDGE = JDBC-ODBC Bridge
+com.quantum.adapters.DatabaseAdapter.MS_SQL_SERVER = Microsoft SQL Server
com.quantum.view.SchemaSelectionControl.addSchemaDialog = Select a Schema
com.quantum.view.SchemaSelectionControl.connectTitle = Connect Required
com.quantum.actions.BaseExecuteAction.done=Done ({0} queries executed, {1} rows updated, {2} result sets displayed, {3} errors, {4} seconds)
com.quantum.actions.BaseExecuteAction.selectBookmark=Select a bookmark
+com.quantum.actions.ExecuteAction.textNoBookmark=Execute...
+com.quantum.actions.ExecuteAction.text=Execute Against "{0}"
com.quantum.actions.ExecuteAction.parsing=Parsing sql script...
com.quantum.actions.ExecuteAction.autocommitTitle=Autocommit changed
-com.quantum.actions.ExecuteAction.autocommitMessage=The autocommit setting of the bookmark, {0} has been changed.
\ No newline at end of file
+com.quantum.actions.ExecuteAction.autocommitMessage=The autocommit setting of the bookmark, {0} has been changed.
+com.quantum.view.driver.DeleteDriverAction.text=Delete
+com.quantum.view.driver.DeleteDriverAction.confirm=Confirm Delete
+com.quantum.view.driver.DeleteDriverAction.confirmText=Are you sure you want to delete "{0}"?
+com.quantum.view.driver.DeleteDriverAction.failed=Delete Failed
+com.quantum.view.driver.DeleteDriverAction.inUse=The selected driver is still in use.
+com.quantum.view.driver.DeleteDriverAction.cant=The selected driver cannot be deleted.
+
+com.quantum.view.tableview.NextPageAction.text=Next
+com.quantum.view.tableview.PreviousPageAction.text=Previous
+com.quantum.view.tableview.RefreshTableAction.text=Refresh
+com.quantum.view.tableview.ChangeEncodingAction.default=Default encoding
+com.quantum.view.tableview.ChangeEncodingAction.utf8=UTF-8 encoding
+com.quantum.view.tableview.ChangeEncodingAction.utf16=UTF-16 encoding
+com.quantum.view.tableview.CloseResultSetAction.text=Close Result Set
+com.quantum.view.tableview.CloseAllResultSetsAction.text=Close All Result Sets
+com.quantum.view.tableview.CopyAction.text=Copy
+com.quantum.view.tableview.SelectAllAction.text=Select All
+com.quantum.view.tableview.FullModeAction.text = Toggle Show All Table Rows
+com.quantum.view.tableview.TableViewActionGroup.filterSortTitle = Sort or Filter Table...
+com.quantum.view.tableview.TableViewActionGroup.filterSort=Filter and Sort
+
+com.quantum.view.tableview.ResultSetViewer.position = {0} to {1} of {2} rows.
+com.quantum.view.tableview.ResultSetViewer.unknown = <unknown>
+
+com.quantum.wizards.URLSetupControl.text=JDBC Connection URL
+com.quantum.wizards.URLSetupControl.hostname=Host name:
+com.quantum.wizards.URLSetupControl.port=Port:
+com.quantum.wizards.URLSetupControl.dbname=Database name:
+com.quantum.wizards.URLSetupControl.datasource=Data Source:
+com.quantum.wizards.InformixURLSetupControl.informixserver=Informix Server:
+com.quantum.wizards.URLSetupControl.url=URL:
+
+com.quantum.model.ConnectionException.couldNotInstaniateDriver = The driver, {0}, could not be instantiated.\nPlease ensure that the bookmark, {1}, is properly defined.
import com.quantum.model.Bookmark;
import com.quantum.model.BookmarkCollection;
import com.quantum.sql.MultiSQLServer;
+import com.quantum.sql.SQLResultSetCollection;
+import com.quantum.sql.SQLResultSetResults;
import com.quantum.sql.SQLResults;
+import com.quantum.sql.SQLUpdateResults;
import com.quantum.ui.dialog.ExceptionDisplayDialog;
import com.quantum.ui.dialog.SimpleSelectionDialog;
import com.quantum.util.connection.ConnectionUtil;
import com.quantum.view.LogProxy;
-import com.quantum.view.tableview.DefaultSizes;
import com.quantum.view.tableview.TableView;
import org.eclipse.core.runtime.CoreException;
if (results == null) {
errorCount++;
} else {
- queryDuration += results.getTime()/1000.0; // calculate the execution time (in seconds)
+ queryDuration += results.getTime()/1000.0;
resultCount++;
if (results.isResultSet()) {
resultsDisplayed++;
} else {
- resultUpdateCount += results.getUpdateCount();
+ resultUpdateCount += ((SQLUpdateResults) results).getUpdateCount();
}
}
}
String query = (String) queries.get(i);
System.out.println(">" + query + "<"); //$NON-NLS-1$ //$NON-NLS-2$
if (query != null && query.trim().length() > 0) {
- SQLResults results = getSQLResults(connection, server, query);
+ SQLResults results = getSQLResults(bookmark, connection, server, query);
metrics.measure(results);
if (results != null) {
bookmark.addQuery(query);
if (results.isResultSet()) {
- TableView.getInstance().loadQuery(bookmark, results);
+ SQLResultSetCollection.getInstance().addSQLResultSet(
+ (SQLResultSetResults) results);
+ activateTableView();
}
}
}
}
/**
+ *
+ */
+ private void activateTableView() {
+ TableView.getInstance();
+ }
+
+ /**
* @return
* @throws CoreException
* @throws IOException
private void displayFinalStatusMessage(Metrics metrics) {
String message = Messages.getString(
BaseExecuteAction.class,
- "done", //$NON-NLS-1$ //$NON-NLS-2$
+ "done", //$NON-NLS-1$
metrics.getResults());
if (metrics.hasErrors()) {
getStatusLineManager().setErrorMessage(
ImageStore.getImage(ImageStore.STOP), message);
} else {
- getStatusLineManager().setMessage(
- ImageStore.getImage(ImageStore.SUCCESS), message);
+ getStatusLineManager().setMessage(message);
}
}
* @param query
* @return
*/
- private SQLResults getSQLResults(Connection connection, MultiSQLServer server, String query) {
+ private SQLResults getSQLResults(Bookmark bookmark, Connection connection, MultiSQLServer server, String query) {
SQLResults results = null;
try {
- results = server.execute(connection, query, 1,
- DefaultSizes.PAGE_SIZE, DefaultSizes.MAX_COLUMN_SIZE);
+ results = server.execute(bookmark, connection, query);
} catch (SQLException e) {
LogProxy log = LogProxy.getInstance();
log.addText(LogProxy.ERROR,
import java.sql.Connection;
import java.util.List;
+import com.quantum.adapters.DatabaseAdapter;
import com.quantum.model.Bookmark;
+import com.quantum.sql.SQLResultSetCollection;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.sql.SQLResults;
import com.quantum.util.connection.ConnectionUtil;
+import com.quantum.view.ViewHelper;
import com.quantum.view.bookmark.EntityNode;
import com.quantum.view.bookmark.TreeNode;
protected BaseSequenceAction(String text, IViewPart view) {
super(text);
-
+ this.view = view;
}
protected Bookmark getBookmark() {
&& (selection.getFirstElement() instanceof EntityNode)
&& ((EntityNode) selection.getFirstElement()).isSequence();
}
+
+ public void run() {
+ EntityNode sequence = getEntityNode();
+ String name = null;
+ if (sequence.isSequence()) {
+ Bookmark bookmark = sequence.getBookmark();
+ DatabaseAdapter adapter = bookmark.getAdapter();
+ if (adapter == null) return;
+ name = sequence.getName();
+ String query = getQuery(sequence, name, adapter);
+
+ SQLResults results = ViewHelper.tryGetResults(view, bookmark, getConnection(), query);
+ if (results != null && results.isResultSet())
+ SQLResultSetCollection.getInstance().addSQLResultSet((SQLResultSetResults) results);
+ }
+ }
+
+ /**
+ * @param sequence
+ * @param name
+ * @param adapter
+ * @return
+ */
+ protected abstract String getQuery(EntityNode sequence, String name, DatabaseAdapter adapter);
}
+++ /dev/null
-package com.quantum.actions;
-
-import com.quantum.view.tableview.TableView;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.ui.IViewActionDelegate;
-import org.eclipse.ui.IViewPart;
-
-/**
- * @author root
- *
- */
-public class CloseTableAction extends Action implements IViewActionDelegate {
- TableView view;
- /**
- * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
- */
- public void init(IViewPart view) {
- this.view = (TableView) view;
- }
-
- /**
- * @see org.eclipse.ui.IActionDelegate#run(IAction)
- */
- public void run(IAction action) {
- run();
- }
- public void run() {
- view.closeCurrent();
- }
-
- /**
- * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
- */
- public void selectionChanged(IAction action, ISelection selection) {
- }
-
-}
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
+import java.util.Arrays;
import java.util.List;
import java.util.Vector;
import com.quantum.ImageStore;
import com.quantum.Messages;
+import com.quantum.QuantumPlugin;
import com.quantum.model.Bookmark;
import com.quantum.model.BookmarkCollection;
-import com.quantum.sql.SQLParser;
+import com.quantum.model.DisplayableComparator;
+import com.quantum.sql.parser.SQLParser;
import com.quantum.view.SQLQueryView;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.events.MenuAdapter;
import org.eclipse.swt.events.MenuEvent;
* @author panic
*/
public class ExecuteAction extends BaseExecuteAction implements IMenuCreator {
+
+private static final String LAST_USED_BOOKMARK_PREFERENCE = ExecuteAction.class.getName() + ".bookmark";
private SQLQueryView view;
public ExecuteAction(SQLQueryView view) {
this.view = view;
setActionDefinitionId("com.quantum.actions.ExecuteAction");
setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.PLAY));
- setText(Messages.getString("sqlqueryview.executeQuery"));
- setToolTipText(Messages.getString("sqlqueryview.executeQuery"));
+ initTextAndToolTip();
setMenuCreator(this);
}
-
-
+ /**
+ *
+ */
+ private void initTextAndToolTip() {
+ Bookmark lastUsedBookmark = getLastUsedBookmark();
+ if (lastUsedBookmark == null) {
+ setText(Messages.getString(ExecuteAction.class, "textNoBookmark"));
+ setToolTipText(Messages.getString(ExecuteAction.class, "textNoBookmark"));
+ } else {
+ Object[] parameters = new Object[] { lastUsedBookmark.getName() };
+ setText(Messages.getString(ExecuteAction.class, "text", parameters));
+ setToolTipText(Messages.getString(ExecuteAction.class, "text", parameters));
+ }
+ }
+
+ protected Bookmark getBookmark() {
+ Bookmark lastUsedBookmark = getLastUsedBookmark();
+ return lastUsedBookmark == null ? super.getBookmark() : lastUsedBookmark;
+ }
protected void execute(Bookmark bookmark, Connection connection)
throws IOException, CoreException, SQLException {
- boolean autoCommitPreference = this.view.isAutoCommitPreference();
- boolean changed = false;
- if (connection.getAutoCommit() != autoCommitPreference) {
- connection.setAutoCommit(autoCommitPreference);
- changed = true;
- }
-
- super.execute(bookmark, connection);
-
- if (changed) {
- MessageDialog.openInformation(getShell(),
- Messages.getString(ExecuteAction.class, "autocommitTitle"),
- Messages.getString(ExecuteAction.class, "autocommitMessage",
- new Object[] { bookmark.getName() }));
+ try {
+ boolean autoCommitPreference = this.view.isAutoCommitPreference();
+ boolean changed = false;
+ if (connection.getAutoCommit() != autoCommitPreference) {
+ connection.setAutoCommit(autoCommitPreference);
+ changed = true;
+ }
+
+ super.execute(bookmark, connection);
+
+ if (changed) {
+ MessageDialog.openInformation(getShell(),
+ Messages.getString(ExecuteAction.class, "autocommitTitle"),
+ Messages.getString(ExecuteAction.class, "autocommitMessage",
+ new Object[] { bookmark.getName() }));
+ }
+ } finally {
+ QuantumPlugin.getDefault().getPreferenceStore().setValue(
+ LAST_USED_BOOKMARK_PREFERENCE, bookmark.getName());
+ initTextAndToolTip();
}
}
/**
}
protected void fillMenu(Menu menu) {
+ Bookmark lastUsedBookmark = getLastUsedBookmark();
+
+ if (lastUsedBookmark != null) {
+ createSubAction(menu, lastUsedBookmark);
+ Separator separator = new Separator();
+ separator.fill(menu, -1);
+ }
+
Bookmark[] bookmarks = BookmarkCollection.getInstance().getBookmarks();
+ Arrays.sort(bookmarks, new DisplayableComparator());
for (int i = 0, length = bookmarks == null ? 0 : bookmarks.length; i < length; i++) {
final Bookmark bookmark = bookmarks[i];
- Action action = new Action() {
- public void run() {
- ExecuteAction.this.execute(bookmark);
- }
- };
- action.setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.BOOKMARK));
+ createSubAction(menu, bookmark);
+ }
+ }
+
+
+
+ /**
+ * @return
+ */
+ private Bookmark getLastUsedBookmark() {
+ String lastUsedName = QuantumPlugin.getDefault().getPreferenceStore().getString(
+ LAST_USED_BOOKMARK_PREFERENCE);
+ Bookmark lastUsedBookmark = lastUsedName == null
+ ? null
+ : BookmarkCollection.getInstance().find(lastUsedName);
+ return lastUsedBookmark;
+ }
+
+
+
+ /**
+ * @param menu
+ * @param bookmark
+ */
+ private void createSubAction(Menu menu, final Bookmark bookmark) {
+ Action action = new Action() {
+ public void run() {
+ ExecuteAction.this.execute(bookmark);
+ }
+ };
+ action.setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.BOOKMARK));
+
+ // The last '@' sign is treated specially, so if the
+ // bookmark name contains an '@', then add an extra one to the end
+ if (bookmark.getName().indexOf('@') >= 0) {
+ action.setText(bookmark.getName() + '@');
+ } else {
action.setText(bookmark.getName());
- ActionContributionItem item = new ActionContributionItem(action);
- item.fill(menu, -1);
}
+ ActionContributionItem item = new ActionContributionItem(action);
+ item.fill(menu, -1);
}
}
import java.util.Iterator;
import java.util.List;
-import com.quantum.ImageStore;
-import com.quantum.Messages;
-import com.quantum.model.Bookmark;
-import com.quantum.model.BookmarkCollection;
-import com.quantum.sql.SQLParser;
-import com.quantum.ui.dialog.SimpleSelectionDialog;
+import com.quantum.sql.parser.SQLParser;
import com.quantum.util.io.InputStreamHelper;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
import com.quantum.ImageStore;
import com.quantum.Messages;
import com.quantum.adapters.DatabaseAdapter;
-import com.quantum.model.Bookmark;
-import com.quantum.sql.SQLResults;
-import com.quantum.view.ViewHelper;
import com.quantum.view.bookmark.EntityNode;
-import com.quantum.view.tableview.TableView;
import org.eclipse.ui.IViewPart;
setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.APPEND));
}
- public void run() {
- EntityNode sequence = getEntityNode();
- String name = null;
- if (sequence.isSequence()) {
- Bookmark bookmark = sequence.getBookmark();
- DatabaseAdapter adapter = bookmark.getAdapter();
- if (adapter == null) return;
- name = sequence.getName();
- String query = adapter.getNextValue(name, sequence.getEntity().getSchema());
-
- SQLResults results = ViewHelper.tryGetResults(view, getConnection(), query);
- if (results != null && ! results.isError())
- TableView.getInstance().loadQuery(bookmark, results);
- }
+ /**
+ * @param sequence
+ * @param name
+ * @param adapter
+ * @return
+ */
+ protected String getQuery(EntityNode sequence, String name, DatabaseAdapter adapter) {
+ return adapter.getNextValue(name, sequence.getEntity().getSchema());
}
}
import com.quantum.ImageStore;
import com.quantum.Messages;
import com.quantum.adapters.DatabaseAdapter;
-import com.quantum.model.Bookmark;
-import com.quantum.sql.SQLResults;
-import com.quantum.view.ViewHelper;
import com.quantum.view.bookmark.EntityNode;
-import com.quantum.view.tableview.TableView;
import org.eclipse.ui.IViewPart;
setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.GRID));
}
- public void run() {
- EntityNode sequence = getEntityNode();
- if (sequence.isSequence()) {
- Bookmark bookmark = sequence.getBookmark();
- DatabaseAdapter adapter = bookmark.getAdapter();
- if (adapter == null) return;
- String name = sequence.getName();
- String query = adapter.getPrevValue(name, sequence.getEntity().getSchema());
- SQLResults results = ViewHelper.tryGetResults(view, getConnection(), query);
- if (results != null && ! results.isError())
- TableView.getInstance().loadQuery(bookmark, results);
- }
+ /**
+ * @param sequence
+ * @param name
+ * @param adapter
+ * @return
+ */
+ protected String getQuery(EntityNode sequence, String name, DatabaseAdapter adapter) {
+ return adapter.getPrevValue(name, sequence.getEntity().getSchema());
}
}
+++ /dev/null
-package com.quantum.actions;
-
-import com.quantum.view.tableview.TableView;
-
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.ui.IViewActionDelegate;
-import org.eclipse.ui.IViewPart;
-
-/**
- * @author root
- * Implements the "Refresh Table" action for the TableView view
- */
-public class RefreshTableAction extends Action implements IViewActionDelegate {
- TableView view;
- /**
- * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
- */
- public void init(IViewPart view) {
- this.view = (TableView) view;
- }
-
- /**
- * @see org.eclipse.ui.IActionDelegate#run(IAction)
- */
- public void run(IAction action) {
- run();
- }
- public void run() {
- view.refreshCurrent();
- }
-
- /**
- * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
- */
- public void selectionChanged(IAction action, ISelection selection) {
- }
-
-}
package com.quantum.actions;
+import java.sql.SQLException;
+
import com.quantum.ImageStore;
import com.quantum.Messages;
+import com.quantum.adapters.DatabaseAdapter;
+import com.quantum.model.Bookmark;
import com.quantum.model.Entity;
+import com.quantum.sql.MultiSQLServer;
+import com.quantum.sql.SQLResultSetCollection;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.sql.SQLResults;
+import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.util.connection.ConnectionUtil;
import com.quantum.view.bookmark.EntityNode;
-import com.quantum.view.tableview.TableView;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.actions.SelectionListenerAction;
*/
public class ViewTableAction extends SelectionListenerAction {
private Entity entity;
+ private ConnectionUtil connectionUtil = new ConnectionUtil();
+ private final IViewPart view;
public ViewTableAction(IViewPart view) {
super(Messages.getString(ViewTableAction.class, "text"));
+ this.view = view;
setImageDescriptor(
ImageStore.getImageDescriptor(ImageStore.OPEN_TABLE));
}
public void run() {
- TableView.getInstance().loadTable(this.entity);
- // TODO: reinstate this
-// } else if (view instanceof SubsetView){
-// SubsetView subsetView = (SubsetView) view;
-// node = (TreeNode) subsetView.getCurrent();
-// if (!(node instanceof ObjectNode)) return;
-// ObjectNode objectNode = (ObjectNode) node;
-//
-// String query = objectNode.getQuery();
-//
-// SQLResults results = ViewHelper.tryGetResults(view, objectNode.getConnection(), query);
-// if (results != null && ! results.isError())
-// TableView.getInstance().loadQuery(bookmark.getBookmark(), results);
-//
+
+ Bookmark bookmark = this.entity.getBookmark();
+ DatabaseAdapter adapter = bookmark.getAdapter();
+ String query = adapter.getTableQuery((entity).getQualifiedName());
+
+ try {
+ SQLResults results = MultiSQLServer.getInstance().execute(
+ bookmark,
+ this.connectionUtil.connect(bookmark, getShell()),
+ this.entity,
+ query);
+
+ if (results != null && results.isResultSet()) {
+ SQLResultSetCollection.getInstance().addSQLResultSet((SQLResultSetResults) results);
+ }
+ } catch (SQLException e) {
+ ExceptionDisplayDialog.openError(getShell(), null, null, e);
+ }
+ }
+
+ /**
+ * @return
+ */
+ private Shell getShell() {
+ return this.view.getSite().getShell();
}
public boolean updateSelection(IStructuredSelection selection) {
package com.quantum.actions;
import java.sql.Connection;
+import java.sql.SQLException;
import java.util.List;
import com.quantum.ImageStore;
import com.quantum.Messages;
import com.quantum.model.Bookmark;
import com.quantum.model.Entity;
-import com.quantum.sql.SQLResults;
+import com.quantum.sql.MultiSQLServer;
+import com.quantum.sql.SQLResultSetCollection;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.ui.dialog.ExceptionDisplayDialog;
import com.quantum.util.connection.ConnectionUtil;
-import com.quantum.view.ViewHelper;
import com.quantum.view.bookmark.EntityNode;
-import com.quantum.view.tableview.TableView;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
public ViewTableDetailsAction(IViewPart view) {
super(Messages.getString(ViewTableDetailsAction.class, "text"));
- setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.OPEN_TABLE));
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.TABLE_DETAILS));
this.view = view;
}
public void run() {
Entity entity = getEntity();
- StringBuffer query = new StringBuffer();
- query.append(Messages.getString("MetaDataKey")+Messages.getString("MetaDataKeySeparator")); //$NON-NLS-1$ //$NON-NLS-2$
- query.append(entity.getQuotedTableName());
Connection connection = connectionUtil.getConnection(getBookmark(), getShell());
if (connection != null) {
- SQLResults results = ViewHelper.tryGetResults(view, connection, query.toString());
- if (results != null && ! results.isError())
- TableView.getInstance().loadQuery(entity.getBookmark(), results);
+ try {
+ SQLResultSetResults results =
+ MultiSQLServer.getInstance().getMetaData(entity, connection);
+ if (results != null) {
+ SQLResultSetCollection.getInstance().addSQLResultSet(results);
+ }
+ } catch (SQLException e) {
+ ExceptionDisplayDialog.openError(getShell(), null, null, e);
+ }
}
}
public void selectionChanged(IAction action, ISelection selection) {
}
}
+ static class DriverInfo {
+ private final String type;
+ private final String urlPattern;
+
+ DriverInfo(String type) {
+ this(type, null);
+ }
+ DriverInfo(String type, String urlPattern) {
+ this.type = type;
+ this.urlPattern = urlPattern;
+
+ }
+ public String getType() {
+ return this.type;
+ }
+ public String getURLPattern() {
+ return this.urlPattern;
+ }
+ }
+
public static final String GENERIC = "GENERIC"; //$NON-NLS-1$
public static final String HSQLDB = "HSQLDB"; //$NON-NLS-1$
public static final String ORACLE = "ORACLE"; //$NON-NLS-1$
public static final String REDBRICK = "REDBRICK"; //$NON-NLS-1$
public static final String POINTBASE = "POINTBASE"; //$NON-NLS-1$
public static final String SYBASE = "SYBASE"; //$NON-NLS-1$
+ public static final String JDBC_ODBC_BRIDGE = "JDBC_ODBC_BRIDGE"; //$NON-NLS-1$
+ public static final String MS_SQL_SERVER = "MS_SQL_SERVER"; //$NON-NLS-1$
private static final Map DRIVER_MAP = Collections.synchronizedMap(new HashMap());
static {
- DRIVER_MAP.put("com.ddtek.jdbc.informix.InformixDriver", AdapterFactory.INFORMIX);
- DRIVER_MAP.put("com.ddtek.jdbc.db2.DB2Driver", AdapterFactory.DB2);
- DRIVER_MAP.put("com.ddtek.jdbc.oracle.OracleDriver", AdapterFactory.ORACLE);
- DRIVER_MAP.put("com.ddtek.jdbc.sqlserver.SQLServerDriver", AdapterFactory.GENERIC);
- DRIVER_MAP.put("com.ddtek.jdbc.sybase.SybaseDriver", AdapterFactory.SYBASE);
- DRIVER_MAP.put("com.ibm.as400.access.AS400JDBCDriver", AdapterFactory.DB2AS400);
- DRIVER_MAP.put("COM.ibm.db2.jdbc.app.DB2Driver", AdapterFactory.DB2);
- DRIVER_MAP.put("COM.ibm.db2.jdbc.net.DB2Driver", AdapterFactory.DB2);
- DRIVER_MAP.put("com.inet.ora.OraDriver", AdapterFactory.ORACLE);
- DRIVER_MAP.put("com.inet.drda.DRDADriver", AdapterFactory.DB2);
- DRIVER_MAP.put("com.inet.syb.SybDriver", AdapterFactory.SYBASE);
- DRIVER_MAP.put("com.inet.tds.TdsDriver", AdapterFactory.GENERIC);
- DRIVER_MAP.put("com.informix.jdbc.IfxDriver", AdapterFactory.INFORMIX);
- DRIVER_MAP.put("com.microsoft.jdbc.sqlserver.SQLServerDriver", AdapterFactory.GENERIC);
- DRIVER_MAP.put("com.mysql.jdbc.Driver", AdapterFactory.MYSQL);
- DRIVER_MAP.put("com.pointbase.jdbc.jdbcUniversalDriver", AdapterFactory.POINTBASE);
- DRIVER_MAP.put("com.sybase.jdbcx.SybDriver", AdapterFactory.SYBASE);
- DRIVER_MAP.put("oracle.jdbc.driver.OracleDriver", AdapterFactory.ORACLE);
- DRIVER_MAP.put("org.gjt.mm.mysql.Driver", AdapterFactory.MYSQL);
- DRIVER_MAP.put("org.hsqldb.jdbcDriver", AdapterFactory.HSQLDB);
- DRIVER_MAP.put("org.postgresql.Driver", AdapterFactory.POSTGRES);
- DRIVER_MAP.put("weblogic.jdbc.informix.InformixDriver", AdapterFactory.INFORMIX);
- DRIVER_MAP.put("weblogic.jdbc.sqlserver.SybaseDriver", AdapterFactory.SYBASE);
+ DRIVER_MAP.put("com.ddtek.jdbc.informix.InformixDriver", new DriverInfo(INFORMIX));
+ DRIVER_MAP.put("com.ddtek.jdbc.db2.DB2Driver", new DriverInfo(DB2, "jdbc:datadirect:db2://${hostname}:${port};DatabaseName=${dbname}"));
+ DRIVER_MAP.put("com.ddtek.jdbc.oracle.OracleDriver", new DriverInfo(ORACLE));
+ DRIVER_MAP.put("com.ddtek.jdbc.sqlserver.SQLServerDriver", new DriverInfo(GENERIC));
+ DRIVER_MAP.put("com.ddtek.jdbc.sybase.SybaseDriver", new DriverInfo(SYBASE));
+ DRIVER_MAP.put("com.ibm.as400.access.AS400JDBCDriver", new DriverInfo(DB2AS400));
+ DRIVER_MAP.put("COM.ibm.db2.jdbc.app.DB2Driver", new DriverInfo(DB2, "jdbc:db2:{dbname}"));
+ DRIVER_MAP.put("COM.ibm.db2.jdbc.net.DB2Driver", new DriverInfo(DB2, "jdbc:db2://{hostname}:{port}/{dbname}"));
+ DRIVER_MAP.put("com.inet.ora.OraDriver", new DriverInfo(ORACLE));
+ DRIVER_MAP.put("com.inet.drda.DRDADriver", new DriverInfo(DB2, "jdbc:inetdb2:{hostname}:{port}?database={dbname}"));
+ DRIVER_MAP.put("com.inet.syb.SybDriver", new DriverInfo(SYBASE));
+ DRIVER_MAP.put("com.inet.tds.TdsDriver", new DriverInfo(MS_SQL_SERVER));
+ DRIVER_MAP.put("com.informix.jdbc.IfxDriver", new DriverInfo(INFORMIX, "jdbc:informix-sqli://{hostname}:{port}/{dbname}:INFORMIXSERVER={informixserver}"));
+ DRIVER_MAP.put("com.microsoft.jdbc.sqlserver.SQLServerDriver", new DriverInfo(MS_SQL_SERVER));
+ DRIVER_MAP.put("com.mysql.jdbc.Driver", new DriverInfo(MYSQL, "jdbc:mysql://{hostname}:{port}/{dbname}"));
+ DRIVER_MAP.put("com.pointbase.jdbc.jdbcUniversalDriver", new DriverInfo(POINTBASE, "jdbc:pointbase:server://{hostname}:{port}/{dbname}"));
+ DRIVER_MAP.put("com.sybase.jdbc.SybDriver", new DriverInfo(SYBASE, "jdbc:sybase:Tds:{hostname}:{port}/{dbname}"));
+ DRIVER_MAP.put("com.sybase.jdbc2.jdbc.SybDriver", new DriverInfo(SYBASE, "jdbc:sybase:Tds:{hostname}:{port}/{dbname}"));
+ DRIVER_MAP.put("com.sybase.jdbcx.SybDriver", new DriverInfo(SYBASE, "jdbc:sybase:Tds:{hostname}:{port}/{dbname}"));
+ DRIVER_MAP.put("net.sourceforge.jtds.jdbc.Driver", new DriverInfo(MS_SQL_SERVER));
+ DRIVER_MAP.put("oracle.jdbc.driver.OracleDriver", new DriverInfo(ORACLE));
+ DRIVER_MAP.put("org.gjt.mm.mysql.Driver", new DriverInfo(MYSQL, "jdbc:mysql://{hostname}:{port}/{dbname}"));
+ DRIVER_MAP.put("org.hsqldb.jdbcDriver", new DriverInfo(HSQLDB));
+ DRIVER_MAP.put("org.postgresql.Driver", new DriverInfo(POSTGRES, "jdbc:postgresql://{hostname}:{port}/{dbname}"));
+ DRIVER_MAP.put("sun.jdbc.odbc.JdbcOdbcDriver", new DriverInfo(JDBC_ODBC_BRIDGE, "jdbc:odbc:{datasource}"));
+ DRIVER_MAP.put("weblogic.jdbc.informix.InformixDriver", new DriverInfo(INFORMIX));
+ DRIVER_MAP.put("weblogic.jdbc.sqlserver.SybaseDriver", new DriverInfo(SYBASE));
}
private static AdapterFactory instance;
addAdapter(new DB2Adapter());
addAdapter(new DB2AS400Adapter());
addAdapter(new PostgresAdapter());
- addAdapter(new GenericAdapter(MYSQL));
+ addAdapter(new MySQLAdapter());
addAdapter(new AdabasDAdapter());
- addAdapter(new GenericAdapter(INFORMIX));
+ addAdapter(new InformixAdapter());
addAdapter(new RedBrickAdapter());
addAdapter(new GenericAdapter(SYBASE));
addAdapter(new GenericAdapter(POINTBASE));
+ addAdapter(new GenericAdapter(JDBC_ODBC_BRIDGE));
+ addAdapter(new MSSQLServerAdapter());
}
private void addAdapter(DatabaseAdapter adapter) {
this.adapters.put(adapter.getType(), adapter);
* @return the adapter type, or null if the adapter type is not known
*/
public String getAdapterType(String driverClassName) {
- return (String) DRIVER_MAP.get(driverClassName);
+ DriverInfo driverInfo = (DriverInfo) DRIVER_MAP.get(driverClassName);
+ return driverInfo == null ? null : driverInfo.getType();
}
+ /**
+ * @param type
+ * @return
+ */
+ public String getURLPattern(String driverClassName) {
+ DriverInfo driverInfo = (DriverInfo) DRIVER_MAP.get(driverClassName);
+ return driverInfo == null ? null : driverInfo.getURLPattern();
+ }
}
\ No newline at end of file
super(AdapterFactory.DB2AS400);
}
public String getShowTableQuery(String qualifier) {
- return "SELECT TABLE_NAME FROM QSYS2.SYSTABLES WHERE table_schema = '" +
+ return "SELECT table_schema, TABLE_NAME FROM QSYS2.SYSTABLES " +
+ "WHERE table_schema = '" +
qualifier.toUpperCase() +
- "' AND TABLE_TYPE IN ('T', 'P')"; //$NON-NLS-1$ //$NON-NLS-2$
+ "' AND TABLE_TYPE IN ('T', 'P')";
}
public String getShowViewQuery(String qualifier) {
- return "SELECT TABLE_NAME FROM QSYS2.SYSTABLES WHERE table_schema = '" +
+ return "SELECT table_schema, TABLE_NAME FROM QSYS2.SYSTABLES " +
+ "WHERE table_schema = '" +
qualifier.toUpperCase() +
- "' AND TABLE_TYPE IN ('V', 'L')"; //$NON-NLS-1$ //$NON-NLS-2$
+ "' AND TABLE_TYPE IN ('V', 'L')";
}
}
package com.quantum.adapters;
-import com.quantum.sql.SQLHelper;
+import java.util.HashMap;
+import java.util.Map;
+
public class DB2Adapter extends DatabaseAdapter {
/**
super(AdapterFactory.DB2);
}
public String getShowTableQuery(String qualifier) {
- return "SELECT TABNAME FROM syscat.tables WHERE tabschema = '" + qualifier.toUpperCase() + "' AND TYPE='T'"; //$NON-NLS-1$ //$NON-NLS-2$
+ return "SELECT tabschema, TABNAME FROM syscat.tables WHERE tabschema = '" + qualifier.toUpperCase() + "' AND TYPE='T'"; //$NON-NLS-1$ //$NON-NLS-2$
}
public String getShowViewQuery(String qualifier) {
- return "SELECT TABNAME FROM syscat.tables WHERE tabschema = '" + qualifier.toUpperCase() + "' AND TYPE='V'"; //$NON-NLS-1$ //$NON-NLS-2$
+ return "SELECT tabschema, TABNAME FROM syscat.tables WHERE tabschema = '" + qualifier.toUpperCase() + "' AND TYPE='V'"; //$NON-NLS-1$ //$NON-NLS-2$
}
public String getShowSequenceQuery(String qualifier) {
- return "SELECT SEQNAME FROM sysibm.syssequences WHERE seqschema = '" + qualifier.toUpperCase() + "'"; //$NON-NLS-1$ //$NON-NLS-2$
+ return "SELECT seqschema, SEQNAME FROM sysibm.syssequences WHERE seqschema = '" + qualifier.toUpperCase() + "'"; //$NON-NLS-1$ //$NON-NLS-2$
}
public String getNextValue(String sequence, String owner) {
- return "VALUES NEXTVAL FOR " + SQLHelper.getQualifiedName(owner, sequence); //$NON-NLS-1$
+ return "VALUES NEXTVAL FOR " + getQualifiedName(owner, sequence); //$NON-NLS-1$
}
public String getPrevValue(String sequence, String owner) {
- return "VALUES PREVVAL FOR " + SQLHelper.getQualifiedName(owner, sequence); //$NON-NLS-1$
+ return "VALUES PREVVAL FOR " + getQualifiedName(owner, sequence); //$NON-NLS-1$
+ }
+ public Map getDefaultConnectionParameters() {
+ Map map = new HashMap();
+ // the standard driver doesn't use these values, but other drivers might...
+ map.put("port", "50000");
+ map.put("hostname", "localhost");
+ return map;
}
}
package com.quantum.adapters;
+import java.util.HashMap;
+import java.util.Map;
+
import com.quantum.Messages;
-import com.quantum.sql.SQLHelper;
import com.quantum.util.StringUtil;
+import com.quantum.util.sql.TypesHelper;
/**
* Abstract base class for all the adapter classes. Most functions can be redefined in
* @return
*/
protected boolean isTextType(int type, String typeString) {
- return SQLHelper.isText(type);
+ return TypesHelper.isText(type);
}
public String getType() {
return this.type;
}
+
+ protected String getQualifiedName(String schema, String name) {
+ return (schema != null && schema.length() > 0) ? schema + "." + name : name;
+ }
+
+ public Map getDefaultConnectionParameters() {
+ return new HashMap();
+ }
}
\ No newline at end of file
--- /dev/null
+package com.quantum.adapters;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author BC Holmes
+ */
+public class InformixAdapter extends GenericAdapter {
+
+ /**
+ * @param type
+ */
+ protected InformixAdapter() {
+ super(AdapterFactory.INFORMIX);
+ }
+
+ /**
+ * Get the default connection properties for Informix. These defaults assume that
+ * the database is located on the user's local machine. Informix doesn't allow
+ * for "localhost".
+ */
+ public Map getDefaultConnectionParameters() {
+ Map map = new HashMap();
+ map.put("hostname", getHostName());
+ map.put("informixserver", "ol_" + getHostName());
+ map.put("port", "1526");
+ return map;
+ }
+
+ /**
+ * @return
+ */
+ private String getHostName() {
+ try {
+ return InetAddress.getLocalHost().getHostName();
+ } catch (UnknownHostException e) {
+ return "localhost";
+ }
+ }
+}
--- /dev/null
+package com.quantum.adapters;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * @author BC
+ */
+public class MSSQLServerAdapter extends GenericAdapter {
+
+ /**
+ * @param type
+ */
+ protected MSSQLServerAdapter() {
+ super(AdapterFactory.MS_SQL_SERVER);
+ }
+
+ public Map getDefaultConnectionParameters() {
+ Map map = new HashMap();
+ map.put("port", "1433");
+ map.put("hostname", "localhost");
+ return map;
+ }
+}
package com.quantum.adapters;
+import java.util.HashMap;
+import java.util.Map;
-public class MySQLAdapter extends DatabaseAdapter {
+
+public class MySQLAdapter extends GenericAdapter {
/**
* @param type
protected MySQLAdapter() {
super(AdapterFactory.MYSQL);
}
-// public String getShowTableQuery(String qualifier, boolean isDefault) {
-// return "SHOW TABLES"; //$NON-NLS-1$
-// }
+ public Map getDefaultConnectionParameters() {
+ Map map = new HashMap();
+ map.put("port", "3306");
+ map.put("hostname", "localhost");
+ return map;
+ }
}
\ No newline at end of file
package com.quantum.adapters;
import com.quantum.Messages;
-import com.quantum.sql.SQLHelper;
import com.quantum.util.QuantumUtil;
}
public String getPrevValue(String sequence, String owner) {
return "SELECT LAST_NUMBER FROM ALL_SEQUENCES WHERE SEQUENCE_OWNER = '" + owner + "' AND SEQUENCE_NAME = '" + sequence + "'"; //$NON-NLS-1$ //$NON-NLS-2$
- }
+ }
public String getNextValue(String sequence, String owner) {
- return "SELECT " + SQLHelper.getQualifiedName(owner, sequence) + ".NEXTVAL FROM DUAL";
+ return "SELECT " + getQualifiedName(owner, sequence) + ".NEXTVAL FROM DUAL";
}
public String getCommentsQuery(String tableName, String column) {
String query = "SELECT COMMENTS FROM ALL_COL_COMMENTS WHERE TABLE_NAME = '";
--- /dev/null
+package com.quantum.adapters;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * @author BC
+ */
+public class PointbaseAdapter extends GenericAdapter {
+
+ /**
+ * @param type
+ */
+ protected PointbaseAdapter() {
+ super(AdapterFactory.POINTBASE);
+ }
+
+ public Map getDefaultConnectionParameters() {
+ Map map = new HashMap();
+ map.put("port", "9093");
+ map.put("hostname", "localhost");
+ return map;
+ }
+}
package com.quantum.adapters;
-import com.quantum.sql.SQLHelper;
+import java.util.HashMap;
+import java.util.Map;
+
import com.quantum.util.QuantumUtil;
import com.quantum.util.sql.TypesHelper;
"and pg_namespace.nspname = '" + qualifier + "'";
}
public String getNextValue(String sequence, String owner) {
- return "SELECT NEXTVAL('" + SQLHelper.getQualifiedName(owner, sequence) + "')";
+ return "SELECT NEXTVAL('" + getQualifiedName(owner, sequence) + "')";
}
public String getPrevValue(String sequence, String owner) {
- return "SELECT * FROM " + SQLHelper.getQualifiedName(owner, sequence);
+ return "SELECT * FROM " + getQualifiedName(owner, sequence);
}
/**
return super.quote(string, type, typeString);
}
+ public String getTableQuery(String table) {
+ return "SELECT OID, * FROM " + filterTableName(table); //$NON-NLS-1$
+ }
/**
* @see com.quantum.adapters.DatabaseAdapter#filterTableName(java.lang.String)
*/
return "public";
}
+ public Map getDefaultConnectionParameters() {
+ Map map = new HashMap();
+ map.put("port", "5432");
+ map.put("hostname", "localhost");
+ return map;
+ }
}
\ No newline at end of file
ICompletionProposal proposal = new CompletionProposal("select",
offset, 0, 6, ImageStore.getImage(ImageStore.TEMPLATE),
"select - select columns from a table or view", null, null);
-System.out.println(this.text);
+//System.out.println(this.text);
// complete a key word
// complete a function
--- /dev/null
+package com.quantum.editors;
+
+import java.util.List;
+import java.util.StringTokenizer;
+
+import com.quantum.ImageStore;
+import com.quantum.sql.parser.SQLParser;
+
+import org.eclipse.jface.text.DocumentEvent;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentListener;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+
+
+/**
+ * @author BC
+ */
+public class SQLContentOutlinePage extends ContentOutlinePage {
+
+ class LabelProviderImpl implements ILabelProvider {
+ public Image getImage(Object element) {
+ return ImageStore.getImage(ImageStore.SCRIPT);
+ }
+
+ public String getText(Object element) {
+ if (element != null && element instanceof String) {
+ StringTokenizer tokenizer = new StringTokenizer((String) element);
+
+ String token = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : "";
+
+ if ("select".equalsIgnoreCase(token)
+ || "update".equalsIgnoreCase(token)
+ || "insert".equalsIgnoreCase(token)
+ || "delete".equalsIgnoreCase(token)
+ || "grant".equalsIgnoreCase(token)) {
+ return token;
+ } else if (tokenizer.hasMoreTokens()) {
+ return token + " " + tokenizer.nextToken();
+ } else {
+ return token;
+ }
+ } else {
+ return element == null ? "" : element.toString();
+ }
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+ }
+
+ class ContentProviderImpl implements ITreeContentProvider {
+
+ public Object[] getElements(Object inputElement) {
+ if (inputElement != null && inputElement instanceof IDocument) {
+ String text = ((IDocument) inputElement).get();
+ List sql = SQLParser.parse(text);
+ return sql.toArray();
+ } else {
+ return null;
+ }
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ public Object[] getChildren(Object parentElement) {
+ return null;
+ }
+
+ public Object getParent(Object element) {
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ return false;
+ }
+ }
+
+ private IDocumentListener listener;
+
+ private final SQLDocumentProvider documentProvider;
+ private IEditorInput editorInput;
+ /**
+ * @param documentProvider
+ * @param editor
+ */
+ public SQLContentOutlinePage(SQLDocumentProvider documentProvider, SQLEditor editor) {
+ this.documentProvider = documentProvider;
+ }
+
+
+
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+
+ final TreeViewer treeViewer = getTreeViewer();
+
+ IDocument document = this.documentProvider.getDocument(this.editorInput);
+ if (document != null) {
+ treeViewer.setLabelProvider(new LabelProviderImpl());
+ treeViewer.setContentProvider(new ContentProviderImpl());
+ treeViewer.setInput(document);
+
+ this.listener = new IDocumentListener() {
+
+ public void documentAboutToBeChanged(DocumentEvent event) {
+ }
+
+ public void documentChanged(DocumentEvent event) {
+ treeViewer.refresh();
+ }
+ };
+ document.addDocumentListener(this.listener);
+ }
+ }
+ /**
+ * @param editorInput
+ */
+ public void setInput(IEditorInput editorInput) {
+ this.editorInput = editorInput;
+ }
+
+
+ public void dispose() {
+ if (this.listener != null) {
+ IDocument document = this.documentProvider.getDocument(this.editorInput);
+ if (document != null) {
+ document.removeDocumentListener(this.listener);
+ this.listener = null;
+ }
+ }
+ super.dispose();
+ }
+}
}
protected IDocument createDocument(Object element) throws CoreException {
+//System.out.println("element: " + element.getClass().getName());
IDocument document = super.createDocument(element);
if (document != null) {
IDocumentPartitioner partitioner =
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.editors.text.TextEditor;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
public class SQLEditor extends TextEditor {
- SQLConfiguration config;
+ private SQLSourceViewerConfiguration config;
private ColorManager colorManager;
+ private SQLContentOutlinePage outlinePage;
/**
* An editor capable of editing SQL scripts
*/
public SQLEditor() {
super();
+//System.out.println("SQL Editor");
colorManager = new ColorManager();
- config = new SQLConfiguration(colorManager);
+ config = new SQLSourceViewerConfiguration(colorManager);
config.loadPrefs();
setPreferenceStore(QuantumPlugin.getDefault().getPreferenceStore());
Color background = colorManager.getColor(SQLColorConstants.BACKGROUND);
widget.setBackground(background);
}
+
+ public Object getAdapter(Class required) {
+ if (IContentOutlinePage.class.equals(required)) {
+ if (this.outlinePage == null) {
+ this.outlinePage= new SQLContentOutlinePage(
+ (SQLDocumentProvider) getDocumentProvider(), this);
+ if (getEditorInput() != null)
+ this.outlinePage.setInput(getEditorInput());
+ }
+ return this.outlinePage;
+ }
+ return super.getAdapter(required);
+ }
+
}
--- /dev/null
+package com.quantum.editors;
+
+import java.util.HashMap;
+
+import com.quantum.QuantumPlugin;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.TextAttribute;
+import org.eclipse.jface.text.contentassist.ContentAssistant;
+import org.eclipse.jface.text.contentassist.IContentAssistant;
+import org.eclipse.jface.text.presentation.IPresentationReconciler;
+import org.eclipse.jface.text.presentation.PresentationReconciler;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+
+public class SQLSourceViewerConfiguration extends SourceViewerConfiguration {
+ private PresentationReconciler reconciler = new PresentationReconciler();
+ private ColorManager colorManager;
+ private HashMap cache = new HashMap();
+ private boolean textBold = false;
+ private boolean keywordBold = true;
+ private boolean stringBold = false;
+ private boolean commentBold = false;
+ private boolean numericBold = false;
+ public SQLSourceViewerConfiguration(ColorManager colorManager) {
+ this.colorManager = colorManager;
+ }
+ public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
+ return new String[] {
+ IDocument.DEFAULT_CONTENT_TYPE,
+ SQLPartitionScanner.SQL_COMMENT,
+ SQLPartitionScanner.SQL_KEYWORD,
+ SQLPartitionScanner.SQL_IDENTIFIER};
+ }
+
+ public IPresentationReconciler getPresentationReconciler(ISourceViewer sourceViewer) {
+ initializeColors();
+ return reconciler;
+ }
+ public void loadPrefs() {
+ IPreferenceStore store = QuantumPlugin.getDefault().getPreferenceStore();
+ textBold = store.getBoolean("quantum.text.bold"); //$NON-NLS-1$
+ keywordBold = store.getBoolean("quantum.keyword.bold"); //$NON-NLS-1$
+ stringBold = store.getBoolean("quantum.string.bold"); //$NON-NLS-1$
+ commentBold = store.getBoolean("quantum.comment.bold"); //$NON-NLS-1$
+ numericBold = store.getBoolean("quantum.numeric.bold"); //$NON-NLS-1$
+ SQLColorConstants.BACKGROUND = PreferenceConverter.getColor(store, "quantum.background.color"); //$NON-NLS-1$
+ SQLColorConstants.DEFAULT = PreferenceConverter.getColor(store, "quantum.text.color"); //$NON-NLS-1$
+ SQLColorConstants.IDENTIFIER = PreferenceConverter.getColor(store, "quantum.text.color"); //$NON-NLS-1$
+ SQLColorConstants.KEYWORD = PreferenceConverter.getColor(store, "quantum.keyword.color"); //$NON-NLS-1$
+ SQLColorConstants.STRING = PreferenceConverter.getColor(store, "quantum.string.color"); //$NON-NLS-1$
+ SQLColorConstants.COMMENT = PreferenceConverter.getColor(store, "quantum.comment.color"); //$NON-NLS-1$
+ SQLColorConstants.NUMERIC = PreferenceConverter.getColor(store, "quantum.numeric.color"); //$NON-NLS-1$
+ }
+ public void initializeColors() {
+ setDamageRepairer(getAttr(SQLColorConstants.KEYWORD, keywordBold), SQLPartitionScanner.SQL_KEYWORD);
+ setDamageRepairer(getAttr(SQLColorConstants.COMMENT, commentBold), SQLPartitionScanner.SQL_COMMENT);
+ setDamageRepairer(getAttr(SQLColorConstants.STRING, stringBold), SQLPartitionScanner.SQL_STRING);
+ setDamageRepairer(getAttr(SQLColorConstants.DEFAULT, textBold), IDocument.DEFAULT_CONTENT_TYPE);
+ setDamageRepairer(getAttr(SQLColorConstants.DEFAULT, textBold), SQLPartitionScanner.SQL_SYMBOL);
+ setDamageRepairer(getAttr(SQLColorConstants.DEFAULT, textBold), SQLPartitionScanner.SQL_IDENTIFIER);
+ setDamageRepairer(getAttr(SQLColorConstants.DEFAULT, textBold), SQLPartitionScanner.SQL_SEPARATOR);
+ setDamageRepairer(getAttr(SQLColorConstants.NUMERIC, numericBold), SQLPartitionScanner.SQL_NUMERIC);
+ }
+ public TextAttribute getAttr(RGB color, boolean bold) {
+ colorManager.getColor(SQLColorConstants.BACKGROUND);
+ Color foreground = colorManager.getColor(color);
+ TextAttribute attr = new TextAttribute(foreground);
+ if (bold) {
+ return new TextAttribute(foreground, attr.getBackground(), SWT.BOLD);
+ }
+ return attr;
+ }
+ public void setDamageRepairer(TextAttribute attr, String token) {
+ NonRuleBasedDamagerRepairer ndr = (NonRuleBasedDamagerRepairer) cache.get(token);
+ if (ndr == null) {
+ ndr =
+ new NonRuleBasedDamagerRepairer(attr);
+ reconciler.setDamager(ndr, token);
+ reconciler.setRepairer(ndr, token);
+ cache.put(token, ndr);
+ } else {
+ ndr.setTextAttribute(attr);
+ }
+ }
+// public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
+// ContentAssistant assistant = new ContentAssistant();
+// assistant.setContentAssistProcessor(new SQLContentAssistProcessor("default"),
+// IDocument.DEFAULT_CONTENT_TYPE);
+//// assistant.setContentAssistProcessor(new SQLContentAssistProcessor("comment"),
+//// SQLPartitionScanner.SQL_COMMENT);
+//// assistant.setContentAssistProcessor(new SQLContentAssistProcessor("keyword"),
+//// SQLPartitionScanner.SQL_KEYWORD);
+//// assistant.setContentAssistProcessor(new SQLContentAssistProcessor("identifier"),
+//// SQLPartitionScanner.SQL_IDENTIFIER);
+//
+// // everybody else is doin' it...
+// assistant.enableAutoActivation(true);
+// assistant.setAutoActivationDelay(500);
+//
+// assistant.setProposalPopupOrientation(ContentAssistant.CONTEXT_INFO_BELOW);
+// assistant.setContextInformationPopupOrientation(ContentAssistant.CONTEXT_INFO_BELOW);
+// return assistant;
+// }
+}
\ No newline at end of file
setPromptForPassword(data.getPromptForPassword());
setAutoCommit(data.isAutoCommit());
setAutoCommitPreference(data.getAutoCommitPreference());
+ setSchemaRule(data.getSchemaRule());
this.schemas.addAll(data.schemas);
this.quickList = new Hashtable(data.quickList);
import com.quantum.IQuantumConstants;
import com.quantum.Messages;
+import com.quantum.adapters.AdapterFactory;
import com.quantum.model.xml.ModelToXMLConverter;
import com.quantum.sql.metadata.MetaDataXMLInterface;
+import com.quantum.util.JarUtil;
/**
* The collection of database bookmarks that the Quantum plug-in knows about.
*/
public class BookmarkCollection {
- private static BookmarkCollection instance = new BookmarkCollection();
+
+private static final String SUN_JDBC_ODBC_DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
+ private static BookmarkCollection instance = new BookmarkCollection();
private List bookmarks = new Vector();
private boolean changed = false;
private PropertyChangeSupport support = new PropertyChangeSupport(this);
String driver = props.getProperty(i + ".driver"); //$NON-NLS-1$
String driverFile = props.getProperty(i + ".driverLocation"); //$NON-NLS-1$
String type = props.getProperty(i + ".type"); //$NON-NLS-1$
- this.drivers.add(new JDBCDriver(driver, driverFile, type));
+ this.drivers.add(new JDBCDriver(driver, new String[] { driverFile }, type));
}
if (overwrite) {
this.bookmarks = newBookmarks;
for (int i = 0; i < nodes.getLength(); i++) {
Element driver = (Element) nodes.item(i);
- if (!"".equals(driver.getAttribute("type"))) {
+ List jarFileNames = new ArrayList();
+ String jarFileName = driver.getAttribute("jarFileName");
+ if (jarFileName != null && jarFileName.trim().length() > 0) {
+ jarFileNames.add(jarFileName);
+ }
+ NodeList jars = driver.getElementsByTagName("jar");
+ for (int j = 0; j < jars.getLength(); j++) {
+ String fileName = ((Element) jars.item(j)).getAttribute("fileName");
+ if (fileName != null && fileName.trim().length() > 0) {
+ jarFileNames.add(fileName);
+ }
+ }
+
+ if (!isQuantum232Notation(driver)) {
addDriver(new JDBCDriver(
driver.getAttribute("className"),
- driver.getAttribute("jarFileName"),
+ (String[]) jarFileNames.toArray(new String[jarFileNames.size()]),
driver.getAttribute("type"),
driver.getAttribute("name"),
driver.getAttribute("version")));
}
-
+ }
+ addStandardDrivers();
+ }
+
+ /**
+ * An earlier version of the Quantum XML format omitted the
+ * type.
+ *
+ * @param driver
+ * @return
+ */
+ private boolean isQuantum232Notation(Element driver) {
+ return "".equals(driver.getAttribute("type"));
+ }
+
+ /**
+ *
+ */
+ private void addStandardDrivers() {
+ if (JarUtil.loadDriver(null, SUN_JDBC_ODBC_DRIVER) != null) {
+ addDriver(new JDBCDriver(SUN_JDBC_ODBC_DRIVER, new String[0],
+ AdapterFactory.JDBC_ODBC_BRIDGE));
}
}
backwardCompatibility(bookmark, column);
String driverClassName = MetaDataXMLInterface.getElementText(column,"driver"); //$NON-NLS-1$
- String driverFile = MetaDataXMLInterface.getElementText(column,"driverLocation"); //$NON-NLS-1$
+
+ List jarFiles = new ArrayList();
+ NodeList driverLocations = column.getElementsByTagName("driverLocation");
+ for (int j = 0, length = driverLocations == null
+ ? 0 : driverLocations.getLength(); j < length; j++) {
+ String jarFileName = MetaDataXMLInterface.extractText((Element) driverLocations.item(j), "");
+ if (jarFileName != null && jarFileName.trim().length() > 0) {
+ jarFiles.add(jarFileName);
+ }
+ }
String type = MetaDataXMLInterface.getElementText(column,"type"); //$NON-NLS-1$
- bookmark.setJDBCDriver(new JDBCDriver(driverClassName, driverFile, type));
+ bookmark.setJDBCDriver(new JDBCDriver(driverClassName,
+ (String[]) jarFiles.toArray(new String[jarFiles.size()]),
+ type));
NodeList children = column.getElementsByTagName("Other_Schemas");
if (children.getLength() > 0) {
}
public JDBCDriver[] getJDBCDrivers() {
- return (JDBCDriver[]) this.drivers.toArray(new JDBCDriver[this.drivers.size()]);
+ if (this.drivers.isEmpty()) {
+ addStandardDrivers();
+ }
+
+ List list = new ArrayList(this.drivers);
+ Collections.sort(list);
+ return (JDBCDriver[]) list.toArray(new JDBCDriver[list.size()]);
}
/**
* @return
* @param driver
* @param driverFile
*/
- public JDBCDriver findDriver(String driverClassName, String driverFile, String type) {
- JDBCDriver temp = new JDBCDriver(driverClassName, driverFile, type);
+ public JDBCDriver findDriver(String driverClassName, String[] driverFiles, String type) {
+ JDBCDriver temp = new JDBCDriver(driverClassName, driverFiles, type);
return findDriver(temp);
}
return result;
}
-
+ /**
+ * @param driver
+ */
+ public boolean removeDriver(JDBCDriver driver) {
+ boolean found = false;
+ for (Iterator i = this.bookmarks.iterator();
+ !found && driver != null && i.hasNext();) {
+ Bookmark bookmark = (Bookmark) i.next();
+ found |= driver.equals(bookmark.getJDBCDriver());
+ }
+
+ if (!found && driver != null && !SUN_JDBC_ODBC_DRIVER.equals(driver.getClassName())) {
+ boolean deleted = this.drivers.remove(driver);
+ if (deleted) {
+ this.support.firePropertyChange("drivers", null, null);
+ }
+ return deleted;
+ } else {
+ return false;
+ }
+ }
}
package com.quantum.model;
-import com.quantum.sql.SQLHelper;
+import com.quantum.util.sql.TypesHelper;
/**
* @author BC
* @see com.quantum.model.Column#isNumeric()
*/
public boolean isNumeric() {
- return SQLHelper.isNumeric(this.type);
+ return TypesHelper.isNumeric(this.type);
}
/**
import com.quantum.adapters.DatabaseAdapter;
import com.quantum.sql.MultiSQLServer;
-import com.quantum.sql.SQLResults;
+import com.quantum.sql.SQLResultSetResults;
/**
* @author BC
*/
public class Database {
- private DatabaseAdapter databaseAdapter;
+ private static final int TABLE_METADATA_TABLE_SCHEM = 2;
+ private static final int TABLE_METADATA_TABLE_NAME = 3;
+
+ private static final int TABLE_TYPE_METADATA_TABLE_TYPE = 1;
+
+ private static final int FOREIGN_KEY_METADATA_PKTABLE_SCHEM = 2;
+ private static final int FOREIGN_KEY_METADATA_PKTABLE_NAME = 3;
+ private static final int FOREIGN_KEY_METADATA_PKCOLUMN_NAME = 4;
+ private static final int FOREIGN_KEY_METADATA_FKTABLE_SCHEM = 6;
+ private static final int FOREIGN_KEY_METADATA_FKTABLE_NAME = 7;
+ private static final int FOREIGN_KEY_METADATA_FKCOLUMN_NAME = 8;
+ private static final int FOREIGN_KEY_METADATA_KEY_SEQ = 9;
+ private static final int FOREIGN_KEY_METADATA_DELETE_RULE = 11;
+ private static final int FOREIGN_KEY_METADATA_FK_NAME = 12;
+
+ private static final int TYPE_INFO_METADATA_TYPE_NAME = 1;
+ private static final int TYPE_INFO_METADATA_DATA_TYPE = 2;
+
+ private DatabaseAdapter databaseAdapter;
private Bookmark bookmark;
public Database(Bookmark bookmark) {
DatabaseMetaData metaData = connection.getMetaData();
ResultSet resultSet = metaData.getTableTypes();
while (resultSet.next()) {
- String type = resultSet.getString("TABLE_TYPE");
+ String type = resultSet.getString(TABLE_TYPE_METADATA_TABLE_TYPE);
if (type != null) {
// Informix, in particular, pads this with extra spaces
type = type.trim();
String sql = getSQL(bookmark, type, schema);
List list = new ArrayList();
- SQLResults results = null;
+ SQLResultSetResults results = null;
if (sql != null) {
- results = MultiSQLServer.getInstance().execute(connection, sql);
+ results = (SQLResultSetResults) MultiSQLServer.getInstance().execute(
+ bookmark, connection, sql, Integer.MAX_VALUE);
for (int i = 1, size = (results == null) ? 0 : results.getRowCount(); i <= size; i++) {
String schemaName = results.getColumnCount() == 1
? schema.getName() : results.getElement(1, i).toString();
DatabaseMetaData metaData = connection.getMetaData();
// getTables needs a null schema to get all the schemas. So we don't pass a "" schema, but a null one
ResultSet set = null;
- if (metaData.supportsSchemasInTableDefinitions())
+ if (metaData.supportsSchemasInTableDefinitions()) {
set = metaData.getTables(null, (schema != null) ? schema.getName() : null, "%", new String[] { type });
- else
+ } else {
set = metaData.getTables(null, null, "%", new String[] { type });
+ }
while (set.next()) {
- String tempSchema = set.getString("TABLE_SCHEM");
+ String tempSchema = set.getString(TABLE_METADATA_TABLE_SCHEM);
tempSchema = (tempSchema == null) ? "" : tempSchema.trim();
- String tableName = set.getString("TABLE_NAME");
+ String tableName = set.getString(TABLE_METADATA_TABLE_NAME);
tableName = (tableName == null) ? "" : tableName.trim();
if (tableName != null && tableName.length() > 0) {
ResultSet results = metaData.getTypeInfo();
try {
while (results.next()) {
- String name = results.getString("TYPE_NAME");
- int type = results.getInt("DATA_TYPE");
+ String name = results.getString(TYPE_INFO_METADATA_TYPE_NAME);
+ int type = results.getInt(TYPE_INFO_METADATA_DATA_TYPE);
list.add(new DataType(type, name));
}
} finally {
int lowestKeySequence = Integer.MAX_VALUE;
try {
while (resultSet.next()) {
- int keySequence = resultSet.getInt("KEY_SEQ");
+ int keySequence = resultSet.getInt(FOREIGN_KEY_METADATA_KEY_SEQ);
lowestKeySequence = Math.min(lowestKeySequence, keySequence);
if (keySequence == lowestKeySequence || foreignKey == null) {
foreignKey = new ForeignKeyImpl();
list.add(foreignKey);
- foreignKey.setName(resultSet.getString("FK_NAME"));
- foreignKey.setDeleteRule(resultSet.getShort("DELETE_RULE"));
- foreignKey.setForeignEntitySchema(resultSet.getString("FKTABLE_SCHEM"));
- foreignKey.setForeignEntityName(resultSet.getString("FKTABLE_NAME"));
- foreignKey.setLocalEntitySchema(resultSet.getString("PKTABLE_SCHEM"));
- foreignKey.setLocalEntityName(resultSet.getString("PKTABLE_NAME"));
+ foreignKey.setName(resultSet.getString(FOREIGN_KEY_METADATA_FK_NAME));
+ foreignKey.setDeleteRule(resultSet.getShort(FOREIGN_KEY_METADATA_DELETE_RULE));
+ foreignKey.setForeignEntitySchema(resultSet.getString(FOREIGN_KEY_METADATA_FKTABLE_SCHEM));
+ foreignKey.setForeignEntityName(resultSet.getString(FOREIGN_KEY_METADATA_FKTABLE_NAME));
+ foreignKey.setLocalEntitySchema(resultSet.getString(FOREIGN_KEY_METADATA_PKTABLE_SCHEM));
+ foreignKey.setLocalEntityName(resultSet.getString(FOREIGN_KEY_METADATA_PKTABLE_NAME));
}
foreignKey.addColumns(
- resultSet.getString("PKCOLUMN_NAME"),
- resultSet.getString("FKCOLUMN_NAME"));
+ resultSet.getString(FOREIGN_KEY_METADATA_PKCOLUMN_NAME),
+ resultSet.getString(FOREIGN_KEY_METADATA_FKCOLUMN_NAME));
}
return (ForeignKey[]) list.toArray(new ForeignKey[list.size()]);
} finally {
--- /dev/null
+package com.quantum.model;
+
+import java.util.Comparator;
+
+
+/**
+ * This class is used to compare two displayable objects.
+ *
+ * @author BC Holmes
+ */
+public class DisplayableComparator implements Comparator {
+
+ public int compare(Object arg0, Object arg1) {
+ if (arg0 == null && arg1 == null) {
+ return 0;
+ } else if (arg0 == null) {
+ return -1;
+ } else if (arg1 == null) {
+ return 1;
+ } else {
+ return compare((Displayable) arg0, (Displayable) arg1);
+ }
+ }
+
+ /**
+ * @param displayable0
+ * @param displayable1
+ * @return
+ */
+ private int compare(Displayable displayable0, Displayable displayable1) {
+ if (displayable0.getDisplayName() == null && displayable1.getDisplayName() == null) {
+ return 0;
+ } else if (displayable0.getDisplayName() == null) {
+ return -1;
+ } else if (displayable1.getDisplayName() == null) {
+ return 1;
+ } else {
+ return displayable0.getDisplayName().toLowerCase().compareTo(
+ displayable1.getDisplayName().toLowerCase());
+ }
+ }
+
+}
- package com.quantum.model;
+package com.quantum.model;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
* @author bcholmes
*/
abstract class EntityImpl implements Entity {
- private String schema;
+
+ // The JDBC-ODBC Driver is more happy if you look up metadata values
+ // using the column number than if you use the column name
+
+ private static final int INDEX_METADATA_INDEX_NAME = 6;
+ private static final int INDEX_METADATA_COLUMN_NAME = 9;
+ private static final int INDEX_METADATA_ASC_OR_DESC = 10;
+
+ private static final int PRIMARY_KEYS_METADATA_COLUMN_NAME = 4;
+ private static final int PRIMARY_KEYS_METADATA_KEY_SEQ = 5;
+
+ private static final int COLUMN_METADATA_COLUMN_NAME = 4;
+ private static final int COLUMN_METATDATA_DATA_TYPE = 5;
+ private static final int COLUMN_METATDATA_TYPE_NAME = 6;
+ private static final int COLUMN_METADATA_COLUMN_SIZE = 7;
+ private static final int COLUMN_METADATA_DECIMAL_DIGITS = 9;
+ private static final int COLUMN_METADATA_REMARKS = 12;
+ private static final int COLUMN_METADATA_ORDINAL_POSITION = 17;
+ private static final int COLUMN_METADATA_IS_NULLABLE = 18;
+
+ private String schema;
private String name;
private String type;
private Bookmark bookmark;
while (resultSet.next()) {
ColumnImpl column = new ColumnImpl(
this,
- resultSet.getString("COLUMN_NAME"),
- resultSet.getString("TYPE_NAME"),
- resultSet.getInt("DATA_TYPE"),
- resultSet.getInt("COLUMN_SIZE"),
- resultSet.getInt("DECIMAL_DIGITS"),
- "YES".equalsIgnoreCase(resultSet.getString("IS_NULLABLE")),
- resultSet.getInt("ORDINAL_POSITION"),
- getComments(resultSet.getString("REMARKS"),getQualifiedName(), resultSet.getString("COLUMN_NAME"))
+ resultSet.getString(COLUMN_METADATA_COLUMN_NAME),
+ resultSet.getString(COLUMN_METATDATA_TYPE_NAME),
+ resultSet.getInt(COLUMN_METATDATA_DATA_TYPE),
+ resultSet.getInt(COLUMN_METADATA_COLUMN_SIZE),
+ resultSet.getInt(COLUMN_METADATA_DECIMAL_DIGITS),
+ "YES".equalsIgnoreCase(resultSet.getString(COLUMN_METADATA_IS_NULLABLE)),
+ resultSet.getInt(COLUMN_METADATA_ORDINAL_POSITION),
+ getComments(
+ resultSet.getString(COLUMN_METADATA_REMARKS),
+ getQualifiedName(),
+ resultSet.getString(COLUMN_METADATA_COLUMN_NAME))
);
temp.put(column.getName(), column);
}
resultSet = metaData.getPrimaryKeys(null, getSchema(), getName());
try {
while (resultSet.next()) {
- String name = resultSet.getString("COLUMN_NAME");
- short keySequence = resultSet.getShort("KEY_SEQ");
+ String name = resultSet.getString(PRIMARY_KEYS_METADATA_COLUMN_NAME);
+ short keySequence = resultSet.getShort(PRIMARY_KEYS_METADATA_KEY_SEQ);
ColumnImpl column = (ColumnImpl) temp.get(name);
if (column != null) {
column.setPrimaryKeyOrder(keySequence);
String comment = "";
try {
Connection con = this.bookmark.getConnection();
- Statement stmt = con.createStatement();
DatabaseAdapter adapter = this.bookmark.getAdapter();
- if (adapter != null && stmt != null && adapter.getCommentsQuery(tableName, columnName) != null) {
-
- stmt.execute(adapter.getCommentsQuery(tableName, columnName));
- ResultSet set = stmt.getResultSet();
- if (set.next())
- comment = set.getString(1);
+ Statement stmt = con.createStatement();
+ try {
+ if (adapter != null && stmt != null
+ && adapter.getCommentsQuery(tableName, columnName) != null) {
+
+ stmt.execute(adapter.getCommentsQuery(tableName, columnName));
+ ResultSet set = stmt.getResultSet();
+ try {
+ if (set.next()) {
+ comment = set.getString(1);
+ }
+ } finally {
+ set.close();
+ }
+ }
+ } finally {
+ stmt.close();
}
} catch (NotConnectedException e) {
} catch (SQLException e) {
return comment;
}
+
public Index[] getIndexes() {
List indexList = new ArrayList();
ResultSet resultSet = metaData.getIndexInfo(null, getSchema(), getName(), false, false);
while (resultSet.next()) {
- String indexName = resultSet.getString("INDEX_NAME");
+ String indexName = resultSet.getString(INDEX_METADATA_INDEX_NAME);
IndexImpl index = (IndexImpl) temp.get(indexName);
if (index == null) {
index = new IndexImpl(this, indexName);
temp.put(indexName, index);
}
- String columnName = resultSet.getString("COLUMN_NAME");
- String ascending = resultSet.getString("ASC_OR_DESC");
+ String columnName = resultSet.getString(INDEX_METADATA_COLUMN_NAME);
+ String ascending = resultSet.getString(INDEX_METADATA_ASC_OR_DESC);
index.addColumn(columnName, ascending == null
? null : (ascending.toUpperCase().startsWith("A")
? Boolean.TRUE : Boolean.FALSE));
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
+import java.io.File;
import java.sql.Driver;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
import com.quantum.util.JarUtil;
+import com.quantum.util.StringArrayComparator;
/**
* @author BC
*/
-public class JDBCDriver {
+public class JDBCDriver implements Comparable, Displayable {
private String name;
private String version;
private String className;
- private String jarFileName;
+ private List jarFileNames = Collections.synchronizedList(new ArrayList());
private String type;
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
/**
* @param className
* @param jarFileName
*/
- public JDBCDriver(String className, String jarFileName, String type) {
- this(className, jarFileName, type, null, null);
- }
- /**
- *
- */
- public JDBCDriver() {
+ public JDBCDriver(String className, String[] jarFileNames, String type) {
+ this(className, jarFileNames, type, null, null);
}
/**
* @param className
* @param name
* @param version
*/
- public JDBCDriver(String className, String jarFileName, String type, String name, String version) {
+ public JDBCDriver(String className, String[] jarFileNames, String type, String name, String version) {
this.name = name;
this.version = version;
this.type = type;
this.className = className;
- this.jarFileName = jarFileName;
+ this.jarFileNames.addAll(Arrays.asList(jarFileNames));
}
/**
* @return Returns the className.
/**
* @return Returns the jarFileName.
*/
- public String getJarFileName() {
- return this.jarFileName;
+ public String[] getJarFileNames() {
+ return (String[]) this.jarFileNames.toArray(new String[this.jarFileNames.size()]);
}
/**
* @param jarFileName The jarFileName to set.
*/
- public void setJarFileName(String jarFileName) {
- if (jarFileName != null && !jarFileName.equals(this.jarFileName)) {
- String original = this.jarFileName;
- this.jarFileName = jarFileName;
- this.propertyChangeSupport.firePropertyChange("jarFileName", original, jarFileName);
+ public void setJarFileNames(String[] jarFileNames) {
+ StringArrayComparator comparator = new StringArrayComparator();
+ if (comparator.compare(
+ (String[]) this.jarFileNames.toArray(new String[this.jarFileNames.size()]),
+ jarFileNames) != 0) {
+ String[] original = getJarFileNames();
+ this.jarFileNames.clear();
+ this.jarFileNames.addAll(Arrays.asList(jarFileNames));
+ this.propertyChangeSupport.firePropertyChange("jarFileName", original, jarFileNames);
}
}
/**
} else if (getClass() != object.getClass()) {
return false;
} else {
- JDBCDriver that = (JDBCDriver) object;
-
- if (this.className == null && that.className != null) {
- return false;
- } else if (this.className != null && !this.className.equals(that.className)) {
- return false;
- } else if (this.jarFileName == null && that.jarFileName != null) {
- return false;
- } else if (this.jarFileName != null && !this.jarFileName.equals(that.jarFileName)) {
- return false;
- } else if (this.type == null && that.type != null) {
- return false;
- } else if (this.type != null && !this.type.equals(that.type)) {
- return false;
- } else {
- return true;
- }
+ return equals((JDBCDriver) object);
+ }
+ }
+ /**
+ * @param that
+ * @return
+ */
+ private boolean equals(JDBCDriver that) {
+ if (this.className == null && that.className != null) {
+ return false;
+ } else if (this.className != null && !this.className.equals(that.className)) {
+ return false;
+ } else if ((new StringArrayComparator()).compare(
+ this.getJarFileNames(), that.getJarFileNames()) != 0) {
+ return false;
+ } else if (this.type == null && that.type != null) {
+ return false;
+ } else if (this.type != null && !this.type.equals(that.type)) {
+ return false;
+ } else {
+ return true;
}
}
public int hashCode() {
if (this.className != null) {
hashCode ^= this.className.hashCode();
}
- if (this.jarFileName != null) {
- hashCode ^= this.jarFileName.hashCode();
+ for (Iterator i = this.jarFileNames.iterator(); i.hasNext();) {
+ Object jarFile = i.next();
+ if (jarFile != null) {
+ hashCode ^= jarFile.hashCode();
+ }
}
if (this.type != null) {
hashCode ^= this.type.hashCode();
}
public Driver getDriver() {
- return JarUtil.loadDriver(getJarFileName(), getClassName());
+ return JarUtil.loadDriver(getJarFileNames(), getClassName());
}
/**
* @param listener
this.propertyChangeSupport.firePropertyChange("type", original, type);
}
}
+ /* (non-Javadoc)
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+ public int compareTo(Object object) {
+ return (new DisplayableComparator()).compare(this, object);
+ }
+ /* (non-Javadoc)
+ * @see com.quantum.model.Displayable#getDisplayName()
+ */
+ public String getDisplayName() {
+ return getName();
+ }
+
+ public String getJarFilePath() {
+ StringBuffer buffer = new StringBuffer();
+ for (Iterator i = this.jarFileNames.iterator(); i.hasNext();) {
+ String element = (String) i.next();
+ buffer.append(element);
+ if (i.hasNext()) {
+ buffer.append(File.pathSeparator);
+ }
+ }
+ return buffer.toString();
+ }
}
import java.sql.SQLException;
import com.quantum.sql.MultiSQLServer;
-import com.quantum.sql.SQLHelper;
class TableImpl extends EntityImpl implements Table {
public Integer getSize() {
Integer size = null;
try {
- size = new Integer(SQLHelper.getSize(
+ size = new Integer(MultiSQLServer.getInstance().getSize(getBookmark(),
getBookmark().getConnection(), getQualifiedName(),
getBookmark().getAdapter()));
} catch (SQLException e) {
public void deleteAllRows() throws SQLException, ConnectionException {
String sql = "DELETE FROM " + getQualifiedName();
- MultiSQLServer.getInstance().execute(getBookmark().getConnection(), sql);
+ MultiSQLServer.getInstance().execute(getBookmark(), getBookmark().getConnection(), sql);
}
}
\ No newline at end of file
import java.sql.SQLException;
-import com.quantum.sql.SQLHelper;
+import com.quantum.sql.MultiSQLServer;
class ViewImpl extends EntityImpl implements View {
public Integer getSize() {
Integer size = null;
try {
- size = new Integer(SQLHelper.getSize(
+ size = new Integer(MultiSQLServer.getInstance().getSize(getBookmark(),
getBookmark().getConnection(), getQualifiedName(),
getBookmark().getAdapter()));
} catch (SQLException e) {
driverNode.setAttribute("name", jdbcDriver.getName());
driverNode.setAttribute("version", jdbcDriver.getVersion());
driverNode.setAttribute("type", jdbcDriver.getType());
- driverNode.setAttribute("jarFileName", jdbcDriver.getJarFileName());
driverNode.setAttribute("className", jdbcDriver.getClassName());
+
+ String[] fileNames = jdbcDriver.getJarFileNames();
+ for (int i = 0, length = fileNames == null ? 0 : fileNames.length; i < length; i++) {
+ if (fileNames[i] != null) {
+ Element fileName = document.createElement("jar");
+ fileName.setAttribute("fileName", fileNames[i]);
+ driverNode.appendChild(fileName);
+ }
+ }
+
bookmarkRoot.appendChild(driverNode);
}
MetaDataXMLInterface.createElementText(bookmark,"autoCommitPreference", b.getAutoCommitPreference()); //$NON-NLS-1$
MetaDataXMLInterface.createElementText(bookmark,"driver", b.getJDBCDriver().getClassName()); //$NON-NLS-1$
MetaDataXMLInterface.createElementText(bookmark,"type", b.getJDBCDriver().getType()); //$NON-NLS-1$
- MetaDataXMLInterface.createElementText(bookmark,"driverLocation", b.getJDBCDriver().getJarFileName()); //$NON-NLS-1$
+ String[] fileNames = b.getJDBCDriver().getJarFileNames();
+ for (int i = 0, length = fileNames == null ? 0 : fileNames.length; i < length; i++) {
+ MetaDataXMLInterface.createElementText(bookmark,"driverLocation", fileNames[i]);
+ }
Element otherSchemas = (Element) bookmark.appendChild(document.createElement("Other_Schemas")); //$NON-NLS-1$
otherSchemas.setAttribute("schemaRule",
b.useAllSchemas()
--- /dev/null
+package com.quantum.php;
+
+import java.text.MessageFormat;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class PHPMessages {
+
+ private static final String BUNDLE_NAME = "com.quantum.php.PHPResources"; //$NON-NLS-1$
+
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
+
+ private PHPMessages() {
+ }
+
+ public static String getString(Class resourceClass, String key) {
+ return getString(
+ createKey(resourceClass, key));
+ }
+
+ private static String createKey(Class resourceClass, String key) {
+ return resourceClass.getName() + (key.startsWith(".") ? key : "." + key);
+ }
+
+ public static String getString(String key) {
+ try {
+ return RESOURCE_BUNDLE.getString(key);
+ } catch (MissingResourceException e) {
+ return '!' + key + '!';
+ }
+ }
+
+ public static String getString(Class resourceClass, String key, Object[] arguments) {
+ return getString(createKey(resourceClass, key), arguments);
+ }
+
+ public static String getString(String key, Object[] arguments) {
+ String string = getString(key);
+ return MessageFormat.format(string, arguments);
+ }
+}
--- /dev/null
+tableview.phpselect = PHP SELECT to Clipboard...
+tableview.phpupdate = PHP UPDATE to Clipboard...
+tableview.phpinsert = PHP INSERT to Clipboard...
+tableview.phpdelete = PHP DELETE to Clipboard...
+TableView.PHPSelectRow=PHP Select Row
+TableView.PHPUpdateRow=PHP Update Row
+TableView.PHPInsertRow=PHP Insert Row
+TableView.PHPDeleteRow=PHP Delete Row
+
+PHPDeleteRowPage.ColumnName=Column Name
+PHPDeleteRowPage.Value=Value
+PHPDeleteRowPage.IncludeIn=Include in?
+PHPDeleteRowPage.WhereClause=Where clause
+PHPDeleteRowPage.UpdatingQuery=Updating query
+PHPDeleteRowPage.WarningNoWhere=Warning: no \"where clause\" columns selected, all rows will be deleted
+PHPInsertRowPage.ColumnName=Column Name
+PHPInsertRowPage.Value=Value
+PHPUpdateRowPage.ColumnName=Column Name
+PHPUpdateRowPage.OldValue=Old Value
+PHPUpdateRowPage.NewValue=New Value
+PHPUpdateRowPage._13=
+PHPUpdateRowPage.SetValue=Set Value
+PHPSelectRowPage.ColumnName=Column Name
+PHPSelectRowPage.VariableName=Variable Name
+PHPSelectRowPage.NewValue=New Value
+PHPSelectRowPage._13=
+PHPSelectRowPage.SelectValue=Select Value
\ No newline at end of file
-package com.quantum.preferences.php;
+package com.quantum.php.preferences;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
-package com.quantum.preferences.php;
+package com.quantum.php.preferences;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
--- /dev/null
+package com.quantum.php.wizards;
+
+import java.text.MessageFormat;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import com.quantum.QuantumPlugin;
+import com.quantum.adapters.DatabaseAdapter;
+import com.quantum.model.Bookmark;
+import com.quantum.model.Column;
+import com.quantum.model.Entity;
+import com.quantum.php.PHPMessages;
+import com.quantum.wizards.BaseSQLPage;
+import com.quantum.wizards.SQLPage;
+
+public class PHPDeleteRowPage extends BaseSQLPage implements SQLPage {
+ String[] columnNames;
+
+ Text[] values;
+
+ Button[] whereValues;
+
+ Text query;
+
+ IPreferenceStore fStore;
+
+ public PHPDeleteRowPage(String pageName) {
+ super(pageName);
+ }
+
+ public void createControl(Composite parent) {
+ System.out.println("page create control"); //$NON-NLS-1$
+ Composite container = new Composite(parent, SWT.V_SCROLL);
+ fStore = QuantumPlugin.getDefault().getPreferenceStore();
+ GridLayout layout = new GridLayout();
+ container.setLayout(layout);
+ layout.numColumns = 3;
+
+ Entity entity = this.results.getEntity();
+ columnNames = this.results.getColumnNames();
+
+ values = new Text[columnNames.length];
+ whereValues = new Button[columnNames.length];
+ new Label(container, SWT.NULL).setText(PHPMessages
+ .getString("PHPDeleteRowPage.ColumnName")); //$NON-NLS-1$
+ new Label(container, SWT.NULL).setText(PHPMessages
+ .getString("PHPDeleteRowPage.Value")); //$NON-NLS-1$
+ new Label(container, SWT.NULL).setText(PHPMessages
+ .getString("PHPDeleteRowPage.IncludeIn")); //$NON-NLS-1$
+ for (int i = 0; i < columnNames.length; i++) {
+ Label label = new Label(container, SWT.NULL);
+ label.setText(columnNames[i]);
+ values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+// Object object = this.row == null ? null : this.row.get(i + 1);
+// values[i].setText(object == null ? "" : '$'+columnNames[i]); //object.toString());
+ values[i].setText('$'+columnNames[i]); //object.toString());
+ GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+ gridData.widthHint = 150;
+ values[i].setLayoutData(gridData);
+ values[i].addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent event) {
+ updateQuery();
+ }
+ });
+
+ whereValues[i] = new Button(container, SWT.CHECK);
+ whereValues[i].setText(PHPMessages
+ .getString("PHPDeleteRowPage.WhereClause")); //$NON-NLS-1$
+ // we check if it's a primary key to select it in the WHERE clause
+ Column column = getColumn(entity, columnNames[i]);
+ whereValues[i].setSelection(column == null ? false : column
+ .isPrimaryKey());
+ whereValues[i].addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ updateQuery();
+ }
+ });
+ }
+ query = new Text(container, SWT.MULTI | SWT.READ_ONLY | SWT.WRAP);
+ GridData gridData = new GridData();
+ gridData.horizontalSpan = layout.numColumns;
+ gridData.verticalSpan = 3;
+ gridData.horizontalAlignment = GridData.FILL;
+ gridData.verticalAlignment = GridData.FILL;
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.grabExcessVerticalSpace = true;
+ query.setLayoutData(gridData);
+
+ setControl(container);
+ updateQuery();
+
+ setPageComplete(true);
+ }
+
+ public void updateQuery() {
+ System.out.println(PHPMessages.getString("PHPDeleteRowPage.UpdatingQuery")); //$NON-NLS-1$
+ StringBuffer whereClause = new StringBuffer();
+ Bookmark bookmark = this.results.getBookmark();
+ Entity entity = this.results.getEntity();
+ DatabaseAdapter adapter = bookmark.getAdapter();
+
+ int numSelected = 0;
+ for (int i = 0; i < columnNames.length; i++) {
+ if (whereValues[i].getSelection()) {
+ if (numSelected > 0)
+ whereClause.append(" AND "); //$NON-NLS-1$
+ numSelected++;
+ whereClause.append("("); //$NON-NLS-1$
+ whereClause.append(columnNames[i]);
+ whereClause.append(" = "); //$NON-NLS-1$
+ appendColumn(whereClause, entity, columnNames[i], adapter, values[i]
+ .getText());
+ whereClause.append(")"); //$NON-NLS-1$
+ }
+ }
+ // String query = "DELETE FROM " +
+ // this.results.getEntity().getQuotedTableName(); //$NON-NLS-1$
+ // if (numSelected > 0) {
+ // query += " WHERE " + whereClause.toString(); //$NON-NLS-1$
+ // }
+ // if (numSelected > 0) {
+ // setMessage(""); //$NON-NLS-1$
+ // } else {
+ // setMessage(PHPMessages.getString("PHPDeleteRowPage.WarningNoWhere"));
+ // //$NON-NLS-1$
+ // }
+ String[] arguments = { this.results.getEntity().getQuotedTableName(),
+ whereClause.toString() };
+ MessageFormat form = new MessageFormat(fStore
+ .getString("phpeclipse.sql.delete.template"));
+
+ String query = form.format(arguments);
+
+ if (numSelected > 0) {
+ setMessage(""); //$NON-NLS-1$
+ } else {
+ setMessage(PHPMessages.getString("PHPDeleteRowPage.WarningNoWhere"));
+ }
+
+ this.query.setText(query);
+ }
+
+ protected String getQueryText() {
+ return query.getText();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.quantum.wizards.SQLPage#performFinish()
+ */
+ public boolean performFinish() {
+ QuantumPlugin.getDefault().getSysClip().setContents(
+ new Object[] { query.getText() },
+ new Transfer[] { TextTransfer.getInstance() });
+ return true;
+ }
+}
+//import java.text.MessageFormat;
+//
+//import org.eclipse.jface.preference.IPreferenceStore;
+//import org.eclipse.jface.wizard.WizardPage;
+//import org.eclipse.swt.SWT;
+//import org.eclipse.swt.dnd.TextTransfer;
+//import org.eclipse.swt.dnd.Transfer;
+//import org.eclipse.swt.events.ModifyEvent;
+//import org.eclipse.swt.events.ModifyListener;
+//import org.eclipse.swt.events.SelectionEvent;
+//import org.eclipse.swt.events.SelectionListener;
+//import org.eclipse.swt.layout.GridData;
+//import org.eclipse.swt.layout.GridLayout;
+//import org.eclipse.swt.widgets.Button;
+//import org.eclipse.swt.widgets.Composite;
+//import org.eclipse.swt.widgets.Label;
+//import org.eclipse.swt.widgets.Text;
+//
+//import com.quantum.QuantumPlugin;
+//import com.quantum.sql.TableRow;
+//import com.quantum.wizards.BaseSQLPage;
+//import com.quantum.wizards.SQLPage;
+////import com.quantum.view.PHPSourceConsole;
+////import com.quantum.view.tableview.TableAdapter;
+//
+//public class PHPDeleteRowPage extends BaseSQLPage implements SQLPage {
+// TableRow row;
+// String[] columnNames;
+// Text[] values;
+// Button[] whereValues;
+// Label query;
+// IPreferenceStore fStore;
+// private final static boolean DEBUG = false;
+//
+// public PHPDeleteRowPage(String pageName) {
+// super(pageName);
+// }
+//
+//// public void init(TableRow row, TableAdapter adapter) {
+//// this.row = row;
+//// }
+//
+// protected String getQueryText() {
+// return query.getText();
+// }
+//
+// public void createControl(Composite parent) {
+// System.out.println("page create control");
+// fStore = QuantumPlugin.getDefault().getPreferenceStore();
+// Composite container = new Composite(parent, SWT.NULL);
+// GridLayout layout = new GridLayout();
+// container.setLayout(layout);
+// int layoutColumns = 3;
+// layout.numColumns = layoutColumns;
+//
+// if (DEBUG) {
+// if (row == null) {
+// System.out.println("Row is null");
+// }
+// if (row.getColumnNames() == null) {
+// System.out.println("Columns are null");
+// }
+// if (row.getTableData() == null) {
+// System.out.println("Data is null");
+// }
+// }
+// columnNames = row.getColumnNames();
+// String[] data = row.getTableData();
+// if (DEBUG) {
+// for (int i = 0; i < row.getColumnCount(); i++) {
+// System.out.println("data = " + i + "=" + data[i]);
+// System.out.println("column = " + i + "=" + columnNames[i]);
+// }
+// }
+// values = new Text[row.getColumnCount()];
+// whereValues = new Button[row.getColumnCount()];
+// Label temp = new Label(container, SWT.NULL);
+// temp.setText("Column Name");
+// temp = new Label(container, SWT.NULL);
+// temp.setText("Value");
+// temp = new Label(container, SWT.NULL);
+// temp.setText("Include in?");
+// for (int i = 0; i < row.getColumnCount(); i++) {
+// Label label = new Label(container, SWT.NULL);
+// label.setText(columnNames[i]);
+// values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+// GridData fullHorizontal = new GridData();
+// fullHorizontal.horizontalAlignment = GridData.FILL;
+// values[i].setLayoutData(fullHorizontal);
+//
+// if (data[i] == null || data[i].equals("")) {
+// values[i].setText('$' + columnNames[i]);
+// } else {
+// values[i].setText(data[i]);
+// }
+//
+// values[i].addModifyListener(new ModifyListener() {
+// public void modifyText(ModifyEvent e) {
+// updateQuery();
+// }
+// });
+//
+// whereValues[i] = new Button(container, SWT.CHECK);
+// whereValues[i].setText("Where clause");
+// whereValues[i].addSelectionListener(new SelectionListener() {
+// public void widgetDefaultSelected(SelectionEvent e) {
+// }
+// public void widgetSelected(SelectionEvent e) {
+// updateQuery();
+// }
+// });
+// }
+// query = new Label(container, SWT.WRAP);
+// GridData gridData = new GridData();
+// gridData.horizontalSpan = layoutColumns;
+// gridData.horizontalAlignment = GridData.FILL;
+// gridData.verticalAlignment = GridData.FILL;
+// gridData.grabExcessHorizontalSpace = true;
+// gridData.grabExcessVerticalSpace = true;
+// query.setLayoutData(gridData);
+//
+// setControl(container);
+// updateQuery();
+//
+// setPageComplete(true);
+// }
+// public void updateQuery() {
+// if (DEBUG) {
+// System.out.println("Updating delete query");
+// }
+// StringBuffer whereClause = new StringBuffer();
+// int numSelected = 0;
+// boolean first = false;
+// for (int i = 0; i < columnNames.length; i++) {
+// if (whereValues[i].getSelection()) {
+// numSelected++;
+// if (first) {
+// whereClause.append(", ");
+// }
+//
+// whereClause.append(columnNames[i]);
+// whereClause.append(" = ");
+// whereClause.append("'" + values[i].getText() + "'");
+//
+// first = true;
+// }
+// }
+// // if (whereClause.length() > 1) {
+// // whereClause.deleteCharAt(whereClause.length() - 1);
+// // whereClause.deleteCharAt(whereClause.length() - 1);
+// // }
+//
+// String[] arguments = { row.getTable(), whereClause.toString()};
+// MessageFormat form = new
+// MessageFormat(fStore.getString("phpeclipse.sql.delete.template"));
+//
+// String query = form.format(arguments);
+//
+// // String query = "$results = mysql_query(\"DELETE FROM " + row.getTable();
+// // if (numSelected > 0) {
+// // query += " WHERE " + whereClause.toString() + "\");";
+// // } else {
+// // query += "\");";
+// // }
+//
+// if (numSelected > 0) {
+// setMessage("");
+// } else {
+// setMessage("Warning: no \"where clause\" columns selected, all rows will be
+// deleted");
+// }
+//
+// this.getControl().pack();
+// this.query.setText(query);
+// }
+// public boolean performFinish() {
+//// PHPSourceConsole console = PHPSourceConsole.getInstance();
+//// console.clear();
+//// console.print(query.getText());
+// QuantumPlugin.getDefault().getSysClip().setContents(
+// new Object[] { query.getText() },
+// new Transfer[] { TextTransfer.getInstance()});
+// return true;
+// }
+//}
--- /dev/null
+package com.quantum.php.wizards;
+
+import java.text.MessageFormat;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import com.quantum.QuantumPlugin;
+import com.quantum.adapters.DatabaseAdapter;
+import com.quantum.model.Bookmark;
+import com.quantum.model.Entity;
+import com.quantum.php.PHPMessages;
+import com.quantum.wizards.BaseSQLPage;
+import com.quantum.wizards.SQLPage;
+
+public class PHPInsertRowPage extends BaseSQLPage implements SQLPage {
+ String[] columnNames;
+ Text[] values;
+ Label query;
+ int numColumns = 0;
+ private IPreferenceStore fStore;
+
+ public PHPInsertRowPage(String pageName) {
+ super(pageName);
+ }
+
+ public void createControl(Composite parent) {
+ System.out.println("page create control"); //$NON-NLS-1$
+ fStore = QuantumPlugin.getDefault().getPreferenceStore();
+ Composite container = new Composite(parent, SWT.V_SCROLL);
+ GridLayout layout = new GridLayout();
+ container.setLayout(layout);
+ layout.numColumns = 2;
+
+ columnNames = this.results.getColumnNames();
+ values = new Text[columnNames.length];
+ new Label(container, SWT.NULL).setText(PHPMessages.getString("PHPInsertRowPage.ColumnName")); //$NON-NLS-1$
+ new Label(container, SWT.NULL).setText(PHPMessages.getString("PHPInsertRowPage.Value")); //$NON-NLS-1$
+ for (int i = 0; i < columnNames.length; i++) {
+ Label label = new Label(container, SWT.NULL);
+ label.setText(columnNames[i]);
+ values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+ GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+ gridData.widthHint = 150;
+ values[i].setLayoutData(gridData);
+
+ //values[i].setText(data[i]);
+ values[i].addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ updateQuery();
+ }
+ });
+ }
+ query = new Label(container, SWT.WRAP);
+ GridData gridData = new GridData();
+ gridData.horizontalSpan = layout.numColumns;
+ gridData.horizontalAlignment = GridData.FILL;
+ gridData.verticalAlignment = GridData.FILL;
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.grabExcessVerticalSpace = true;
+ query.setLayoutData(gridData);
+
+ setControl(container);
+ updateQuery();
+
+ setPageComplete(true);
+ }
+ public void updateQuery() {
+ System.out.println("Updating query"); //$NON-NLS-1$
+ StringBuffer valuesClause = new StringBuffer();
+ StringBuffer namesClause = new StringBuffer();
+ Bookmark bookmark = this.results.getBookmark();
+ Entity entity = this.results.getEntity();
+ DatabaseAdapter adapter = bookmark.getAdapter();
+
+ numColumns = 0;
+ for (int i = 0; i < columnNames.length; i++) {
+ String name = columnNames[i];
+ String value = values[i].getText();
+ if (value.length() > 0) {
+ if (numColumns > 0) {
+ valuesClause.append(", "); //$NON-NLS-1$
+ namesClause.append(", ");
+ }
+ appendColumn(valuesClause, entity, name, adapter, value);
+ namesClause.append(name);
+ numColumns++;
+ }
+ }
+
+// String query = "INSERT INTO " + this.results.getEntity().getQuotedTableName(); //$NON-NLS-1$
+// if (numColumns > 0) {
+// query += " (" + namesClause + ")";
+// query += " VALUES " + "(" + valuesClause; //$NON-NLS-1$
+// query += " )"; //$NON-NLS-1$
+// }
+ String[] arguments = { this.results.getEntity().getQuotedTableName(), namesClause.toString(), valuesClause.toString()};
+ MessageFormat form = new MessageFormat(fStore.getString("phpeclipse.sql.insert.template"));
+
+ String query = form.format(arguments);
+
+ // String query = "$results = mysql_query(\"INSERT INTO " + row.getTable() + " (";
+ // query += fieldClause.toString() + ") ";
+ // query += " VALUES (" + valuesClause.toString();
+ // query += ")\");";
+ this.query.setText(query);
+ }
+ /* (non-Javadoc)
+ * @see com.quantum.wizards.BaseSQLPage#getQueryText()
+ */
+ protected String getQueryText() {
+ return this.query.getText();
+ }
+ /* (non-Javadoc)
+ * @see com.quantum.wizards.SQLPage#performFinish()
+ */
+ public boolean performFinish() {
+ QuantumPlugin.getDefault().getSysClip().setContents(
+ new Object[] { query.getText() },
+ new Transfer[] { TextTransfer.getInstance()});
+ return true;
+ }
+}
+
+//package com.quantum.php.wizards;
+//
+//import java.text.MessageFormat;
+//
+//import org.eclipse.jface.preference.IPreferenceStore;
+//import org.eclipse.jface.wizard.WizardPage;
+//import org.eclipse.swt.SWT;
+//import org.eclipse.swt.dnd.TextTransfer;
+//import org.eclipse.swt.dnd.Transfer;
+//import org.eclipse.swt.events.ModifyEvent;
+//import org.eclipse.swt.events.ModifyListener;
+//import org.eclipse.swt.layout.GridData;
+//import org.eclipse.swt.layout.GridLayout;
+//import org.eclipse.swt.widgets.Composite;
+//import org.eclipse.swt.widgets.Label;
+//import org.eclipse.swt.widgets.Text;
+//
+//import com.quantum.QuantumPlugin;
+//import com.quantum.sql.TableRow;
+//import com.quantum.wizards.BaseSQLPage;
+//import com.quantum.wizards.SQLPage;
+////import com.quantum.view.PHPSourceConsole;
+////import com.quantum.view.tableview.TableAdapter;
+//
+//public class PHPInsertRowPage extends BaseSQLPage implements SQLPage {
+// TableRow row;
+// String[] columnNames;
+// Text[] values;
+// Label query;
+// private final static boolean DEBUG = false;
+// private IPreferenceStore fStore;
+//
+// public PHPInsertRowPage(String pageName) {
+// super(pageName);
+// }
+//
+//// public void init(TableRow row, TableAdapter adapter) {
+//// this.row = row;
+//// }
+//
+// public void createControl(Composite parent) {
+// if (DEBUG) {
+// System.out.println("page create control");
+// }
+// fStore = QuantumPlugin.getDefault().getPreferenceStore();
+// Composite container = new Composite(parent, SWT.NULL);
+// GridLayout layout = new GridLayout();
+// container.setLayout(layout);
+// int layoutColumns = 2;
+// layout.numColumns = layoutColumns;
+//
+// if (DEBUG) {
+// if (row == null) {
+// System.out.println("Row is null");
+// }
+// if (row.getColumnNames() == null) {
+// System.out.println("Columns are null");
+// }
+// if (row.getTableData() == null) {
+// System.out.println("Data is null");
+// }
+// }
+//
+// columnNames = row.getColumnNames();
+// String[] data = row.getTableData();
+// if (DEBUG) {
+// for (int i = 0; i < row.getColumnCount(); i++) {
+// System.out.println("data = " + i + "=" + data[i]);
+// System.out.println("column = " + i + "=" + columnNames[i]);
+// }
+// }
+// values = new Text[row.getColumnCount()];
+// Label temp = new Label(container, SWT.NULL);
+// temp.setText("Column Name");
+// temp = new Label(container, SWT.NULL);
+// temp.setText("Value");
+// for (int i = 0; i < row.getColumnCount(); i++) {
+// Label label = new Label(container, SWT.NULL);
+// label.setText(columnNames[i]);
+// values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+// GridData fullHorizontal = new GridData();
+// fullHorizontal.horizontalAlignment = GridData.FILL;
+// values[i].setLayoutData(fullHorizontal);
+//
+// //values[i].setText(data[i]);
+// values[i].addModifyListener(new ModifyListener() {
+// public void modifyText(ModifyEvent e) {
+// updateQuery();
+// }
+// });
+// }
+// query = new Label(container, SWT.WRAP);
+// GridData gridData = new GridData();
+// gridData.horizontalSpan = layoutColumns;
+// gridData.horizontalAlignment = GridData.FILL;
+// gridData.verticalAlignment = GridData.FILL;
+// gridData.grabExcessHorizontalSpace = true;
+// gridData.grabExcessVerticalSpace = true;
+// query.setLayoutData(gridData);
+//
+// setControl(container);
+// updateQuery();
+//
+// setPageComplete(true);
+// }
+// public void updateQuery() {
+// if (DEBUG) {
+// System.out.println("Updating insert query");
+// }
+// StringBuffer fieldClause = new StringBuffer();
+//
+// StringBuffer valuesClause = new StringBuffer();
+// String text;
+// boolean first = false;
+// for (int i = 0; i < columnNames.length; i++) {
+// text = values[i].getText();
+// if (!text.equals("")) {
+// if (first) {
+// valuesClause.append(", ");
+// fieldClause.append(", ");
+// }
+// valuesClause.append("'" + values[i].getText() + "'");
+// fieldClause.append(columnNames[i]);
+// first = true;
+// }
+// }
+// // if (valuesClause.length() > 1) {
+// // valuesClause.deleteCharAt(valuesClause.length() - 1);
+// // valuesClause.deleteCharAt(valuesClause.length() - 1);
+// // }
+// String[] arguments = { row.getTable(), fieldClause.toString(), valuesClause.toString()};
+// MessageFormat form = new MessageFormat(fStore.getString("phpeclipse.sql.insert.template"));
+//
+// String query = form.format(arguments);
+//
+// // String query = "$results = mysql_query(\"INSERT INTO " + row.getTable() + " (";
+// // query += fieldClause.toString() + ") ";
+// // query += " VALUES (" + valuesClause.toString();
+// // query += ")\");";
+// this.query.setText(query);
+// }
+// public boolean performFinish() {
+//// PHPSourceConsole console = PHPSourceConsole.getInstance();
+//// console.clear();
+//// console.print(query.getText());
+// QuantumPlugin.getDefault().getSysClip().setContents(
+// new Object[] { query.getText() },
+// new Transfer[] { TextTransfer.getInstance()});
+// return true;
+// }
+// /* (non-Javadoc)
+// * @see com.quantum.wizards.BaseSQLPage#getQueryText()
+// */
+// protected String getQueryText() {
+// return this.query.getText();
+// }
+//}
\ No newline at end of file
--- /dev/null
+
+package com.quantum.php.wizards;
+
+import java.text.MessageFormat;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import com.quantum.QuantumPlugin;
+import com.quantum.adapters.DatabaseAdapter;
+import com.quantum.model.Bookmark;
+import com.quantum.model.Column;
+import com.quantum.model.Entity;
+import com.quantum.php.PHPMessages;
+import com.quantum.wizards.BaseSQLPage;
+import com.quantum.wizards.SQLPage;
+
+public class PHPSelectRowPage extends BaseSQLPage implements SQLPage {
+ String[] columnNames;
+
+ Text[] variableNames;
+
+ // Text[] newValues;
+ Button[] primaryKeys;
+
+ Button[] selectValues;
+
+ Label query;
+
+ IPreferenceStore fStore;
+
+ public PHPSelectRowPage(String pageName) {
+ super(pageName);
+ }
+
+ public void createControl(Composite parent) {
+ System.out.println("page create control"); //$NON-NLS-1$
+ Composite container = new Composite(parent, SWT.V_SCROLL);
+ fStore = QuantumPlugin.getDefault().getPreferenceStore();
+ GridLayout layout = new GridLayout();
+ container.setLayout(layout);
+ Entity entity = this.results.getEntity();
+
+ int layoutColumns = 4;
+ layout.numColumns = layoutColumns;
+
+ columnNames = this.results.getColumnNames();
+ variableNames = new Text[columnNames.length];
+ // newValues = new Text[columnNames.length];
+ primaryKeys = new Button[columnNames.length];
+ selectValues = new Button[columnNames.length];
+ Label temp = new Label(container, SWT.NULL);
+ temp.setText(PHPMessages.getString("PHPSelectRowPage.ColumnName")); //$NON-NLS-1$
+ temp = new Label(container, SWT.NULL);
+ temp.setText(PHPMessages.getString("PHPSelectRowPage.VariableName")); //$NON-NLS-1$
+ temp = new Label(container, SWT.NULL);
+ temp.setText(""); //$NON-NLS-1$
+ // temp = new Label(container, SWT.NULL);
+ // temp.setText(PHPMessages.getString("PHPSelectRowPage.NewValue"));
+ // //$NON-NLS-1$
+ temp = new Label(container, SWT.NULL);
+ temp.setText(PHPMessages.getString("PHPSelectRowPage._13")); //$NON-NLS-1$
+ for (int i = 0; i < columnNames.length; i++) {
+ Label label = new Label(container, SWT.NULL);
+ label.setText(columnNames[i]);
+ variableNames[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+ GridData gridData = new GridData();
+ gridData.widthHint = 100;
+ variableNames[i].setLayoutData(gridData);
+ Object data = this.row == null ? null : this.row.get(i + 1);
+ variableNames[i].setText(data == null ? "" : '$' + columnNames[i]);//data.toString());
+ variableNames[i].addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ updateQuery();
+ }
+ });
+ primaryKeys[i] = new Button(container, SWT.CHECK);
+ primaryKeys[i].setText("Where"); //$NON-NLS-1$
+ Column column = (entity == null) ? null : getColumn(entity,
+ columnNames[i]);
+ if (column != null && column.isPrimaryKey())
+ primaryKeys[i].setSelection(true);
+ primaryKeys[i].addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ updateQuery();
+ }
+ });
+ // newValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+ // newValues[i].setText(data == null ? "" : '$'+data.toString());
+ // gridData = new GridData();
+ // gridData.widthHint = 100;
+ // newValues[i].setLayoutData(gridData);
+ // newValues[i].addModifyListener(new ModifyListener() {
+ // public void modifyText(ModifyEvent e) {
+ // updateQuery();
+ // }
+ // });
+ selectValues[i] = new Button(container, SWT.CHECK);
+ selectValues[i].setText(PHPMessages
+ .getString("PHPSelectRowPage.SelectValue")); //$NON-NLS-1$
+ selectValues[i].addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ updateQuery();
+ }
+ });
+ }
+ query = new Label(container, SWT.WRAP | SWT.V_SCROLL);
+ GridData gridData = new GridData();
+ gridData.horizontalSpan = layoutColumns;
+ gridData.horizontalAlignment = GridData.FILL;
+ gridData.verticalAlignment = GridData.FILL;
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.grabExcessVerticalSpace = true;
+ query.setLayoutData(gridData);
+
+ setControl(container);
+ updateQuery();
+
+ setPageComplete(true);
+ }
+
+ public void updateQuery() {
+ System.out.println("Selecting query"); //$NON-NLS-1$
+ StringBuffer setClause = new StringBuffer();
+ StringBuffer whereClause = new StringBuffer();
+ Bookmark bookmark = this.results.getBookmark();
+ Entity entity = this.results.getEntity();
+ DatabaseAdapter adapter = bookmark.getAdapter();
+
+ int numValuesSet = 0;
+ int numValuesWhere = 0;
+ for (int i = 0; i < columnNames.length; i++) {
+ if (primaryKeys[i].getSelection()) {
+ String value = variableNames[i].getText();
+ if (numValuesWhere > 0)
+ whereClause.append(" AND "); //$NON-NLS-1$
+ whereClause.append("("); //$NON-NLS-1$
+ whereClause.append(columnNames[i]);
+ whereClause.append(" = "); //$NON-NLS-1$
+ appendColumn(whereClause, entity, columnNames[i], adapter, value);
+ whereClause.append(")"); //$NON-NLS-1$
+ numValuesWhere++;
+ }
+ if (selectValues[i].getSelection()) {
+ // String value = newValues[i].getText();
+ if (numValuesSet > 0)
+ setClause.append(", "); //$NON-NLS-1$
+ setClause.append(columnNames[i]);
+ // setClause.append(" = "); //$NON-NLS-1$
+ // appendColumn(setClause, entity, columnNames[i], adapter, value);
+ numValuesSet++;
+ }
+ }
+ // String query = "UPDATE " + this.results.getEntity().getQuotedTableName();
+ // //$NON-NLS-1$
+ // query += " SET " + setClause.toString(); //$NON-NLS-1$
+ // query += " WHERE " + whereClause.toString(); //$NON-NLS-1$
+ //
+ String[] arguments = { setClause.toString(),
+ this.results.getEntity().getQuotedTableName(), whereClause.toString() };
+ MessageFormat form = new MessageFormat(fStore
+ .getString("phpeclipse.sql.select.template"));
+
+ String query = form.format(arguments);
+ // String query = "$results = mysql_query(\"SELECT " + setClause.toString();
+ // query += " FROM " + row.getTable();
+ // query += " WHERE " + whereClause.toString() + "\");";
+ this.query.setText(query);
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.quantum.wizards.BaseSQLPage#getQueryText()
+ */
+ protected String getQueryText() {
+ return query.getText();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.quantum.wizards.SQLPage#performFinish()
+ */
+ public boolean performFinish() {
+ QuantumPlugin.getDefault().getSysClip().setContents(
+ new Object[] { query.getText() },
+ new Transfer[] { TextTransfer.getInstance() });
+ return true;
+ }
+}
\ No newline at end of file
--- /dev/null
+package com.quantum.php.wizards;
+
+import java.text.MessageFormat;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import com.quantum.QuantumPlugin;
+import com.quantum.adapters.DatabaseAdapter;
+import com.quantum.model.Bookmark;
+import com.quantum.model.Column;
+import com.quantum.model.Entity;
+import com.quantum.php.PHPMessages;
+import com.quantum.wizards.BaseSQLPage;
+import com.quantum.wizards.SQLPage;
+
+public class PHPUpdateRowPage extends BaseSQLPage implements SQLPage {
+ String[] columnNames;
+ Text[] oldValues;
+ Text[] newValues;
+ Button[] primaryKeys;
+ Button[] setValues;
+ Label query;
+ IPreferenceStore fStore;
+ public PHPUpdateRowPage(String pageName) {
+ super(pageName);
+ }
+
+ public void createControl(Composite parent) {
+ System.out.println("page create control"); //$NON-NLS-1$
+ Composite container = new Composite(parent, SWT.V_SCROLL);
+ fStore = QuantumPlugin.getDefault().getPreferenceStore();
+ GridLayout layout = new GridLayout();
+ container.setLayout(layout);
+ Entity entity = this.results.getEntity();
+
+ int layoutColumns = 5;
+ layout.numColumns = layoutColumns;
+
+ columnNames = this.results.getColumnNames();
+ oldValues = new Text[columnNames.length];
+ newValues = new Text[columnNames.length];
+ primaryKeys = new Button[columnNames.length];
+ setValues = new Button[columnNames.length];
+ Label temp = new Label(container, SWT.NULL);
+ temp.setText(PHPMessages.getString("PHPUpdateRowPage.ColumnName")); //$NON-NLS-1$
+ temp = new Label(container, SWT.NULL);
+ temp.setText(PHPMessages.getString("PHPUpdateRowPage.OldValue")); //$NON-NLS-1$
+ temp = new Label(container, SWT.NULL);
+ temp.setText(""); //$NON-NLS-1$
+ temp = new Label(container, SWT.NULL);
+ temp.setText(PHPMessages.getString("PHPUpdateRowPage.NewValue")); //$NON-NLS-1$
+ temp = new Label(container, SWT.NULL);
+ temp.setText(PHPMessages.getString("PHPUpdateRowPage._13")); //$NON-NLS-1$
+ for (int i = 0; i < columnNames.length; i++) {
+ Label label = new Label(container, SWT.NULL);
+ label.setText(columnNames[i]);
+ oldValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+ GridData gridData = new GridData();
+ gridData.widthHint = 100;
+ oldValues[i].setLayoutData(gridData);
+ Object data = this.row == null ? null : this.row.get(i+1);
+ oldValues[i].setText(data == null ? "" : '$'+columnNames[i]);
+ oldValues[i].addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ updateQuery();
+ }
+ });
+ primaryKeys[i] = new Button(container, SWT.CHECK);
+ primaryKeys[i].setText("Where"); //$NON-NLS-1$
+ Column column = (entity == null) ? null : getColumn(entity, columnNames[i]);
+ if (column != null && column.isPrimaryKey())
+ primaryKeys[i].setSelection(true);
+ primaryKeys[i].addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ public void widgetSelected(SelectionEvent e) {
+ updateQuery();
+ }
+ });
+ newValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
+ newValues[i].setText(data == null ? "" : '$'+columnNames[i]);
+ gridData = new GridData();
+ gridData.widthHint = 100;
+ newValues[i].setLayoutData(gridData);
+ newValues[i].addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ updateQuery();
+ }
+ });
+ setValues[i] = new Button(container, SWT.CHECK);
+ setValues[i].setText(PHPMessages.getString("PHPUpdateRowPage.SetValue")); //$NON-NLS-1$
+ setValues[i].addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ public void widgetSelected(SelectionEvent e) {
+ updateQuery();
+ }
+ });
+ }
+ query = new Label(container, SWT.WRAP | SWT.V_SCROLL);
+ GridData gridData = new GridData();
+ gridData.horizontalSpan = layoutColumns;
+ gridData.horizontalAlignment = GridData.FILL;
+ gridData.verticalAlignment = GridData.FILL;
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.grabExcessVerticalSpace = true;
+ query.setLayoutData(gridData);
+
+ setControl(container);
+ updateQuery();
+
+ setPageComplete(true);
+ }
+ public void updateQuery() {
+ System.out.println("Updating query"); //$NON-NLS-1$
+ StringBuffer setClause = new StringBuffer();
+ StringBuffer whereClause = new StringBuffer();
+ Bookmark bookmark = this.results.getBookmark();
+ Entity entity = this.results.getEntity();
+ DatabaseAdapter adapter = bookmark.getAdapter();
+
+ int numValuesSet = 0;
+ int numValuesWhere = 0;
+ for (int i = 0; i < columnNames.length; i++) {
+ if (primaryKeys[i].getSelection()) {
+ String value = oldValues[i].getText();
+ if (numValuesWhere > 0) whereClause.append(" AND "); //$NON-NLS-1$
+ whereClause.append("("); //$NON-NLS-1$
+ whereClause.append(columnNames[i]);
+ whereClause.append(" = "); //$NON-NLS-1$
+ appendColumn(whereClause, entity, columnNames[i], adapter, value);
+ whereClause.append(")"); //$NON-NLS-1$
+ numValuesWhere++;
+ }
+ if (setValues[i].getSelection()) {
+ String value = newValues[i].getText();
+ if (numValuesSet > 0) setClause.append(", "); //$NON-NLS-1$
+ setClause.append(columnNames[i]);
+ setClause.append(" = "); //$NON-NLS-1$
+ appendColumn(setClause, entity, columnNames[i], adapter, value);
+ numValuesSet++;
+ }
+ }
+// String query = "UPDATE " + this.results.getEntity().getQuotedTableName(); //$NON-NLS-1$
+// query += " SET " + setClause.toString(); //$NON-NLS-1$
+// query += " WHERE " + whereClause.toString(); //$NON-NLS-1$
+//
+ String[] arguments = { this.results.getEntity().getQuotedTableName(), setClause.toString(), whereClause.toString()};
+ MessageFormat form = new MessageFormat(fStore.getString("phpeclipse.sql.update.template"));
+
+ String query = form.format(arguments);
+ this.query.setText(query);
+
+ }
+
+ /* (non-Javadoc)
+ * @see com.quantum.wizards.BaseSQLPage#getQueryText()
+ */
+ protected String getQueryText() {
+ return query.getText();
+ }
+
+ /* (non-Javadoc)
+ * @see com.quantum.wizards.SQLPage#performFinish()
+ */
+ public boolean performFinish() {
+ QuantumPlugin.getDefault().getSysClip().setContents(
+ new Object[] { query.getText() },
+ new Transfer[] { TextTransfer.getInstance()});
+ return true;
+ }
+}
\ No newline at end of file
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
- fontData = null;
+ FontData[] temp = JFaceResources.getTextFont().getFontData();
+ fontData = temp == null || temp.length == 0 ? null : temp[0];
updateFontDisplay();
}
});
package com.quantum.properties;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import com.quantum.IQuantumConstants;
+import com.quantum.adapters.AdapterFactory;
+import com.quantum.model.Bookmark;
+import com.quantum.model.BookmarkHolder;
+import com.quantum.model.JDBCDriver;
+import com.quantum.wizards.BookmarkWizard;
+import com.quantum.wizards.JDBCDriverSelectionWizardPage;
+
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.PropertyPage;
-import com.quantum.IQuantumConstants;
-import com.quantum.adapters.AdapterFactory;
-import com.quantum.adapters.DatabaseAdapter;
-import com.quantum.model.Bookmark;
-import com.quantum.model.BookmarkCollection;
-import com.quantum.model.BookmarkHolder;
-import com.quantum.model.JDBCDriver;
-
public class BookmarkPropertyPage extends PropertyPage {
+
+ class ChooseDriverWizard extends Wizard {
+
+ private JDBCDriver selection;
+ private JDBCDriverSelectionWizardPage page;
+ private PropertyChangeListener listener = new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent event) {
+ if ("driver".equals(event.getPropertyName())) {
+ ChooseDriverWizard.this.selection = (JDBCDriver) event.getNewValue();
+ }
+ }
+ };
+
+ public void addPages() {
+ this.page = new JDBCDriverSelectionWizardPage("page1");
+ this.page.addPropertyChangeListener(this.listener);
+ addPage(this.page);
+ }
+
+ public void dispose() {
+ this.page.removePropertyChangeListener(this.listener);
+ super.dispose();
+ }
+ public boolean performFinish() {
+ BookmarkPropertyPage.this.driver = this.selection;
+ BookmarkPropertyPage.this.setDriverDetails();
+ return true;
+ }
+
+ }
+
private Text password;
private Text userid;
private Text jdbcURL;
private Text driverName;
private Text driverPath;
+ private Text driverClassName;
+ private Text driverVersion;
+ private Text type;
- private Combo type;
private Combo autoCommit;
- private DatabaseAdapter[] adapters = AdapterFactory.getInstance().getDriverList();
+ private JDBCDriver driver;
protected Control createContents(Composite parent) {
data.horizontalSpan = 2;
tabFolder.setLayoutData(data);
- createUserTab(tabFolder);
+ createConnectionTab(tabFolder);
createDriverTab(tabFolder);
createOptionsTab(tabFolder);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
composite.setLayout(layout);
- GridData data = new GridData(GridData.FILL);
- data.verticalAlignment = GridData.VERTICAL_ALIGN_BEGINNING;
- data.grabExcessHorizontalSpace = true;
- composite.setLayoutData(data);
+ composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Label label = new Label(composite, SWT.NONE);
label.setText("Driver Name:");
this.driverName = new Text(composite, SWT.BORDER);
- data = new GridData(GridData.FILL);
- data.horizontalAlignment = GridData.FILL;
- data.grabExcessHorizontalSpace = true;
- this.driverName.setLayoutData(data);
+ this.driverName.setLayoutData(createFillHorizontalGridData());
+ this.driverName.setEditable(false);
label = new Label(composite, SWT.NONE);
- label.setText("Driver Location:");
+ label.setText("Driver Class Name:");
+
+ this.driverClassName = new Text(composite, SWT.BORDER);
+ this.driverClassName.setLayoutData(createFillHorizontalGridData());
+ this.driverClassName.setEditable(false);
+
+ label = new Label(composite, SWT.NONE);
+ label.setText("Driver Version:");
+
+ this.driverVersion = new Text(composite, SWT.BORDER);
+ this.driverVersion.setLayoutData(createFillHorizontalGridData());
+ this.driverVersion.setEditable(false);
+
+ label = new Label(composite, SWT.NONE);
+ label.setText("Driver Path:");
this.driverPath = new Text(composite, SWT.BORDER);
- data = new GridData(GridData.FILL);
- data.horizontalAlignment = GridData.FILL;
- data.grabExcessHorizontalSpace = true;
- this.driverPath.setLayoutData(data);
+ this.driverPath.setLayoutData(createFillHorizontalGridData());
+ this.driverPath.setEditable(false);
label = new Label(composite, SWT.NULL);
label.setText("Type:");
- this.type = new Combo(composite, SWT.SIMPLE | SWT.DROP_DOWN | SWT.READ_ONLY);
- String adapterNames[] = new String[adapters.length];
- for (int i = 0; i < adapters.length; i++) {
- adapterNames[i] = adapters[i].getDisplayName();
- }
- this.type.setItems(adapterNames);
-
- data = new GridData();
- data.horizontalAlignment = GridData.FILL;
- this.type.setLayoutData(data);
+ this.type = new Text(composite, SWT.BORDER);
+ this.type.setLayoutData(createFillHorizontalGridData());
+ this.type.setEditable(false);
driverTab.setControl(composite);
+
+ Button button = new Button(composite, SWT.PUSH);
+ button.setText("Change");
+ GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END);
+ data.horizontalSpan = 2;
+ button.setLayoutData(data);
+ button.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent event) {
+ WizardDialog dialog =
+ new WizardDialog(getShell(), new ChooseDriverWizard());
+ dialog.open();
+ }
+ public void widgetDefaultSelected(SelectionEvent event) {
+ }
+ });
+ }
+
+ private GridData createFillHorizontalGridData() {
+ GridData data = new GridData(GridData.FILL_HORIZONTAL);
+ data.widthHint = 200;
+ return data;
}
- private void createUserTab(TabFolder tabFolder) {
+ private void createConnectionTab(TabFolder tabFolder) {
TabItem userTab = new TabItem(tabFolder, SWT.NONE);
userTab.setText("Connection");
this.autoCommit.setLayoutData(data);
optionsTab.setControl(composite);
-
}
} else {
bookmark.setPassword(this.password.getText());
}
-
- int index = this.type.getSelectionIndex();
bookmark.setConnect(this.jdbcURL.getText());
- JDBCDriver jdbcDriver = BookmarkCollection.getInstance().findDriver(
- this.driverName.getText(), this.driverPath.getText(), this.adapters[index].getType());
- bookmark.setJDBCDriver(jdbcDriver);
+
+ bookmark.setJDBCDriver(this.driver);
if (this.autoCommit.getSelectionIndex() >= 0)
bookmark.setAutoCommitPreference(this.autoCommit.getItem(this.autoCommit.getSelectionIndex()));
return super.performOk();
String password = bookmark.getPassword();
this.password.setText(password == null ? "" : password);
this.userid.setText(bookmark.getUsername());
+ this.jdbcURL.setText(bookmark.getConnect());
- this.type.select(0);
- boolean done = false;
- for (int i = 0,
- length = (adapters == null) ? 0 : adapters.length;
- !done && i < length;
- i++) {
- if (bookmark.getJDBCDriver().getType() != null &&
- bookmark.getJDBCDriver().getType().equals(adapters[i].getType())) {
- this.type.select(i);
- done = true;
- }
- }
+ this.driver = bookmark.getJDBCDriver();
+
+ setDriverDetails();
+
if (bookmark.getAutoCommitPreference().equals(IQuantumConstants.autoCommitTrue))
this.autoCommit.select(0);
else if (bookmark.getAutoCommitPreference().equals(IQuantumConstants.autoCommitFalse))
else if (bookmark.getAutoCommitPreference().equals(IQuantumConstants.autoCommitSaved))
this.autoCommit.select(2);
- this.driverName.setText(bookmark.getJDBCDriver().getClassName());
- this.jdbcURL.setText(bookmark.getConnect());
- this.driverPath.setText(bookmark.getJDBCDriver().getJarFileName());
}
+
+ /**
+ *
+ */
+ private void setDriverDetails() {
+ this.driverName.setText(this.driver.getName());
+ this.driverClassName.setText(this.driver.getClassName());
+ String path = this.driver.getJarFilePath();
+ this.driverPath.setText(path == null ? "" : path);
+ String version = this.driver.getVersion();
+ this.driverVersion.setText(version == null ? "" : version);
+ this.type.setText(AdapterFactory.getInstance().getAdapter(this.driver.getType()).getDisplayName());
+ }
}
package com.quantum.sql;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.Driver;
import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
-import java.util.Vector;
+import com.quantum.Messages;
+import com.quantum.adapters.DatabaseAdapter;
import com.quantum.model.Bookmark;
import com.quantum.model.ConnectionException;
import com.quantum.model.Entity;
import com.quantum.model.JDBCDriver;
import com.quantum.model.PasswordFinder;
-import com.quantum.sql.metadata.MetaDataJDBCInterface;
-import com.quantum.sql.metadata.ObjectMetaData;
import com.quantum.view.LogProxy;
-import com.quantum.view.bookmark.EntityNode;
-import com.quantum.view.bookmark.TreeNode;
/**
* Use MultiSQLServer.getInstance() to get the object.
*/
public class MultiSQLServer implements ConnectionEstablisher {
- private static final int STREAM = 1024 * 2;
public static final String USERNAME = "user"; //$NON-NLS-1$
public static final String PASSWORD = "password"; //$NON-NLS-1$
private static MultiSQLServer instance = null;
- boolean running = true;
private MultiSQLServer() {
}
return instance;
}
- public void commit(Connection con) {
+ public void commit(Connection con) throws SQLException {
LogProxy log = LogProxy.getInstance();
try {
con.commit();
} catch (SQLException e) {
log.addText(LogProxy.ERROR, "Error commiting: " + e, e); //$NON-NLS-1$
+ throw e;
}
}
- public void rollback(Connection con) {
+ public void rollback(Connection con) throws SQLException {
LogProxy log = LogProxy.getInstance();
try {
con.rollback();
} catch (SQLException e) {
log.addText(LogProxy.ERROR, "Error rolling back: " + e, e); //$NON-NLS-1$
+ throw e;
}
}
try {
JDBCDriver jdbcDriver = bookmark.getJDBCDriver();
Driver driver = jdbcDriver.getDriver();
- Connection connection = null;
if (driver != null) {
Properties props = new Properties();
props.put(USERNAME, bookmark.getUsername());
props.put(PASSWORD, password);
- connection =
+ Connection connection =
driver.connect(bookmark.getConnect(), props);
if (connection == null) {
throw new ConnectionException("Error: Driver returned a null connection: " + bookmark.toString()); //$NON-NLS-1$
jdbcDriver.setVersion(metaData.getDriverVersion());
log.addText(LogProxy.RESULTS, "Connected to: " + bookmark.getName()); //$NON-NLS-1$
System.out.println("Connected"); //$NON-NLS-1$
+ return connection;
+ } else {
+ throw new ConnectionException(Messages.getString(
+ ConnectionException.class, "couldNotInstaniateDriver",
+ new Object[] { jdbcDriver.getClassName(), bookmark.getName() }));
}
- return connection;
} catch (SQLException e) {
throw new ConnectionException(e);
}
}
- public SQLResults execute(Connection con, String s) throws SQLException {
- return execute(con, s, -1, -1);
- }
- public SQLResults execute(Connection con, String s, int startRow, int endRow) throws SQLException {
- return execute(con, s, -1, -1, Integer.MAX_VALUE);
+ public SQLResults execute(Bookmark bookmark, Connection con, Entity entity, String s)
+ throws SQLException {
+ return execute(bookmark, con, entity, s, 200);
}
- public SQLResults execute(Connection con, String s, int startRow, int endRow, int maxLength) throws SQLException {
- return execute(con, s, startRow, endRow, maxLength, ""); //$NON-NLS-1$
+ public SQLResults execute(Bookmark bookmark, Connection con, String s)
+ throws SQLException {
+ return execute(bookmark, con, null, s, 200);
}
- public SQLResults execute(
- Connection con,
- String s,
- int startRow,
- int endRow,
- int maxLength,
- String encoding)
- throws SQLException {
+ public SQLResultSetResults getMetaData(Entity entity, Connection connection) throws SQLException {
+ String query = "SELECT * FROM " + entity.getQuotedTableName() + " WHERE (1 = 0)"; //$NON-NLS-1$ //$NON-NLS-2$
+ SQLResultSetResults results = null;
+ if (connection != null) {
+ Statement statement = connection.createStatement();
+ try {
+ ResultSet set = statement.executeQuery(query);
+ try {
+ results = SQLMetaDataResults.create(entity.getBookmark(), set, query, entity);
+ } finally {
+ set.close();
+ }
+ } finally {
+ statement.close();
+ }
+ }
+ return results;
+ }
+
+ public SQLResults execute(Bookmark bookmark, Connection con, String sql,
+ int numberOfRowsPerPage) throws SQLException {
+ return execute(bookmark, con, null, sql, numberOfRowsPerPage);
+ }
- SQLResults results = new SQLResults();
+
+ public SQLResults execute(
+ Bookmark bookmark,
+ Connection con,
+ Entity entity,
+ String sql,
+ int numberOfRowsPerPage)
+ throws SQLException {
long startTime = System.currentTimeMillis();
System.out.println("Executing"); //$NON-NLS-1$
LogProxy log = LogProxy.getInstance();
- log.addText(LogProxy.QUERY, "Executing Request [" + s + "]"); //$NON-NLS-1$ //$NON-NLS-2$
- boolean metadata = false;
- if (s.startsWith("METADATA")) { //$NON-NLS-1$
- metadata = true;
- }
- if (metadata) {
- results.setQuery(s);
- String table = s.substring(s.indexOf(':') + 1);
- String query = "SELECT * FROM " + table + " WHERE (1 = 0)"; //$NON-NLS-1$ //$NON-NLS-2$
- s = query;
- log.addText(LogProxy.QUERY, "Metadata Request [" + s + "]"); //$NON-NLS-1$ //$NON-NLS-2$
- } else {
- results.setQuery(s);
- }
-
- Statement stmt = con.createStatement();
- boolean flag = stmt.execute(s);
- results.setResultSet(flag);
- if (metadata) {
- genMetadataResultSet(results, stmt);
- return results;
- }
- if (!flag) {
- int updates = stmt.getUpdateCount();
- results.setUpdateCount(updates);
- log.addText(LogProxy.RESULTS, "Success: " + updates + " records updated"); //$NON-NLS-1$ //$NON-NLS-2$
-
- } else {
- ResultSet set = stmt.getResultSet();
- ResultSetMetaData metaData = set.getMetaData();
- int columnCount = metaData.getColumnCount();
- Vector columnNames = new Vector();
- for (int i = 1; i <= columnCount; i++) {
- columnNames.addElement(metaData.getColumnName(i));
- }
- results.setColumnNames(columnNames);
- Vector columnTypes = new Vector();
- for (int i = 1; i <= columnCount; i++) {
- columnTypes.addElement(metaData.getColumnTypeName(i));
- }
- results.setColumnTypes(columnTypes);
- int columnSizes[] = new int[columnCount];
- for (int i = 1; i <= columnCount; i++) {
- columnSizes[i - 1] = metaData.getColumnDisplaySize(i);
- }
- int rowCount = 1;
- boolean exitEarly = false;
- while (set.next()) {
- boolean disable = startRow < 1 || endRow < 1;
- boolean start = rowCount >= startRow;
- boolean end = rowCount <= endRow;
- if (disable || (start && end)) {
- Vector row = new Vector();
- for (int i = 1; i <= columnCount; i++) {
- String value;
- if (columnSizes[i - 1] < STREAM
- && columnSizes[i - 1] < maxLength) {
- if (encoding.equals("")) { //$NON-NLS-1$
- value = set.getString(i);
- } else {
- try {
- value =
- new String(set.getBytes(i), encoding);
- } catch (UnsupportedEncodingException e) {
- log.addText(LogProxy.ERROR, "Error Unsupported encoding " + encoding.toString() + ":" + e.toString(), e); //$NON-NLS-1$ //$NON-NLS-2$
- value = new String(set.getBytes(i));
- }
- }
- } else {
- try {
- if (encoding.equals("")) { //$NON-NLS-1$
- Reader reader = set.getCharacterStream(i);
- StringBuffer buffer = new StringBuffer();
- if (reader != null) {
- int retVal = reader.read();
- int count = 0;
- while (retVal >= 0) {
- buffer.append((char) retVal);
- retVal = reader.read();
- count++;
- if (count > maxLength) {
- buffer.append("...>>>"); //$NON-NLS-1$
- break;
- }
- }
- reader.close();
- }
- value = buffer.toString();
- } else {
- InputStream binaryStream =
- set.getBinaryStream(i);
- ByteArrayOutputStream baos =
- new ByteArrayOutputStream();
- if (binaryStream != null) {
- int retVal = binaryStream.read();
- int count = 0;
- while (retVal >= 0) {
- baos.write(retVal);
- retVal = binaryStream.read();
- count++;
- if (count > maxLength) {
- break;
- }
- }
- binaryStream.close();
- }
- value =
- new String(
- baos.toByteArray(),
- encoding);
- }
- } catch (Throwable e) {
- // hack for mysql which doesn't implement
- // character streams
- value = set.getString(i);
- }
- }
- if (set.wasNull()) {
- row.addElement("<NULL>"); //$NON-NLS-1$
- } else {
- row.addElement(value);
- }
- }
- results.addRow(row);
- }
- rowCount++;
- if (!disable && (rowCount > endRow)) {
- exitEarly = true;
- break;
+ log.addText(LogProxy.QUERY, "Executing Request [" + sql + "]"); //$NON-NLS-1$ //$NON-NLS-2$
+ Statement statement = con.createStatement();
+ try {
+ SQLResults results;
+ if (statement.execute(sql)) {
+ ResultSet set = statement.getResultSet();
+ try {
+ results = SQLStandardResultSetResults.create(set, bookmark, sql, entity, numberOfRowsPerPage);
+ } finally {
+ set.close();
}
- }
- if (exitEarly) {
- results.setHasMore(set.next());
} else {
- results.setMaxSize(rowCount);
- results.setHasMore(false);
+ int updates = statement.getUpdateCount();
+ results = new SQLUpdateResults(updates);
}
- set.close();
- }
- log.addText(LogProxy.RESULTS, "Success: result set displayed"); //$NON-NLS-1$
- stmt.close();
- results.setTime(System.currentTimeMillis() - startTime);
- System.out.println("Executed"); //$NON-NLS-1$
- System.out.println();
- return results;
- }
- private void genMetadataResultSet(SQLResults results, Statement stmt)
- throws SQLException {
- ResultSet set = stmt.getResultSet();
- ResultSetMetaData metaData = set.getMetaData();
- int columnCount = metaData.getColumnCount();
- Vector columnNames = new Vector();
- columnNames.addElement("ColumnName"); //$NON-NLS-1$
- columnNames.addElement("Type"); //$NON-NLS-1$
- columnNames.addElement("Size"); //$NON-NLS-1$
- columnNames.addElement("Nullable"); //$NON-NLS-1$
- columnNames.addElement("AutoIncrement"); //$NON-NLS-1$
- results.setColumnNames(columnNames);
- for (int i = 1; i <= columnCount; i++) {
- Vector row = new Vector();
- row.addElement(metaData.getColumnName(i));
- row.addElement(metaData.getColumnTypeName(i));
- int textSize = metaData.getColumnDisplaySize(i);
- int precision = metaData.getPrecision(i);
- int scale = metaData.getScale(i);
- if (scale == 0 && precision == 0) {
- row.addElement(Integer.toString(precision));
- } else {
- row.addElement(textSize + ", " + precision + ", " + scale); //$NON-NLS-1$ //$NON-NLS-2$
- }
- int nullable = metaData.isNullable(i);
- if (nullable == ResultSetMetaData.columnNoNulls) {
- row.addElement("Not Null"); //$NON-NLS-1$
- } else if (nullable == ResultSetMetaData.columnNullable) {
- row.addElement("Nullable"); //$NON-NLS-1$
- } else if (
- nullable == ResultSetMetaData.columnNullableUnknown) {
- row.addElement("Nullable"); //$NON-NLS-1$
- } else {
- row.addElement("<Error>"); //$NON-NLS-1$
+ log.addText(LogProxy.RESULTS, "Success: result set displayed"); //$NON-NLS-1$
+ if (results != null) {
+ results.setTime(System.currentTimeMillis() - startTime);
}
- row.addElement(
- (metaData.isAutoIncrement(i)
- ? Boolean.TRUE
- : Boolean.FALSE)
- .toString());
- results.addRow(row);
- }
- results.setHasMore(false);
- set.close();
- }
-
- /**
- * Returns an ObjectMetadata object got from the connection 'con' using the name and schema of the node.
- * @param con
- * @param node
- * @return
- * @throws SQLException
- */
- public ObjectMetaData getObjectMetadata(Connection con, TreeNode node) throws SQLException {
- ObjectMetaData metadata = new ObjectMetaData();
- if (!(node instanceof Entity)) return metadata;
-
- String schema = ((Entity)node).getSchema();
- String tableName = node.getName();
-
- if (schema.length() == 0) schema = null;
- metadata.setColumns(MetaDataJDBCInterface.getColumns(con, schema, tableName));
- if (node instanceof EntityNode && ((EntityNode) node).isTable()) {
- metadata.setPrimaryKeys(MetaDataJDBCInterface.getPrimaryKeys(con, schema, tableName));
- metadata.setForeignKeys(MetaDataJDBCInterface.getForeignKeys(con, schema, tableName, true));
- metadata.setIndexInfo(MetaDataJDBCInterface.getIndexInfo(con, schema, tableName));
- metadata.setBestRowId(MetaDataJDBCInterface.getBestRowId(con, schema, tableName));
+ return results;
+ } finally {
+ statement.close();
}
- return metadata;
}
+ public int getSize(Bookmark bookmark, Connection connection, String tableName, DatabaseAdapter adapter) throws SQLException {
+ SQLResultSetResults results = (SQLResultSetResults) execute(
+ bookmark, connection, adapter.getCountQuery(tableName));
+ if (results.getRowCount() > 0 && results.getColumnCount() > 0) {
+ return Integer.parseInt(results.getElement(1, 1).toString());
+ } else {
+ return -1;
+ }
+ }
}
\ No newline at end of file
+++ /dev/null
-package com.quantum.sql;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-
-import com.quantum.adapters.DatabaseAdapter;
-import com.quantum.view.LogProxy;
-
-public class SQLHelper {
-
- public static int getSize(Connection connection, String tableName, DatabaseAdapter adapter) throws SQLException {
- SQLResults results = MultiSQLServer.getInstance().execute(
- connection, adapter.getCountQuery(tableName));
- if (results.getRowCount() > 0 && results.getColumnCount() > 0) {
- return Integer.parseInt(results.getElement(1, 1).toString());
- } else {
- return -1;
- }
- }
-
- public static SQLResults getResults(Connection connection, String query, int start, int end, int maxLength, String encoding) {
- try {
- return MultiSQLServer.getInstance().execute(connection,
- query, start, end, maxLength, encoding);
- } catch (SQLException e) {
- LogProxy log = LogProxy.getInstance();
- log.addText(
- LogProxy.ERROR,
- "Error Executing: " + query + ":" + e.toString(), e); //$NON-NLS-1$ //$NON-NLS-2$
- }
- SQLResults results = new SQLResults();
- results.setIsError(true);
- return results;
- }
-
- /**
- * True if the type is Real (numeric and with decimal part) according to java.sql.Types
- * @param type
- * @return
- */
- public static boolean isReal(int type) {
- return (type == java.sql.Types.DECIMAL || type == java.sql.Types.DOUBLE || type ==java.sql.Types.FLOAT ||
- type == java.sql.Types.NUMERIC || type == java.sql.Types.REAL );
- }
-
- /**
- * True if the type is Numeric according to java.sql.Types
- * @param type
- * @return
- */
- public static boolean isNumeric(int type) {
- return (type == java.sql.Types.DECIMAL || type == java.sql.Types.DOUBLE || type ==java.sql.Types.FLOAT ||
- type == java.sql.Types.NUMERIC || type == java.sql.Types.REAL || type == java.sql.Types.BIGINT ||
- type == java.sql.Types.TINYINT || type == java.sql.Types.SMALLINT || type == java.sql.Types.INTEGER );
- }
- /**
- * True if the type is textual according to java.sql.Types
- * @param type
- * @return
- */
- public static boolean isText(int type) {
- return (type == java.sql.Types.CLOB || type == java.sql.Types.VARBINARY || type ==java.sql.Types.VARCHAR
- || type == java.sql.Types.CHAR || type == java.sql.Types.LONGVARCHAR );
- }
-
- public static String getQualifiedName(String schema, String name) {
- return (schema != null && schema.length() > 0) ? schema + "." + name : name;
- }
-}
--- /dev/null
+package com.quantum.sql;
+
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
+import com.quantum.model.Bookmark;
+import com.quantum.model.Entity;
+
+
+/**
+ * @author BC
+ */
+public class SQLMetaDataResults extends SQLResultSetResults {
+
+ /**
+ * @param query
+ */
+ private SQLMetaDataResults(String query, Bookmark bookmark, Entity entity) {
+ super(query, bookmark, entity);
+ }
+
+ static SQLResultSetResults create(Bookmark bookmark, ResultSet set, String query, Entity entity) throws SQLException {
+
+ SQLMetaDataResults results = new SQLMetaDataResults(query, bookmark, entity);
+ results.parseResultSet(set);
+
+ return results;
+ }
+
+ /**
+ * @param set
+ * @param results
+ * @param metaData
+ * @param columnCount
+ * @throws SQLException
+ */
+ protected void parseResultSet(ResultSet set) throws SQLException {
+
+ List columns = new ArrayList();
+ columns.add(new Column("ColumnName", "", 0)); //$NON-NLS-1$
+ columns.add(new Column("Type", "", 0)); //$NON-NLS-1$
+ columns.add(new Column("Size", "", 0)); //$NON-NLS-1$
+ columns.add(new Column("Nullable", "", 0)); //$NON-NLS-1$
+ columns.add(new Column("AutoIncrement", "", 0)); //$NON-NLS-1$
+ setColumns((Column[]) columns.toArray(new Column[columns.size()]));
+
+ ResultSetMetaData metaData = set.getMetaData();
+
+ List rowList = new ArrayList();
+ for (int i = 1; i <= metaData.getColumnCount(); i++) {
+ Vector row = new Vector();
+ row.addElement(metaData.getColumnName(i));
+ row.addElement(metaData.getColumnTypeName(i));
+ int textSize = metaData.getColumnDisplaySize(i);
+ int precision = metaData.getPrecision(i);
+ int scale = metaData.getScale(i);
+ if (scale == 0 && precision == 0) {
+ row.addElement(Integer.toString(precision));
+ } else {
+ row.addElement(textSize + ", " + precision + ", " + scale); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ int nullable = metaData.isNullable(i);
+ if (nullable == ResultSetMetaData.columnNoNulls) {
+ row.addElement("Not Null"); //$NON-NLS-1$
+ } else if (nullable == ResultSetMetaData.columnNullable) {
+ row.addElement("Nullable"); //$NON-NLS-1$
+ } else if (
+ nullable == ResultSetMetaData.columnNullableUnknown) {
+ row.addElement("Nullable"); //$NON-NLS-1$
+ } else {
+ row.addElement("<Error>"); //$NON-NLS-1$
+ }
+ row.addElement(
+ (metaData.isAutoIncrement(i)
+ ? Boolean.TRUE
+ : Boolean.FALSE)
+ .toString());
+ rowList.add(new Row(row));
+ }
+ setRows((Row[]) rowList.toArray(new Row[rowList.size()]));
+ set.close();
+ }
+
+ public boolean isMetaData() {
+ return true;
+ }
+}
--- /dev/null
+package com.quantum.sql;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+
+/**
+ * @author BC
+ */
+public class SQLResultSetCollection {
+
+ private static final SQLResultSetCollection instance = new SQLResultSetCollection();
+
+ private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+
+ private List results = Collections.synchronizedList(new ArrayList());
+
+ private SQLResultSetCollection() {
+ }
+ public static SQLResultSetCollection getInstance() {
+ return SQLResultSetCollection.instance;
+ }
+
+ public void addPropertyChangeListener(PropertyChangeListener arg0) {
+ this.propertyChangeSupport.addPropertyChangeListener(arg0);
+ }
+ public void removePropertyChangeListener(PropertyChangeListener arg0) {
+ this.propertyChangeSupport.removePropertyChangeListener(arg0);
+ }
+
+ public void addSQLResultSet(SQLResultSetResults resultSet) {
+ this.results.add(resultSet);
+ this.propertyChangeSupport.firePropertyChange("resultSets", null, resultSet);
+ }
+
+ public void removeSQLResultSet(SQLResultSetResults resultSet) {
+ if (this.results.remove(resultSet)) {
+ this.propertyChangeSupport.firePropertyChange("resultSets", resultSet, null);
+ }
+ }
+
+ public void removeAllSQLResultSet() {
+ if (this.results.size() > 0) {
+ this.results.clear();
+ }
+ this.propertyChangeSupport.firePropertyChange("resultSets", null, null);
+ }
+
+ public SQLResultSetResults[] getResultSets() {
+ return (SQLResultSetResults[]) this.results.toArray(
+ new SQLResultSetResults[this.results.size()]);
+ }
+}
--- /dev/null
+package com.quantum.sql;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import com.quantum.model.Bookmark;
+import com.quantum.model.Entity;
+
+/**
+ * @author Tom Schneider
+ * @author BC Holmes
+ */
+public abstract class SQLResultSetResults extends SQLResults {
+
+
+ class ColumnArrayComparator implements Comparator {
+
+ public int compare(Object arg0, Object arg1) {
+ return compare((Column[]) arg0, (Column[]) arg1);
+ }
+ public int compare(Column[] columns0, Column[] columns1) {
+
+ if (columns0 == null && columns1 == null) {
+ return 0;
+ } else if (columns0 == null) {
+ return -1;
+ } else if (columns1 == null) {
+ return 1;
+ } else if (columns0.length < columns1.length) {
+ return -1;
+ } else if (columns0.length > columns1.length) {
+ return 1;
+ } else {
+ int result = 0;
+ for (int i = 0, length = columns1 == null ? 0 : columns1.length;
+ result == 0 && i < length; i++) {
+ result = compare(columns0[i], columns1[i]);
+ }
+ return result;
+ }
+ }
+ /**
+ * @param columns0
+ * @param columns1
+ * @param result
+ * @param i
+ * @return
+ */
+ private int compare(Column column0, Column column1) {
+
+ if (column0 == null && column1 == null) {
+ return 0;
+ } else if (column0 == null) {
+ return -1;
+ } else if (column1 == null) {
+ return 1;
+ } else if (column0.getName() == null) {
+ return -1;
+ } else if (column1.getName() == null) {
+ return 1;
+ } else if (column0.getName() != null && column1.getName() != null
+ && column0.getName().compareTo(column1.getName()) != 0) {
+ return column0.getName().compareTo(column1.getName());
+ } else if (column0.getType() == null) {
+ return -1;
+ } else if (column1.getType() == null) {
+ return 1;
+ } else if (column0.getType() != null && column1.getType() != null
+ && column0.getType().compareTo(column1.getType()) != 0) {
+ return column0.getType().compareTo(column1.getType());
+ } else {
+ return column0.getSize() - column1.getSize();
+ }
+ }
+ }
+
+ public class Row {
+ private final List elements;
+
+ Row(List elements) {
+ this.elements = elements;
+ }
+
+ public Object get(int columnNumber) {
+ return (columnNumber > this.elements.size() || columnNumber <= 0)
+ ? null
+ : this.elements.get(columnNumber - 1);
+ }
+
+ public SQLResultSetResults getResultSet() {
+ return SQLResultSetResults.this;
+ }
+ }
+
+ public class Column {
+ private final String name;
+ private final String type;
+ private final int size;
+
+ Column(String name, String type, int size) {
+ this.name = name;
+ this.type = type;
+ this.size = size;
+ }
+ public String getName() {
+ return this.name;
+ }
+ public int getSize() {
+ return this.size;
+ }
+ public String getType() {
+ return this.type;
+ }
+ }
+
+ private List rows = Collections.synchronizedList(new ArrayList());
+ private List columns = Collections.synchronizedList(new ArrayList());
+ private String query;
+ private Bookmark bookmark;
+ private final Entity entity;
+ private String encoding = "";
+
+ private FilterSort filterSort = null;
+
+ /**
+ * @param entity
+ * @param query2
+ */
+ public SQLResultSetResults(String query, Bookmark bookmark, Entity entity) {
+ this.query = query;
+ this.bookmark = bookmark;
+ this.entity = entity;
+ }
+ public String getColumnName(int columnNumber) {
+ Column column = getColumn(columnNumber);
+ return column == null ? "" : column.getName();
+
+ }
+ /**
+ * @param columnNumber
+ * @return
+ */
+ protected Column getColumn(int columnNumber) {
+ return columnNumber <= this.columns.size()
+ ? (Column) this.columns.get(columnNumber-1)
+ : null;
+ }
+ public Column[] getColumns() {
+ return (Column[]) this.columns.toArray(new Column[this.columns.size()]);
+ }
+ protected void setColumns(Column[] columns) {
+ Column[] original = getColumns();
+ if (new ColumnArrayComparator().compare(original, columns) != 0) {
+ this.columns.clear();
+ this.columns.addAll(Arrays.asList(columns));
+ this.propertyChangeSupport.firePropertyChange("columns", original, columns);
+ }
+ }
+ public Object getElement(int column, int row) {
+ return ((Row) rows.get(row - 1)).get(column);
+ }
+ public int getColumnCount() {
+ if (columns.size() > 0) {
+ return columns.size();
+ }
+ return 0;
+ }
+ public int getRowCount() {
+ return rows.size();
+ }
+ public String[] getColumnNames() {
+ List names = new ArrayList();
+ for (Iterator i = this.columns.iterator(); i.hasNext();) {
+ Column column = (Column) i.next();
+ names.add(column.getName());
+ }
+ return (String[]) names.toArray(new String[names.size()]);
+ }
+ /**
+ * Returns the resultSet.
+ * @return boolean
+ */
+ public boolean isResultSet() {
+ return true;
+ }
+ public Row[] getRows() {
+ return (Row[]) rows.toArray(new Row[this.rows.size()]);
+ }
+ /**
+ * Returns the query.
+ * @return String
+ */
+ public String getQuery() {
+ return this.query;
+ }
+ public String getFilteredQuery() {
+ if (this.filterSort == null) {
+ return this.query;
+ } else {
+ return this.query + this.filterSort.toString();
+ }
+ }
+ public Bookmark getBookmark() {
+ return this.bookmark;
+ }
+
+ public Entity getEntity() {
+ return this.entity;
+ }
+ /**
+ * Returns the resultSet.
+ * @return boolean
+ */
+ public boolean isMetaData() {
+ return false;
+ }
+ private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+
+ public void addPropertyChangeListener(PropertyChangeListener listener) {
+ this.propertyChangeSupport.addPropertyChangeListener(listener);
+ }
+ public void removePropertyChangeListener(PropertyChangeListener listener) {
+ this.propertyChangeSupport.removePropertyChangeListener(listener);
+ }
+ protected abstract void parseResultSet(ResultSet set) throws SQLException;
+
+ public void refresh(Connection connection) throws SQLException {
+ Statement statement = connection.createStatement();
+ try {
+ ResultSet resultSet = statement.executeQuery(getFilteredQuery());
+ try {
+ parseResultSet(resultSet);
+ } finally {
+ resultSet.close();
+ }
+ } finally {
+ statement.close();
+ }
+ }
+
+ protected void setRows(Row[] rows) {
+ Row[] original = getRows();
+ this.rows.clear();
+ if (rows != null) {
+ this.rows.addAll(Arrays.asList(rows));
+ }
+ this.propertyChangeSupport.firePropertyChange("rows", original, getRows());
+ }
+ public String getEncoding() {
+ return this.encoding;
+ }
+ public void setEncoding(String encoding) {
+ this.encoding = encoding;
+ }
+ public FilterSort getFilterSort() {
+ return this.filterSort;
+ }
+ public void setFilterSort(FilterSort filterSort) {
+ this.filterSort = filterSort;
+ }
+}
package com.quantum.sql;
-import java.util.ArrayList;
-import java.util.Vector;
-/**
- * com.quantum project
- * @author root
- *
-*/
-public class SQLResults {
- private String query;
- private String table;
- private ArrayList rows = new ArrayList();
- private Vector columns;
- private Vector columnTypes;
- private int[] columnSizes;
- private int updateCount = 0;
- private boolean resultSet = false;
- private boolean hasMore = false;
- private boolean isError = false;
- private int maxSize = -1;
- private long time;
-
- public void setColumnNames(Vector columns) {
- this.columns = columns;
- }
- public String getColumnName(int column) {
- if (columns.size() < column) return ""; //$NON-NLS-1$
- return columns.elementAt(column - 1).toString();
-
- }
- public void setColumnTypes(Vector columnsTypes) {
- this.columnTypes = columnsTypes;
- }
- public String getColumnType(int column) {
- if (columnTypes.size() < column) return ""; //$NON-NLS-1$
- return columnTypes.elementAt(column - 1).toString();
- }
- public void setColumnSizes(int[] columnSizes) {
- this.columnSizes = columnSizes;
- }
- public int getColumnSize(int column) {
- if (columnSizes.length < column) return 0;
- return columnSizes[column - 1];
- }
- public void addRow(Vector row) {
- rows.add(row);
- }
- public Object getElement(int column, int row) {
- return ((Vector) rows.get(row - 1)).elementAt(column - 1);
- }
- public int getColumnCount() {
- if (columns.size() > 0) {
- return columns.size();
- }
- return 0;
- }
- public int getRowCount() {
- return rows.size();
- }
- /**
- * Returns the query.
- * @return String
- */
- public String getQuery() {
- return query;
- }
-
- /**
- * Sets the query.
- * @param query The query to set
- */
- public void setQuery(String query) {
- this.query = query;
- }
-
- /**
- * Returns the resultSet.
- * @return boolean
- */
- public boolean isResultSet() {
- return resultSet;
- }
-
- /**
- * Sets the resultSet.
- * @param resultSet The resultSet to set
- */
- public void setResultSet(boolean resultSet) {
- this.resultSet = resultSet;
- }
-
- public int getUpdateCount() {
- return updateCount;
- }
- public void setUpdateCount(int updateCount) {
- this.updateCount = updateCount;
- }
-
- public String getTable() {
- return table;
- }
-
- public void setTable(String table) {
- this.table = table;
- }
-
- public boolean hasMore() {
- return hasMore;
- }
-
- public void setHasMore(boolean hasMore) {
- this.hasMore = hasMore;
- }
-
- public int getMaxSize() {
- return maxSize;
- }
-
- public void setMaxSize(int maxSize) {
- this.maxSize = maxSize;
- }
-
- public boolean isError() {
- return isError;
- }
+/**
+ * @author BC
+ */
+public abstract class SQLResults {
+ public abstract boolean isResultSet();
- public void setIsError(boolean isError) {
- this.isError = isError;
- }
- /**
- *
- */
- public Object[] getRows() {
- return rows.toArray();
- }
+ private long time;
public long getTime() {
return this.time;
}
+
public void setTime(long time) {
this.time = time;
}
--- /dev/null
+package com.quantum.sql;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.UnsupportedEncodingException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.quantum.model.Bookmark;
+import com.quantum.model.Entity;
+
+
+/**
+ * @author BC
+ */
+public class SQLStandardResultSetResults extends SQLResultSetResults implements Scrollable {
+
+ /**
+ * Some columns -- especially BLOBS and CLOBS can be very wide. This variable
+ * sets the maximum width of the column.
+ */
+ private static final int MAX_COLUMN_WIDTH = 1024 * 2;
+
+ private boolean hasMore = false;
+ private int start = 1;
+ private int numberOfRowsPerPage;
+ private int totalNumberOfRows = -1;
+
+ private boolean fullMode = false;
+
+ /**
+ * @param bookmark
+ * @param query
+ * @param encoding
+ * @param numberOfRowsPerPage
+ */
+ protected SQLStandardResultSetResults(
+ Bookmark bookmark, String query, Entity entity,
+ int numberOfRowsPerPage) {
+ super(query, bookmark, entity);
+ this.numberOfRowsPerPage = numberOfRowsPerPage;
+ }
+
+ static SQLResultSetResults create(
+ ResultSet set, Bookmark bookmark,
+ String query, Entity entity, int numberOfRows) throws SQLException {
+
+ SQLStandardResultSetResults results = new SQLStandardResultSetResults(
+ bookmark, query, entity, numberOfRows);
+
+ results.parseResultSet(set);
+
+ return results;
+ }
+
+ /**
+ * @param set
+ * @param encoding
+ * @param numberOfRows
+ * @param results
+ * @param columnCount
+ * @throws SQLException
+ */
+ protected void parseResultSet(ResultSet set) throws SQLException {
+ int rowCount = 1;
+
+ ResultSetMetaData metaData = set.getMetaData();
+ int columnCount = metaData.getColumnCount();
+ List columns = new ArrayList();
+ for (int i = 1; i <= columnCount; i++) {
+ columns.add(new Column(
+ metaData.getColumnName(i),
+ metaData.getColumnTypeName(i),
+ metaData.getColumnDisplaySize(i)));
+ }
+ setColumns((Column[]) columns.toArray(new Column[columns.size()]));
+
+ boolean exitEarly = false;
+ int firstRow = (this.fullMode) ? 0 : this.start;
+ int lastRow = (this.fullMode) ? Integer.MAX_VALUE : this.start + this.numberOfRowsPerPage - 1;
+ List rowList = new ArrayList();
+ while (set.next()) {
+ boolean disable = this.start < 1 || lastRow < 1;
+ if (disable || ((rowCount >= firstRow) && (rowCount <= lastRow))) {
+ List row = new ArrayList();
+ for (int i = 1, length = columns.size(); i <= length; i++) {
+ String value = null;
+ if (getColumn(i).getSize() < MAX_COLUMN_WIDTH) {
+ value = getEncodedString(set, getEncoding(), i);
+ } else {
+ try {
+ if ("".equals(getEncoding())) { //$NON-NLS-1$
+ value = getStringFromCharacterSteam(set, i);
+ } else {
+ value = getEncodedStringFromBinaryStream(set, getEncoding(), i);
+ }
+ } catch (IOException e) {
+ value = set.getString(i);
+ } catch (RuntimeException e) {
+ // hack for mysql which doesn't implement
+ // character streams
+ value = set.getString(i);
+ }
+ }
+ if (value == null) {
+ value = set.getString(i);
+ }
+ row.add(value == null || set.wasNull() ? "<NULL>" : value); //$NON-NLS-1$
+ }
+ rowList.add(new Row(row));
+ }
+ rowCount++;
+ if (!disable && (rowCount > lastRow)) {
+ exitEarly = true;
+ break;
+ }
+ }
+ if (exitEarly) {
+ this.hasMore = set.next();
+ } else {
+ this.totalNumberOfRows = Math.max(0, rowCount-1);
+ this.hasMore = false;
+ }
+ setRows((Row[]) rowList.toArray(new Row[rowList.size()]));
+ }
+
+
+ /**
+ * @param set
+ * @param encoding
+ * @param columnNumber
+ * @throws SQLException
+ * @throws IOException
+ * @throws UnsupportedEncodingException
+ */
+ private String getEncodedStringFromBinaryStream(ResultSet set, String encoding, int columnNumber)
+ throws SQLException, IOException, UnsupportedEncodingException {
+ InputStream binaryStream = set.getBinaryStream(columnNumber);
+ if (binaryStream != null) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try {
+ for (int c = binaryStream.read(), count = 0;
+ c >= 0 && count <= MAX_COLUMN_WIDTH;
+ c = binaryStream.read(), count++) {
+ baos.write(c);
+ }
+ } finally {
+ binaryStream.close();
+ }
+ return new String(baos.toByteArray(), encoding);
+ } else {
+ return null;
+ }
+ }
+
+
+ /**
+ * @param set
+ * @param columnNumber
+ * @throws SQLException
+ * @throws IOException
+ */
+ private String getStringFromCharacterSteam(ResultSet set, int columnNumber)
+ throws SQLException, IOException {
+ Reader reader = set.getCharacterStream(columnNumber);
+ if (reader != null) {
+ StringBuffer buffer = new StringBuffer();
+ int retVal = reader.read();
+ int count = 0;
+ while (retVal >= 0) {
+ buffer.append((char) retVal);
+ retVal = reader.read();
+ count++;
+ if (count > MAX_COLUMN_WIDTH) {
+ buffer.append("...>>>"); //$NON-NLS-1$
+ break;
+ }
+ }
+ reader.close();
+ return buffer.toString();
+ } else {
+ return null;
+ }
+ }
+
+
+ /**
+ * @param set
+ * @param encoding
+ * @param index
+ * @return
+ * @throws SQLException
+ */
+ private String getEncodedString(ResultSet set, String encoding, int index)
+ throws SQLException {
+ try {
+ return encoding == null || encoding.trim().length() == 0
+ ? set.getString(index)
+ : new String(set.getBytes(index), encoding);
+ } catch (UnsupportedEncodingException e) {
+ return set.getString(index);
+ }
+ }
+
+ public boolean hasMore() {
+ return this.hasMore;
+ }
+
+ public int getTotalNumberOfRows() {
+ return this.totalNumberOfRows;
+ }
+ public void nextPage(Connection connection) throws SQLException {
+ if (hasNextPage()) {
+ this.start += this.numberOfRowsPerPage;
+ refresh(connection);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.quantum.sql.Scrollable#previousPage(java.sql.Connection)
+ */
+ public void previousPage(Connection connection) throws SQLException {
+ if (hasPreviousPage()) {
+ this.start = Math.max(1, this.start - this.numberOfRowsPerPage);
+ refresh(connection);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.quantum.sql.Scrollable#hasNextPage()
+ */
+ public boolean hasNextPage() {
+ return this.hasMore;
+ }
+
+ /* (non-Javadoc)
+ * @see com.quantum.sql.Scrollable#hasPreviousPage()
+ */
+ public boolean hasPreviousPage() {
+ return this.start > 1;
+ }
+
+ public void setFullMode(boolean fullMode) {
+ this.fullMode = fullMode;
+ }
+ public boolean isFullMode() {
+ return this.fullMode;
+ }
+
+ /* (non-Javadoc)
+ * @see com.quantum.sql.Scrollable#getStart()
+ */
+ public int getStart() {
+ return getRowCount() == 0 ? 0 : (this.fullMode ? 1 : this.start);
+ }
+
+ /* (non-Javadoc)
+ * @see com.quantum.sql.Scrollable#getEnd()
+ */
+ public int getEnd() {
+ return this.fullMode
+ ? getRowCount()
+ : this.start + getRowCount() - 1;
+ }
+
+ /* (non-Javadoc)
+ * @see com.quantum.sql.Scrollable#getLast()
+ */
+ public int getLast() {
+ return this.totalNumberOfRows;
+ }
+
+
+ public void setFilterSort(FilterSort filterSort) {
+ super.setFilterSort(filterSort);
+ this.start = 1;
+ }
+}
--- /dev/null
+package com.quantum.sql;
+
+
+/**
+ * @author BC
+ */
+public class SQLUpdateResults extends SQLResults {
+ private int updateCount = 0;
+
+ public SQLUpdateResults(int updateCount) {
+ this.updateCount = updateCount;
+ }
+
+ public int getUpdateCount() {
+ return this.updateCount;
+ }
+
+ public boolean isResultSet() {
+ return false;
+ }
+}
--- /dev/null
+package com.quantum.sql;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+
+/**
+ * @author BC
+ */
+public interface Scrollable {
+ public void nextPage(Connection connection) throws SQLException;
+ public void previousPage(Connection connection) throws SQLException;
+ public boolean hasNextPage();
+ public boolean hasPreviousPage();
+ public void setFullMode(boolean fullMode);
+ public boolean isFullMode();
+ public int getStart();
+ public int getEnd();
+ public int getLast();
+}
--- /dev/null
+package com.quantum.sql.parser;
+
+
+/**
+ * @author BC
+ */
+public interface SQL {
+
+ /**
+ * The command describes the type of SQL statement that is represented. The command
+ * might be "SELECT" or "ALTER TABLE" or "GRANT"
+ *
+ * @return
+ */
+ public String getCommand();
+}
--- /dev/null
+package com.quantum.sql.parser;
+
+import java.util.Vector;
+
+
+public class SQLParser {
+
+ /**
+ * Parses a query string into executable units.
+ * @param query
+ * @return a Vector of Strings, with the individual executable units.
+ */
+ public static Vector parse(String query) {
+ Vector commands = new Vector();
+ Vector groups = new Vector();
+ try {
+ Vector tokens = SQLLexx.parse(query);
+ StringBuffer buffer = new StringBuffer();
+ StringBuffer groupBuffer = new StringBuffer();
+ for (int i = 0; i < tokens.size(); i++) {
+ Token t = (Token) tokens.elementAt(i);
+ if (t.getType() == Token.COMMENT) {
+ // ignore comments
+ } else if (t.getType() == Token.SEPARATOR) {
+ groupBuffer.append(t.getValue());
+ String newCommand = buffer.toString().trim();
+ if (!newCommand.equals("")) { //$NON-NLS-1$
+ commands.addElement(newCommand);
+ }
+ buffer = new StringBuffer();
+ } else if (t.getType() == Token.GROUP) {
+ // We don't append the group token because it may be misinterpreted
+ //groupBuffer.append(t.getValue());
+ String newGroup = groupBuffer.toString().trim();
+ if (!newGroup.equals("")) { //$NON-NLS-1$
+ groups.addElement(newGroup);
+ //Groups have precedence over commands, so the preceding commands are erased
+ commands.clear();
+ }
+ groupBuffer = new StringBuffer();
+ } else {
+ // We append the tokens to the buffer until it's a separator or group.
+ buffer.append(t.getValue());
+ groupBuffer.append(t.getValue());
+ }
+ }
+ String newCommand = buffer.toString().trim();
+ if (!newCommand.equals("")) { //$NON-NLS-1$
+ commands.addElement(newCommand);
+ }
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+ Vector result = new Vector();
+ result.addAll(groups);
+ result.addAll(commands);
+ return result;
+ }
+}
\ No newline at end of file
--- /dev/null
+package com.quantum.sql.parser;
+
+
+/**
+ * @author BC
+ */
+public class SQLScript {
+
+ public SQL[] getSQLStatements() {
+ return null;
+ }
+}
style |= SWT.MULTI;
}
this.viewer = new TableViewer(composite, style);
- GridData full = new GridData(GridData.FILL_HORIZONTAL);
- full.widthHint = 200;
- full.heightHint = 50;
+ GridData full = new GridData(GridData.FILL_BOTH);
+ full.widthHint = 300;
+ full.heightHint = 100;
this.viewer.getControl().setLayoutData(full);
this.viewer.setLabelProvider(new LabelProvider());
private static Hashtable classLoaderCache = new Hashtable();
- public static Driver loadDriver(String driverFile, String className) {
+ public static Driver loadDriver(String[] driverFiles, String className) {
Driver result = null;
try {
- Class driverClass = loadDriverClass(driverFile, className);
+ Class driverClass = loadDriverClass(driverFiles, className);
if (driverClass != null) {
try {
result = (Driver) driverClass.newInstance();
}
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
+ } catch (NoClassDefFoundError e) {
+ } catch (RuntimeException e) {
}
return result;
}
- public static Class loadDriverClass(String driverFile, String className) {
+ public static Class loadDriverClass(String[] driverFiles, String className) {
Class result = null;
- if (driverFile != null && className != null) {
+ if (driverFiles != null && driverFiles.length > 0
+ && driverFiles[0].trim().length() > 0 && className != null) {
try {
- File file = new File(driverFile);
- if (file.exists() && file.isFile()) {
- URLClassLoader loader = getURLClassLoader(file);
- Class driverClass = loader.loadClass(className);
- result = Driver.class.isAssignableFrom(driverClass) ? driverClass : null;
- }
+ File[] files = getFiles(driverFiles);
+ URLClassLoader loader = getURLClassLoader(files);
+ result = loadDriverClass(className, loader);
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
+ } catch (NoClassDefFoundError e) {
+ } catch (RuntimeException e) {
+ }
+ } else if (className != null) {
+ try {
+ result = loadDriverClass(className, JarUtil.class.getClassLoader());
+ } catch (ClassNotFoundException e) {
+ } catch (NoClassDefFoundError e) {
+ } catch (RuntimeException e) {
}
}
return result;
}
- public static String[] getAllDriverNames(String driverFile) {
+ /**
+ * @param driverFiles
+ * @return
+ */
+ private static File[] getFiles(String[] driverFiles) {
+ List list = new ArrayList();
+
+ for (int i = 0, length = driverFiles == null ? 0 : driverFiles.length; i < length; i++) {
+ File file = new File(driverFiles[i]);
+ if (file.exists() && file.isFile()) {
+ list.add(file);
+ }
+ }
+ return (File[]) list.toArray(new File[list.size()]);
+ }
+
+ /**
+ * @param className
+ * @param loader
+ * @return
+ * @throws ClassNotFoundException
+ */
+ private static Class loadDriverClass(String className, ClassLoader loader) throws ClassNotFoundException {
+ Class driverClass = loader.loadClass(className);
+ return Driver.class.isAssignableFrom(driverClass) ? driverClass : null;
+ }
+
+ public static String[] getAllDriverNames(String[] driverFile) {
List list = new ArrayList();
try {
- File file = new File(driverFile);
- URLClassLoader loader = getURLClassLoader(file);
- JarFile jar = new JarFile(file);
- for (Enumeration e = jar.entries(); e.hasMoreElements(); ) {
- JarEntry entry = (JarEntry) e.nextElement();
- String className = getClassNameFromFileName(entry.getName());
- if (className != null) {
- try {
- Class driverClass = loader.loadClass(className);
- if (Driver.class.isAssignableFrom(driverClass)) {
- list.add(className);
- }
- } catch (ClassNotFoundException ex) {
- }
- }
+ File[] files = getFiles(driverFile);
+ URLClassLoader loader = getURLClassLoader(files);
+ for (int i = 0, length = files == null ? 0 : files.length; i < length; i++) {
+ JarFile jar = new JarFile(files[i]);
+ addCandidateDriversToList(list, loader, jar);
}
} catch (IOException e) {
}
return (String[]) list.toArray(new String[list.size()]);
}
+ /**
+ * @param list
+ * @param loader
+ * @param jar
+ */
+ private static void addCandidateDriversToList(List list, URLClassLoader loader, JarFile jar) {
+ for (Enumeration e = jar.entries(); e.hasMoreElements(); ) {
+ JarEntry entry = (JarEntry) e.nextElement();
+ String className = getClassNameFromFileName(entry.getName());
+ if (className != null) {
+ try {
+ Class driverClass = loadDriverClass(className, loader);
+ if (driverClass != null) {
+ list.add(className);
+ }
+ } catch (NoClassDefFoundError ex) {
+ } catch (ClassNotFoundException ex) {
+ } catch (RuntimeException ex) {
+ }
+ }
+ }
+ }
+
private static String getClassNameFromFileName(String name) {
String result = null;
if (name.endsWith(".class")) {
* @return
* @throws MalformedURLException
*/
- private static URLClassLoader getURLClassLoader(File file) throws MalformedURLException {
- String driverFile = file.getAbsolutePath();
+ private static URLClassLoader getURLClassLoader(File[] files) throws MalformedURLException {
+
+ String driverPath = getFilePath(files);
URLClassLoader loader =
- (URLClassLoader) classLoaderCache.get(driverFile);
+ (URLClassLoader) classLoaderCache.get(driverPath);
if (loader == null) {
- URL urls[] = new URL[1];
- urls[0] = file.toURL();
- loader = new URLClassLoader(urls);
- classLoaderCache.put(driverFile, loader);
+ URL urls[] = new URL[files == null ? 0 : files.length];
+ for (int i = 0, length = urls.length; i < length; i++) {
+ urls[i] = files[i].toURL();
+ }
+ loader = urls.length > 0 ? new URLClassLoader(urls) : null;
+ if (loader != null) {
+ classLoaderCache.put(driverPath, loader);
+ }
}
return loader;
}
+
+ /**
+ * @param files
+ * @return
+ */
+ private static String getFilePath(File[] files) {
+ StringBuffer buffer = new StringBuffer();
+ for (int i = 0, length = files == null ? 0 : files.length; i < length; i++) {
+ buffer.append(files[i].getAbsolutePath());
+ if (i < length-1) {
+ buffer.append(File.pathSeparator);
+ }
+ }
+ return buffer.toString();
+ }
}
--- /dev/null
+package com.quantum.util;
+
+import java.util.Comparator;
+
+
+/**
+ * @author BC
+ */
+public class StringArrayComparator implements Comparator {
+
+ public int compare(Object arg0, Object arg1) {
+ return compare((String[]) arg0, (String[]) arg1);
+ }
+
+ public int compare(String[] arg0, String[] arg1) {
+ if (arg0 == null && arg1 == null) {
+ return 0;
+ } else if (arg0 == null) {
+ return -1;
+ } else if (arg1 == null) {
+ return 1;
+ } else if (arg0.length != arg1.length) {
+ return arg0.length - arg1.length;
+ } else {
+ int result = 0;
+ for (int i = 0, length = arg0 == null ? 0 : arg0.length;
+ result == 0 && i < length; i++) {
+ result = compare(arg0[i], arg1[i]);
+ }
+ return result;
+ }
+ }
+
+ private int compare(String arg0, String arg1) {
+ if (arg0 == null && arg1 == null) {
+ return 0;
+ } else if (arg0 == null) {
+ return -1;
+ } else if (arg1 == null) {
+ return 1;
+ } else {
+ return arg0.compareTo(arg1);
+ }
+ }
+}
return name;
}
+ /**
+ * True if the type is Real (numeric and with decimal part) according to java.sql.Types
+ * @param type
+ * @return
+ */
+ public static boolean isReal(int type) {
+ return (type == DECIMAL || type == DOUBLE || type == FLOAT ||
+ type == NUMERIC || type == REAL );
+ }
+
+ /**
+ * True if the type is Numeric according to java.sql.Types
+ * @param type
+ * @return
+ */
+ public static boolean isNumeric(int type) {
+ return (type == DECIMAL || type == DOUBLE || type ==FLOAT ||
+ type == NUMERIC || type == REAL || type == BIGINT ||
+ type == TINYINT || type == SMALLINT || type == INTEGER );
+ }
+
+ /**
+ * True if the type is textual according to java.sql.Types
+ * @param type
+ * @return
+ */
+ public static boolean isText(int type) {
+ return (type == CLOB || type == VARBINARY || type ==VARCHAR
+ || type == CHAR || type == LONGVARCHAR );
+ }
}
result = ((JDBCDriver) element).getVersion();
break;
case 4:
- result = ((JDBCDriver) element).getJarFileName();
+ result = ((JDBCDriver) element).getJarFilePath();
break;
default:
}
import com.quantum.Messages;
import com.quantum.QuantumPlugin;
+import com.quantum.model.Bookmark;
import com.quantum.sql.MultiSQLServer;
import com.quantum.sql.SQLResults;
*/
public class ViewHelper {
- public static SQLResults tryGetResults(IViewPart view, Connection con, String query) {
- return tryGetResults(view.getSite().getShell(), con, query);
+ /** @deprecated */
+ public static SQLResults tryGetResults(IViewPart view, Bookmark bookmark, Connection con, String query) {
+ return tryGetResults(view.getSite().getShell(), bookmark, con, query);
}
- public static SQLResults tryGetResults(Shell shell, Connection con, String query) {
- SQLResults results = null;
- MultiSQLServer server = MultiSQLServer.getInstance();
+ /** @deprecated */
+ public static SQLResults tryGetResults(Shell shell, Bookmark bookmark, Connection con, String query) {
try {
- results = server.execute(con, query);
+ MultiSQLServer server = MultiSQLServer.getInstance();
+ return server.execute(bookmark, con, query);
} catch (SQLException e) {
LogProxy log = LogProxy.getInstance();
log.addText(LogProxy.ERROR, e.getLocalizedMessage(), e); //$NON-NLS-1$ //$NON-NLS-2$
- results = new SQLResults();
- results.setIsError(true);
MessageDialog.openConfirm(shell, "Database returned error", e.getLocalizedMessage()); //$NON-NLS-1$
+ return null;
}
- return results;
}
public static FileOutputStream askSaveFile(String key, Shell shell) {
*/
public int compareTo(Object object) {
TreeNode that = (TreeNode) object;
- return this.getLabelName().compareTo(that.getLabelName());
+ return this.getLabelName().toLowerCase().compareTo(that.getLabelName().toLowerCase());
}
public String toString() {
--- /dev/null
+package com.quantum.view.driver;
+
+import java.util.List;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.model.Bookmark;
+import com.quantum.model.BookmarkCollection;
+import com.quantum.model.JDBCDriver;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.actions.SelectionListenerAction;
+
+/**
+ * This action deletes JDBC Drivers from the JDBC Driver collection.
+ *
+ * @author BC Holmes
+ */
+public class DeleteDriverAction extends SelectionListenerAction {
+
+ private final IViewPart viewPart;
+
+ /**
+ * @param text
+ */
+ protected DeleteDriverAction(IViewPart viewPart, ISelectionProvider selectionProvider) {
+ super(Messages.getString(DeleteDriverAction.class, "text"));
+ this.viewPart = viewPart;
+ selectionProvider.addSelectionChangedListener(this);
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.DELETE));
+ }
+
+ public void run() {
+ JDBCDriver driver = getJDBCDriver();
+
+ if (driver != null) {
+ Bookmark[] bookmarks = BookmarkCollection.getInstance().getBookmarks();
+ boolean found = false;
+ for (int i = 0, length = bookmarks == null ? 0 : bookmarks.length;
+ driver != null && !found && i < length; i++) {
+ found |= driver.equals(bookmarks[i].getJDBCDriver());
+ }
+
+ if (found) {
+ MessageDialog.openWarning(getShell(),
+ Messages.getString(DeleteDriverAction.class, "failed"),
+ Messages.getString(DeleteDriverAction.class, "inUse"));
+ } else {
+ if (MessageDialog.openConfirm(getShell(),
+ Messages.getString(DeleteDriverAction.class, "confirm"),
+ Messages.getString(DeleteDriverAction.class, "confirmText",
+ new Object[] { driver.getName() }))) {
+
+ if (!BookmarkCollection.getInstance().removeDriver(driver)) {
+ MessageDialog.openWarning(getShell(),
+ Messages.getString(DeleteDriverAction.class, "failed"),
+ Messages.getString(DeleteDriverAction.class, "cant"));
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * @return
+ */
+ private Shell getShell() {
+ return this.viewPart.getViewSite().getShell();
+ }
+
+ /**
+ * @return
+ */
+ private JDBCDriver getJDBCDriver() {
+ List list = getSelectedNonResources();
+ return list == null || list.size() == 0 ? null : (JDBCDriver) list.get(0);
+ }
+
+ protected boolean updateSelection(IStructuredSelection selection) {
+ return selection != null && !selection.isEmpty();
+ }
+}
--- /dev/null
+package com.quantum.view.driver;
+
+
+import com.quantum.view.JDBCDriverTableViewer;
+
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.part.ViewPart;
+
+
+/**
+ * @author BC
+ */
+public class JDBCDriverView extends ViewPart {
+
+ private JDBCDriverTableViewer viewer;
+ private JDBCDriverViewActionGroup actionGroup;
+
+ public void createPartControl(Composite parent) {
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ parent.setLayout(layout);
+ this.viewer = new JDBCDriverTableViewer(parent);
+ this.viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ initActions();
+ }
+
+ public void initActions() {
+
+ this.actionGroup = new JDBCDriverViewActionGroup(this, this.viewer);
+
+ IActionBars actionBars = getViewSite().getActionBars();
+ this.actionGroup.fillActionBars(actionBars);
+ }
+
+ public void setFocus() {
+ }
+ public void dispose() {
+ this.viewer.dispose();
+ super.dispose();
+ }
+}
--- /dev/null
+package com.quantum.view.driver;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.actions.ActionGroup;
+import org.eclipse.ui.actions.SelectionListenerAction;
+
+
+/**
+ * @author BC Holmes
+ */
+class JDBCDriverViewActionGroup extends ActionGroup {
+
+ private SelectionListenerAction deleteAction;
+
+ public JDBCDriverViewActionGroup(JDBCDriverView view, ISelectionProvider selectionProvider) {
+ this.deleteAction = new DeleteDriverAction(view, selectionProvider);
+ }
+
+ public void fillActionBars(IActionBars actionBars) {
+ actionBars.setGlobalActionHandler(
+ IWorkbenchActionConstants.DELETE, this.deleteAction);
+ }
+}
--- /dev/null
+package com.quantum.view.tableview;
+
+import java.sql.SQLException;
+
+import com.quantum.Messages;
+import com.quantum.sql.SQLResultSetResults;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.ui.IViewPart;
+
+
+/**
+ * @author BC
+ */
+public class ChangeEncodingAction extends ResultSetAction {
+
+ private final String encoding;
+
+ /**
+ * @param view
+ * @param selectionProvider
+ */
+ public ChangeEncodingAction(IViewPart view, ISelectionProvider selectionProvider, String encoding, String key) {
+ super(view, selectionProvider);
+ this.encoding = encoding;
+ setText(Messages.getString(getClass(), key));
+ setToolTipText(Messages.getString(getClass(), key));
+ }
+
+ /* (non-Javadoc)
+ * @see com.quantum.view.tableview.ResultSetAction#executeResultSetAction(com.quantum.sql.SQLResultSetResults)
+ */
+ protected void executeResultSetAction(SQLResultSetResults results)
+ throws SQLException {
+ results.setEncoding(this.encoding);
+ results.refresh(getConnection(results));
+ }
+
+}
--- /dev/null
+package com.quantum.view.tableview;
+
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.sql.SQLResultSetCollection;
+import com.quantum.util.versioning.VersioningHelper;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.actions.SelectionListenerAction;
+
+/**
+ * @author root
+ *
+ */
+public class CloseAllResultSetsAction extends SelectionListenerAction {
+ private final ISelectionProvider selectionProvider;
+ /**
+ * @param text
+ */
+ public CloseAllResultSetsAction(IViewPart view, ISelectionProvider selectionProvider) {
+ super("Close All");
+ this.selectionProvider = selectionProvider;
+ this.selectionProvider.addSelectionChangedListener(this);
+ setEnabled(!this.selectionProvider.getSelection().isEmpty());
+
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.CLOSE_ALL));
+ if (VersioningHelper.isEclipse30()) {
+ setDisabledImageDescriptor(ImageStore.getImageDescriptor(ImageStore.CLOSE_ALL_DISABLED));
+ }
+ setText(Messages.getString(getClass(), "text"));
+ setToolTipText(Messages.getString(getClass(), "text"));
+ }
+
+ public void run() {
+ SQLResultSetCollection.getInstance().removeAllSQLResultSet();
+ }
+
+ public boolean updateSelection(IStructuredSelection selection) {
+ return !selection.isEmpty();
+ }
+}
--- /dev/null
+package com.quantum.view.tableview;
+
+
+import java.util.Iterator;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.sql.SQLResultSetCollection;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.util.versioning.VersioningHelper;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.actions.SelectionListenerAction;
+
+/**
+ * @author root
+ * @author BC Holmes
+ */
+public class CloseResultSetAction extends SelectionListenerAction {
+
+ private final ISelectionProvider selectionProvider;
+
+ /**
+ * @param text
+ */
+ public CloseResultSetAction(IViewPart view, ISelectionProvider selectionProvider) {
+ super("");
+ this.selectionProvider = selectionProvider;
+ this.selectionProvider.addSelectionChangedListener(this);
+ setEnabled(!this.selectionProvider.getSelection().isEmpty());
+
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.CLOSE));
+ if (VersioningHelper.isEclipse30()) {
+ setDisabledImageDescriptor(ImageStore.getImageDescriptor(ImageStore.CLOSE_DISABLED));
+ }
+ setToolTipText(Messages.getString(getClass(), "text"));
+ }
+
+ public void run() {
+ IStructuredSelection selection =
+ (IStructuredSelection) this.selectionProvider.getSelection();
+ if (!selection.isEmpty()) {
+ for (Iterator i = selection.iterator(); i.hasNext(); ) {
+ SQLResultSetCollection.getInstance().removeSQLResultSet((SQLResultSetResults) i.next());
+ }
+ }
+ }
+
+ public boolean updateSelection(IStructuredSelection selection) {
+ return !selection.isEmpty();
+ }
+}
--- /dev/null
+/*
+ * Created on 28-jul-2003
+ *
+ */
+package com.quantum.view.tableview;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.QuantumPlugin;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+
+
+public final class CopyAction extends Action {
+
+ private static final String LINE_SEPARATOR = System.getProperty("line.separator");
+
+ private final TableView view;
+
+ public CopyAction(TableView view) {
+ super();
+ this.view = view;
+ setText(Messages.getString(getClass(), "text"));
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.COPY));
+ }
+
+ public void run() {
+ Table table = getTable();
+ if (table != null) {
+ TableItem items[] = table.getSelection();
+ StringBuffer text = new StringBuffer();
+ for (int i = 0; i < items.length; i++) {
+ int columns = table.getColumnCount();
+ for (int col = 0; col < columns; col++) {
+ text.append(items[i].getText(col));
+ text.append('\t');
+ }
+ text.append(LINE_SEPARATOR);
+ }
+ QuantumPlugin.getDefault().getSysClip().setContents(
+ new Object[] { text.toString()},
+ new Transfer[] { TextTransfer.getInstance()});
+ }
+ }
+
+ private Table getTable() {
+ ResultSetViewer viewer = this.view.getSelectedResultSetViewer();
+ return viewer == null ? null : viewer.getTable();
+ }
+}
\ No newline at end of file
--- /dev/null
+package com.quantum.view.tableview;
+
+import java.sql.SQLException;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.sql.Scrollable;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IViewPart;
+
+
+/**
+ * @author BC
+ */
+public class FullModeAction extends ResultSetAction {
+
+ /**
+ * @param view
+ * @param selectionProvider
+ */
+ public FullModeAction(IViewPart view, ISelectionProvider selectionProvider) {
+ super(view, selectionProvider);
+ setText(Messages.getString(getClass(), "text"));
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.FULLDATA));
+ setToolTipText(Messages.getString(getClass(), "text"));
+ }
+
+ protected void executeResultSetAction(SQLResultSetResults results) throws SQLException {
+ ((Scrollable) results).setFullMode(!((Scrollable) results).isFullMode());
+ results.refresh(getConnection(results));
+ }
+
+
+ protected boolean updateSelection(IStructuredSelection selection) {
+ return super.updateSelection(selection)
+ && (selection.getFirstElement() instanceof Scrollable);
+ }
+}
--- /dev/null
+package com.quantum.view.tableview;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.sql.SQLException;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.sql.Scrollable;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IViewPart;
+
+
+/**
+ * @author BC
+ */
+public class NextPageAction extends ResultSetAction implements PropertyChangeListener {
+
+ private SQLResultSetResults resultSet;
+
+ public NextPageAction(IViewPart view, ISelectionProvider selectionProvider) {
+ super(view, selectionProvider);
+ setText(Messages.getString(getClass(), "text"));
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.NEXT));
+ setToolTipText(Messages.getString(getClass(), "text"));
+ setEnabled(hasNextPage((IStructuredSelection) selectionProvider.getSelection()));
+ }
+
+ protected void executeResultSetAction(SQLResultSetResults results) throws SQLException {
+ if (results instanceof Scrollable) {
+ ((Scrollable) results).nextPage(getConnection(results));
+ }
+ }
+ protected boolean updateSelection(IStructuredSelection selection) {
+ setResultSet(getResultSet(selection));
+ return hasNextPage(selection);
+ }
+
+ /**
+ * @param srollable
+ */
+ private void setResultSet(SQLResultSetResults results) {
+ if (this.resultSet != null) {
+ this.resultSet.removePropertyChangeListener(this);
+ }
+
+ this.resultSet = results;
+ if (results != null) {
+ this.resultSet.addPropertyChangeListener(this);
+ }
+ }
+
+ /**
+ * @param selection
+ */
+ private SQLResultSetResults getResultSet(IStructuredSelection selection) {
+ return (selection != null && !selection.isEmpty() &&
+ (selection.getFirstElement() instanceof SQLResultSetResults))
+ ? (SQLResultSetResults) selection.getFirstElement()
+ : null;
+ }
+
+ /**
+ * @param selection
+ * @return
+ */
+ private boolean hasNextPage(IStructuredSelection selection) {
+ return !selection.isEmpty() &&
+ (selection.getFirstElement() instanceof Scrollable) &&
+ ((Scrollable) selection.getFirstElement()).hasNextPage();
+ }
+
+ public void propertyChange(PropertyChangeEvent event) {
+ if ("rows".equals(event.getPropertyName())) {
+ setEnabled(hasNextPage(getStructuredSelection()));
+ }
+ }
+}
--- /dev/null
+package com.quantum.view.tableview;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.sql.SQLException;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.sql.Scrollable;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IViewPart;
+
+
+/**
+ * @author BC
+ */
+public class PreviousPageAction extends ResultSetAction implements PropertyChangeListener {
+
+ private SQLResultSetResults resultSet;
+
+ public PreviousPageAction(IViewPart view, ISelectionProvider selectionProvider) {
+ super(view, selectionProvider);
+ setText(Messages.getString(getClass(), "text"));
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.PREVIOUS));
+ setToolTipText(Messages.getString(getClass(), "text"));
+ setEnabled(hasPreviousPage((IStructuredSelection) selectionProvider.getSelection()));
+ }
+
+ protected void executeResultSetAction(SQLResultSetResults results) throws SQLException {
+ if (results instanceof Scrollable) {
+ ((Scrollable) results).previousPage(getConnection(results));
+ }
+ }
+ protected boolean updateSelection(IStructuredSelection selection) {
+ setResultSet(getResultSet(selection));
+ return hasPreviousPage(selection);
+ }
+
+ /**
+ * @param srollable
+ */
+ private void setResultSet(SQLResultSetResults results) {
+ if (this.resultSet != null) {
+ this.resultSet.removePropertyChangeListener(this);
+ }
+
+ this.resultSet = results;
+ if (results != null) {
+ this.resultSet.addPropertyChangeListener(this);
+ }
+ }
+
+ /**
+ * @param selection
+ */
+ private SQLResultSetResults getResultSet(IStructuredSelection selection) {
+ return (selection != null && !selection.isEmpty() &&
+ (selection.getFirstElement() instanceof SQLResultSetResults))
+ ? (SQLResultSetResults) selection.getFirstElement()
+ : null;
+ }
+
+ /**
+ * @param selection
+ * @return
+ */
+ private boolean hasPreviousPage(IStructuredSelection selection) {
+ return !selection.isEmpty() &&
+ (selection.getFirstElement() instanceof Scrollable) &&
+ ((Scrollable) selection.getFirstElement()).hasPreviousPage();
+ }
+
+ public void propertyChange(PropertyChangeEvent event) {
+ if ("rows".equals(event.getPropertyName())) {
+ setEnabled(hasPreviousPage(getStructuredSelection()));
+ }
+ }
+
+}
--- /dev/null
+package com.quantum.view.tableview;
+
+import java.sql.SQLException;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.sql.SQLResultSetResults;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.ui.IViewPart;
+
+/**
+ * Implements the "Refresh Table" action for the TableView view
+ *
+ * @author root
+ */
+public class RefreshTableAction extends ResultSetAction {
+
+ /**
+ * @param view
+ * @param selectionProvider
+ */
+ public RefreshTableAction(IViewPart view, ISelectionProvider selectionProvider) {
+ super(view, selectionProvider);
+ setText(Messages.getString(getClass(), "text"));
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.REFRESH));
+ setToolTipText(Messages.getString(getClass(), "text"));
+ }
+
+ protected void executeResultSetAction(SQLResultSetResults results) throws SQLException {
+ results.refresh(getConnection(results));
+ }
+}
--- /dev/null
+package com.quantum.view.tableview;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.util.connection.ConnectionUtil;
+
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.actions.SelectionListenerAction;
+
+/**
+ * @author BC Holmes
+ */
+public abstract class ResultSetAction extends SelectionListenerAction {
+ private IViewPart view;
+ private ConnectionUtil connectionUtil = new ConnectionUtil();
+ private final ISelectionProvider selectionProvider;
+
+ /**
+ * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
+ */
+ public ResultSetAction(IViewPart view, ISelectionProvider selectionProvider) {
+ super("");
+ this.selectionProvider = selectionProvider;
+ this.view = view;
+ this.selectionProvider.addSelectionChangedListener(this);
+ }
+
+ public void run() {
+ try {
+ IStructuredSelection selection =
+ (IStructuredSelection) this.selectionProvider.getSelection();
+ if (!selection.isEmpty()) {
+ SQLResultSetResults results = (SQLResultSetResults) selection.getFirstElement();
+ executeResultSetAction(results);
+ }
+ } catch (SQLException e) {
+ ExceptionDisplayDialog.openError(getShell(), null, null, e);
+ } catch (RuntimeException e) {
+ ExceptionDisplayDialog.openError(getShell(), null, null, e);
+ }
+ }
+
+ protected boolean updateSelection(IStructuredSelection selection) {
+ return selection != null && !selection.isEmpty();
+ }
+ /**
+ * @param results
+ * @throws SQLException
+ */
+ protected abstract void executeResultSetAction(SQLResultSetResults results) throws SQLException;
+
+ /**
+ * @param results
+ * @return
+ */
+ protected Connection getConnection(SQLResultSetResults results) {
+ return this.connectionUtil.connect(results.getBookmark(), getShell());
+ }
+
+ /**
+ * @return
+ */
+ private Shell getShell() {
+ return this.view.getSite().getShell();
+ }
+}
--- /dev/null
+package com.quantum.view.tableview;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.sql.Scrollable;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+
+/**
+ * @author BC
+ */
+class ResultSetViewer implements PropertyChangeListener {
+
+ class LabelProviderImpl implements ITableLabelProvider {
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+ public String getColumnText(Object element, int columnIndex) {
+ Object value = null;
+ if (element instanceof SQLResultSetResults.Row) {
+ value = ((SQLResultSetResults.Row) element).get(columnIndex+1);
+ }
+ return value == null ? "" : value.toString();
+ }
+ public void addListener(ILabelProviderListener listener) {
+ }
+ public void dispose() {
+ }
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+ public void removeListener(ILabelProviderListener listener) {
+ }
+ }
+
+ class ContentProviderImpl implements IStructuredContentProvider {
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof SQLResultSetResults) {
+ return ((SQLResultSetResults) inputElement).getRows();
+ } else {
+ return null;
+ }
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ }
+
+
+ private final SQLResultSetResults resultSet;
+ private TableViewer tableViewer;
+ private TabItem tabItem;
+ private final TableView tableView;
+
+ public ResultSetViewer(TableView tableView, SQLResultSetResults resultSet) {
+ this.tableView = tableView;
+ this.resultSet = resultSet;
+
+ createControl();
+
+ this.resultSet.addPropertyChangeListener(this);
+ }
+
+ protected TabItem getTabItem() {
+ return this.tabItem;
+ }
+
+ public Table getTable() {
+ return this.tableViewer.getTable();
+ }
+
+ protected void createControl() {
+ this.tabItem = new TabItem(this.tableView.tabs, SWT.NONE);
+
+ int index = this.tableView.tabs.getItems().length;
+ Composite composite = new Composite(this.tableView.tabs, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.marginWidth = 5;
+ layout.marginHeight = 5;
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ if (this.resultSet.getEntity() == null) {
+ this.tabItem.setImage(ImageStore.getImage(ImageStore.SCRIPT));
+ this.tabItem.setText(this.resultSet.getBookmark().getName());
+ this.tabItem.setToolTipText(this.resultSet.getQuery());
+ } else if (this.resultSet.isMetaData()) {
+ this.tabItem.setImage(ImageStore.getImage(ImageStore.TABLE_DETAILS));
+ this.tabItem.setText(this.resultSet.getBookmark().getName() + ":" +
+ this.resultSet.getEntity().getQualifiedName());
+ tabItem.setToolTipText(this.resultSet.getEntity().getQualifiedName());
+ } else {
+ this.tabItem.setImage(ImageStore.getImage(ImageStore.TABLE));
+ this.tabItem.setText(this.resultSet.getBookmark().getName() + ":" +
+ this.resultSet.getEntity().getQualifiedName());
+ this.tabItem.setToolTipText(this.resultSet.getEntity().getQualifiedName());
+ }
+
+ createTable(composite);
+ this.tabItem.setControl(composite);
+ initializePopUpMenu();
+
+ this.tableView.tabs.setSelection(index-1);
+ }
+
+
+ /**
+ * @param tabItem
+ * @param composite
+ */
+ private void createTable(Composite composite) {
+ final Table table = new Table(composite, SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER);
+ table.setLayout(new GridLayout());
+ table.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ addColumnsToTable(table);
+ this.tableViewer = new TableViewer(table);
+ this.tableViewer.setLabelProvider(new LabelProviderImpl());
+ this.tableViewer.setContentProvider(new ContentProviderImpl());
+ this.tableViewer.setInput(this.resultSet);
+
+ packColumns(table);
+ }
+
+ /**
+ * @param table
+ */
+ private void packColumns(final Table table) {
+ for (int i = 0; i < table.getColumnCount(); i++) {
+ table.getColumn(i).pack();
+ }
+ }
+
+ /**
+ * @param table
+ * @return
+ */
+ private int addColumnsToTable(final Table table) {
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+ int columnCount = this.resultSet.getColumnCount();
+ for (int i = 0; i < columnCount; i++) {
+ TableColumn column = new TableColumn(table, SWT.NONE);
+ column.setText(this.resultSet.getColumnName(i+1).toString());
+ }
+ return columnCount;
+ }
+
+ public void propertyChange(PropertyChangeEvent event) {
+ if ("rows".equals(event.getPropertyName())) {
+ this.tableViewer.refresh();
+ } else if ("columns".equals(event.getPropertyName())) {
+ Table table = this.tableViewer.getTable();
+ TableColumn[] columns = table.getColumns();
+ for (int i = 0, length = columns == null ? 0 : columns.length; i < length; i++) {
+ columns[i].dispose();
+ }
+ addColumnsToTable(table);
+ this.tableViewer.setInput(this.resultSet);
+ packColumns(table);
+ table.layout();
+ }
+ updateStatusLine();
+ }
+
+ public void dispose() {
+ this.resultSet.removePropertyChangeListener(this);
+ this.tabItem.dispose();
+ }
+
+ protected SQLResultSetResults getResultSet() {
+ return this.resultSet;
+ }
+
+ private void initializePopUpMenu() {
+ MenuManager manager = new MenuManager();
+ manager.setRemoveAllWhenShown(true);
+ manager.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager menuManager) {
+ ResultSetViewer.this.tableView.actionGroup.fillContextMenu(menuManager);
+ }
+ });
+ Menu contextMenu = manager.createContextMenu(this.tableViewer.getControl());
+ this.tableViewer.getControl().setMenu(contextMenu);
+ // register the menu to the site so that we can allow
+ // actions to be plugged in
+ this.tableView.getSite().registerContextMenu(manager, this.tableView);
+ }
+
+ /**
+ *
+ */
+ protected void updateStatusLine() {
+
+ if (this == this.tableView.getSelectedResultSetViewer()) {
+ IStatusLineManager statusLine = this.tableView.getViewSite().getActionBars().getStatusLineManager();
+ if (this.resultSet != null && this.resultSet instanceof Scrollable) {
+ Scrollable scrollable = (Scrollable) this.resultSet;
+ int start = scrollable.getStart();
+ int end = scrollable.getEnd();
+ int last = scrollable.getLast();
+
+ statusLine.setMessage(
+ Messages.getString(getClass(), "position",
+ new String[] {
+ String.valueOf(start),
+ String.valueOf(end),
+ last < 0
+ ? Messages.getString(getClass(), "unknown")
+ : String.valueOf(last)}));
+ } else {
+ statusLine.setMessage("");
+ }
+ }
+ }
+
+ protected ISelection getSelection() {
+ return this.tableViewer.getSelection();
+ }
+}
--- /dev/null
+/*
+ * Created on 28-jul-2003
+ *
+ */
+package com.quantum.view.tableview;
+
+import com.quantum.Messages;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.swt.widgets.Table;
+
+
+public final class SelectAllAction extends Action {
+
+ private final TableView view;
+
+ public SelectAllAction(TableView view) {
+ super();
+ this.view = view;
+ setText(Messages.getString(getClass(), "text"));
+ }
+ public void run() {
+ Table table = getTable();
+ if (table != null) {
+ table.selectAll();
+ }
+ }
+
+ private Table getTable() {
+ ResultSetViewer viewer = this.view.getSelectedResultSetViewer();
+ return viewer == null ? null : viewer.getTable();
+ }
+}
\ No newline at end of file
+++ /dev/null
-package com.quantum.view.tableview;
-
-import java.sql.SQLException;
-import java.util.Vector;
-
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TextCellEditor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Text;
-
-import com.quantum.Messages;
-import com.quantum.adapters.DatabaseAdapter;
-import com.quantum.model.Bookmark;
-import com.quantum.model.Entity;
-import com.quantum.model.NotConnectedException;
-import com.quantum.sql.FilterSort;
-import com.quantum.sql.SQLHelper;
-import com.quantum.sql.SQLResults;
-
-public class TableAdapter {
-
- public static final String DEFAULT = ""; //$NON-NLS-1$
- public static final String UTF_8 = "UTF-8"; //$NON-NLS-1$
- public static final String UTF_16 = "UTF-16"; //$NON-NLS-1$
-
- private int pageSize = DefaultSizes.PAGE_SIZE;
- private int maxColumnSize = DefaultSizes.MAX_COLUMN_SIZE;
- private FilterSort extra = new FilterSort();
- private int offset = 1;
- private int totalSize = -1;
- private Vector rows = new Vector();
- private Vector columnNames = new Vector();
- private boolean hasMore = false;
-
- private Bookmark bookmark = null;
- private Entity entity = null;
- private String query;
-
- private String encoding = ""; //$NON-NLS-1$
-
- private TableAdapter(Entity entity) {
- this.entity = entity;
- this.bookmark = entity.getBookmark();
- }
- private TableAdapter(Bookmark bookmark) {
- this.bookmark = bookmark;
- }
- public void fullMode() {
- offset = 1;
- pageSize = Integer.MAX_VALUE;
- }
- public void resetMode() {
- offset = 1;
- pageSize = DefaultSizes.PAGE_SIZE;
- }
- public static TableAdapter createFromQuery(Bookmark bookmark, SQLResults results) throws NotConnectedException {
- TableAdapter retVal = new TableAdapter(bookmark);
- retVal.setQuery(results.getQuery());
- retVal.setData(results);
- return retVal;
- }
- public static TableAdapter createFromTable(Entity entity) {
- TableAdapter retVal = new TableAdapter(entity);
- return retVal;
- }
- private void loadSize() {
- try {
- if (entity != null) {
- totalSize = SQLHelper.getSize(
- bookmark.getConnection(), entity.getQualifiedName(),
- bookmark.getAdapter());
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } catch (NotConnectedException e) {
- e.printStackTrace();
- }
- }
- public int getStartIndex() {
- if (totalSize == 0) {
- return 0;
- }
- return offset;
- }
- public int getEndIndex() {
- return offset + rows.size() - 1;
- }
- public int getTotalSize() {
- return totalSize;
- }
- public void nextPage() {
- loadSize();
- offset = offset + pageSize;
- if (totalSize >= 0 && offset > totalSize) {
- offset = offset - pageSize;
- }
- }
- public void previousPage() {
- offset = offset - pageSize;
- if (offset < 1) {
- offset = 1;
- }
- }
- public boolean hasNextPage() {
- if (entity != null) {
- if (offset + pageSize <= totalSize) {
- return true;
- }
- return false;
- }
- return hasMore;
- }
- public boolean hasPreviousPage() {
- if (offset > 1) {
- return true;
- }
- return false;
- }
-
- public String getQuery() {
- if (entity != null) {
- DatabaseAdapter adapter = bookmark.getAdapter();
- if (adapter == null) throw new RuntimeException();
- else return adapter.getTableQuery((entity).getQualifiedName()) + extra.toString();
- }
- return query;
- }
- public void loadData() throws NotConnectedException {
- loadSize();
- if (entity != null) {
- if (offset > totalSize) {
- offset = 1;
- }
- }
- String query = getQuery();
- System.out.println(offset + Messages.getString("TableAdapter.to") + (offset + pageSize - 1)); //$NON-NLS-1$
- SQLResults results = SQLHelper.getResults(bookmark.getConnection(), query, offset, offset + pageSize - 1, maxColumnSize, encoding);
- setData(results);
- }
- public void resetOffset() {
- offset = 1;
- }
- public void setData(SQLResults results) throws NotConnectedException {
- if (results.isError()) return;
- int rowCount = results.getRowCount();
- int columnCount = results.getColumnCount();
- rows = new Vector();
- columnNames = new Vector();
- for (int col = 1; col <= columnCount; col++) {
- columnNames.addElement(results.getColumnName(col));
- }
- for (int row = 1; row <= rowCount; row++) {
- String rowData[] = new String[columnCount];
- for (int col = 1; col <= columnCount; col++) {
- rowData[col - 1] = results.getElement(col, row).toString();
- }
- rows.addElement(rowData);
- }
- hasMore = results.hasMore();
- if (entity == null && results.getMaxSize() >= 0) {
- if (offset > results.getMaxSize()) {
- offset = 1;
- loadData();
- }
- }
- }
- public void loadTable(Table table) {
- table.setHeaderVisible(true);
- for (int i = 0; i < columnNames.size(); i++) {
- TableColumn column = new TableColumn(table, SWT.NONE);
- column.setText(columnNames.elementAt(i).toString());
- }
- for (int i = 0; i < columnNames.size(); i++) {
- table.getColumn(i).pack();
- }
- for (int row = 0; row < rows.size(); row++) {
- TableItem item = new TableItem(table, SWT.NONE);
- String itemData[] = (String[]) rows.elementAt(row);
- item.setText(itemData);
- }
- for (int i = 0; i < columnNames.size(); i++) {
- table.getColumn(i).pack();
- }
- }
-
-// public TableViewer addTableViewer(Table table) {
-// TableViewer tableViewer = new TableViewer(table);
-// tableViewer.setUseHashlookup(true);
-// String[] colNams = new String[columnNames.size()];
-// for (int i = 0; i < columnNames.size(); i++) {
-// colNams[i] = (String) columnNames.get(i);
-// }
-// tableViewer.setColumnProperties(colNams);
-//
-// // Create the cell editors
-// CellEditor[] editors = new CellEditor[columnNames.size()];
-// for (int i = 0; i < columnNames.size(); i++) {
-// TextCellEditor textEditor = new TextCellEditor(table);
-// ((Text) textEditor.getControl()).setTextLimit(60);
-// editors[i] = textEditor;
-// }
-// // Assign the cell editors to the viewer
-// tableViewer.setCellEditors(editors);
-// // Set the cell modifier for the viewer
-// //tableViewer.setCellModifier(new MetaDataModifier(this));
-// // Set the default sorter for the viewer
-// //tableViewer.setSorter(new ExampleTaskSorter(ExampleTaskSorter.DESCRIPTION));
-//
-// return tableViewer;
-// }
-
- public int getPageSize() {
- return pageSize;
- }
-
- public void setFilterSort(FilterSort extra) {
- this.extra = extra;
- }
- public String getTable() {
- return (entity != null) ? entity.getQualifiedName() : null;
- }
-
- public void setQuery(String query) {
- this.query = query;
- }
- public String getEncoding() {
- return encoding;
- }
-
- public void setEncoding(String encoding) {
- this.encoding = encoding;
- }
- public String getStatusString() {
- String status = getStartIndex() + Messages.getString("TableAdapter.to") + getEndIndex() + Messages.getString("TableAdapter.of") + //$NON-NLS-1$ //$NON-NLS-2$
- getTotalSize();
- if (!encoding.equals(DEFAULT)) {
- status += " (" + encoding + ")"; //$NON-NLS-1$ //$NON-NLS-2$
- }
- String filterText = extra.toString();
- if (!filterText.equals("")) { //$NON-NLS-1$
- status += " (" + filterText + ")"; //$NON-NLS-1$ //$NON-NLS-2$
- }
- if (pageSize == Integer.MAX_VALUE) {
- status += Messages.getString("TableAdapter.full"); //$NON-NLS-1$
- }
- return status;
- }
- /**
- * @return
- */
- public Bookmark getBookmark() {
- return this.bookmark;
- }
- /**
- * @return
- */
- public Entity getEntity() {
- return entity;
- }
-
-}
\ No newline at end of file
package com.quantum.view.tableview;
-import java.util.Vector;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
-import com.quantum.Messages;
import com.quantum.QuantumPlugin;
-import com.quantum.extensions.ProcessServiceMembers;
-import com.quantum.model.Bookmark;
-import com.quantum.model.Entity;
-import com.quantum.model.NotConnectedException;
-import com.quantum.sql.SQLResults;
-import com.quantum.ui.dialog.ExceptionDisplayDialog;
-import com.quantum.view.LogProxy;
+import com.quantum.sql.SQLResultSetCollection;
+import com.quantum.sql.SQLResultSetResults;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.ui.ISelectionListener;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.WorkbenchException;
+import org.eclipse.ui.IActionBars;
import org.eclipse.ui.part.ViewPart;
/**
* The Table View. Displays tables and Queries.
*/
-public class TableView extends ViewPart implements ISelectionListener {
+public class TableView extends ViewPart implements ISelectionProvider, PropertyChangeListener {
- private class DefaultEncodingAction extends Action {
- private final TableAdapter ta;
- private DefaultEncodingAction(TableAdapter ta) {
- super();
- this.ta = ta;
- }
- public void run() {
- ta.setEncoding(TableAdapter.DEFAULT);
- }
- }
- private TabFolder tabs = null;
- private Composite parent;
- private Vector extensionVector;
+ protected TabFolder tabs = null;
+
+ private Set listeners = Collections.synchronizedSet(new HashSet());
+
+ protected List resultSetViewers = Collections.synchronizedList(new ArrayList());
+ protected TableViewActionGroup actionGroup;
/**
* Generic contructor
*/
public TableView() {
+ SQLResultSetCollection.getInstance().addPropertyChangeListener(this);
}
public void setFocus() {
- setQualifiedTitle();
+ }
+
+ public void dispose() {
+ SQLResultSetCollection.getInstance().removePropertyChangeListener(this);
+ super.dispose();
}
/**
return (TableView) QuantumPlugin.getDefault().getView("com.quantum.view.tableview.TableView");
}
- /**
- * Close the current tab, disposing of it
- */
- public void closeCurrent() {
- if (tabs == null) return;
-
- if (tabs.getSelectionIndex() >= 0) {
- try {
- TabItem item = tabs.getItem(tabs.getSelectionIndex());
- item.dispose();
- } catch (Throwable e) {
- LogProxy.getInstance().addText(LogProxy.ERROR, "Error Closing Current: " + e.toString()); //$NON-NLS-1$
- e.printStackTrace();
+ public void createPartControl(Composite parent) {
+ this.tabs = new TabFolder(parent, SWT.NONE);
+ this.tabs.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent event) {
+ fireSelectionChangedEvent();
}
- }
- if (tabs.getItemCount() == 0) {
- setTitle(Messages.getString("tableview.QuantumTableViewName")); //$NON-NLS-1$
+ });
+
+ SQLResultSetResults[] resultSets = SQLResultSetCollection.getInstance().getResultSets();
+ for (int i = 0, length = resultSets == null ? 0 : resultSets.length; i < length; i++) {
+ this.resultSetViewers.add(new ResultSetViewer(this, resultSets[i]));
}
+
+ initActions();
+ }
+
+ public void initActions() {
+
+ this.actionGroup = new TableViewActionGroup(this);
+
+ IActionBars actionBars = getViewSite().getActionBars();
+ this.actionGroup.fillActionBars(actionBars);
+ }
+
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ this.listeners.add(listener);
}
+ protected void fireSelectionChangedEvent() {
+ ISelection selection = getSelection();
+ for (Iterator i = this.listeners.iterator(); i.hasNext();) {
+ ISelectionChangedListener listener = (ISelectionChangedListener) i.next();
+ listener.selectionChanged(new SelectionChangedEvent(this, selection));
+ }
+
+ ResultSetViewer results = getSelectedResultSetViewer();
+ if (results != null) {
+ results.updateStatusLine();
+ } else {
+ getViewSite().getActionBars().getStatusLineManager().setMessage("");
+ }
+ }
+
+ public ISelection getSelection() {
+ SQLResultSetResults selection = getSelectedResultSet();
+ return selection == null
+ ? new StructuredSelection()
+ : new StructuredSelection(selection);
+ }
+
/**
- * Reload table or query data into the selected tab
+ * @return
*/
- public void refreshCurrent() {
-System.out.println("Refresh?");
- if (tabs.getSelectionIndex() >= 0) {
-System.out.println("Refresh!");
- TabItem item = tabs.getItem(tabs.getSelectionIndex());
- TableAdapter adapter = (TableAdapter) item.getData();
- Bookmark bookmark = adapter.getBookmark();
- String table = adapter.getTable();
- if (table == null) {
- loadTable(bookmark, item, null, null, true, true);
- } else {
- loadTable(bookmark, item, null, null, true, true);
+ protected SQLResultSetResults getSelectedResultSet() {
+ ResultSetViewer viewer = getSelectedResultSetViewer();
+ return viewer == null ? null : viewer.getResultSet();
+ }
+
+ protected ResultSetViewer getSelectedResultSetViewer() {
+ ResultSetViewer selection = null;
+ int index = this.tabs.getSelectionIndex();
+ if (index >= 0) {
+ TabItem item = this.tabs.getItem(index);
+ for (Iterator i = this.resultSetViewers.iterator();
+ selection == null && i.hasNext();) {
+ ResultSetViewer viewer = (ResultSetViewer) i.next();
+ if (item == viewer.getTabItem()) {
+ selection = viewer;
+ }
}
- String title = Messages.getString("tableview.QuantumTableViewName"); //$NON-NLS-1$
- if (bookmark != null)
- title = bookmark.getName() + Messages.getString("tableview.ViewNameInitialDecoration") + title + Messages.getString("tableview.ViewNameFinalDecoration"); //$NON-NLS-1$ //$NON-NLS-2$
- setTitle(title);
}
+ return selection;
}
-
- public void loadQuery(Bookmark bookmark, SQLResults results) {
- loadTable(bookmark, null, null, results, true, false);
- }
- public void loadTable(Entity entity) {
- loadTable(entity.getBookmark(), null, entity, null, false, true);
+
+
+ public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+ this.listeners.remove(listener);
}
- public void loadTable(Bookmark bookmark, TabItem tabItem, Entity entity, SQLResults results, boolean query, boolean reload) {
- try {
- TableAdapter adapter;
- // If no TabItem is given we have to create a new one, with the info of the table or view.
- if (tabItem == null) {
- tabItem = new TabItem(tabs, SWT.NONE);
- // Data is stored in a TableAdapter object
- if (query) {
- adapter = TableAdapter.createFromQuery(bookmark, results);
- } else {
- adapter = TableAdapter.createFromTable(entity);
- }
- // That is stored in the tabItem, so it won't get lost
- tabItem.setData(adapter);
- // This does not really belong here, but it'll fail if done before the creation of the
- // first TabItem, so it remains here till a better place found.
- // We set a function to change the Title of the window depending on the selected tab.
- tabs.addSelectionListener(new SelectionListener() {
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- public void widgetSelected(SelectionEvent e) {
- setQualifiedTitle();
- }
- });
- } else {
- // If there is already a TabItem, we take its TableAdapter object
- adapter = (TableAdapter) tabItem.getData();
- }
-
- // We create a Composite widget (main) to display our data, with a GridLayout
- Composite main = new Composite(tabs, SWT.NONE);
- GridLayout layout = new GridLayout(1, false);
- layout.horizontalSpacing = 0;
- layout.verticalSpacing = 0;
- main.setLayout(layout);
-
-
- // load widgets, the order of loading them determines the appearance in screen
- ToolBar widgetToolBar = new ToolBar(main, SWT.HORIZONTAL);
- // We fill up our Composite widget, the main table display, etc.
- final Table table = new Table(main, SWT.FULL_SELECTION | SWT.MULTI);
- final Label label = new Label(main, SWT.NULL);
- TableViewToolBar toolBar = new TableViewToolBar(this, widgetToolBar, table, adapter, label);
-
-
- // load table
- if (reload) {
- adapter.resetOffset();
- adapter.loadData();
- }
- // Load the table data from the adapter into the widget
- adapter.loadTable(table);
- // Experimental, won't make it into 2.2
- // final TableViewer viewer = adapter.addTableViewer(table);
-
- String tableName = adapter.getTable();
- if (tableName != null) {
- tabItem.setText(bookmark.getName() + ":" + tableName);
- } else {
- tabItem.setText(bookmark.getName() + ": SQL");
- tabItem.setToolTipText(bookmark.getName() + ":\n" + adapter.getQuery());
- }
-
- toolBar.getPrevious().setEnabled(adapter.hasPreviousPage());
- toolBar.getNext().setEnabled(adapter.hasNextPage());
- label.setText(adapter.getStatusString());
-
- GridData gridData = new GridData();
- gridData.horizontalAlignment = GridData.FILL;
- gridData.verticalAlignment = GridData.FILL;
- gridData.grabExcessHorizontalSpace = true;
- gridData.grabExcessVerticalSpace = true;
- table.setLayoutData(gridData);
-
- gridData = new GridData();
- gridData.horizontalAlignment = GridData.FILL;
- label.setLayoutData(gridData);
-
-
- toolBar.setColumns(this, adapter, table);
- final TableAdapter ta = adapter;
- final Action defaultEncodingAction = new DefaultEncodingAction(ta);
- defaultEncodingAction.setText(Messages.getString("tableview.defaultEncoding")); //$NON-NLS-1$
- final Action UTF8EncodingAction = new Action() {
- public void run() {
- ta.setEncoding(TableAdapter.UTF_8);
- }
- };
- UTF8EncodingAction.setText(Messages.getString("tableview.UTF8Encoding")); //$NON-NLS-1$
- final Action UTF16EncodingAction = new Action() {
- public void run() {
- ta.setEncoding(TableAdapter.UTF_16);
- }
- };
- UTF16EncodingAction.setText(Messages.getString("tableview.UTF16Encoding")); //$NON-NLS-1$
-
- IMenuListener menuListener = new TableViewMenuListener(this, table, UTF16EncodingAction, ta, defaultEncodingAction, UTF8EncodingAction, extensionVector);
-
- // final setup
- MenuManager manager = new MenuManager();
- manager.setRemoveAllWhenShown(true);
- Menu fTextContextMenu = manager.createContextMenu(table);
- table.setMenu(fTextContextMenu);
- table.setLinesVisible(true);
- manager.addMenuListener(menuListener);
-
- tabItem.setControl(main);
- tabs.setSelection(tabs.indexOf(tabItem));
-
- setQualifiedTitle();
- } catch (NotConnectedException e) {
- e.printStackTrace();
- handleException(e);
- } catch (Exception e) {
- e.printStackTrace();
- }
+
+ public void setSelection(ISelection selection) {
}
-
- protected void handleException(Exception e) {
- ExceptionDisplayDialog.openError(getSite().getShell(), null, null, e);
- }
+ public void propertyChange(PropertyChangeEvent event) {
+ if ("resultSets".equals(event.getPropertyName())) {
+ SQLResultSetResults selection = getSelectedResultSet();
+
+ Collection additions = getAddedResultSets();
+ for (Iterator i = additions.iterator(); i.hasNext();) {
+ SQLResultSetResults results = (SQLResultSetResults) i.next();
+ this.resultSetViewers.add(new ResultSetViewer(this, results));
+ }
+
+ Collection deletions = getRemovedResultSets();
+ for (Iterator i = deletions.iterator(); i.hasNext();) {
+ SQLResultSetResults results = (SQLResultSetResults) i.next();
+
+ ResultSetViewer viewer = findViewerFor(results);
+ this.resultSetViewers.remove(viewer);
+ viewer.dispose();
+ }
+
+ SQLResultSetResults newSelection = getSelectedResultSet();
+ if (selection != null && newSelection == null) {
+ fireSelectionChangedEvent();
+ } else if (selection == null && newSelection != null) {
+ fireSelectionChangedEvent();
+ } else if (selection != null && !selection.equals(newSelection)) {
+ fireSelectionChangedEvent();
+ }
+ }
+ }
+
/**
* @return
*/
- /**
- * Sets the title of the window to the text of the selected tab
- */
- private void setQualifiedTitle() {
- if (tabs.getSelectionIndex() < 0) return;
- TabItem item = tabs.getItem(tabs.getSelectionIndex());
- String defTitle = Messages.getString("tableview.QuantumTableViewName"); //$NON-NLS-1$
- String title = item.getText();
- int ind = title.indexOf(Messages.getString("tableview.BookmarkSeparator")); //$NON-NLS-1$
- if (ind > 0) defTitle = title.substring(0,ind)
- + Messages.getString("tableview.ViewNameInitialDecoration") //$NON-NLS-1$
- + defTitle
- + Messages.getString("tableview.ViewNameFinalDecoration"); //$NON-NLS-1$
- setTitle(defTitle);
+ private Collection getRemovedResultSets() {
+ SQLResultSetResults[] results = SQLResultSetCollection.getInstance().getResultSets();
+ Collection collection = (results == null)
+ ? new ArrayList()
+ : new ArrayList(Arrays.asList(results));
+ Collection visible = getResultSets();
+ visible.removeAll(collection);
+ return visible;
}
- public void createPartControl(Composite parent) {
- this.parent = parent;
- initActions();
- tabs = new TabFolder(parent, SWT.NONE);
+ private Collection getAddedResultSets() {
+ SQLResultSetResults[] results = SQLResultSetCollection.getInstance().getResultSets();
+ Collection collection = (results == null)
+ ? new ArrayList()
+ : new ArrayList(Arrays.asList(results));
+ collection.removeAll(getResultSets());
+ return collection;
}
- public void initActions() {
- extensionVector = new Vector();
- try {
- ProcessServiceMembers.process(this, extensionVector);
- } catch (WorkbenchException e) {
- e.printStackTrace();
+ private Collection getResultSets() {
+ List list = new ArrayList();
+ for (Iterator i = this.resultSetViewers.iterator(); i.hasNext();) {
+ ResultSetViewer viewer = (ResultSetViewer) i.next();
+ list.add(viewer.getResultSet());
}
-
+ return list;
}
-
- public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+
+ private ResultSetViewer findViewerFor(SQLResultSetResults results) {
+ ResultSetViewer viewer = null;
+ for (Iterator i = this.resultSetViewers.iterator(); viewer == null && i.hasNext();) {
+ ResultSetViewer temp = (ResultSetViewer) i.next();
+ if (results != null && results.equals(temp.getResultSet())) {
+ viewer = temp;
+ }
+ }
+ return viewer;
}
}
\ No newline at end of file
--- /dev/null
+package com.quantum.view.tableview;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.WorkbenchException;
+import org.eclipse.ui.actions.ActionGroup;
+import org.eclipse.ui.actions.SelectionListenerAction;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.extensions.ExtensionAction;
+import com.quantum.extensions.ProcessServiceMembers;
+import com.quantum.php.wizards.PHPDeleteRowPage;
+import com.quantum.php.wizards.PHPInsertRowPage;
+import com.quantum.php.wizards.PHPSelectRowPage;
+import com.quantum.php.wizards.PHPUpdateRowPage;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.sql.TableRow;
+import com.quantum.util.StringMatrix;
+import com.quantum.wizards.DeleteRowPage;
+import com.quantum.wizards.InsertRowPage;
+import com.quantum.wizards.SQLPage;
+import com.quantum.wizards.SQLRowWizard;
+import com.quantum.wizards.SortFilterPage;
+import com.quantum.wizards.UpdateRowPage;
+
+
+/**
+ * @author Julen Parra
+ * @author BC Holmes
+ */
+public class TableViewActionGroup extends ActionGroup {
+
+ abstract class SQLWizardAction extends SelectionListenerAction {
+
+ /**
+ * @param text
+ */
+ protected SQLWizardAction(String text, ISelectionProvider selectionProvider) {
+ super(text);
+ selectionProvider.addSelectionChangedListener(this);
+ setEnabled(!selectionProvider.getSelection().isEmpty());
+ }
+
+ protected abstract SQLPage createSQLPage();
+
+ protected abstract String getTitle();
+
+ public void run() {
+ SQLPage page = createSQLPage();
+ SQLRowWizard wizard = new SQLRowWizard();
+ wizard.init(getTitle(), page, getSelectedSQLResults(), getSelectedRow());
+ WizardDialog dialog = new WizardDialog(
+ tableView.getSite().getShell(), wizard);
+ dialog.open();
+ }
+
+ protected boolean updateSelection(IStructuredSelection selection) {
+ return selection != null && !selection.isEmpty();
+ }
+ };
+
+ class SortFilterAction extends SQLWizardAction {
+
+ public SortFilterAction(ISelectionProvider selectionProvider) {
+ super(Messages.getString(TableViewActionGroup.class, "filterSort"),
+ selectionProvider);
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.FILTER));
+ setToolTipText(Messages.getString(TableViewActionGroup.class, "filterSort"));
+ setEnabled(sortFilterApplies());
+ }
+
+ private boolean sortFilterApplies() {
+ SQLResultSetResults results = getSelectedSQLResults();
+ return results != null && !results.isMetaData() && results.getEntity() != null;
+ }
+
+ protected SQLPage createSQLPage() {
+ return new SortFilterPage("page1");
+ }
+
+ protected String getTitle() {
+ return Messages.getString(TableViewActionGroup.class, "filterSortTitle");
+ }
+
+ protected boolean updateSelection(IStructuredSelection selection) {
+ return sortFilterApplies();
+ }
+ }
+
+ class PHPInsertAction extends Action {
+ public PHPInsertAction() {
+ setText(Messages.getString("tableview.phpinsert"));
+ }
+
+ public void run() {
+ PHPInsertRowPage page = new PHPInsertRowPage(""); //$NON-NLS-1$
+ SQLRowWizard wizard = new SQLRowWizard();
+ wizard.init(Messages.getString("TableView.PHPInsertRow"),
+ page, getSelectedSQLResults(), null); //$NON-NLS-1$
+ WizardDialog dialog =
+ new WizardDialog(
+ tableView.getSite().getShell(),
+ wizard);
+ dialog.open();
+ }
+ };
+
+ class PHPDeleteAction extends Action {
+ public PHPDeleteAction() {
+ setText(Messages.getString("tableview.phpdelete"));
+ }
+
+ public void run() {
+ PHPDeleteRowPage page = new PHPDeleteRowPage(""); //$NON-NLS-1$
+ SQLRowWizard wizard = new SQLRowWizard();
+ wizard.init(Messages.getString("TableView.PHPDeleteRow"),
+ page, getSelectedSQLResults(), getSelectedRow()); //$NON-NLS-1$
+ WizardDialog dialog =
+ new WizardDialog(
+ tableView.getSite().getShell(),
+ wizard);
+ dialog.open();
+ }
+ };
+ class PHPSelectAction extends Action {
+ public PHPSelectAction() {
+ setText(Messages.getString("tableview.phpselect"));
+ }
+
+ public void run() {
+ PHPSelectRowPage page = new PHPSelectRowPage(""); //$NON-NLS-1$
+ SQLRowWizard wizard = new SQLRowWizard();
+ wizard.init(Messages.getString("TableView.PHPSelectRow"),
+ page, getSelectedSQLResults(), getSelectedRow()); //$NON-NLS-1$
+ WizardDialog dialog =
+ new WizardDialog(
+ tableView.getSite().getShell(),
+ wizard);
+ dialog.open();
+ }
+ };
+ class PHPUpdateAction extends Action {
+ public PHPUpdateAction() {
+ setText(Messages.getString("tableview.phpupdate"));
+ }
+
+ public void run() {
+ PHPUpdateRowPage page = new PHPUpdateRowPage(""); //$NON-NLS-1$
+ SQLRowWizard wizard = new SQLRowWizard();
+ wizard.init(Messages.getString("TableView.PHPUpdateRow"),
+ page, getSelectedSQLResults(), getSelectedRow()); //$NON-NLS-1$
+ WizardDialog dialog =
+ new WizardDialog(
+ tableView.getSite().getShell(),
+ wizard);
+ dialog.open();
+ }
+ };
+ class InsertAction extends Action {
+ public InsertAction() {
+ setText(Messages.getString("tableview.insert"));
+ }
+
+ public void run() {
+ InsertRowPage page = new InsertRowPage(""); //$NON-NLS-1$
+ SQLRowWizard wizard = new SQLRowWizard();
+ wizard.init(Messages.getString("TableView.InsertRow"),
+ page, getSelectedSQLResults(), null); //$NON-NLS-1$
+ WizardDialog dialog =
+ new WizardDialog(
+ tableView.getSite().getShell(),
+ wizard);
+ dialog.open();
+ }
+ };
+
+ class DeleteAction extends Action {
+ public DeleteAction() {
+ setText(Messages.getString("tableview.delete"));
+ }
+
+ public void run() {
+ DeleteRowPage page = new DeleteRowPage(""); //$NON-NLS-1$
+ SQLRowWizard wizard = new SQLRowWizard();
+ wizard.init(Messages.getString("TableView.DeleteRow"),
+ page, getSelectedSQLResults(), getSelectedRow()); //$NON-NLS-1$
+ WizardDialog dialog =
+ new WizardDialog(
+ tableView.getSite().getShell(),
+ wizard);
+ dialog.open();
+ }
+ };
+
+ class UpdateAction extends Action {
+ public UpdateAction() {
+ setText(Messages.getString("tableview.update"));
+ }
+
+ public void run() {
+ UpdateRowPage page = new UpdateRowPage(""); //$NON-NLS-1$
+ SQLRowWizard wizard = new SQLRowWizard();
+ wizard.init(Messages.getString("TableView.UpdateRow"),
+ page, getSelectedSQLResults(), getSelectedRow()); //$NON-NLS-1$
+ WizardDialog dialog =
+ new WizardDialog(
+ tableView.getSite().getShell(),
+ wizard);
+ dialog.open();
+ }
+ };
+
+
+ private final TableView tableView;
+ private SelectionListenerAction closeAction;
+ private SelectionListenerAction closeAllAction;
+ private SelectionListenerAction nextAction;
+ private SelectionListenerAction previousAction;
+ private SelectionListenerAction refreshAction;
+ private SelectionListenerAction fullModeAction;
+ private SelectionListenerAction defaultEncodingAction;
+ private SelectionListenerAction utf8EncodingAction;
+ private SelectionListenerAction utf16EncodingAction;
+
+ private CopyAction copyAction;
+ private SelectAllAction selectAllAction;
+ private InsertAction insertRowAction;
+ private DeleteAction deleteRowAction;
+ private UpdateAction updateRowAction;
+
+ private PHPInsertAction phpInsertRowAction;
+ private PHPDeleteAction phpDeleteRowAction;
+ private PHPSelectAction phpSelectRowAction;
+ private PHPUpdateAction phpUpdateRowAction;
+
+ private SortFilterAction sortFilterAction;
+
+ private Vector extensionActions = new Vector();
+
+ public TableViewActionGroup(TableView tableView) {
+ this.tableView = tableView;
+
+ this.closeAction = new CloseResultSetAction(this.tableView, this.tableView);
+ this.closeAllAction = new CloseAllResultSetsAction(this.tableView, this.tableView);
+ this.defaultEncodingAction = new ChangeEncodingAction(this.tableView, this.tableView, "", "default");
+ this.utf8EncodingAction = new ChangeEncodingAction(this.tableView, this.tableView, "UTF-8", "utf8");
+ this.utf16EncodingAction = new ChangeEncodingAction(this.tableView, this.tableView, "UTF-16", "utf16");
+ this.nextAction = new NextPageAction(this.tableView, this.tableView);
+ this.previousAction = new PreviousPageAction(this.tableView, this.tableView);
+ this.refreshAction = new RefreshTableAction(this.tableView, this.tableView);
+ this.fullModeAction = new FullModeAction(this.tableView, this.tableView);
+
+ this.copyAction = new CopyAction(this.tableView);
+ this.selectAllAction = new SelectAllAction(this.tableView);
+
+ this.insertRowAction = new InsertAction();
+ this.deleteRowAction = new DeleteAction();
+ this.updateRowAction = new UpdateAction();
+
+ this.phpInsertRowAction = new PHPInsertAction();
+ this.phpDeleteRowAction = new PHPDeleteAction();
+ this.phpSelectRowAction = new PHPSelectAction();
+ this.phpUpdateRowAction = new PHPUpdateAction();
+
+ this.sortFilterAction = new SortFilterAction(this.tableView);
+
+ try {
+ ProcessServiceMembers.process(tableView, this.extensionActions);
+ } catch (WorkbenchException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void fillActionBars(IActionBars actionBars) {
+ IToolBarManager toolBar = actionBars.getToolBarManager();
+ toolBar.add(this.previousAction);
+ toolBar.add(this.nextAction);
+ toolBar.add(this.fullModeAction);
+ toolBar.add(this.closeAction);
+ toolBar.add(this.closeAllAction);
+ toolBar.add(this.refreshAction);
+ toolBar.add(this.sortFilterAction);
+
+ actionBars.setGlobalActionHandler(
+ IWorkbenchActionConstants.COPY, this.copyAction);
+ actionBars.setGlobalActionHandler(
+ IWorkbenchActionConstants.SELECT_ALL, this.selectAllAction);
+ }
+
+
+ public void fillContextMenu(IMenuManager menuManager) {
+ menuManager.add(this.defaultEncodingAction);
+ menuManager.add(this.utf8EncodingAction);
+ menuManager.add(this.utf16EncodingAction);
+ menuManager.add(new Separator());
+ menuManager.add(this.copyAction);
+ menuManager.add(this.selectAllAction);
+ menuManager.add(new Separator());
+
+ SQLResultSetResults resultSet = getSelectedSQLResults();
+
+ if (resultSet != null && !resultSet.isMetaData() && resultSet.getEntity() != null) {
+ menuManager.add(this.insertRowAction);
+ menuManager.add(this.updateRowAction);
+ menuManager.add(this.deleteRowAction);
+
+ menuManager.add(this.phpSelectRowAction);
+ menuManager.add(this.phpUpdateRowAction);
+ menuManager.add(this.phpDeleteRowAction);
+ menuManager.add(this.phpInsertRowAction);
+
+ menuManager.add(new Separator());
+ }
+
+ createExtensionMenu(menuManager);
+
+ createMarkerForActionsProvidedByOtherPlugins(menuManager);
+ }
+
+ /**
+ * @return
+ */
+ private SQLResultSetResults getSelectedSQLResults() {
+ return this.tableView.getSelectedResultSet();
+ }
+
+ protected SQLResultSetResults.Row getSelectedRow() {
+ IStructuredSelection selection = getTableRowSelection();
+
+ return selection == null || selection.isEmpty()
+ ? null
+ : (SQLResultSetResults.Row) selection.getFirstElement();
+ }
+ /**
+ * @return
+ */
+ private IStructuredSelection getTableRowSelection() {
+ ResultSetViewer viewer = this.tableView.getSelectedResultSetViewer();
+ IStructuredSelection selection = viewer == null ? null : (IStructuredSelection) viewer.getSelection();
+ return selection;
+ }
+
+ /**
+ * @param menuManager
+ */
+ private void createExtensionMenu(IMenuManager menuManager) {
+ MenuManager subMenuExtension = new MenuManager("Extensions");
+ for (int i = 0; i < this.extensionActions.size(); i++) {
+ ExtensionAction extensionAction = (ExtensionAction) this.extensionActions.get(i);
+ extensionAction.addRowData(createTableRow());
+ subMenuExtension.add(extensionAction);
+ }
+ if (this.extensionActions.size() > 0) {
+ menuManager.add(subMenuExtension);
+ }
+ }
+
+ /**
+ * This method supports an earlier API for other plug-ins to add functionality to
+ * QuantumDB.
+ *
+ * @return
+ */
+ private TableRow createTableRow() {
+
+ SQLResultSetResults results = this.tableView.getSelectedResultSet();
+ IStructuredSelection selection = getTableRowSelection();
+
+ if (results != null) {
+ StringMatrix data = new StringMatrix();
+ data.addMatrixHeader(results.getColumnNames());
+ if (selection != null && !selection.isEmpty()) {
+ int rowNumber = 0;
+ for (Iterator i = selection.iterator(); i.hasNext(); ) {
+ SQLResultSetResults.Row row = (SQLResultSetResults.Row) i.next();
+ for (int j = 0, length = results.getColumnCount(); j < length; j++) {
+ Object object = row.get(j);
+ data.addAt(results.getColumnName(j+1),
+ object == null ? null : object.toString(),
+ rowNumber++);
+ }
+ }
+ } else {
+ // Create dummy values in case nothing selected
+ for (int i = 0, length = results.getColumnCount(); i < length; i++) {
+ data.addAt(results.getColumnName(i+1), "", 0); //$NON-NLS-1$
+ }
+ }
+
+ return new TableRow(results.getEntity(), results.getBookmark(),
+ results.getEntity() == null
+ ? null
+ : results.getEntity().getQualifiedName(),
+ data);
+ } else {
+ return null;
+ }
+ }
+
+ private void createMarkerForActionsProvidedByOtherPlugins(IMenuManager menuManager) {
+ menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS + "-end")); //$NON-NLS-1$
+ menuManager.add(new Separator());
+ }
+}
package com.quantum.wizards;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
import com.quantum.ImageStore;
import com.quantum.Messages;
import com.quantum.QuantumPlugin;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
/**
* @author BC Holmes
+ * @author Sirkware
*/
public class AddDriverWizard extends Wizard {
+ public class LabelProviderImpl extends LabelProvider {
+
+ public Image getImage(Object element) {
+ return ImageStore.getImage(ImageStore.EXTERNAL_JAR);
+ }
+ }
+
+ public class ContentProviderImpl implements IStructuredContentProvider {
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof List) {
+ return ((List) inputElement).toArray();
+ } else if (inputElement instanceof Object[]){
+ return (Object[]) inputElement;
+ } else {
+ return null;
+ }
+ }
+ public void dispose() {
+ }
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+ }
+
public class PageImpl extends WizardPage {
private FileDialog fileDialog;
- private Text driverFileName;
private Text driverClassName;
private ComboViewer type;
+ private TableViewer driverFiles;
private DatabaseAdapter[] adapters = AdapterFactory.getInstance().getDriverList();
public PageImpl() {
setTitle(Messages.getString(getClass(), "title"));
setDescription(Messages.getString(getClass(), "description"));
-
parent.setLayout(new GridLayout());
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
composite.setLayout(layout);
layout.numColumns = 3;
- GridData fullHorizontal = new GridData(
- GridData.FILL_HORIZONTAL |
- GridData.VERTICAL_ALIGN_BEGINNING);
- composite.setLayoutData(fullHorizontal);
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
this.fileDialog = new FileDialog(composite.getShell(), SWT.OPEN);
Messages.getString("BookmarkWizard.AllFiles") });
Label label = new Label(composite, SWT.NULL);
- label.setText(Messages.getString(getClass(), "fileName"));
- this.driverFileName = new Text(composite, SWT.BORDER | SWT.SINGLE);
- fullHorizontal = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
- this.driverFileName.setLayoutData(fullHorizontal);
+ label.setText(Messages.getString(AddDriverWizard.class, "jars"));
+ GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+ gridData.horizontalSpan = 3;
+ label.setLayoutData(gridData);
- this.driverFileName.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent event) {
- updateButtons();
- }
-
- });
-
- Button button = new Button(composite, SWT.PUSH);
- button.setText(Messages.getString(getClass(), "browse"));
+ Table table = new Table(composite, SWT.BORDER);
+ gridData = new GridData(GridData.FILL_BOTH);
+ gridData.horizontalSpan = 2;
+ table.setLayoutData(gridData);
+ this.driverFiles = new TableViewer(table);
+ this.driverFiles.setLabelProvider(new LabelProviderImpl());
+ this.driverFiles.setContentProvider(new ContentProviderImpl());
+ this.driverFiles.setInput(AddDriverWizard.this.driverFileNames);
+
+ Composite buttonArea = new Composite(composite, SWT.NONE);
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.marginWidth = 0;
+ buttonArea.setLayout(gridLayout);
+ buttonArea.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+
+ Button addExternalJar = new Button(buttonArea, SWT.PUSH);
+ addExternalJar.setText(Messages.getString(AddDriverWizard.class, "addExternalJar"));
+ addExternalJar.setLayoutData(
+ new GridData(GridData.FILL_HORIZONTAL
+ | GridData.VERTICAL_ALIGN_BEGINNING));
- button.addSelectionListener(new SelectionAdapter() {
+ addExternalJar.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
PageImpl.this.fileDialog.setFilterPath(QuantumPlugin.getDefault()
.getPreferenceStore().getString(
"quantum.dialogs.bookmarkwizard.path"));
String filename = PageImpl.this.fileDialog.open();
if (filename != null) {
- PageImpl.this.driverFileName.setText(filename);
+ driverFileNames.add(filename);
+ PageImpl.this.driverFiles.refresh();
QuantumPlugin.getDefault().getPreferenceStore().setValue(
"quantum.dialogs.bookmarkwizard.path", filename);
- AddDriverWizard.this.setDriverFileName(filename);
updateButtons();
}
}
});
-
+
+ final Button removeJar = new Button(buttonArea, SWT.PUSH);
+ removeJar.setText(Messages.getString(AddDriverWizard.class, "removeJar"));
+ removeJar.setLayoutData(
+ new GridData(GridData.HORIZONTAL_ALIGN_FILL
+ | GridData.VERTICAL_ALIGN_BEGINNING));
+ removeJar.setEnabled(false);
+
+ this.driverFiles.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ removeJar.setEnabled(!event.getSelection().isEmpty());
+ }
+ });
+
+ removeJar.addSelectionListener(new SelectionAdapter(){
+ public void widgetSelected(SelectionEvent event) {
+ IStructuredSelection selection =
+ (IStructuredSelection) PageImpl.this.driverFiles.getSelection();
+ for (Iterator i = selection.iterator(); i.hasNext();) {
+ driverFileNames.remove(i.next());
+ }
+ PageImpl.this.driverFiles.refresh();
+ }
+ });
+
label = new Label(composite, SWT.NULL);
- label.setText(Messages.getString(getClass(), "driverClassName"));
+ label.setText(Messages.getString(AddDriverWizard.class, "driverClassName"));
this.driverClassName = new Text(composite, SWT.BORDER | SWT.SINGLE);
- fullHorizontal = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
+ GridData fullHorizontal = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
this.driverClassName.setLayoutData(fullHorizontal);
this.driverClassName.addModifyListener(new ModifyListener() {
AddDriverWizard.this.setDriverClassName(((Text) event.getSource()).getText());
updateButtons();
}
-
});
- button = new Button(composite, SWT.PUSH);
- button.setText(Messages.getString(getClass(), "browse"));
+
+
+ Button browse = new Button(composite, SWT.PUSH);
+ browse.setText(Messages.getString(AddDriverWizard.class, "browse"));
+ browse.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
- button.addSelectionListener(new SelectionAdapter() {
+ browse.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
SimpleSelectionDialog dialog = new SimpleSelectionDialog(
getShell(), "Select a Driver", JarUtil.getAllDriverNames(
- getDriverFile()), ImageStore.getImage(ImageStore.CLASS));
+ getDriverFileNames()), ImageStore.getImage(ImageStore.CLASS));
if (dialog.open() == SimpleSelectionDialog.OK) {
IStructuredSelection selection = dialog.getSelection();
if (!selection.isEmpty()) {
AddDriverWizard.this.setDriverClassName(className);
updateButtons();
}
-
-
}
}
});
- label = new Label(composite, SWT.NULL);
+\r label = new Label(composite, SWT.NULL);
label.setText(Messages.getString("BookmarkWizard.TypeAst")); //$NON-NLS-1$
this.type = new ComboViewer(composite);
- this.type.setContentProvider(new IStructuredContentProvider() {
- public void dispose() {
- }
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
- public Object[] getElements(Object inputElement) {
- return PageImpl.this.adapters;
- }
- });
+ this.type.setContentProvider(new ContentProviderImpl());
this.type.setLabelProvider(new ILabelProvider() {
public Image getImage(Object element) {
}
});
- type.setInput(this);
+ type.setInput(this.adapters);
fullHorizontal = new GridData();
fullHorizontal.horizontalAlignment = GridData.FILL;
type.getControl().setLayoutData(fullHorizontal);
setControl(composite);
}
protected void updateButtons() {
- Class driver = JarUtil.loadDriverClass(getDriverFile(), getDriverClassName());
+ Class driver = JarUtil.loadDriverClass(
+ getDriverFileNames(),
+ getDriverClassName());
setPageComplete(driver != null);
String adapterType = AdapterFactory.getInstance().getAdapterType(getDriverClassName());
AdapterFactory.getInstance().getAdapter(adapterType)));
}
}
- protected String getDriverClassName() {
- return this.driverClassName == null ? null : this.driverClassName.getText();
- }
- protected String getDriverFile() {
- return this.driverFileName == null ? null : this.driverFileName.getText();
- }
-
protected String getDriverType() {
DatabaseAdapter driverInfo = (DatabaseAdapter)
((IStructuredSelection) this.type.getSelection()).getFirstElement();
private PageImpl page;
private String driverClassName;
- private String driverFileName;
private String driverType;
+ private List driverFileNames = Collections.synchronizedList(new ArrayList());
public void addPages() {
public boolean performFinish() {
JDBCDriver driver = new JDBCDriver(
getDriverClassName(),
- getDriverFileName(),
+ getDriverFileNames(),
this.page.getDriverType());
BookmarkCollection.getInstance().addDriver(driver);
return true;
public void setDriverType(String driverType) {
this.driverType = driverType;
}
- /**
- * @return Returns the driverFileName.
- */
- public String getDriverFileName() {
- return this.driverFileName;
- }
- /**
- * @param driverFileName The driverFileName to set.
- */
- public void setDriverFileName(String driverFileName) {
- this.driverFileName = driverFileName;
+
+ public String[] getDriverFileNames() {
+ return (String[]) this.driverFileNames.toArray(new String[this.driverFileNames.size()]);
}
}
\ No newline at end of file
import com.quantum.adapters.DatabaseAdapter;
import com.quantum.model.Bookmark;
import com.quantum.model.Column;
-import com.quantum.model.ConnectionException;
import com.quantum.model.Entity;
import com.quantum.model.NotConnectedException;
+import com.quantum.sql.MultiSQLServer;
+import com.quantum.sql.SQLResultSetResults;
import com.quantum.sql.SQLResults;
-import com.quantum.sql.TableRow;
-import com.quantum.view.ViewHelper;
-import com.quantum.view.tableview.TableAdapter;
+import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.util.connection.ConnectionUtil;
import org.eclipse.jface.wizard.WizardPage;
*/
public abstract class BaseSQLPage extends WizardPage implements SQLPage {
- protected TableRow row;
- protected TableAdapter adapter;
+ protected SQLResultSetResults.Row row;
+ protected SQLResultSetResults results;
+ private ConnectionUtil connectionUtil = new ConnectionUtil();
public BaseSQLPage(String pageName) {
super(pageName);
}
public boolean performFinish() {
try {
- Bookmark bookmark = this.adapter.getBookmark();
+ Bookmark bookmark = this.results.getBookmark();
bookmark.addQuery(getQueryText());
- SQLResults sqlResults = ViewHelper.tryGetResults(getShell(),
- bookmark.getConnection(), getQueryText());
- return sqlResults.isError() ? false : true;
- } catch (ConnectionException e) {
- e.printStackTrace();
+ SQLResults sqlResults = MultiSQLServer.getInstance().execute(bookmark,
+ this.connectionUtil.getConnection(bookmark, getShell()), getQueryText());
+ return sqlResults == null ? false : true;
+ } catch (SQLException e) {
+ ExceptionDisplayDialog.openError(getShell(), null, null, e);
return false;
}
}
return null;
}
}
- public void init(TableRow row, TableAdapter adapter) {
- this.row = row;
- this.adapter = adapter;
+ public void init(SQLResultSetResults results, SQLResultSetResults.Row row) {
+ this.results = results;
+ this.row = row;
}
}
--- /dev/null
+package com.quantum.wizards;
+
+import com.quantum.Messages;
+import com.quantum.model.JDBCDriver;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+
+/**
+ * @author BC
+ */
+public class BasicOnePartURLSetupControl extends URLSetupControl {
+
+ private final String propertyName;
+
+ public BasicOnePartURLSetupControl(Composite parent, JDBCDriver driver, String propertyName) {
+ super(parent, driver);
+ this.propertyName = propertyName;
+ }
+
+ protected void createPart(Composite parent) {
+
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ parent.setLayout(layout);
+
+ Label label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString(URLSetupControl.class, this.propertyName));
+
+ Text databaseNameText = new Text(parent, SWT.BORDER | SWT.SINGLE);
+ databaseNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ databaseNameText.setText(getProperty(this.propertyName));
+ label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString(URLSetupControl.class, "url"));
+
+ final Text urlText = new Text(parent, SWT.BORDER | SWT.SINGLE);
+ urlText.setEditable(false);
+ urlText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ urlText.setText(getConnectionURL());
+
+ databaseNameText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent event) {
+ putProperty(
+ BasicOnePartURLSetupControl.this.propertyName,
+ ((Text) event.getSource()).getText());
+ urlText.setText(getConnectionURL());
+ }
+ });
+ }
+}
--- /dev/null
+package com.quantum.wizards;
+
+import com.quantum.Messages;
+import com.quantum.model.JDBCDriver;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+
+/**
+ * @author BC
+ */
+public class BasicThreePartURLSetupControl extends URLSetupControl {
+
+ public BasicThreePartURLSetupControl(Composite parent, JDBCDriver driver) {
+ super(parent, driver);
+ }
+
+ protected void createPart(Composite parent) {
+
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ parent.setLayout(layout);
+
+ Label label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString(URLSetupControl.class, "hostname"));
+
+ Text hostNameText = new Text(parent, SWT.BORDER | SWT.SINGLE);
+ hostNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ hostNameText.setText(getProperty("hostname"));
+
+ label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString(URLSetupControl.class, "port"));
+
+ Text portText = new Text(parent, SWT.BORDER | SWT.SINGLE);
+ portText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ portText.setText(getProperty("port"));
+
+ label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString(URLSetupControl.class, "dbname"));
+
+ Text databaseNameText = new Text(parent, SWT.BORDER | SWT.SINGLE);
+ databaseNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ databaseNameText.setText(getProperty("dbname"));
+ label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString(URLSetupControl.class, "url"));
+
+ final Text urlText = new Text(parent, SWT.BORDER | SWT.SINGLE);
+ urlText.setEditable(false);
+ urlText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ urlText.setText(getConnectionURL());
+
+ hostNameText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent event) {
+ putProperty("hostname", ((Text) event.getSource()).getText());
+ urlText.setText(getConnectionURL());
+ }
+ });
+
+ portText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent event) {
+ putProperty("port", ((Text) event.getSource()).getText());
+ urlText.setText(getConnectionURL());
+ }
+ });
+
+ databaseNameText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent event) {
+ putProperty("dbname", ((Text) event.getSource()).getText());
+ urlText.setText(getConnectionURL());
+ }
+ });
+ }
+}
package com.quantum.wizards;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import com.quantum.Messages;
+import com.quantum.model.JDBCDriver;
+
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
-import com.quantum.Messages;
-import com.quantum.model.JDBCDriver;
-
class BookmarkConnectionWizardPage extends PropertyChangeWizardPage {
private String connectionURL;
private boolean prompt;
+ private Label jdbcLabel;
+ private Text jdbcUrl;
+ private URLSetupControl urlSetupControl;
+ private Composite container;
+
+ private PropertyChangeListener listener = new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent event) {
+ if ("connectionURL".equals(event.getPropertyName())) {
+ BookmarkConnectionWizardPage.this.setConnectionURL((String) event.getNewValue());
+ BookmarkConnectionWizardPage.this.updateButtonState();
+ }
+ }
+ };
+
/**
* Constructor for BookmarkPage.
* @param pageName
Composite container = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
container.setLayout(layout);
- layout.numColumns = 3;
+ layout.numColumns = 2;
layout.verticalSpacing = 9;
Label label = new Label(container, SWT.NULL);
GridData fullHorizontal = new GridData(GridData.FILL_HORIZONTAL);
- fullHorizontal.horizontalSpan = 2;
username.setLayoutData(fullHorizontal);
username.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
final Text password = new Text(container, SWT.BORDER | SWT.SINGLE);
password.setEchoChar('*');
fullHorizontal = new GridData(GridData.FILL_HORIZONTAL);
- fullHorizontal.horizontalSpan = 2;
password.setLayoutData(fullHorizontal);
password.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
Button prompt = new Button(container, SWT.CHECK);
prompt.setText(Messages.getString(getClass(), "prompt")); //$NON-NLS-1$
fullHorizontal = new GridData(GridData.FILL_HORIZONTAL);
- fullHorizontal.horizontalSpan = 3;
+ fullHorizontal.horizontalSpan = 2;
prompt.setLayoutData(fullHorizontal);
- label = new Label(container, SWT.NULL);
- label.setText(Messages.getString(getClass(), "url")); //$NON-NLS-1$
-
- Text connect = new Text(container, SWT.BORDER | SWT.SINGLE);
- fullHorizontal = new GridData(GridData.FILL_HORIZONTAL);
- fullHorizontal.horizontalSpan = 2;
- connect.setLayoutData(fullHorizontal);
- connect.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent event) {
- String connectionURL = ((Text) event.getSource()).getText();
- setConnectionURL(connectionURL);
- updateButtonState();
- }
- });
+ createStandardJDBCWidgets(container);
prompt.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
Button prompt = ((Button) event.getSource());
}
});
+ this.container = container;
setControl(container);
}
/**
+ * @param container
+ */
+ private void createStandardJDBCWidgets(Composite container) {
+ setConnectionURL("");
+
+ this.jdbcLabel = new Label(container, SWT.NULL);
+ this.jdbcLabel.setText(Messages.getString(getClass(), "url")); //$NON-NLS-1$
+
+ this.jdbcUrl = new Text(container, SWT.BORDER | SWT.SINGLE);
+ this.jdbcUrl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ this.jdbcUrl.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent event) {
+ setConnectionURL(((Text) event.getSource()).getText());
+ updateButtonState();
+ }
+ });
+
+ updateButtonState();
+ }
+ /**
* @return Returns the driver.
*/
public JDBCDriver getDriver() {
* @param driver The driver to set.
*/
public void setDriver(JDBCDriver driver) {
+ String oldDriverClassName = this.driver == null ? null : this.driver.getClassName();
this.driver = driver;
+
+ if (oldDriverClassName == null
+ || !oldDriverClassName.equals(this.driver.getClassName())) {
+ rebuildJDBCControls(this.driver);
+ }
+ }
+ /**
+ *
+ */
+ private void rebuildJDBCControls(JDBCDriver driver) {
+ Point windowSize = getShell().getSize();
+ Point oldSize = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT);
+
+ if (URLSetupControlFactory.hasControl(driver)) {
+ disposeOfCurrentJDBCControls();
+
+ this.urlSetupControl = URLSetupControlFactory.create(driver, this.container);
+ GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
+ data.horizontalSpan = 2;
+ this.urlSetupControl.setLayoutData(data);
+
+ this.urlSetupControl.addPropertyChangeListener(this.listener);
+
+ setConnectionURL(this.urlSetupControl.getConnectionURL());
+ updateButtonState();
+
+ resizeWindow(windowSize, oldSize);
+ this.container.layout();
+
+ } else if (this.jdbcLabel == null || this.jdbcUrl == null) {
+
+ disposeOfCurrentJDBCControls();
+ createStandardJDBCWidgets(this.container);
+
+ resizeWindow(windowSize, oldSize);
+
+ this.container.layout();
+ }
+ this.container.setVisible(true);
+ this.container.redraw();
+ }
+
+ /**
+ * @param windowSize
+ * @param oldSize
+ */
+ private void resizeWindow(Point windowSize, Point oldSize) {
+ Point newSize = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT);
+ if (newSize.y > windowSize.y) {
+ getShell().setSize(
+ new Point(windowSize.x, windowSize.y + (newSize.y - oldSize.y)));
+ }
+ }
+ private void disposeOfCurrentJDBCControls() {
+ if (this.jdbcUrl != null) {
+ this.jdbcUrl.dispose();
+ this.jdbcUrl = null;
+ }
+ if (this.jdbcLabel != null) {
+ this.jdbcLabel.dispose();
+ this.jdbcLabel = null;
+ }
+ if (this.urlSetupControl != null) {
+ this.urlSetupControl.removePropertyChangeListener(this.listener);
+ this.urlSetupControl.dispose();
+ this.urlSetupControl = null;
+ }
}
/**
*
public void createControl(Composite parent) {
System.out.println("page create control"); //$NON-NLS-1$
- Composite container = new Composite(parent, SWT.NULL);
+ Composite container = new Composite(parent, SWT.V_SCROLL);
GridLayout layout = new GridLayout();
container.setLayout(layout);
layout.numColumns = 3;
- if (row == null) {
- System.out.println("Row is null"); //$NON-NLS-1$
- }
- if (row.getColumnNames() == null) {
- System.out.println("Columns are null"); //$NON-NLS-1$
- }
- if (row.getTableData() == null) {
- System.out.println("Data is null"); //$NON-NLS-1$
- }
- Entity entity = row.getEntity();
- columnNames = row.getColumnNames();
- String[] data = row.getTableData();
- for (int i = 0; i < row.getColumnCount(); i++) {
- System.out.println("data = " + i + "=" + data[i]); //$NON-NLS-1$ //$NON-NLS-2$
- System.out.println("column = " + i + "=" + columnNames[i]); //$NON-NLS-1$ //$NON-NLS-2$
- }
- values = new Text[row.getColumnCount()];
- whereValues = new Button[row.getColumnCount()];
+ Entity entity = this.results.getEntity();
+ columnNames = this.results.getColumnNames();
+
+ values = new Text[columnNames.length];
+ whereValues = new Button[columnNames.length];
new Label(container, SWT.NULL).setText(Messages.getString("DeleteRowPage.ColumnName")); //$NON-NLS-1$
new Label(container, SWT.NULL).setText(Messages.getString("DeleteRowPage.Value")); //$NON-NLS-1$
new Label(container, SWT.NULL).setText(Messages.getString("DeleteRowPage.IncludeIn")); //$NON-NLS-1$
- for (int i = 0; i < row.getColumnCount(); i++) {
+ for (int i = 0; i < columnNames.length; i++) {
Label label = new Label(container, SWT.NULL);
label.setText(columnNames[i]);
values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
- GridData fullHorizontal = new GridData();
- fullHorizontal.horizontalAlignment = GridData.FILL;
- values[i].setLayoutData(fullHorizontal);
- values[i].setText(data[i]);
-
+ Object object = this.row == null ? null : this.row.get(i+1);
+ values[i].setText(object == null ? "" : object.toString());
+ GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+ gridData.widthHint = 150;
+ values[i].setLayoutData(gridData);
values[i].addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
+ public void modifyText(ModifyEvent event) {
updateQuery();
- }
+ }
});
whereValues[i] = new Button(container, SWT.CHECK);
public void updateQuery() {
System.out.println(Messages.getString("DeleteRowPage.UpdatingQuery")); //$NON-NLS-1$
StringBuffer whereClause = new StringBuffer();
- Bookmark bookmark = row.getBookmark();
- Entity entity = row.getEntity();
+ Bookmark bookmark = this.results.getBookmark();
+ Entity entity = this.results.getEntity();
DatabaseAdapter adapter = bookmark.getAdapter();
int numSelected = 0;
whereClause.append(")"); //$NON-NLS-1$
}
}
- String query = "DELETE FROM " + row.getTable(); //$NON-NLS-1$
+ String query = "DELETE FROM " + this.results.getEntity().getQuotedTableName(); //$NON-NLS-1$
if (numSelected > 0) {
query += " WHERE " + whereClause.toString(); //$NON-NLS-1$
}
--- /dev/null
+package com.quantum.wizards;
+
+import com.quantum.Messages;
+import com.quantum.model.JDBCDriver;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+
+/**
+ * @author BC
+ */
+public class InformixURLSetupControl extends URLSetupControl {
+
+ public InformixURLSetupControl(Composite parent, JDBCDriver driver) {
+ super(parent, driver);
+ }
+
+ protected void createPart(Composite parent) {
+
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ parent.setLayout(layout);
+
+ Label label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString(URLSetupControl.class, "hostname"));
+
+ Text hostNameText = new Text(parent, SWT.BORDER | SWT.SINGLE);
+ hostNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ hostNameText.setText(getProperty("hostname"));
+
+ label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString(URLSetupControl.class, "port"));
+
+ Text portText = new Text(parent, SWT.BORDER | SWT.SINGLE);
+ portText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ portText.setText(getProperty("port"));
+
+ label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString(URLSetupControl.class, "dbname"));
+
+ Text databaseNameText = new Text(parent, SWT.BORDER | SWT.SINGLE);
+ databaseNameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ databaseNameText.setText(getProperty("dbname"));
+
+ label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString(InformixURLSetupControl.class, "informixserver"));
+
+ Text serverText = new Text(parent, SWT.BORDER | SWT.SINGLE);
+ serverText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ serverText.setText(getProperty("informixserver"));
+
+ label = new Label(parent, SWT.NONE);
+ label.setText(Messages.getString(URLSetupControl.class, "url"));
+
+ final Text urlText = new Text(parent, SWT.BORDER | SWT.SINGLE);
+ urlText.setEditable(false);
+ urlText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ urlText.setText(getConnectionURL());
+
+ hostNameText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent event) {
+ putProperty("hostname", ((Text) event.getSource()).getText());
+ urlText.setText(getConnectionURL());
+ }
+ });
+
+ portText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent event) {
+ putProperty("port", ((Text) event.getSource()).getText());
+ urlText.setText(getConnectionURL());
+ }
+ });
+
+ databaseNameText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent event) {
+ putProperty("dbname", ((Text) event.getSource()).getText());
+ urlText.setText(getConnectionURL());
+ }
+ });
+
+ serverText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent event) {
+ putProperty("informixserver", ((Text) event.getSource()).getText());
+ urlText.setText(getConnectionURL());
+ }
+ });
+ }
+}
public void createControl(Composite parent) {
System.out.println("page create control"); //$NON-NLS-1$
- Composite container = new Composite(parent, SWT.NULL);
+ Composite container = new Composite(parent, SWT.V_SCROLL);
GridLayout layout = new GridLayout();
container.setLayout(layout);
layout.numColumns = 2;
- if (row == null) {
- System.out.println("Row is null"); //$NON-NLS-1$
- }
- if (row.getColumnNames() == null) {
- System.out.println("Columns are null"); //$NON-NLS-1$
- }
- if (row.getTableData() == null) {
- System.out.println("Data is null"); //$NON-NLS-1$
- }
- columnNames = row.getColumnNames();
- String[] data = row.getTableData();
- for (int i = 0; i < row.getColumnCount(); i++) {
- System.out.println("data = " + i + "=" + data[i]); //$NON-NLS-1$ //$NON-NLS-2$
- System.out.println("column = " + i + "=" + columnNames[i]); //$NON-NLS-1$ //$NON-NLS-2$
- }
- values = new Text[row.getColumnCount()];
+ columnNames = this.results.getColumnNames();
+ values = new Text[columnNames.length];
new Label(container, SWT.NULL).setText(Messages.getString("InsertRowPage.ColumnName")); //$NON-NLS-1$
new Label(container, SWT.NULL).setText(Messages.getString("InsertRowPage.Value")); //$NON-NLS-1$
- for (int i = 0; i < row.getColumnCount(); i++) {
+ for (int i = 0; i < columnNames.length; i++) {
Label label = new Label(container, SWT.NULL);
label.setText(columnNames[i]);
values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
- GridData fullHorizontal = new GridData();
- fullHorizontal.horizontalAlignment = GridData.FILL;
- values[i].setLayoutData(fullHorizontal);
+ GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+ gridData.widthHint = 150;
+ values[i].setLayoutData(gridData);
//values[i].setText(data[i]);
values[i].addModifyListener(new ModifyListener() {
System.out.println("Updating query"); //$NON-NLS-1$
StringBuffer valuesClause = new StringBuffer();
StringBuffer namesClause = new StringBuffer();
- Bookmark bookmark = row.getBookmark();
- Entity entity = row.getEntity();
+ Bookmark bookmark = this.results.getBookmark();
+ Entity entity = this.results.getEntity();
DatabaseAdapter adapter = bookmark.getAdapter();
numColumns = 0;
}
}
- String query = "INSERT INTO " + row.getTable(); //$NON-NLS-1$
+ String query = "INSERT INTO " + this.results.getEntity().getQuotedTableName(); //$NON-NLS-1$
if (numColumns > 0) {
query += " (" + namesClause + ")";
query += " VALUES " + "(" + valuesClause; //$NON-NLS-1$
protected String getQueryText() {
return this.query.getText();
}
-
}
\ No newline at end of file
/**
* @param pageName
*/
- protected JDBCDriverSelectionWizardPage(String pageName) {
+ public JDBCDriverSelectionWizardPage(String pageName) {
super(pageName);
setTitle(Messages.getString(getClass(), "title"));
+++ /dev/null
-package com.quantum.wizards;
-
-import java.text.MessageFormat;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-
-import com.quantum.QuantumPlugin;
-import com.quantum.sql.TableRow;
-//import com.quantum.view.PHPSourceConsole;
-import com.quantum.view.tableview.TableAdapter;
-
-public class PHPDeleteRowPage extends WizardPage implements SQLPage {
- TableRow row;
- String[] columnNames;
- Text[] values;
- Button[] whereValues;
- Label query;
- IPreferenceStore fStore;
- private final static boolean DEBUG = false;
-
- public PHPDeleteRowPage(String pageName) {
- super(pageName);
- }
-
- public void init(TableRow row, TableAdapter adapter) {
- this.row = row;
- }
-
- public void createControl(Composite parent) {
- System.out.println("page create control");
- fStore = QuantumPlugin.getDefault().getPreferenceStore();
- Composite container = new Composite(parent, SWT.NULL);
- GridLayout layout = new GridLayout();
- container.setLayout(layout);
- int layoutColumns = 3;
- layout.numColumns = layoutColumns;
-
- if (DEBUG) {
- if (row == null) {
- System.out.println("Row is null");
- }
- if (row.getColumnNames() == null) {
- System.out.println("Columns are null");
- }
- if (row.getTableData() == null) {
- System.out.println("Data is null");
- }
- }
- columnNames = row.getColumnNames();
- String[] data = row.getTableData();
- if (DEBUG) {
- for (int i = 0; i < row.getColumnCount(); i++) {
- System.out.println("data = " + i + "=" + data[i]);
- System.out.println("column = " + i + "=" + columnNames[i]);
- }
- }
- values = new Text[row.getColumnCount()];
- whereValues = new Button[row.getColumnCount()];
- Label temp = new Label(container, SWT.NULL);
- temp.setText("Column Name");
- temp = new Label(container, SWT.NULL);
- temp.setText("Value");
- temp = new Label(container, SWT.NULL);
- temp.setText("Include in?");
- for (int i = 0; i < row.getColumnCount(); i++) {
- Label label = new Label(container, SWT.NULL);
- label.setText(columnNames[i]);
- values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
- GridData fullHorizontal = new GridData();
- fullHorizontal.horizontalAlignment = GridData.FILL;
- values[i].setLayoutData(fullHorizontal);
-
- if (data[i] == null || data[i].equals("")) {
- values[i].setText('$' + columnNames[i]);
- } else {
- values[i].setText(data[i]);
- }
-
- values[i].addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- updateQuery();
- }
- });
-
- whereValues[i] = new Button(container, SWT.CHECK);
- whereValues[i].setText("Where clause");
- whereValues[i].addSelectionListener(new SelectionListener() {
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- public void widgetSelected(SelectionEvent e) {
- updateQuery();
- }
- });
- }
- query = new Label(container, SWT.WRAP);
- GridData gridData = new GridData();
- gridData.horizontalSpan = layoutColumns;
- gridData.horizontalAlignment = GridData.FILL;
- gridData.verticalAlignment = GridData.FILL;
- gridData.grabExcessHorizontalSpace = true;
- gridData.grabExcessVerticalSpace = true;
- query.setLayoutData(gridData);
-
- setControl(container);
- updateQuery();
-
- setPageComplete(true);
- }
- public void updateQuery() {
- if (DEBUG) {
- System.out.println("Updating delete query");
- }
- StringBuffer whereClause = new StringBuffer();
- int numSelected = 0;
- boolean first = false;
- for (int i = 0; i < columnNames.length; i++) {
- if (whereValues[i].getSelection()) {
- numSelected++;
- if (first) {
- whereClause.append(", ");
- }
-
- whereClause.append(columnNames[i]);
- whereClause.append(" = ");
- whereClause.append("'" + values[i].getText() + "'");
-
- first = true;
- }
- }
- // if (whereClause.length() > 1) {
- // whereClause.deleteCharAt(whereClause.length() - 1);
- // whereClause.deleteCharAt(whereClause.length() - 1);
- // }
-
- String[] arguments = { row.getTable(), whereClause.toString()};
- MessageFormat form = new MessageFormat(fStore.getString("phpeclipse.sql.delete.template"));
-
- String query = form.format(arguments);
-
- // String query = "$results = mysql_query(\"DELETE FROM " + row.getTable();
- // if (numSelected > 0) {
- // query += " WHERE " + whereClause.toString() + "\");";
- // } else {
- // query += "\");";
- // }
-
- if (numSelected > 0) {
- setMessage("");
- } else {
- setMessage("Warning: no \"where clause\" columns selected, all rows will be deleted");
- }
-
- this.getControl().pack();
- this.query.setText(query);
- }
- public boolean performFinish() {
-// PHPSourceConsole console = PHPSourceConsole.getInstance();
-// console.clear();
-// console.print(query.getText());
- QuantumPlugin.getDefault().getSysClip().setContents(
- new Object[] { query.getText() },
- new Transfer[] { TextTransfer.getInstance()});
- return true;
- }
-}
\ No newline at end of file
+++ /dev/null
-package com.quantum.wizards;
-
-import java.text.MessageFormat;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-
-import com.quantum.QuantumPlugin;
-import com.quantum.sql.TableRow;
-//import com.quantum.view.PHPSourceConsole;
-import com.quantum.view.tableview.TableAdapter;
-
-public class PHPInsertRowPage extends WizardPage implements SQLPage {
- TableRow row;
- String[] columnNames;
- Text[] values;
- Label query;
- private final static boolean DEBUG = false;
- private IPreferenceStore fStore;
-
- public PHPInsertRowPage(String pageName) {
- super(pageName);
- }
-
- public void init(TableRow row, TableAdapter adapter) {
- this.row = row;
- }
-
- public void createControl(Composite parent) {
- if (DEBUG) {
- System.out.println("page create control");
- }
- fStore = QuantumPlugin.getDefault().getPreferenceStore();
- Composite container = new Composite(parent, SWT.NULL);
- GridLayout layout = new GridLayout();
- container.setLayout(layout);
- int layoutColumns = 2;
- layout.numColumns = layoutColumns;
-
- if (DEBUG) {
- if (row == null) {
- System.out.println("Row is null");
- }
- if (row.getColumnNames() == null) {
- System.out.println("Columns are null");
- }
- if (row.getTableData() == null) {
- System.out.println("Data is null");
- }
- }
-
- columnNames = row.getColumnNames();
- String[] data = row.getTableData();
- if (DEBUG) {
- for (int i = 0; i < row.getColumnCount(); i++) {
- System.out.println("data = " + i + "=" + data[i]);
- System.out.println("column = " + i + "=" + columnNames[i]);
- }
- }
- values = new Text[row.getColumnCount()];
- Label temp = new Label(container, SWT.NULL);
- temp.setText("Column Name");
- temp = new Label(container, SWT.NULL);
- temp.setText("Value");
- for (int i = 0; i < row.getColumnCount(); i++) {
- Label label = new Label(container, SWT.NULL);
- label.setText(columnNames[i]);
- values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
- GridData fullHorizontal = new GridData();
- fullHorizontal.horizontalAlignment = GridData.FILL;
- values[i].setLayoutData(fullHorizontal);
-
- //values[i].setText(data[i]);
- values[i].addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- updateQuery();
- }
- });
- }
- query = new Label(container, SWT.WRAP);
- GridData gridData = new GridData();
- gridData.horizontalSpan = layoutColumns;
- gridData.horizontalAlignment = GridData.FILL;
- gridData.verticalAlignment = GridData.FILL;
- gridData.grabExcessHorizontalSpace = true;
- gridData.grabExcessVerticalSpace = true;
- query.setLayoutData(gridData);
-
- setControl(container);
- updateQuery();
-
- setPageComplete(true);
- }
- public void updateQuery() {
- if (DEBUG) {
- System.out.println("Updating insert query");
- }
- StringBuffer fieldClause = new StringBuffer();
-
- StringBuffer valuesClause = new StringBuffer();
- String text;
- boolean first = false;
- for (int i = 0; i < columnNames.length; i++) {
- text = values[i].getText();
- if (!text.equals("")) {
- if (first) {
- valuesClause.append(", ");
- fieldClause.append(", ");
- }
- valuesClause.append("'" + values[i].getText() + "'");
- fieldClause.append(columnNames[i]);
- first = true;
- }
- }
- // if (valuesClause.length() > 1) {
- // valuesClause.deleteCharAt(valuesClause.length() - 1);
- // valuesClause.deleteCharAt(valuesClause.length() - 1);
- // }
- String[] arguments = { row.getTable(), fieldClause.toString(), valuesClause.toString()};
- MessageFormat form = new MessageFormat(fStore.getString("phpeclipse.sql.insert.template"));
-
- String query = form.format(arguments);
-
- // String query = "$results = mysql_query(\"INSERT INTO " + row.getTable() + " (";
- // query += fieldClause.toString() + ") ";
- // query += " VALUES (" + valuesClause.toString();
- // query += ")\");";
- this.query.setText(query);
- }
- public boolean performFinish() {
-// PHPSourceConsole console = PHPSourceConsole.getInstance();
-// console.clear();
-// console.print(query.getText());
- QuantumPlugin.getDefault().getSysClip().setContents(
- new Object[] { query.getText() },
- new Transfer[] { TextTransfer.getInstance()});
- return true;
- }
-}
\ No newline at end of file
+++ /dev/null
-package com.quantum.wizards;
-
-import java.text.MessageFormat;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-
-import com.quantum.QuantumPlugin;
-import com.quantum.sql.TableRow;
-//import com.quantum.view.PHPSourceConsole;
-import com.quantum.view.tableview.TableAdapter;
-
-public class PHPSelectRowPage extends WizardPage implements SQLPage {
- TableRow row;
- String[] columnNames;
- Text[] whereValues;
- // Text[] newValues;
- Button[] primaryKeys;
- Button[] setValues;
- Label query;
- IPreferenceStore fStore;
- private final static boolean DEBUG = false;
-
- public PHPSelectRowPage(String pageName) {
- super(pageName);
- }
-
- public void init(TableRow row, TableAdapter adapter) {
- this.row = row;
- }
-
- public void createControl(Composite parent) {
- if (DEBUG) {
- System.out.println("page create control");
- }
- Composite container = new Composite(parent, SWT.NULL);
- fStore = QuantumPlugin.getDefault().getPreferenceStore();
-
- GridLayout layout = new GridLayout();
- container.setLayout(layout);
- int layoutColumns = 4;
- layout.numColumns = layoutColumns;
-
- if (DEBUG) {
- if (row == null) {
- System.out.println("Row is null");
- }
- if (row.getColumnNames() == null) {
- System.out.println("Columns are null");
- }
- if (row.getTableData() == null) {
- System.out.println("Data is null");
- }
- }
-
- columnNames = row.getColumnNames();
- String[] data = row.getTableData();
-
- for (int i = 0; i < row.getColumnCount(); i++) {
- System.out.println("data = " + i + "=" + data[i]);
- System.out.println("column = " + i + "=" + columnNames[i]);
- }
-
- whereValues = new Text[row.getColumnCount()];
- // newValues = new Text[row.getColumnCount()];
- primaryKeys = new Button[row.getColumnCount()];
- setValues = new Button[row.getColumnCount()];
- Label temp = new Label(container, SWT.NULL);
- temp.setText("Column Name");
- temp = new Label(container, SWT.NULL);
- temp.setText("Value");
- temp = new Label(container, SWT.NULL);
- temp.setText("Where");
- // temp = new Label(container, SWT.NULL);
- // temp.setText("New Value");
- temp = new Label(container, SWT.NULL);
- temp.setText("Select");
- for (int i = 0; i < row.getColumnCount(); i++) {
- Label label = new Label(container, SWT.NULL);
- label.setText(columnNames[i]);
- whereValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
- if (data[i] == null || data[i].equals("")) {
- whereValues[i].setText('$' + columnNames[i]);
- } else {
- whereValues[i].setText(data[i]);
- }
-
- whereValues[i].addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- updateQuery();
- }
- });
-
- primaryKeys[i] = new Button(container, SWT.CHECK);
- //primaryKeys[i].setText("Where Clause");
- primaryKeys[i].addSelectionListener(new SelectionListener() {
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- public void widgetSelected(SelectionEvent e) {
- updateQuery();
- }
- });
- // newValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
- // newValues[i].setText(data[i]);
- // newValues[i].addModifyListener(new ModifyListener() {
- // public void modifyText(ModifyEvent e) {
- // updateQuery();
- // }
- // });
- setValues[i] = new Button(container, SWT.CHECK);
- //setValues[i].setText("Select Value");
- setValues[i].addSelectionListener(new SelectionListener() {
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- public void widgetSelected(SelectionEvent e) {
- updateQuery();
- }
- });
- }
- query = new Label(container, SWT.WRAP);
- GridData gridData = new GridData();
- gridData.horizontalSpan = layoutColumns;
- gridData.horizontalAlignment = GridData.FILL;
- gridData.verticalAlignment = GridData.FILL;
- gridData.grabExcessHorizontalSpace = true;
- gridData.grabExcessVerticalSpace = true;
- query.setLayoutData(gridData);
-
- setControl(container);
- updateQuery();
-
- setPageComplete(true);
- }
-
- public void updateQuery() {
- if (DEBUG) {
- System.out.println("PHP SELECT");
- }
- StringBuffer setClause = new StringBuffer();
- StringBuffer whereClause = new StringBuffer();
- String temp;
- boolean firstClause = false;
- for (int i = 0; i < columnNames.length; i++) {
- if (primaryKeys[i].getSelection()) {
- if (firstClause) {
- whereClause.append(" AND ");
- }
- firstClause = true;
- whereClause.append(columnNames[i]);
- whereClause.append(" = ");
- temp = whereValues[i].getText();
- // if (temp.charAt(0) == '$') {
- // whereClause.append(temp);
- // } else {
- whereClause.append("'" + temp + "'");
- // }
-
- }
- if (setValues[i].getSelection()) {
- setClause.append(columnNames[i]);
- // setClause.append(" = ");
- // setClause.append(newValues[i].getText());
- setClause.append(", ");
- }
- }
- // if (whereClause.length() > 1) {
- // whereClause.deleteCharAt(whereClause.length() - 1);
- // whereClause.deleteCharAt(whereClause.length() - 1);
- // }
- if (setClause.length() > 1) {
- setClause.deleteCharAt(setClause.length() - 1);
- setClause.deleteCharAt(setClause.length() - 1);
- }
-
- String[] arguments = { setClause.toString(), row.getTable(), whereClause.toString()};
- MessageFormat form = new MessageFormat(fStore.getString("phpeclipse.sql.select.template"));
-
- String query = form.format(arguments);
- // String query = "$results = mysql_query(\"SELECT " + setClause.toString();
- // query += " FROM " + row.getTable();
- // query += " WHERE " + whereClause.toString() + "\");";
- this.query.setText(query);
- }
-
- public boolean performFinish() {
-// PHPSourceConsole console = PHPSourceConsole.getInstance();
-// console.clear();
-// console.print(query.getText());
- QuantumPlugin.getDefault().getSysClip().setContents(
- new Object[] { query.getText() },
- new Transfer[] { TextTransfer.getInstance()});
- return true;
- }
-}
\ No newline at end of file
+++ /dev/null
-package com.quantum.wizards;
-
-import java.text.MessageFormat;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-
-import com.quantum.QuantumPlugin;
-import com.quantum.sql.TableRow;
-//import com.quantum.view.PHPSourceConsole;
-import com.quantum.view.tableview.TableAdapter;
-
-public class PHPUpdateRowPage extends WizardPage implements SQLPage {
- TableRow row;
- String[] columnNames;
- Text[] oldValues;
- Text[] newValues;
- Button[] primaryKeys;
- Button[] setValues;
- Label query;
- IPreferenceStore fStore;
- private final static boolean DEBUG = false;
-
- public PHPUpdateRowPage(String pageName) {
- super(pageName);
- }
-
- public void init(TableRow row, TableAdapter adapter) {
- this.row = row;
- }
-
- public void createControl(Composite parent) {
- if (DEBUG) {
- System.out.println("page create control");
- }
- fStore = QuantumPlugin.getDefault().getPreferenceStore();
- Composite container = new Composite(parent, SWT.NULL);
- GridLayout layout = new GridLayout();
- container.setLayout(layout);
- int layoutColumns = 5;
- layout.numColumns = layoutColumns;
-
- if (DEBUG) {
- if (row == null) {
- System.out.println("Row is null");
- }
- if (row.getColumnNames() == null) {
- System.out.println("Columns are null");
- }
- if (row.getTableData() == null) {
- System.out.println("Data is null");
- }
- }
-
- columnNames = row.getColumnNames();
- String[] data = row.getTableData();
-
- if (DEBUG) {
- for (int i = 0; i < row.getColumnCount(); i++) {
- System.out.println("data = " + i + "=" + data[i]);
- System.out.println("column = " + i + "=" + columnNames[i]);
- }
- }
-
- oldValues = new Text[row.getColumnCount()];
- newValues = new Text[row.getColumnCount()];
- primaryKeys = new Button[row.getColumnCount()];
- setValues = new Button[row.getColumnCount()];
- Label temp = new Label(container, SWT.NULL);
- temp.setText("Column Name");
- temp = new Label(container, SWT.NULL);
- temp.setText("Where Value");
- temp = new Label(container, SWT.NULL);
- temp.setText("Where");
- temp = new Label(container, SWT.NULL);
- temp.setText("Set Value");
- temp = new Label(container, SWT.NULL);
- temp.setText("Set");
- for (int i = 0; i < row.getColumnCount(); i++) {
- Label label = new Label(container, SWT.NULL);
- label.setText(columnNames[i]);
- oldValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
- if (data[i] == null || data[i].equals("")) {
- oldValues[i].setText('$' + columnNames[i]);
- } else {
- oldValues[i].setText(data[i]);
- }
- oldValues[i].addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- updateQuery();
- }
- });
- primaryKeys[i] = new Button(container, SWT.CHECK);
- // primaryKeys[i].setText("Where");
- primaryKeys[i].addSelectionListener(new SelectionListener() {
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- public void widgetSelected(SelectionEvent e) {
- updateQuery();
- }
- });
- newValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
-
- if (data[i] == null || data[i].equals("")) {
- newValues[i].setText('$' + columnNames[i]);
- } else {
- newValues[i].setText(data[i]);
- }
- newValues[i].addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- updateQuery();
- }
- });
- setValues[i] = new Button(container, SWT.CHECK);
- // setValues[i].setText("Set Value");
- setValues[i].addSelectionListener(new SelectionListener() {
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- public void widgetSelected(SelectionEvent e) {
- updateQuery();
- }
- });
- }
- query = new Label(container, SWT.WRAP);
- GridData gridData = new GridData();
- gridData.horizontalSpan = layoutColumns;
- gridData.horizontalAlignment = GridData.FILL;
- gridData.verticalAlignment = GridData.FILL;
- gridData.grabExcessHorizontalSpace = true;
- gridData.grabExcessVerticalSpace = true;
- query.setLayoutData(gridData);
-
- setControl(container);
- updateQuery();
-
- setPageComplete(true);
- }
-
- public void updateQuery() {
- if (DEBUG) {
- System.out.println("Updating update query");
- }
-
- StringBuffer setClause = new StringBuffer();
- StringBuffer whereClause = new StringBuffer();
- for (int i = 0; i < columnNames.length; i++) {
- if (primaryKeys[i].getSelection()) {
- whereClause.append(columnNames[i]);
- whereClause.append(" = ");
- whereClause.append("'" + oldValues[i].getText() + "'");
- whereClause.append(", ");
- }
- if (setValues[i].getSelection()) {
- setClause.append(columnNames[i]);
- setClause.append(" = ");
- setClause.append("'" + newValues[i].getText() + "'");
- setClause.append(", ");
- }
- }
- if (whereClause.length() > 1) {
- whereClause.deleteCharAt(whereClause.length() - 1);
- whereClause.deleteCharAt(whereClause.length() - 1);
- }
- if (setClause.length() > 1) {
- setClause.deleteCharAt(setClause.length() - 1);
- setClause.deleteCharAt(setClause.length() - 1);
- }
- String[] arguments = { row.getTable(), setClause.toString(), whereClause.toString()};
- MessageFormat form = new MessageFormat(fStore.getString("phpeclipse.sql.update.template"));
-
- String query = form.format(arguments);
- //
- // String query = "$results = mysql_query(\"UPDATE " + row.getTable();
- // query += " SET " + setClause.toString();
- // query += " WHERE " + whereClause.toString() + "\");";
- this.query.setText(query);
- }
- public boolean performFinish() {
-// PHPSourceConsole console = PHPSourceConsole.getInstance();
-// console.clear();
-// console.print(query.getText());
- QuantumPlugin.getDefault().getSysClip().setContents(
- new Object[] { query.getText() },
- new Transfer[] { TextTransfer.getInstance()});
- return true;
- }
-}
\ No newline at end of file
package com.quantum.wizards;
-import com.quantum.sql.TableRow;
-import com.quantum.view.tableview.TableAdapter;
+import com.quantum.sql.SQLResultSetResults;
import org.eclipse.jface.wizard.IWizardPage;
public interface SQLPage extends IWizardPage {
- public void init(TableRow row, TableAdapter adapter);
+ public void init(SQLResultSetResults results, SQLResultSetResults.Row row);
public boolean performFinish();
}
package com.quantum.wizards;
-import com.quantum.sql.TableRow;
-import com.quantum.view.tableview.TableAdapter;
+import com.quantum.sql.SQLResultSetResults;
import org.eclipse.jface.wizard.Wizard;
public class SQLRowWizard extends Wizard {
- SQLPage page;
- TableRow row;
- TableAdapter adapter;
- public void init(String title, SQLPage page, TableRow row, TableAdapter adapter) {
+ protected SQLPage page;
+ protected SQLResultSetResults.Row row;
+ private SQLResultSetResults results;
+
+ public void init(String title, SQLPage page,
+ SQLResultSetResults results, SQLResultSetResults.Row row) {
System.out.println("Init SQL row wizard"); //$NON-NLS-1$
this.row = row;
- this.adapter = adapter;
this.page = page;
+ this.results = results;
setWindowTitle(title);
}
public boolean performFinish() {
}
public void addPages() {
System.out.println("QL row wizard adding pages"); //$NON-NLS-1$
- page.init(row, adapter);
+ page.init(this.results, this.row);
addPage(page);
}
}
package com.quantum.wizards;
+import java.sql.SQLException;
+
import com.quantum.sql.FilterSort;
-import com.quantum.sql.TableRow;
-import com.quantum.view.tableview.TableAdapter;
-import com.quantum.view.tableview.TableView;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.util.connection.ConnectionUtil;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Text;
public class SortFilterPage extends WizardPage implements SQLPage {
- TableRow row;
- TableAdapter adapter;
Button[] filter;
Combo[] operator;
Text[] filterValues;
Button[] stringFlags;
Button[] sort;
Combo[] ascDesc;
+ private SQLResultSetResults.Row row;
+
+ private ConnectionUtil connectionUtil = new ConnectionUtil();
String columnNames[];
Label query;
FilterSort filterSort = new FilterSort();
+ private SQLResultSetResults results;
public SortFilterPage(String pageName) {
super(pageName);
}
- public void init(TableRow row, TableAdapter adapter) {
+ public void init(SQLResultSetResults results, SQLResultSetResults.Row row) {
+ this.results = results;
this.row = row;
- this.adapter = adapter;
}
public void createControl(Composite parent) {
int layoutColumns = 6;
layout.numColumns = layoutColumns;
- if (row == null) {
- System.out.println("Row is null"); //$NON-NLS-1$
- }
- if (row.getColumnNames() == null) {
- System.out.println("Columns are null"); //$NON-NLS-1$
- }
- if (row.getTableData() == null) {
- System.out.println("Data is null"); //$NON-NLS-1$
- }
+ columnNames = this.results.getColumnNames();
- columnNames = row.getColumnNames();
- String[] data = row.getTableData();
- for (int i = 0; i < row.getColumnCount(); i++) {
- System.out.println("data = " + i + "=" + data[i]); //$NON-NLS-1$ //$NON-NLS-2$
- System.out.println("column = " + i + "=" + columnNames[i]); //$NON-NLS-1$ //$NON-NLS-2$
- }
- int size = row.getColumnCount();
+ int size = this.results.getColumnCount();
filter = new Button[size];
operator = new Combo[size];
filterValues = new Text[size];
stringFlags = new Button[size];
sort = new Button[size];
ascDesc = new Combo[size];
- for (int i = 0; i < row.getColumnCount(); i++) {
+ for (int i = 0; i < size; i++) {
filter[i] = new Button(container, SWT.CHECK);
filter[i].setText(columnNames[i]);
filter[i].addSelectionListener(new SelectionListener() {
});
filterValues[i] = new Text(container, SWT.BORDER);
- filterValues[i].setText(data[i]);
+ Object data = this.row == null ? null : this.row.get(i+1);
+ filterValues[i].setText(data == null ? "" : data.toString());
filterValues[i].addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateQuery();
}
public boolean performFinish() {
- adapter.setFilterSort(filterSort);
- TableView.getInstance().refreshCurrent();
- return true;
+ this.results.setFilterSort(filterSort);
+ try {
+ this.results.refresh(this.connectionUtil.connect(
+ this.results.getBookmark(), getShell()));
+ return true;
+ } catch (SQLException e) {
+ ExceptionDisplayDialog.openError(getShell(), null, null, e);
+ return false;
+ }
}
}
--- /dev/null
+package com.quantum.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+
+/**
+ * <p>This class takes a URL pattern and creates a full URL. A URL pattern might look
+ * like this: <code>jdbc:postgresql://{hostname}:{port}/{dbname}</code>, and the
+ * properties should include "hostname", "port" and "dbname".
+ *
+ * @author BC Holmes
+ */
+public class URLBuilder {
+
+ public static String createURL(String urlPattern, Map properties) {
+ StringBuffer buffer = new StringBuffer();
+ boolean isVariable = false;
+ String variableName = null;
+ for (StringTokenizer tokenizer = new StringTokenizer(urlPattern, "{}", true);
+ tokenizer.hasMoreTokens(); ) {
+ String token = tokenizer.nextToken();
+
+ if ("{".equals(token) && !isVariable) {
+ isVariable = true;
+ } else if (isVariable && "}".equals(token) && variableName != null) {
+ if (!properties.containsKey(variableName)) {
+ buffer.append("{");
+ buffer.append(variableName);
+ buffer.append("}");
+ } else {
+ buffer.append(properties.get(variableName));
+ }
+ isVariable = false;
+ } else if (isVariable) {
+ variableName = token;
+ } else {
+ buffer.append(token);
+ }
+ }
+ return buffer.toString();
+ }
+
+ public static String[] getVariableNames(String urlPattern) {
+ List list = new ArrayList();
+ if (urlPattern != null) {
+ boolean isVariable = false;
+ String variableName = null;
+ for (StringTokenizer tokenizer = new StringTokenizer(urlPattern, "{}", true);
+ tokenizer.hasMoreTokens(); ) {
+ String token = tokenizer.nextToken();
+
+ if ("{".equals(token) && !isVariable) {
+ isVariable = true;
+ } else if (isVariable && "}".equals(token) && variableName != null) {
+ list.add(variableName);
+ isVariable = false;
+ } else if (isVariable) {
+ variableName = token;
+ }
+ }
+ }
+ return (String[]) list.toArray(new String[list.size()]);
+ }
+}
--- /dev/null
+package com.quantum.wizards;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import com.quantum.Messages;
+import com.quantum.adapters.AdapterFactory;
+import com.quantum.adapters.DatabaseAdapter;
+import com.quantum.model.JDBCDriver;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+
+
+/**
+ * @author BC
+ */
+public abstract class URLSetupControl extends Composite {
+
+ private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+ private String urlPattern;
+ private Map properties = Collections.synchronizedMap(new HashMap());
+ private final JDBCDriver driver;
+ private String connectionURL;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public URLSetupControl(Composite parent, JDBCDriver driver) {
+ super(parent, SWT.NONE);
+ this.driver = driver;
+ GridLayout layout = new GridLayout();
+ setLayout(layout);
+ this.urlPattern = AdapterFactory.getInstance().getURLPattern(driver.getClassName());
+
+ setPropertyDefaults();
+ setConnectionURL(URLBuilder.createURL(this.urlPattern, getProperties()));
+ }
+
+ /**
+ *
+ */
+ protected void createPart() {
+ Group group = new Group(this, SWT.SHADOW_ETCHED_IN);
+ group.setText(Messages.getString(URLSetupControl.class, "text"));
+ group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+
+ createPart(group);
+ }
+
+ /**
+ *
+ */
+ private void setPropertyDefaults() {
+ DatabaseAdapter adapter =
+ AdapterFactory.getInstance().getAdapter(getDriver().getType());
+ Map properties = (adapter == null) ? new HashMap() : adapter.getDefaultConnectionParameters();
+ for (Iterator i = properties.keySet().iterator(); i.hasNext();) {
+ String key = (String) i.next();
+ putProperty(key, (String) properties.get(key));
+
+ }
+ }
+
+ protected abstract void createPart(Composite parent);
+
+ private Map getProperties() {
+ return this.properties;
+ }
+
+ protected String getProperty(String name) {
+ String value = (String) this.properties.get(name);
+ return value == null ? "" : value;
+ }
+
+ protected void putProperty(String name, String value) {
+ this.properties.put(name, value);
+ setConnectionURL(URLBuilder.createURL(this.urlPattern, getProperties()));
+ }
+
+ public void addPropertyChangeListener(PropertyChangeListener listener) {
+ this.propertyChangeSupport.addPropertyChangeListener(listener);
+ }
+ public void removePropertyChangeListener(PropertyChangeListener listener) {
+ this.propertyChangeSupport.removePropertyChangeListener(listener);
+ }
+ protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
+ this.propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
+ }
+
+ protected JDBCDriver getDriver() {
+ return this.driver;
+ }
+ public String getConnectionURL() {
+ return this.connectionURL == null ? "" : this.connectionURL;
+ }
+ public void setConnectionURL(String connectionURL) {
+ if (connectionURL != null && !connectionURL.equals(this.connectionURL)) {
+ String original = this.connectionURL;
+ this.connectionURL = connectionURL;
+ firePropertyChange("connectionURL", original, connectionURL);
+ }
+ }
+}
--- /dev/null
+package com.quantum.wizards;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import com.quantum.adapters.AdapterFactory;
+import com.quantum.model.JDBCDriver;
+
+import org.eclipse.swt.widgets.Composite;
+
+
+/**
+ * @author BC Holmes
+ */
+public class URLSetupControlFactory {
+
+ public static boolean hasControl(JDBCDriver driver) {
+ return null != getControlClass(driver);
+ }
+
+ public static URLSetupControl create(JDBCDriver driver, Composite composite) {
+ Class controlClass = getControlClass(driver);
+
+ if (BasicThreePartURLSetupControl.class == controlClass) {
+ URLSetupControl control = new BasicThreePartURLSetupControl(composite, driver);
+ control.createPart();
+ return control;
+ } else if (BasicOnePartURLSetupControl.class == controlClass) {
+ String[] properties = getProperties(driver);
+ URLSetupControl control = new BasicOnePartURLSetupControl(composite, driver, properties[0]);
+ control.createPart();
+ return control;
+ } else if (InformixURLSetupControl.class == controlClass) {
+ URLSetupControl control = new InformixURLSetupControl(composite, driver);
+ control.createPart();
+ return control;
+ } else {
+ return null;
+ }
+ }
+
+ private static Class getControlClass(JDBCDriver driver) {
+ String[] parameters = getProperties(driver);
+ List parametersList = new ArrayList();
+ if (parameters != null) {
+ parametersList.addAll(Arrays.asList(parameters));
+ }
+
+ if (parametersList.size() == 3
+ && parametersList.contains("dbname")
+ && parametersList.contains("hostname")
+ && parametersList.contains("port")) {
+ return BasicThreePartURLSetupControl.class;
+ } else if (parametersList.size() == 4
+ && parametersList.contains("dbname")
+ && parametersList.contains("hostname")
+ && parametersList.contains("informixserver")
+ && parametersList.contains("port")) {
+ return InformixURLSetupControl.class;
+ } else if (parametersList.size() == 1
+ && (parametersList.contains("dbname")
+ || parametersList.contains("datasource"))) {
+ return BasicOnePartURLSetupControl.class;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @param driver
+ * @return
+ */
+ private static String[] getProperties(JDBCDriver driver) {
+ String driverClassName = driver.getClassName();
+ String urlPattern = AdapterFactory.getInstance().getURLPattern(driverClassName);
+ String[] parameters = URLBuilder.getVariableNames(urlPattern);
+ return parameters;
+ }
+}
import com.quantum.Messages;
import com.quantum.adapters.DatabaseAdapter;
import com.quantum.model.Bookmark;
+import com.quantum.model.Column;
import com.quantum.model.Entity;
public class UpdateRowPage extends BaseSQLPage implements SQLPage {
Composite container = new Composite(parent, SWT.V_SCROLL);
GridLayout layout = new GridLayout();
container.setLayout(layout);
- Entity entity = row.getEntity();
+ Entity entity = this.results.getEntity();
int layoutColumns = 5;
layout.numColumns = layoutColumns;
- if (row == null) {
- System.out.println("Row is null"); //$NON-NLS-1$
- }
- if (row.getColumnNames() == null) {
- System.out.println("Columns are null"); //$NON-NLS-1$
- }
- if (row.getTableData() == null) {
- System.out.println("Data is null"); //$NON-NLS-1$
- }
- columnNames = row.getColumnNames();
- String[] data = row.getTableData();
- for (int i = 0; i < row.getColumnCount(); i++) {
- System.out.println("data = " + i + "=" + data[i]); //$NON-NLS-1$ //$NON-NLS-2$
- System.out.println("column = " + i + "=" + columnNames[i]); //$NON-NLS-1$ //$NON-NLS-2$
- }
- oldValues = new Text[row.getColumnCount()];
- newValues = new Text[row.getColumnCount()];
- primaryKeys = new Button[row.getColumnCount()];
- setValues = new Button[row.getColumnCount()];
+ columnNames = this.results.getColumnNames();
+ oldValues = new Text[columnNames.length];
+ newValues = new Text[columnNames.length];
+ primaryKeys = new Button[columnNames.length];
+ setValues = new Button[columnNames.length];
Label temp = new Label(container, SWT.NULL);
temp.setText(Messages.getString("UpdateRowPage.ColumnName")); //$NON-NLS-1$
temp = new Label(container, SWT.NULL);
temp.setText(Messages.getString("UpdateRowPage.NewValue")); //$NON-NLS-1$
temp = new Label(container, SWT.NULL);
temp.setText(Messages.getString("UpdateRowPage._13")); //$NON-NLS-1$
- for (int i = 0; i < row.getColumnCount(); i++) {
+ for (int i = 0; i < columnNames.length; i++) {
Label label = new Label(container, SWT.NULL);
label.setText(columnNames[i]);
oldValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
- oldValues[i].setText(data[i]);
+ GridData gridData = new GridData();
+ gridData.widthHint = 100;
+ oldValues[i].setLayoutData(gridData);
+ Object data = this.row == null ? null : this.row.get(i+1);
+ oldValues[i].setText(data == null ? "" : data.toString());
oldValues[i].addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateQuery();
});
primaryKeys[i] = new Button(container, SWT.CHECK);
primaryKeys[i].setText("Where"); //$NON-NLS-1$
- if (entity != null && getColumn(entity, columnNames[i]).isPrimaryKey())
+ Column column = (entity == null) ? null : getColumn(entity, columnNames[i]);
+ if (column != null && column.isPrimaryKey())
primaryKeys[i].setSelection(true);
primaryKeys[i].addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
});
newValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
- newValues[i].setText(data[i]);
+ newValues[i].setText(data == null ? "" : data.toString());
+ gridData = new GridData();
+ gridData.widthHint = 100;
+ newValues[i].setLayoutData(gridData);
newValues[i].addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateQuery();
System.out.println("Updating query"); //$NON-NLS-1$
StringBuffer setClause = new StringBuffer();
StringBuffer whereClause = new StringBuffer();
- Bookmark bookmark = row.getBookmark();
- Entity entity = row.getEntity();
+ Bookmark bookmark = this.results.getBookmark();
+ Entity entity = this.results.getEntity();
DatabaseAdapter adapter = bookmark.getAdapter();
int numValuesSet = 0;
numValuesSet++;
}
}
- String query = "UPDATE " + row.getTable(); //$NON-NLS-1$
+ String query = "UPDATE " + this.results.getEntity().getQuotedTableName(); //$NON-NLS-1$
query += " SET " + setClause.toString(); //$NON-NLS-1$
query += " WHERE " + whereClause.toString(); //$NON-NLS-1$
this.query.setText(query);
import org.eclipse.ui.internal.dialogs.ListContentProvider;
import com.quantum.QuantumPlugin;
+import com.quantum.adapters.DatabaseAdapter;
import com.quantum.model.Bookmark;
import com.quantum.model.BookmarkCollection;
import com.quantum.model.Entity;
import com.quantum.model.EntityFactory;
import com.quantum.model.NotConnectedException;
+import com.quantum.sql.MultiSQLServer;
+import com.quantum.sql.SQLResultSetCollection;
+import com.quantum.sql.SQLResultSetResults;
+import com.quantum.sql.SQLResults;
+import com.quantum.ui.dialog.ExceptionDisplayDialog;
import com.quantum.util.connection.ConnectionUtil;
import com.quantum.view.tableview.TableView;
-public class PHPOpenSQLTableEditorAction extends ActionDelegate
- implements
- IEditorActionDelegate {
-
- private IWorkbenchWindow fWindow;
- private PHPEditor fEditor;
- private IProject fProject;
-
- public void dispose() {
- }
-
- public void init(IWorkbenchWindow window) {
- this.fWindow = window;
- }
-
- public void selectionChanged(IAction action, ISelection selection) {
- if (!selection.isEmpty()) {
- if (selection instanceof TextSelection) {
- action.setEnabled(true);
- } else if (fWindow.getActivePage() != null
- && fWindow.getActivePage().getActivePart() != null) {
- //
- }
- }
- }
- private IWorkbenchPage getActivePage() {
- IWorkbenchWindow workbenchWindow = fEditor.getEditorSite()
- .getWorkbenchWindow();
- IWorkbenchPage page = workbenchWindow.getActivePage();
- return page;
- }
- public IContainer getWorkingLocation(IFileEditorInput editorInput) {
- if (editorInput == null || editorInput.getFile() == null) {
- return null;
- }
- return editorInput.getFile().getParent();
- }
- private IFile getIncludeFile(IProject project,
- IFileEditorInput editorInput, String relativeFilename) {
- // IContainer container = getWorkingLocation(editorInput);
- // String fullPath = project.getLocation().toString();
- Path path = new Path(relativeFilename);
- IFile file = project.getFile(path);
- return file;
- }
-
- public void run(IAction action) {
- if (fEditor == null) {
- IEditorPart targetEditor = fWindow.getActivePage()
- .getActiveEditor();
- if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
- fEditor = (PHPEditor) targetEditor;
- }
- }
- if (fEditor != null) {
- // TableView view = TableView.getInstance();
-
- // determine the current Project from a (file-based) Editor
- IFile f = ((IFileEditorInput) fEditor.getEditorInput()).getFile();
- fProject = f.getProject();
-
- ITextSelection selection = (ITextSelection) fEditor
- .getSelectionProvider().getSelection();
- IDocument doc = fEditor.getDocumentProvider().getDocument(
- fEditor.getEditorInput());
- int pos = selection.getOffset();
- // System.out.println(selection.getText());
- String tableName = getSQLTableName(doc, pos);
-
- IViewPart viewPart = null;
- String view = "com.quantum.view.tableview.TableView";
- try {
- IWorkbenchPage page = QuantumPlugin.getDefault()
- .getActivePage();
- viewPart = page.findView(view);
- if (viewPart == null) {
- viewPart = page.showView(view);
- }
- page.bringToTop(viewPart);
- getTables((TableView) viewPart, fProject, tableName);
- } catch (PartInitException e) {
- e.printStackTrace();
- }
-
- }
- }
-
- public void setActiveEditor(IAction action, IEditorPart targetEditor) {
- if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
- fEditor = (PHPEditor) targetEditor;
- }
- }
-
- private String getSQLTableName(IDocument doc, int pos) {
- Point word = null;
- int start = -1;
- int end = -1;
-
- try {
-
- int position = pos;
- char character;
-
- while (position >= 0) {
- character = doc.getChar(position);
- if (Character.isWhitespace(character) || (character == '\"')
- || (character == '\'') || (character == '\r')
- || (character == '\n'))
- break;
- --position;
- }
-
- start = position;
-
- position = pos;
- int length = doc.getLength();
-
- while (position < length) {
- character = doc.getChar(position);
- if (Character.isWhitespace(character) || (character == '\"')
- || (character == '\'') || (character == '\r')
- || (character == '\n'))
- break;
- ++position;
- }
-
- start++;
- end = position;
-
- if (end > start)
- word = new Point(start, end - start);
-
- } catch (BadLocationException x) {
- }
-
- if (word != null) {
- try {
- return doc.get(word.x, word.y);
- } catch (BadLocationException e) {
- }
- }
- return "";
- }
-
- public void getTables(TableView tableView, IProject project,
- String tableName) {
- // Get The Database bookmark from the Quantum SQL plugin:
- BookmarkCollection sqlBookMarks = BookmarkCollection.getInstance();
- if (sqlBookMarks != null) {
- String bookmarkString = Util.getMiscProjectsPreferenceValue(
- project, IPreferenceConstants.PHP_BOOKMARK_DEFAULT);
- if (bookmarkString != null && !bookmarkString.equals("")) {
- Bookmark bookmark = sqlBookMarks.find(bookmarkString);
- ArrayList sqlList = new ArrayList();
- if (bookmark != null && !bookmark.isConnected()) {
- new ConnectionUtil().connect(bookmark, null);
- }
- if (bookmark != null && bookmark.isConnected()) {
- try {
- Connection connection = bookmark.getConnection();
- DatabaseMetaData metaData = connection.getMetaData();
-
- if (metaData != null) {
- String columnName;
- String prefixWithoutDollar = tableName;
- if (prefixWithoutDollar.charAt(0) == '$') {
- prefixWithoutDollar = prefixWithoutDollar
- .substring(1);
- }
- ResultSet set;
- set = metaData.getTables(null, null, "%"
- + prefixWithoutDollar+"%", null);
- while (set.next()) {
- tableName = set.getString("TABLE_NAME");
- tableName = (tableName == null)
- ? ""
- : tableName.trim();
- if (tableName != null && tableName.length() > 0) {
- sqlList.add(tableName);
- }
- }
- set.close();
- EntityFactory entityFactory = EntityFactory
- .getInstance();
- if (sqlList.size() == 1) {
- tableView.loadTable(entityFactory.create(
- bookmark, null,
- (String) sqlList.get(0),
- Entity.TABLE_TYPE));
- } else if (sqlList.size() > 1) {
- ListSelectionDialog listSelectionDialog = new ListSelectionDialog(
- PHPeclipsePlugin.getDefault()
- .getWorkbench()
- .getActiveWorkbenchWindow()
- .getShell(), sqlList,
- new ListContentProvider(),
- new LabelProvider(),
- "Select the SQL to open.");
- listSelectionDialog
- .setTitle("Multiple tablenames found");
- if (listSelectionDialog.open() == Window.OK) {
- Object[] locations = listSelectionDialog
- .getResult();
- if (locations != null) {
- for (int i = 0; i < locations.length; i++) {
- tableView
- .loadTable(entityFactory
- .create(
- bookmark,
- null,
- (String) locations[i],
- Entity.TABLE_TYPE));
- }
-
- }
- }
- }
- }
- } catch (NotConnectedException e) {
- // ignore this - not mission critical
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
+public class PHPOpenSQLTableEditorAction extends ActionDelegate implements
+ IEditorActionDelegate {
+
+ private IWorkbenchWindow fWindow;
+
+ private PHPEditor fEditor;
+
+ private IProject fProject;
+
+ public void dispose() {
+ }
+
+ public void init(IWorkbenchWindow window) {
+ this.fWindow = window;
+ }
+
+ public void selectionChanged(IAction action, ISelection selection) {
+ if (!selection.isEmpty()) {
+ if (selection instanceof TextSelection) {
+ action.setEnabled(true);
+ } else if (fWindow.getActivePage() != null
+ && fWindow.getActivePage().getActivePart() != null) {
+ //
+ }
+ }
+ }
+
+ private IWorkbenchPage getActivePage() {
+ fWindow = fEditor.getEditorSite()
+ .getWorkbenchWindow();
+ IWorkbenchPage page = fWindow.getActivePage();
+ return page;
+ }
+
+ public IContainer getWorkingLocation(IFileEditorInput editorInput) {
+ if (editorInput == null || editorInput.getFile() == null) {
+ return null;
+ }
+ return editorInput.getFile().getParent();
+ }
+
+ private IFile getIncludeFile(IProject project, IFileEditorInput editorInput,
+ String relativeFilename) {
+ // IContainer container = getWorkingLocation(editorInput);
+ // String fullPath = project.getLocation().toString();
+ Path path = new Path(relativeFilename);
+ IFile file = project.getFile(path);
+ return file;
+ }
+
+ public void run(IAction action) {
+ if (fEditor == null) {
+ IEditorPart targetEditor = fWindow.getActivePage().getActiveEditor();
+ if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
+ fEditor = (PHPEditor) targetEditor;
+ }
+ }
+ if (fEditor != null) {
+ // TableView view = TableView.getInstance();
+
+ // determine the current Project from a (file-based) Editor
+ fWindow = fEditor.getEditorSite().getWorkbenchWindow();
+ IFile f = ((IFileEditorInput) fEditor.getEditorInput()).getFile();
+ fProject = f.getProject();
+
+ ITextSelection selection = (ITextSelection) fEditor
+ .getSelectionProvider().getSelection();
+ IDocument doc = fEditor.getDocumentProvider().getDocument(
+ fEditor.getEditorInput());
+ int pos = selection.getOffset();
+ // System.out.println(selection.getText());
+ String tableName = getSQLTableName(doc, pos);
+
+ IViewPart viewPart = null;
+ String view = "com.quantum.view.tableview.TableView";
+ try {
+ IWorkbenchPage page = QuantumPlugin.getDefault().getActivePage();
+ viewPart = page.findView(view);
+ if (viewPart == null) {
+ viewPart = page.showView(view);
+ }
+ page.bringToTop(viewPart);
+ getTables((TableView) viewPart, fProject, tableName);
+ } catch (PartInitException e) {
+ e.printStackTrace();
+ }
+
+ }
+ }
+
+ public void setActiveEditor(IAction action, IEditorPart targetEditor) {
+ if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
+ fEditor = (PHPEditor) targetEditor;
+ }
+ }
+
+ private String getSQLTableName(IDocument doc, int pos) {
+ Point word = null;
+ int start = -1;
+ int end = -1;
+
+ try {
+
+ int position = pos;
+ char character;
+
+ while (position >= 0) {
+ character = doc.getChar(position);
+ if (Character.isWhitespace(character) || (character == '\"')
+ || (character == '\'') || (character == '\r')
+ || (character == '\n'))
+ break;
+ --position;
+ }
+
+ start = position;
+
+ position = pos;
+ int length = doc.getLength();
+
+ while (position < length) {
+ character = doc.getChar(position);
+ if (Character.isWhitespace(character) || (character == '\"')
+ || (character == '\'') || (character == '\r')
+ || (character == '\n'))
+ break;
+ ++position;
+ }
+
+ start++;
+ end = position;
+
+ if (end > start)
+ word = new Point(start, end - start);
+
+ } catch (BadLocationException x) {
+ }
+
+ if (word != null) {
+ try {
+ return doc.get(word.x, word.y);
+ } catch (BadLocationException e) {
+ }
+ }
+ return "";
+ }
+
+ public void getTables(TableView tableView, IProject project, String tableName) {
+ // Get The Database bookmark from the Quantum SQL plugin:
+ BookmarkCollection sqlBookMarks = BookmarkCollection.getInstance();
+ if (sqlBookMarks != null) {
+ String bookmarkString = Util.getMiscProjectsPreferenceValue(project,
+ IPreferenceConstants.PHP_BOOKMARK_DEFAULT);
+ if (bookmarkString != null && !bookmarkString.equals("")) {
+ Bookmark bookmark = sqlBookMarks.find(bookmarkString);
+ ArrayList sqlList = new ArrayList();
+ if (bookmark != null && !bookmark.isConnected()) {
+ new ConnectionUtil().connect(bookmark, null);
+ }
+ if (bookmark != null && bookmark.isConnected()) {
+ try {
+ Connection connection = bookmark.getConnection();
+ DatabaseMetaData metaData = connection.getMetaData();
+ ConnectionUtil connectionUtil = new ConnectionUtil();
+ Entity entity;
+ DatabaseAdapter adapter;
+
+ if (metaData != null) {
+ String columnName;
+ String prefixWithoutDollar = tableName;
+ if (prefixWithoutDollar.charAt(0) == '$') {
+ prefixWithoutDollar = prefixWithoutDollar.substring(1);
+ }
+ ResultSet set;
+ set = metaData.getTables(null, null, "%" + prefixWithoutDollar
+ + "%", null);
+ while (set.next()) {
+ tableName = set.getString("TABLE_NAME");
+ tableName = (tableName == null) ? "" : tableName.trim();
+ if (tableName != null && tableName.length() > 0) {
+ sqlList.add(tableName);
+ }
+ }
+ set.close();
+ EntityFactory entityFactory = EntityFactory.getInstance();
+ if (sqlList.size() == 1) {
+ adapter = bookmark.getAdapter();
+ entity = entityFactory.create(bookmark, null, (String) sqlList
+ .get(0), Entity.TABLE_TYPE);
+ String query = adapter.getTableQuery(entity.getQualifiedName());
+
+ try {
+ SQLResults results = MultiSQLServer.getInstance().execute(
+ bookmark, connectionUtil.connect(bookmark, fWindow.getShell()),
+ entity, query);
+
+ if (results != null && results.isResultSet()) {
+ SQLResultSetCollection.getInstance().addSQLResultSet(
+ (SQLResultSetResults) results);
+ }
+ } catch (SQLException e) {
+ ExceptionDisplayDialog.openError(fWindow.getShell(), null, null, e);
+ }
+ // tableView.loadTable(entityFactory.create(
+ // bookmark, null,
+ // (String) sqlList.get(0),
+ // Entity.TABLE_TYPE));
+ } else if (sqlList.size() > 1) {
+ ListSelectionDialog listSelectionDialog = new ListSelectionDialog(
+ PHPeclipsePlugin.getDefault().getWorkbench()
+ .getActiveWorkbenchWindow().getShell(), sqlList,
+ new ListContentProvider(), new LabelProvider(),
+ "Select the SQL table to open.");
+ listSelectionDialog.setTitle("Multiple tablenames found");
+ if (listSelectionDialog.open() == Window.OK) {
+ Object[] locations = listSelectionDialog.getResult();
+ if (locations != null) {
+ for (int i = 0; i < locations.length; i++) {
+ adapter = bookmark.getAdapter();
+ entity = entityFactory.create(bookmark, null,
+ (String) locations[i], Entity.TABLE_TYPE);
+ String query = adapter.getTableQuery(entity
+ .getQualifiedName());
+
+ try {
+ SQLResults results = MultiSQLServer.getInstance()
+ .execute(bookmark,
+ connectionUtil.connect(bookmark, fWindow.getShell()),
+ entity, query);
+
+ if (results != null && results.isResultSet()) {
+ SQLResultSetCollection.getInstance().addSQLResultSet(
+ (SQLResultSetResults) results);
+ }
+ } catch (SQLException e) {
+ ExceptionDisplayDialog.openError(fWindow.getShell(), null, null, e);
+ }
+
+ // tableView
+ // .loadTable(entityFactory
+ // .create(
+ // bookmark,
+ // null,
+ // (String) locations[i],
+ // Entity.TABLE_TYPE));
+ }
+
+ }
+ }
+ }
+ }
+ } catch (NotConnectedException e) {
+ // ignore this - not mission critical
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
}
\ No newline at end of file