Tightened up data source dialog.
authorp.ciardelli <p.ciardelli@localhost>
Tue, 17 Mar 2009 18:08:01 +0000 (18:08 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Tue, 17 Mar 2009 18:08:01 +0000 (18:08 +0000)
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/CdmDataSourceDialog.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/type/wizard/ListTypeWizardPage.java

index 2bf0b5345d2d277b50505e48bfdba3c56896745d..8720938e6ac3a92acd04958d2017eb1cc617ff9e 100644 (file)
@@ -12,7 +12,6 @@ package eu.etaxonomy.taxeditor.datasource;
 import java.util.ArrayList;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.eclipse.jface.action.Action;\r
 import org.eclipse.jface.action.MenuManager;\r
 import org.eclipse.jface.dialogs.Dialog;\r
 import org.eclipse.jface.dialogs.IDialogConstants;\r
@@ -25,6 +24,8 @@ import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.TableViewer;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.custom.CCombo;\r
+import org.eclipse.swt.events.ModifyEvent;\r
+import org.eclipse.swt.events.ModifyListener;\r
 import org.eclipse.swt.events.MouseAdapter;\r
 import org.eclipse.swt.events.MouseEvent;\r
 import org.eclipse.swt.events.SelectionAdapter;\r
@@ -78,14 +79,38 @@ public class CdmDataSourceDialog extends Dialog {
 \r
        private TableViewer dataSourceViewer;\r
 \r
+       private Button btnEdit;\r
+\r
+       private Button btnRemove;\r
+\r
+       private ICdmDataSource selectedDataSource;\r
+\r
+       private Shell parentShell;\r
+\r
+       /**\r
+        * Any time user modifies datasource properties, force a save or a cancel\r
+        */\r
+       ModifyListener modifyListener = new ModifyListener() {\r
+               @Override\r
+               public void modifyText(ModifyEvent e) {\r
+                       forceUserToSave(true);\r
+               }\r
+       };\r
+       \r
        /**\r
         * Create the dialog\r
         * @param parentShell\r
         */\r
        public CdmDataSourceDialog(Shell parentShell) {\r
                super(parentShell);\r
+               this.parentShell = parentShell;\r
        }\r
-\r
+       \r
+       protected void configureShell(Shell shell) {\r
+               super.configureShell(shell);\r
+               shell.setText("Edit Data Sources");\r
+       }\r
+       \r
        /**\r
         * Create contents of the dialog\r
         * @param parent\r
@@ -96,12 +121,50 @@ public class CdmDataSourceDialog extends Dialog {
                // Create top-level composite \r
                container = (Composite) super.createDialogArea(parent);\r
                GridLayout gridLayout = new GridLayout();\r
-               gridLayout.numColumns = 2;\r
+               gridLayout.numColumns = 5;\r
                container.setLayout(gridLayout);\r
 \r
+               // Create buttons to edit list\r
+               btnEdit = new Button(container, SWT.NONE);\r
+               btnEdit.setText("Edit ...");\r
+               btnEdit.setEnabled(false);\r
+               btnEdit.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+//                             if (getSelectedTypeDesignation() != null) {     \r
+//                                     createTypeDesignationWizard(getSelectedTypeDesignation());\r
+//                             }\r
+                               if (getSelectedDataSource() != null) {\r
+                                       showDatasource(getSelectedDataSource());\r
+                               }\r
+                       }\r
+               });\r
+\r
+               btnRemove = new Button(container, SWT.NONE);\r
+               btnRemove.setText("Remove");\r
+               btnRemove.setEnabled(false);\r
+               btnRemove.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               if (getSelectedDataSource() != null) {\r
+                                       removeDataSource(getSelectedDataSource());\r
+                                       setSelectedDataSource(null);\r
+                               }\r
+                       }\r
+               });\r
+               \r
+               final Button btnAdd = new Button(container, SWT.NONE);\r
+               final GridData gd_btnAdd = new GridData(SWT.RIGHT, SWT.CENTER, true,\r
+                               false);\r
+               btnAdd.setLayoutData(gd_btnAdd);\r
+               btnAdd.setText("Add ...");\r
+               btnAdd.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               showNewDatasource();\r
+                       }\r
+               });\r
+               \r
                // Create viewer for datasource list\r
                dataSourceViewer = new TableViewer(container, SWT.BORDER);\r
-               GridData viewerLayout = new GridData(SWT.LEFT, SWT.FILL, false, true);\r
+               GridData viewerLayout = new GridData(SWT.LEFT, SWT.FILL, false, true, 3, 1);\r
                viewerLayout.widthHint = 162;\r
                dataSourceViewer.getTable().setLayoutData(viewerLayout);\r
                \r
@@ -148,18 +211,23 @@ public class CdmDataSourceDialog extends Dialog {
                // Add right-click menu to delete datasources\r
                dataSourceControl.addSelectionListener(new SelectionAdapter() {\r
                        public void widgetSelected(SelectionEvent e) {\r
+\r
+                               setEnableTypeDesignationButtons(true);\r
                                \r
                                // Get content of widget's data field\r
-                               Object data = e.item.getData();\r
+                               if (e.item.getData() instanceof ICdmDataSource) {\r
+                                       setSelectedDataSource((ICdmDataSource) e.item.getData());                                       \r
+                               }\r
+                               \r
                                \r
                                // Clear menu\r
-                               manager.removeAll();\r
+//                             manager.removeAll();\r
                                        \r
                                // Only persistent data sources can be removed -\r
                                //      H2 database and "New datasource" entry remain untouched\r
-                               if (data instanceof CdmPersistentDataSource) {\r
-                                       manager.add(new RemoveDataSourceAction((CdmPersistentDataSource) data));\r
-                               }\r
+//                             if (data instanceof CdmPersistentDataSource) {\r
+//                                     manager.add(new RemoveDataSourceAction((CdmPersistentDataSource) data));\r
+//                             }\r
                        }\r
                });\r
 \r
@@ -203,6 +271,54 @@ public class CdmDataSourceDialog extends Dialog {
                return container;\r
        }\r
 \r
+       /**\r
+        * \r
+        */\r
+       protected void showNewDatasource() {\r
+               showDatasource(null);\r
+       }\r
+\r
+       /**\r
+        * @param selectedDataSource\r
+        */\r
+       protected void removeDataSource(ICdmDataSource dataSource) {\r
+               \r
+               if (dataSource instanceof CdmPersistentDataSource) {\r
+               \r
+                       // Delete from persistent data sources\r
+                       CdmDataSourceRepository.getDefault().delete((CdmPersistentDataSource) dataSource);\r
+               \r
+                       // Refresh list of data sources to reflect changes\r
+                       refreshDataSourceViewer();\r
+               \r
+               } else {\r
+                       MessageDialog.openInformation(parentShell, "Data source not persistent", \r
+                                       "This data source cannot be removed. Only persistent data sources can be removed.");\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @return\r
+        */\r
+       protected ICdmDataSource getSelectedDataSource() {\r
+               return selectedDataSource;\r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       protected void setSelectedDataSource(ICdmDataSource selectedDataSource) {\r
+               this.selectedDataSource = selectedDataSource;\r
+       }\r
+\r
+       /**\r
+        * @param enabled\r
+        */\r
+       protected void setEnableTypeDesignationButtons(boolean enabled) {\r
+               btnEdit.setEnabled(enabled);\r
+               btnRemove.setEnabled(enabled);\r
+       }\r
+\r
        private void showDatasource(ICdmDataSource dataSource) {\r
                \r
                // Put dataSource in field\r
@@ -235,7 +351,7 @@ public class CdmDataSourceDialog extends Dialog {
                } else {\r
                        // TODO Intrusive - change to text\r
                        MessageDialog.openInformation(GlobalController.getShell(), "Database not yet implemented", \r
-                                       "Creation of datasources using a(n) '" + type.getName() + "' database not yet implemented.");\r
+                                       "Creation or editing of datasources using a(n) '" + type.getName() + "' database not yet implemented.");\r
                }\r
        }\r
        \r
@@ -409,6 +525,7 @@ public class CdmDataSourceDialog extends Dialog {
                saveButtonLayout.widthHint = 76;\r
                saveButton.setLayoutData(saveButtonLayout);\r
                saveButton.setText("Save");\r
+               saveButton.setEnabled(false);\r
                \r
                // Save data to datasource on mouse click\r
                saveButton.addMouseListener(new MouseAdapter() {\r
@@ -426,13 +543,28 @@ public class CdmDataSourceDialog extends Dialog {
                        portText.setText(String.valueOf(dataSource.getPort()));                 \r
                }\r
                \r
+               // Listen for changes to any input fields in order to toggle Save / OK\r
+               databaseNameText.addModifyListener(modifyListener);\r
+               usernameText.addModifyListener(modifyListener);\r
+               passwordText.addModifyListener(modifyListener);\r
+               serverText.addModifyListener(modifyListener);\r
+               portText.addModifyListener(modifyListener);\r
+               forceUserToSave(false);\r
+               \r
                // Redraw\r
                container.layout(true, true);\r
        }\r
 \r
+       /**\r
+        * @param mustSave\r
+        */\r
+       private void forceUserToSave(boolean mustSave) {\r
+               saveButton.setEnabled(mustSave);\r
+               getButton(IDialogConstants.OK_ID).setEnabled(!mustSave);\r
+       }\r
+\r
        private void testDbConfig() {\r
                \r
-               \r
                ICdmDataSource dataSource = CdmDataSource.NewMySqlInstance(\r
                                serverText.getText(),\r
                                databaseNameText.getText(),\r
@@ -469,6 +601,11 @@ public class CdmDataSourceDialog extends Dialog {
                String password = passwordText.getText();\r
                Integer port = getPort(); // new Integer(portText.getText());\r
                \r
+               // Remove data source in case it already exists\r
+               if (dataSource != null) {\r
+                       removeDataSource(dataSource);\r
+               }\r
+               \r
                if (port > 0) {\r
                        // Save with port\r
                        CdmDataSourceRepository.getDefault().save (\r
@@ -489,37 +626,10 @@ public class CdmDataSourceDialog extends Dialog {
                                        username, \r
                                        password);                      \r
                }\r
-//             try {\r
-//                     \r
-//                     // Try casting port to an integer\r
-//                     Integer port = new Integer(portText.getText());\r
-//                     \r
-//                     logger.warn(port);\r
-//                     \r
-//                     // Save with port\r
-//                     CdmDataSourceRepository.getDefault().save (\r
-//                                     dataSourceName, \r
-//                                     databaseType, \r
-//                                     server, \r
-//                                     database, \r
-//                                     port, \r
-//                                     username, \r
-//                                     password);\r
-//                     \r
-//             } catch (ClassCastException e) {\r
-//                     \r
-//                     // If cast failed, save without port\r
-//                     CdmDataSourceRepository.getDefault().save (\r
-//                                     dataSourceName, \r
-//                                     databaseType, \r
-//                                     server, \r
-//                                     database,\r
-//                                     username, \r
-//                                     password);\r
-//             }\r
                \r
                // Refresh list of data sources to reflect changes\r
                refreshDataSourceViewer();\r
+               forceUserToSave(false);\r
        }\r
        \r
        private void refreshDataSourceViewer() {\r
@@ -527,25 +637,9 @@ public class CdmDataSourceDialog extends Dialog {
                // Populate the list with saved datasources and an entry for "new dataSource"\r
                dataSourceViewer.setInput(\r
                                CdmDataSourceRepository.getDefault().getAll());\r
-               dataSourceViewer.add("<< Add data source >>");\r
        }\r
-\r
-       private class RemoveDataSourceAction extends Action {\r
-               \r
-               private CdmPersistentDataSource dataSource;\r
-\r
-               RemoveDataSourceAction(CdmPersistentDataSource dataSource) {\r
-                       setText("Remove '" + dataSource.getName() + "' from saved data sources.");\r
-                       this.dataSource = dataSource;\r
-               }\r
-               \r
-               public void run() {\r
-                       \r
-                       // Delete from persistent data sources\r
-                       CdmDataSourceRepository.getDefault().delete(dataSource);\r
-                       \r
-                       // Refresh list of data sources to reflect changes\r
-                       refreshDataSourceViewer();\r
-               }\r
+       \r
+       public boolean close() {\r
+               return super.close();\r
        }\r
 }\r
index 7a3ef30a1fc172ee10d48f22ffa6fcfde4be6328..787027861b3e0c914167a22d13928f075c027a30 100644 (file)
@@ -123,7 +123,6 @@ public class ListTypeWizardPage extends WizardPage {
                typeDesignationsTable.addSelectionListener(new SelectionAdapter() {\r
                        public void widgetSelected(SelectionEvent e) { \r
                                setEnableTypeDesignationButtons(true);\r
-                               TableItem[] selectedItem = typeDesignationsTable.getSelection();\r
                                if (e.item.getData() instanceof TypeDesignationBase) {\r
                                        setSelectedTypeDesignation((TypeDesignationBase) e.item.getData());\r
                                }\r