From 5e339d326629b901076769c5083ba1e48a68d26a Mon Sep 17 00:00:00 2001 From: Patrick Plitzner Date: Wed, 6 Mar 2019 15:04:47 +0100 Subject: [PATCH] ref #8044 Add "Move to..." menu to term editor --- eu.etaxonomy.taxeditor.store/fragment.e4xmi | 3 + .../e4/handler/MoveDefinedTermHandler.java | 101 ++++++++++++++++++ .../operation/MoveDefinedTermOperation.java | 7 ++ 3 files changed, 111 insertions(+) create mode 100644 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/handler/MoveDefinedTermHandler.java diff --git a/eu.etaxonomy.taxeditor.store/fragment.e4xmi b/eu.etaxonomy.taxeditor.store/fragment.e4xmi index eb48cc4c4..b61dd2770 100644 --- a/eu.etaxonomy.taxeditor.store/fragment.e4xmi +++ b/eu.etaxonomy.taxeditor.store/fragment.e4xmi @@ -63,6 +63,7 @@ + @@ -72,6 +73,7 @@ + @@ -152,6 +154,7 @@ + diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/handler/MoveDefinedTermHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/handler/MoveDefinedTermHandler.java new file mode 100644 index 000000000..9f96e8910 --- /dev/null +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/e4/handler/MoveDefinedTermHandler.java @@ -0,0 +1,101 @@ +/** + * Copyright (C) 2009 EDIT + * European Distributed Institute of Taxonomy + * 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. + */ +package eu.etaxonomy.taxeditor.editor.definedterm.e4.handler; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import javax.inject.Named; + +import org.eclipse.core.commands.operations.IUndoContext; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.e4.core.di.annotations.CanExecute; +import org.eclipse.e4.core.di.annotations.Execute; +import org.eclipse.e4.ui.di.UISynchronize; +import org.eclipse.e4.ui.model.application.ui.basic.MPart; +import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem; +import org.eclipse.e4.ui.services.IServiceConstants; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.swt.widgets.Shell; + +import eu.etaxonomy.cdm.model.location.Country; +import eu.etaxonomy.cdm.persistence.dto.TermDto; +import eu.etaxonomy.taxeditor.editor.definedterm.e4.DefinedTermEditorE4; +import eu.etaxonomy.taxeditor.editor.definedterm.operation.MoveDefinedTermOperation; +import eu.etaxonomy.taxeditor.featuretree.TermChooseWizard; +import eu.etaxonomy.taxeditor.model.AbstractUtility; +import eu.etaxonomy.taxeditor.model.MessagingUtils; +import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; +import eu.etaxonomy.taxeditor.store.StoreUtil; + +/** + * + * @author pplitzner + * @date 06.03.2019 + * + */ +public class MoveDefinedTermHandler { + + @Execute + public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart activePart, + @Named(IServiceConstants.ACTIVE_SELECTION) IStructuredSelection selection, + @Named(IServiceConstants.ACTIVE_SHELL) Shell shell, + MHandledMenuItem menuItem, + UISynchronize sync) { + DefinedTermEditorE4 termEditor = (DefinedTermEditorE4) activePart.getObject(); + if(StoreUtil.promptCheckIsDirty(termEditor)){ + return; + } + + TermDto selectedTerm = (TermDto) selection.getFirstElement(); + + TermChooseWizard wizard = new TermChooseWizard(selectedTerm.getTermType()); + WizardDialog dialog = new WizardDialog(shell, wizard); + + List selectedTerms = new ArrayList<>(); + if (dialog.open() == IStatus.OK) { + selectedTerms = wizard.getSelectedTerms(); + } + + if(selectedTerms.size()!=1){ + MessagingUtils.warningDialog("Move not possible", this, "You have to select one single target term"); + return; + } + + TermDto target = selectedTerms.get(0); + String label = menuItem.getLocalizedLabel(); + IUndoContext undoContext = StoreUtil.getUndoContext(); + Set movedTerms = Collections.singleton(selectedTerm); + AbstractPostOperation operation = + new MoveDefinedTermOperation(label, + undoContext, + target, + movedTerms, + termEditor); + AbstractUtility.executeOperation(operation, sync); + + } + + @CanExecute + public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION) IStructuredSelection selection, + MHandledMenuItem menuItem){ + boolean canExecute = false; + Object firstElement = selection.getFirstElement(); + canExecute = selection.size()==1 + && firstElement instanceof TermDto + // TODO temporary fix for #7933 + && !((TermDto) firstElement).getVocabularyUuid().equals(Country.uuidCountryVocabulary); + menuItem.setVisible(canExecute); + return canExecute; + } + +} 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 eb579cae5..ee40c976b 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 @@ -37,6 +37,13 @@ public class MoveDefinedTermOperation extends AbstractPostTaxonOperation { private final AbstractTermDto targetTermOrVocabulary;// the target VOCABULARY or DefinedTerm we are moving these to private final int currentLocation; + public MoveDefinedTermOperation(String label, + IUndoContext undoContext, + AbstractTermDto target, + Collection sourceTerms, + IPostOperationEnabled postOperationEnabled) { + this(label, undoContext, target, sourceTerms, postOperationEnabled, ViewerDropAdapter.LOCATION_ON); + } public MoveDefinedTermOperation(String label, IUndoContext undoContext, AbstractTermDto target, -- 2.34.1