Project

General

Profile

Download (9.42 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.editor.view.uses;
2

    
3
import java.net.URI;
4
import java.net.URISyntaxException;
5
import java.util.HashMap;
6
import java.util.Map;
7
import java.util.UUID;
8

    
9
import org.eclipse.core.runtime.IProgressMonitor;
10
import org.eclipse.jface.action.Action;
11
import org.eclipse.jface.action.GroupMarker;
12
import org.eclipse.jface.action.IToolBarManager;
13
import org.eclipse.jface.action.MenuManager;
14
import org.eclipse.jface.resource.ImageDescriptor;
15
import org.eclipse.jface.viewers.ISelection;
16
import org.eclipse.jface.viewers.StructuredSelection;
17
import org.eclipse.jface.viewers.TreeViewer;
18
import org.eclipse.jface.viewers.Viewer;
19
import org.eclipse.swt.SWT;
20
import org.eclipse.swt.dnd.DND;
21
import org.eclipse.swt.dnd.Transfer;
22
import org.eclipse.swt.graphics.ImageData;
23
import org.eclipse.swt.widgets.Composite;
24
import org.eclipse.swt.widgets.Control;
25
import org.eclipse.swt.widgets.Menu;
26
import org.eclipse.swt.widgets.Tree;
27
import org.eclipse.ui.IEditorInput;
28
import org.eclipse.ui.IEditorPart;
29
import org.eclipse.ui.IMemento;
30
import org.eclipse.ui.IWorkbenchActionConstants;
31
import org.eclipse.ui.IWorkbenchPart;
32

    
33
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
34
import eu.etaxonomy.cdm.api.service.ITermService;
35
import eu.etaxonomy.cdm.api.service.IVocabularyService;
36
import eu.etaxonomy.cdm.model.common.CdmBase;
37
import eu.etaxonomy.cdm.model.common.MarkerType;
38
import eu.etaxonomy.cdm.model.common.TermVocabulary;
39
import eu.etaxonomy.cdm.model.description.DescriptionBase;
40
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
41
import eu.etaxonomy.cdm.model.description.Feature;
42
import eu.etaxonomy.cdm.model.description.Modifier;
43
import eu.etaxonomy.cdm.model.description.State;
44
import eu.etaxonomy.cdm.model.description.TaxonDescription;
45
import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
46
import eu.etaxonomy.taxeditor.editor.EditorUtil;
47
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
48
import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermEditor;
49
import eu.etaxonomy.taxeditor.editor.key.AbstractGraphKeyEditor;
50
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementTransfer;
51
import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;
52
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
53
import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree;
54
import eu.etaxonomy.taxeditor.model.IContextListener;
55
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
56
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
57
import eu.etaxonomy.taxeditor.model.ImageResources;
58
import eu.etaxonomy.taxeditor.store.CdmStore;
59
import eu.etaxonomy.taxeditor.store.StoreUtil;
60
import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
61

    
62

    
63
/**
64
 * The context manager mediates context start/stop and workbench shutdowns to all registered listeners.
65
 *
66
 * @author a.theys	
67
 * @created mar 13, 2012
68
 * @version 1.0
69
 */
70
public class UsesViewPart extends AbstractCdmEditorViewPart implements IPartContentHasDetails, IPartContentHasSupplementalData {
71

    
72
	
73

    
74
	
75
	public static final String ID = "eu.etaxonomy.taxeditor.editor.view.uses";
76
	private TreeViewer viewer;
77
	private Map<TaxonDescription, FeatureNodeContainerTree> featureNodeContainerCache = new HashMap<TaxonDescription, FeatureNodeContainerTree>();
78
	private ToggleDescriptionAction showAllElementsAction;
79
	private ToggleDescriptionAction hideAllElementsAction;
80

    
81
	private int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
82
	
83
	/*@Override
84
	public void createPartControl(Composite parent){
85
		contextListener = new ContextListener();
86
		CdmStore.getContextManager().addContextListener(contextListener);
87
	}*/
88
	
89
	
90
	/** {@inheritDoc} */
91
	@Override
92
	public void createViewer(Composite parent) {
93
		
94
		viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL
95
				| SWT.V_SCROLL | SWT.FULL_SELECTION));
96
		viewer.setContentProvider(new UsesContentProvider(featureNodeContainerCache));
97
		//viewer.setContentProvider(new DescriptiveContentProvider(featureNodeContainerCache));
98
		
99
		//viewer.setInput(descService.listTaxonDescriptions(Taxon, null, null, null, null, null, null));
100
		
101
		viewer.setLabelProvider(new UsesLabelProvider());
102
		
103
		//viewer.setSorter(new DescriptiveViewerSorter());
104
		
105
		viewer.setAutoExpandLevel(2);
106
		
107
		
108
		
109
		Transfer[] transfers = new Transfer[] { DescriptionElementTransfer.getInstance() };
110
		/*viewer.addDragSupport(dndOperations, transfers, new DescriptionElementDragListener(
111
				this));
112
		viewer.addDropSupport(dndOperations, transfers,
113
				new DescriptionElementDropAdapter(viewer));*/
114
						
115
		// Propagate selection from viewer
116
		getSite().setSelectionProvider(viewer);
117
		
118
		showAllElementsAction = new ToggleDescriptionAction(false);		
119
		hideAllElementsAction = new ToggleDescriptionAction(true);
120
		
121
		// Add context menu to tree
122
		createMenu();
123
		
124
		createToolbar();
125
		
126
		// set initial input
127
//		if(getEditor() != null){
128
//			viewer.setInput(getEditor().getEditorInput());
129
//		}
130
	}
131
	
132

    
133
	/* (non-Javadoc)
134
	 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#getInitialSelection()
135
	 */
136
	/** {@inheritDoc} */
137
	@Override
138
	protected ISelection getInitialSelection() {
139
		if(getEditor() != null){
140
			return new StructuredSelection(getEditor().getEditorInput());
141
		}	
142
		
143
		return super.getInitialSelection();
144
	}
145
	
146
	private void createToolbar() {
147
		IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
148
		toolBarManager.add(showAllElementsAction);
149
		toolBarManager.add(hideAllElementsAction);
150
	}
151
	
152
	
153
	private void createMenu(){
154
		MenuManager menuManager = new MenuManager();
155
		menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
156
		
157
		getSite().registerContextMenu(menuManager, viewer);
158

    
159
		// FIXME for some reason this is not working
160
		menuManager.add(showAllElementsAction);
161
		menuManager.add(hideAllElementsAction);
162
				
163
		Control control = viewer.getControl();
164
		Menu menu = menuManager.createContextMenu(control);
165
		
166
		control.setMenu(menu);	
167
	}
168
	
169

    
170
	
171
	@Override
172
	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
173
		if(EditorUtil.getActiveEditor() == null){
174
			showEmptyPage();
175
			return;
176
		}
177
		
178
		if(part instanceof BulkEditor){
179
			showEmptyPage();
180
			return;
181
		}
182
		
183
		if(part instanceof AbstractGraphKeyEditor){
184
			showEmptyPage();
185
			return;
186
		}
187
		
188
		if(part instanceof DefinedTermEditor){
189
			showEmptyPage();
190
			return;
191
		}
192
		
193
		if(part instanceof MultiPageTaxonEditor){
194
			if(! part.equals(this.part)){
195
				//TaxonEditorInput input = (TaxonEditorInput)((IEditorPart) part).getEditorInput();
196
				IEditorInput input = ((IEditorPart) part).getEditorInput();
197
				featureNodeContainerCache.clear();
198
				//showViewer(part, new StructuredSelection(CdmStore.getService(IDescriptionService.class).listTaxonDescriptions(input.getTaxonNode().getTaxon(), null, null, null, null, null, null)));
199
				showViewer(part, new StructuredSelection(input));
200
			}
201
			showViewer();
202
		}
203
		
204
	}
205

    
206

    
207

    
208
	/*@Override
209
	public void showViewer(IWorkbenchPart part, IStructuredSelection selection) {
210
		this.part = part;		
211
    	
212
		Object element = selection.getFirstElement();
213
		
214
		getViewer().setInput(descService.listTaxonDescriptions((Taxon) element, null, null, null, null, null, null));
215
		
216
		showViewer();	
217
	}*/
218
	
219
	
220
	
221
	private class ToggleDescriptionAction extends Action{
222
		private boolean expanded;
223
		
224
		public ToggleDescriptionAction(boolean expand){
225
			super(null, Action.AS_PUSH_BUTTON);
226
			expanded = expand;
227
			setImageAndTooltip();
228
		}
229
		
230
		private void setImageAndTooltip(){
231
			setImageDescriptor(new ImageDescriptor() {
232
				@Override
233
				public ImageData getImageData() {
234
					setText(expanded ? "Collapse All" : "Expand All");
235
					String resource = expanded ? ImageResources.COLLAPSE_ALL : ImageResources.EXPAND_ALL;
236
					return ImageResources.getImage(resource).getImageData();
237
				}
238
			});
239
			
240
			String toolTipText = expanded ? "Collapse all" : "Show all descriptive data";
241
			setToolTipText(toolTipText);
242
		}
243
		
244
		@Override
245
		public void run() {
246
			if(expanded){
247
				viewer.collapseAll();
248
			}else{
249
				viewer.expandAll();
250
			}
251
			setImageAndTooltip();
252
		}
253
	}
254
	
255
	/** {@inheritDoc} */
256
	@Override
257
	public boolean postOperation(CdmBase objectAffectedByOperation) {
258
		viewer.refresh();
259
		return super.postOperation(objectAffectedByOperation);
260
	}
261
	
262
	/** {@inheritDoc} */
263
	@Override
264
	public void changed(Object object) {
265
		for(FeatureNodeContainerTree containerTree : featureNodeContainerCache.values()){
266
			containerTree.buildTree();
267
		}
268
		viewer.refresh();
269
		
270
		if(object instanceof DescriptionElementBase){
271
			DescriptionElementBase descriptionElement = (DescriptionElementBase) object;
272
			DescriptionBase description = descriptionElement.getInDescription();
273
			FeatureNodeContainerTree containerTree = featureNodeContainerCache.get(description);
274
			
275
			FeatureNodeContainer featureNodeContainer = containerTree.getFeatureNodeContainerForDescriptionElement(descriptionElement);
276
			viewer.expandToLevel(featureNodeContainer, 1);
277
			
278
		}
279

    
280
		if(object != null){
281
			StructuredSelection selection = new StructuredSelection(object);
282
			viewer.setSelection(selection, true);
283
		}
284

    
285
		super.changed(object);
286
	}
287
	
288

    
289
	/** {@inheritDoc} */
290
	@Override
291
	public Viewer getViewer() {
292
		return viewer;
293
	}
294
	
295
	/**
296
	 * <p>onComplete</p>
297
	 *
298
	 * @return a boolean.
299
	 */
300
	@Override
301
	public boolean onComplete() {
302
		return false;
303
	}
304

    
305
}
(3-3/3)