eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DescriptionsMenuPropertyTester.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DynamicFeatureMenu.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionElementsHandler.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionToOtherTaxonHandler.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/CreateDescriptionElementOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/CreateTaxonDescriptionOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteDescriptionElementOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteTaxonDescriptionOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/EditInXper2Handler.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionElementsOperation.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionToOtherTaxonOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaContentProvider.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaLabelProvider.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java -text
visible="true">
</separator>
<command
- commandId="eu.etaxonomy.taxeditor.description.commands.moveDescriptionElements"
- label="Move Elements"
+ commandId="eu.etaxonomy.taxeditor.editor.commands.description.moveDescriptionToTaxon"
+ label="Move Description to Taxon"
style="push">
<visibleWhen
checkEnabled="true">
<reference
- definitionId="isDescriptionElement">
+ definitionId="isDescription">
</reference>
</visibleWhen>
</command>
+ <command
+ commandId="eu.etaxonomy.taxeditor.description.commands.moveDescriptionElements"
+ label="Move Elements to Taxon"
+ style="push">
+ <visibleWhen
+ checkEnabled="true">
+ <or>
+ <reference
+ definitionId="isDescriptionElement">
+ </reference>
+ <reference
+ definitionId="isFeatureNodeContainer">
+ </reference>
+ </or>
+ </visibleWhen>
+ </command>
<separator
name="eu.etaxonomy.taxeditor.taxonDescriptionEditor.separator.afterNew"
visible="true">
categoryId="eu.etaxonomy.taxeditor.editor.view.descriptive.command.category"
defaultHandler="eu.etaxonomy.taxeditor.editor.view.descriptive.handler.MoveDescriptionElementsHandler"
id="eu.etaxonomy.taxeditor.description.commands.moveDescriptionElements"
- name="Move Description Elements">
+ name="Move Description Elements to Taxon">
+ </command>
+ <command
+ categoryId="eu.etaxonomy.taxeditor.editor.view.descriptive.command.category"
+ defaultHandler="eu.etaxonomy.taxeditor.editor.view.descriptive.handler.MoveDescriptionToOtherTaxonHandler"
+ id="eu.etaxonomy.taxeditor.editor.commands.description.moveDescriptionToTaxon"
+ name="Move Description to Taxon">
</command>
<category
id="eu.etaxonomy.taxeditor.editor.view.uses.command.category"
import eu.etaxonomy.cdm.api.service.IDescriptionService;
import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.model.common.Annotation;
+import eu.etaxonomy.cdm.model.common.AnnotationType;
+import eu.etaxonomy.cdm.model.common.Language;
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
import eu.etaxonomy.cdm.model.description.TaxonDescription;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart;
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionElementsOperation;
+import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.store.CdmStore;
UUID uuid = ((DescriptionElementBase) element).getUuid();
elements.add(CdmStore.getService(IDescriptionService.class).loadDescriptionElement(uuid, null));
+ } else if(element instanceof FeatureNodeContainer){
+ for(DescriptionElementBase de : ((FeatureNodeContainer)element).getDescriptionElements()){
+ elements.add(
+ (DescriptionElementBase)CdmStore.getService(IDescriptionService.class).loadDescriptionElement(de.getUuid(), null)
+ );
+ }
}
}
+ if(elements.size() == 0){
+ return null;
+ }
+
Taxon targetTaxon = TaxonBaseSelectionDialog.selectTaxon(HandlerUtil.getActiveShell(event), EditorUtil.getActiveMultiPageTaxonEditor().getConversationHolder(), null);
+
+ if(targetTaxon == null){
+ // canceled
+ return null;
+ }
TaxonDescription targetDescription = TaxonDescription.NewInstance(targetTaxon);
- targetDescription.setTitleCache(String.format("Copied from %s", EditorUtil.getActiveMultiPageTaxonEditor().getTaxon()), true);
+ String moveMessage = String.format("Elements moved from %s", EditorUtil.getActiveMultiPageTaxonEditor().getTaxon());
+ targetDescription.setTitleCache(moveMessage, true);
+ Annotation annotation = Annotation.NewInstance(moveMessage, Language.DEFAULT());
+ annotation.setAnnotationType(AnnotationType.TECHNICAL());
+ targetDescription.addAnnotation(annotation);
try {
AbstractPostOperation operation = new MoveDescriptionElementsOperation(
--- /dev/null
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.editor.view.descriptive.handler;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import javax.lang.model.element.Element;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import eu.etaxonomy.cdm.api.service.IDescriptionService;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
+import eu.etaxonomy.taxeditor.editor.Page;
+import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
+import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.editor.name.operation.ChangeAcceptedTaxonToSynonymOperation;
+import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionToOtherTaxonOperation;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
+
+/**
+ * <p>ChangeAcceptedTaxonToSynonymHandler class.</p>
+ *
+ * @author a.kohlbecker
+ * @created Okt. 11, 2013
+ * @version 1.0
+ *
+ */
+public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler
+ implements IHandler, IPostOperationEnabled {
+ private static final Logger logger = Logger
+ .getLogger(MoveDescriptionToOtherTaxonHandler.class);
+ private MoveDescriptionToOtherTaxonOperation operation;
+
+ private UUID newAcceptedTaxonNodeUuid;
+ private TaxonNameEditor editor;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ /** {@inheritDoc} */
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+
+ ISelection selection = HandlerUtil.getCurrentSelection(event);
+
+ if(selection instanceof IStructuredSelection){
+
+ List<TaxonDescription> descriptions = new ArrayList<TaxonDescription>();
+
+ IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+
+ for(Object element : structuredSelection.toArray()){
+ if (element instanceof TaxonDescription){
+ UUID uuid = ((TaxonDescription)element).getUuid();
+ descriptions.add((TaxonDescription) CdmStore.getService(IDescriptionService.class).load(uuid, null));
+ }
+ }
+ if(descriptions.size() == 0){
+ return null;
+ }
+
+ // Choose the target taxon
+ List<UUID> excludeTaxa = new ArrayList<UUID>();
+ editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
+ excludeTaxa.add(descriptions.get(0).getTaxon().getUuid());
+ TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event),
+ editor.getConversationHolder(),
+ "Choose the accepted taxon",
+ excludeTaxa,
+ null,
+ null);
+
+ if (newAcceptedTaxonNode == null) {
+ return null;
+ }
+
+ newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
+
+ try {
+ for(TaxonDescription description : descriptions){
+ operation = new MoveDescriptionToOtherTaxonOperation(event.getCommand().getName(),
+ editor.getUndoContext(), description, newAcceptedTaxonNode, this, editor);
+ EditorUtil.executeOperation(operation);
+ }
+
+ } catch (NotDefinedException e) {
+ logger.warn("Command name not set");
+ }
+ }
+
+ return null;
+
+ }
+
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
+ */
+ /** {@inheritDoc} */
+ public boolean postOperation(CdmBase objectAffectedByOperation) {
+ Display.getDefault().asyncExec(new Runnable(){
+
+ public void run() {
+ EditorUtil.close(editor.getMultiPageTaxonEditor());
+
+ try {
+ MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
+ if(possibleOpenEditor != null){
+ EditorUtil.close(possibleOpenEditor);
+ }
+ EditorUtil.openTaxonNode(newAcceptedTaxonNodeUuid);
+ } catch (PartInitException e) {
+ EditorUtil.error(this.getClass(), e);
+ throw new RuntimeException(e);
+ } catch (Exception e) {
+ EditorUtil.warningDialog("Could not create Taxon", this, e.getMessage());
+ }
+ }
+
+ });
+
+
+ return true;
+ }
+
+ /**
+ * <p>onComplete</p>
+ *
+ * @return a boolean.
+ */
+ public boolean onComplete() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2007 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.view.descriptive.operation;
+
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IUndoContext;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+
+import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.api.service.IDescriptionService;
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException;
+import eu.etaxonomy.cdm.model.common.Annotation;
+import eu.etaxonomy.cdm.model.common.AnnotationType;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.taxon.Synonym;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * <p>MoveDescriptionToOtherTaxonOperation</p>
+ *
+ * @author a.kohlbecker
+ * @created Okt. 11, 2013
+ */
+public class MoveDescriptionToOtherTaxonOperation extends
+ AbstractPersistentPostOperation {
+
+ private TaxonNode newAcceptedTaxonNode;
+
+ private TaxonDescription description;
+
+ /**
+ * <p>Constructor for ChangeAcceptedTaxonToSynonymOperation.</p>
+ *
+ * @param label a {@link java.lang.String} object.
+ * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
+ * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
+ * @param description a {@link TaxonDescription} object.
+ * @param targetTaxonNode a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
+ * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object.
+ */
+ public MoveDescriptionToOtherTaxonOperation(String label,
+ IUndoContext undoContext, TaxonDescription description, TaxonNode targetTaxonNode,
+ IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {
+ super(label, undoContext, postOperationEnabled, conversationEnabled); // FIXME is this the right constructor ???
+ this.description = description;
+ this.newAcceptedTaxonNode = targetTaxonNode;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ */
+ /** {@inheritDoc} */
+ @Override
+ public IStatus execute(IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+
+ monitor.worked(20);
+ bind();
+
+ String moveMessage = String.format("Description moved from %s", EditorUtil.getActiveMultiPageTaxonEditor().getTaxon());
+ if(description.isProtectedTitleCache()){
+ String separator = "";
+ if(!StringUtils.isBlank(description.getTitleCache())){
+ separator = " - ";
+ }
+ description.setTitleCache(description.getTitleCache() + separator + moveMessage);
+ }
+ Annotation annotation = Annotation.NewInstance(moveMessage, Language.DEFAULT());
+ annotation.setAnnotationType(AnnotationType.TECHNICAL());
+ description.addAnnotation(annotation);
+ description.setTaxon(newAcceptedTaxonNode.getTaxon());
+ CdmStore.getService(IDescriptionService.class).saveOrUpdate(description);
+ monitor.worked(40);
+
+ return postExecute(description);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ */
+ /** {@inheritDoc} */
+ @Override
+ public IStatus redo(IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ */
+ /** {@inheritDoc} */
+ @Override
+ public IStatus undo(IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}