Created action for moving synonym to a new group - also works for moving between...
authorp.ciardelli <p.ciardelli@localhost>
Thu, 19 Jun 2008 13:12:10 +0000 (13:12 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Thu, 19 Jun 2008 13:12:10 +0000 (13:12 +0000)
21 files changed:
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/FreetextPropertiesPerspective.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/ITaxEditorConstants.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/NomenclaturalCodePreferences.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/SideBySidePerspective.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/TaxEditorPlugin.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddHeterotypicSynonymToTaxonAction.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddHomotypicSynonymToTaxonAction.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddSynonymToTaxonAction.java [deleted file]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/ChangeMisappliedNameToSynonymAction.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/ChangeNameHomotypicGroup.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/ChangeSynonymHomotypicGroup.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/DeleteSynonymFromAcceptedTaxaAction.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/DeleteSynonymFromTaxonAction.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/MoveCompositeToNewGroupAction.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/model/CdmUtil.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/NameEditorView.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/GroupedComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/LineBreakListener.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/NameComposite.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/TaxonCompositeFactory.java

index 6b897bec9e57a47fd7c9332597a25937b1573dfa..113046fb6a29f8d8ba77530ddd88fb1d77540a3d 100644 (file)
@@ -394,14 +394,18 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/Synony
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/TaxonTransfer.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/UndoableAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/WidgetTransfer.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddHeterotypicSynonymToTaxonAction.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddHomotypicSynonymToTaxonAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddMisappliedNameToTaxonAction.java -text
-eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddSynonymToTaxonAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/ChangeMisappliedNameToSynonymAction.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/ChangeNameHomotypicGroup.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/ChangeSynonymHomotypicGroup.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/ChangeSynonymToMisappliedNameAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/ChangeSynonymToTaxonAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/CreateNameRelationAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/DeleteMisappliedNameFromTaxonAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/DeleteNameRelationAction.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/DeleteSynonymFromAcceptedTaxaAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/DeleteSynonymFromTaxonAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/DeleteTaxonAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/MakeGroupBasionymAction.java -text
@@ -417,6 +421,7 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/Cha
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/ChangeTaxonToSynonymAction.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/MoveCompositeToNewGroupAction.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
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/OpenNameRelationsListWizardAction.java -text
index b7150798b968274c026f184d04e56bac977c0c26..ef0ee8be941acd825a4670c6956ce69b66042cd1 100644 (file)
@@ -45,8 +45,6 @@ public class FreetextPropertiesPerspective implements IPerspectiveFactory {
                folderLayoutLeft.addView(TaxonomicTreeView.ID);
                folderLayoutLeft.addView(SearchView.ID);
                
-//             IFolderLayout folderLayoutMiddleLeft = layout.createFolder("middleleftfolder", IPageLayout.BOTTOM, 0.3f, "leftfolder");
-//             folderLayoutMiddleLeft.addView(RecentNamesView.ID);
                IFolderLayout folderLayoutBottomLeft = layout.createFolder("bottomleftfolder", IPageLayout.BOTTOM, 0.75f, "leftfolder");
                folderLayoutBottomLeft.addView(RecentNamesView.ID);
                folderLayoutBottomLeft.addView(FavoritesView.ID);
@@ -56,8 +54,6 @@ public class FreetextPropertiesPerspective implements IPerspectiveFactory {
                
                layout.getViewLayout(IPageLayout.ID_PROP_SHEET).setCloseable(false);
                layout.getViewLayout(TaxonomicTreeView.ID).setCloseable(false);
-//             layout.getViewLayout(RecentNamesView.ID).setCloseable(false);
-//             layout.getViewLayout(FavoritesView.ID).setCloseable(false);
                
                addFastViews(layout);
                
index 5814ce288145eaa85c1c42d000b7ca2c6998ac7e..34dbc981648c92dc2a517d3e07ec10ea6dfaf0b4 100644 (file)
@@ -58,8 +58,11 @@ public class ITaxEditorConstants {
        public static final String MISAPPLIED_NAME = "misappliedname";\r
        public static final String BASIONYM = "basionym";\r
        public static final String SYNONYM = "synonym";\r
+       public static final String HOMOTYPIC_SYNONYM = "homotypic_synonym";\r
+       public static final String HETEROTYPIC_SYNONYM = "heterotypic_synonym";\r
        public static final String NAMERELATION = "namerelation";\r
        public static final String TAXON = "taxon";\r
+       public static final String HOMOTYPIC_GROUP = "homotypicgroup";\r
 \r
        /* ***************************************************************************************\r
                FONTS\r
index 2b16b44f9d369e7e6b12e5b5cdab6e9a5155a8dc..783727da66535e6725023f73f4ddb8ca364d7ca5 100644 (file)
@@ -1,6 +1,7 @@
 package eu.etaxonomy.taxeditor;\r
 \r
 import org.apache.log4j.Logger;\r
+import org.eclipse.core.runtime.Platform;\r
 import org.eclipse.jface.preference.PreferencePage;\r
 import org.eclipse.swt.SWT;\r
 import org.eclipse.swt.events.SelectionAdapter;\r
index df1d8259b367d5d99f879fc53c69eb405308dc13..8af4451f539770db017d9fff38ed90149dcc3440 100644 (file)
@@ -1,9 +1,14 @@
 package eu.etaxonomy.taxeditor;
 
+import org.eclipse.ui.IFolderLayout;
 import org.eclipse.ui.IPageLayout;
 import org.eclipse.ui.IPerspectiveFactory;
 
+import eu.etaxonomy.taxeditor.view.FavoritesView;
 import eu.etaxonomy.taxeditor.view.NameListView;
+import eu.etaxonomy.taxeditor.view.RecentNamesView;
+import eu.etaxonomy.taxeditor.view.SearchView;
+import eu.etaxonomy.taxeditor.view.TaxonomicTreeView;
 
 public class SideBySidePerspective implements IPerspectiveFactory {
 
@@ -17,12 +22,21 @@ public class SideBySidePerspective implements IPerspectiveFactory {
        
        public void createInitialLayout(IPageLayout layout) {
                String editorArea = layout.getEditorArea();
-               layout.addStandaloneView(NameListView.ID, false, IPageLayout.LEFT, 0.30f, editorArea);          
-               layout.getViewLayout(NameListView.ID).setCloseable(false);
-//             layout.addStandaloneView(LeftPane.ID, false, IPageLayout.LEFT, 0.30f, editorArea);
-//             layout.getViewLayout(LeftPane.ID).setCloseable(false);          
-//             layout.getViewLayout("org.eclipse.ui.views.PropertySheet").setCloseable(false);
-//             layout.addView(UndoView.ID, IPageLayout.BOTTOM, 0.8f, editorArea);
+               
+               // Note: plug-in org.eclipse.ui.ide necessary for 
+               //  IPageLayout.ID_PROBLEM_VIEW ("org.eclipse.ui.views.ProblemView") to run
+//             layout.addView(IPageLayout.ID_PROBLEM_VIEW, IPageLayout.BOTTOM, 0.8f, editorArea);              
+               
+               IFolderLayout folderLayoutLeft = layout.createFolder("leftfolder", IPageLayout.LEFT, 0.3f, editorArea);
+               folderLayoutLeft.addView(TaxonomicTreeView.ID);
+               folderLayoutLeft.addView(SearchView.ID);
+               
+               IFolderLayout folderLayoutBottomLeft = layout.createFolder("bottomleftfolder", IPageLayout.BOTTOM, 0.75f, "leftfolder");
+               folderLayoutBottomLeft.addView(RecentNamesView.ID);
+               folderLayoutBottomLeft.addView(FavoritesView.ID);
+               
+               layout.getViewLayout(TaxonomicTreeView.ID).setCloseable(false);
+               
                addFastViews(layout);
                
        }
index b156568d59887c2fd495670ad2e31a8dbf516579..0aba7b993b226062fd0f620d5eb40e62cac5dd52 100644 (file)
@@ -1,3 +1,4 @@
+\r
 /**\r
  * Copyright (C) 2007 EDIT\r
  * European Distributed Institute of Taxonomy \r
@@ -28,6 +29,7 @@ import org.eclipse.core.databinding.observable.set.WritableSet;
 import org.eclipse.core.runtime.FileLocator;\r
 import org.eclipse.core.runtime.IPath;\r
 import org.eclipse.core.runtime.Path;\r
+import org.eclipse.core.runtime.Platform;\r
 import org.eclipse.jface.databinding.swt.SWTObservables;\r
 import org.eclipse.jface.preference.IPreferenceStore;\r
 import org.eclipse.jface.resource.FontRegistry;\r
@@ -110,6 +112,8 @@ public class TaxEditorPlugin extends AbstractUIPlugin {
 \r
        void initDatastore() {\r
 \r
+//             if (1 == 1) return;\r
+               \r
                boolean useSoraya = true;\r
                // useSoraya = false;\r
                Taxon genusTaxon;\r
@@ -387,180 +391,11 @@ public class TaxEditorPlugin extends AbstractUIPlugin {
         * PREFERENCES\r
         **************************************************************************/\r
        protected void initializeDefaultPreferences(IPreferenceStore store) {\r
+//             Platform.getPreferencesService().getBoolean(qualifier, key, defaultValue, contexts)\r
                store.setDefault(ITaxEditorConstants.CODE_PREFERENCE,\r
                                ITaxEditorConstants.DEFAULT_CODE_PREFERENCE);\r
        }\r
 \r
-       /***************************************************************************\r
-        * TAXONOMIC TREE - OLD\r
-        **************************************************************************/\r
-//\r
-//     public ReferenceBase getSec() {\r
-//             return getCdmApp().getReferenceService().getReferenceByUuid(\r
-//                             UUID.fromString("f3593c18-a8d2-4e51-bdad-0befbf8fb2d1"));\r
-//     }\r
-//\r
-//     private List<Taxon> sessionRootTaxa;\r
-//\r
-//     public List<Taxon> getSessionRootTaxa() {\r
-//             if (sessionRootTaxa == null) {\r
-//                     sessionRootTaxa = new ArrayList<Taxon>();\r
-//                     sessionRootTaxa\r
-//                                     .addAll(getCdmApp().getTaxonService().getRootTaxa(getSec(), null, false));\r
-//                     addSessionTaxa(sessionRootTaxa);\r
-//             }\r
-//             return sessionRootTaxa;\r
-//     }\r
-//\r
-//     /**\r
-//      * This map of taxa to their taxonomic children is used by\r
-//      * NameTreeContentProvider's getChildren method.\r
-//      * \r
-//      * key = taxon, value = key's child taxa Note that a map can have a key ==\r
-//      * null, i.e. no parent taxon\r
-//      */\r
-//     private HashMap<Taxon, Set<Taxon>> sessionTaxonomicChildrenMap;\r
-//     private IObservableSet observableSessionTaxonSet;\r
-//\r
-//     private Map<Taxon, Set<Taxon>> getTaxonomicChildrenMap() {\r
-//             if (sessionTaxonomicChildrenMap == null) {\r
-//                     sessionTaxonomicChildrenMap = new HashMap<Taxon, Set<Taxon>>();\r
-//             }\r
-//             return sessionTaxonomicChildrenMap;\r
-//     }\r
-//\r
-//     /**\r
-//      * Returns any child taxa for this taxon that have already been requested\r
-//      * during this session.\r
-//      * \r
-//      * @param parentTaxon\r
-//      * @return\r
-//      */\r
-//     public Set<Taxon> getSessionTaxonomicChildren(Taxon parentTaxon) {\r
-//             return getTaxonomicChildrenMap().get(parentTaxon);\r
-//     }\r
-//\r
-//     private void addSessionTaxonomicChildren(Taxon parentTaxon,\r
-//                     Set<Taxon> childTaxa) {\r
-//             Set<Taxon> sessionChildTaxa = getSessionTaxonomicChildren(parentTaxon);\r
-//             if (sessionChildTaxa == null) {\r
-//                     getTaxonomicChildrenMap().put(parentTaxon, childTaxa);\r
-//             } else {\r
-//                     sessionChildTaxa.addAll(childTaxa);\r
-//             }\r
-//     }\r
-//\r
-//     private void addSessionTaxonomicChild(Taxon parentTaxon, Taxon childTaxon) {\r
-//             Set<Taxon> childTaxa = new HashSet<Taxon>();\r
-//             childTaxa.add(childTaxon);\r
-//             addSessionTaxonomicChildren(parentTaxon, childTaxa);\r
-//     }\r
-//\r
-//     /**\r
-//      * All Taxon listen for changes to their parents\r
-//      */\r
-////   PropertyChangeListener taxonomicParentListener = new PropertyChangeListener() {\r
-////           @Override\r
-////           public void propertyChange(java.beans.PropertyChangeEvent event) {\r
-////                   logger.warn("property change for " + event.getPropertyName());\r
-////                   if (event.getSource() instanceof Taxon) {\r
-////                           \r
-////                           // Methods for removing and adding also remap taxa to their new parents.\r
-////                           Taxon childTaxon = (Taxon) event.getSource();\r
-////                           removeSessionTaxon(childTaxon);\r
-////                           addSessionTaxon(childTaxon);\r
-////                   }\r
-////           }\r
-////   };\r
-//\r
-//     /**\r
-//      * @return\r
-//      */\r
-//     public IObservableSet getObservableSessionTaxa() {\r
-//             if (observableSessionTaxonSet == null) {\r
-//                     Realm realm = SWTObservables.getRealm(Display.getDefault());\r
-//                     observableSessionTaxonSet = new WritableSet(realm);\r
-////                   observableSessionTaxonSet.addSetChangeListener(new ISetChangeListener() {\r
-////                           @Override\r
-////                           public void handleSetChange(SetChangeEvent event) {\r
-////                                   for (Object addition : event.diff.getAdditions()) {\r
-////                                           if (addition instanceof Taxon) {\r
-////                                                   ((Taxon) addition).addPropertyChangeListener(\r
-////                                                                   "taxonomicParentCache", taxonomicParentListener);                                                       \r
-////                                           }\r
-////                                   }\r
-////                                   for (Object removal : event.diff.getRemovals()) {\r
-////                                           if (removal instanceof Taxon) {\r
-////                                                   ((Taxon) removal)\r
-////                                                                   .removePropertyChangeListener(taxonomicParentListener);\r
-////                                           }\r
-////                                   }\r
-////                           }\r
-////                   });\r
-//             }\r
-//             return observableSessionTaxonSet;\r
-//     }\r
-//     \r
-//     /**\r
-//      * Recursive function to clear the hashmap of a taxon's children used in this session, \r
-//      *      and the childrens' children, etc.\r
-//      * \r
-//      * @param taxon\r
-//      */\r
-//     private void clearTaxonomicChildren(Taxon taxon) {\r
-//             Set<Taxon> children = getSessionTaxonomicChildren(taxon);\r
-//             if (children != null) {\r
-//                     logger.warn(children.size() + " children in " + CdmUtil.getDisplayName(taxon));\r
-//                     for (Taxon child : children) {\r
-//                             clearTaxonomicChildren(child);\r
-//                     }\r
-//                     getTaxonomicChildrenMap().remove(taxon);\r
-//                     getObservableSessionTaxa().removeAll(children);\r
-//             }\r
-//     }\r
-//     \r
-//     /**\r
-//      * Remove taxon from all session collections\r
-//      * \r
-//      * @param taxon\r
-//      */\r
-//     public void removeSessionTaxon(Taxon taxon) {\r
-//\r
-//             clearTaxonomicChildren(taxon);\r
-//             \r
-//             getObservableSessionTaxa().remove(taxon);\r
-//                             \r
-//             // Remove taxon from its parent\r
-//             Taxon parentTaxon = taxon.getTaxonomicParent();\r
-//             Set<Taxon> children = getSessionTaxonomicChildren(parentTaxon);\r
-//             if (children != null) {\r
-//                     children.remove(taxon);\r
-//             }\r
-//             \r
-//             // If no parent, this is a root taxa - remove from root taxa\r
-//             if (parentTaxon == null) {\r
-//                     getSessionRootTaxa().remove(taxon);\r
-//             }\r
-//     }\r
-//\r
-//     public void addSessionTaxa(Collection<Taxon> taxa) {\r
-//             getObservableSessionTaxa().addAll(taxa);\r
-//             for (Taxon taxon : taxa) {\r
-//                     addSessionTaxonomicChild(taxon.getTaxonomicParent(), taxon);\r
-//             }\r
-//     }\r
-//\r
-//     public void addSessionTaxon(Taxon taxon) {\r
-//             if (getObservableSessionTaxa().contains(taxon)) {\r
-//                     return;\r
-//             }\r
-//             getObservableSessionTaxa().add(taxon);\r
-//             addSessionTaxonomicChild(taxon.getTaxonomicParent(), taxon);\r
-//             if (taxon.getTaxonomicParent() == null) {\r
-//                     getSessionRootTaxa().add(taxon);\r
-//             }\r
-//     }\r
-\r
        /***************************************************************************\r
         * TAXONOMIC TREE\r
         **************************************************************************/\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddHeterotypicSynonymToTaxonAction.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddHeterotypicSynonymToTaxonAction.java
new file mode 100644 (file)
index 0000000..36e8d9b
--- /dev/null
@@ -0,0 +1,78 @@
+/**\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.actions.cdm;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
+\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\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.model.CdmUtil;\r
+\r
+/**\r
+ * Add a new synonym to a taxon.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 06.05.2008\r
+ * @version 1.0\r
+ * \r
+ */\r
+public class AddHeterotypicSynonymToTaxonAction extends Action {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(AddHeterotypicSynonymToTaxonAction.class);\r
+\r
+       private static String text = "Create a heterotypic synonym";\r
+       private ImageDescriptor image = TaxEditorPlugin.getDefault()\r
+                       .getImageDescriptor(ITaxEditorConstants.HETEROTYPIC_SYN_ICON);\r
+\r
+       Taxon taxon;\r
+       Synonym synonym = null;\r
+       TaxonNameBase synonymName = null;\r
+\r
+       private AddHeterotypicSynonymToTaxonAction() {\r
+               super(text);\r
+               setImageDescriptor(image);\r
+       }\r
+\r
+       public AddHeterotypicSynonymToTaxonAction(TaxonNameBase synonymName,\r
+                       Taxon taxon) {\r
+               this();\r
+               this.synonymName = synonymName;\r
+               this.taxon = taxon;\r
+       }\r
+\r
+       public AddHeterotypicSynonymToTaxonAction(Synonym synonym, Taxon taxon) {\r
+               this();\r
+               this.synonymName = synonym.getName();\r
+               this.taxon = taxon;\r
+       }\r
+\r
+       public AddHeterotypicSynonymToTaxonAction(String unparsedName, Taxon taxon) {\r
+               this(CdmUtil.parseFullReference(unparsedName, null, null), taxon);\r
+       }\r
+\r
+       public void run() {\r
+               if (synonymName != null) {\r
+                       SynonymRelationship synonymRelationship = taxon\r
+                                       .addHeterotypicSynonymName(synonymName);\r
+                       synonym = synonymRelationship.getSynonym();\r
+               }\r
+       }\r
+\r
+       public Synonym getSynonym() {\r
+               return synonym;\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddHomotypicSynonymToTaxonAction.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddHomotypicSynonymToTaxonAction.java
new file mode 100644 (file)
index 0000000..116f287
--- /dev/null
@@ -0,0 +1,82 @@
+/**\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.actions.cdm;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
+\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\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.model.CdmUtil;\r
+\r
+/**\r
+ * Add a new synonym to a taxon.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 06.05.2008\r
+ * @version 1.0\r
+ * \r
+ */\r
+public class AddHomotypicSynonymToTaxonAction extends Action {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(AddHomotypicSynonymToTaxonAction.class);\r
+\r
+       private static String text = "Create a homotypic synonym";\r
+       private ImageDescriptor image = TaxEditorPlugin.getDefault()\r
+                       .getImageDescriptor(ITaxEditorConstants.HOMOTYPIC_SYN_ICON);\r
+\r
+       Taxon taxon;\r
+       Synonym synonym = null;\r
+       TaxonNameBase synonymName = null;\r
+\r
+       private AddHomotypicSynonymToTaxonAction() {\r
+               super(text);\r
+               setImageDescriptor(image);\r
+       }\r
+\r
+       public AddHomotypicSynonymToTaxonAction(TaxonNameBase synonymName,\r
+                       Taxon taxon) {\r
+               this();\r
+               this.synonymName = synonymName;\r
+               this.taxon = taxon;\r
+       }\r
+\r
+       public AddHomotypicSynonymToTaxonAction(Synonym synonym, Taxon taxon) {\r
+               this();\r
+               this.synonym = synonym;\r
+               this.taxon = taxon;\r
+       }\r
+\r
+       public AddHomotypicSynonymToTaxonAction(String unparsedName, Taxon taxon) {\r
+               this(CdmUtil.parseFullReference(unparsedName, null, null), taxon);\r
+       }\r
+\r
+       public void run() {\r
+               if (synonym != null) {\r
+                       taxon.addHomotypicSynonym(synonym, null, null);\r
+               } else {\r
+                       if (synonymName != null) {\r
+                               SynonymRelationship synonymRelationship = taxon\r
+                                               .addHomotypicSynonymName(synonymName, null, null);\r
+                               synonym = synonymRelationship.getSynonym();\r
+                       }\r
+               }\r
+       }\r
+\r
+       public Synonym getSynonym() {\r
+               return synonym;\r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddSynonymToTaxonAction.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddSynonymToTaxonAction.java
deleted file mode 100644 (file)
index 0679b64..0000000
+++ /dev/null
@@ -1,58 +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.actions.cdm;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.jface.action.Action;\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.taxeditor.model.CdmUtil;\r
-\r
-/**\r
- * Add a new synonym to a taxon.\r
- * \r
- * @author p.ciardelli\r
- * @created 06.05.2008\r
- * @version 1.0\r
- * \r
- */\r
-public class AddSynonymToTaxonAction extends Action {\r
-       private static final Logger logger = Logger\r
-                       .getLogger(AddSynonymToTaxonAction.class);\r
-\r
-       Taxon taxon;\r
-       Synonym synonym;\r
-\r
-       public AddSynonymToTaxonAction(TaxonNameBase name, Taxon taxon) {\r
-               this.synonym = Synonym\r
-                               .NewInstance(name, CdmUtil.getSessionDefaultSec());\r
-       }\r
-\r
-       public AddSynonymToTaxonAction(Synonym synonym, Taxon taxon) {\r
-               this.synonym = synonym;\r
-               this.taxon = taxon;\r
-       }\r
-\r
-       public AddSynonymToTaxonAction(String unparsedName, Taxon taxon) {\r
-               this(CdmUtil.parseFullReference(unparsedName, null, null), taxon);\r
-       }\r
-\r
-       public void run() {\r
-               taxon.addSynonym(synonym, SynonymRelationshipType\r
-                               .HETEROTYPIC_SYNONYM_OF());\r
-       }\r
-\r
-       public Synonym getSynonym() {\r
-               return synonym;\r
-       }\r
-}
\ No newline at end of file
index ef4144d4e08b3ade83ba915e0bea716429307a50..40e89132db0ea35c51423d0b26082cd4a052c377 100644 (file)
@@ -56,9 +56,9 @@ public class ChangeMisappliedNameToSynonymAction extends Action {
                deleteMisappliedNameAction = new DeleteMisappliedNameFromTaxonAction(misappliedNameTaxon, taxon);\r
                deleteMisappliedNameAction.run();\r
                \r
-               addSynonymAction = new AddSynonymToTaxonAction(name, taxon);\r
+               addSynonymAction = new AddHeterotypicSynonymToTaxonAction(name, taxon);\r
                addSynonymAction.run();\r
-               synonym = ((AddSynonymToTaxonAction) addSynonymAction).getSynonym();\r
+               synonym = ((AddHeterotypicSynonymToTaxonAction) addSynonymAction).getSynonym();\r
                \r
                firePropertyChange(ITaxEditorConstants.SYNONYM, null, synonym);          \r
        }\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/ChangeNameHomotypicGroup.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/ChangeNameHomotypicGroup.java
new file mode 100644 (file)
index 0000000..cd2bcac
--- /dev/null
@@ -0,0 +1,61 @@
+/**\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.actions.cdm;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.resource.ImageDescriptor;\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.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 22.05.2008\r
+ * @version 1.0\r
+ */\r
+public class ChangeNameHomotypicGroup extends Action {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(ChangeNameHomotypicGroup.class);\r
+\r
+       private static String text = "Change name's homotypic group";\r
+       private ImageDescriptor image = null;\r
+\r
+       private TaxonNameBase name;\r
+       private HomotypicalGroup newHomotypicGroup;\r
+\r
+       \r
+       private ChangeNameHomotypicGroup() {\r
+               super(text);\r
+               setImageDescriptor(image);\r
+       }\r
+       \r
+       public ChangeNameHomotypicGroup(TaxonNameBase name, HomotypicalGroup newHomotypicGroup) {\r
+               this();\r
+               \r
+               this.name = name;\r
+               this.newHomotypicGroup = newHomotypicGroup;\r
+       }\r
+       \r
+       public void run() {\r
+               HomotypicalGroup oldHomotypicGroup = name.getHomotypicalGroup();\r
+               if (oldHomotypicGroup != null) {\r
+                       oldHomotypicGroup.removeTypifiedName(name);\r
+               }\r
+               \r
+               newHomotypicGroup.addTypifiedName(name);\r
+               \r
+               firePropertyChange(ITaxEditorConstants.HOMOTYPIC_GROUP, oldHomotypicGroup, newHomotypicGroup);           \r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/ChangeSynonymHomotypicGroup.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/ChangeSynonymHomotypicGroup.java
new file mode 100644 (file)
index 0000000..ad46390
--- /dev/null
@@ -0,0 +1,97 @@
+/**\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.actions.cdm;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.resource.ImageDescriptor;\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.ITaxEditorConstants;\r
+import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 22.05.2008\r
+ * @version 1.0\r
+ */\r
+public class ChangeSynonymHomotypicGroup extends Action {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(ChangeSynonymHomotypicGroup.class);\r
+\r
+       private static String text = "Change synonym's homotypic group";\r
+       private ImageDescriptor image = null;\r
+\r
+       private Synonym synonym;\r
+       private Taxon taxon;\r
+       private HomotypicalGroup newHomotypicGroup;\r
+\r
+       private ChangeSynonymHomotypicGroup() {\r
+               super(text);\r
+               setImageDescriptor(image);\r
+       }\r
+       \r
+       public ChangeSynonymHomotypicGroup(Synonym synonym, Taxon taxon, HomotypicalGroup newHomotypicGroup) {\r
+               this();\r
+               \r
+               this.synonym = synonym;\r
+               this.taxon = taxon;\r
+               this.newHomotypicGroup = newHomotypicGroup;\r
+       }\r
+       \r
+       public void run() {\r
+               \r
+               if (synonym == null || synonym.getName() == null || \r
+                               taxon == null || taxon.getName() == null) {\r
+                       return;\r
+               }\r
+               \r
+               TaxonNameBase synonymName = synonym.getName();\r
+               String synonymType = null;\r
+                               \r
+               HomotypicalGroup oldHomotypicGroup = synonymName.getHomotypicalGroup();\r
+               HomotypicalGroup taxonHomotypicGroup = taxon.getName().getHomotypicalGroup();\r
+               \r
+               new ChangeNameHomotypicGroup(synonymName, newHomotypicGroup).run();\r
+                               \r
+//             // Has relation changed from homotypic to heterotypic?\r
+//             if (oldHomotypicGroup.equals(taxonHomotypicGroup) && !newHomotypicGroup.equals(taxonHomotypicGroup)) {\r
+//                     new DeleteSynonymFromTaxonAction(synonym, taxon).run();\r
+//                     AddHeterotypicSynonymToTaxonAction addSynonymAction = new AddHeterotypicSynonymToTaxonAction(synonymName, taxon);\r
+//                     addSynonymAction.run();\r
+//                     synonym = addSynonymAction.getSynonym();\r
+//             }\r
+//\r
+//             // Has relation changed from heterotypic to homotypic?\r
+//             if (!oldHomotypicGroup.equals(taxonHomotypicGroup) && newHomotypicGroup.equals(taxonHomotypicGroup)) {\r
+//                     new DeleteSynonymFromTaxonAction(synonym, taxon).run();\r
+//                     AddHomotypicSynonymToTaxonAction addSynonymAction = new AddHomotypicSynonymToTaxonAction(synonymName, taxon);\r
+//                     addSynonymAction.run();\r
+//                     synonym = addSynonymAction.getSynonym();\r
+//             }\r
+               \r
+               new DeleteSynonymFromAcceptedTaxaAction(synonym).run();\r
+               if (newHomotypicGroup.equals(taxonHomotypicGroup)) {\r
+                       AddHomotypicSynonymToTaxonAction addSynonymAction = new AddHomotypicSynonymToTaxonAction(synonymName, taxon);\r
+                       addSynonymAction.run();\r
+                       synonym = addSynonymAction.getSynonym();                        \r
+               } else {\r
+                       AddHeterotypicSynonymToTaxonAction addSynonymAction = new AddHeterotypicSynonymToTaxonAction(synonymName, taxon);\r
+                       addSynonymAction.run();\r
+                       synonym = addSynonymAction.getSynonym();\r
+               }\r
+               \r
+               firePropertyChange(ITaxEditorConstants.HOMOTYPIC_GROUP, null, synonym);          \r
+       }\r
+}
\ No newline at end of file
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/DeleteSynonymFromAcceptedTaxaAction.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/DeleteSynonymFromAcceptedTaxaAction.java
new file mode 100644 (file)
index 0000000..695fbdb
--- /dev/null
@@ -0,0 +1,49 @@
+/**\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.actions.cdm;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.eclipse.jface.action.Action;\r
+\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
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 22.05.2008\r
+ * @version 1.0\r
+ */\r
+public class DeleteSynonymFromAcceptedTaxaAction extends Action {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(DeleteSynonymFromAcceptedTaxaAction.class);\r
+\r
+       private Synonym synonym;\r
+\r
+       public DeleteSynonymFromAcceptedTaxaAction(Synonym synonym) {\r
+               super();\r
+               this.synonym = synonym;\r
+       }\r
+\r
+       public void run() {\r
+               for (Taxon acceptedTaxon : synonym.getAcceptedTaxa()) {\r
+                       acceptedTaxon.removeSynonym(synonym);\r
+//                     TaxEditorPlugin.getDefault().getCdmApp().getTaxonService().removeTaxon(\r
+//                                     synonym);\r
+               }\r
+\r
+               firePropertyChange(ITaxEditorConstants.SYNONYM, null, null);\r
+       }\r
+\r
+       public Synonym getSynonym() {\r
+               return synonym;\r
+       }\r
+}\r
index 98d22642d8960f4344595aa6aa44b4e73a051b03..2a4cb3d9d53801c707e14a14e88b1e210632d95e 100644 (file)
@@ -37,8 +37,8 @@ public class DeleteSynonymFromTaxonAction extends Action {
 \r
        public void run() {\r
                taxon.removeSynonym(synonym);\r
-               TaxEditorPlugin.getDefault().getCdmApp().getTaxonService().removeTaxon(\r
-                               synonym);\r
+//             TaxEditorPlugin.getDefault().getCdmApp().getTaxonService().removeTaxon(\r
+//                             synonym);\r
 \r
                firePropertyChange(ITaxEditorConstants.SYNONYM, null, null);\r
        }\r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/MoveCompositeToNewGroupAction.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/MoveCompositeToNewGroupAction.java
new file mode 100644 (file)
index 0000000..5515860
--- /dev/null
@@ -0,0 +1,153 @@
+/**\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.actions.ui;\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.IOperationHistory;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.commands.operations.IUndoableOperation;\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.action.Action;\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
+import org.eclipse.jface.util.IPropertyChangeListener;\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.UiUtil;\r
+import eu.etaxonomy.taxeditor.actions.cdm.ChangeSynonymHomotypicGroup;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
+import eu.etaxonomy.taxeditor.view.nameviewersupport.GroupComposite;\r
+import eu.etaxonomy.taxeditor.view.nameviewersupport.NameComposite;\r
+\r
+/**\r
+ * @author p.ciardelli\r
+ * @created 02.06.2008\r
+ * @version 1.0\r
+ */\r
+public class MoveCompositeToNewGroupAction extends Action {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(MoveCompositeToNewGroupAction.class);\r
+\r
+       private static String text = "Move name composite to new homotypic group";\r
+       private ImageDescriptor image = null;\r
+\r
+       private IUndoableOperation operation;\r
+       \r
+       private NameComposite composite;\r
+       private Synonym synonym;\r
+       private HomotypicalGroup newHomotypicGroup;\r
+       private Taxon taxon;\r
+\r
+       private MoveCompositeToNewGroupAction() {\r
+               super(text);\r
+               setImageDescriptor(image);\r
+       }\r
+\r
+       public MoveCompositeToNewGroupAction(final NameComposite composite,\r
+                       GroupComposite groupComposite, Taxon taxon) {\r
+               this();\r
+\r
+                if (composite.getData() instanceof Synonym) {\r
+                        this.synonym = (Synonym) composite.getData();\r
+                } else {\r
+                        throw new IllegalArgumentException(\r
+                                "This action requires a composite with a Synonym in its data field.");\r
+                }\r
+\r
+                if (groupComposite.getData() instanceof HomotypicalGroup) {\r
+                        this.newHomotypicGroup = (HomotypicalGroup) groupComposite.getData();\r
+                } else {\r
+                        throw new IllegalArgumentException(\r
+                                "This action requires a group composite with a HomotypicalGroup in its data field.");\r
+                }\r
+                \r
+                this.composite = composite;\r
+                \r
+                if (groupComposite.getData(ITaxEditorConstants.TAXON) instanceof Taxon) {\r
+                        this.taxon = (Taxon) groupComposite.getData(ITaxEditorConstants.TAXON);\r
+                } else {\r
+                        this.taxon = taxon;\r
+                }\r
+                \r
+                operation = new ChangeHomotypicGroupOperation();\r
+\r
+       }\r
+\r
+       public void run() {\r
+               IOperationHistory operationHistory = UiUtil.getOperationHistory();\r
+               IUndoContext undoContext = UiUtil.getWorkbenchUndoContext();\r
+               operation.addContext(undoContext);\r
+               try {\r
+                       operationHistory.execute(operation, null, null);\r
+                       operationHistory.add(operation);\r
+               } catch (ExecutionException e) {\r
+                       e.printStackTrace();\r
+               }\r
+       }\r
+\r
+       class ChangeHomotypicGroupOperation extends AbstractOperation {\r
+\r
+               public ChangeHomotypicGroupOperation() {\r
+                       super("'" + text + "'");\r
+               }\r
+\r
+               @Override\r
+               public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                               throws ExecutionException {\r
+                       Action changeHomotypicGroupAction = new ChangeSynonymHomotypicGroup(\r
+                                       synonym, taxon, newHomotypicGroup);\r
+                       changeHomotypicGroupAction\r
+                                       .addPropertyChangeListener(new IPropertyChangeListener() {\r
+                                               @Override\r
+                                               public void propertyChange(\r
+                                                               org.eclipse.jface.util.PropertyChangeEvent event) {\r
+                                                       if (event.getProperty().equals(\r
+                                                                       ITaxEditorConstants.HOMOTYPIC_GROUP)) {\r
+                                                               \r
+                                                               if (event.getNewValue() instanceof Synonym) {\r
+                                                                       composite.setData(event.getNewValue());\r
+                                                               }\r
+                                                               \r
+                                                               if (synonym.getName() == null) {\r
+                                                                       return;\r
+                                                               }\r
+                                                               \r
+                                                               if (CdmUtil.isNameHomotypic(synonym.getName(), taxon)) {\r
+                                                                       composite.transform(NameComposite.CHANGE_TO_HOMOTYPIC_SYNONYM);\r
+                                                               } else {\r
+                                                                       composite.transform(NameComposite.CHANGE_TO_HETEROTYPIC_SYNONYM);                                                                       \r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                       });\r
+                       changeHomotypicGroupAction.run();\r
+                       return Status.OK_STATUS;\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
+                       return Status.OK_STATUS;\r
+               }\r
+       }\r
+}
\ No newline at end of file
index d1ca7439d5077ec6846ebb0464161b31aa0a5b8e..82115c0f71e0f5612dd81e75f5ce66877c4dab8f 100644 (file)
@@ -72,9 +72,16 @@ public class CdmUtil {
                        return false;\r
                }               \r
                \r
+               Set<TaxonNameBase> typifiedNames = homotypicalGroup.getTypifiedNames();\r
+               \r
+               // Check whether there are any other names in the group\r
+               if (typifiedNames.size() == 1) {\r
+                       return false;\r
+               }\r
+               \r
                boolean isBasionymToAll = true;\r
                                \r
-               for (TaxonNameBase taxonName : homotypicalGroup.getTypifiedNames()) {\r
+               for (TaxonNameBase taxonName : typifiedNames) {\r
                        if (!taxonName.equals(name)) {\r
                                if (!isNameBasionymOf(name, taxonName)) {\r
                                        return false;\r
index 6187ba0a420f2afd4b47a5f3436037007e324c51..23f195eb57d28401352daf85b431a77a08ec32ae 100644 (file)
@@ -25,6 +25,7 @@ import org.eclipse.swt.dnd.DropTargetAdapter;
 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.swt.widgets.Display;\r
 import org.eclipse.ui.IEditorInput;\r
 import org.eclipse.ui.IEditorSite;\r
@@ -43,6 +44,7 @@ import eu.etaxonomy.cdm.model.name.Rank;
 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.actions.WidgetTransfer;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.GroupComposite;\r
 import eu.etaxonomy.taxeditor.view.nameviewersupport.NameComposite;\r
@@ -165,6 +167,7 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                HomotypicalGroup homotypicGroup = taxon.getHomotypicGroup(); \r
                GroupComposite homotypicComposite = \r
                                taxonCompositeFactory.createGroupComposite(parent, homotypicGroup); \r
+               homotypicComposite.setData(ITaxEditorConstants.TAXON, taxon);\r
                \r
                NameComposite nameCompositeWithWarning = null;\r
                \r
@@ -184,7 +187,8 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                                \r
                                Synonym synonym = (Synonym) synonymOrMisName;\r
                                synonym.addPropertyChangeListener(taxonChangeListener);\r
-                               currentHeterotypicGroup = synonym.getHomotypicGroup(); \r
+                               currentHeterotypicGroup = synonym.getHomotypicGroup();\r
+                               \r
                                \r
                                if (currentHeterotypicGroup.equals(homotypicGroup)) {\r
                                        \r
@@ -196,7 +200,8 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                                                \r
                                                // Create a new group composite\r
                                                heterotypicGroupComposite =  \r
-                                                               taxonCompositeFactory.createGroupComposite(parent, currentHeterotypicGroup);    \r
+                                                               taxonCompositeFactory.createGroupComposite(parent, currentHeterotypicGroup);\r
+                                               heterotypicGroupComposite.setData(ITaxEditorConstants.TAXON, taxon);\r
                                                lastHeterotypicGroup = currentHeterotypicGroup;\r
                                        }\r
                                        \r
@@ -225,18 +230,18 @@ public class NameEditorView extends EditorPart implements IAdaptable {
                                \r
                                GroupComposite newGroupComposite = \r
                                                taxonCompositeFactory.createGroupComposite(parent, new HomotypicalGroup());\r
+                               newGroupComposite.setData(ITaxEditorConstants.TAXON, taxon);\r
                                \r
                                NameComposite nameComposite = (NameComposite) event.data;\r
-                               nameComposite.setParent(newGroupComposite);\r
-                               \r
+                               nameComposite.setParent(newGroupComposite);                             \r
                        }               \r
                });\r
                \r
                // We've added elements to the managed form, so redraw it\r
                scrolledForm.reflow(true);\r
-               \r
        }\r
-               \r
+       \r
+       \r
        private NameComposite warnIfNameConflictWithParent(NameComposite nameComposite) {\r
                \r
                String message = null;\r
index 8b8b2fb205d5f0b1e9b13aa7e98a02df7e4c88f7..30e43a6954ff4ebee3272f55b8c1cdf417134e07 100644 (file)
@@ -87,7 +87,10 @@ abstract public class GroupedComposite extends Composite {
         * @see org.eclipse.swt.widgets.Control#setParent(org.eclipse.swt.widgets.Composite)\r
         */\r
        public boolean setParent(Composite parent) {\r
+               \r
                Composite oldParent = this.getParent();\r
+               Composite oldGrandparent = oldParent.getParent();\r
+               \r
                if (super.setParent(parent)) {\r
                        if (oldParent instanceof GroupComposite\r
                                        && oldParent.getChildren().length == 0) {\r
@@ -97,6 +100,12 @@ abstract public class GroupedComposite extends Composite {
 \r
                        // Redraw the component holding the group and grouped composites\r
                        parent.getParent().layout();\r
+                       \r
+                       // In case we are dragging between different views, redraw the\r
+                       //      "old" view\r
+                       if (!oldGrandparent.equals(parent.getParent())) {\r
+                               oldGrandparent.layout();        \r
+                       }\r
 \r
                        return true;\r
                }\r
index bf9e05ce17dd5453b7e34cea86ed7887ff180822..f068665086c3e31855f17da22e6ca2c1b3597c0b 100644 (file)
@@ -40,7 +40,7 @@ public abstract class LineBreakListener implements VerifyListener {
                                                \r
                String verifyText = e.text;\r
                \r
-               StyledText styledText = (StyledText)e.widget;\r
+               StyledText styledText = (StyledText) e.widget;\r
                String widgetText = styledText.getText(); \r
                int cursorPosition = styledText.getCaretOffset();\r
                \r
index 9cac2b98736e74f5c840ffc59f7177f8fbdb5222..9ca180dbccdfcbcf3e81d7f17c017f27ae014b64 100644 (file)
@@ -5,8 +5,10 @@ import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;\r
 import org.eclipse.swt.widgets.Composite;\r
 \r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.taxeditor.ITaxEditorConstants;\r
 import eu.etaxonomy.taxeditor.TaxEditorPlugin;\r
+import eu.etaxonomy.taxeditor.model.CdmUtil;\r
 \r
 public class NameComposite extends EditableGroupedComposite {\r
        \r
@@ -42,6 +44,8 @@ public class NameComposite extends EditableGroupedComposite {
        /* ************ TRANSFORMATIONS ************ */\r
        public static final String ADD_GROUP_BASIONYM = "add_group_basionym";\r
        public static final String REMOVE_GROUP_BASIONYM = "remove_group_basionym";\r
+       public static final String CHANGE_TO_HETEROTYPIC_SYNONYM = "change_to_heterotypic_synonym";\r
+       public static final String CHANGE_TO_HOMOTYPIC_SYNONYM = "change_to_homotypic_synonym";\r
        \r
        /* ************ MENU ACTIONS ************ */\r
        public Action CHANGE_TAXON_TO_SYNONYM_ACTION;\r
@@ -66,6 +70,33 @@ public class NameComposite extends EditableGroupedComposite {
                                setIcon(HETEROTYPIC_SYNONYM_ICON);\r
                        }\r
                }\r
+               \r
+               if (transformation.equals(CHANGE_TO_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;\r
+               }\r
+               \r
+               if (transformation.equals(CHANGE_TO_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
+                       setIcon(HETEROTYPIC_SYNONYM_ICON);\r
+                       compositeType = HETEROTYPIC;\r
+               }\r
        }\r
        \r
 //     public void createMenu() {\r
index dc310107b5d46952510058b15504c4bbf8edcca9..af7f028c150ee0014714625de4b87843b8045f2a 100644 (file)
@@ -45,6 +45,7 @@ import eu.etaxonomy.taxeditor.actions.ui.ChangeCompositeToNewTaxonAction;
 import eu.etaxonomy.taxeditor.actions.ui.ChangeTaxonToSynonymAction;\r
 import eu.etaxonomy.taxeditor.actions.ui.DeleteMisappliedNameCompositeAction;\r
 import eu.etaxonomy.taxeditor.actions.ui.DeleteSynonymCompositeAction;\r
+import eu.etaxonomy.taxeditor.actions.ui.MoveCompositeToNewGroupAction;\r
 import eu.etaxonomy.taxeditor.actions.ui.MoveTaxonDialogAction;\r
 import eu.etaxonomy.taxeditor.actions.ui.RemoveBasionymCompositeAction;\r
 import eu.etaxonomy.taxeditor.model.CdmUtil;\r
@@ -159,43 +160,45 @@ public class TaxonCompositeFactory {
                                        return;\r
                                }\r
                                if (parentData instanceof HomotypicalGroup) {\r
-                                       try {\r
-                                               TaxonNameBase name = data.getName();\r
-\r
-                                               // Change name composite's homotypical group to its\r
-                                               // parent's ...\r
-                                               ((HomotypicalGroup) parentData).addTypifiedName(name);\r
-//                                             name.setHomotypicalGroup((HomotypicalGroup) parentData);\r
-\r
-                                               // Delete synonym from taxon ...\r
-                                               if (data instanceof Synonym) {\r
-                                                       taxon.removeSynonym((Synonym) data);\r
-                                               }\r
-\r
-                                               // Recreate it as either homotypic or heterotypic ...\r
-                                               SynonymRelationship synonymRelation = null;\r
-                                               if (parentData.equals(taxon.getHomotypicGroup())) {\r
-                                                       synonymRelation = taxon\r
-                                                                       .addHomotypicSynonymName(name, null, null);\r
-                                               } else {\r
-                                                       HomotypicalGroup group = (HomotypicalGroup) parentData;\r
-                                                       synonymRelation = taxon.addHeterotypicSynonymName(\r
-                                                                       name, group, null, null);\r
-                                               }\r
-                                               nameComposite.setData(synonymRelation.getSynonym());\r
-                                       } catch (RuntimeException e) {\r
-                                               logger\r
-                                                               .error("CDM update failed during adaptParentData."); //$NON-NLS-1$\r
-                                               e.printStackTrace();\r
-                                       }\r
-\r
-                                       // And set name composite's appearance to group synonymy\r
-                                       // type\r
-                                       if (parentData.equals(taxon.getHomotypicGroup())) {\r
-                                               transformHomotypicSynonymComposite(nameComposite);\r
-                                       } else {\r
-                                               transformHeterotypicSynonymComposite(nameComposite);\r
-                                       }\r
+                                       new MoveCompositeToNewGroupAction(nameComposite,\r
+                                                       (GroupComposite) nameComposite.getParent(), taxon).run();\r
+//                                     try {\r
+//                                             TaxonNameBase name = data.getName();\r
+//\r
+//                                             // Change name composite's homotypical group to its\r
+//                                             // parent's ...\r
+//                                             ((HomotypicalGroup) parentData).addTypifiedName(name);\r
+////                                           name.setHomotypicalGroup((HomotypicalGroup) parentData);\r
+//\r
+//                                             // Delete synonym from taxon ...\r
+//                                             if (data instanceof Synonym) {\r
+//                                                     taxon.removeSynonym((Synonym) data);\r
+//                                             }\r
+//\r
+//                                             // Recreate it as either homotypic or heterotypic ...\r
+//                                             SynonymRelationship synonymRelation = null;\r
+//                                             if (parentData.equals(taxon.getHomotypicGroup())) {\r
+//                                                     synonymRelation = taxon\r
+//                                                                     .addHomotypicSynonymName(name, null, null);\r
+//                                             } else {\r
+//                                                     HomotypicalGroup group = (HomotypicalGroup) parentData;\r
+//                                                     synonymRelation = taxon.addHeterotypicSynonymName(\r
+//                                                                     name, group, null, null);\r
+//                                             }\r
+//                                             nameComposite.setData(synonymRelation.getSynonym());\r
+//                                     } catch (RuntimeException e) {\r
+//                                             logger\r
+//                                                             .error("CDM update failed during adaptParentData."); //$NON-NLS-1$\r
+//                                             e.printStackTrace();\r
+//                                     }\r
+//\r
+//                                     // And set name composite's appearance to group synonymy\r
+//                                     // type\r
+//                                     if (parentData.equals(taxon.getHomotypicGroup())) {\r
+//                                             transformHomotypicSynonymComposite(nameComposite);\r
+//                                     } else {\r
+//                                             transformHeterotypicSynonymComposite(nameComposite);\r
+//                                     }\r
                                }\r
                        }\r
                });\r
@@ -486,7 +489,6 @@ public class TaxonCompositeFactory {
                        final TaxonBase data) {\r
                final NameViewer nameViewer = new NameViewer(nameComposite);\r
 \r
-               // TODO change\r
                Composite nameParent = nameComposite.getParent();\r
                final Composite parent = nameParent.getParent();\r
 \r
@@ -500,11 +502,16 @@ public class TaxonCompositeFactory {
 \r
                        @Override\r
                        public void handleSplitText(String text) {\r
+                               \r
+                               // create heterotypic synonym\r
                                NonViralName name = (NonViralName) CdmUtil.parseFullReference(text, null, null);\r
 \r
                                SynonymRelationship synonymRelation = taxon\r
                                                .addHeterotypicSynonymName(name);\r
                                Synonym synonym = synonymRelation.getSynonym();\r
+                               \r
+                               // create new group composite\r
+                               //  for this, we'll need the composite's CURRENT grandparent\r
                                GroupComposite newGroupComposite = createGroupComposite(parent,\r
                                                synonym.getName().getHomotypicalGroup());\r
                                createHeterotypicSynonymComposite(newGroupComposite, synonym);\r