--- /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());
+ }
+}