+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.taxeditor.propertysheet.reference;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.databinding.beans.BeansObservables;\r
+import org.eclipse.core.databinding.observable.list.WritableList;\r
+import org.eclipse.core.databinding.observable.map.IObservableMap;\r
+import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;\r
+import org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider;\r
+import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.jface.viewers.ViewerComparator;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.MouseAdapter;\r
+import org.eclipse.swt.events.MouseEvent;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Dialog;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Shell;\r
+import org.eclipse.swt.widgets.Table;\r
+import org.eclipse.swt.widgets.Text;\r
+\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 13.11.2008\r
+ * @version 1.0\r
+ */\r
+public class ReferenceSearchDialog extends Dialog {\r
+ private Table table;\r
+ private Text searchTermText;\r
+ private static final Logger logger = Logger\r
+ .getLogger(ReferenceSearchDialog.class);\r
+ \r
+ public static final int NOMREF = 1;\r
+ \r
+ protected Object result;\r
+ private Shell shell;\r
+ private WritableList searchResultsList;\r
+ private Button okButton;\r
+ \r
+ public ReferenceSearchDialog(Shell parent, int searchType) {\r
+ super(parent, SWT.NONE);\r
+ }\r
+\r
+ /**\r
+ * Open the dialog\r
+ * @return the result\r
+ */\r
+ public Object open() {\r
+ createContents();\r
+ shell.open();\r
+ shell.layout();\r
+ Display display = getParent().getDisplay();\r
+ while (!shell.isDisposed()) {\r
+ if (!display.readAndDispatch())\r
+ display.sleep();\r
+ }\r
+ return result;\r
+ }\r
+ \r
+ /**\r
+ * Create contents of the dialog\r
+ */\r
+ protected void createContents() {\r
+ \r
+ // Create shell for popup dialog \r
+ shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);\r
+ shell.setLayout(new GridLayout());\r
+ shell.setSize(500, 375);\r
+ shell.setText("Search for a reference in datasource");\r
+ \r
+ // Create composite for entire shell \r
+ final Composite composite = new Composite(shell, SWT.NONE);\r
+ composite.setLayout(new GridLayout());\r
+ composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+\r
+ // Create composite for search text, search term input, and "Search" button\r
+ final Composite searchComposite = new Composite(composite, SWT.NONE);\r
+ searchComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+ final GridLayout gridLayout = new GridLayout();\r
+ gridLayout.numColumns = 2;\r
+ searchComposite.setLayout(gridLayout);\r
+\r
+ // Create search text\r
+ final Label label = new Label(searchComposite, SWT.NONE);\r
+ label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));\r
+ label.setText("Enter a search term for a full reference, using '*' as a wildcard.");\r
+\r
+ // Create input field for search term\r
+ searchTermText = new Text(searchComposite, SWT.BORDER);\r
+ final GridData gd_searchTermText = new GridData(SWT.FILL, SWT.CENTER, true, false);\r
+ searchTermText.setLayoutData(gd_searchTermText);\r
+\r
+ // Create "Search" button\r
+ final Button searchButton = new Button(searchComposite, SWT.NONE);\r
+ searchButton.setLayoutData(new GridData());\r
+ searchButton.setText("Search");\r
+ searchButton.addMouseListener(new MouseAdapter() {\r
+ \r
+ // Populate search results table after clicking button\r
+ public void mouseUp(MouseEvent e) {\r
+ searchResultsList.clear();\r
+ searchResultsList.addAll(CdmUtil.getReferencesByTitle(searchTermText.getText()));\r
+ \r
+ // Disable OK button\r
+ okButton.setEnabled(false);\r
+ }\r
+ });\r
+\r
+ // Create composite for results table\r
+ final Composite resultsComposite = new Composite(composite, SWT.NONE);\r
+ resultsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+ resultsComposite.setLayout(new GridLayout());\r
+\r
+ // Create results table\r
+ final TableViewer resultsTableViewer = new TableViewer(resultsComposite, SWT.BORDER);\r
+ table = resultsTableViewer.getTable();\r
+ table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+\r
+ // Init results list\r
+ searchResultsList = new WritableList();\r
+ \r
+ // Create \r
+ ObservableListContentProvider provider = new ObservableListContentProvider();\r
+ resultsTableViewer.setContentProvider(provider);\r
+ \r
+ IObservableMap[] providerMaps = BeansObservables.observeMaps(\r
+ provider.getKnownElements(), ReferenceBase.class, new String[]{"titleCache"});\r
+ resultsTableViewer.setLabelProvider(new ObservableMapLabelProvider(providerMaps));\r
+ \r
+ resultsTableViewer.setInput(searchResultsList);\r
+ \r
+ // Sort results alphabetically\r
+ resultsTableViewer.setComparator(new ViewerComparator());\r
+ \r
+ // Create composite for "OK" and "Cancel" buttons\r
+ final Composite okCancelComposite = new Composite(composite, SWT.NONE);\r
+ okCancelComposite.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false));\r
+ final GridLayout gridLayout_1 = new GridLayout();\r
+ gridLayout_1.numColumns = 2;\r
+ okCancelComposite.setLayout(gridLayout_1);\r
+\r
+ // Create "Cancel" button\r
+ final Button cancelButton = new Button(okCancelComposite, SWT.NONE);\r
+ cancelButton.setText("Cancel");\r
+ cancelButton.addMouseListener(new MouseAdapter() {\r
+ \r
+ // Close dialog popup after clicking button \r
+ public void mouseUp(MouseEvent e) {\r
+ shell.dispose();\r
+ }\r
+ });\r
+\r
+ okButton = new Button(okCancelComposite, SWT.NONE);\r
+ okButton.setEnabled(false);\r
+ final GridData gd_okButton = new GridData();\r
+ okButton.setLayoutData(gd_okButton);\r
+ okButton.setText("OK");\r
+ okButton.addMouseListener(new MouseAdapter() {\r
+ \r
+ // Populate result and close dialog popup after clicking button\r
+ public void mouseUp(MouseEvent e) {\r
+ result = getSelectedReference();\r
+ shell.dispose();\r
+ }\r
+ });\r
+\r
+ }\r
+\r
+ protected ReferenceBase getSelectedReference() {\r
+ return null;\r
+ }\r
+ \r
+// private void createSearchResultsViewer(Composite parent) {\r
+// TableViewer searchResultsViewer = new TableViewer(parent, SWT.BORDER);\r
+//\r
+// // Add content provider\r
+// ObservableListContentProvider searchResultsProviderList = new ObservableListContentProvider();\r
+// searchResultsViewer.setContentProvider(searchResultsProviderList);\r
+//\r
+// // Label provider that listens for changes to name cache\r
+// IObservableMap[] searchResultsLabelProviderMaps = BeansObservables\r
+// .observeMaps(searchResultsProviderList.getKnownElements(),\r
+// TaxonNameBase.class, new String[] { "titleCache" });\r
+// searchResultsViewer.setLabelProvider(new ObservableMapLabelProvider(\r
+// searchResultsLabelProviderMaps));\r
+//\r
+// // Listens for new taxa opened for editing\r
+// searchResultsViewer.setInput(observableSearchResultsList);\r
+//\r
+// // Sort alphabetically\r
+// searchResultsViewer.setComparator(new ViewerComparator());\r
+// \r
+// // On double click, open name editor\r
+// searchResultsViewer.addDoubleClickListener(new IDoubleClickListener() {\r
+//\r
+// public void doubleClick(DoubleClickEvent event) {\r
+// IStructuredSelection selection = (StructuredSelection) event\r
+// .getSelection();\r
+// Object element = selection.getFirstElement();\r
+// if (element instanceof TaxonNameBase) {\r
+// setNewName((TaxonNameBase) element);\r
+// }\r
+// }\r
+// });\r
+\r
+}\r