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
--- /dev/null
+/**\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
--- /dev/null
+/**\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
--- /dev/null
+/**\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
--- /dev/null
+/**\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
--- /dev/null
+/**\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
--- /dev/null
+/**\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