Quantum version 2.4.1
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / view / tableview / TableViewActionGroup.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/tableview/TableViewActionGroup.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/tableview/TableViewActionGroup.java
new file mode 100644 (file)
index 0000000..c99c134
--- /dev/null
@@ -0,0 +1,417 @@
+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());
+    }
+}