eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteMisapplicationOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteNameRelationOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteSynonymOperation.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonBaseOperation.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/RemoveHomotypicalGroupBasionymOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptContentProvider.java -text
<reference
definitionId="isSynonym">
</reference>
+ <!-- <reference
+ definitionId="isAcceptedTaxon">
+ </reference>-->
<reference
definitionId="isMisapplication">
</reference>
<reference
definitionId="isTaxonBase">
</reference>
- <not>
+ <!--<not>
<reference
definitionId="isAcceptedTaxon">
</reference>
- </not>
+ </not>-->
</and>
</activeWhen>
</handler>
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.handlers.HandlerUtil;
+import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.taxon.Synonym;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
import eu.etaxonomy.taxeditor.editor.Page;
import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
import eu.etaxonomy.taxeditor.editor.name.operation.DeleteMisapplicationOperation;
import eu.etaxonomy.taxeditor.editor.name.operation.DeleteSynonymOperation;
+import eu.etaxonomy.taxeditor.editor.name.operation.DeleteTaxonOperation;
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
/**
* <p>DeleteTaxonBaseHandler class.</p>
* @created 21.04.2009
* @version 1.0
*/
-public class DeleteTaxonBaseHandler extends AbstractHandler implements IHandler {
+public class DeleteTaxonBaseHandler extends AbstractHandler implements IHandler, IPostOperationEnabled {
+ TaxonNameEditor editor;
/* (non-Javadoc)
* @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
*/
/** {@inheritDoc} */
public Object execute(ExecutionEvent event) throws ExecutionException {
- TaxonNameEditor editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
+ editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
Object selectedElement = EditorUtil.getSelection(event).getFirstElement();
operation = new DeleteMisapplicationOperation(commandName, editor.getUndoContext(), editor
.getTaxon(), (Taxon) selectedElement, editor);
}
+ else if (selectedElement instanceof Taxon){
+ //TODO: how to get the actual classification
+ if(! MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), "Confirm Deletion", "Are you sure you want to delete the selected taxon?")){
+ return ;
+ }
+ IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
+ operation = new DeleteTaxonOperation(commandName, editor.getUndoContext(),(Taxon) selectedElement, null, activePage, this, editor);
+ //editor.dispose();
+
+ }
else {
throw new IllegalArgumentException("Element has to be Synonym, Misapplication or Concept");
}
EditorUtil.executeOperation(operation);
+
+
+
+
}
+ @Override
+ public boolean postOperation(CdmBase objectAffectedByOperation) {
+ Display.getDefault().asyncExec(new Runnable(){
+
+ public void run() {
+ EditorUtil.close(editor.getMultiPageTaxonEditor());
+
+ }
+
+ });
+
+
+ return true;
+ }
+
+ @Override
+ public boolean onComplete() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+
}
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import eu.etaxonomy.cdm.api.application.CdmApplicationController;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
import eu.etaxonomy.cdm.model.taxon.Synonym;
import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
/**
* <p>DeleteSynonymOperation class.</p>
throws ExecutionException {
// Store synonymRelationshipType for later undo operations
- synonymTypes = synonym.getRelationType(taxon);
- monitor.worked(20);
-
- // Remove synonym from taxon
-
- taxon.removeSynonym(synonym);
-// CdmStore.getTaxonService().deleteSynonymRelationships(synonym);
-// CdmStore.getTaxonService().delete(synonym);
-
- monitor.worked(40);
+ synonymTypes = synonym.getRelationType(taxon);
+ monitor.worked(20);
+
+ // Remove synonym from taxon
+
+ CdmApplicationController controller;
+
+ controller = (CdmApplicationController) CdmStore.getCurrentApplicationConfiguration();
+
+ ITaxonService service = controller.getTaxonService();
+ service.deleteSynonym(synonym, null);
+
+ // taxon.removeSynonym(synonym);
+// CdmStore.getTaxonService().deleteSynonymRelationships(synonym);
+// CdmStore.getTaxonService().delete(synonym);
+
+ monitor.worked(40);
- // Redraw editor if exists
- return postExecute(null);
+ // Redraw editor if exists
+
+ return postExecute(null);
}
/* (non-Javadoc)
--- /dev/null
+package eu.etaxonomy.taxeditor.editor.name.operation;\r
+\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorReference;\r
+import org.eclipse.ui.IPerspectiveDescriptor;\r
+import org.eclipse.ui.IViewPart;\r
+import org.eclipse.ui.IWorkbenchPage;\r
+import org.eclipse.ui.PartInitException;\r
+\r
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+import eu.etaxonomy.taxeditor.editor.EditorUtil;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation;\r
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
+\r
+public class DeleteTaxonBaseOperation extends AbstractPersistentPostOperation {\r
+ \r
+ private IWorkbenchPage activePage;\r
+ \r
+ public DeleteTaxonBaseOperation(String label, IUndoContext undoContext,\r
+ Taxon taxon, IWorkbenchPage activePage, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {\r
+ super(label, undoContext, postOperationEnabled,\r
+ conversationEnabled);\r
+ this.activePage = activePage;\r
+ \r
+ }\r
+\r
+ @Override\r
+ public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+ \r
+ protected void closeObsoleteEditor(Taxon taxon){\r
+ for (IEditorReference ref : activePage.getEditorReferences()) {\r
+ \r
+ IViewPart view = activePage.findView("eu.etaxonomy.taxeditor.navigation.navigator");\r
+ \r
+ try {\r
+ IEditorInput input = ref.getEditorInput(); \r
+ if (input instanceof TaxonEditorInput) {\r
+ TaxonNode node = ((TaxonEditorInput) input).getTaxonNode();\r
+ if (taxonNode.equals(node)) {\r
+ activePage.closeEditor(ref.getEditor(false), false);\r
+ }\r
+ }\r
+ } catch (PartInitException e) {\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+\r
--- /dev/null
+package eu.etaxonomy.taxeditor.editor.name.operation;\r
+\r
+import java.util.Iterator;\r
+import java.util.Set;\r
+\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.core.commands.operations.IUndoContext;\r
+import org.eclipse.core.runtime.IAdaptable;\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.ui.IEditorInput;\r
+import org.eclipse.ui.IEditorReference;\r
+import org.eclipse.ui.IPerspectiveDescriptor;\r
+import org.eclipse.ui.IViewPart;\r
+import org.eclipse.ui.IViewReference;\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.application.CdmApplicationController;\r
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
+import eu.etaxonomy.cdm.api.service.ITaxonService;\r
+import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;\r
+import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException;\r
+import eu.etaxonomy.cdm.model.taxon.Classification;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;\r
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;\r
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
+import eu.etaxonomy.taxeditor.store.CdmStore;\r
+\r
+public class DeleteTaxonOperation extends DeleteTaxonBaseOperation{\r
+ //private Taxon taxon;\r
+ private Classification classification;\r
+ \r
+ \r
+ \r
+ \r
+ public DeleteTaxonOperation(String label, IUndoContext undoContext,\r
+ Taxon taxon, Classification classification, IWorkbenchPage activePage, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {\r
+ super(label, undoContext, taxon, activePage, postOperationEnabled, conversationEnabled);\r
+ this.taxon = taxon;\r
+ \r
+ Set<TaxonNode> nodes = taxon.getTaxonNodes();\r
+ if (nodes.size() == 1 && classification == null){\r
+ this.taxonNode = nodes.iterator().next();\r
+ } else if (classification != null){\r
+ Iterator<TaxonNode> iterator = nodes.iterator();\r
+ while (iterator.hasNext()){\r
+ TaxonNode node = iterator.next();\r
+ if (node.getClassification().equals(classification)){\r
+ this.taxonNode = node;\r
+ }\r
+ }\r
+ } else{\r
+ //TODO\r
+ }\r
+ this.classification = classification;\r
+ \r
+ }\r
+\r
+ \r
+\r
+ @Override\r
+ public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ \r
+ monitor.worked(20);\r
+ bind();\r
+ \r
+ \r
+ CdmApplicationController controller;\r
+ \r
+ controller = (CdmApplicationController) CdmStore.getCurrentApplicationConfiguration();\r
+ \r
+ ITaxonService service = controller.getTaxonService();\r
+ try {\r
+ \r
+ service.deleteTaxon(taxon, new TaxonDeletionConfigurator(), classification);\r
+ \r
+ } catch (DataChangeNoRollbackException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ \r
+ }\r
+ \r
+ //closeObsoleteEditor(taxon);\r
+ monitor.worked(40);\r
+ \r
+ \r
+ return postExecute(null);\r
+ }\r
+\r
+ @Override\r
+ public IStatus redo(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public IStatus undo(IProgressMonitor monitor, IAdaptable info)\r
+ throws ExecutionException {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+ \r
+ \r
+}\r
/**
* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
+* 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.
*/
* @created 01.04.2009
* @version 1.0
*/
-public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviour implements
+public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviour implements
IDataChangeBehavior {
private TaxonNavigator source;
private Set<CdmBase> staleObjects;
-
+
/**
* <p>Constructor for TaxonNavigatorDataChangeBehavior.</p>
*
public TaxonNavigatorDataChangeBehavior(TaxonNavigator taxonNavigator) {
source = taxonNavigator;
}
-
+
/* (non-Javadoc)
* @see eu.etaxonomy.taxeditor.store.model.IDataChangeBehavior#isRelevant(java.lang.Object, eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
*/
* @return a boolean.
*/
public boolean isRelevant(CdmDataChangeMap events) {
-
+
// TODO react only on insert/update/delete of taxon and synonym objects
// and on update of name objects
boolean relevant = false;
staleObjects = new HashSet<CdmBase>();
-
+
for(CdmDataChangeEvent event : events.getAllEvents()){
EventType eventType = event.getEventType();
CdmBase eventEntity = event.getEntity();
-
+
// all tree node changes are relevant
- if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE)
+ if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE)
&& event.getEntity() instanceof ITaxonTreeNode){
return true;
}
-
+
// name updates of the accepted taxon of open editors are relevant
- if(eventType == EventType.UPDATE){
+ if(eventType == EventType.UPDATE && event.getEntity() instanceof TaxonNameBase){
TaxonNameBase name = null;
if(eventEntity instanceof TaxonNameBase){
name = (TaxonNameBase) eventEntity;
}else{
continue;
}
-
+
Set<IEditorPart> openEditors = NavigationUtil.getOpenEditors();
- for(IEditorPart editor : openEditors){
-
+ /*for(IEditorPart editor : openEditors){
+
if(name.equals(((TaxonEditorInput) editor.getEditorInput()).getTaxon().getName())){
return true;
}
+ }*/
+ }
+ if (eventType == EventType.DELETE){
+ return true;
+ }
+
+ if(eventType == EventType.UPDATE && event.getEntity() instanceof Taxon){
+ TaxonNameBase name = null;
+ if(eventEntity instanceof Taxon){
+ name = ((Taxon) eventEntity).getName();
+ }else{
+ continue;
}
+
+ Set<IEditorPart> openEditors = NavigationUtil.getOpenEditors();
+ /*for(IEditorPart editor : openEditors){
+
+ if(name.equals(((TaxonEditorInput) editor.getEditorInput()).getTaxon().getName())){
+ return true;
+ }
+ }*/
}
-
-
+
// if(eventType == EventType.UPDATE){
// relevant = true;
// CdmBase entity = event.getEntity();
// }
// }
}
-
+
return false;
-
+
// @deprecated
// react on everything except load
// if(events.sizeByEventType(EventType.INSERT) > 0){
*/
/** {@inheritDoc} */
@Override
- public void reactOnDataChange(CdmDataChangeMap events) {
+ public void reactOnDataChange(CdmDataChangeMap events) {
if(isRelevant(events)){
final Display display = Display.getCurrent();
Job job = new Job("Updating Taxon Navigator") {
-
+
@Override
protected IStatus run(IProgressMonitor monitor) {
monitor.beginTask("Updating Taxon Navigator", 3);
monitor.worked(1);
-
+
// clear the session completely
monitor.subTask("Clearing Taxon Navigators session");
+ System.out.println("Clearing Taxon Navigators session");
display.asyncExec(new Runnable() {
@Override
- public void run() {
+ public void run() {
source.getConversationHolder().clear();
}
- });
- // FIXME completely clearing the session is a brute force approach.
+ });
+ // FIXME completely clearing the session is a brute force approach.
// It would be much more elegant to clear only those elements that have been changed.
// I could not get that to work but we should consider workin on this because we might
// run into serious performance issues, especially when it comes to large trees
// at least, we moved this to a job so it can run in a background thred
// seems to improve the situation but not sure if final solution
monitor.worked(1);
-
+
monitor.subTask("Refreshing viewer");
-
+
display.asyncExec(new Runnable() {
@Override
- public void run() {
+ public void run() {
source.refresh();
}
});
-
-
-
+
+
+
monitor.worked(1);
monitor.done();
return Status.OK_STATUS;
}
};
-
+
job.setPriority(Job.SHORT);
job.schedule();
-
+
}
}
}
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import eu.etaxonomy.cdm.api.application.CdmApplicationController;
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
import eu.etaxonomy.cdm.api.service.IClassificationService;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;
+import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException;
import eu.etaxonomy.cdm.model.taxon.Classification;
import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
monitor.worked(20);
for (ITaxonTreeNode treeNode : treeNodes){
if(treeNode instanceof TaxonNode){
- ((TaxonNode) treeNode).delete();
+ //((TaxonNode) treeNode).delete();
+ CdmApplicationController controller;
+ taxon = ((TaxonNode) treeNode).getTaxon();
+ controller = (CdmApplicationController) CdmStore.getCurrentApplicationConfiguration();
+
+ ITaxonService service = controller.getTaxonService();
+ try {
+
+ service.deleteTaxon(taxon, new TaxonDeletionConfigurator(), ((TaxonNode) treeNode).getClassification());
+
+ } catch (DataChangeNoRollbackException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+
+ }
+
}else if(treeNode instanceof Classification){
Classification taxonomicTree = (Classification) treeNode;
if(taxonomicTree.hasChildNodes()){
protected IStatus postExecute(CdmBase objectAffectedByOperation) {
Assert.isNotNull(conversationEnabled, "Operation has to have a valid conversation attached.");
- conversationEnabled.getConversationHolder().commit(true);
-
+
+ if (!conversationEnabled.getConversationHolder().isClosed()){
+ conversationEnabled.getConversationHolder().commit(true);
+ }
IStatus status = super.postExecute(objectAffectedByOperation);
return status;
/**
*
*/
- private IPostOperationEnabled postOperationEnabled;
+ protected IPostOperationEnabled postOperationEnabled;
/**
* A reference to the taxon the concrete operation is working on
public IPostOperationEnabled getPostOperationEnabled() {
return postOperationEnabled;
}
+
+
}