Project

General

Profile

Download (5.1 KB) Statistics
| Branch: | Tag: | Revision:
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.handler;
12

    
13
import org.eclipse.jface.action.ContributionItem;
14
import org.eclipse.jface.action.IContributionItem;
15
import org.eclipse.jface.viewers.ISelection;
16
import org.eclipse.jface.viewers.IStructuredSelection;
17
import org.eclipse.swt.events.SelectionEvent;
18
import org.eclipse.swt.events.SelectionListener;
19
import org.eclipse.swt.widgets.Event;
20
import org.eclipse.swt.widgets.Menu;
21
import org.eclipse.swt.widgets.MenuItem;
22
import org.eclipse.ui.ISelectionService;
23
import org.eclipse.ui.actions.CompoundContributionItem;
24
import org.eclipse.ui.handlers.IHandlerService;
25

    
26
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
27
import eu.etaxonomy.cdm.model.description.DescriptionBase;
28
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
29
import eu.etaxonomy.cdm.model.description.Feature;
30
import eu.etaxonomy.cdm.model.description.FeatureNode;
31
import eu.etaxonomy.cdm.model.description.FeatureTree;
32
import eu.etaxonomy.cdm.model.description.TaxonDescription;
33
import eu.etaxonomy.taxeditor.editor.EditorUtil;
34
import eu.etaxonomy.taxeditor.editor.UsageTermCollection;
35
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart;
36
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.CreateDescriptionElementOperation;
37
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
38
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
39
import eu.etaxonomy.taxeditor.store.CdmStore;
40

    
41
/**
42
 * <p>
43
 * DynamicFeatureMenu class.
44
 * </p>
45
 * 
46
 * @author n.hoffmann
47
 * @created 17.04.2009
48
 * @version 1.0
49
 */
50
public class DynamicFeatureMenu extends CompoundContributionItem {
51

    
52
	private ISelectionService selectionService = EditorUtil.getActivePart()
53
			.getSite().getWorkbenchWindow().getSelectionService();
54
	private IHandlerService handlerService = (IHandlerService) EditorUtil
55
			.getService(IHandlerService.class);
56

    
57
	/*
58
	 * (non-Javadoc)
59
	 * 
60
	 * @see
61
	 * org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
62
	 */
63
	/** {@inheritDoc} */
64
	@Override
65
	protected IContributionItem[] getContributionItems() {
66

    
67
		return new IContributionItem[] { new ContributionItem() {
68
			public void fill(Menu menu, int index) {
69

    
70
				ISelection selection = selectionService
71
						.getSelection(DescriptiveViewPart.ID);
72

    
73
				if (selection instanceof IStructuredSelection) {
74
					IStructuredSelection structuredSelection = (IStructuredSelection) selection;
75
					Object selectedElement = structuredSelection
76
							.getFirstElement();
77

    
78
					if (selectedElement instanceof TaxonDescription) {
79
						FeatureTree featureTree = getFeatureTree((TaxonDescription) selectedElement);
80

    
81
						for (FeatureNode childNode : featureTree.getRootChildren()) {
82
							createMenuItem(menu, childNode.getFeature());
83

    
84
						}
85
					} else if (selectedElement instanceof FeatureNodeContainer) {
86
						FeatureNode featureNode = ((FeatureNodeContainer) selectedElement)
87
								.getFeatureNode();
88

    
89
						// add the feature to the menu
90
						createMenuItem(menu, featureNode.getFeature());
91

    
92
						// add possible children to the menu
93
						for (FeatureNode childNode : featureNode.getChildren()) {
94
							createMenuItem(menu, childNode.getFeature());
95
						}
96
					} else if (selectedElement instanceof DescriptionElementBase) {
97
						Feature feature = ((DescriptionElementBase) selectedElement)
98
								.getFeature();
99
						createMenuItem(menu, feature);
100
					}
101
				}
102
			}
103
		} };
104
	}
105

    
106
	private void createMenuItem(Menu menu, final Feature feature) {
107
		MenuItem menuItem = new MenuItem(menu, -1);
108
		final Feature deproxiedFeature = (Feature) HibernateProxyHelper
109
				.deproxy(feature);
110

    
111
		menuItem.setText(deproxiedFeature.getLabel());
112
		menuItem.addSelectionListener(new SelectionListener() {
113

    
114
			public void widgetDefaultSelected(SelectionEvent e) {
115
			}
116

    
117
			public void widgetSelected(SelectionEvent ev) {
118
				Event event = new Event();
119
				event.data = deproxiedFeature;
120
				try {
121
					handlerService.executeCommand(
122
							CreateDescriptionElementOperation.ID, event);
123
				} catch (Exception e) {
124
					EditorUtil.error(getClass(), e);
125
				}
126
			}
127
		});
128

    
129
	}
130

    
131
	/**
132
	 * Retrieves the feature tree associated with the given description
133
	 * 
134
	 * TODO as of now this is always the same thing because feature trees may
135
	 * not be associated to descriptions yet.
136
	 * 
137
	 * @param description
138
	 * @return
139
	 */
140
	private FeatureTree getFeatureTree(DescriptionBase description) {
141
		FeatureTree featureTree = null;
142

    
143
		// TODO change this to the feature tree associated with this taxon
144
		// description
145
		if (description.hasStructuredData()) {
146
			featureTree = PreferencesUtil
147
					.getDefaultFeatureTreeForStructuredDescription();
148
		} else {
149
			featureTree = PreferencesUtil
150
					.getDefaultFeatureTreeForTextualDescription();
151
		}
152

    
153
		if (featureTree == null) {
154
			featureTree = FeatureTree.NewInstance(CdmStore.getTermManager()
155
					.getPreferredTerms(Feature.class));
156
		}
157

    
158
		return featureTree;
159
	}
160
}
(5-5/6)