From edc79e40b4af365082002a6ec236d8da8eec58ff Mon Sep 17 00:00:00 2001
From: Patrick Plitzner
Date: Wed, 8 May 2019 15:06:11 +0200
Subject: [PATCH] ref #8263 Fix refresh of source vocabulary after moving terms
---
.../e4/DefinedTermDropAdapterE4.java | 3 --
.../definedterm/e4/DefinedTermEditorE4.java | 31 ++++++++++++++-----
.../operation/MoveDefinedTermOperation.java | 15 ++++++---
3 files changed, 35 insertions(+), 14 deletions(-)
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermDropAdapterE4.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermDropAdapterE4.java
index 6e7d9167e..5cfe2df8d 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermDropAdapterE4.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermDropAdapterE4.java
@@ -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;
}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermEditorE4.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermEditorE4.java
index 07e7b7798..5ce8b717c 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermEditorE4.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/DefinedTermEditorE4.java
@@ -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 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;
}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/operation/MoveDefinedTermOperation.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/operation/MoveDefinedTermOperation.java
index ee40c976b..2bee2ee7c 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/operation/MoveDefinedTermOperation.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/operation/MoveDefinedTermOperation.java
@@ -9,6 +9,7 @@
package eu.etaxonomy.taxeditor.editor.definedterm.operation;
import java.util.Collection;
+import java.util.HashSet;
import java.util.UUID;
import org.eclipse.core.commands.ExecutionException;
@@ -22,6 +23,7 @@ import eu.etaxonomy.cdm.api.service.ITermService;
import eu.etaxonomy.cdm.api.service.TermServiceImpl.TermMovePosition;
import eu.etaxonomy.cdm.persistence.dto.AbstractTermDto;
import eu.etaxonomy.cdm.persistence.dto.TermDto;
+import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -34,6 +36,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
public class MoveDefinedTermOperation extends AbstractPostTaxonOperation {
private final Collection sourceTerms;// the actual DefinedTermBase(s) we are moving
+ private final Collection sourceVocabularies;
private final AbstractTermDto targetTermOrVocabulary;// the target VOCABULARY or DefinedTerm we are moving these to
private final int currentLocation;
@@ -55,13 +58,14 @@ public class MoveDefinedTermOperation extends AbstractPostTaxonOperation {
this.targetTermOrVocabulary = target;
this.sourceTerms = sourceTerms;
this.currentLocation = currentLocation;
+ sourceVocabularies = new HashSet<>();
}
@Override
public IStatus execute(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException {
- sourceTerms.forEach(term->
- {
+ for(TermDto term:sourceTerms){
+ sourceVocabularies.add(term.getVocabularyDto());
UUID parentUuid = targetTermOrVocabulary.getUuid();
TermMovePosition termMovePosition = TermMovePosition.ON;
if(currentLocation == ViewerDropAdapter.LOCATION_BEFORE) {
@@ -71,8 +75,11 @@ public class MoveDefinedTermOperation extends AbstractPostTaxonOperation {
termMovePosition = TermMovePosition.AFTER;
}
CdmStore.getService(ITermService.class).moveTerm(term, parentUuid, termMovePosition);
- });
- return postExecute(targetTermOrVocabulary);
+ }
+ Collection affectedObjects = new HashSet<>(sourceTerms);
+ affectedObjects.addAll(sourceVocabularies);
+ affectedObjects.add(targetTermOrVocabulary);
+ return postExecute(affectedObjects);
}
@Override
--
2.34.1