First commit after refactoring to new operations model. Not yet complete - only doing...
authorp.ciardelli <p.ciardelli@localhost>
Fri, 16 Jan 2009 12:15:28 +0000 (12:15 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Fri, 16 Jan 2009 12:15:28 +0000 (12:15 +0000)
51 files changed:
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ApplicationActionBarAdvisor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxEditorPlugin.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/UiUtil.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/SaveAllAction.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/SaveTaxonAction.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/AddBasionymCompositeAction.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/ChangeSynonymToTaxonUiAction.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/ChangeTaxonToSynonymAction.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/Messages.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/OpenTaxonEditorAction.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/RemoveBasionymCompositeAction.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/messages.properties [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditor.java [moved from eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditorView.java with 82% similarity]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EditorGroupedComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/FreeTextElementFactory.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/GroupComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/GroupedComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFreeTextElementFactory.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFreeTextElementRepository.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/INameEditorCompositeRepository.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/LineWrapSupport.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/DescriptionLabelComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionEditorView.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/AcceptedNameComposite.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/HomotypicalGroupComposite.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/Messages.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/MisappliedGroupComposite.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/MisappliedNameComposite.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/NameComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/SynonymComposite.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditorView.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/messages.properties
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/CdmSessionDataRepository.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/FavoritesTableViewer.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/FavoritesView.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/RecentNamesTableViewer.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/RecentNamesView.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeView.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/AbstractEditorOperation.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeHomotypicGroupOperation.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeMisappliedNameToSynonymOperation.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeSynonymToMisappliedNameOperation.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeSynonymToTaxonOperation.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/CreateSynonymInNewGroupOperation.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymAcceptedOperation.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymGroupBasionymOperation.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/RemoveSynonymOperation.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/UnmakeSynonymGroupBasionymOperation.java [new file with mode: 0644]

index 5f21e37de49f850ad3029ef67ac2983b55a58e34..0645dbc4db594b3e884b1c468933d8eeb2483ee6 100644 (file)
@@ -437,7 +437,6 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/Cha
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/CreateNewHeterotypicCompositeAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/DeleteMisappliedNameCompositeAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/DeleteSynonymCompositeAction.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/Messages.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/MoveCompositeToMisappliedCompositeAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/MoveTaxonDialogAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/OpenNameRelationWizardAction.java -text
@@ -447,13 +446,12 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/Ope
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/RemoveBasionymCompositeAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/AddDescriptionElementCompositeAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/description/DeleteElementCompositeAction.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/messages.properties -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/CdmDataSourceDialog.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/CdmDataSourceRepository.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/CdmTransactionController.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/ICdmDataSourceRepository.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/datasource/RegisterDatabaseDialog.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditorView.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/AnnotationMarkerAccess.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/CompositeBorderDecorator.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/ContextMenu.java -text
@@ -463,12 +461,14 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EditorG
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EmptyEditorView.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/EmptyTextViewerPrompt.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/ErrorAnnotation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/FreeTextElementFactory.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/GroupComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/GroupCompositeLabel.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/GroupedComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFavoritesDraggable.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFreeTextElementRepository.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFreeTextElementFactory.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IHasPropertySource.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/INameEditorCompositeRepository.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IParentDataAdapter.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/LineBreakListener.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/LineWrapSquigglesStrategy.java -text
@@ -484,12 +484,17 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/descrip
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/FeatureGroupComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/description/TaxonDescriptionEditorView.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/AcceptedNameComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/CdmParserController.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/HomotypicalGroupComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/IterableSynonymyList.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/Messages.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/MisappliedGroupComposite.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/MisappliedNameComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/NameComposite.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/NameViewer.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditorView.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/SynonymComposite.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/messages.properties -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/io/InputWizard.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/io/InputWizard2.java -text
@@ -507,6 +512,16 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/Sea
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeLabelProvider.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeView.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/navigation/TaxonomicTreeViewer.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/AbstractEditorOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeHomotypicGroupOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeMisappliedNameToSynonymOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeSynonymToMisappliedNameOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeSynonymToTaxonOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/CreateSynonymInNewGroupOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymAcceptedOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymGroupBasionymOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/RemoveSynonymOperation.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/UnmakeSynonymGroupBasionymOperation.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/CdmPreferences.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/DescriptionPreferences.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/preference/FeaturePreferences.java -text
index 5675677a9070513cea39bb49a93f1756f6770b7f..7c90b5a019d34d3ea132e2b726ef44292a0f002c 100644 (file)
@@ -22,6 +22,7 @@ import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
 import org.eclipse.ui.application.ActionBarAdvisor;
 import org.eclipse.ui.application.IActionBarConfigurer;
+import org.eclipse.ui.operations.UndoActionHandler;
 
 import eu.etaxonomy.cdm.io.common.ImportWrapper;
 import eu.etaxonomy.taxeditor.actions.io.ExportAction;
@@ -48,6 +49,7 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
        private IWorkbenchAction saveAction;
        private IWorkbenchAction preferencesAction;
        private IWorkbenchAction undoAction;
+       private IWorkbenchAction redoAction;
        
        private IAction newNameAction;
 
@@ -55,6 +57,7 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
 
        private IAction exportJaxbAction;
 
+
        public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
                super(configurer);
        }
@@ -75,6 +78,9 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
                undoAction = ActionFactory.UNDO.create(window);
                register(undoAction);
                
+               redoAction = ActionFactory.REDO.create(window);
+               register(redoAction);
+               
                exitAction = ActionFactory.QUIT.create(window);
                register(exitAction);
                
@@ -107,6 +113,8 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
                MenuManager fileMenu = new MenuManager("&File",
                                null);
                
+               MenuManager editMenu = new MenuManager("&Edit", null);
+               
                // Create submenu for imports
                MenuManager importMenu = new MenuManager("Import ...", null);
                
@@ -117,13 +125,16 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
                menuBar.add(fileMenu);
                fileMenu.add(newNameAction);
                fileMenu.add(saveAction);
-               fileMenu.add(undoAction);
                fileMenu.add(new Separator());
                fileMenu.add(importMenu);
                fileMenu.add(exportMenu);
                fileMenu.add(new Separator());
                fileMenu.add(exitAction);
                
+               menuBar.add(editMenu);
+               editMenu.add(undoAction);
+               editMenu.add(redoAction);
+               
                // Populate submenu for imports
                for (IAction importAction : importActionList) {
                        importMenu.add(importAction);
index 33a49354308e1f322a3cd11f9e5db1f576d3afc9..0342c2317a57322d6df3cd8a3713ac8012ed5947 100644 (file)
@@ -180,32 +180,6 @@ public class TaxEditorPlugin extends AbstractUIPlugin {
                return applicationController;\r
        }\r
 \r
-       /***************************************************************************\r
-        * OBSERVABLE LISTS\r
-        **************************************************************************/\r
-\r
-       private WritableList observableRecentNamesList = null;\r
-       private WritableList observableFavoritesList = null;\r
-\r
-       public WritableList getObservableRecentNamesList() {\r
-               if (observableRecentNamesList == null) {\r
-                       observableRecentNamesList = new WritableList();\r
-               }\r
-               return observableRecentNamesList;\r
-       }\r
-\r
-       public WritableList getObservableFavoritesList() {\r
-               if (observableFavoritesList == null) {\r
-                       observableFavoritesList = new WritableList();\r
-               }\r
-               return observableFavoritesList;\r
-       }\r
-       \r
-       public void clearObservableLists() {\r
-               observableRecentNamesList = null;\r
-               observableFavoritesList = null;\r
-       }\r
-\r
        /***************************************************************************\r
         * IMAGE REGISTRY\r
         **************************************************************************/\r
index 1f4da08028f40af7b3b8a656fff598fc477d7e33..7025581041030c421a18c52ca002c5880ec4cf88 100644 (file)
@@ -9,7 +9,9 @@
 \r
 package eu.etaxonomy.taxeditor;\r
 \r
+import java.util.HashMap;\r
 import java.util.HashSet;\r
+import java.util.Map;\r
 import java.util.Set;\r
 import java.util.SortedSet;\r
 \r
@@ -20,8 +22,6 @@ import org.eclipse.core.commands.operations.OperationHistoryFactory;
 import org.eclipse.core.runtime.IProgressMonitor;\r
 import org.eclipse.jface.action.IStatusLineManager;\r
 import org.eclipse.swt.graphics.Color;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
 import org.eclipse.swt.widgets.Shell;\r
 import org.eclipse.swt.widgets.Tree;\r
 import org.eclipse.swt.widgets.TreeItem;\r
@@ -35,19 +35,16 @@ import org.eclipse.ui.IViewReference;
 import org.eclipse.ui.IWorkbench;\r
 import org.eclipse.ui.IWorkbenchPage;\r
 import org.eclipse.ui.PartInitException;\r
-import org.eclipse.ui.forms.IManagedForm;\r
 import org.eclipse.ui.operations.IWorkbenchOperationSupport;\r
 import org.eclipse.ui.views.properties.PropertySheet;\r
 import org.eclipse.ui.views.properties.PropertySheetPage;\r
 \r
-import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.editor.CompositeBorderDecorator;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
 import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
 import eu.etaxonomy.taxeditor.model.NameEditorInput;\r
 import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeView;\r
@@ -182,6 +179,12 @@ public class UiUtil {
                        throws PartInitException {\r
                return getActivePage().openEditor(input, editorId);\r
        }\r
+       \r
+       public static IEditorPart openTaxonEditor(Taxon taxon)\r
+                       throws PartInitException{\r
+               IEditorInput input = new NameEditorInput(taxon);\r
+               return openEditor(input, MultiPageTaxonEditor.ID);\r
+       }\r
 \r
        /**\r
         * @param taxon\r
@@ -273,11 +276,12 @@ public class UiUtil {
        }\r
        \r
        public static IOperationHistory getOperationHistory() {\r
-               if (operationHistory == null) {\r
-                       operationHistory = OperationHistoryFactory.getOperationHistory();\r
-               }\r
-               return operationHistory;\r
-//             return getOperationSupport().getOperationHistory();\r
+//             if (operationHistory == null) {\r
+////                   operationHistory = getOperationSupport().getOperationHistory();\r
+//                     operationHistory = OperationHistoryFactory.getOperationHistory();\r
+//             }\r
+//             return operationHistory;\r
+               return getOperationSupport().getOperationHistory();\r
        }\r
 \r
        public static IUndoContext getWorkbenchUndoContext() {\r
@@ -298,32 +302,32 @@ public class UiUtil {
        }\r
        \r
 \r
-       public static EditorGroupComposite getMisappliedNameGroupComposite(\r
-                       IManagedForm managedForm) {\r
-\r
-               // Iterate through parent's children until we find a composite which has a data field\r
-               //      for MISAPPLIED_NAME\r
-               Composite parent = managedForm.getForm().getBody();\r
-               for (Control groupComposite : parent.getChildren()) {\r
-                       if (groupComposite instanceof EditorGroupComposite) {\r
-                               if (groupComposite.getData(ITaxEditorConstants.MISAPPLIED_NAME) != null) {\r
-                                       return (EditorGroupComposite) groupComposite;\r
-                               }\r
-                       }\r
-               }\r
-               return null;\r
-       }\r
-\r
-       public static EditorGroupComposite createMisappliedNameGroupComposite(\r
-                       IManagedForm managedForm) {\r
-               \r
-               Composite parent = managedForm.getForm().getBody();\r
-               \r
-               EditorGroupComposite composite = new EditorGroupComposite(parent, managedForm);\r
-               composite.setData(ITaxEditorConstants.MISAPPLIED_NAME,"");\r
-               new CompositeBorderDecorator(composite, managedForm);\r
-               return composite;\r
-       }\r
+//     public static EditorGroupComposite getMisappliedNameGroupComposite(\r
+//                     IManagedForm managedForm) {\r
+//\r
+//             // Iterate through parent's children until we find a composite which has a data field\r
+//             //      for MISAPPLIED_NAME\r
+//             Composite parent = managedForm.getForm().getBody();\r
+//             for (Control groupComposite : parent.getChildren()) {\r
+//                     if (groupComposite instanceof EditorGroupComposite) {\r
+//                             if (groupComposite.getData(ITaxEditorConstants.MISAPPLIED_NAME) != null) {\r
+//                                     return (EditorGroupComposite) groupComposite;\r
+//                             }\r
+//                     }\r
+//             }\r
+//             return null;\r
+//     }\r
+\r
+//     public static EditorGroupComposite createMisappliedNameGroupComposite(\r
+//                     IManagedForm managedForm) {\r
+//             \r
+//             Composite parent = managedForm.getForm().getBody();\r
+//             \r
+//             EditorGroupComposite composite = new EditorGroupComposite(parent, managedForm);\r
+//             composite.setData(ITaxEditorConstants.MISAPPLIED_NAME,"");\r
+//             new CompositeBorderDecorator(composite, managedForm);\r
+//             return composite;\r
+//     }\r
        \r
        public static void setStatusMessage(String msg) {\r
                getPropertySheet().getViewSite().getActionBars().getStatusLineManager().setMessage(msg); \r
@@ -460,6 +464,8 @@ public class UiUtil {
 \r
        private static IStatusLineManager statusLineManager;\r
 \r
+       private static Map<Taxon, TaxonNameEditor> taxonNameEditors;\r
+\r
        public static void setIsSaving(boolean isSavin) {\r
                isSaving = isSavin;\r
        }\r
@@ -480,4 +486,25 @@ public class UiUtil {
                statusLineManager.setCancelEnabled(false);\r
                return statusLineManager.getProgressMonitor();\r
        }\r
+\r
+       public static void addTaxonNameEditor(\r
+                       Taxon taxon, TaxonNameEditor taxonNameEditor) {\r
+               if (taxonNameEditors == null) {\r
+                       taxonNameEditors = new HashMap<Taxon, TaxonNameEditor>();\r
+               }\r
+               taxonNameEditors.put(taxon, taxonNameEditor);\r
+       }\r
+\r
+       public static TaxonNameEditor getTaxonNameEditor(Taxon taxon) {\r
+               if (taxonNameEditors == null) {\r
+                       return null;\r
+               }\r
+               return taxonNameEditors.get(taxon);\r
+       }\r
+\r
+       public static IUndoContext getTaxonNameEditorUndoContext(Taxon taxon) {\r
+               // TODO make this taxon name editor specific\r
+//             return getTaxonNameEditor(taxon).getUndoContext();\r
+               return IOperationHistory.GLOBAL_UNDO_CONTEXT;\r
+       }\r
 }
\ No newline at end of file
index 6977b16da530353ea1c1db536650a3554e7eaf23..6e8c7373af37edde1f9719bdb2eb546712d88607 100644 (file)
@@ -85,6 +85,7 @@ public class SaveAllAction implements IWorkbenchWindowActionDelegate {
                CdmTransactionController.addSessionTaxaToTransaction();
                
                UiUtil.setIsSaving(false);
+               // TODO: delete undoHistory
        }
 
        /**
index f0ac8071aa4f4cee91b3788597b2a67a94c31712..f73a36b48a8e37386fded791ec59ba09035cf63a 100644 (file)
@@ -25,5 +25,6 @@ public class SaveTaxonAction extends Action {
                \r
                // Save the taxon to the CDM\r
                CdmSessionDataRepository.getDefault().saveTaxon(taxon);\r
+               // TODO delete undoHistory for this editor\r
        }\r
 }
\ No newline at end of file
index d43099342628ce5707fe42fc6d4c662589dae49f..40209407d718f3be693e746cab3311b2add712cb 100644 (file)
@@ -30,6 +30,7 @@ import eu.etaxonomy.taxeditor.ITaxEditorConstants;
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.UiUtil;\r
 import eu.etaxonomy.taxeditor.actions.cdm.MakeGroupBasionymAction;\r
+import eu.etaxonomy.taxeditor.editor.name.Messages;\r
 import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
 import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 \r
index cf47c1130d8ecf3f4caf5023a7529333c7f5e159..5ae5d2cd6978744c96dd7272bf431d042c532608 100644 (file)
@@ -28,6 +28,7 @@ import eu.etaxonomy.taxeditor.actions.UndoableAction;
 import eu.etaxonomy.taxeditor.actions.cdm.SwapSynonymAndTaxonAction;\r
 import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
 import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
+import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -83,8 +84,7 @@ public class ChangeSynonymToTaxonUiAction extends UndoableAction {
                                                new OpenTaxonEditorAction(newTaxon).run();\r
 \r
                                                // Remove old taxon from recent names list\r
-                                               TaxEditorPlugin.getDefault()\r
-                                                               .getObservableRecentNamesList().remove(taxon);\r
+                                               RecentNamesView.addRecentName(taxon);\r
                                        }\r
 \r
                                }\r
index 6779086dcb4d84d14989885b9f8bb3c9ed8f5265..7940a81ff69a1122d4266c561ce9f3748c0eeaaf 100644 (file)
@@ -10,7 +10,6 @@
 package eu.etaxonomy.taxeditor.actions.ui;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.eclipse.core.databinding.observable.set.IObservableSet;\r
 import org.eclipse.jface.action.Action;\r
 import org.eclipse.jface.dialogs.MessageDialog;\r
 import org.eclipse.jface.resource.ImageDescriptor;\r
@@ -20,19 +19,17 @@ import org.eclipse.ui.PartInitException;
 \r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.UiUtil;\r
 import eu.etaxonomy.taxeditor.actions.cdm.SaveTaxonAction;\r
 import eu.etaxonomy.taxeditor.editor.SelectTaxonDialog;\r
-import eu.etaxonomy.taxeditor.editor.name.IterableSynonymyList;\r
 import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
 import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -123,8 +120,9 @@ public class ChangeTaxonToSynonymAction extends Action {
                                \r
 //             if (!TaxEditorPlugin.getDefault().getObservableRecentNamesList().\r
 //                             contains(oldTaxon)) {   \r
-                       TaxEditorPlugin.getDefault().getObservableRecentNamesList().\r
-                                       remove(oldTaxon);\r
+//                     TaxEditorPlugin.getDefault().getObservableRecentNamesList().\r
+//                                     remove(oldTaxon);\r
+//                     RecentNamesView.removeRecentName(oldTaxon);\r
 //             }\r
                \r
                CdmSessionDataRepository.getDefault().removeTaxon(oldTaxon);    \r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/Messages.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/Messages.java
deleted file mode 100644 (file)
index dd30822..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/**\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
-package eu.etaxonomy.taxeditor.actions.ui;\r
-\r
-import java.util.Locale;\r
-import java.util.MissingResourceException;\r
-import java.util.ResourceBundle;\r
-\r
-import org.apache.log4j.Logger;\r
-\r
-import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
-import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
-import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 09.10.2008\r
- * @version 1.0\r
- */\r
-public class Messages {\r
-       private static final Logger logger = Logger.getLogger(Messages.class);\r
-       private static final String BUNDLE_NAME = "eu.etaxonomy.taxeditor.actions.ui.messages"; //$NON-NLS-1$\r
-\r
-       private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle\r
-                       .getBundle(BUNDLE_NAME, Locale.getDefault());\r
-\r
-       private Messages() {\r
-       }\r
-\r
-       public static String getString(String key) {\r
-               try {\r
-                       return RESOURCE_BUNDLE.getString(PreferencesUtil.concatCodeMessageSuffix(key));\r
-               } catch (MissingResourceException e1) {\r
-                       try {\r
-                               return RESOURCE_BUNDLE.getString(key);\r
-                       } catch (MissingResourceException e2) {\r
-                               return '!' + key + '!';\r
-                       }       \r
-               }\r
-       }\r
-\r
-       public static String getString(String key, TaxonNameBase name) {\r
-               if (name instanceof BotanicalName) {\r
-                       key += "." + ITaxEditorConstants.CODE_PREFERENCE_ICBN;\r
-               } else if (name instanceof ZoologicalName) {\r
-                       key += "." + ITaxEditorConstants.CODE_PREFERENCE_ICZN;\r
-               } else {\r
-                       getString(key);\r
-               }\r
-               try {\r
-                       return RESOURCE_BUNDLE.getString(key);\r
-               } catch (MissingResourceException e2) {\r
-                       return '!' + key + '!';\r
-               }\r
-       }\r
-}\r
index bacf8b5f62c2321bb23d8ae316d8bcf2c681149c..445bae36b27ea9b17c4907faaa7f9e5330e522e2 100644 (file)
@@ -21,13 +21,13 @@ import org.eclipse.ui.PartInitException;
 \r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;\r
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
 import eu.etaxonomy.taxeditor.editor.name.CdmParserController;\r
 import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
-import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 import eu.etaxonomy.taxeditor.model.NameEditorInput;\r
+import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
 import eu.etaxonomy.taxeditor.navigation.TaxonomicTreeViewer;\r
 \r
 /**\r
@@ -82,6 +82,9 @@ public class OpenTaxonEditorAction extends Action implements IWorkbenchWindowAct
                        name.setTitleCache("", false);\r
                        this.taxon = Taxon.NewInstance(name, \r
                                        CdmSessionDataRepository.getDefault().getDefaultSec());\r
+               \r
+                       // Note: don't add taxon to repository - it's not yet valid\r
+\r
                } else {\r
                        \r
                        // If this taxon is not visible in the tree, open node\r
@@ -90,15 +93,12 @@ public class OpenTaxonEditorAction extends Action implements IWorkbenchWindowAct
                                treeViewer.revealTaxon(taxon);\r
                        }\r
                        \r
-                       // Add to recent names list if not already there                \r
-                       if (!TaxEditorPlugin.getDefault().getObservableRecentNamesList().contains(taxon)) {\r
-                               TaxEditorPlugin.getDefault().getObservableRecentNamesList().add(0, taxon);\r
-                       }\r
+                       // Add to recent names list\r
+                       RecentNamesView.addRecentName(taxon);\r
                }\r
                \r
-               IEditorInput input = new NameEditorInput(taxon);\r
        try {\r
-                       UiUtil.openEditor(input, MultiPageTaxonEditor.ID);\r
+                       UiUtil.openTaxonEditor(taxon);\r
                } catch (PartInitException e) {\r
                        e.printStackTrace();\r
                }\r
index 0457f183133a88f4a55a9888ac0894d60d12765b..459e0cda2c4988f620ede70dd22da96ba7459159 100644 (file)
@@ -30,6 +30,7 @@ import eu.etaxonomy.taxeditor.ITaxEditorConstants;
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.UiUtil;\r
 import eu.etaxonomy.taxeditor.actions.cdm.RemoveBasionymFromGroupAction;\r
+import eu.etaxonomy.taxeditor.editor.name.Messages;\r
 import eu.etaxonomy.taxeditor.editor.name.NameComposite;\r
 import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 \r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/messages.properties b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/messages.properties
deleted file mode 100644 (file)
index 95ab9b5..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-AddBasionymCompositeAction.0.ICBN=Set as basionym for homotypical group\r
-AddBasionymCompositeAction.0.ICZN=Set as original combination for homotypical group\r
-RemoveBasionymCompositeAction.0.ICBN=Remove as basionym for homotypical group\r
-RemoveBasionymCompositeAction.0.ICZN=Remove as original combination for homotypical group\r
similarity index 82%
rename from eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditorView.java
rename to eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/AbstractTaxonEditor.java
index 8afb5ad7f201e81d94ecf67e51cc2c9ae3561d4b..f246b3fea8cbaf6f4a05f8faa4c5a46266a493da 100644 (file)
 package eu.etaxonomy.taxeditor.editor;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.commands.operations.ObjectUndoContext;\r
 import org.eclipse.core.runtime.IAdaptable;\r
 import org.eclipse.core.runtime.IProgressMonitor;\r
 import org.eclipse.jface.action.IMenuManager;\r
 import org.eclipse.jface.action.IStatusLineManager;\r
 import org.eclipse.jface.action.IToolBarManager;\r
-import org.eclipse.jface.viewers.ISelection;\r
 import org.eclipse.jface.viewers.ISelectionProvider;\r
 import org.eclipse.jface.viewers.StructuredSelection;\r
 import org.eclipse.swt.SWT;\r
@@ -23,18 +24,20 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;\r
 import org.eclipse.swt.widgets.Display;\r
 import org.eclipse.swt.widgets.Tree;\r
+import org.eclipse.ui.IActionBars;\r
 import org.eclipse.ui.IEditorInput;\r
 import org.eclipse.ui.IEditorSite;\r
 import org.eclipse.ui.IPartListener2;\r
-import org.eclipse.ui.ISelectionListener;\r
 import org.eclipse.ui.IWorkbenchPage;\r
-import org.eclipse.ui.IWorkbenchPart;\r
 import org.eclipse.ui.IWorkbenchPartReference;\r
 import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.actions.ActionFactory;\r
 import org.eclipse.ui.forms.IManagedForm;\r
 import org.eclipse.ui.forms.ManagedForm;\r
 import org.eclipse.ui.forms.widgets.ScrolledForm;\r
 import org.eclipse.ui.forms.widgets.TableWrapLayout;\r
+import org.eclipse.ui.operations.RedoActionHandler;\r
+import org.eclipse.ui.operations.UndoActionHandler;\r
 import org.eclipse.ui.part.EditorPart;\r
 import org.eclipse.ui.views.properties.IPropertySheetPage;\r
 import org.eclipse.ui.views.properties.IPropertySource;\r
@@ -50,17 +53,17 @@ import eu.etaxonomy.taxeditor.propertysheet.CustomSortPropertySheetEntry;
  * <code>IAdaptable</code> in order to display properties of the objects whose UI elements have focus. \r
  * <p>\r
  * Implementing classes can choose to show an object in the property sheet when the\r
- * <code>AbstractTaxonEditorView</code> gets focus, by passing the object to the method\r
+ * <code>AbstractTaxonEditor</code> gets focus, by passing the object to the method\r
  * <code>setDefaultPropertySheetObject</code>, for instance, in the method<code>init</code>.\r
  * </p>\r
  * @author p.ciardelli\r
  * @created 10.09.2008\r
  * @version 1.0\r
  */\r
-public abstract class AbstractTaxonEditorView extends EditorPart implements\r
+public abstract class AbstractTaxonEditor extends EditorPart implements\r
                IAdaptable {\r
        private static final Logger logger = Logger\r
-                       .getLogger(AbstractTaxonEditorView.class);\r
+                       .getLogger(AbstractTaxonEditor.class);\r
 \r
        private Taxon taxon;\r
        \r
@@ -73,8 +76,9 @@ public abstract class AbstractTaxonEditorView extends EditorPart implements
        protected ScrolledForm scrolledForm; \r
        protected Composite parent;\r
        protected ISelectionProvider provider;\r
+       protected IUndoContext undoContext;\r
 \r
-       private IHasPropertySource selectedObject;\r
+       protected IHasPropertySource selectedObject;\r
        \r
        /* (non-Javadoc)\r
         * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)\r
@@ -110,6 +114,24 @@ public abstract class AbstractTaxonEditorView extends EditorPart implements
                this.getSite().setSelectionProvider(provider);\r
        }\r
 \r
+       private void initUndoContext() {                \r
+               undoContext = new ObjectUndoContext(this); \r
+               // getEditorSite returns multipageeditor, NOT this\r
+               // UndoActionHandler expects a IWorkbenchPartSite\r
+\r
+//             UndoActionHandler undoHandler = new UndoActionHandler(getEditorSite(), undoContext);\r
+//             IActionBars actionBars = getEditorSite().getActionBars();\r
+               UndoActionHandler undoHandler = new UndoActionHandler(getSite(), undoContext);\r
+               RedoActionHandler redoHandler = new RedoActionHandler(getSite(), undoContext);\r
+               IActionBars actionBars = getEditorSite().getActionBars();\r
+               actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(), undoHandler);\r
+               actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(), redoHandler);\r
+       }\r
+       \r
+       public IUndoContext getUndoContext() {\r
+               return undoContext;\r
+       }\r
+\r
        /* (non-Javadoc)\r
         * @see org.eclipse.ui.part.WorkbenchPart#setFocus()\r
         */\r
@@ -166,6 +188,8 @@ public abstract class AbstractTaxonEditorView extends EditorPart implements
         * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)\r
         */\r
        public void createPartControl(Composite composite) {\r
+\r
+               initUndoContext();\r
                \r
                managedForm = new ManagedForm(composite) {\r
                        public void dirtyStateChanged() {\r
@@ -284,4 +308,8 @@ public abstract class AbstractTaxonEditorView extends EditorPart implements
        protected Taxon getTaxon() {\r
                return taxon;\r
        }\r
+       \r
+       public void setDirty() {\r
+               managedForm.dirtyStateChanged();\r
+       }\r
 }\r
index 2812d02532e6992128366abbd4a9a3ed439e327e..7549e482b3d7469a34dc85ef77dc58e67af14e75 100644 (file)
@@ -53,7 +53,7 @@ abstract public class EditorGroupedComposite extends GroupedComposite implements
        protected TableWrapLayout layout;\r
        private Label draggableLabel;\r
        protected IManagedForm managedForm;\r
-       private Taxon taxon;\r
+       protected Taxon taxon;\r
 \r
        private CompositeBorderDecorator borderDecorator;\r
        \r
@@ -78,17 +78,7 @@ abstract public class EditorGroupedComposite extends GroupedComposite implements
        protected void createLineWrapSupport() {\r
                new LineWrapSupport(getTextViewer(), managedForm);\r
        }\r
-       \r
-       /**\r
-        * Makes cosmetic changes to an <code>EditorGroupedComposite</code> appropriate\r
-        * to the object in its <code>data</code> field. For instance, if the <code>data</code>\r
-        * type changes, this method would be called to change the <code>Composite</code>'s \r
-        * appearance. \r
-        * \r
-        * @param transformation\r
-        */\r
-       abstract public void transform(String transformation);\r
-       \r
+               \r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.taxeditor.editor.name.GroupedComposite#createContent()\r
         */\r
@@ -280,7 +270,6 @@ abstract public class EditorGroupedComposite extends GroupedComposite implements
         */\r
        protected ContextMenu createContextMenu() {\r
                return new ContextMenu(getDraggableLabel());\r
-//             return new ContextMenu(this);\r
        }\r
        \r
        public void unpaintBorder() {\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/FreeTextElementFactory.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/FreeTextElementFactory.java
new file mode 100644 (file)
index 0000000..62ee9f7
--- /dev/null
@@ -0,0 +1,161 @@
+/**\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.editor;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.Assert;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.editor.name.AcceptedNameComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.HomotypicalGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.MisappliedGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.MisappliedNameComposite;\r
+import eu.etaxonomy.taxeditor.editor.name.SynonymComposite;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 08.01.2009\r
+ * @version 1.0\r
+ */\r
+public class FreeTextElementFactory implements IFreeTextElementFactory {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(FreeTextElementFactory.class);\r
+       \r
+       private static IFreeTextElementFactory factory;\r
+       \r
+       private Map<Taxon, IManagedForm> nameForms;\r
+       \r
+\r
+       /**\r
+        * Returns a taxon's composite which holds all misapplied names.\r
+        */\r
+       private Map<Taxon, Composite> misappliedComposites;\r
+       \r
+       public static IFreeTextElementFactory getDefault() {\r
+               if (factory == null) {\r
+                       factory = new FreeTextElementFactory();\r
+               }\r
+               return factory;\r
+       }\r
+       \r
+       public Composite createAcceptedTaxon(IManagedForm form, Taxon taxon) {\r
+               \r
+               // Put the taxon's form in the form map\r
+               Assert.isNotNull(form, "A non-null IManagedForm must be provided.");\r
+               getTaxonForms().put(taxon, form);\r
+               \r
+               // Create a homotypic group composite for the accepted taxon\r
+               HomotypicalGroup group = taxon.getHomotypicGroup();\r
+               Assert.isNotNull(group, "Taxon does not have a homotypic group");\r
+               Composite groupComposite = createHomotypicalGroup(taxon, group);\r
+                               \r
+               // Create a name composite for the accepted taxon\r
+               Composite acceptedNameComposite =\r
+                               new AcceptedNameComposite(groupComposite, form, taxon);\r
+               \r
+       \r
+               // Return the name composite\r
+               return acceptedNameComposite;\r
+       }\r
+       \r
+       public Composite createSynonym(Synonym synonym, Taxon taxon) {\r
+               \r
+               // Get the taxon's form\r
+               IManagedForm form = getForm(taxon);\r
+               Assert.isNotNull(form, "No IManagedForm has been provided for the synonym's accepted taxon.");\r
+               \r
+               // Get the synonym's homotypic group\r
+               HomotypicalGroup group = synonym.getHomotypicGroup();\r
+               Assert.isNotNull(group, "Synonym does not have a homotypic group");\r
+               \r
+               // If the group doesn't yet have a composite, create one and add it to the repository\r
+               Composite groupComposite = \r
+                               UiUtil.getTaxonNameEditor(taxon).getHomotypicGroup(group);\r
+               if (groupComposite == null) {\r
+                       groupComposite = createHomotypicalGroup(taxon, group);\r
+               }\r
+                               \r
+               // Create a synonym composite in the homotypic group\r
+               Composite synonymComposite = \r
+                               new SynonymComposite(groupComposite, form, taxon, synonym);\r
+                               \r
+               return synonymComposite;\r
+       }\r
+       \r
+       @Override\r
+       public Composite createMisappliedName(Taxon misappliedName, Taxon taxon) {\r
+\r
+               // Get the taxon's form\r
+               IManagedForm form = getForm(taxon);\r
+               Assert.isNotNull(form, "No IManagedForm has been provided for the synonym's accepted taxon.");\r
+                               \r
+               // If there is no composite for misapplied names, \r
+               //      create one and add it to the repository\r
+               Composite groupComposite = \r
+                               UiUtil.getTaxonNameEditor(taxon).getMisappliedGroup();\r
+               if (groupComposite == null) {\r
+                       groupComposite = createMisappliedGroup(taxon);\r
+               }\r
+               \r
+               // Create the name's composite\r
+               Composite composite = new MisappliedNameComposite\r
+                               (groupComposite, form, taxon, misappliedName);\r
+               \r
+               return composite;\r
+       }\r
+       \r
+       \r
+       public Composite createMisappliedGroup(Taxon taxon) {\r
+               \r
+               // Get the taxon's form\r
+               IManagedForm form = getForm(taxon);\r
+\r
+               // Create the group composite\r
+               Composite groupComposite = new MisappliedGroupComposite(getTopLevelComposite(form), taxon);\r
+               new CompositeBorderDecorator(groupComposite, form);\r
+               \r
+               return groupComposite;\r
+       }\r
+       \r
+       public Composite createHomotypicalGroup(Taxon taxon, HomotypicalGroup group) {\r
+\r
+               // Get the taxon's form\r
+               IManagedForm form = getForm(taxon);\r
+\r
+               // Create the group composite\r
+               Composite groupComposite = new HomotypicalGroupComposite(getTopLevelComposite(form), taxon, group);\r
+               new CompositeBorderDecorator(groupComposite, form);             \r
+               \r
+               return groupComposite;\r
+       }\r
+\r
+       private Map<Taxon, IManagedForm> getTaxonForms() {\r
+               if (nameForms == null) {\r
+                       nameForms = new HashMap<Taxon, IManagedForm>();\r
+               }\r
+               return nameForms;\r
+       }\r
+       \r
+       private IManagedForm getForm(Taxon taxon) {\r
+               return getTaxonForms().get(taxon);\r
+       }\r
+               \r
+       private Composite getTopLevelComposite(IManagedForm form) {\r
+               return form.getForm().getBody();\r
+       }\r
+}\r
index 34e41f7f165331481cff8e7253971eff45716b12..f224ea360c142db7c8fdab91da8729cb307b121d 100644 (file)
@@ -34,13 +34,7 @@ public class GroupComposite extends Composite {
        \r
        private DropTarget target;\r
        private DropTargetListener dropListener;\r
-       \r
-       /**\r
-        * Sets whether or not to dispose of this <code>Composite</code>\r
-        * when all its children have been disposed.\r
-        */\r
-       private boolean isDisposeEmpty;\r
-       \r
+               \r
        public GroupComposite(Composite parent) {\r
                super(parent, SWT.NONE);\r
 \r
@@ -87,12 +81,4 @@ public class GroupComposite extends Composite {
                        }\r
                }\r
        }\r
-\r
-       public boolean isDisposeEmpty() {\r
-               return isDisposeEmpty;\r
-       }\r
-\r
-       public void setDisposeEmpty(boolean isDisposeEmpty) {\r
-               this.isDisposeEmpty = isDisposeEmpty;\r
-       }\r
 }\r
index 41785aed104dea9f31ea9872eec359e8c67edd6a..435c9d33bbb9885e3e85d03a8a49178bf23d80ce 100644 (file)
@@ -43,7 +43,7 @@ abstract public class GroupedComposite extends Composite {
                if (draggable) {\r
 \r
                        if (dragger != null) {\r
-                               // Already initalized\r
+                               // Already initialized\r
                                return;\r
                        }\r
 \r
@@ -92,7 +92,7 @@ abstract public class GroupedComposite extends Composite {
                Composite oldGrandparent = oldParent.getParent();\r
                \r
                if (super.setParent(parent)) {\r
-                       if (oldParent instanceof EditorGroupComposite\r
+                       if (oldParent instanceof GroupComposite\r
                                        && oldParent.getChildren().length == 0) {\r
                                oldParent.dispose();\r
                        }\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFreeTextElementFactory.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFreeTextElementFactory.java
new file mode 100644 (file)
index 0000000..ba6d207
--- /dev/null
@@ -0,0 +1,35 @@
+/**\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.editor;\r
+\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+\r
+/** \r
+ * @author p.ciardelli\r
+ * @created 08.01.2009\r
+ * @version 1.0\r
+ */\r
+public interface IFreeTextElementFactory {\r
+\r
+       public Composite createAcceptedTaxon(IManagedForm form, Taxon taxon);\r
+       \r
+       public Composite createSynonym(Synonym synonym, Taxon taxon);\r
+\r
+       public Composite createMisappliedName(Taxon misappliedName, Taxon taxon);\r
+       \r
+       public Composite createHomotypicalGroup(Taxon taxon, HomotypicalGroup group);\r
+       \r
+       public Composite createMisappliedGroup(Taxon taxon);\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFreeTextElementRepository.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/IFreeTextElementRepository.java
deleted file mode 100644 (file)
index 6535494..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/**\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.editor;\r
-\r
-import org.eclipse.swt.widgets.Composite;\r
-\r
-import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 22.12.2008\r
- * @version 1.0\r
- */\r
-public interface IFreeTextElementRepository {\r
-\r
-       public Composite getTaxon(Taxon taxon);\r
-       \r
-       public Composite createTaxon(Taxon taxon);\r
-       \r
-       public Composite getSynonym(Taxon taxon, Synonym synonym);\r
-       \r
-       public Composite createSynonym(Taxon taxon, Synonym synonym);\r
-       \r
-       public Composite getHomotypicGroup(Taxon taxon, HomotypicalGroup group);\r
-       \r
-       public Composite getMisappliedName(Taxon taxon, Taxon misappliedName);\r
-       \r
-       public Composite createMisappliedName(Taxon taxon, Taxon misappliedName);\r
-       \r
-       public Composite getMisappliedNameGroup(Taxon taxon);\r
-       \r
-}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/INameEditorCompositeRepository.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/INameEditorCompositeRepository.java
new file mode 100644 (file)
index 0000000..bb2e53d
--- /dev/null
@@ -0,0 +1,35 @@
+/**\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.editor;\r
+\r
+import org.eclipse.swt.widgets.Composite;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+\r
+/**\r
+ * @author p.ciardell\r
+ * @created 22.12.2008\r
+ * @version 1.0\r
+ */\r
+public interface INameEditorCompositeRepository {\r
+\r
+       public Composite getAcceptedName();\r
+       \r
+       public Composite getSynonym(Synonym synonym);\r
+       \r
+       public Composite getHomotypicGroup(HomotypicalGroup group);\r
+       \r
+       public Composite getMisappliedName(Taxon misappliedName);\r
+       \r
+       public Composite getMisappliedGroup();\r
+}\r
index 50d79cad9db91d24069c837dc41bf1c6e4ab5b87..d7af8b5a1036a54221bb39261baf17e191e55f1c 100644 (file)
@@ -14,6 +14,7 @@ import org.eclipse.jface.text.TextViewer;
 import org.eclipse.swt.custom.StyledText;\r
 import org.eclipse.swt.events.ModifyEvent;\r
 import org.eclipse.swt.events.ModifyListener;\r
+import org.eclipse.swt.widgets.Composite;\r
 import org.eclipse.ui.forms.IManagedForm;\r
 import org.eclipse.ui.forms.widgets.ScrolledForm;\r
 \r
index c62ba5d1d42ddb55ee33be13f55831dab77aa312..4f82f21a136ef54dd83e43e0224f60e596d416c4 100644 (file)
@@ -25,12 +25,12 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.taxeditor.actions.SaveAllAction;\r
 import eu.etaxonomy.taxeditor.actions.cdm.SaveTaxonAction;\r
 import eu.etaxonomy.taxeditor.editor.description.TaxonDescriptionEditorView;\r
-import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditorView;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
 import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 \r
 /**\r
  * \r
- * Generates the tabbed editor with <code>TaxonNameEditorView</code> on top and tabs for\r
+ * Generates the tabbed editor with <code>TaxonNameEditor</code> on top and tabs for\r
  *  "Desriptions", "Concepts", "Geography", etc.\r
  * \r
  * @author p.ciardelli\r
@@ -62,7 +62,7 @@ public class MultiPageTaxonEditor extends MultiPageEditorPart {
        protected void createPages() {\r
                                \r
                try {\r
-                       addPage(0, new TaxonNameEditorView(), getEditorInput());\r
+                       addPage(0, new TaxonNameEditor(), getEditorInput());\r
                        setPageText(0, "Name");\r
                        \r
                        // TODO lazy create\r
index ec7a5b377b35ef6013cdf00f0384202be3d7c579..e3885de1824c80fed8957d4c697aefe4398275f7 100644 (file)
@@ -77,7 +77,6 @@ public class DescriptionLabelComposite extends EditorGroupedComposite {
                setFocus();\r
        }\r
 \r
-       @Override\r
        public void transform(String transformation) {\r
                setDraggable(false);\r
                setFont(DESCRIPTION_LABEL_FONT);\r
index e20a5741bdd1f246ffe0e6781eaaa4131bb19247..f76d5b0aeba1cc6095494e02b6302b8323af394b 100644 (file)
@@ -22,7 +22,7 @@ import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditorView;\r
+import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditor;\r
 import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
 import eu.etaxonomy.taxeditor.editor.EditorGroupedComposite;\r
 import eu.etaxonomy.taxeditor.editor.IHasPropertySource;\r
@@ -45,7 +45,7 @@ import eu.etaxonomy.taxeditor.editor.IHasPropertySource;
  * @created 25.08.2008\r
  * @version 1.0\r
  */\r
-public class TaxonDescriptionEditorView extends AbstractTaxonEditorView {\r
+public class TaxonDescriptionEditorView extends AbstractTaxonEditor {\r
        private static final Logger logger = Logger\r
                        .getLogger(TaxonDescriptionEditorView.class);\r
        \r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/AcceptedNameComposite.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/AcceptedNameComposite.java
new file mode 100644 (file)
index 0000000..b881bde
--- /dev/null
@@ -0,0 +1,54 @@
+/**\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.editor.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.actions.ui.ChangeTaxonToSynonymAction;\r
+import eu.etaxonomy.taxeditor.actions.ui.MoveTaxonDialogAction;\r
+import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 13.01.2009\r
+ * @version 1.0\r
+ */\r
+public class AcceptedNameComposite extends NameComposite {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(AcceptedNameComposite.class);\r
+       \r
+       public AcceptedNameComposite(Composite groupComposite, IManagedForm form,\r
+                       Taxon taxon) {\r
+               super(groupComposite, form, NameComposite.ACCEPTED_TAXON, taxon);\r
+       \r
+               setDraggable(false);\r
+               setIcon(ACCEPTED_ICON);\r
+               setFont(ACCEPTED_FONT);\r
+               setIndent(ACCEPTED_INDENT);\r
+\r
+               createMenu();\r
+       }\r
+\r
+       private void createMenu() {\r
+               ContextMenu contextMenu = createContextMenu();\r
+\r
+               // TODO Make action "Create autonym and subspecies"\r
+\r
+               Action changeTaxonAction = new ChangeTaxonToSynonymAction(getTaxon());\r
+               contextMenu.addAction(changeTaxonAction);\r
+\r
+               Action moveTaxonAction = new MoveTaxonDialogAction(getTaxon());\r
+               contextMenu.addAction(moveTaxonAction);\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/HomotypicalGroupComposite.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/HomotypicalGroupComposite.java
new file mode 100644 (file)
index 0000000..2e1be4b
--- /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.editor.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.widgets.Composite;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.GroupComposite;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 13.01.2009\r
+ * @version 1.0\r
+ */\r
+public class HomotypicalGroupComposite extends GroupComposite {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(HomotypicalGroupComposite.class);\r
+       \r
+       private Taxon taxon;\r
+       private HomotypicalGroup group;\r
+       \r
+       public HomotypicalGroupComposite(Composite parent, Taxon taxon,\r
+                       HomotypicalGroup group) {\r
+               \r
+               super(parent);\r
+               \r
+               this.taxon = taxon;\r
+               this.group = group;\r
+       }\r
+       \r
+       public Taxon getTaxon() {\r
+               return taxon;\r
+       }\r
+       \r
+       public HomotypicalGroup getGroup() {\r
+               return group;\r
+       }\r
+}\r
index dfae5487d4342f8f111834ef923be81d32096913..63dd64741980648c2d90a7379d9820cc692f731d 100644 (file)
@@ -1,21 +1,63 @@
+/**\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
 package eu.etaxonomy.taxeditor.editor.name;\r
 \r
+import java.util.Locale;\r
 import java.util.MissingResourceException;\r
 import java.util.ResourceBundle;\r
 \r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.name.BotanicalName;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 09.10.2008\r
+ * @version 1.0\r
+ */\r
 public class Messages {\r
+       private static final Logger logger = Logger.getLogger(Messages.class);\r
        private static final String BUNDLE_NAME = "eu.etaxonomy.taxeditor.editor.name.messages"; //$NON-NLS-1$\r
 \r
        private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle\r
-                       .getBundle(BUNDLE_NAME);\r
+                       .getBundle(BUNDLE_NAME, Locale.getDefault());\r
 \r
        private Messages() {\r
        }\r
 \r
        public static String getString(String key) {\r
+               try {\r
+                       return RESOURCE_BUNDLE.getString(PreferencesUtil.concatCodeMessageSuffix(key));\r
+               } catch (MissingResourceException e1) {\r
+                       try {\r
+                               return RESOURCE_BUNDLE.getString(key);\r
+                       } catch (MissingResourceException e2) {\r
+                               return '!' + key + '!';\r
+                       }       \r
+               }\r
+       }\r
+\r
+       public static String getString(String key, TaxonNameBase name) {\r
+               if (name instanceof BotanicalName) {\r
+                       key += "." + ITaxEditorConstants.CODE_PREFERENCE_ICBN;\r
+               } else if (name instanceof ZoologicalName) {\r
+                       key += "." + ITaxEditorConstants.CODE_PREFERENCE_ICZN;\r
+               } else {\r
+                       getString(key);\r
+               }\r
                try {\r
                        return RESOURCE_BUNDLE.getString(key);\r
-               } catch (MissingResourceException e) {\r
+               } catch (MissingResourceException e2) {\r
                        return '!' + key + '!';\r
                }\r
        }\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/MisappliedGroupComposite.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/MisappliedGroupComposite.java
new file mode 100644 (file)
index 0000000..396e56e
--- /dev/null
@@ -0,0 +1,38 @@
+/**\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.editor.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.swt.widgets.Composite;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.GroupComposite;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 13.01.2009\r
+ * @version 1.0\r
+ */\r
+public class MisappliedGroupComposite extends GroupComposite {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(MisappliedGroupComposite.class);\r
+       \r
+       private Taxon taxon;\r
+       \r
+       public MisappliedGroupComposite(Composite parent, Taxon taxon) {\r
+               super(parent);\r
+               \r
+               this.taxon = taxon;\r
+       }\r
+       \r
+       public Taxon getTaxon() {\r
+               return taxon;\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/MisappliedNameComposite.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/MisappliedNameComposite.java
new file mode 100644 (file)
index 0000000..c7a5975
--- /dev/null
@@ -0,0 +1,102 @@
+/**\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.editor.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IOperationHistory;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.actions.ui.DeleteMisappliedNameCompositeAction;\r
+import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeMisappliedNameToSynonymOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeSynonymToMisappliedNameOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 13.01.2009\r
+ * @version 1.0\r
+ */\r
+public class MisappliedNameComposite extends NameComposite {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(MisappliedNameComposite.class);\r
+       \r
+       private Taxon misappliedName;\r
+       \r
+       public MisappliedNameComposite(Composite parent, IManagedForm form,\r
+                       Taxon taxon, Taxon misappliedName) {\r
+               super(parent, form, NameComposite.MISAPPLIED_NAME, misappliedName);\r
+               \r
+               this.taxon = taxon;\r
+               this.misappliedName = misappliedName;\r
+               \r
+               setDraggable(true);\r
+               setIcon(MISAPPLIEDNAME_ICON);\r
+               setFont(MISAPPLIEDNAME_FONT);\r
+               setIndent(MISAPPLIEDNAME_INDENT);\r
+\r
+               createMenu();\r
+       }\r
+       \r
+       public Taxon getMisappliedName() {\r
+               return misappliedName;\r
+       }\r
+       \r
+       private void createMenu() {\r
+\r
+               ContextMenu contextMenu = createContextMenu();\r
+\r
+               Action deleteMisappliedNameAction = new DeleteMisappliedNameCompositeAction(\r
+                               this, getTaxon());\r
+               contextMenu.addAction(deleteMisappliedNameAction);\r
+       }\r
+       \r
+       public boolean setParent(Composite parent) {\r
+\r
+               if (super.setParent(parent)) {  \r
+                       \r
+                       // If this has been moved to the misapplied names group, do nothing\r
+                       if (parent instanceof MisappliedGroupComposite) {\r
+                               return true;\r
+                       }\r
+\r
+                       // Has this been moved to a HomotypicalGroup?\r
+                       if (parent instanceof HomotypicalGroupComposite) {\r
+                               \r
+                               HomotypicalGroup homotypicalGroup = \r
+                                               ((HomotypicalGroupComposite)parent).getGroup();\r
+                               \r
+                               IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+                               IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+                               IUndoableOperation operation = new ChangeMisappliedNameToSynonymOperation\r
+                                               ("change type", undoContext, taxon, misappliedName, homotypicalGroup);\r
+                               \r
+                               try {\r
+                                       IStatus status = operationHistory.execute(operation, null, null);\r
+                               } catch (ExecutionException e) {\r
+                                       // TODO Auto-generated catch block\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+                       return true;\r
+\r
+               }\r
+               return false;\r
+       }\r
+}\r
index d9f8da2c3e4aca20866754b1f6d6814d94163401..bee8eadc1459899f10e2e70b0c253a7c85a96403 100644 (file)
@@ -13,9 +13,13 @@ import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IOperationHistory;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
 import org.eclipse.core.runtime.Assert;\r
+import org.eclipse.core.runtime.IStatus;\r
 import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.util.IPropertyChangeListener;\r
 import org.eclipse.swt.events.FocusAdapter;\r
 import org.eclipse.swt.events.FocusEvent;\r
 import org.eclipse.swt.graphics.Font;\r
@@ -25,34 +29,21 @@ import org.eclipse.ui.forms.IManagedForm;
 import org.eclipse.ui.views.properties.IPropertySource;\r
 \r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
 import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.UiUtil;\r
-import eu.etaxonomy.taxeditor.actions.ui.AdaptCompositeToGroupAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.AddBasionymCompositeAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.ChangeCompositeToMisappliedNameAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.ChangeCompositeToNewTaxonAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.ChangeSynonymToTaxonUiAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.ChangeTaxonToSynonymAction;\r
 import eu.etaxonomy.taxeditor.actions.ui.CreateNewHeterotypicCompositeAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.DeleteMisappliedNameCompositeAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.DeleteSynonymCompositeAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.MoveCompositeToMisappliedCompositeAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.MoveTaxonDialogAction;\r
-import eu.etaxonomy.taxeditor.actions.ui.RemoveBasionymCompositeAction;\r
-import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
 import eu.etaxonomy.taxeditor.editor.EditorGroupedComposite;\r
 import eu.etaxonomy.taxeditor.editor.LineBreakListener;\r
 import eu.etaxonomy.taxeditor.editor.ParseListener;\r
 import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.CreateSynonymInNewGroupOperation;\r
 import eu.etaxonomy.taxeditor.propertysheet.name.BotanicalNamePropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.name.NonViralNamePropertySource;\r
 import eu.etaxonomy.taxeditor.propertysheet.name.TaxonBasePropertySource;\r
@@ -156,7 +147,8 @@ public class NameComposite extends EditorGroupedComposite {
         * @param parent\r
         * @param managedForm\r
         */\r
-       public NameComposite(Composite parent, IManagedForm managedForm, String compositeType, TaxonBase data) {\r
+       public NameComposite(Composite parent, IManagedForm managedForm, \r
+                       String compositeType, TaxonBase data) {\r
                super(parent, managedForm);\r
 \r
                createNameViewer();\r
@@ -164,7 +156,9 @@ public class NameComposite extends EditorGroupedComposite {
                createLineWrapSupport();\r
                \r
                setData(data);\r
-               transform(compositeType);\r
+//             if (compositeType != null) {\r
+//                     transform(compositeType);\r
+//             }\r
 \r
                createParser(); \r
                createEmptyViewerPrompt(EMPTY_NAME_PROMPT);\r
@@ -217,102 +211,6 @@ public class NameComposite extends EditorGroupedComposite {
                }\r
        }\r
 \r
-       /**\r
-        * All cosmetic - non-data-related, i.e. icons, fonts, etc. -\r
-        * transformations take place in this method.\r
-        * \r
-        * @param transformation\r
-        */\r
-       public void transform(String transformation) {\r
-\r
-               // A name that is a basionym for its group\r
-               if (transformation.equals(ADD_GROUP_BASIONYM)) {\r
-                       if (compositeType.equals(HOMOTYPIC_SYNONYM)) {\r
-                               setIcon(HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
-                       } else {\r
-                               setIcon(HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
-                       }\r
-               }\r
-\r
-               // A name that is NOT a basionym for its group          \r
-               if (transformation.equals(REMOVE_GROUP_BASIONYM)) {\r
-                       if (compositeType.equals(HOMOTYPIC_SYNONYM)) {\r
-                               setIcon(HOMOTYPIC_SYNONYM_ICON);\r
-                       } else {\r
-                               setIcon(HETEROTYPIC_SYNONYM_ICON);\r
-                       }\r
-               }\r
-\r
-               // A name that is the taxon's accepted name             \r
-               if (transformation.equals(ACCEPTED_TAXON)) {\r
-                       setDraggable(false);\r
-                       setIcon(ACCEPTED_ICON);\r
-                       setFont(ACCEPTED_FONT);\r
-                       setIndent(ACCEPTED_INDENT);\r
-\r
-                       createAcceptedMenu();\r
-\r
-                       compositeType = ACCEPTED_TAXON;\r
-               }\r
-\r
-               // A name that is a synonym for the taxon               \r
-               if (transformation.equals(HOMOTYPIC_SYNONYM)\r
-                               || transformation.equals(HETEROTYPIC_SYNONYM)) {\r
-                       setDraggable(true);\r
-                       setFont(SYNONYM_FONT);\r
-                       setIndent(SYNONYM_INDENT);\r
-\r
-                       createSynonymMenu();\r
-               }\r
-\r
-               // A name that is a homotypic synonym for the taxon                             \r
-               if (transformation.equals(HOMOTYPIC_SYNONYM)) {\r
-                       if (!(getData() instanceof Synonym)) {\r
-                               return;\r
-                       }\r
-                       Synonym synonym = (Synonym) getData();\r
-                       if (CdmUtil.isNameGroupBasionym(synonym.getName())) {\r
-                               setIcon(HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
-                       } else {\r
-                               setIcon(HOMOTYPIC_SYNONYM_ICON);\r
-                       }\r
-                       compositeType = HOMOTYPIC_SYNONYM;\r
-               }\r
-\r
-               // A name that is a heterotypic synonym for the taxon           \r
-               if (transformation.equals(HETEROTYPIC_SYNONYM)) {\r
-                       if (!(getData() instanceof Synonym)) {\r
-                               return;\r
-                       }\r
-                       Synonym synonym = (Synonym) getData();\r
-                       if (CdmUtil.isNameGroupBasionym(synonym.getName())) {\r
-                               setIcon(HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
-                       } else {\r
-                               setIcon(HETEROTYPIC_SYNONYM_ICON);\r
-                       }\r
-                       compositeType = HETEROTYPIC_SYNONYM;\r
-               }\r
-\r
-               // A name that is a misapplied name for the taxon               \r
-               if (transformation.equals(MISAPPLIED_NAME)) {\r
-\r
-                       setDraggable(true);\r
-                       setIcon(MISAPPLIEDNAME_ICON);\r
-                       setFont(MISAPPLIEDNAME_FONT);\r
-                       setIndent(MISAPPLIEDNAME_INDENT);\r
-\r
-                       createMisappliedNameMenu();\r
-\r
-                       compositeType = MISAPPLIED_NAME;\r
-               }\r
-\r
-               // Prompt save before closing this editor\r
-               setDirty(true);\r
-               \r
-               // Redraw\r
-               managedForm.getForm().layout();\r
-       }\r
-\r
        /**\r
         * Override of Composite.setData() which passes data along to\r
         * <code>NameComposite</code>'s <code>TextViewer</code> where appropriate.\r
@@ -400,8 +298,20 @@ public class NameComposite extends EditorGroupedComposite {
                                Composite parent = getParent();\r
                                final Composite grandParent = parent.getParent();\r
 \r
-                               new CreateNewHeterotypicCompositeAction(text, managedForm)\r
-                                               .run();\r
+//                             new CreateNewHeterotypicCompositeAction(text, managedForm)\r
+//                                             .run();\r
+                               \r
+                               IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+                               IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+                               IUndoableOperation operation = new CreateSynonymInNewGroupOperation\r
+                                               ("new heterotypic synonym", undoContext, taxon, text); //$NON-NLS-1$\r
+                               \r
+                               try {\r
+                                       IStatus status = operationHistory.execute(operation, null, null);\r
+                               } catch (ExecutionException e) {\r
+                                       // TODO Auto-generated catch block\r
+                                       e.printStackTrace();\r
+                               }\r
 \r
                                // setDirty(true);\r
                        }\r
@@ -421,128 +331,6 @@ public class NameComposite extends EditorGroupedComposite {
                \r
                return (NameViewer) getTextViewer();\r
        }\r
-\r
-       /**\r
-        * @param nameComposite\r
-        */\r
-       private void createSynonymMenu() {\r
-\r
-               if (!(getData() instanceof Synonym)) {\r
-                       return;\r
-               }\r
-\r
-               // Create right-click context menu\r
-               Synonym synonym = (Synonym) getData();\r
-               ContextMenu contextMenu = createContextMenu();\r
-\r
-               // Action to change composite to a misapplied name\r
-               Action misappliedNameAction = new MoveCompositeToMisappliedCompositeAction(\r
-                               this, managedForm);\r
-               contextMenu.addAction(misappliedNameAction);\r
-\r
-               // Action to delete composite\r
-               Action deleteSynonymAction = new DeleteSynonymCompositeAction(this,\r
-                               getTaxon());\r
-               contextMenu.addAction(deleteSynonymAction);\r
-\r
-               // Separator\r
-               contextMenu.addSeparator();\r
-\r
-               // Action to make the composite the basionym of the homotypic group\r
-               final Action addBasionymAction = new AddBasionymCompositeAction(this);\r
-               contextMenu.addAction(addBasionymAction);\r
-\r
-               // Action to remove the composite as basionym of the homotypic group\r
-               final Action removeBasionymAction = new RemoveBasionymCompositeAction(\r
-                               this);\r
-               contextMenu.addAction(removeBasionymAction);\r
-\r
-               // Listeners to activate / reactivate the above two actions as necessary\r
-               addBasionymAction\r
-                               .addPropertyChangeListener(new IPropertyChangeListener() {\r
-                                       public void propertyChange(\r
-                                                       org.eclipse.jface.util.PropertyChangeEvent event) {\r
-                                               if (event.getProperty().equals(\r
-                                                               ITaxEditorConstants.BASIONYM)) {\r
-                                                       removeBasionymAction.setEnabled(true);\r
-                                                       transform(NameComposite.ADD_GROUP_BASIONYM);\r
-                                               }\r
-                                       }\r
-                               });\r
-               removeBasionymAction\r
-                               .addPropertyChangeListener(new IPropertyChangeListener() {\r
-                                       public void propertyChange(\r
-                                                       org.eclipse.jface.util.PropertyChangeEvent event) {\r
-                                               if (event.getProperty().equals(\r
-                                                               ITaxEditorConstants.BASIONYM)) {\r
-                                                       addBasionymAction.setEnabled(true);\r
-                                                       transform(NameComposite.REMOVE_GROUP_BASIONYM);\r
-                                               }\r
-                                       }\r
-                               });\r
-\r
-               // Separator\r
-               contextMenu.addSeparator();\r
-\r
-               // Action to change this synonym to the taxon's accepted name\r
-               Action changeToThisTaxon = new ChangeSynonymToTaxonUiAction(synonym,\r
-                               getTaxon());\r
-               contextMenu.addAction(changeToThisTaxon);\r
-\r
-               // Action to make a new taxon with this synonym as the accepted name\r
-               Action changeToNewAccepted = new ChangeCompositeToNewTaxonAction(this,\r
-                               getTaxon());\r
-               contextMenu.addAction(changeToNewAccepted);\r
-       }\r
-\r
-       /**\r
-        * @param nameComposite\r
-        */\r
-       private void createAcceptedMenu() {\r
-\r
-               ContextMenu contextMenu = createContextMenu();\r
-\r
-               // TODO Make action "Create autonym and subspecies"\r
-\r
-               Action changeTaxonAction = new ChangeTaxonToSynonymAction(getTaxon());\r
-               contextMenu.addAction(changeTaxonAction);\r
-\r
-               Action moveTaxonAction = new MoveTaxonDialogAction(getTaxon());\r
-               contextMenu.addAction(moveTaxonAction);\r
-       }\r
-\r
-       /**\r
-        * @param nameComposite\r
-        */\r
-       private void createMisappliedNameMenu() {\r
-\r
-               ContextMenu contextMenu = createContextMenu();\r
-\r
-               Action deleteMisappliedNameAction = new DeleteMisappliedNameCompositeAction(\r
-                               this, getTaxon());\r
-               contextMenu.addAction(deleteMisappliedNameAction);\r
-       }\r
-\r
-       public boolean setParent(Composite parent) {\r
-\r
-               if (super.setParent(parent)) {\r
-\r
-                       // Has this been moved to the misapplied names group?\r
-                       if (parent.getData(ITaxEditorConstants.MISAPPLIED_NAME) != null) {\r
-                               new ChangeCompositeToMisappliedNameAction(this, managedForm)\r
-                                               .run();\r
-                       }\r
-\r
-                       // Has this been moved to a HomotypicalGroup?\r
-                       if (parent.getData() instanceof HomotypicalGroup) {\r
-                               new AdaptCompositeToGroupAction(this,\r
-                                               (EditorGroupComposite) parent).run();\r
-                       }\r
-                       return true;\r
-\r
-               }\r
-               return false;\r
-       }\r
        \r
        public void setText(String text) {\r
                Assert.isNotNull(getTextViewer(), \r
@@ -560,7 +348,6 @@ public class NameComposite extends EditorGroupedComposite {
                this.nameViewer = textViewer;\r
        }\r
 \r
-       @Override\r
        public IPropertySource getPropertySource() {\r
                \r
                // Property source for misapplied name\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/SynonymComposite.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/SynonymComposite.java
new file mode 100644 (file)
index 0000000..eee0b61
--- /dev/null
@@ -0,0 +1,278 @@
+/**\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.editor.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IOperationHistory;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.forms.IManagedForm;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\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.UiUtil;\r
+import eu.etaxonomy.taxeditor.editor.ContextMenu;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeSynonymToMisappliedNameOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeSynonymToTaxonOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.MakeSynonymAcceptedOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.MakeSynonymGroupBasionymOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.RemoveSynonymOperation;\r
+import eu.etaxonomy.taxeditor.operations.name.UnmakeSynonymGroupBasionymOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 13.01.2009\r
+ * @version 1.0\r
+ */\r
+public class SynonymComposite extends NameComposite {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(SynonymComposite.class);\r
+       \r
+       private Synonym synonym;\r
+       \r
+       public SynonymComposite(Composite parent, IManagedForm form,\r
+                       Taxon taxon, Synonym synonym) {\r
+               super(parent, form, null, synonym);\r
+               \r
+               this.taxon = taxon;\r
+               this.synonym = synonym;\r
+               \r
+               setDraggable(true);\r
+               setFont(SYNONYM_FONT);\r
+               setIndent(SYNONYM_INDENT);\r
+               \r
+               if (isHomotypic()) {\r
+                       if (CdmUtil.isNameGroupBasionym(synonym.getName())) {\r
+                               setIcon(HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
+                       } else {\r
+                               setIcon(HOMOTYPIC_SYNONYM_ICON);\r
+                       }       \r
+               } else {\r
+                       if (CdmUtil.isNameGroupBasionym(synonym.getName())) {\r
+                               setIcon(HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);\r
+                       } else {\r
+                               setIcon(HETEROTYPIC_SYNONYM_ICON);\r
+                       }\r
+               }\r
+\r
+               createMenu();\r
+       }\r
+       \r
+       private boolean isHomotypic() {\r
+               HomotypicalGroup group = synonym.getHomotypicGroup();\r
+               return group.equals(taxon.getHomotypicGroup()); \r
+       }\r
+       \r
+       public Synonym getSynonym() {\r
+               return synonym;\r
+       }\r
+       \r
+       public boolean setParent(Composite parent) {\r
+\r
+               if (super.setParent(parent)) {  \r
+                       \r
+                       // Has this been moved to the misapplied names group?\r
+                       if (parent instanceof MisappliedGroupComposite) {\r
+                               \r
+                               IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+                               IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+                               IUndoableOperation operation = new ChangeSynonymToMisappliedNameOperation\r
+                                               ("change to misapplication", undoContext, taxon, synonym); //$NON-NLS-1$\r
+                               \r
+                               try {\r
+                                       IStatus status = operationHistory.execute(operation, null, null);\r
+                               } catch (ExecutionException e) {\r
+                                       // TODO Auto-generated catch block\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+\r
+                       // Has this been moved to a HomotypicalGroup?\r
+                       if (parent instanceof HomotypicalGroupComposite) {\r
+                               \r
+                               HomotypicalGroup homotypicalGroup = \r
+                                               ((HomotypicalGroupComposite)parent).getGroup();\r
+                               \r
+                               // Make sure we are not dropping synonym on its own group\r
+                               if (homotypicalGroup.equals(synonym.getHomotypicGroup())) {\r
+                                       return true;\r
+                               }\r
+\r
+                               IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+                               IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+                               IUndoableOperation operation = new ChangeHomotypicGroupOperation\r
+                                               ("change type", undoContext, taxon, synonym, homotypicalGroup); //$NON-NLS-1$\r
+                               \r
+                               try {\r
+                                       IStatus status = operationHistory.execute(operation, null, null);\r
+                               } catch (ExecutionException e) {\r
+                                       // TODO Auto-generated catch block\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+                       return true;\r
+\r
+               }\r
+               return false;\r
+       }\r
+       \r
+       /**\r
+        * @param nameComposite\r
+        */\r
+       private void createMenu() {\r
+\r
+               ContextMenu contextMenu = createContextMenu();\r
+\r
+               final IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+               final IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(taxon);\r
+               \r
+               // Change composite to a misapplied name\r
+               String text = "Change synonym to misapplied name"; //$NON-NLS-1$\r
+               ImageDescriptor image = TaxEditorPlugin.getDefault()\r
+                               .getImageDescriptor(ITaxEditorConstants.MISAPPLIED_NAME_ICON);\r
+               contextMenu.addAction(new Action(text, image){\r
+                                               \r
+                       public void run() {\r
+                               IUndoableOperation operation = new ChangeSynonymToMisappliedNameOperation\r
+                                               (this.getText(), undoContext, taxon, synonym);\r
+                               try {\r
+                                       IStatus status = operationHistory.execute(operation, null, null);\r
+                               } catch (ExecutionException e) {\r
+                                       // TODO Auto-generated catch block\r
+                                       e.printStackTrace();\r
+                               }\r
+                       }\r
+               });\r
+               \r
+               // Remove composite\r
+               text = "Remove synonym from taxon"; //$NON-NLS-1$\r
+               image = TaxEditorPlugin.getDefault()\r
+                               .getImageDescriptor(ITaxEditorConstants.ACTIVE_DELETE_ICON);\r
+               contextMenu.addAction(new Action(text, image){\r
+                       \r
+                       public void run() {\r
+                               IUndoableOperation operation = new RemoveSynonymOperation\r
+                                               (this.getText(), undoContext, taxon, synonym);\r
+                               try {\r
+                                       IStatus status = operationHistory.execute(operation, null, null);\r
+                               } catch (ExecutionException e) {\r
+                                       // TODO Auto-generated catch block\r
+                                       e.printStackTrace();\r
+                               }                               \r
+                       }\r
+               });\r
+               \r
+               // Separator\r
+               contextMenu.addSeparator();\r
+                               \r
+               // Make the synonym the basionym of the homotypic group\r
+               text = Messages.getString\r
+                               ("AddBasionymCompositeAction.0", synonym.getName());  //$NON-NLS-1$\r
+               image = TaxEditorPlugin.getDefault()\r
+                                       .getImageDescriptor(ITaxEditorConstants.BASIONYM_ICON);\r
+               Action makeBasionymAction = new Action(text, image){\r
+                       \r
+                       public void run() {\r
+                               IUndoableOperation operation = new MakeSynonymGroupBasionymOperation\r
+                                               (this.getText(), undoContext, taxon, synonym);\r
+                               try {\r
+                                       IStatus status = operationHistory.execute(operation, null, null);\r
+                               } catch (ExecutionException e) {\r
+                                       // TODO Auto-generated catch block\r
+                                       e.printStackTrace();\r
+                               }                               \r
+                       }\r
+               };\r
+               contextMenu.addAction(makeBasionymAction);      \r
+       \r
+               // Action to remove the composite as basionym of the homotypic group\r
+               text = Messages.getString\r
+                               ("RemoveBasionymCompositeAction.0", synonym.getName());  //$NON-NLS-1$\r
+               image = TaxEditorPlugin.getDefault()\r
+                                       .getImageDescriptor(ITaxEditorConstants.BASIONYM_ICON);\r
+               Action unmakeBasionymAction = new Action(text, image){\r
+                       \r
+                       public void run() {\r
+                               IUndoableOperation operation = new UnmakeSynonymGroupBasionymOperation\r
+                                               (this.getText(), undoContext, taxon, synonym);\r
+                               try {\r
+                                       IStatus status = operationHistory.execute(operation, null, null);\r
+                               } catch (ExecutionException e) {\r
+                                       // TODO Auto-generated catch block\r
+                                       e.printStackTrace();\r
+                               }                               \r
+                       }\r
+               };\r
+               contextMenu.addAction(unmakeBasionymAction);\r
+               \r
+               if (CdmUtil.isNameGroupBasionym(synonym.getName())) {\r
+                       \r
+                       // Gray out action for "make synonym group basionym"\r
+                       makeBasionymAction.setEnabled(false);\r
+               } else {\r
+                       \r
+                       // Gray out action for "unmake synonym group basionym"\r
+                       unmakeBasionymAction.setEnabled(false);\r
+               }\r
+               \r
+               // Separator\r
+               contextMenu.addSeparator();\r
+\r
+               // Change this synonym to the taxon's accepted name\r
+               text = "Make synonym this taxon's accepted taxon"; //$NON-NLS-1$\r
+               image = TaxEditorPlugin.getDefault()\r
+                                       .getImageDescriptor(ITaxEditorConstants.SWAP_SYNONYM_AND_TAXON_ICON);\r
+               Action swapAction = new Action(text, image){\r
+                       \r
+                       public void run() {\r
+                               IUndoableOperation operation = new MakeSynonymAcceptedOperation\r
+                                               (this.getText(), undoContext, taxon, synonym);\r
+                               try {\r
+                                       IStatus status = operationHistory.execute(operation, null, null);\r
+                               } catch (ExecutionException e) {\r
+                                       // TODO Auto-generated catch block\r
+                                       e.printStackTrace();\r
+                               }                               \r
+                       }\r
+               };\r
+               contextMenu.addAction(swapAction);\r
+               // TODO fix operation\r
+               swapAction.setEnabled(false);\r
+               \r
+               // Make a new taxon with this synonym as the accepted name\r
+               text = "Use synonym name to make a new taxon"; //$NON-NLS-1$\r
+               image = TaxEditorPlugin.getDefault()\r
+                                       .getImageDescriptor(ITaxEditorConstants.SYNONYM_TO_TAXON_ICON);\r
+\r
+               contextMenu.addAction(new Action(text, image){\r
+                       \r
+                       public void run() {\r
+                               IUndoableOperation operation = new ChangeSynonymToTaxonOperation\r
+                                               (this.getText(), undoContext, taxon, synonym);\r
+                               try {\r
+                                       IStatus status = operationHistory.execute(operation, null, null);\r
+                               } catch (ExecutionException e) {\r
+                                       // TODO Auto-generated catch block\r
+                                       e.printStackTrace();\r
+                               }                               \r
+                       }\r
+               });\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java
new file mode 100644 (file)
index 0000000..acf2931
--- /dev/null
@@ -0,0 +1,372 @@
+/**\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.editor.name;\r
+\r
+import java.beans.PropertyChangeEvent;\r
+import java.beans.PropertyChangeListener;\r
+import java.util.HashSet;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IOperationHistory;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.jface.dialogs.IMessageProvider;\r
+import org.eclipse.swt.dnd.DND;\r
+import org.eclipse.swt.dnd.DropTarget;\r
+import org.eclipse.swt.dnd.DropTargetAdapter;\r
+import org.eclipse.swt.dnd.DropTargetEvent;\r
+import org.eclipse.swt.dnd.Transfer;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorSite;\r
+import org.eclipse.ui.PartInitException;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.name.NonViralName;\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.actions.WidgetTransfer;\r
+import eu.etaxonomy.taxeditor.actions.ui.AdaptCompositeToGroupAction;\r
+import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditor;\r
+import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
+import eu.etaxonomy.taxeditor.editor.FreeTextElementFactory;\r
+import eu.etaxonomy.taxeditor.editor.INameEditorCompositeRepository;\r
+import eu.etaxonomy.taxeditor.operations.name.ChangeHomotypicGroupOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 15.05.2008\r
+ * @version 1.0\r
+ */\r
+public class TaxonNameEditor extends AbstractTaxonEditor \r
+               implements INameEditorCompositeRepository{\r
+       private static final Logger logger = Logger.getLogger(TaxonNameEditor.class);\r
+               \r
+       /**\r
+        * Shared listener that sets dirty state to true \r
+        *  when any registered property changes \r
+        */\r
+       private PropertyChangeListener taxonChangeListener = new PropertyChangeListener() {\r
+               public void propertyChange(PropertyChangeEvent event) {\r
+                       if (event.getPropertyName().equals(ITaxEditorConstants.PROPERTY_SHEET_CHANGE)) {\r
+                               firePropertyChange(PROP_DIRTY);\r
+                       }\r
+               }\r
+       };              \r
+       \r
+       @Override\r
+       public void doSave(IProgressMonitor monitor) {}\r
+\r
+       @Override\r
+       public void doSaveAs() {}\r
+\r
+       @Override\r
+       public void init(IEditorSite site, IEditorInput input)\r
+                       throws PartInitException {\r
+                               \r
+               super.init(site, input);\r
+               \r
+               Taxon taxon = getTaxon();\r
+       \r
+               UiUtil.addTaxonNameEditor(taxon, this);\r
+               \r
+               // Register listeners for any change in accepted name or set of relations\r
+               taxon.getName().addPropertyChangeListener(taxonChangeListener);\r
+               taxon.addPropertyChangeListener(taxonChangeListener);\r
+       }\r
+\r
+       @Override\r
+       public boolean isDirty() {\r
+               return false;\r
+       }\r
+\r
+       @Override\r
+       public boolean isSaveAsAllowed() {\r
+               return false;\r
+       }\r
+       \r
+       @Override\r
+       public void createPartControl(final Composite composite) {\r
+\r
+               super.createPartControl(composite);\r
+               \r
+               Taxon taxon = getTaxon();\r
+                               \r
+               NameComposite acceptedNameComposite = \r
+                               (NameComposite) FreeTextElementFactory.getDefault().\r
+                                               createAcceptedTaxon(managedForm, taxon);\r
+                               \r
+               for (TaxonBase taxonBase : new IterableSynonymyList(taxon)) {\r
+                       if (taxonBase instanceof Synonym) {\r
+                               FreeTextElementFactory.getDefault().createSynonym((Synonym) taxonBase, taxon);                          \r
+                       } else {\r
+                               FreeTextElementFactory.getDefault().createMisappliedName((Taxon) taxonBase, taxon);\r
+                       }\r
+               }\r
+               \r
+//             // Create a homotypic group composite for the accepted taxon\r
+//             HomotypicalGroup homotypicGroup = taxon.getHomotypicGroup();\r
+//             EditorGroupComposite homotypicGroupComposite = new EditorGroupComposite(parent, managedForm, homotypicGroup);   \r
+//             homotypicGroupComposite.setData(ITaxEditorConstants.TAXON, taxon);\r
+//             \r
+//             NameComposite nameCompositeWithWarning = null;\r
+//             \r
+//             // Add accepted taxon to the group\r
+//             NameComposite acceptedNameComposite = new NameComposite(homotypicGroupComposite, managedForm, NameComposite.ACCEPTED_TAXON, taxon);\r
+//             \r
+//             warnIfNameConflictWithParent(acceptedNameComposite);\r
+//             \r
+//             IterableSynonymyList synonymyList = new IterableSynonymyList(taxon);\r
+//             HomotypicalGroup lastHeterotypicGroup = null;\r
+//             HomotypicalGroup currentHeterotypicGroup = null;\r
+//             EditorGroupComposite heterotypicGroupComposite = null;\r
+//             EditorGroupComposite misappliedNameGroupComposite = null;\r
+//                             \r
+//             for (TaxonBase synonymOrMisName : synonymyList) {\r
+//                     if (synonymOrMisName instanceof Synonym) {\r
+//                             \r
+//                             Synonym synonym = (Synonym) synonymOrMisName;\r
+//                             currentHeterotypicGroup = synonym.getHomotypicGroup();\r
+//                             \r
+//                             if (currentHeterotypicGroup.equals(homotypicGroup)) {\r
+//                                     \r
+//                                     NameComposite homotypicSynonymComposite = new NameComposite(homotypicGroupComposite, managedForm, NameComposite.HOMOTYPIC_SYNONYM, synonym);\r
+//                                     \r
+//                             } else {\r
+//                                     \r
+//                                     if (!currentHeterotypicGroup.equals(lastHeterotypicGroup)) {\r
+//                                             \r
+//                                             // Create a new group composite\r
+//                                             heterotypicGroupComposite = new EditorGroupComposite(parent, managedForm, currentHeterotypicGroup);\r
+//                                             heterotypicGroupComposite.setData(ITaxEditorConstants.TAXON, taxon);\r
+//                                             lastHeterotypicGroup = currentHeterotypicGroup;\r
+//                                     }\r
+//                                     \r
+//                                     NameComposite heterotypicSynonymComposite = new NameComposite(heterotypicGroupComposite, managedForm, NameComposite.HETEROTYPIC_SYNONYM, synonym);\r
+//                             }\r
+//                     } else {\r
+//                             \r
+//                             Taxon misappliedName = (Taxon) synonymOrMisName;\r
+//                             if (UiUtil.getMisappliedNameGroupComposite(managedForm) == null) {\r
+//                                     misappliedNameGroupComposite = UiUtil.createMisappliedNameGroupComposite(managedForm);\r
+//                             }\r
+//                             NameComposite misappliedNameComposite = new NameComposite(misappliedNameGroupComposite, managedForm, NameComposite.MISAPPLIED_NAME, misappliedName);\r
+//                     }\r
+//             }\r
+                       \r
+               // Listen for names being dragged outside of existing homotypic groups -\r
+               //  user wants to create a new group\r
+               Transfer[] types = new Transfer[] {WidgetTransfer.getInstance()};\r
+               int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
+               DropTarget target = new DropTarget(parent, operations);\r
+               target.setTransfer(types);\r
+               target.addDropListener(new DropTargetAdapter() {\r
+                       \r
+                       public void drop(DropTargetEvent event) {\r
+                               \r
+                               IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+                               \r
+                               Synonym synonym = null;\r
+                               if(event.data instanceof SynonymComposite){\r
+                                       synonym = ((SynonymComposite)event.data).getSynonym();\r
+                               }\r
+                               \r
+                               IUndoContext undoContext = UiUtil.getTaxonNameEditorUndoContext(getTaxon());\r
+                               IUndoableOperation operation = new ChangeHomotypicGroupOperation\r
+                                               ("change type", undoContext, \r
+                                                               getTaxon(), synonym, HomotypicalGroup.NewInstance());\r
+                               \r
+                               try {\r
+                                       IStatus status = operationHistory.execute(operation, null, null);\r
+                               } catch (ExecutionException e) {\r
+                                       // TODO Auto-generated catch block\r
+                                       e.printStackTrace();\r
+                               }\r
+                               \r
+                       }               \r
+               });\r
+                               \r
+               // We've added elements to the managed form, so redraw it\r
+               scrolledForm.reflow(true);\r
+               \r
+               setSelection(acceptedNameComposite);\r
+               acceptedNameComposite.drawBorder();\r
+       }\r
+       \r
+       \r
+       \r
+       public boolean redraw(){\r
+               \r
+               Taxon taxon = getTaxon();\r
+               \r
+               for (Control child : parent.getChildren()){\r
+                       child.dispose();\r
+               }\r
+               \r
+               this.selectedObject = null;\r
+               \r
+               NameComposite acceptedNameComposite = \r
+                               (NameComposite) FreeTextElementFactory.getDefault().\r
+                                               createAcceptedTaxon(managedForm, taxon);\r
+                               \r
+               for (TaxonBase taxonBase : new IterableSynonymyList(taxon)) {\r
+                       if (taxonBase instanceof Synonym) {\r
+                               FreeTextElementFactory.getDefault().createSynonym((Synonym) taxonBase, taxon);                          \r
+                       } else {\r
+                               FreeTextElementFactory.getDefault().createMisappliedName((Taxon) taxonBase, taxon);\r
+                       }\r
+               }\r
+               \r
+               scrolledForm.reflow(true);\r
+                               \r
+               return true;\r
+       }\r
+       \r
+       private NameComposite warnIfNameConflictWithParent(NameComposite nameComposite) {\r
+               \r
+               String message = null;\r
+               Taxon taxon = getTaxon();\r
+               \r
+               if (nameComposite.getData() instanceof Taxon) {\r
+                       taxon = (Taxon) nameComposite.getData();\r
+                       Taxon parentTaxon = taxon.getTaxonomicParent();\r
+                       \r
+                       if (parentTaxon != null && taxon.getName() instanceof NonViralName \r
+                                       && parentTaxon.getName() instanceof NonViralName) {\r
+                               NonViralName name = (NonViralName) taxon.getName();\r
+                               NonViralName parentName = (NonViralName) parentTaxon.getName();\r
+                               \r
+                               Rank rank = name.getRank();\r
+                               if (rank != null) {\r
+                                       if (rank.equals(Rank.SPECIES())) {\r
+                                               String genus = name.getGenusOrUninomial();\r
+                                               String parentGenus = parentName.getGenusOrUninomial();\r
+\r
+                                               // If either taxon has a problem, name fields will be null\r
+                                               if (genus != null && parentGenus != null) {\r
+                                                       if (!parentGenus.equals(genus)) {\r
+                                                               message = "Warning: taxon's genus does not match parent taxon's genus.";\r
+                                                       }\r
+                                               }\r
+                                       }\r
+       \r
+                                       if (rank.equals(Rank.SUBSPECIES())) {\r
+                                               String specificEpithet = name.getSpecificEpithet();\r
+                                               String parentSpecificEpithet = parentName.getSpecificEpithet();\r
+                                               \r
+                                               // If either taxon has a problem, name fields will be null\r
+                                               if (specificEpithet != null && parentSpecificEpithet != null) {\r
+                                                       if (!parentSpecificEpithet.equals(specificEpithet)) {\r
+                                                               message = "Warning: taxon's specific epithet does not match parent taxon's specific epithet.";\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               }\r
+                               \r
+                       }\r
+               }\r
+               \r
+               if (message != null && nameComposite.getTextViewer() != null) {\r
+                       managedForm.getMessageManager().addMessage\r
+                                       ("TEST2", message, null, IMessageProvider.WARNING, \r
+                                                       nameComposite.getTextViewer().getTextWidget());\r
+                       scrolledForm.setMessage(null, 0, null);\r
+               }\r
+               return nameComposite;\r
+       }\r
+\r
+       \r
+       private HashSet<Composite> getAllComposites(){\r
+               HashSet<Composite> composites = new HashSet<Composite>();\r
+               composites.add(parent);\r
+               composites.addAll(getComposites(parent));\r
+               return composites;\r
+       }\r
+       \r
+       private HashSet<Composite> getComposites(Composite composite){\r
+               HashSet<Composite> composites = new HashSet<Composite>();\r
+               for(Control child : composite.getChildren()){\r
+                       if(child instanceof Composite){\r
+                               composites.add((Composite)child);\r
+                               composites.addAll(getComposites((Composite)child));\r
+                       }\r
+               }\r
+               return composites;\r
+       }\r
+       \r
+       \r
+       @Override\r
+       public Composite getAcceptedName() {\r
+               \r
+               for(Composite c : getAllComposites()){\r
+                       if(c instanceof AcceptedNameComposite){\r
+                               return c;\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Composite getHomotypicGroup(HomotypicalGroup group) {\r
+               for(Composite c : getAllComposites()){\r
+                       if(c instanceof HomotypicalGroupComposite){\r
+                               if (group.equals(\r
+                                               ((HomotypicalGroupComposite) c).getGroup())) {\r
+                                       return c;\r
+                               }\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Composite getMisappliedGroup() {\r
+               for(Composite c : getAllComposites()){\r
+                       if(c instanceof MisappliedGroupComposite){\r
+                               return c;\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Composite getMisappliedName(Taxon misappliedName) {\r
+               for(Composite c : getAllComposites()){\r
+                       if(c instanceof MisappliedNameComposite){\r
+                               if (misappliedName.equals(\r
+                                               ((MisappliedNameComposite) c).getMisappliedName())) {\r
+                                       return c;\r
+                               }\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+\r
+       @Override\r
+       public Composite getSynonym(Synonym synonym) {\r
+               for(Composite c : getAllComposites()){\r
+                       if(c instanceof SynonymComposite){\r
+                               if (synonym.equals \r
+                                               (((SynonymComposite) c).getSynonym())) {\r
+                                       return c;\r
+                               }\r
+                       }\r
+               }\r
+               return null;\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditorView.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditorView.java
deleted file mode 100644 (file)
index 3e950d7..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/**\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.editor.name;\r
-\r
-import java.beans.PropertyChangeEvent;\r
-import java.beans.PropertyChangeListener;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.jface.dialogs.IMessageProvider;\r
-import org.eclipse.swt.dnd.DND;\r
-import org.eclipse.swt.dnd.DropTarget;\r
-import org.eclipse.swt.dnd.DropTargetAdapter;\r
-import org.eclipse.swt.dnd.DropTargetEvent;\r
-import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.IEditorInput;\r
-import org.eclipse.ui.IEditorSite;\r
-import org.eclipse.ui.PartInitException;\r
-\r
-import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
-import eu.etaxonomy.cdm.model.name.NonViralName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
-import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
-import eu.etaxonomy.taxeditor.UiUtil;\r
-import eu.etaxonomy.taxeditor.actions.WidgetTransfer;\r
-import eu.etaxonomy.taxeditor.actions.ui.AdaptCompositeToGroupAction;\r
-import eu.etaxonomy.taxeditor.editor.AbstractTaxonEditorView;\r
-import eu.etaxonomy.taxeditor.editor.EditorGroupComposite;\r
-\r
-/**\r
- * @author p.ciardelli\r
- * @created 15.05.2008\r
- * @version 1.0\r
- */\r
-public class TaxonNameEditorView extends AbstractTaxonEditorView {\r
-       private static final Logger logger = Logger.getLogger(TaxonNameEditorView.class);\r
-               \r
-       /**\r
-        * Shared listener that sets dirty state to true \r
-        *  when any registered property changes \r
-        */\r
-       private PropertyChangeListener taxonChangeListener = new PropertyChangeListener() {\r
-               public void propertyChange(PropertyChangeEvent event) {\r
-                       if (event.getPropertyName().equals(ITaxEditorConstants.PROPERTY_SHEET_CHANGE)) {\r
-                               firePropertyChange(PROP_DIRTY);\r
-                       }\r
-               }\r
-       };              \r
-       \r
-       @Override\r
-       public void doSave(IProgressMonitor monitor) {}\r
-\r
-       @Override\r
-       public void doSaveAs() {}\r
-\r
-       @Override\r
-       public void init(IEditorSite site, IEditorInput input)\r
-                       throws PartInitException {\r
-                               \r
-               super.init(site, input);\r
-               \r
-               Taxon taxon = getTaxon();\r
-               \r
-               // Register listeners for any change in accepted name or set of relations\r
-               taxon.getName().addPropertyChangeListener(taxonChangeListener);\r
-               taxon.addPropertyChangeListener(taxonChangeListener);\r
-       }\r
-\r
-       @Override\r
-       public boolean isDirty() {\r
-               return false;\r
-       }\r
-\r
-       @Override\r
-       public boolean isSaveAsAllowed() {\r
-               return false;\r
-       }\r
-       \r
-       @Override\r
-       public void createPartControl(final Composite composite) {\r
-\r
-               super.createPartControl(composite);\r
-               \r
-               Taxon taxon = getTaxon();\r
-               \r
-               // Create a homotypic group composite for the accepted taxon\r
-               HomotypicalGroup homotypicGroup = taxon.getHomotypicGroup();\r
-               EditorGroupComposite homotypicGroupComposite = new EditorGroupComposite(parent, managedForm, homotypicGroup);           \r
-               homotypicGroupComposite.setData(ITaxEditorConstants.TAXON, taxon);\r
-               \r
-               NameComposite nameCompositeWithWarning = null;\r
-               \r
-               // Add accepted taxon to the group\r
-               NameComposite acceptedNameComposite = new NameComposite(homotypicGroupComposite, managedForm, NameComposite.ACCEPTED_TAXON, taxon);\r
-               \r
-               warnIfNameConflictWithParent(acceptedNameComposite);\r
-               \r
-               IterableSynonymyList synonymyList = new IterableSynonymyList(taxon);\r
-               HomotypicalGroup lastHeterotypicGroup = null;\r
-               HomotypicalGroup currentHeterotypicGroup = null;\r
-               EditorGroupComposite heterotypicGroupComposite = null;\r
-               EditorGroupComposite misappliedNameGroupComposite = null;\r
-                               \r
-               for (TaxonBase synonymOrMisName : synonymyList) {\r
-                       if (synonymOrMisName instanceof Synonym) {\r
-                               \r
-                               Synonym synonym = (Synonym) synonymOrMisName;\r
-                               currentHeterotypicGroup = synonym.getHomotypicGroup();\r
-                               \r
-                               if (currentHeterotypicGroup.equals(homotypicGroup)) {\r
-                                       \r
-                                       NameComposite homotypicSynonymComposite = new NameComposite(homotypicGroupComposite, managedForm, NameComposite.HOMOTYPIC_SYNONYM, synonym);\r
-                                       \r
-                               } else {\r
-                                       \r
-                                       if (!currentHeterotypicGroup.equals(lastHeterotypicGroup)) {\r
-                                               \r
-                                               // Create a new group composite\r
-                                               heterotypicGroupComposite = new EditorGroupComposite(parent, managedForm, currentHeterotypicGroup);\r
-                                               heterotypicGroupComposite.setData(ITaxEditorConstants.TAXON, taxon);\r
-                                               lastHeterotypicGroup = currentHeterotypicGroup;\r
-                                       }\r
-                                       \r
-                                       NameComposite heterotypicSynonymComposite = new NameComposite(heterotypicGroupComposite, managedForm, NameComposite.HETEROTYPIC_SYNONYM, synonym);\r
-                               }\r
-                       } else {\r
-                               \r
-                               Taxon misappliedName = (Taxon) synonymOrMisName;\r
-                               if (UiUtil.getMisappliedNameGroupComposite(managedForm) == null) {\r
-                                       misappliedNameGroupComposite = UiUtil.createMisappliedNameGroupComposite(managedForm);\r
-                               }\r
-                               NameComposite misappliedNameComposite = new NameComposite(misappliedNameGroupComposite, managedForm, NameComposite.MISAPPLIED_NAME, misappliedName);\r
-                       }\r
-               }\r
-                       \r
-               // Listen for names being dragged outside of existing homotypic groups -\r
-               //  user wants to create a new group\r
-               Transfer[] types = new Transfer[] {WidgetTransfer.getInstance()};\r
-               int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
-               DropTarget target = new DropTarget(parent, operations);\r
-               target.setTransfer(types);\r
-               target.addDropListener(new DropTargetAdapter() {\r
-                       \r
-                       public void drop(DropTargetEvent event) {\r
-                               \r
-                               EditorGroupComposite newGroupComposite = new EditorGroupComposite(parent, managedForm, new HomotypicalGroup());                                                 \r
-                               \r
-                               NameComposite nameComposite = (NameComposite) event.data;\r
-                               nameComposite.setParent(newGroupComposite);                             \r
-                               \r
-                               new AdaptCompositeToGroupAction(nameComposite, newGroupComposite).run();\r
-                       }               \r
-               });\r
-                               \r
-               // We've added elements to the managed form, so redraw it\r
-               scrolledForm.reflow(true);\r
-               \r
-               setSelection(acceptedNameComposite);\r
-               acceptedNameComposite.drawBorder();\r
-       }\r
-       \r
-       \r
-       private NameComposite warnIfNameConflictWithParent(NameComposite nameComposite) {\r
-               \r
-               String message = null;\r
-               Taxon taxon = getTaxon();\r
-               \r
-               if (nameComposite.getData() instanceof Taxon) {\r
-                       taxon = (Taxon) nameComposite.getData();\r
-                       Taxon parentTaxon = taxon.getTaxonomicParent();\r
-                       \r
-                       if (parentTaxon != null && taxon.getName() instanceof NonViralName \r
-                                       && parentTaxon.getName() instanceof NonViralName) {\r
-                               NonViralName name = (NonViralName) taxon.getName();\r
-                               NonViralName parentName = (NonViralName) parentTaxon.getName();\r
-                               \r
-                               Rank rank = name.getRank();\r
-                               if (rank != null) {\r
-                                       if (rank.equals(Rank.SPECIES())) {\r
-                                               String genus = name.getGenusOrUninomial();\r
-                                               String parentGenus = parentName.getGenusOrUninomial();\r
-\r
-                                               // If either taxon has a problem, name fields will be null\r
-                                               if (genus != null && parentGenus != null) {\r
-                                                       if (!parentGenus.equals(genus)) {\r
-                                                               message = "Warning: taxon's genus does not match parent taxon's genus.";\r
-                                                       }\r
-                                               }\r
-                                       }\r
-       \r
-                                       if (rank.equals(Rank.SUBSPECIES())) {\r
-                                               String specificEpithet = name.getSpecificEpithet();\r
-                                               String parentSpecificEpithet = parentName.getSpecificEpithet();\r
-                                               \r
-                                               // If either taxon has a problem, name fields will be null\r
-                                               if (specificEpithet != null && parentSpecificEpithet != null) {\r
-                                                       if (!parentSpecificEpithet.equals(specificEpithet)) {\r
-                                                               message = "Warning: taxon's specific epithet does not match parent taxon's specific epithet.";\r
-                                                       }\r
-                                               }\r
-                                       }\r
-                               }\r
-                               \r
-                       }\r
-               }\r
-               \r
-               if (message != null && nameComposite.getTextViewer() != null) {\r
-                       managedForm.getMessageManager().addMessage\r
-                                       ("TEST2", message, null, IMessageProvider.WARNING, \r
-                                                       nameComposite.getTextViewer().getTextWidget());\r
-                       scrolledForm.setMessage(null, 0, null);\r
-               }\r
-               return nameComposite;\r
-       }\r
-\r
-}
\ No newline at end of file
index 92df44d653154e4cf6f36e11bfce3fa0cb4ce3ba..597445a3f01ecc407f57d38380d99563f2ae58a9 100644 (file)
@@ -1 +1,5 @@
-TaxonCompositeFactory.1=Change to misapplied name\r
+AddBasionymCompositeAction.0.ICBN=Set as basionym for homotypical group\r
+AddBasionymCompositeAction.0.ICZN=Set as original combination for homotypical group\r
+RemoveBasionymCompositeAction.0.ICBN=Remove as basionym for homotypical group\r
+RemoveBasionymCompositeAction.0.ICZN=Remove as original combination for homotypical group\r
+SynonymComposite.0=asdflkjasdlkfjs\r
index c78821e07a7fb1ad5ffdb69c1616e087003be573..8d67f32277d2f5ffc4cc72cc985ed9ea468aed38 100644 (file)
@@ -39,9 +39,9 @@ import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
 import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.datasource.CdmTransactionController;\r
 import eu.etaxonomy.taxeditor.editor.name.CdmParserController;\r
+import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
 \r
 /**\r
  * @author p.ciardelli\r
@@ -101,8 +101,8 @@ public class CdmSessionDataRepository implements ICdmSessionDataRepository {
        public void clearTaxonData() {\r
                removeAllTaxa();\r
                \r
-               // Clear "recent names" and "favorites" lists\r
-               TaxEditorPlugin.getDefault().clearObservableLists();\r
+               // Clear "recent names" list\r
+               RecentNamesView.clearRecentNames();\r
        }\r
 \r
        @Override\r
@@ -272,8 +272,7 @@ public class CdmSessionDataRepository implements ICdmSessionDataRepository {
                }\r
                \r
                // Remove from recent names list\r
-               TaxEditorPlugin.getDefault().\r
-                               getObservableRecentNamesList().remove(taxon);\r
+               RecentNamesView.removeRecentName(taxon);\r
        }\r
        \r
        private void removeTaxonomicChild(Taxon taxon, Taxon parentTaxon) {\r
index 575f2c980943a56cc2fde43ecf0278c7fcf63cd8..5f12064e2b12df4f3c76b3ee5e5f5cefd0252c26 100644 (file)
@@ -18,7 +18,6 @@ import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;\r
 \r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.actions.TaxonTransfer;\r
 import eu.etaxonomy.taxeditor.actions.ui.OpenTaxonEditorAction;\r
 \r
@@ -53,7 +52,7 @@ public class FavoritesTableViewer extends TableViewer {
                });\r
                \r
                // Listens for new taxa opened for editing\r
-               this.setInput(TaxEditorPlugin.getDefault().getObservableFavoritesList());\r
+               this.setInput(FavoritesView.getObservableFavorites());\r
                \r
                // On double click, open name editor\r
                this.addDoubleClickListener(new IDoubleClickListener(){\r
@@ -75,13 +74,12 @@ public class FavoritesTableViewer extends TableViewer {
                target.addDropListener(new DropTargetAdapter() {\r
                        \r
                        public void dragEnter(DropTargetEvent event) {\r
-//                             System.out.println("hello");\r
                        }\r
                        \r
                        public void drop(DropTargetEvent event) {\r
                                \r
                                // Add event to favorites list          \r
-                               TaxEditorPlugin.getDefault().getObservableFavoritesList().add(event.data);\r
+                               FavoritesView.addFavorite(event.data);\r
                        }\r
                });\r
        }\r
index a62b3520f9608bea92c831f942b46b48a7cbe1e5..6d4bafee69e11c7750e5fc9cbc944b28ad1b9bd9 100644 (file)
@@ -10,6 +10,7 @@
 package eu.etaxonomy.taxeditor.navigation;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.core.databinding.observable.list.WritableList;\r
 import org.eclipse.jface.action.IMenuManager;\r
 import org.eclipse.jface.action.IToolBarManager;\r
 import org.eclipse.swt.SWT;\r
@@ -21,6 +22,8 @@ import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;\r
 import org.eclipse.ui.part.ViewPart;\r
 \r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+\r
 /**\r
  * The left navigation pane.\r
  * \r
@@ -92,4 +95,27 @@ public class FavoritesView extends ViewPart {
        public void setFocus() {\r
                // Set the focus\r
        }\r
+       \r
+       private static WritableList observableFavoritesList = null;\r
+       \r
+       public static void addFavorite(Object favorite) {\r
+               if (!getObservableFavorites().contains(favorite)) {\r
+                       getObservableFavorites().add(favorite);\r
+               }\r
+       }\r
+       \r
+       public static void removeFavorite(Object favorite) {\r
+               getObservableFavorites().remove(favorite);\r
+       }\r
+       \r
+       public static WritableList getObservableFavorites() {\r
+               if (observableFavoritesList == null) {\r
+                       observableFavoritesList = new WritableList();\r
+               }\r
+               return observableFavoritesList;         \r
+       }\r
+\r
+       public static void clearFavorites() {\r
+               observableFavoritesList = null;\r
+       }\r
 }\r
index 4a3c766a4f42ba5111f61d1fa76998d3785693f0..e4610958cc991457bbc3306695dcc109d3d09209 100644 (file)
@@ -12,7 +12,6 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;\r
 \r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.actions.ui.OpenTaxonEditorAction;\r
 import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 \r
@@ -47,7 +46,7 @@ public class RecentNamesTableViewer extends TableViewer {
                });\r
                \r
                // Listens for new taxa opened for editing\r
-               this.setInput(TaxEditorPlugin.getDefault().getObservableRecentNamesList());\r
+               this.setInput(RecentNamesView.getObservableRecentNames());\r
                \r
                // On double click, open name editor\r
                this.addDoubleClickListener(new IDoubleClickListener(){\r
index 2531077dfa2cf1921dccf7ff8e3be44a460671cd..23d6642c20b4b6b290416e1dde1ca0362772d26d 100644 (file)
@@ -10,6 +10,7 @@
 package eu.etaxonomy.taxeditor.navigation;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.core.databinding.observable.list.WritableList;\r
 import org.eclipse.jface.action.IMenuManager;\r
 import org.eclipse.jface.action.IToolBarManager;\r
 import org.eclipse.swt.SWT;\r
@@ -19,6 +20,8 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;\r
 import org.eclipse.ui.part.ViewPart;\r
 \r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+\r
 /**\r
  * The left navigation pane.\r
  * \r
@@ -80,5 +83,28 @@ public class RecentNamesView extends ViewPart {
        @Override\r
        public void setFocus() {\r
                // Set the focus\r
-       }       \r
+       }\r
+       \r
+       private static WritableList observableRecentNamesList = null;\r
+       \r
+       public static void addRecentName(Taxon taxon) {\r
+               if (!getObservableRecentNames().contains(taxon)) {\r
+                       getObservableRecentNames().add(taxon);\r
+               }\r
+       }\r
+       \r
+       public static void removeRecentName(Taxon taxon) {\r
+               getObservableRecentNames().remove(taxon);\r
+       }\r
+       \r
+       public static WritableList getObservableRecentNames() {\r
+               if (observableRecentNamesList == null) {\r
+                       observableRecentNamesList = new WritableList();\r
+               }\r
+               return observableRecentNamesList;               \r
+       }\r
+\r
+       public static void clearRecentNames() {\r
+               observableRecentNamesList = null;\r
+       }\r
 }\r
index 34c05b8a0496d4729a1919b2e6eeeceab427ff59..c3cfc39bf57ef5fa345d41d546d448629dfeae72 100644 (file)
@@ -39,7 +39,6 @@ import com.swtdesigner.SWTResourceManager;
 \r
 import eu.etaxonomy.cdm.database.DatabaseTypeEnum;\r
 import eu.etaxonomy.cdm.database.ICdmDataSource;\r
-import eu.etaxonomy.cdm.database.types.H2DatabaseType;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
 import eu.etaxonomy.taxeditor.UiUtil;\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/AbstractEditorOperation.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/AbstractEditorOperation.java
new file mode 100644 (file)
index 0000000..575c25e
--- /dev/null
@@ -0,0 +1,54 @@
+/**\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.operations;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.operations.AbstractOperation;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 14.01.2009\r
+ * @version 1.0\r
+ */\r
+public abstract class AbstractEditorOperation extends AbstractOperation {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(AbstractEditorOperation.class);\r
+       \r
+       protected Taxon taxon;\r
+\r
+       public AbstractEditorOperation(String label, IUndoContext undoContext,\r
+                       Taxon taxon) {\r
+               super(label);\r
+               addContext(undoContext);\r
+               \r
+               this.taxon = taxon;\r
+       }\r
+       \r
+       protected IStatus redrawOpenEditor() {\r
+               \r
+               // Redraw editor if exists\r
+               TaxonNameEditor editor = UiUtil.getTaxonNameEditor(taxon);\r
+               if(editor == null || editor.redraw()){\r
+                       \r
+                       // Mark editor as changed and unsaved\r
+                       editor.setDirty();\r
+                       \r
+                       return Status.OK_STATUS;        \r
+               }       \r
+               return Status.CANCEL_STATUS;\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeHomotypicGroupOperation.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeHomotypicGroupOperation.java
new file mode 100644 (file)
index 0000000..b59079a
--- /dev/null
@@ -0,0 +1,94 @@
+/**\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.operations.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+public class ChangeHomotypicGroupOperation extends AbstractEditorOperation {\r
+       \r
+       private static final Logger logger = Logger\r
+                       .getLogger(ChangeHomotypicGroupOperation.class);\r
+\r
+       private Synonym synonym; \r
+       private HomotypicalGroup oldHomotypicalGroup;\r
+       private HomotypicalGroup newHomotypicalGroup;\r
+       \r
+       public ChangeHomotypicGroupOperation(String label, IUndoContext undoContext, \r
+                       Taxon taxon, Synonym synonym, HomotypicalGroup newHomotypicalGroup) {\r
+               super(label, undoContext, taxon);\r
+               \r
+               this.synonym = synonym;\r
+               if(synonym == null){\r
+                       throw new IllegalArgumentException(\r
+                                       "A null synonym was provided.");\r
+               }\r
+               \r
+               this.oldHomotypicalGroup = synonym.getHomotypicGroup();\r
+               this.newHomotypicalGroup = newHomotypicalGroup;\r
+       }\r
+\r
+\r
+       @Override\r
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+\r
+               // Get synonym name\r
+               TaxonNameBase synonymName = this.synonym.getName();\r
+               \r
+               // TODO pass in homotypical group's taxon in case we are dragging from one editor to another\r
+               \r
+               // Switch groups\r
+               oldHomotypicalGroup.removeTypifiedName(synonymName);\r
+               newHomotypicalGroup.addTypifiedName(synonymName);               \r
+               \r
+               // Redraw editor if it exists\r
+               return redrawOpenEditor();\r
+       }\r
+\r
+       @Override\r
+       public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               return execute(monitor, info);\r
+       }\r
+\r
+       @Override\r
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               // Get synonym name\r
+               TaxonNameBase synonymName = this.synonym.getName();\r
+               if(synonymName == null){\r
+                       // TODO\r
+               }\r
+               \r
+               // TODO pass in homotypical group's taxon in case we are dragging from one editor to another\r
+               \r
+               // Switch groups\r
+               newHomotypicalGroup.removeTypifiedName(synonymName);\r
+               oldHomotypicalGroup.addTypifiedName(synonymName);               \r
+               \r
+               // Redraw editor if it exists\r
+               return redrawOpenEditor();\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeMisappliedNameToSynonymOperation.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeMisappliedNameToSynonymOperation.java
new file mode 100644 (file)
index 0000000..809cd35
--- /dev/null
@@ -0,0 +1,102 @@
+/**\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.operations.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 15.01.2009\r
+ * @version 1.0\r
+ */\r
+public class ChangeMisappliedNameToSynonymOperation extends\r
+               AbstractEditorOperation {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(ChangeMisappliedNameToSynonymOperation.class);\r
+       \r
+       private Taxon misappliedName;\r
+       private HomotypicalGroup homotypicalGroup;\r
+\r
+       public ChangeMisappliedNameToSynonymOperation(String label,\r
+                       IUndoContext undoContext, Taxon taxon, Taxon misappliedName,\r
+                       HomotypicalGroup homotypicalGroup) {\r
+               super(label, undoContext, taxon);\r
+               \r
+               this.misappliedName = misappliedName;\r
+               this.homotypicalGroup = homotypicalGroup;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               // Create new synonym using misapplication's name\r
+               TaxonNameBase synonymName = misappliedName.getName();\r
+               Synonym synonym = Synonym.NewInstance(synonymName, taxon.getSec());\r
+               \r
+               // Remove misapplied name relation from taxon\r
+               taxon.removeTaxon(misappliedName, TaxonRelationshipType.MISAPPLIED_NAME_FOR());\r
+\r
+               // Add synonym to taxon\r
+//             if (homotypicalGroup.equals(taxon.getHomotypicGroup())) {\r
+//                     \r
+//                     // Note: synonymName is implicitly added to taxon's homotypical group\r
+//                     taxon.addSynonym(synonym, SynonymRelationshipType.SYNONYM_OF() .HOMOTYPIC_SYNONYM_OF());        \r
+//             } else {\r
+//                     taxon.addSynonym(synonym, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());\r
+//                     \r
+//                     // Add synonym to homotypical group\r
+//                     homotypicalGroup.addTypifiedName(synonymName);\r
+//             }\r
+\r
+               taxon.addSynonym(synonym, SynonymRelationshipType.SYNONYM_OF());\r
+               \r
+               // Add synonym to homotypical group\r
+               homotypicalGroup.addTypifiedName(synonymName);\r
+               \r
+               return redrawOpenEditor();\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeSynonymToMisappliedNameOperation.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeSynonymToMisappliedNameOperation.java
new file mode 100644 (file)
index 0000000..1627f63
--- /dev/null
@@ -0,0 +1,103 @@
+/**\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.operations.name;\r
+\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 14.01.2009\r
+ * @version 1.0\r
+ */\r
+public class ChangeSynonymToMisappliedNameOperation extends AbstractEditorOperation {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(ChangeSynonymToMisappliedNameOperation.class);\r
+\r
+       private Synonym synonym;\r
+       private Taxon misapplication;\r
+       private Set<SynonymRelationshipType> synonymTypes;\r
+\r
+       public ChangeSynonymToMisappliedNameOperation(String label,\r
+                       IUndoContext undoContext, Taxon taxon, Synonym synonym) {\r
+               super(label, undoContext, taxon);\r
+               \r
+               this.synonym = synonym;\r
+       }\r
+\r
+       @Override\r
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               // get name from synonym\r
+               TaxonNameBase synonymName = synonym.getName();\r
+               \r
+               // make misapplied name with synonym name\r
+               // TODO prompt user for sec\r
+               misapplication = Taxon.NewInstance(synonymName, null);\r
+               \r
+               // store synonymRelationshipType for later undo operations\r
+               synonymTypes = synonym.getRelationType(taxon);\r
+               \r
+               // remove synonym from taxon            \r
+               taxon.removeSynonym(synonym);\r
+               \r
+               // add misapplied name to taxon\r
+               // TODO add citation for misapplied name to property sheet\r
+               taxon.addMisappliedName(misapplication, null, null);\r
+               \r
+               // redraw editor if exists\r
+               return redrawOpenEditor();\r
+       }\r
+\r
+       @Override\r
+       public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               // add misapplied name to taxon\r
+               // TODO add citation for misapplied name to property sheet\r
+               taxon.addMisappliedName(misapplication, null, null);\r
+               \r
+               // remove synonym from taxon\r
+               taxon.removeSynonym(synonym);\r
+               \r
+               // redraw editor if exists\r
+               return redrawOpenEditor();\r
+       }\r
+\r
+       @Override\r
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               // remove misapplied name from taxon\r
+               // TODO add citation for misapplied name to property sheet\r
+               taxon.removeTaxon(misapplication, TaxonRelationshipType.MISAPPLIED_NAME_FOR());\r
+               \r
+               // add synonym to taxon\r
+               for (SynonymRelationshipType synonymType : synonymTypes){\r
+                       taxon.addSynonym(synonym, synonymType);\r
+               }\r
+               \r
+               // redraw editor if exists\r
+               return redrawOpenEditor();\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeSynonymToTaxonOperation.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/ChangeSynonymToTaxonOperation.java
new file mode 100644 (file)
index 0000000..b6080cf
--- /dev/null
@@ -0,0 +1,89 @@
+/**\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.operations.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.ui.PartInitException;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 15.01.2009\r
+ * @version 1.0\r
+ */\r
+public class ChangeSynonymToTaxonOperation extends AbstractEditorOperation {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(ChangeSynonymToTaxonOperation.class);\r
+       private Synonym synonym;\r
+\r
+       public ChangeSynonymToTaxonOperation(String text, IUndoContext undoContext,\r
+                       Taxon taxon, Synonym synonym) {\r
+               super(text, undoContext, taxon);\r
+               \r
+               this.synonym = synonym;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+\r
+               // Remove synonym from taxon\r
+               taxon.removeSynonym(synonym);\r
+               \r
+               // Create new taxon with synonym name\r
+               Taxon newTaxon = Taxon.NewInstance(synonym.getName(), synonym.getSec());\r
+                               \r
+               // Add new taxon to session data repository\r
+               taxon.setTaxonomicParent(null, null, null);\r
+               CdmSessionDataRepository.getDefault().addTaxon(newTaxon);\r
+               \r
+               // Open editor for new taxon\r
+               try {\r
+                       UiUtil.openTaxonEditor(newTaxon);\r
+               } catch (PartInitException e) {\r
+                       e.printStackTrace();\r
+               }\r
+               \r
+               return redrawOpenEditor();\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/CreateSynonymInNewGroupOperation.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/CreateSynonymInNewGroupOperation.java
new file mode 100644 (file)
index 0000000..6d4833c
--- /dev/null
@@ -0,0 +1,86 @@
+/**\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.operations.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.editor.name.CdmParserController;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 16.01.2009\r
+ * @version 1.0\r
+ */\r
+public class CreateSynonymInNewGroupOperation extends AbstractEditorOperation {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(CreateSynonymInNewGroupOperation.class);\r
+       \r
+       private String newSynonymText;\r
+       private SynonymRelationship newSynonymRelationship;\r
+\r
+       public CreateSynonymInNewGroupOperation(String label,\r
+                       IUndoContext undoContext, Taxon taxon, String synonymText) {\r
+               super(label, undoContext, taxon);\r
+               \r
+               this.newSynonymText = synonymText;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               // Create synonym name using newSynonymText\r
+               TaxonNameBase synonymName = CdmParserController.parseFullReference(newSynonymText, null, null);\r
+               \r
+               // Add name to new homotypic group\r
+               HomotypicalGroup.NewInstance().addTypifiedName(synonymName);\r
+               \r
+               // Create a new synonym for the taxon\r
+               newSynonymRelationship = taxon.addHeterotypicSynonymName(synonymName);\r
+                               \r
+               return redrawOpenEditor();\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               // TODO Auto-generated method stub\r
+               return null;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               // Remove the synonym \r
+               taxon.removeSynonymRelation(newSynonymRelationship);\r
+               newSynonymRelationship = null;\r
+               return null;\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymAcceptedOperation.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymAcceptedOperation.java
new file mode 100644 (file)
index 0000000..dafdc84
--- /dev/null
@@ -0,0 +1,121 @@
+/**\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.operations.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.jface.dialogs.MessageDialog;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.PartInitException;\r
+\r
+import eu.etaxonomy.cdm.api.service.ITaxonService;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.actions.ui.OpenTaxonEditorAction;\r
+import eu.etaxonomy.taxeditor.model.CdmSessionDataRepository;\r
+import eu.etaxonomy.taxeditor.navigation.RecentNamesView;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/** \r
+ * @author p.ciardelli\r
+ * @created 15.01.2009\r
+ * @version 1.0\r
+ */\r
+public class MakeSynonymAcceptedOperation extends AbstractEditorOperation {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(MakeSynonymAcceptedOperation.class);\r
+       private Synonym synonym;\r
+       private Taxon parentTaxon;\r
+\r
+       public MakeSynonymAcceptedOperation(String text, IUndoContext undoContext,\r
+                       Taxon taxon, Synonym synonym) {\r
+               super(text, undoContext, taxon);\r
+               \r
+               this.synonym = synonym;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+\r
+               // If taxon editor is dirty force user to save before proceeding, then close editor\r
+               try {\r
+                       IEditorPart oldEditor = UiUtil.getEditorByTaxon(taxon);\r
+                       if (oldEditor.isDirty()) {\r
+                               if (!MessageDialog.openConfirm(UiUtil.getShell(), "Save before proceeding", \r
+                                               "All changes must be saved before proceeding with this action.\n\n" +\r
+                                               "Press \"OK\" to save and continue, or \"Cancel\" to cancel this action.")) {\r
+                                       return Status.CANCEL_STATUS;\r
+                               }\r
+                               oldEditor.doSave(null);\r
+                               UiUtil.closeEditor(oldEditor, true);\r
+                       }\r
+               } catch (PartInitException e) {\r
+                       e.printStackTrace();\r
+                       MessageDialog.openError(UiUtil.getShell(), "Error", "Error saving and closing taxon");\r
+                       return Status.CANCEL_STATUS;\r
+               }\r
+               \r
+               // Create new taxon for synonym to be swapped into\r
+               TaxonNameBase synonymName = synonym.getName();\r
+               Taxon newAcceptedTaxon = Taxon.NewInstance(synonymName, synonym.getSec());\r
+               \r
+               // Get taxon service and call its swap method\r
+               ITaxonService taxonService = TaxEditorPlugin.getDefault().getApplicationController().getTaxonService();\r
+               // TODO prompt user for citation \r
+               // TODO bug, anahit. new accepted taxon is not removed from synonymy \r
+               taxonService.makeTaxonSynonym(taxon, newAcceptedTaxon, null, null, null);\r
+               \r
+               // Remove old taxon from tree\r
+               CdmSessionDataRepository.getDefault().removeTaxon(taxon);\r
+\r
+               // Add new taxon to tree\r
+               CdmSessionDataRepository.getDefault().addTaxon(newAcceptedTaxon);\r
+\r
+               // Open editor for new taxon\r
+               new OpenTaxonEditorAction(newAcceptedTaxon).run();\r
+\r
+               // Remove old taxon from recent names list\r
+               RecentNamesView.addRecentName(taxon);\r
+               \r
+               return Status.OK_STATUS;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               logger.warn(this.getLabel() + ": Redo not yet implemented.");\r
+               return null;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               logger.warn(this.getLabel() + ": Undo not yet implemented.");\r
+               return null;\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymGroupBasionymOperation.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/MakeSynonymGroupBasionymOperation.java
new file mode 100644 (file)
index 0000000..a21f098
--- /dev/null
@@ -0,0 +1,84 @@
+/**\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.operations.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 14.01.2009\r
+ * @version 1.0\r
+ */\r
+public class MakeSynonymGroupBasionymOperation extends AbstractEditorOperation {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(MakeSynonymGroupBasionymOperation.class);\r
+       private Synonym synonym;\r
+       private HomotypicalGroup homotypicGroup;\r
+\r
+       public MakeSynonymGroupBasionymOperation(String text, IUndoContext undoContext,\r
+                       Taxon taxon, Synonym synonym) {\r
+               super(text, undoContext, taxon);\r
+               \r
+               this.synonym = synonym;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+//             // Get basionym for synonyms homotypic group\r
+//             homotypicGroup = synonym.getHomotypicGroup();\r
+//             TaxonNameBase basionym = homotypicGroup.getBasionym();\r
+//             \r
+//             // Check if synonym is already basionym\r
+//             if(basionym != null && basionym.equals(synonym.getName())){\r
+//                     return Status.OK_STATUS;\r
+//             }\r
+               \r
+               // TODO replace w method from cdmlib\r
+               CdmUtil.setGroupBasionym(synonym.getName());\r
+                               \r
+               return redrawOpenEditor();\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               return execute(monitor, info);\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               // TODO replace w method from cdmlib\r
+               CdmUtil.removeGroupBasionym(synonym.getName());\r
+                               \r
+               return redrawOpenEditor();\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/RemoveSynonymOperation.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/RemoveSynonymOperation.java
new file mode 100644 (file)
index 0000000..f2d5b44
--- /dev/null
@@ -0,0 +1,89 @@
+/**\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.operations.name;\r
+\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.AbstractOperation;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.UiUtil;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 14.01.2009\r
+ * @version 1.0\r
+ */\r
+public class RemoveSynonymOperation extends AbstractEditorOperation {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(RemoveSynonymOperation.class);\r
+       \r
+       private Synonym synonym;\r
+       private Set<SynonymRelationshipType> synonymTypes;\r
+\r
+       public RemoveSynonymOperation(String label, IUndoContext undoContext,\r
+                       Taxon taxon, Synonym synonym) {\r
+               super(label, undoContext, taxon);\r
+               this.synonym = synonym;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               // Store synonymRelationshipType for later undo operations\r
+               synonymTypes = synonym.getRelationType(taxon);\r
+               \r
+               // Remove synonym from taxon\r
+               taxon.removeSynonym(synonym);\r
+               \r
+               // Redraw editor if exists\r
+               return redrawOpenEditor();\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {             \r
+               return execute(monitor, info);\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               \r
+               // Add synonym to taxon\r
+               for (SynonymRelationshipType synonymType : synonymTypes){\r
+                       taxon.addSynonym(synonym, synonymType);\r
+               }\r
+               \r
+               // Redraw editor if exists\r
+               return redrawOpenEditor();\r
+       }\r
+}\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/UnmakeSynonymGroupBasionymOperation.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/operations/name/UnmakeSynonymGroupBasionymOperation.java
new file mode 100644 (file)
index 0000000..e5c7563
--- /dev/null
@@ -0,0 +1,74 @@
+/**\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.operations.name;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+import eu.etaxonomy.taxeditor.operations.AbstractEditorOperation;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 15.01.2009\r
+ * @version 1.0\r
+ */\r
+public class UnmakeSynonymGroupBasionymOperation extends\r
+               AbstractEditorOperation {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(UnmakeSynonymGroupBasionymOperation.class);\r
+       private Synonym synonym;\r
+\r
+       public UnmakeSynonymGroupBasionymOperation(String text,\r
+                       IUndoContext undoContext, Taxon taxon, Synonym synonym) {\r
+               super(text, undoContext, taxon);\r
+               \r
+               this.synonym = synonym;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               // TODO replace w method from cdmlib\r
+               CdmUtil.removeGroupBasionym(synonym.getName());\r
+                               \r
+               return redrawOpenEditor();\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               return execute(monitor, info);\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)\r
+        */\r
+       @Override\r
+       public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                       throws ExecutionException {\r
+               // TODO replace w method from cdmlib\r
+               CdmUtil.setGroupBasionym(synonym.getName());\r
+                               \r
+               return redrawOpenEditor();\r
+       }\r
+}\r