Cleaning up SVN mess from package re-org
authorp.ciardelli <p.ciardelli@localhost>
Mon, 15 Sep 2008 08:59:00 +0000 (08:59 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Mon, 15 Sep 2008 08:59:00 +0000 (08:59 +0000)
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/ChooseRelatedNameWizardPage.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/ChooseRelationTypeWizardPage.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/ListNameRelationsWizardPage.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/NameRelationWizard.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/NameRelationWizardModel.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/NameRelationsListWizard.java [new file with mode: 0644]

index 62e3a9e51c781b34b5f4c98d3624e8884f42a732..e3ba982fde9b0c55f97874c25c76635d680734ee 100644 (file)
@@ -523,3 +523,9 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/name/NomStatusPropertySource.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/name/NonViralNamePropertySource.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/name/ZoologicalNamePropertySource.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/ChooseRelatedNameWizardPage.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/ChooseRelationTypeWizardPage.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/ListNameRelationsWizardPage.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/NameRelationWizard.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/NameRelationWizardModel.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/NameRelationsListWizard.java -text
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/ChooseRelatedNameWizardPage.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/ChooseRelatedNameWizardPage.java
new file mode 100644 (file)
index 0000000..e7307d3
--- /dev/null
@@ -0,0 +1,243 @@
+/**\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.namerelationswizard;\r
+\r
+import java.util.Set;\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.DoubleClickEvent;\r
+import org.eclipse.jface.viewers.IDoubleClickListener;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
+import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.jface.viewers.ViewerComparator;\r
+import org.eclipse.jface.wizard.WizardPage;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.ModifyEvent;\r
+import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\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.Display;\r
+import org.eclipse.swt.widgets.Event;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Listener;\r
+import org.eclipse.swt.widgets.Table;\r
+import org.eclipse.swt.widgets.TableItem;\r
+import org.eclipse.swt.widgets.Text;\r
+\r
+import eu.etaxonomy.cdm.model.name.NonViralName;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+\r
+/**\r
+ * An all-in-one relation wizard page where the user chooses a related name, a\r
+ * relationship type, and the relation's directionality.\r
+ * \r
+ * Note: does not yet return relation to wizard.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 04.06.2008\r
+ * @version 1.0\r
+ */\r
+public class ChooseRelatedNameWizardPage extends WizardPage {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(ChooseRelatedNameWizardPage.class);\r
+\r
+       private NameRelationWizardModel relationModel;\r
+\r
+       private Text txtNewName;\r
+       private Text txtName;\r
+       private boolean nameSelected = false;\r
+\r
+       private Table searchResultsTable;\r
+       private WritableList observableSearchResultsList = new WritableList();\r
+       private NonViralName noResultsDummyName = NonViralName.NewInstance(null);\r
+\r
+       public ChooseRelatedNameWizardPage(NameRelationWizardModel relationModel) {\r
+               super("");\r
+\r
+               this.relationModel = relationModel;\r
+\r
+               setTitle("Choose related name for '" + relationModel.getBaseName() + "\".");\r
+               setDescription("You can either choose from search results or create a new name. Use \"*\" for wildcard searching.");\r
+       }\r
+\r
+       @Override\r
+       public void createControl(Composite parent) {\r
+               Composite container = new Composite(parent, SWT.NULL);\r
+               final GridLayout gridLayout = new GridLayout();\r
+               gridLayout.numColumns = 3;\r
+               container.setLayout(gridLayout);\r
+\r
+               setControl(container);\r
+\r
+               final Label lblChooseName = new Label(container, SWT.NONE);\r
+               lblChooseName.setText("Choose name for relation:");\r
+               new Label(container, SWT.NONE);\r
+               new Label(container, SWT.NONE);\r
+\r
+               txtName = new Text(container, SWT.BORDER);\r
+               txtName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+\r
+               final Button btnSearch = new Button(container, SWT.NONE);\r
+               btnSearch.setEnabled(false);\r
+               btnSearch.setLayoutData(new GridData());\r
+               btnSearch.setText("Search");\r
+               btnSearch.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               String searchText = txtName.getText();\r
+                               btnSearch.setEnabled(false);\r
+                               Set<TaxonNameBase> results = CdmUtil.getNameByName(searchText);\r
+\r
+                               observableSearchResultsList.clear();\r
+                               if (results.size() == 0) {\r
+                                       // Populate observable list with dummy name\r
+                                       observableSearchResultsList.add(noResultsDummyName);\r
+                               } else {\r
+                                       observableSearchResultsList.addAll(results);\r
+                               }\r
+                               btnSearch.setEnabled(true);\r
+                       }\r
+               });\r
+\r
+               final Button btnNewName = new Button(container, SWT.NONE);\r
+               btnNewName.setEnabled(false);\r
+               btnNewName.setText("Create New Name");\r
+               btnNewName.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               setRawNewName(txtName.getText());\r
+                               btnNewName.setEnabled(false);\r
+                       }\r
+               });\r
+               createSearchResultsViewer(container);\r
+\r
+               txtName.addModifyListener(new ModifyListener() {\r
+                       @Override\r
+                       public void modifyText(ModifyEvent e) {\r
+                               if (txtName.getText().length() > 0) {\r
+                                       btnNewName.setEnabled(true);\r
+                                       btnSearch.setEnabled(true);\r
+                               } else {\r
+                                       btnNewName.setEnabled(false);\r
+                                       btnSearch.setEnabled(false);\r
+                               }\r
+                       }\r
+               });\r
+\r
+               txtNewName = new Text(container, SWT.BORDER);\r
+               final GridData gd_txtNewName = new GridData(SWT.FILL, SWT.CENTER, true,\r
+                               false, 3, 1);\r
+               txtNewName.setLayoutData(gd_txtNewName);\r
+               txtNewName.setFont(TaxEditorPlugin.getDefault().getFont\r
+                               (ITaxEditorConstants.CHOOSE_NAME_TEXT_FONT));           \r
+               txtNewName.setBackground(Display.getCurrent().getSystemColor(\r
+                               SWT.COLOR_WHITE));\r
+               txtNewName.setEditable(false);\r
+               \r
+               if (relationModel.getRelatedName() != null) {\r
+                       txtNewName.setText(CdmUtil.getDisplayName(relationModel.getRelatedName()));\r
+                       nameSelected = true;\r
+               }\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
+               searchResultsTable = searchResultsViewer.getTable();\r
+               searchResultsTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,\r
+                               true, 3, 1));\r
+               searchResultsTable.addListener(SWT.PaintItem, new Listener() {\r
+                       /**\r
+                        * If MenuItem with dummy name is being drawn, put it in italics.\r
+                        * \r
+                        * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)\r
+                        */\r
+                       public void handleEvent(Event event) {\r
+                               Object data = event.item.getData();\r
+                               if (data instanceof TaxonNameBase\r
+                                               && ((TaxonNameBase) data).equals(noResultsDummyName)) {\r
+                                       TableItem item = (TableItem) event.item;\r
+                                       item.setFont(TaxEditorPlugin.getDefault().getFont(\r
+                                                                       ITaxEditorConstants.MENU_ITEM_ITALICS_FONT));\r
+                                       item.setText("Search returned no results.");\r
+                               }\r
+                       }\r
+               });\r
+       }\r
+\r
+       @Override\r
+       public boolean canFlipToNextPage() {\r
+               return isPageComplete();\r
+       }\r
+\r
+       public boolean isPageComplete() {\r
+               return (nameSelected);\r
+       }\r
+       \r
+       private void updatePage() {\r
+               getWizard().getContainer().updateButtons();\r
+       }\r
+\r
+       private void setNewName(TaxonNameBase name) {\r
+               nameSelected = true;\r
+               relationModel.setRelatedName(name);\r
+               txtNewName.setText(CdmUtil.getDisplayName(name));\r
+               updatePage();\r
+       }\r
+\r
+       private void setRawNewName(String rawName) {\r
+               nameSelected = true;\r
+               TaxonNameBase newName = CdmUtil.parseFullReference(rawName, null, null);\r
+               relationModel.setRelatedName(newName);\r
+               txtNewName.setText(rawName + " (new)");\r
+               updatePage();\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/ChooseRelationTypeWizardPage.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/ChooseRelationTypeWizardPage.java
new file mode 100644 (file)
index 0000000..21e742a
--- /dev/null
@@ -0,0 +1,223 @@
+/**\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.namerelationswizard;\r
+\r
+import java.beans.PropertyChangeEvent;\r
+import java.beans.PropertyChangeListener;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.wizard.WizardPage;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.CCombo;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.events.SelectionListener;\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.Group;\r
+import org.eclipse.swt.widgets.Label;\r
+\r
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+\r
+/**\r
+ * An all-in-one relation wizard page where the user chooses a related name, a\r
+ * relationship type, and the relation\"s directionality.\r
+ * \r
+ * Note: does not yet return relation to wizard.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 04.06.2008\r
+ * @version 1.0\r
+ */\r
+public class ChooseRelationTypeWizardPage extends WizardPage {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(ChooseRelationTypeWizardPage.class);\r
+\r
+       private List<NameRelationshipType> relationTypes;\r
+\r
+       private CCombo combo;\r
+       private Label lblDirection;\r
+       private Button btnFromRelatedToBase;\r
+       private Button btnFromBaseToRelated;\r
+\r
+       private boolean typeSelected = false;\r
+       private boolean directionSelected = false;\r
+       \r
+       private SelectionListener radioSelectionListener = new SelectionAdapter() {\r
+               public void widgetSelected(SelectionEvent e) {\r
+                       directionSelected = true;\r
+                       updatePage();\r
+                       \r
+                       if (e.widget.equals(btnFromRelatedToBase)) {\r
+                               relationModel.setFromName(relationModel.getRelatedName());\r
+                               relationModel.setToName(relationModel.getBaseName());\r
+                       }\r
+                       \r
+                       if (e.widget.equals(btnFromBaseToRelated)) {\r
+                               relationModel.setFromName(relationModel.getBaseName());\r
+                               relationModel.setToName(relationModel.getRelatedName());\r
+                       }\r
+               }\r
+       };\r
+\r
+       private NameRelationWizardModel relationModel; \r
+\r
+       public ChooseRelationTypeWizardPage(final NameRelationWizardModel relationModel) {\r
+               super("");\r
+               setTitle("Choose relationship type and direction.");            \r
+               \r
+               this.relationModel = relationModel;\r
+               \r
+               setDescription();\r
+               \r
+               relationModel.addPropertyChangeListener(new PropertyChangeListener() {\r
+                       @Override\r
+                       public void propertyChange(PropertyChangeEvent evt) {\r
+                               if (evt.getPropertyName().equals(NameRelationWizardModel.RELATEDNAME)) {\r
+                                       setDescription();\r
+                                       setDirectionLabels();\r
+                               }\r
+                               if (evt.getPropertyName().equals(NameRelationWizardModel.RELATIONTYPE)) {\r
+                                       if (relationModel.getType() != null) {\r
+                                               typeSelected = true;\r
+                                               enableDirection();\r
+                                       } else {\r
+                                               typeSelected = false;\r
+                                               disableDirection();\r
+                                       }\r
+                                       updatePage();\r
+                               }                               \r
+                       }\r
+               });\r
+       }\r
+               \r
+       @Override\r
+       public void createControl(Composite parent) {\r
+               Composite container = new Composite(parent, SWT.NULL);\r
+               container.setLayout(new GridLayout());\r
+\r
+               setControl(container);\r
+\r
+               relationTypes = new ArrayList<NameRelationshipType>();\r
+\r
+               final Label lblType = new Label(container, SWT.NONE);\r
+               lblType.setText("Choose relationship type:");\r
+\r
+               combo = new CCombo(container, SWT.BORDER);\r
+               combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               for (NameRelationshipType relationType : TaxEditorPlugin.getDefault()\r
+                               .getSortedNameRelationshipTypes()) {\r
+                       relationTypes.add(relationType);\r
+                       combo.add(relationType.getLabel());\r
+               }\r
+               combo.setVisibleItemCount(relationTypes.size());\r
+\r
+               combo.addSelectionListener(new SelectionAdapter() {\r
+                       @Override\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               int typeIndex = combo.getSelectionIndex();\r
+                               relationModel.setType(relationTypes.get(typeIndex));\r
+                       }\r
+               });\r
+\r
+               final Group group = new Group(container, SWT.NONE);\r
+               group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
+               final GridLayout gridLayout = new GridLayout();\r
+               group.setLayout(gridLayout);\r
+\r
+               lblDirection = new Label(group, SWT.NONE);\r
+               final GridData gd_lblDirection = new GridData(SWT.FILL, SWT.CENTER, true, false);\r
+               gd_lblDirection.heightHint = 32;\r
+               gd_lblDirection.minimumHeight = 40;\r
+               lblDirection\r
+                               .setLayoutData(gd_lblDirection);\r
+               lblDirection.setEnabled(false);\r
+               lblDirection.setText("Choose relationship direction:");\r
+\r
+               btnFromRelatedToBase = new Button(group, SWT.RADIO);\r
+               btnFromRelatedToBase\r
+                               .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               btnFromRelatedToBase.setVisible(false);\r
+               btnFromRelatedToBase.addSelectionListener(radioSelectionListener);\r
+\r
+               btnFromBaseToRelated = new Button(group, SWT.RADIO);\r
+               btnFromBaseToRelated\r
+                               .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));\r
+               btnFromBaseToRelated.setVisible(false);\r
+               btnFromBaseToRelated.addSelectionListener(radioSelectionListener);\r
+               new Label(group, SWT.NONE);\r
+\r
+       }\r
+\r
+       private void setDescription() {\r
+               setDescription("Choose relationship type and direction for the name relation between \""\r
+                               + CdmUtil.getDisplayName(relationModel.getBaseName()) + "\" and \"" \r
+                               + CdmUtil.getDisplayName(relationModel.getRelatedName()) + "\".");              \r
+       }\r
+       \r
+       private void setDirectionLabels() {\r
+               String strDirection1 = "\"" + CdmUtil.getDisplayName(relationModel.getRelatedName()) + "\" "\r
+                               + "is \"" + combo.getText() + "\" of " + "\""\r
+                               + CdmUtil.getDisplayName(relationModel.getBaseName()) + "\"";\r
+               String strDirection2 = "\"" + CdmUtil.getDisplayName(relationModel.getBaseName()) + "\" "\r
+                               + "is \"" + combo.getText() + "\" of " + "\""\r
+                               + CdmUtil.getDisplayName(relationModel.getRelatedName()) + "\"";\r
+               \r
+               btnFromRelatedToBase.setText(strDirection1);\r
+               btnFromBaseToRelated.setText(strDirection2);            \r
+       }\r
+       \r
+       @Override\r
+       public boolean canFlipToNextPage() {\r
+               // Last page\r
+               return false;\r
+       }\r
+\r
+    public boolean isPageComplete() {\r
+        return (typeSelected && directionSelected);\r
+    }\r
+\r
+       private void updatePage() {\r
+               if (typeSelected) {\r
+                       if (!directionSelected) {\r
+                               enableDirection();\r
+                       }\r
+               } else {\r
+                       disableDirection();\r
+               }\r
+               getWizard().getContainer().updateButtons();\r
+       }\r
+       \r
+       private void enableDirection() {\r
+               setDirectionLabels();\r
+\r
+               lblDirection.setEnabled(true);\r
+               btnFromRelatedToBase.setEnabled(true);\r
+               btnFromBaseToRelated.setEnabled(true);\r
+\r
+               btnFromRelatedToBase.setVisible(true);\r
+               btnFromBaseToRelated.setVisible(true);\r
+       }\r
+\r
+       private void disableDirection() {\r
+               lblDirection.setEnabled(false);\r
+               btnFromRelatedToBase.setEnabled(false);\r
+               btnFromBaseToRelated.setEnabled(false);\r
+\r
+               btnFromRelatedToBase.setSelection(false);\r
+               btnFromBaseToRelated.setSelection(false);\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/ListNameRelationsWizardPage.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/ListNameRelationsWizardPage.java
new file mode 100644 (file)
index 0000000..ab0f255
--- /dev/null
@@ -0,0 +1,222 @@
+/**\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.namerelationswizard;\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.DoubleClickEvent;\r
+import org.eclipse.jface.viewers.IDoubleClickListener;\r
+import org.eclipse.jface.viewers.StructuredSelection;\r
+import org.eclipse.jface.viewers.TableViewer;\r
+import org.eclipse.jface.wizard.WizardPage;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.graphics.Image;\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.Table;\r
+import org.eclipse.swt.widgets.TableItem;\r
+\r
+import eu.etaxonomy.cdm.model.name.NameRelationship;\r
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.actions.cdm.DeleteNameRelationAction;\r
+import eu.etaxonomy.taxeditor.actions.ui.OpenNameRelationWizardAction;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 06.06.2008\r
+ * @version 1.0\r
+ */\r
+public class ListNameRelationsWizardPage extends WizardPage {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(ListNameRelationsWizardPage.class);\r
+\r
+       private Table nameRelationsTable;\r
+       private WritableList nameRelationsList = new WritableList();\r
+       private TaxonNameBase name;\r
+\r
+       private Button btnRemove;\r
+       private Button btnEdit;\r
+\r
+       private NameRelationship selectedRelation;\r
+\r
+       public ListNameRelationsWizardPage(TaxonNameBase name) {\r
+               super("");\r
+\r
+               this.name = name;\r
+\r
+               this.nameRelationsList.addAll(name.getNameRelations());\r
+\r
+               setTitle("Nomenclatural relations for \""\r
+                               + CdmUtil.getDisplayName(name) + "\".");\r
+               setDescription("Select a relation and click \"Edit ...\" or \"Remove\", or click \"Add ...\" to create a new relation.");\r
+       }\r
+\r
+       @Override\r
+       public void createControl(Composite parent) {\r
+               Composite container = new Composite(parent, SWT.NULL);\r
+               final GridLayout gridLayout = new GridLayout();\r
+               gridLayout.numColumns = 3;\r
+               container.setLayout(gridLayout);\r
+\r
+               setControl(container);\r
+\r
+               btnEdit = new Button(container, SWT.NONE);\r
+               btnEdit.setText("Edit ...");\r
+\r
+               btnRemove = new Button(container, SWT.NONE);\r
+               btnRemove.setText("Remove");\r
+               btnRemove.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               if (getSelectedRelation() != null) {\r
+                                       new DeleteNameRelationAction(name, getSelectedRelation()).run();\r
+                                       nameRelationsList.remove(getSelectedRelation());\r
+                                       setSelectedRelation(null);\r
+                               }\r
+                       }\r
+               });\r
+\r
+               setEnableExistingRelationButtons(false);\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
+                               createRelationWizard(null);\r
+                       }\r
+               });\r
+\r
+               final TableViewer tableViewer = new TableViewer(container, SWT.BORDER | SWT.SINGLE);\r
+\r
+               nameRelationsTable = tableViewer.getTable();\r
+               nameRelationsTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,\r
+                               true, 3, 1));\r
+               nameRelationsTable.addSelectionListener(new SelectionAdapter() {\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               setEnableExistingRelationButtons(true);\r
+                               TableItem[] selectedItem = nameRelationsTable.getSelection();\r
+                               if (e.item.getData() instanceof NameRelationship) {\r
+                                       setSelectedRelation((NameRelationship) e.item.getData());\r
+                               }\r
+                       }\r
+               });\r
+\r
+               ObservableListContentProvider providerList = new ObservableListContentProvider();\r
+               tableViewer.setContentProvider(providerList);\r
+\r
+               IObservableMap[] providerMaps = BeansObservables.observeMaps(\r
+                               providerList.getKnownElements(), NameRelationship.class,\r
+                               new String[] { "fromName", "toName", "type" });\r
+               tableViewer.setLabelProvider(new ObservableMapLabelProvider(\r
+                               providerMaps) {\r
+                       public String getColumnText(Object element, int columnIndex) {\r
+                               if (element instanceof NameRelationship) {\r
+                                       NameRelationship nameRelationship = (NameRelationship) element;\r
+                                       return getRelationshipString(nameRelationship);\r
+                               }\r
+                               return "";\r
+                       }\r
+\r
+                       public Image getColumnImage(Object element, int columnIndex) {\r
+                               if (element instanceof NameRelationship) {\r
+                                       NameRelationship nameRelationship = (NameRelationship) element;\r
+                                       return getRelationshipImage(nameRelationship);\r
+                               }\r
+                               return null;\r
+                       }\r
+               });\r
+               // TODO try name.getNameRelations()\r
+               tableViewer.setInput(nameRelationsList);\r
+               tableViewer.addDoubleClickListener(new IDoubleClickListener() {\r
+                       @Override\r
+                       public void doubleClick(DoubleClickEvent event) {\r
+                               if (((StructuredSelection) event.getSelection())\r
+                                               .getFirstElement() instanceof NameRelationship) {\r
+                                       NameRelationship relation = (NameRelationship) ((StructuredSelection) event\r
+                                                       .getSelection()).getFirstElement();\r
+                                       createRelationWizard(relation);\r
+                               }\r
+                       }\r
+               });\r
+       }\r
+\r
+       private void setSelectedRelation(NameRelationship selectedRelation) {\r
+               this.selectedRelation = selectedRelation;\r
+       }\r
+\r
+       private NameRelationship getSelectedRelation() {\r
+               return selectedRelation;\r
+       }\r
+       \r
+       private void createRelationWizard(NameRelationship relation) {\r
+               if (relation == null) {\r
+                       new OpenNameRelationWizardAction(name, nameRelationsList).run();\r
+               } else {\r
+//                     new OpenNameRelationWizardAction(name, relation).run();\r
+               }\r
+       }\r
+\r
+       protected void setEnableExistingRelationButtons(boolean enabled) {\r
+               btnRemove.setEnabled(enabled);\r
+               btnEdit.setEnabled(false);\r
+       }\r
+\r
+       private Image getRelationshipImage(NameRelationship nameRelationship) {\r
+               if (nameRelationship.getType().equals(NameRelationshipType.BASIONYM())) {\r
+                       return TaxEditorPlugin.getDefault().getImage(\r
+                                       ITaxEditorConstants.BASIONYM_ICON);\r
+               }\r
+               if (nameRelationship.getType().equals(\r
+                               NameRelationshipType.ORTHOGRAPHIC_VARIANT())) {\r
+                       return TaxEditorPlugin.getDefault().getImage(\r
+                                       ITaxEditorConstants.ORTHOGRAPHIC_VARIANT_ICON);\r
+               }\r
+//             return TaxEditorPlugin.getDefault().getImage(\r
+//                             ITaxEditorConstants.EDIT_ICON);\r
+               return null;\r
+       }\r
+\r
+       private String getRelationshipString(NameRelationship nameRelationship) {\r
+               String fromName = null;\r
+               String type = null;\r
+               String toName = null;\r
+               if (nameRelationship.getFromName() == null) {\r
+                       fromName = "";\r
+               } else {\r
+                       fromName = CdmUtil.getDisplayName(nameRelationship.getFromName());\r
+               }\r
+               if (nameRelationship.getType() == null) {\r
+                       type = "";\r
+               } else {\r
+                       type = nameRelationship.getType().getLabel();\r
+               }\r
+               if (nameRelationship.getToName() == null) {\r
+                       toName = "";\r
+               } else {\r
+                       toName = CdmUtil.getDisplayName(nameRelationship.getToName());\r
+               }\r
+               return "\"" + fromName + "\" is \"" + type + "\" of \"" + toName + "\"";\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/NameRelationWizard.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/NameRelationWizard.java
new file mode 100644 (file)
index 0000000..b139d91
--- /dev/null
@@ -0,0 +1,75 @@
+/**\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.namerelationswizard;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.util.IPropertyChangeListener;\r
+import org.eclipse.jface.util.PropertyChangeEvent;\r
+import org.eclipse.jface.wizard.IWizardPage;\r
+import org.eclipse.jface.wizard.Wizard;\r
+\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.actions.cdm.CreateNameRelationAction;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 04.06.2008\r
+ * @version 1.0\r
+ */\r
+public class NameRelationWizard extends Wizard {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(NameRelationWizard.class);\r
+       \r
+       public static final String ID = "eu.etaxonomy.taxeditor.namerelationwizard";\r
+\r
+       private NameRelationWizardModel relationModel;\r
+\r
+       public NameRelationWizard(NameRelationWizardModel relationModel) {\r
+               super();\r
+               \r
+               this.relationModel = relationModel;\r
+       }\r
+\r
+       public void addPages() {\r
+               IWizardPage chooseNamePage = new ChooseRelatedNameWizardPage(relationModel);\r
+       addPage(chooseNamePage);\r
+       IWizardPage chooseRelationPage = new ChooseRelationTypeWizardPage(relationModel);\r
+       addPage(chooseRelationPage);\r
+    }\r
+       \r
+       @Override\r
+       public boolean performFinish() {\r
+               CreateNameRelationAction nameRelationAction = new CreateNameRelationAction(relationModel.getFromName(),\r
+                               relationModel.getType(),\r
+                               relationModel.getToName());\r
+//             if (relationModel.getNameRelationsList() != null) {\r
+                       \r
+                       // Action will notify when relation has been created \r
+                       nameRelationAction.addPropertyChangeListener(new IPropertyChangeListener() {\r
+                               @Override\r
+                               public void propertyChange(PropertyChangeEvent event) {\r
+                                       logger.warn(event.getProperty());\r
+                                       if (event.getProperty().equals(\r
+                                                       ITaxEditorConstants.NAMERELATION)) {\r
+                                               logger.warn("checking name relations list");\r
+                                               if (relationModel.getNameRelationsList() != null) {\r
+                                                       logger.warn("clearing name relations");\r
+                                                       relationModel.getNameRelationsList().clear();\r
+                                                       relationModel.getNameRelationsList().addAll(relationModel.getBaseName().getNameRelations());\r
+                                               }\r
+                                       }\r
+                                       \r
+                               }\r
+                       });\r
+//             }\r
+               nameRelationAction.run();\r
+               return true;\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/NameRelationWizardModel.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/NameRelationWizardModel.java
new file mode 100644 (file)
index 0000000..34be929
--- /dev/null
@@ -0,0 +1,130 @@
+/**\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.namerelationswizard;\r
+\r
+import java.beans.PropertyChangeListener;\r
+import java.beans.PropertyChangeSupport;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.name.NameRelationship;\r
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 05.06.2008\r
+ * @version 1.0\r
+ */\r
+public class NameRelationWizardModel {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(NameRelationWizardModel.class);\r
+\r
+       protected static final String RELATEDNAME = "relatedname";\r
+       protected static final String RELATIONTYPE = "relationtype";\r
+\r
+       private TaxonNameBase baseName;\r
+       private TaxonNameBase relatedName;\r
+\r
+       private TaxonNameBase fromName;\r
+       private TaxonNameBase toName;\r
+       private NameRelationshipType type;\r
+       \r
+       // Stores pre-existing relation, if any exists\r
+       private NameRelationship nameRelationship;\r
+       // List of the base name's relations\r
+       private List<NameRelationship> nameRelationsList; \r
+\r
+       private PropertyChangeSupport propertyChangeSupport;\r
+\r
+\r
+       public NameRelationWizardModel(TaxonNameBase baseName) {\r
+               this.baseName = baseName;\r
+               this.propertyChangeSupport = new PropertyChangeSupport(this);\r
+       }\r
+\r
+       private void firePropertyChange(String propertyName, Object oldValue,\r
+                       Object newValue) {\r
+               propertyChangeSupport.firePropertyChange(propertyName, oldValue,\r
+                               newValue);\r
+       }\r
+\r
+       public void addPropertyChangeListener(String propertyName,\r
+                       PropertyChangeListener listener) {\r
+               propertyChangeSupport.addPropertyChangeListener(propertyName, listener);\r
+       }\r
+\r
+       public void addPropertyChangeListener(PropertyChangeListener listener) {\r
+               propertyChangeSupport.addPropertyChangeListener(listener);\r
+       }\r
+\r
+       public TaxonNameBase getBaseName() {\r
+               return baseName;\r
+       }\r
+\r
+       public void setBaseName(TaxonNameBase baseName) {\r
+               this.baseName = baseName;\r
+       }\r
+\r
+       public TaxonNameBase getRelatedName() {\r
+               return relatedName;\r
+       }\r
+\r
+       public void setRelatedName(TaxonNameBase relatedName) {\r
+               this.relatedName = relatedName;\r
+               firePropertyChange(RELATEDNAME, null, relatedName);\r
+       }\r
+\r
+       public TaxonNameBase getFromName() {\r
+               return fromName;\r
+       }\r
+\r
+       public void setFromName(TaxonNameBase fromName) {\r
+               this.fromName = fromName;\r
+               logger.warn("Setting from name: " + CdmUtil.getDisplayName(fromName));\r
+       }\r
+\r
+       public TaxonNameBase getToName() {\r
+               return toName;\r
+       }\r
+\r
+       public void setToName(TaxonNameBase toName) {\r
+               this.toName = toName;\r
+               logger.warn("Setting to name: " + CdmUtil.getDisplayName(toName));\r
+       }\r
+\r
+       public NameRelationshipType getType() {\r
+               return type;\r
+       }\r
+\r
+       public void setType(NameRelationshipType type) {\r
+               this.type = type;\r
+               firePropertyChange(RELATIONTYPE, null, type);\r
+       }\r
+\r
+       public void setRelation(NameRelationship nameRelationship) {\r
+               this.nameRelationship = nameRelationship;               \r
+       }\r
+\r
+       public NameRelationship getRelation() {\r
+               return nameRelationship;                \r
+       }\r
+       \r
+       public void setNameRelationsList(List<NameRelationship> nameRelationsList) {\r
+               this.nameRelationsList = nameRelationsList;\r
+       }\r
+       \r
+       public List<NameRelationship> getNameRelationsList() {\r
+               return nameRelationsList;\r
+       }\r
+\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/NameRelationsListWizard.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/propertysheet/namerelationswizard/NameRelationsListWizard.java
new file mode 100644 (file)
index 0000000..7152a1b
--- /dev/null
@@ -0,0 +1,47 @@
+/**\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.namerelationswizard;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.wizard.IWizardPage;\r
+import org.eclipse.jface.wizard.Wizard;\r
+\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 06.06.2008\r
+ * @version 1.0\r
+ */\r
+public class NameRelationsListWizard extends Wizard {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(NameRelationsListWizard.class);\r
+       \r
+       private TaxonNameBase name;\r
+\r
+       public NameRelationsListWizard(TaxonNameBase name) {\r
+               super();\r
+               \r
+               this.name = name;\r
+       }\r
+\r
+       public void addPages() {\r
+               IWizardPage chooseNamePage = new ListNameRelationsWizardPage(name);\r
+       addPage(chooseNamePage);\r
+    }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.jface.wizard.Wizard#performFinish()\r
+        */\r
+       @Override\r
+       public boolean performFinish() {\r
+               return true;\r
+       }\r
+}\r