taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/GroupedComposite.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/IFreeTextElementFactory.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/IHasPropertySource.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/IMultiPageTaxonEditorPage.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineBreakListener.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineWrapSquigglesStrategy.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/LineWrapSupport.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/Page.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/SimpleSelectionProvider.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInput.java -text
+taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInputDataChangeBehaviour.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInputFactory.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/ViewerConfiguration.java -text
taxeditor-editor/src/main/java/eu/etaxonomy/taxeditor/editor/WidgetTransfer.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/AbstractPersistentPostOperation.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/AbstractPostOperation.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/AddImageToDescriptionElementOperation.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/ChangeAcceptedTaxonToSynonymOperation.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/ChangeConceptRelationshipTypeOperation.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/ChangeConceptToSynonymOperation.java -text
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/operations/ChangeHomotypicGroupOperation.java -text
id="eu.etaxonomy.taxeditor.editor.command.showPropertySheetView"
name="Show Property Sheet">
</command>
- <command
- defaultHandler="eu.etaxonomy.taxeditor.namerelationsview.ShowNameRelationsHandler"
- id="eu.etaxonomy.taxeditor.editor.commands.showNameRelationsView"
- name="Show Name Relations">
- </command>
</extension>
<extension
point="org.eclipse.ui.commands">
import org.eclipse.ui.IViewPart;\r
import org.eclipse.ui.PartInitException;\r
\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
import eu.etaxonomy.taxeditor.model.AbstractUtility;\r
\r
/**\r
IEditorInput input = TaxonEditorInput.NewInstance(taxonNodeUuid); \r
return open(input, MultiPageTaxonEditor.ID);\r
}\r
+ \r
\r
+ public static IEditorPart findEditorByTaxonNodeUuid(UUID taxonNodeUuid){\r
+ IEditorInput input = TaxonEditorInput.NewInstance(taxonNodeUuid); \r
+ return getActivePage().findEditor(input);\r
+ }\r
+ \r
/**\r
* An uninitialized taxon is one that hasn't been saved yet. As such, it should appear in neither\r
* the list of recent names nor in the taxonomic tree when opened.\r
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor;
+
+import org.eclipse.ui.IEditorPart;
+
+/**
+ * @author n.hoffmann
+ * @created Jan 5, 2010
+ * @version 1.0
+ */
+public interface IMultiPageTaxonEditorPage extends IEditorPart {
+
+ /**
+ * Redraws this editor
+ * return true on success
+ */
+ public boolean redraw();
+
+ /**
+ * Redraws the editor controls
+ *
+ * @param focus if set to true the focus is set on the editor
+ * @return true on success
+ */
+ public boolean redraw(boolean focus);
+
+ /**
+ * Whether the editor page is currently redrawing
+ *
+ * @return
+ */
+ public boolean isRedrawing();
+}
}\r
\r
/**\r
- * Returns an <code>AbstractTaxonEditor</code> implementation by type\r
+ * Returns an <code>IEditorPart</code> implementation by type\r
* \r
* @param page the page type\r
* @return\r
*/\r
- public IEditorPart getPage(Page page){\r
+ public IMultiPageTaxonEditorPage getPage(Page page){\r
for(IEditorPart editor : this.getPages()){\r
if(editor.getClass().equals(page.getClazz())){\r
- return editor;\r
+ return (IMultiPageTaxonEditorPage) editor;\r
}\r
}\r
return null;\r
}\r
return editors;\r
}\r
+ \r
+ /**\r
+ * Refreshes a certain page of the MultipageTaxonEditor\r
+ * \r
+ * @param page\r
+ * @return\r
+ */\r
+ public boolean redraw(Page page){\r
+ return redraw(page, true);\r
+ }\r
+ \r
+ /**\r
+ * Refreshes a certain page of the MultipageTaxonEditor and\r
+ * sets focus to that page\r
+ * \r
+ * @param page\r
+ * @param focus\r
+ * @return\r
+ */\r
+ public boolean redraw(Page page, boolean focus){\r
+ IMultiPageTaxonEditorPage editorPage = getPage(page);\r
+ return editorPage != null && editorPage.redraw(focus);\r
+ }\r
}
\ No newline at end of file
import org.apache.log4j.Logger;
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
public void reactOnDataChange(CdmDataChangeMap changeEvents) {
input = (TaxonEditorInput) source.getEditorInput();
+ // I don't know when this happens but ...
+ if(input.getTaxon() == null)
+ return;
+
if(changeEvents.sizeByEventType(EventType.UPDATE) > 0){
reactOnUpdate(changeEvents.getEvents(EventType.UPDATE));
}
public void reactOnUpdate(Vector<CdmDataChangeEvent> events){
for(CdmDataChangeEvent event : events){
+
// update editor title
- if((event.getEntity() instanceof TaxonNameBase)
- && input.getTaxon().getName().equals(event.getEntity())){
- // set the name of the editor window
- source.setPartName();
- logger.debug("Updating title of taxons editor.");
+ if(event.getEntity() instanceof TaxonNameBase){
+ if(input.getTaxon().getName().equals(event.getEntity())){
+ // set the name of the editor window
+ source.setPartName();
+ logger.debug("Updating title of taxons editor.");
+ }
}
-
// TODO other stuff to happen
+
}
}
@Override
public void reactOnInsert(Vector<CdmDataChangeEvent> events){
-
+ boolean doRedraw = false;
+ for(CdmDataChangeEvent event : events){
+ // refresh on synonym changes
+ if(input.getTaxon().hasSynonyms() && event.getEntity() instanceof Synonym){
+ Synonym synonym = (Synonym) event.getEntity();
+
+ if(synonym.isSynonymOf(input.getTaxon())){
+ doRedraw = true;
+ break;
+ }
+ }
+ }
+// if(doRedraw)
+// source.redraw(Page.NAME);
}
}
import eu.etaxonomy.cdm.model.taxon.ITreeNode;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.model.DataChangeBridge;
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
import eu.etaxonomy.taxeditor.store.CdmStore;
private ConversationHolder conversation;
private TaxonNode taxonNode;
+
+ private TaxonEditorInputDataChangeBehaviour dataChangeBehavior;
private TaxonEditorInput(TaxonNode taxonNode, ConversationHolder conversation){
this.taxonNode = taxonNode;
* @see org.eclipse.ui.IEditorInput#getName()
*/
public String getName() {
+ if(getTaxon() == null){
+ return null;
+ }
TaxonNameBase<?, ?> name = getTaxon().getName();
if (name == null || name.getTitleCache() == null) {
return "New taxon";
*/
public boolean equals(Object obj) {
if (obj.getClass().equals(TaxonEditorInput.class)
+ && getTaxon() != null
&& getTaxon().equals(((TaxonEditorInput) obj).getTaxon()))
return true;
return false;
* @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostCrudObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
*/
public void update(CdmDataChangeMap events) {
- // FIXME update the editor input
+ if(dataChangeBehavior == null){
+ dataChangeBehavior = new TaxonEditorInputDataChangeBehaviour(this);
+ }
+
+ DataChangeBridge.handleDataChange(events, dataChangeBehavior);
}
/* (non-Javadoc)
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.editor;
+
+import org.apache.log4j.Logger;
+
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.model.AbstractDataChangeBehaviour;
+
+/**
+ * @author n.hoffmann
+ * @created Jan 5, 2010
+ * @version 1.0
+ */
+public class TaxonEditorInputDataChangeBehaviour extends
+ AbstractDataChangeBehaviour {
+ private static final Logger logger = Logger
+ .getLogger(TaxonEditorInputDataChangeBehaviour.class);
+
+ private TaxonEditorInput source;
+
+ /**
+ * @param taxonEditorInput
+ */
+ public TaxonEditorInputDataChangeBehaviour(TaxonEditorInput taxonEditorInput) {
+ source = taxonEditorInput;
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.model.AbstractDataChangeBehaviour#reactOnDataChange(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
+ */
+ @Override
+ public void reactOnDataChange(CdmDataChangeMap events) {
+ // TODO Auto-generated method stub
+
+ }
+}
/*\r
* Returns the singleton\r
*/\r
- public static WidgetTransfer getInstance() {\r
+ public static synchronized WidgetTransfer getInstance() {\r
return INSTANCE;\r
}\r
/*\r
import org.eclipse.ui.forms.widgets.ScrolledForm;\r
\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage;\r
import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
\r
/**\r
* @author p.ciardelli\r
*\r
*/\r
-public class TaxonDescriptionTreeEditor extends FormPage implements IPostOperationEnabled {\r
+public class TaxonDescriptionTreeEditor extends FormPage implements IMultiPageTaxonEditorPage, IPostOperationEnabled {\r
\r
private static final String ID = "eu.etaxonomy.taxeditor.descriptiontreeeditor";\r
\r
private DescriptionMasterDetailsBlock block;\r
\r
+ private boolean isRedrawing;\r
+\r
/**\r
* @param editor\r
*/\r
block.refreshTree(objectAffectedByOperation);\r
return true;\r
}\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage#redraw()\r
+ */\r
+ public boolean redraw() {\r
+ return redraw(true);\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage#redraw(boolean)\r
+ */\r
+ public boolean redraw(boolean focus) {\r
+ isRedrawing = true;\r
+ block.refreshTree(null);\r
+ isRedrawing = false;\r
+ this.setFocus();\r
+ return true;\r
+ }\r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage#isRedrawing()\r
+ */\r
+ public boolean isRedrawing() {\r
+ return isRedrawing;\r
+ }\r
}\r
import eu.etaxonomy.taxeditor.editor.GroupComposite;\r
import eu.etaxonomy.taxeditor.editor.GroupedComposite;\r
import eu.etaxonomy.taxeditor.editor.IHasPropertySource;\r
+import eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage;\r
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
import eu.etaxonomy.taxeditor.editor.SimpleSelectionProvider;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
import eu.etaxonomy.taxeditor.editor.WidgetTransfer;\r
import eu.etaxonomy.taxeditor.model.Resources;\r
import eu.etaxonomy.taxeditor.operations.ChangeConceptToSynonymOperation;\r
* @created 15.05.2008\r
* @version 1.0\r
*/\r
-public class TaxonNameEditor extends EditorPart implements IAdaptable, IConversationEnabled, IPostOperationEnabled, ITabbedPropertySheetPageContributor \r
+public class TaxonNameEditor extends EditorPart implements IMultiPageTaxonEditorPage, IAdaptable, IConversationEnabled, IPostOperationEnabled, ITabbedPropertySheetPageContributor \r
,INameEditorCompositeRepository {\r
\r
private static final Logger logger = Logger.getLogger(TaxonNameEditor.class);\r
\r
public TaxonNameEditor(MultiPageTaxonEditor editor){\r
this.editor = editor;\r
- this.conversation = editor.getConversationHolder();\r
+ conversation = editor.getConversationHolder();\r
}\r
\r
/**\r
}\r
}\r
};\r
+\r
+ private DropTarget target;\r
\r
public IUndoContext getUndoContext() {\r
return editor.getUndoContext();\r
// user wants to create a new group\r
Transfer[] types = new Transfer[] {WidgetTransfer.getInstance()};\r
int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT;\r
- DropTarget target = new DropTarget(parent, operations);\r
- target.setTransfer(types);\r
- target.addDropListener(new DropTargetAdapter() {\r
- \r
- public void drop(DropTargetEvent event) {\r
- \r
- if (event.data instanceof GroupedComposite) {\r
- final GroupedComposite composite = (GroupedComposite) event.data;\r
- if (composite.getDragSource() != null) {\r
- \r
- // Execute operations at end of drag event\r
- composite.getDragSource().addListener(DND.DragEnd, new Listener() {\r
- \r
- public void handleEvent(Event event) {\r
- IUndoableOperation operation = null;\r
- \r
- // Synonym being dropped\r
- if(composite instanceof SynonymComposite){\r
- Synonym synonym = ((SynonymComposite)composite).getSynonym();\r
- operation = new ChangeHomotypicGroupOperation\r
- ("change type", getUndoContext(), \r
- getTaxon(), synonym, HomotypicalGroup.NewInstance(), TaxonNameEditor.this);\r
- }\r
- \r
- // Misapplied name being dropped\r
- if(composite instanceof MisappliedNameComposite){\r
- Taxon misapplication = ((MisappliedNameComposite)composite).getMisappliedName();\r
- operation = new ChangeConceptToSynonymOperation\r
- ("change misapplied name to synonym", getUndoContext(), \r
- getTaxon(), misapplication, HomotypicalGroup.NewInstance(), TaxonNameEditor.this); \r
- }\r
- \r
- // Execute operation if it's been init'ed\r
- if (operation == null) {\r
- logger.warn("User unsuccessfully tried to drop " + composite.getClass());\r
- } else {\r
- EditorUtil.executeOperation(operation);\r
- }\r
- }\r
- }); \r
- }\r
- }\r
- \r
-\r
- } \r
- }); \r
+ if(target == null){\r
+ target = new DropTarget(parent, operations);\r
+ target.setTransfer(types);\r
+ target.addDropListener(new NameEditorDropTargetListener());\r
+ } \r
}\r
\r
public Composite getAcceptedName() {\r
public boolean isDirty() {\r
return false;\r
}\r
+ \r
+ /* (non-Javadoc)\r
+ * @see org.eclipse.ui.part.WorkbenchPart#dispose()\r
+ */\r
+ @Override\r
+ public void dispose() {\r
+ super.dispose();\r
+ \r
+ }\r
\r
/* (non-Javadoc)\r
* @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()\r
public boolean isSaveAsAllowed() {\r
return false;\r
}\r
+ \r
+ private class NameEditorDropTargetListener extends DropTargetAdapter{\r
+ private GroupedComposite composite;\r
+\r
+ public void drop(DropTargetEvent event) {\r
+ Assert.isTrue(event.data instanceof GroupedComposite);\r
+ \r
+ composite = (GroupedComposite) event.data;\r
+ if (composite.getDragSource() != null) {\r
+ // Execute operations at end of drag event\r
+ composite.getDragSource().addListener(DND.DragEnd, new DragListener());\r
+ }\r
+ } \r
+ \r
+ private class DragListener implements Listener{\r
+ public void handleEvent(Event event) {\r
+ IUndoableOperation operation = null;\r
+ \r
+ // Synonym being dropped\r
+ if(composite instanceof SynonymComposite){\r
+ Synonym synonym = ((SynonymComposite)composite).getSynonym();\r
+ operation = new ChangeHomotypicGroupOperation\r
+ ("change type", getUndoContext(), \r
+ getTaxon(), synonym, HomotypicalGroup.NewInstance(), TaxonNameEditor.this);\r
+ }\r
+ \r
+ // Misapplied name being dropped\r
+ if(composite instanceof MisappliedNameComposite){\r
+ Taxon misapplication = ((MisappliedNameComposite)composite).getMisappliedName();\r
+ operation = new ChangeConceptToSynonymOperation\r
+ ("change misapplied name to synonym", getUndoContext(), \r
+ getTaxon(), misapplication, HomotypicalGroup.NewInstance(), TaxonNameEditor.this); \r
+ }\r
+ \r
+ // Execute operation if it's been initiated\r
+ if (operation == null) {\r
+ logger.warn("User unsuccessfully tried to drop " + composite.getClass());\r
+ } else {\r
+ EditorUtil.executeOperation(operation);\r
+ }\r
+ }\r
+ }\r
+ }\r
}
\ No newline at end of file
package eu.etaxonomy.taxeditor.editor.name.handler;\r
\r
import java.util.ArrayList;\r
-import java.util.HashSet;\r
import java.util.List;\r
-import java.util.Set;\r
import java.util.UUID;\r
\r
import org.apache.log4j.Logger;\r
import org.eclipse.core.commands.ExecutionEvent;\r
import org.eclipse.core.commands.ExecutionException;\r
import org.eclipse.core.commands.IHandler;\r
-import org.eclipse.jface.dialogs.MessageDialog;\r
-import org.eclipse.jface.viewers.ISelection;\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
+import org.eclipse.core.commands.common.NotDefinedException;\r
import org.eclipse.ui.IEditorPart;\r
-import org.eclipse.ui.IWorkbenchPage;\r
import org.eclipse.ui.PartInitException;\r
import org.eclipse.ui.handlers.HandlerUtil;\r
\r
-import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
-import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\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.cdm.model.common.CdmBase;\r
import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
import eu.etaxonomy.taxeditor.dialogs.filteredSelection.FilteredTaxonNodeSelectionDialog;\r
import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
-import eu.etaxonomy.taxeditor.propertysheet.name.TaxonBasePropertySource;\r
-import eu.etaxonomy.taxeditor.store.CdmStore;\r
+import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;\r
+import eu.etaxonomy.taxeditor.editor.Page;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;\r
+import eu.etaxonomy.taxeditor.operations.ChangeAcceptedTaxonToSynonymOperation;\r
+import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
\r
/**\r
- * @author p.ciardelli\r
- *\r
+ * \r
+ * @author n.hoffmann\r
+ * @created Jan 4, 2010\r
+ * @version 1.0\r
*/\r
public class ChangeAcceptedTaxonToSynonymHandler extends AbstractHandler\r
- implements IHandler {\r
+ implements IHandler, IPostOperationEnabled {\r
private static final Logger logger = Logger\r
.getLogger(ChangeAcceptedTaxonToSynonymHandler.class);\r
+ private ChangeAcceptedTaxonToSynonymOperation operation;\r
\r
+ private UUID newAcceptedTaxonNodeUuid;\r
+ \r
/* (non-Javadoc)\r
* @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)\r
*/\r
public Object execute(ExecutionEvent event) throws ExecutionException {\r
- ConversationHolder conversation = CdmStore.NewTransactionalConversation();\r
\r
- try{\r
- ISelection menuSelection = HandlerUtil.getActiveMenuSelection(event);\r
- TaxonBasePropertySource taxonBasePropertySource = \r
- (TaxonBasePropertySource) ((StructuredSelection) menuSelection).getFirstElement();\r
- Taxon oldAcceptedTaxon = (Taxon) taxonBasePropertySource.getTaxonBase();\r
- \r
- // Retrieve active editor and active page for later use\r
- IEditorPart editor = HandlerUtil.getActiveEditor(event);\r
- IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindowChecked(event).getActivePage();\r
- \r
- // Choose new accepted taxon \r
- List<UUID> excludeTaxa = new ArrayList<UUID>();\r
- excludeTaxa.add(oldAcceptedTaxon.getUuid());\r
- Taxon newAcceptedTaxon = FilteredTaxonNodeSelectionDialog.selectTaxonNode(HandlerUtil.getActiveShell(event), "Choose the accepted taxon", excludeTaxa, null).getTaxon();\r
- \r
- \r
- if (newAcceptedTaxon == null) {\r
- return null;\r
- }\r
- \r
- try {\r
- \r
- Taxon newTaxon = (Taxon) CdmStore.getTaxonService().load(newAcceptedTaxon.getUuid());\r
- Taxon oldTaxon = (Taxon) CdmStore.getTaxonService().load(oldAcceptedTaxon.getUuid());\r
- \r
- // Check for multiple nodes\r
- if (newTaxon.getTaxonNodes().size() > 1 || oldTaxon.getTaxonNodes().size() > 1) {\r
- MessageDialog.openInformation(HandlerUtil.getActiveShell(event), \r
- "Taxon implemented in multiple trees", \r
- "One or both of these taxa is implemented in multiple taxonomic trees.");\r
- return null;\r
- }\r
- \r
- // Close editor \r
- boolean proceed = activePage.closeEditor(editor, true);\r
-\r
- if (!proceed) {\r
- return null;\r
- }\r
- \r
- makeTaxonSynonym(oldTaxon, newTaxon, null, null, null);\r
- \r
- conversation.commit();\r
- Set<TaxonNode> nodes = newTaxon.getTaxonNodes();\r
- UUID uuid = nodes.iterator().next().getUuid();\r
- \r
- EditorUtil.open(uuid);\r
- \r
- } catch (PartInitException e) {\r
- logger.error(e);\r
- throw new RuntimeException(e);\r
- }\r
- \r
+ TaxonNameEditor editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(\r
+ Page.NAME);\r
+ TaxonNode oldAcceptedTaxonNode = ((TaxonEditorInput) editor.getEditorInput()).getTaxonNode();\r
+ \r
+ // Choose new accepted taxon \r
+ List<UUID> excludeTaxa = new ArrayList<UUID>();\r
+ excludeTaxa.add(oldAcceptedTaxonNode.getUuid());\r
+ TaxonNode newAcceptedTaxonNode = FilteredTaxonNodeSelectionDialog.selectTaxonNode(HandlerUtil.getActiveShell(event), "Choose the accepted taxon", excludeTaxa, null);\r
+ \r
+ newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();\r
+ \r
+ if (newAcceptedTaxonNode == null) {\r
return null;\r
- }finally{\r
- conversation.close();\r
- }\r
- }\r
-\r
- /**\r
- * @param oldTaxon\r
- * @param newTaxon\r
- */\r
- private void makeTaxonSynonym(Taxon oldTaxon, Taxon newAcceptedTaxon, SynonymRelationshipType synonymType, ReferenceBase citation, String citationMicroReference) {\r
- if (oldTaxon == null || newAcceptedTaxon == null || oldTaxon.getName() == null){\r
- return;\r
}\r
\r
- // Move oldTaxon to newTaxon\r
- TaxonNameBase<?,?> synonymName = oldTaxon.getName();\r
- if (synonymType == null){\r
- if (synonymName.isHomotypic(newAcceptedTaxon.getName())){\r
- synonymType = SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF();\r
- }else{\r
- //TODO synonymType \r
- synonymType = SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF();\r
- }\r
+ try {\r
+ operation = new ChangeAcceptedTaxonToSynonymOperation(event.getCommand().getName(), \r
+ editor.getUndoContext(), oldAcceptedTaxonNode, newAcceptedTaxonNode, this, editor);\r
+ EditorUtil.executeOperation(operation);\r
+ EditorUtil.close(editor.getMultiPageTaxonEditor());\r
+ } catch (NotDefinedException e) {\r
+ logger.warn("Command name not set");\r
}\r
- SynonymRelationship synRel = newAcceptedTaxon.addSynonymName(synonymName, synonymType, citation, citationMicroReference);\r
\r
- //Move Synonym Relations to new Taxon\r
- for(SynonymRelationship synRelation : oldTaxon.getSynonymRelations()){\r
- synRelation.setAcceptedTaxon(newAcceptedTaxon);\r
- }\r
-\r
- //Move Taxon RelationShips to new Taxon\r
- Set<TaxonRelationship> removableTaxonRels = new HashSet<TaxonRelationship>();\r
- for(TaxonRelationship taxonRelation : oldTaxon.getTaxonRelations()){\r
- //CHILDREN\r
- if (taxonRelation.getType().equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())){\r
- if (taxonRelation.getFromTaxon() == oldTaxon){\r
- taxonRelation.setFromTaxon(newAcceptedTaxon);\r
- }else if(taxonRelation.getToTaxon() == oldTaxon){\r
- taxonRelation.setToTaxon(newAcceptedTaxon);\r
- }else{\r
- logger.warn("Taxon is not part of its own Taxonrelationship");\r
- }\r
+ try {\r
+ MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);\r
+ if(possibleOpenEditor != null){\r
+ EditorUtil.close(possibleOpenEditor);\r
}\r
- //MISAPPLIED NAMES\r
- if (taxonRelation.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())){\r
- if (taxonRelation.getFromTaxon() == oldTaxon){\r
- taxonRelation.setFromTaxon(newAcceptedTaxon);\r
- }else if(taxonRelation.getToTaxon() == oldTaxon){\r
- taxonRelation.setToTaxon(newAcceptedTaxon);\r
- }else{\r
- logger.warn("Taxon is not part of its own Taxonrelationship");\r
- }\r
- }\r
- //Concept Relationships\r
- //FIXME implement\r
- logger.warn("Transfer of concept relationships not implemented yet");\r
+ EditorUtil.open(newAcceptedTaxonNodeUuid);\r
+ } catch (PartInitException e) {\r
+ logger.error(e);\r
+ throw new RuntimeException(e);\r
}\r
\r
- \r
- //Move Descriptions to new Taxon\r
- Set<TaxonDescription> descriptions = new HashSet<TaxonDescription>();\r
- for(TaxonDescription taxDescription : oldTaxon.getDescriptions()){\r
- descriptions.add(taxDescription);\r
- } \r
- for(TaxonDescription taxDescription : descriptions){\r
- newAcceptedTaxon.addDescription(taxDescription);\r
- }\r
-\r
-\r
- oldTaxon.getTaxonNodes().iterator().next().delete();\r
+ return null;\r
\r
}\r
- \r
+\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)\r
+ */\r
+ public boolean postOperation(CdmBase objectAffectedByOperation) {\r
+ return true;\r
+ } \r
}
\ No newline at end of file
@Override
public boolean performFinish() {
- String urlString = page.getFolderText() + File.pathSeparator + page.getExportFileName();
+ String urlString = page.getFolderText() + File.separator + page.getExportFileName();
configurator.setDestination(urlString);
}
protected IStatus postExecute(CdmBase objectAffectedByOperation) {
- IStatus status = super.postExecute(objectAffectedByOperation);
-
+
if(conversationEnabled != null){
conversationEnabled.getConversationHolder().commit(true);
}
+ IStatus status = super.postExecute(objectAffectedByOperation);
+
return status;
}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.operations;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author n.hoffmann
+ * @created Jan 4, 2010
+ * @version 1.0
+ */
+public class ChangeAcceptedTaxonToSynonymOperation extends
+ AbstractPersistentPostOperation {
+
+ private static final Logger logger = Logger
+ .getLogger(ChangeAcceptedTaxonToSynonymOperation.class);
+
+ private TaxonNode newAcceptedTaxonNode;
+
+ private TaxonNode oldTaxonNode;
+
+ /**
+ * @param label
+ * @param undoContext
+ * @param taxon
+ * @param postOperationEnabled
+ */
+ public ChangeAcceptedTaxonToSynonymOperation(String label,
+ IUndoContext undoContext, TaxonNode oldTaxonNode, TaxonNode newAcceptedTaxonNode,
+ IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {
+ super(label, undoContext, oldTaxonNode.getTaxon(), postOperationEnabled, conversationEnabled);
+ this.oldTaxonNode = oldTaxonNode;
+ this.newAcceptedTaxonNode = newAcceptedTaxonNode;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ public IStatus execute(IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ Synonym synonym = CdmStore.getTaxonService().changeAcceptedTaxonToSynonym(oldTaxonNode, newAcceptedTaxonNode, null, null, null);
+ return postExecute(synonym);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ public IStatus redo(IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ public IStatus undo(IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
throws ExecutionException {\r
\r
- newTaxon = CdmStore.getTaxonService().makeSynonymAcceptedTaxon(synonym, taxon);\r
+ newTaxon = CdmStore.getTaxonService().changeSynonymToAcceptedTaxon(synonym, taxon);\r
\r
// synonym.setSec(null);\r
\r