(no commit message)
authorKatja Luther <k.luther@bgbm.org>
Wed, 23 Oct 2013 08:32:07 +0000 (08:32 +0000)
committerKatja Luther <k.luther@bgbm.org>
Wed, 23 Oct 2013 08:32:07 +0000 (08:32 +0000)
.gitattributes
eu.etaxonomy.taxeditor.editor/plugin.xml
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/DeleteTaxonBaseHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteSynonymOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonBaseOperation.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonOperation.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigatorDataChangeBehavior.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/DeleteOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/AbstractPersistentPostOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/AbstractPostOperation.java

index 6aa7c7b2961ce29532d5808fa93bee5ec5746e48..d7e6941d9eba1c8e7a6ca7d697e136847945de66 100644 (file)
@@ -431,6 +431,8 @@ eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/o
 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/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
 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
index 815b412d8ec559311ebc9ba444c8a3226931c1f2..bf89a6a62fec9d62be29fb984aa890efde1cde32 100644 (file)
                   <reference
                         definitionId="isSynonym">
                   </reference>
                   <reference
                         definitionId="isSynonym">
                   </reference>
+                 <!-- <reference
+                    definitionId="isAcceptedTaxon">
+               </reference>-->
                   <reference
                         definitionId="isMisapplication">
                   </reference>
                   <reference
                         definitionId="isMisapplication">
                   </reference>
                <reference
                      definitionId="isTaxonBase">
                </reference>
                <reference
                      definitionId="isTaxonBase">
                </reference>
-               <not>
+               <!--<not>
                   <reference
                         definitionId="isAcceptedTaxon">
                   </reference>
                   <reference
                         definitionId="isAcceptedTaxon">
                   </reference>
-               </not>
+               </not>-->
             </and>
          </activeWhen>
       </handler>
             </and>
          </activeWhen>
       </handler>
index 1d3678ee3f4d8d0df1bcff6e7ef771a6213127c0..dab4585d43f4f19c407570c42704c356e8d963f6 100644 (file)
@@ -13,15 +13,24 @@ import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.IHandler;
 import org.eclipse.core.commands.common.NotDefinedException;
 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.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.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.AbstractPostOperation;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 
 /**
  * <p>DeleteTaxonBaseHandler class.</p>
 
 /**
  * <p>DeleteTaxonBaseHandler class.</p>
@@ -30,14 +39,15 @@ import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
  * @created 21.04.2009
  * @version 1.0
  */
  * @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 {
        /* (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();
                
                                
                Object selectedElement = EditorUtil.getSelection(event).getFirstElement();
                
@@ -71,11 +81,47 @@ public class DeleteTaxonBaseHandler extends AbstractHandler implements IHandler
                        operation = new DeleteMisapplicationOperation(commandName, editor.getUndoContext(), editor
                                        .getTaxon(), (Taxon) selectedElement, editor);
                }
                        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);
                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;
+       }
+       
+       
 }
 }
index fc5dc5217977c1030863f3e459fc73e2aafdc4fe..a5ff8285c0c24a61ef782632a8a6ce62b26ef92e 100644 (file)
@@ -17,11 +17,14 @@ import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 
 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.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>
 
 /**
  * <p>DeleteSynonymOperation class.</p>
@@ -59,19 +62,27 @@ public class DeleteSynonymOperation extends AbstractPostOperation {
                        throws ExecutionException {
                
                // Store synonymRelationshipType for later undo operations
                        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)
        }
 
        /* (non-Javadoc)
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonBaseOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonBaseOperation.java
new file mode 100644 (file)
index 0000000..4f84720
--- /dev/null
@@ -0,0 +1,76 @@
+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
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonOperation.java
new file mode 100644 (file)
index 0000000..b1a3659
--- /dev/null
@@ -0,0 +1,113 @@
+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
index 9816d777b3cc18df0912e5718a9b2c1d8bbf955a..2fd950b202b94c26bac8d104c558b04db93a7295 100644 (file)
@@ -1,8 +1,8 @@
 /**
 * Copyright (C) 2007 EDIT
 /**
 * Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
+* European Distributed Institute of Taxonomy 
 * http://www.e-taxonomy.eu
 * 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.
 */
 * 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.
 */
@@ -38,13 +38,13 @@ import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
  * @created 01.04.2009
  * @version 1.0
  */
  * @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;
                IDataChangeBehavior {
 
        private TaxonNavigator source;
 
        private Set<CdmBase> staleObjects;
-
+       
        /**
         * <p>Constructor for TaxonNavigatorDataChangeBehavior.</p>
         *
        /**
         * <p>Constructor for TaxonNavigatorDataChangeBehavior.</p>
         *
@@ -53,7 +53,7 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou
        public TaxonNavigatorDataChangeBehavior(TaxonNavigator taxonNavigator) {
                source = taxonNavigator;
        }
        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)
         */
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.store.model.IDataChangeBehavior#isRelevant(java.lang.Object, eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)
         */
@@ -64,24 +64,24 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou
         * @return a boolean.
         */
        public boolean isRelevant(CdmDataChangeMap events) {
         * @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>();
                // 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();
                for(CdmDataChangeEvent event : events.getAllEvents()){
                        EventType eventType = event.getEventType();
                        CdmBase eventEntity = event.getEntity();
-
+                       
                        // all tree node changes are relevant
                        // 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;
                        }
                                        && event.getEntity() instanceof ITaxonTreeNode){
                                return true;
                        }
-
+                       
                        // name updates of the accepted taxon of open editors are relevant
                        // 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;
                                TaxonNameBase name = null;
                                if(eventEntity instanceof TaxonNameBase){
                                        name = (TaxonNameBase) eventEntity;
@@ -90,17 +90,36 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou
                                }else{
                                        continue;
                                }
                                }else{
                                        continue;
                                }
-
+                               
                                Set<IEditorPart> openEditors = NavigationUtil.getOpenEditors();
                                Set<IEditorPart> openEditors = NavigationUtil.getOpenEditors();
-                               for(IEditorPart editor : openEditors){
-
+                               /*for(IEditorPart editor : openEditors){
+                                       
                                        if(name.equals(((TaxonEditorInput) editor.getEditorInput()).getTaxon().getName())){
                                                return true;
                                        }
                                        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();
 //                     if(eventType == EventType.UPDATE){
 //                             relevant = true;
 //                             CdmBase entity = event.getEntity();
@@ -111,9 +130,9 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou
 //                             }
 //                     }
                }
 //                             }
 //                     }
                }
-
+               
                return false;
                return false;
-
+               
                // @deprecated
                // react on everything except load
 //             if(events.sizeByEventType(EventType.INSERT) > 0){
                // @deprecated
                // react on everything except load
 //             if(events.sizeByEventType(EventType.INSERT) > 0){
@@ -132,26 +151,27 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou
         */
        /** {@inheritDoc} */
        @Override
         */
        /** {@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") {
                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);
                                @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");
                                        // clear the session completely
                                        monitor.subTask("Clearing Taxon Navigators session");
+                                       System.out.println("Clearing Taxon Navigators session");
                                        display.asyncExec(new Runnable() {
                                                 @Override
                                        display.asyncExec(new Runnable() {
                                                 @Override
-                        public void run() {
+                                                public void run() {
                                                         source.getConversationHolder().clear();
                                                 }
                                                         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
                                        // 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
@@ -159,27 +179,27 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou
                                        // 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);
                                        // 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");
                                        monitor.subTask("Refreshing viewer");
-
+                                       
                                        display.asyncExec(new Runnable() {
                                            @Override
                                        display.asyncExec(new Runnable() {
                                            @Override
-                        public void run() {
+                                           public void run() {
                                                source.refresh();
                                            }
                                        });
                                                source.refresh();
                                            }
                                        });
-
-
-
+                                       
+                                       
+                                       
                                        monitor.worked(1);
                                        monitor.done();
                                        return Status.OK_STATUS;
                                }
                        };
                                        monitor.worked(1);
                                        monitor.done();
                                        return Status.OK_STATUS;
                                }
                        };
-
+                       
                        job.setPriority(Job.SHORT);
                        job.schedule();
                        job.setPriority(Job.SHORT);
                        job.schedule();
-
+                       
                }
        }
 }
                }
        }
 }
index eab39d5f0d4ed09b2e123eb755a6bc313c7d8f69..928049febb1153c1e773a65bf2efb73f2b2b54a4 100644 (file)
@@ -18,8 +18,12 @@ import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 
 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.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;
 import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
@@ -70,7 +74,22 @@ public class DeleteOperation extends AbstractPersistentPostOperation{
                monitor.worked(20);
         for (ITaxonTreeNode treeNode : treeNodes){
                        if(treeNode instanceof 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()){
                        }else if(treeNode instanceof Classification){
                                Classification taxonomicTree = (Classification) treeNode;
                                if(taxonomicTree.hasChildNodes()){
index 0b2f6f0f21a8cd5e65083a6e8fa4736432b93948..ab05864c6e053315ce7a8e72acbfe25f25cd72e8 100644 (file)
@@ -93,8 +93,10 @@ public abstract class AbstractPersistentPostOperation extends AbstractPostOperat
     protected IStatus postExecute(CdmBase objectAffectedByOperation) {
                Assert.isNotNull(conversationEnabled, "Operation has to have a valid conversation attached.");
 
     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;
                IStatus status = super.postExecute(objectAffectedByOperation);
 
                return status;
index 2a5e8b381ffad43cb0b8ea76c8acc988d903e3db..5f3ffed2222326f01bd1af57193caa3339c8b78f 100644 (file)
@@ -33,7 +33,7 @@ public abstract class AbstractPostOperation extends AbstractOperation {
        /**
         * 
         */
        /**
         * 
         */
-       private IPostOperationEnabled postOperationEnabled;
+       protected IPostOperationEnabled postOperationEnabled;
        
        /** 
         * A reference to the taxon the concrete operation is working on 
        
        /** 
         * A reference to the taxon the concrete operation is working on 
@@ -150,4 +150,6 @@ public abstract class AbstractPostOperation extends AbstractOperation {
        public IPostOperationEnabled getPostOperationEnabled() {
                return postOperationEnabled;
        }
        public IPostOperationEnabled getPostOperationEnabled() {
                return postOperationEnabled;
        }
+       
+       
 }
 }