Author: [EMAIL PROTECTED]
Date: Wed Oct  1 11:17:13 2008
New Revision: 2742

Modified:
   trunk/src/ca/sqlpower/architect/swingui/query/ExecuteActionListener.java
   trunk/src/ca/sqlpower/architect/swingui/query/QueryDialog.java
   trunk/src/ca/sqlpower/architect/swingui/query/SQLQueryEntryPanel.java
   trunk/src/ca/sqlpower/architect/swingui/query/messages.properties

Log:
Added tabs to the lower panel in the QueryDialog to display a log file as well as the result. The result tab also has multiple tabs to display multiple results from the same SQL statement.

The execute action of the SQLQueryEntryPanel now returns a list of result sets and column counts to the listener so we can create multiple result tables later.

Added new text to messages.properties for tab labels and such.

Modified: trunk/src/ca/sqlpower/architect/swingui/query/ExecuteActionListener.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/query/ExecuteActionListener.java (original) +++ trunk/src/ca/sqlpower/architect/swingui/query/ExecuteActionListener.java Wed Oct 1 11:17:13 2008
@@ -20,12 +20,13 @@
 package ca.sqlpower.architect.swingui.query;

 import java.sql.ResultSet;
+import java.util.List;

 /**
  * A listener for executing queries in a [EMAIL PROTECTED] SQLQueryEntryPanel}.
  */
 public interface ExecuteActionListener {

-    public void sqlQueryExecuted(ResultSet rs);
+ public void sqlQueryExecuted(List<ResultSet> rs, List<Integer> rowsAffected);

 }

Modified: trunk/src/ca/sqlpower/architect/swingui/query/QueryDialog.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/query/QueryDialog.java (original) +++ trunk/src/ca/sqlpower/architect/swingui/query/QueryDialog.java Wed Oct 1 11:17:13 2008
@@ -21,13 +21,13 @@

 import java.awt.BorderLayout;
 import java.sql.ResultSet;
+import java.util.List;

 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JSplitPane;
-import javax.swing.JTable;
+import javax.swing.JTabbedPane;
 import javax.swing.JTextArea;
-import javax.swing.table.TableModel;
 import javax.swing.tree.TreeModel;

 import org.apache.log4j.Logger;
@@ -36,7 +36,6 @@
 import ca.sqlpower.architect.swingui.ArchitectSwingSession;
 import ca.sqlpower.architect.swingui.DBTree;
 import ca.sqlpower.swingui.table.ResultSetTableFactory;
-import ca.sqlpower.swingui.table.ResultSetTableModel;

 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
@@ -48,28 +47,20 @@

     private static Logger logger = Logger.getLogger(QueryDialog.class);

-    /**
- * The table showing the result set. This can only be created when we get
-     * an actual ResultSet to avoid NPEs.
-     */
-    private JTable resultSetTable;
-
-    /**
- * The scroll pane that contains the JTable displaying the results of the
-     * SQL query.
-     */
-    private JScrollPane tableScrollPane;
-
-    /**
- * The text area attached to the table that users can type into for filtering
-     * the table.
-     */
-    private JTextArea tableFilterTextArea;
-
     private final DBTree dbTree;

     private SQLQueryEntryPanel queryEntryPanel;

+    private JTabbedPane tabPane;
+
+    /**
+ * Any results returned by SQL statement execution that does not return a table
+     * will be placed here.
+     */
+    private JTextArea logTextArea;
+
+    private JTabbedPane tableTabPane;
+
     /**
      * Creates and displays the window for executing SQL queries.
      */
@@ -86,15 +77,25 @@
         queryEntryPanel = new SQLQueryEntryPanel(session, dbTree);
         queryEntryPanel.addExecuteAction(new ExecuteActionListener() {

-            public void sqlQueryExecuted(ResultSet rs) {
-                TableModel newModel = new ResultSetTableModel(rs);
-                if (resultSetTable == null) {
- resultSetTable = ResultSetTableFactory.createResultSetJTableWithSearch(rs, tableFilterTextArea.getDocument());
-                    tableScrollPane.getViewport().add(resultSetTable);
+ public void sqlQueryExecuted(List<ResultSet> resultSets, List<Integer> rowsAffected) {
+                tableTabPane.removeAll();
+                for (ResultSet rs : resultSets) {
+ tableTabPane.add(Messages.getString("SQLQuery.result"), createResultSetTablePanel(rs));
+                }
+
+                logTextArea.setText("");
+                for (Integer i : rowsAffected) {
+ logTextArea.append(Messages.getString("SQLQuery.rowsAffected", i.toString()));
+                    logTextArea.append("\n\n");
                 }
-                resultSetTable.setModel(newModel);
-                resultSetTable.createDefaultColumnsFromModel();
-            }});
+            }
+
+        });
+
+        tabPane = new JTabbedPane();
+        tableTabPane = new JTabbedPane();
+        logTextArea = new JTextArea();
+
         buildUI(session);
     }

@@ -103,19 +104,10 @@
         JSplitPane queryPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
         queryPane.add(queryEntryPanel, JSplitPane.TOP);

-        tableFilterTextArea = new JTextArea();
- FormLayout tableAreaLayout = new FormLayout("pref, 10dlu, pref:grow", "pref, 10dlu, fill:max(100dlu;pref):grow"); - DefaultFormBuilder tableAreaBuilder = new DefaultFormBuilder(tableAreaLayout);
-        tableAreaBuilder.setDefaultDialogBorder();
-        tableAreaBuilder.append("Filter");
-        tableAreaBuilder.append(tableFilterTextArea);
-        tableAreaBuilder.nextLine();
-        tableAreaBuilder.nextLine();
-        resultSetTable = null;
-        tableScrollPane = new JScrollPane();
-        tableAreaBuilder.append(tableScrollPane, 3);
+ tabPane.add(Messages.getString("SQLQuery.log"), new JScrollPane(logTextArea));

-        queryPane.add(tableAreaBuilder.getPanel(), JSplitPane.BOTTOM);
+        tabPane.add(Messages.getString("SQLQuery.result"), tableTabPane);
+        queryPane.add(tabPane, JSplitPane.BOTTOM);
         JSplitPane treePane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);

         treePane.add(new JScrollPane(dbTree), JSplitPane.LEFT);
@@ -123,6 +115,24 @@

         setLayout(new BorderLayout());
         add(treePane, BorderLayout.CENTER);
+    }
+
+    /**
+     * Creates a new JPanel that displays a table of the result set.
+     */
+    private JPanel createResultSetTablePanel(ResultSet rs) {
+        JTextArea tableFilterTextArea = new JTextArea();
+ FormLayout tableAreaLayout = new FormLayout("pref, 10dlu, pref:grow", "pref, 10dlu, fill:min(pref;100dlu):grow"); + DefaultFormBuilder tableAreaBuilder = new DefaultFormBuilder(tableAreaLayout);
+        tableAreaBuilder.setDefaultDialogBorder();
+        tableAreaBuilder.append(Messages.getString("SQLQuery.filter"));
+        tableAreaBuilder.append(new JScrollPane(tableFilterTextArea));
+        tableAreaBuilder.nextLine();
+        tableAreaBuilder.nextLine();
+ JScrollPane tableScrollPane = new JScrollPane(ResultSetTableFactory.createResultSetJTableWithSearch(rs, tableFilterTextArea.getDocument()));
+        tableAreaBuilder.append(tableScrollPane, 3);
+
+        return tableAreaBuilder.getPanel();
     }

 }

Modified: trunk/src/ca/sqlpower/architect/swingui/query/SQLQueryEntryPanel.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/query/SQLQueryEntryPanel.java (original) +++ trunk/src/ca/sqlpower/architect/swingui/query/SQLQueryEntryPanel.java Wed Oct 1 11:17:13 2008
@@ -221,7 +221,6 @@
             }
             Connection con = conMap.get(ds);
             Statement stmt = null;
-            ResultSet rs = null;
             try {
                 stmt = con.createStatement();
                 try {
@@ -236,31 +235,41 @@

                 stmt.setMaxRows(rowLimit);
                 boolean sqlResult = stmt.execute(queryArea.getText());
+                boolean hasNext = true;

-                if (sqlResult) {
-                    rs = stmt.getResultSet();
-                    CachedRowSet rowSet = new CachedRowSet();
-                    rowSet.populate(rs);
- logger.debug("Result set row count is " + rowSet.size());
-
- for (ExecuteActionListener listener : executeListeners) {
-                        listener.sqlQueryExecuted(rowSet);
+                List<ResultSet> resultSets = new ArrayList<ResultSet>();
+                List<Integer> rowsAffected = new ArrayList<Integer>();
+
+                while (hasNext) {
+                    if (sqlResult) {
+                        ResultSet rs = stmt.getResultSet();
+                        CachedRowSet rowSet = new CachedRowSet();
+                        rowSet.populate(rs);
+ logger.debug("Result set row count is " + rowSet.size());
+                        resultSets.add(rowSet);
+                        rowsAffected.add(new Integer(rowSet.size()));
+                        rs.close();
+                    } else {
+ rowsAffected.add(new Integer(stmt.getUpdateCount())); + logger.debug("Update count is : " + stmt.getUpdateCount());
+                    }
+                    sqlResult = stmt.getMoreResults();
+ hasNext = !((sqlResult == false) && (stmt.getUpdateCount() == -1));
+                }
+
+                for (ExecuteActionListener listener : executeListeners) {
+                    List<ResultSet> newRSList = new ArrayList<ResultSet>();
+                    for (ResultSet rs : resultSets) {
+                        CachedRowSet rowSet = new CachedRowSet();
+                        rowSet.populate(rs);
+                        newRSList.add(rowSet);
                     }
-                } else {
-                    // TODO: Send the update count to the listeners.
- logger.debug("Update count is : " + stmt.getUpdateCount());
+                    listener.sqlQueryExecuted(resultSets, rowsAffected);
                 }

             } catch (SQLException ex) {
SPSUtils.showExceptionDialogNoReport(getParent(), Messages.getString("SQLQuery.failedConnectingToDB"), ex);
             } finally {
-                if (rs != null) {
-                    try {
-                        rs.close();
-                    } catch (SQLException ex) {
-                        ex.printStackTrace();
-                    }
-                }
                 if (stmt != null) {
                     try {
                         stmt.close();
@@ -333,7 +342,7 @@
         }

         public void databaseRemoved(DatabaseListChangeEvent e) {
-            if (databases.getSelectedItem().equals(e.getDataSource())) {
+ if (databases.getSelectedItem() != null && databases.getSelectedItem().equals(e.getDataSource())) {
                 databases.setSelectedItem(null);
             }


Modified: trunk/src/ca/sqlpower/architect/swingui/query/messages.properties
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/query/messages.properties (original) +++ trunk/src/ca/sqlpower/architect/swingui/query/messages.properties Wed Oct 1 11:17:13 2008
@@ -13,4 +13,8 @@
 SQLQuery.failedRollback=Rollback failed executing on the database.
 SQLQuery.mangeConnections=Manage Connections...
 SQLQuery.rollback=Rollback
-SQLQuery.rowLimit=Row Limit
\ No newline at end of file
+SQLQuery.rowLimit=Row Limit
+SQLQuery.rowsAffected=SQL statement affected {0} lines.
+SQLQuery.log=Log
+SQLQuery.filter=Filter
+SQLQuery.result=Result
\ No newline at end of file

Reply via email to