Project

General

Profile

Download (5.04 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.view.descriptive.DescriptiveViewPart;
35
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.CreateDescriptionElementOperation;
36
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
37
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
38
import eu.etaxonomy.taxeditor.store.CdmStore;
39

    
40
/**
41
 * <p>DynamicFeatureMenu class.</p>
42
 *
43
 * @author n.hoffmann
44
 * @created 17.04.2009
45
 * @version 1.0
46
 */
47
public class DynamicFeatureMenu extends CompoundContributionItem {
48
	
49
	private ISelectionService selectionService = EditorUtil.getActivePart().getSite().getWorkbenchWindow().getSelectionService();
50
	private IHandlerService handlerService = (IHandlerService) EditorUtil.getService(IHandlerService.class);
51
	
52
	/* (non-Javadoc)
53
	 * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
54
	 */
55
	/** {@inheritDoc} */
56
	@Override
57
	protected IContributionItem[] getContributionItems() {
58
		
59
		return new IContributionItem[] {
60
				new ContributionItem() {
61
					public void fill(Menu menu, int index){
62
								
63
						ISelection selection = selectionService.getSelection(DescriptiveViewPart.ID);
64
						
65
						if(selection instanceof IStructuredSelection){
66
							IStructuredSelection structuredSelection = (IStructuredSelection) selection;
67
							Object selectedElement = structuredSelection.getFirstElement();
68
							
69
							if(selectedElement instanceof TaxonDescription){
70
								FeatureTree featureTree = getFeatureTree((TaxonDescription) selectedElement);
71
								
72
								for(FeatureNode childNode : featureTree.getRootChildren()){
73
									createMenuItem(menu, childNode.getFeature());
74
								}
75
							}
76
							else if(selectedElement instanceof FeatureNodeContainer){
77
								FeatureNode featureNode = ((FeatureNodeContainer) selectedElement).getFeatureNode();
78
								
79
								// add the feature to the menu
80
								createMenuItem(menu, featureNode.getFeature());
81
								
82
								// add possible children to the menu
83
								for(FeatureNode childNode : featureNode.getChildren()){
84
									createMenuItem(menu, childNode.getFeature());
85
								}
86
							}
87
							else if(selectedElement instanceof DescriptionElementBase){
88
								Feature feature = ((DescriptionElementBase) selectedElement).getFeature();
89
								createMenuItem(menu, feature);
90
							}
91
						}	
92
					}
93
				}
94
		};
95
	}	
96
	
97
	private void createMenuItem(Menu menu, final Feature feature) {
98
		MenuItem menuItem = new MenuItem(menu, -1);
99
		final Feature deproxiedFeature = (Feature) HibernateProxyHelper.deproxy(feature);
100
		menuItem.setText(deproxiedFeature.getLabel());
101
		menuItem.addSelectionListener(new SelectionListener(){
102

    
103
			public void widgetDefaultSelected(SelectionEvent e) {}
104

    
105
			public void widgetSelected(SelectionEvent ev) {
106
				Event event = new Event();
107
				event.data = deproxiedFeature;
108
				try {
109
					handlerService.executeCommand(CreateDescriptionElementOperation.ID, event);
110
				} catch (Exception e) {
111
					EditorUtil.error(getClass(), e);
112
				}
113
			}				
114
		});
115
	}
116
	
117
	/**
118
	 * Retrieves the feature tree associated with the given description
119
	 * 
120
	 * TODO as of now this is always the same thing because feature trees may not be associated 
121
	 * to descriptions yet.
122
	 * 
123
	 * @param description
124
	 * @return
125
	 */
126
	private FeatureTree getFeatureTree(DescriptionBase description){
127
		FeatureTree featureTree = null;
128
		
129
		// TODO change this to the feature tree associated with this taxon description
130
		if (description.hasStructuredData()){					
131
			featureTree = PreferencesUtil.getDefaultFeatureTreeForStructuredDescription();
132
		}else{
133
			featureTree = PreferencesUtil.getDefaultFeatureTreeForTextualDescription();
134
		}
135
		
136
		if(featureTree == null){
137
			featureTree = FeatureTree.NewInstance(CdmStore.getTermManager().getPreferredFeatures());
138
		}
139
		
140
		return featureTree;
141
	}
142
}
(5-5/6)