ref #8263 Fix refresh of source vocabulary after moving terms
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 8 May 2019 13:06:11 +0000 (15:06 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 8 May 2019 13:06:11 +0000 (15:06 +0200)
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermDropAdapterE4.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermEditorE4.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/operation/MoveDefinedTermOperation.java

index 6e7d9167e87ffecaa6789ff9783acdd3c2696fcf..5cfe2df8de1e9da782b36e862cf53ee5eb643ef6 100644 (file)
@@ -16,7 +16,6 @@ import javax.inject.Inject;
 import org.eclipse.e4.ui.di.UISynchronize;
 import org.eclipse.jface.util.LocalSelectionTransfer;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.ViewerDropAdapter;
 import org.eclipse.swt.dnd.TransferData;
 
@@ -121,8 +120,6 @@ public class DefinedTermDropAdapterE4 extends EditViewerDropAdapter {
                        editor,
                        currentLocation);
                AbstractUtility.executeOperation(operation, sync);
-               // select the moved objects
-               editor.getViewer().setSelection(new StructuredSelection(sourceTerms));
 
                return true;
        }
index 07e7b7798b2b9c272654f95dbc15686a02402f3f..5ce8b717cf71b08565001c1f910f53fb7089741e 100644 (file)
@@ -8,6 +8,7 @@
  */
 package eu.etaxonomy.taxeditor.editor.definedterm.e4;
 
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -139,20 +140,36 @@ IPartContentHasDetails, IPartContentHasSupplementalData, IE4SavablePart, IContex
 
        @Override
        public boolean postOperation(Object objectAffectedByOperation) {
-           if(objectAffectedByOperation instanceof TermVocabularyDto
-                   || objectAffectedByOperation instanceof TermVocabulary){
-               input.initialiseVocabularies();
+        input.initialiseVocabularies();
+
+           Collection<TermDto> termsToSelect = new HashSet<>();
+
+           if(objectAffectedByOperation instanceof Collection){
+               for (Object o : (Collection<?>)objectAffectedByOperation) {
+                if(o instanceof TermVocabularyDto){
+                    viewer.refresh(o);
+                }
+                else if(o instanceof TermDto){
+                    viewer.refresh(((TermDto) o).getVocabularyDto());
+                    viewer.refresh(o);
+                    termsToSelect.add((TermDto) o);
+                }
+            }
            }
            if(objectAffectedByOperation instanceof TermDto){
-               viewer.refresh(((TermDto) objectAffectedByOperation).getVocabularyDto());
+               TermDto termDto = (TermDto) objectAffectedByOperation;
+            termsToSelect.add(termDto);
+               viewer.refresh(termDto.getVocabularyDto());
            }
            else{
                viewer.refresh(objectAffectedByOperation);
            }
-               if(objectAffectedByOperation != null){
-                       StructuredSelection selection = new StructuredSelection(objectAffectedByOperation);
+               if(!termsToSelect.isEmpty()){
+                       StructuredSelection selection = new StructuredSelection(termsToSelect);
             viewer.setSelection(selection);
-                       viewer.expandToLevel(objectAffectedByOperation, 1);
+            for (TermDto termDto : termsToSelect) {
+                viewer.expandToLevel(termDto, 1);
+            }
                }
                return true;
        }
index ee40c976b1ff16776d0058bc897c3063314d843b..2bee2ee7c283c06a668bebe5e166b982143b1c7d 100644 (file)
@@ -9,6 +9,7 @@
 package eu.etaxonomy.taxeditor.editor.definedterm.operation;\r
 \r
 import java.util.Collection;\r
+import java.util.HashSet;\r
 import java.util.UUID;\r
 \r
 import org.eclipse.core.commands.ExecutionException;\r
@@ -22,6 +23,7 @@ import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.api.service.TermServiceImpl.TermMovePosition;\r
 import eu.etaxonomy.cdm.persistence.dto.AbstractTermDto;\r
 import eu.etaxonomy.cdm.persistence.dto.TermDto;\r
+import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;\r
 import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation;\r
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
@@ -34,6 +36,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
 public class MoveDefinedTermOperation extends AbstractPostTaxonOperation {\r
 \r
        private final Collection<TermDto> sourceTerms;// the actual DefinedTermBase(s) we are moving\r
+       private final Collection<TermVocabularyDto> sourceVocabularies;\r
        private final AbstractTermDto targetTermOrVocabulary;// the target VOCABULARY or DefinedTerm we are moving these to\r
        private final int currentLocation;\r
 \r
@@ -55,13 +58,14 @@ public class MoveDefinedTermOperation extends AbstractPostTaxonOperation {
                this.targetTermOrVocabulary = target;\r
                this.sourceTerms = sourceTerms;\r
                this.currentLocation = currentLocation;\r
+               sourceVocabularies = new HashSet<>();\r
        }\r
 \r
        @Override\r
        public IStatus execute(IProgressMonitor monitor, IAdaptable info)\r
                        throws ExecutionException {\r
-           sourceTerms.forEach(term->\r
-           {\r
+           for(TermDto term:sourceTerms){\r
+               sourceVocabularies.add(term.getVocabularyDto());\r
             UUID parentUuid = targetTermOrVocabulary.getUuid();\r
             TermMovePosition termMovePosition = TermMovePosition.ON;\r
             if(currentLocation == ViewerDropAdapter.LOCATION_BEFORE) {\r
@@ -71,8 +75,11 @@ public class MoveDefinedTermOperation extends AbstractPostTaxonOperation {
                 termMovePosition = TermMovePosition.AFTER;\r
             }\r
             CdmStore.getService(ITermService.class).moveTerm(term, parentUuid, termMovePosition);\r
-        });\r
-               return postExecute(targetTermOrVocabulary);\r
+        }\r
+           Collection<AbstractTermDto> affectedObjects = new HashSet<>(sourceTerms);\r
+           affectedObjects.addAll(sourceVocabularies);\r
+           affectedObjects.add(targetTermOrVocabulary);\r
+               return postExecute(affectedObjects);\r
        }\r
 \r
        @Override\r