Name Composites can now be dragged from one Taxon editor view to another.
authorp.ciardelli <p.ciardelli@localhost>
Mon, 23 Jun 2008 08:32:09 +0000 (08:32 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Mon, 23 Jun 2008 08:32:09 +0000 (08:32 +0000)
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/cdm/AddHeterotypicSynonymToTaxonAction.java
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/CreateNewHeterotypicCompositesAction.java [new file with mode: 0644]
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/nameviewersupport/TaxonCompositeFactory.java

index 113046fb6a29f8d8ba77530ddd88fb1d77540a3d..99ba195479d1751a38c52210ce2443ca6dd613bc 100644 (file)
@@ -419,6 +419,7 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/Add
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/ChangeCompositeToMisappliedNameAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/ChangeCompositeToNewTaxonAction.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/ChangeTaxonToSynonymAction.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/CreateNewHeterotypicCompositesAction.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
index 36e8d9bd00cee2ca6dd21afbf1ab4bfec36c5048..65e2c017a64a7d0916ac902ae6f9f57c238947bd 100644 (file)
@@ -69,6 +69,8 @@ public class AddHeterotypicSynonymToTaxonAction extends Action {
                        SynonymRelationship synonymRelationship = taxon\r
                                        .addHeterotypicSynonymName(synonymName);\r
                        synonym = synonymRelationship.getSynonym();\r
+                       \r
+                       firePropertyChange(ITaxEditorConstants.SYNONYM, null, synonym);\r
                }\r
        }\r
 \r
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/CreateNewHeterotypicCompositesAction.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/actions/ui/CreateNewHeterotypicCompositesAction.java
new file mode 100644 (file)
index 0000000..c94c820
--- /dev/null
@@ -0,0 +1,137 @@
+/**\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
+import org.eclipse.jface.util.PropertyChangeEvent;\r
+import org.eclipse.swt.widgets.Composite;\r
+\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.UiUtil;\r
+import eu.etaxonomy.taxeditor.actions.cdm.AddHeterotypicSynonymToTaxonAction;\r
+import eu.etaxonomy.taxeditor.actions.cdm.MakeGroupBasionymAction;\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
+ * Creates a new homotypic group with one new heterotypic synonym, then creates\r
+ * the corresponding UI elements. The synonym is created with text which is \r
+ * subsequently parsed.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 04.06.2008\r
+ * @version 1.0\r
+ */\r
+public class CreateNewHeterotypicCompositesAction extends Action {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(CreateNewHeterotypicCompositesAction.class);\r
+\r
+       private static String text = "Create a heterotypic synonym in a new homotypic group";\r
+       private ImageDescriptor image = TaxEditorPlugin.getDefault()\r
+                       .getImageDescriptor(ITaxEditorConstants.HETEROTYPIC_SYN_ICON);\r
+\r
+       private IUndoableOperation operation;\r
+\r
+       private Composite parentComposite;\r
+       private Taxon taxon;\r
+       private String synonymText;\r
+       \r
+       private CreateNewHeterotypicCompositesAction() {\r
+               super(text);\r
+               setImageDescriptor(image);\r
+       }\r
+\r
+       public CreateNewHeterotypicCompositesAction(Composite parentComposite,\r
+                       Taxon taxon, String synonymText) {\r
+               this();\r
+\r
+               this.parentComposite = parentComposite;\r
+               this.taxon = taxon;\r
+               this.synonymText = synonymText;\r
+\r
+               operation = new CreateCompositesAction();\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 CreateCompositesAction extends AbstractOperation {\r
+\r
+               public CreateCompositesAction() {\r
+                       super("'" + text + "'");\r
+               }\r
+\r
+               @Override\r
+               public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+                               throws ExecutionException {\r
+                       \r
+                       Action action = \r
+                               new AddHeterotypicSynonymToTaxonAction(synonymText, taxon);\r
+                       action.run();\r
+                       \r
+                       action.addPropertyChangeListener(new IPropertyChangeListener() {\r
+                               @Override\r
+                               public void propertyChange(PropertyChangeEvent event) {\r
+                                       if (event.getProperty()\r
+                                                       .equals(ITaxEditorConstants.SYNONYM)) {\r
+                                               GroupComposite newGroupComposite = createGroupComposite(parentComposite,\r
+                                                               synonym.getName().getHomotypicalGroup());\r
+                                               createHeterotypicSynonymComposite(newGroupComposite, synonym);\r
+\r
+                                               parentComposite.layout();\r
+                                       }\r
+                               }\r
+                       });\r
+                       action.run();\r
+\r
+                       return Status.OK_STATUS;\r
+               }\r
+\r
+               @Override\r
+               public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+                               throws ExecutionException {\r
+                       // TODO Auto-generated method stub\r
+                       return Status.OK_STATUS;\r
+               }\r
+\r
+               @Override\r
+               public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+                               throws ExecutionException {\r
+                       // TODO Auto-generated method stub\r
+                       return Status.OK_STATUS;\r
+               }\r
+       }\r
+}\r
index af7f028c150ee0014714625de4b87843b8045f2a..39436a7582edd56bb96735fb1fd4301659be1116 100644 (file)
@@ -38,11 +38,13 @@ import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
 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.cdm.AddHeterotypicSynonymToTaxonAction;\r
 import eu.etaxonomy.taxeditor.actions.cdm.TaxonActionFactory;\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.ChangeTaxonToSynonymAction;\r
+import eu.etaxonomy.taxeditor.actions.ui.CreateNewHeterotypicCompositesAction;\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
@@ -69,8 +71,8 @@ public class TaxonCompositeFactory {
        private ISelectionProvider selectionProvider;\r
        private IEditorSite editorSite;\r
 \r
-       private GroupComposite misappliedNameGroupComposite;    \r
-       \r
+       private GroupComposite misappliedNameGroupComposite;\r
+\r
        /**\r
         * Private constructor called by newInstance()\r
         * \r
@@ -161,44 +163,47 @@ public class TaxonCompositeFactory {
                                }\r
                                if (parentData instanceof HomotypicalGroup) {\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
+                                                       (GroupComposite) nameComposite.getParent(), taxon)\r
+                                                       .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)\r
+                                       // 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.");\r
+                                       // //$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
@@ -289,7 +294,7 @@ public class TaxonCompositeFactory {
                createMisappliedNameMenu(nameComposite);\r
 \r
                nameComposite.compositeType = NameComposite.MISAPPLIEDNAME;\r
-               \r
+\r
                return nameComposite;\r
        }\r
 \r
@@ -318,10 +323,9 @@ public class TaxonCompositeFactory {
                } else {\r
                        nameComposite.setIcon(NameComposite.HOMOTYPIC_SYNONYM_ICON);\r
                }\r
-               \r
 \r
                nameComposite.compositeType = NameComposite.HOMOTYPIC;\r
-               \r
+\r
                return transformSynonymComposite(nameComposite);\r
        }\r
 \r
@@ -351,9 +355,8 @@ public class TaxonCompositeFactory {
                        nameComposite.setIcon(NameComposite.HETEROTYPIC_SYNONYM_ICON);\r
                }\r
 \r
-\r
                nameComposite.compositeType = NameComposite.HETEROTYPIC;\r
-               \r
+\r
                return transformSynonymComposite(nameComposite);\r
        }\r
 \r
@@ -390,56 +393,65 @@ public class TaxonCompositeFactory {
                if (!(nameComposite.getData() instanceof Synonym)) {\r
                        return;\r
                }\r
-               \r
+\r
                Synonym synonym = (Synonym) nameComposite.getData();\r
                ContextMenu contextMenu = new ContextMenu(nameComposite\r
                                .getDraggableLabel());\r
-               \r
+\r
                Action misappliedNameAction = new ChangeCompositeToMisappliedNameAction(\r
-                               nameComposite, this);           \r
+                               nameComposite, this);\r
                contextMenu.addAction(misappliedNameAction);\r
-               \r
-               Action deleteSynonymAction = new DeleteSynonymCompositeAction(nameComposite, this);\r
+\r
+               Action deleteSynonymAction = new DeleteSynonymCompositeAction(\r
+                               nameComposite, this);\r
                contextMenu.addAction(deleteSynonymAction);\r
-               \r
+\r
                contextMenu.addSeparator();\r
-               \r
-               final Action addBasionymAction = new AddBasionymCompositeAction(nameComposite);\r
+\r
+               final Action addBasionymAction = new AddBasionymCompositeAction(\r
+                               nameComposite);\r
                contextMenu.addAction(addBasionymAction);\r
-               \r
-               final Action removeBasionymAction = new RemoveBasionymCompositeAction(nameComposite);\r
-               contextMenu.addAction(removeBasionymAction);            \r
-               \r
-               addBasionymAction.addPropertyChangeListener(new IPropertyChangeListener() {\r
-                       @Override\r
-                       public void propertyChange(\r
-                                       org.eclipse.jface.util.PropertyChangeEvent event) {\r
-                               if (event.getProperty().equals(\r
-                                               ITaxEditorConstants.BASIONYM)) {\r
-                                       removeBasionymAction.setEnabled(true);\r
-                                       nameComposite.transform(NameComposite.ADD_GROUP_BASIONYM);\r
-                               }\r
-                       }\r
-               });                     \r
 \r
-               removeBasionymAction.addPropertyChangeListener(new IPropertyChangeListener() {\r
-                       @Override\r
-                       public void propertyChange(\r
-                                       org.eclipse.jface.util.PropertyChangeEvent event) {\r
-                               if (event.getProperty().equals(\r
-                                               ITaxEditorConstants.BASIONYM)) {\r
-                                       addBasionymAction.setEnabled(true);\r
-                                       nameComposite.transform(NameComposite.REMOVE_GROUP_BASIONYM);\r
-                               }\r
-                       }\r
-               });\r
-               \r
+               final Action removeBasionymAction = new RemoveBasionymCompositeAction(\r
+                               nameComposite);\r
+               contextMenu.addAction(removeBasionymAction);\r
+\r
+               addBasionymAction\r
+                               .addPropertyChangeListener(new IPropertyChangeListener() {\r
+                                       @Override\r
+                                       public void propertyChange(\r
+                                                       org.eclipse.jface.util.PropertyChangeEvent event) {\r
+                                               if (event.getProperty().equals(\r
+                                                               ITaxEditorConstants.BASIONYM)) {\r
+                                                       removeBasionymAction.setEnabled(true);\r
+                                                       nameComposite\r
+                                                                       .transform(NameComposite.ADD_GROUP_BASIONYM);\r
+                                               }\r
+                                       }\r
+                               });\r
+\r
+               removeBasionymAction\r
+                               .addPropertyChangeListener(new IPropertyChangeListener() {\r
+                                       @Override\r
+                                       public void propertyChange(\r
+                                                       org.eclipse.jface.util.PropertyChangeEvent event) {\r
+                                               if (event.getProperty().equals(\r
+                                                               ITaxEditorConstants.BASIONYM)) {\r
+                                                       addBasionymAction.setEnabled(true);\r
+                                                       nameComposite\r
+                                                                       .transform(NameComposite.REMOVE_GROUP_BASIONYM);\r
+                                               }\r
+                                       }\r
+                               });\r
+\r
                contextMenu.addSeparator();\r
-               \r
-               Action changeToThisTaxon = new ChangeSynonymToTaxonUiAction(synonym, taxon);\r
+\r
+               Action changeToThisTaxon = new ChangeSynonymToTaxonUiAction(synonym,\r
+                               taxon);\r
                contextMenu.addAction(changeToThisTaxon);\r
-               \r
-               Action changeToNewAccepted = new ChangeCompositeToNewTaxonAction(nameComposite, taxon);\r
+\r
+               Action changeToNewAccepted = new ChangeCompositeToNewTaxonAction(\r
+                               nameComposite, taxon);\r
                contextMenu.addAction(changeToNewAccepted);\r
        }\r
 \r
@@ -448,22 +460,22 @@ public class TaxonCompositeFactory {
         */\r
        private void createAcceptedMenu(NameComposite nameComposite) {\r
 \r
-//             MenuItem menuItem = new MenuItem(menu, SWT.NONE);\r
-//             menuItem.setImage(NameComposite.AUTONYM_ICON);\r
-//             menuItem.setText("Create autonym and subspecies"); //$NON-NLS-1$\r
-//             menuItem.addSelectionListener(new SelectionAdapter() {\r
-//                     @Override\r
-//                     public void widgetSelected(SelectionEvent e) {\r
-//\r
-//                     }\r
-//             });\r
+               // MenuItem menuItem = new MenuItem(menu, SWT.NONE);\r
+               // menuItem.setImage(NameComposite.AUTONYM_ICON);\r
+               // menuItem.setText("Create autonym and subspecies"); //$NON-NLS-1$\r
+               // menuItem.addSelectionListener(new SelectionAdapter() {\r
+               // @Override\r
+               // public void widgetSelected(SelectionEvent e) {\r
+               //\r
+               // }\r
+               // });\r
 \r
                ContextMenu contextMenu = new ContextMenu(nameComposite\r
                                .getDraggableLabel());\r
 \r
                Action changeTaxonAction = new ChangeTaxonToSynonymAction(taxon);\r
                contextMenu.addAction(changeTaxonAction);\r
-               \r
+\r
                Action moveTaxonAction = new MoveTaxonDialogAction(taxon);\r
                contextMenu.addAction(moveTaxonAction);\r
        }\r
@@ -476,10 +488,11 @@ public class TaxonCompositeFactory {
                ContextMenu contextMenu = new ContextMenu(nameComposite\r
                                .getDraggableLabel());\r
 \r
-               Action deleteMisappliedNameAction = new DeleteMisappliedNameCompositeAction(nameComposite, this);\r
+               Action deleteMisappliedNameAction = new DeleteMisappliedNameCompositeAction(\r
+                               nameComposite, this);\r
                contextMenu.addAction(deleteMisappliedNameAction);\r
        }\r
-       \r
+\r
        /**\r
         * @param nameComposite\r
         * @param data\r
@@ -489,9 +502,6 @@ public class TaxonCompositeFactory {
                        final TaxonBase data) {\r
                final NameViewer nameViewer = new NameViewer(nameComposite);\r
 \r
-               Composite nameParent = nameComposite.getParent();\r
-               final Composite parent = nameParent.getParent();\r
-\r
                // TODO leave what user has entered, don't immediately get value out of\r
                // CDM object\r
                nameViewer.setText(data.getName().getTitleCache());\r
@@ -502,21 +512,67 @@ public class TaxonCompositeFactory {
 \r
                        @Override\r
                        public void handleSplitText(String text) {\r
-                               \r
+\r
                                // create heterotypic synonym\r
-                               NonViralName name = (NonViralName) CdmUtil.parseFullReference(text, null, null);\r
+//                             NonViralName name = (NonViralName) CdmUtil.parseFullReference(\r
+//                                             text, null, null);\r
+//\r
+//                             SynonymRelationship synonymRelation = taxon\r
+//                                             .addHeterotypicSynonymName(name);\r
+//                             Synonym synonym = synonymRelation.getSynonym();\r
 \r
-                               SynonymRelationship synonymRelation = taxon\r
-                                               .addHeterotypicSynonymName(name);\r
-                               Synonym synonym = synonymRelation.getSynonym();\r
+                               Composite parent = nameComposite.getParent();\r
+                               final Composite grandParent = parent.getParent();\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
+                               // In the worst case scenario, we will use the taxon for\r
+                               //      TaxonCompositeFactory to create our new heterotypic group\r
+                               //      and synonym elements.\r
+                               //\r
+                               // However, if NameComposite has been moved to another view,\r
+                               //      this would mean the new elements will be created on the \r
+                               //      original view.\r
+                               //\r
+                               // Therefore, the appropriate Taxon should be on one of the\r
+                               //      component elements.\r
+                               Taxon taxon = TaxonCompositeFactory.this.taxon;\r
+                               if (nameComposite.getData(ITaxEditorConstants.TAXON) instanceof Taxon) {\r
+                                       taxon = (Taxon) nameComposite.getData(ITaxEditorConstants.TAXON);\r
+                               }\r
+                               if (parent.getData(ITaxEditorConstants.TAXON) instanceof Taxon) {\r
+                                       taxon = (Taxon) parent.getData(ITaxEditorConstants.TAXON);\r
+                               }\r
+                               if (grandParent.getData(ITaxEditorConstants.TAXON) instanceof Taxon) {\r
+                                       taxon = (Taxon) grandParent.getData(ITaxEditorConstants.TAXON);\r
+                               }                               \r
+                               \r
+//                             new CreateNewHeterotypicCompositesAction(grandParent, taxon, text).run();\r
+                               // TODO put composite creation into action\r
+                               Action addSynonymAction = \r
+                                               new AddHeterotypicSynonymToTaxonAction(text, taxon);\r
+                               addSynonymAction.addPropertyChangeListener(new IPropertyChangeListener() {\r
+                                       @Override\r
+                                       public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) {\r
+                                               if (event.getProperty()\r
+                                                               .equals(ITaxEditorConstants.SYNONYM)) {\r
+                                                       if (event.getNewValue() instanceof Synonym) {\r
+                                                               Synonym synonym = (Synonym) event.getNewValue();\r
+                                                               GroupComposite newGroupComposite = createGroupComposite(grandParent,\r
+                                                                               synonym.getName().getHomotypicalGroup());\r
+                                                               createHeterotypicSynonymComposite(newGroupComposite, synonym);\r
+                                                               \r
+                                                               grandParent.layout();                                                   }\r
+                                               }\r
+                                       }\r
+                               });\r
+                               addSynonymAction.run();\r
 \r
-                               parent.layout();\r
+                               // create new group composite\r
+                               // for this, we'll need the composite's CURRENT grandparent\r
+//                             GroupComposite newGroupComposite = createGroupComposite(grandParent,\r
+//                                             synonym.getName().getHomotypicalGroup());\r
+//                             createHeterotypicSynonymComposite(newGroupComposite, synonym);\r
+//\r
+//                             parent.layout();\r
                        }\r
 \r
                });\r
@@ -544,10 +600,10 @@ public class TaxonCompositeFactory {
 \r
                createLineWrapSupport(nameViewer);\r
 \r
-//             if (editorSite != null) {\r
-//                     nameViewer.createUndoSupport(editorSite);\r
-//             }\r
-               \r
+               // if (editorSite != null) {\r
+               // nameViewer.createUndoSupport(editorSite);\r
+               // }\r
+\r
                return nameViewer;\r
        }\r
 \r