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
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
\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
// 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
// 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
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
} 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
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
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
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
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
// 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