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