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