Project

General

Profile

Download (4.8 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.taxeditor.editor.view.descriptive.handler;
11

    
12
import java.util.ArrayList;
13
import java.util.List;
14

    
15
import org.eclipse.core.commands.AbstractHandler;
16
import org.eclipse.core.commands.ExecutionEvent;
17
import org.eclipse.core.commands.ExecutionException;
18
import org.eclipse.core.commands.common.NotDefinedException;
19
import org.eclipse.core.commands.operations.IUndoContext;
20
import org.eclipse.jface.viewers.IStructuredSelection;
21
import org.eclipse.jface.viewers.TreePath;
22
import org.eclipse.jface.viewers.TreeSelection;
23
import org.eclipse.ui.IWorkbenchPart;
24
import org.eclipse.ui.handlers.HandlerUtil;
25

    
26
import eu.etaxonomy.cdm.model.description.DescriptionBase;
27
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
28
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
29
import eu.etaxonomy.cdm.model.description.TaxonDescription;
30
import eu.etaxonomy.cdm.model.media.Media;
31
import eu.etaxonomy.taxeditor.editor.EditorUtil;
32
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.DeleteDescriptionElementOperation;
33
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.DeleteSpecimenDescriptionOperation;
34
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.DeleteTaxonDescriptionOperation;
35
import eu.etaxonomy.taxeditor.editor.view.media.operation.DeleteMediaOperation;
36
import eu.etaxonomy.taxeditor.model.AbstractUtility;
37
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
38
import eu.etaxonomy.taxeditor.model.MessagingUtils;
39
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
40
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
41
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
42

    
43
/**
44
 * <p>DeleteDescriptionHandler class.</p>
45
 *
46
 * @author n.hoffmann
47
 * @created Jun 22, 2010
48
 * @version 1.0
49
 */
50
public class DeleteHandler extends AbstractHandler {
51

    
52
	/* (non-Javadoc)
53
	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
54
	 */
55
	/** {@inheritDoc} */
56
	@Override
57
    public Object execute(ExecutionEvent event) throws ExecutionException {
58
		IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getActiveSite(event).getSelectionProvider().getSelection();
59

    
60
		IWorkbenchPart part = HandlerUtil.getActivePart(event);
61
		IPostOperationEnabled postOperationEnabled = (part instanceof IPostOperationEnabled) ? (IPostOperationEnabled) part : null;
62
		ICdmEntitySessionEnabled cdmEntitySessionEnabled = (part instanceof ICdmEntitySessionEnabled) ? (ICdmEntitySessionEnabled) part : null;
63

    
64
		try {
65
			String label = event.getCommand().getName();
66

    
67
			IUndoContext undoContext = EditorUtil.getUndoContext();
68

    
69
			List<AbstractPostOperation<?>> operations = new ArrayList<AbstractPostOperation<?>>();
70

    
71
			for(Object object : selection.toArray()){
72

    
73
				// TaxonDescription
74
				if(object instanceof TaxonDescription){
75
					operations.add(new DeleteTaxonDescriptionOperation(label, undoContext, (TaxonDescription) object, postOperationEnabled, cdmEntitySessionEnabled));
76
				}
77
				else if(object instanceof SpecimenDescription){
78
				    operations.add(new DeleteSpecimenDescriptionOperation(label, undoContext, (SpecimenDescription) object, postOperationEnabled, cdmEntitySessionEnabled)) ;
79
				}
80
				// DescriptionElementBase
81
				else if(object instanceof DescriptionElementBase){
82
					operations.add(new DeleteDescriptionElementOperation(label, undoContext, (DescriptionElementBase) object, postOperationEnabled, cdmEntitySessionEnabled));
83
				}
84
				else if(object instanceof FeatureNodeContainer){
85
					List<DescriptionElementBase> descriptions = ((FeatureNodeContainer) object).getDescriptionElementsForEntireBranch();
86

    
87
					for(DescriptionElementBase description : descriptions){
88
						operations.add(new DeleteDescriptionElementOperation(label, undoContext, description, postOperationEnabled, cdmEntitySessionEnabled));
89
					}
90
				}
91
				// Media
92
				else if(object instanceof Media){
93
					TreeSelection treeSelection = (TreeSelection) selection;
94

    
95
					TreePath[] path = treeSelection.getPathsFor(object);
96

    
97
					DescriptionBase<?> imageGallery = (DescriptionBase<?>) path[0].getFirstSegment();
98

    
99
					operations.add(new DeleteMediaOperation(label, undoContext, imageGallery, (Media) object, postOperationEnabled));
100
				}
101
				else{
102
					MessagingUtils.error(getClass(), "Selection is not valid for this delete handler", null);
103
				}
104
			}
105

    
106
			// execute all cumulated operations
107
			for(AbstractPostOperation<?> operation : operations){
108
				AbstractUtility.executeOperation(operation);
109
			}
110

    
111
		} catch (NotDefinedException e) {
112
			MessagingUtils.warn(getClass(), "Command name not set.");
113
		}
114

    
115

    
116
		return null;
117
	}
118
}
(3-3/8)