Project

General

Profile

Download (9.36 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.key.AbstractGraphKeyEditor;
49
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementTransfer;
50
import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;
51
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
52
import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree;
53
import eu.etaxonomy.taxeditor.model.IContextListener;
54
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
55
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
56
import eu.etaxonomy.taxeditor.model.ImageResources;
57
import eu.etaxonomy.taxeditor.store.CdmStore;
58
import eu.etaxonomy.taxeditor.store.StoreUtil;
59
import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
60

    
61

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

    
71
	
72

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

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

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

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

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

    
205

    
206

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

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

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

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

    
304
}
(3-3/3)