Project

General

Profile

« Previous | Next » 

Revision 6c7a1f64

Added by Andreas Kohlbecker over 10 years ago

implementing #3791 (Implement operation to move a Description to another Taxon) and improving the operation to move elements

View differences:

.gitattributes
463 463
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DescriptionsMenuPropertyTester.java -text
464 464
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DynamicFeatureMenu.java -text
465 465
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionElementsHandler.java -text
466
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionToOtherTaxonHandler.java -text
466 467
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/CreateDescriptionElementOperation.java -text
467 468
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/CreateTaxonDescriptionOperation.java -text
468 469
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteDescriptionElementOperation.java -text
469 470
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteTaxonDescriptionOperation.java -text
470 471
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/EditInXper2Handler.java -text
471 472
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionElementsOperation.java -text
473
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionToOtherTaxonOperation.java -text
472 474
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaContentProvider.java -text
473 475
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaLabelProvider.java -text
474 476
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java -text
eu.etaxonomy.taxeditor.editor/plugin.xml
495 495
               visible="true">
496 496
         </separator>
497 497
         <command
498
               commandId="eu.etaxonomy.taxeditor.description.commands.moveDescriptionElements"
499
               label="Move Elements"
498
               commandId="eu.etaxonomy.taxeditor.editor.commands.description.moveDescriptionToTaxon"
499
               label="Move Description to Taxon"
500 500
               style="push">
501 501
            <visibleWhen
502 502
                  checkEnabled="true">
503 503
               <reference
504
                     definitionId="isDescriptionElement">
504
                     definitionId="isDescription">
505 505
               </reference>
506 506
            </visibleWhen>
507 507
         </command>
508
         <command
509
               commandId="eu.etaxonomy.taxeditor.description.commands.moveDescriptionElements"
510
               label="Move Elements to Taxon"
511
               style="push">
512
            <visibleWhen
513
                  checkEnabled="true">
514
               <or>
515
                  <reference
516
                        definitionId="isDescriptionElement">
517
                  </reference>
518
                  <reference
519
                        definitionId="isFeatureNodeContainer">
520
                  </reference>
521
               </or>
522
            </visibleWhen>
523
         </command>
508 524
         <separator
509 525
               name="eu.etaxonomy.taxeditor.taxonDescriptionEditor.separator.afterNew"
510 526
               visible="true">
......
898 914
            categoryId="eu.etaxonomy.taxeditor.editor.view.descriptive.command.category"
899 915
            defaultHandler="eu.etaxonomy.taxeditor.editor.view.descriptive.handler.MoveDescriptionElementsHandler"
900 916
            id="eu.etaxonomy.taxeditor.description.commands.moveDescriptionElements"
901
            name="Move Description Elements">
917
            name="Move Description Elements to Taxon">
918
      </command>
919
      <command
920
            categoryId="eu.etaxonomy.taxeditor.editor.view.descriptive.command.category"
921
            defaultHandler="eu.etaxonomy.taxeditor.editor.view.descriptive.handler.MoveDescriptionToOtherTaxonHandler"
922
            id="eu.etaxonomy.taxeditor.editor.commands.description.moveDescriptionToTaxon"
923
            name="Move Description to Taxon">
902 924
      </command>
903 925
      <category
904 926
            id="eu.etaxonomy.taxeditor.editor.view.uses.command.category"
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionElementsHandler.java
24 24

  
25 25
import eu.etaxonomy.cdm.api.service.IDescriptionService;
26 26
import eu.etaxonomy.cdm.api.service.ITaxonService;
27
import eu.etaxonomy.cdm.model.common.Annotation;
28
import eu.etaxonomy.cdm.model.common.AnnotationType;
29
import eu.etaxonomy.cdm.model.common.Language;
27 30
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
28 31
import eu.etaxonomy.cdm.model.description.TaxonDescription;
29 32
import eu.etaxonomy.cdm.model.taxon.Taxon;
30 33
import eu.etaxonomy.taxeditor.editor.EditorUtil;
31 34
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart;
32 35
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionElementsOperation;
36
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
33 37
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
34 38
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
35 39
import eu.etaxonomy.taxeditor.store.CdmStore;
......
64 68
					UUID uuid = ((DescriptionElementBase) element).getUuid();
65 69
					
66 70
					elements.add(CdmStore.getService(IDescriptionService.class).loadDescriptionElement(uuid, null));
71
				} else if(element instanceof FeatureNodeContainer){
72
					for(DescriptionElementBase de : ((FeatureNodeContainer)element).getDescriptionElements()){
73
						elements.add(
74
								(DescriptionElementBase)CdmStore.getService(IDescriptionService.class).loadDescriptionElement(de.getUuid(), null)
75
							);
76
					}
67 77
				}
68 78
			}
69 79
			
80
			if(elements.size() == 0){
81
				return null;
82
			}
83
			
70 84
			Taxon targetTaxon = TaxonBaseSelectionDialog.selectTaxon(HandlerUtil.getActiveShell(event), EditorUtil.getActiveMultiPageTaxonEditor().getConversationHolder(), null);
85
			
86
			if(targetTaxon == null){
87
				// canceled
88
				return null;
89
			}
71 90
						
72 91
			TaxonDescription targetDescription = TaxonDescription.NewInstance(targetTaxon);
73
			targetDescription.setTitleCache(String.format("Copied from %s", EditorUtil.getActiveMultiPageTaxonEditor().getTaxon()), true);
92
			String moveMessage = String.format("Elements moved from %s", EditorUtil.getActiveMultiPageTaxonEditor().getTaxon());
93
			targetDescription.setTitleCache(moveMessage, true);
94
			Annotation annotation = Annotation.NewInstance(moveMessage, Language.DEFAULT());
95
			annotation.setAnnotationType(AnnotationType.TECHNICAL());
96
			targetDescription.addAnnotation(annotation);
74 97
			
75 98
			try {
76 99
				AbstractPostOperation operation = new MoveDescriptionElementsOperation(
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionToOtherTaxonHandler.java
1
/**
2
 * 
3
 */
4
package eu.etaxonomy.taxeditor.editor.view.descriptive.handler;
5

  
6
import java.util.ArrayList;
7
import java.util.List;
8
import java.util.UUID;
9

  
10
import javax.lang.model.element.Element;
11

  
12
import org.apache.log4j.Logger;
13
import org.eclipse.core.commands.AbstractHandler;
14
import org.eclipse.core.commands.ExecutionEvent;
15
import org.eclipse.core.commands.ExecutionException;
16
import org.eclipse.core.commands.IHandler;
17
import org.eclipse.core.commands.common.NotDefinedException;
18
import org.eclipse.jface.viewers.ISelection;
19
import org.eclipse.jface.viewers.IStructuredSelection;
20
import org.eclipse.swt.widgets.Display;
21
import org.eclipse.ui.PartInitException;
22
import org.eclipse.ui.handlers.HandlerUtil;
23

  
24
import eu.etaxonomy.cdm.api.service.IDescriptionService;
25
import eu.etaxonomy.cdm.model.common.CdmBase;
26
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
27
import eu.etaxonomy.cdm.model.description.TaxonDescription;
28
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
29
import eu.etaxonomy.taxeditor.editor.EditorUtil;
30
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
31
import eu.etaxonomy.taxeditor.editor.Page;
32
import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
33
import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
34
import eu.etaxonomy.taxeditor.editor.name.operation.ChangeAcceptedTaxonToSynonymOperation;
35
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionToOtherTaxonOperation;
36
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
37
import eu.etaxonomy.taxeditor.store.CdmStore;
38
import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
39

  
40
/**
41
 * <p>ChangeAcceptedTaxonToSynonymHandler class.</p>
42
 *
43
 * @author a.kohlbecker
44
 * @created Okt. 11, 2013
45
 * @version 1.0
46
 * 
47
 */
48
public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler
49
		implements IHandler, IPostOperationEnabled {
50
	private static final Logger logger = Logger
51
			.getLogger(MoveDescriptionToOtherTaxonHandler.class);
52
	private MoveDescriptionToOtherTaxonOperation operation;
53

  
54
	private UUID newAcceptedTaxonNodeUuid;
55
	private TaxonNameEditor editor;
56
	
57
	/* (non-Javadoc)
58
	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
59
	 */
60
	/** {@inheritDoc} */
61
	public Object execute(ExecutionEvent event) throws ExecutionException {
62
		
63
		ISelection selection = HandlerUtil.getCurrentSelection(event);
64
		
65
		if(selection instanceof IStructuredSelection){
66

  
67
			List<TaxonDescription> descriptions = new ArrayList<TaxonDescription>();
68
			
69
			IStructuredSelection structuredSelection = (IStructuredSelection) selection;
70
			
71
			for(Object element : structuredSelection.toArray()){
72
				if (element instanceof TaxonDescription){
73
					UUID uuid = ((TaxonDescription)element).getUuid();
74
					descriptions.add((TaxonDescription) CdmStore.getService(IDescriptionService.class).load(uuid, null));
75
				}
76
			}
77
			if(descriptions.size() == 0){
78
				return null;
79
			}
80
			
81
			// Choose the target taxon				
82
			List<UUID> excludeTaxa = new ArrayList<UUID>();
83
			editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
84
			excludeTaxa.add(descriptions.get(0).getTaxon().getUuid());
85
			TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), 
86
					editor.getConversationHolder(), 
87
					"Choose the accepted taxon", 
88
					excludeTaxa, 
89
					null, 
90
					null);			
91
	
92
			if (newAcceptedTaxonNode == null) {
93
				return null;
94
			}
95
			
96
			newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid();
97
					
98
			try {
99
				for(TaxonDescription description : descriptions){
100
					operation = new MoveDescriptionToOtherTaxonOperation(event.getCommand().getName(), 
101
											editor.getUndoContext(), description, newAcceptedTaxonNode, this, editor);
102
					EditorUtil.executeOperation(operation);
103
				}
104
				
105
			} catch (NotDefinedException e) {
106
				logger.warn("Command name not set");
107
			}
108
		}
109
		
110
		return null;
111
		
112
	}
113

  
114
	/* (non-Javadoc)
115
	 * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
116
	 */
117
	/** {@inheritDoc} */
118
	public boolean postOperation(CdmBase objectAffectedByOperation) {
119
		Display.getDefault().asyncExec(new Runnable(){
120

  
121
			public void run() {
122
				EditorUtil.close(editor.getMultiPageTaxonEditor());
123
				
124
				try {
125
					MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
126
					if(possibleOpenEditor != null){
127
						EditorUtil.close(possibleOpenEditor);
128
					}
129
					EditorUtil.openTaxonNode(newAcceptedTaxonNodeUuid);
130
				} catch (PartInitException e) {
131
					EditorUtil.error(this.getClass(), e);
132
					throw new RuntimeException(e);
133
				} catch (Exception e) {
134
					EditorUtil.warningDialog("Could not create Taxon", this, e.getMessage());
135
				}
136
			}
137
			
138
		});
139
		
140
		
141
		return true;
142
	}
143

  
144
	/**
145
	 * <p>onComplete</p>
146
	 *
147
	 * @return a boolean.
148
	 */
149
	public boolean onComplete() {
150
		// TODO Auto-generated method stub
151
		return false;
152
	}	
153
}
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionToOtherTaxonOperation.java
1
// $Id$
2
/**
3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10

  
11
package eu.etaxonomy.taxeditor.editor.view.descriptive.operation;
12

  
13
import org.apache.commons.lang.StringUtils;
14
import org.eclipse.core.commands.ExecutionException;
15
import org.eclipse.core.commands.operations.IUndoContext;
16
import org.eclipse.core.runtime.IAdaptable;
17
import org.eclipse.core.runtime.IProgressMonitor;
18
import org.eclipse.core.runtime.IStatus;
19

  
20
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
21
import eu.etaxonomy.cdm.api.service.IDescriptionService;
22
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
23
import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException;
24
import eu.etaxonomy.cdm.model.common.Annotation;
25
import eu.etaxonomy.cdm.model.common.AnnotationType;
26
import eu.etaxonomy.cdm.model.common.Language;
27
import eu.etaxonomy.cdm.model.description.TaxonDescription;
28
import eu.etaxonomy.cdm.model.taxon.Synonym;
29
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
30
import eu.etaxonomy.taxeditor.editor.EditorUtil;
31
import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation;
32
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
33
import eu.etaxonomy.taxeditor.store.CdmStore;
34

  
35
/**
36
 * <p>MoveDescriptionToOtherTaxonOperation</p>
37
 *
38
 * @author a.kohlbecker
39
 * @created Okt. 11, 2013
40
 */
41
public class MoveDescriptionToOtherTaxonOperation extends
42
		AbstractPersistentPostOperation {
43
	
44
	private TaxonNode newAcceptedTaxonNode;
45

  
46
	private TaxonDescription description;
47
	
48
	/**
49
	 * <p>Constructor for ChangeAcceptedTaxonToSynonymOperation.</p>
50
	 *
51
	 * @param label a {@link java.lang.String} object.
52
	 * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
53
	 * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
54
	 * @param description a {@link TaxonDescription} object.
55
	 * @param targetTaxonNode a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
56
	 * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object.
57
	 */
58
	public MoveDescriptionToOtherTaxonOperation(String label,
59
			IUndoContext undoContext, TaxonDescription description, TaxonNode targetTaxonNode,
60
			IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {
61
		super(label, undoContext, postOperationEnabled, conversationEnabled); // FIXME is this the right constructor ???
62
		this.description = description;
63
		this.newAcceptedTaxonNode = targetTaxonNode;
64
	}
65

  
66

  
67
	/* (non-Javadoc)
68
	 * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
69
	 */
70
	/** {@inheritDoc} */
71
	@Override
72
	public IStatus execute(IProgressMonitor monitor, IAdaptable info)
73
			throws ExecutionException {
74

  
75
		monitor.worked(20);
76
		bind();
77
		
78
		String moveMessage = String.format("Description moved from %s", EditorUtil.getActiveMultiPageTaxonEditor().getTaxon());
79
		if(description.isProtectedTitleCache()){
80
			String separator = "";
81
			if(!StringUtils.isBlank(description.getTitleCache())){
82
				separator = " - ";
83
			}
84
			description.setTitleCache(description.getTitleCache() + separator + moveMessage);
85
		}
86
		Annotation annotation = Annotation.NewInstance(moveMessage, Language.DEFAULT());
87
		annotation.setAnnotationType(AnnotationType.TECHNICAL());
88
		description.addAnnotation(annotation);
89
		description.setTaxon(newAcceptedTaxonNode.getTaxon());
90
		CdmStore.getService(IDescriptionService.class).saveOrUpdate(description);	
91
		monitor.worked(40);
92
        
93
		return postExecute(description);
94
	}
95

  
96
	/* (non-Javadoc)
97
	 * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
98
	 */
99
	/** {@inheritDoc} */
100
	@Override
101
	public IStatus redo(IProgressMonitor monitor, IAdaptable info)
102
			throws ExecutionException {
103
		// TODO Auto-generated method stub
104
		return null;
105
	}
106

  
107
	/* (non-Javadoc)
108
	 * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
109
	 */
110
	/** {@inheritDoc} */
111
	@Override
112
	public IStatus undo(IProgressMonitor monitor, IAdaptable info)
113
			throws ExecutionException {
114
		// TODO Auto-generated method stub
115
		return null;
116
	}
117
}

Also available in: Unified diff