--- /dev/null
+/**\r
+ * Copyright (C) 2007 EDIT\r
+ * European Distributed Institute of Taxonomy \r
+ * http://www.e-taxonomy.eu\r
+ * \r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+\r
+package eu.etaxonomy.taxeditor.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
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
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
}\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
createMisappliedNameMenu(nameComposite);\r
\r
nameComposite.compositeType = NameComposite.MISAPPLIEDNAME;\r
- \r
+\r
return nameComposite;\r
}\r
\r
} 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
nameComposite.setIcon(NameComposite.HETEROTYPIC_SYNONYM_ICON);\r
}\r
\r
-\r
nameComposite.compositeType = NameComposite.HETEROTYPIC;\r
- \r
+\r
return transformSynonymComposite(nameComposite);\r
}\r
\r
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
*/\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
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
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
\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
\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