ref #8263 Fix refresh of source vocabulary after moving terms
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / editor / definedterm / e4 / DefinedTermEditorE4.java
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;
        }