AT: commiting Palm Use Data extension
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / uses / UsesViewPart.java
1 package eu.etaxonomy.taxeditor.editor.view.uses;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import org.eclipse.jface.action.Action;
7 import org.eclipse.jface.action.GroupMarker;
8 import org.eclipse.jface.action.IToolBarManager;
9 import org.eclipse.jface.action.MenuManager;
10 import org.eclipse.jface.resource.ImageDescriptor;
11 import org.eclipse.jface.viewers.ISelection;
12 import org.eclipse.jface.viewers.StructuredSelection;
13 import org.eclipse.jface.viewers.TreeViewer;
14 import org.eclipse.jface.viewers.Viewer;
15 import org.eclipse.swt.SWT;
16 import org.eclipse.swt.dnd.DND;
17 import org.eclipse.swt.dnd.Transfer;
18 import org.eclipse.swt.graphics.ImageData;
19 import org.eclipse.swt.widgets.Composite;
20 import org.eclipse.swt.widgets.Control;
21 import org.eclipse.swt.widgets.Menu;
22 import org.eclipse.swt.widgets.Tree;
23 import org.eclipse.ui.IEditorPart;
24 import org.eclipse.ui.IWorkbenchActionConstants;
25 import org.eclipse.ui.IWorkbenchPart;
26
27 import eu.etaxonomy.cdm.model.common.CdmBase;
28 import eu.etaxonomy.cdm.model.description.DescriptionBase;
29 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
30 import eu.etaxonomy.cdm.model.description.TaxonDescription;
31 import eu.etaxonomy.cdm.api.service.IDescriptionService;
32 import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor;
33 import eu.etaxonomy.taxeditor.editor.EditorUtil;
34 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
35 import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
36 import eu.etaxonomy.taxeditor.editor.key.AbstractGraphKeyEditor;
37 import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementDragListener;
38 import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementDropAdapter;
39 import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptionElementTransfer;
40 import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewerSorter;
41 import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
42 import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree;
43 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
44 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
45 import eu.etaxonomy.taxeditor.model.ImageResources;
46 import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
47
48
49
50 public class UsesViewPart extends AbstractCdmEditorViewPart implements IPartContentHasDetails, IPartContentHasSupplementalData {
51
52 public static final String ID = "eu.etaxonomy.taxeditor.editor.view.uses";
53 private TreeViewer viewer;
54 private Map<TaxonDescription, FeatureNodeContainerTree> featureNodeContainerCache = new HashMap<TaxonDescription, FeatureNodeContainerTree>();
55 private ToggleDescriptionAction showAllElementsAction;
56 private ToggleDescriptionAction hideAllElementsAction;
57
58 private int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
59
60 /** {@inheritDoc} */
61 @Override
62 public void createViewer(Composite parent) {
63
64 viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL
65 | SWT.V_SCROLL | SWT.FULL_SELECTION));
66
67 viewer.setContentProvider(new UsesContentProvider(featureNodeContainerCache));
68
69 //viewer.setInput(descService.listTaxonDescriptions(Taxon, null, null, null, null, null, null));
70
71 viewer.setLabelProvider(new UsesLabelProvider());
72
73 //viewer.setSorter(new DescriptiveViewerSorter());
74
75 viewer.setAutoExpandLevel(2);
76
77
78
79 Transfer[] transfers = new Transfer[] { DescriptionElementTransfer.getInstance() };
80 /*viewer.addDragSupport(dndOperations, transfers, new DescriptionElementDragListener(
81 this));
82 viewer.addDropSupport(dndOperations, transfers,
83 new DescriptionElementDropAdapter(viewer));*/
84
85 // Propagate selection from viewer
86 getSite().setSelectionProvider(viewer);
87
88 showAllElementsAction = new ToggleDescriptionAction(false);
89 hideAllElementsAction = new ToggleDescriptionAction(true);
90
91 // Add context menu to tree
92 createMenu();
93
94 createToolbar();
95
96 // set initial input
97 // if(getEditor() != null){
98 // viewer.setInput(getEditor().getEditorInput());
99 // }
100 }
101
102 private void createToolbar() {
103 IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
104 toolBarManager.add(showAllElementsAction);
105 toolBarManager.add(hideAllElementsAction);
106 }
107
108 private void createMenu(){
109 MenuManager menuManager = new MenuManager();
110 menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
111
112 getSite().registerContextMenu(menuManager, viewer);
113
114 // FIXME for some reason this is not working
115 menuManager.add(showAllElementsAction);
116 menuManager.add(hideAllElementsAction);
117
118 Control control = viewer.getControl();
119 Menu menu = menuManager.createContextMenu(control);
120
121 control.setMenu(menu);
122 }
123
124 public void changed(Object object) {
125 for(FeatureNodeContainerTree containerTree : featureNodeContainerCache.values()){
126 containerTree.buildTree();
127 }
128 viewer.refresh();
129
130 /*if(object instanceof DescriptionElementBase){
131 DescriptionElementBase descriptionElement = (DescriptionElementBase) object;
132 DescriptionBase description = descriptionElement.getInDescription();
133 FeatureNodeContainerTree containerTree = featureNodeContainerCache.get(description);
134
135 FeatureNodeContainer featureNodeContainer = containerTree.getFeatureNodeContainerForDescriptionElement(descriptionElement);
136 viewer.expandToLevel(featureNodeContainer, 1);
137
138 }*/
139
140 if(object != null){
141 StructuredSelection selection = new StructuredSelection(object);
142 viewer.setSelection(selection, true);
143 }
144
145 super.changed(object);
146 }
147
148
149 /* (non-Javadoc)
150 * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#getInitialSelection()
151 */
152 /** {@inheritDoc} */
153 @Override
154 protected ISelection getInitialSelection() {
155 if(getEditor() != null){
156 return new StructuredSelection(getEditor().getEditorInput());
157 }
158
159 return super.getInitialSelection();
160 }
161
162 /** {@inheritDoc} */
163 @Override
164 public boolean postOperation(CdmBase objectAffectedByOperation) {
165 return super.postOperation(objectAffectedByOperation);
166 }
167
168 @Override
169 public void selectionChanged(IWorkbenchPart part, ISelection selection) {
170 if(EditorUtil.getActiveEditor() == null){
171 showEmptyPage();
172 return;
173 }
174
175 if(part instanceof BulkEditor){
176 showEmptyPage();
177 return;
178 }
179
180 if(part instanceof AbstractGraphKeyEditor){
181 showEmptyPage();
182 return;
183 }
184
185 if(part instanceof MultiPageTaxonEditor){
186 if(! part.equals(this.part)){
187 TaxonEditorInput input = (TaxonEditorInput)((IEditorPart) part).getEditorInput();
188 featureNodeContainerCache.clear();
189 //showViewer(part, new StructuredSelection(CdmStore.getService(IDescriptionService.class).listTaxonDescriptions(input.getTaxonNode().getTaxon(), null, null, null, null, null, null)));
190 showViewer(part, new StructuredSelection(input));
191 }
192 showViewer();
193 }
194
195 }
196
197 @Override
198 public boolean onComplete() {
199 return false;
200 }
201
202 /*@Override
203 public void showViewer(IWorkbenchPart part, IStructuredSelection selection) {
204 this.part = part;
205
206 Object element = selection.getFirstElement();
207
208 getViewer().setInput(descService.listTaxonDescriptions((Taxon) element, null, null, null, null, null, null));
209
210 showViewer();
211 }*/
212
213 @Override
214 public Viewer getViewer() {
215 return viewer;
216 }
217
218 private class ToggleDescriptionAction extends Action{
219 private boolean expanded;
220
221 public ToggleDescriptionAction(boolean expand){
222 super(null, Action.AS_PUSH_BUTTON);
223 expanded = expand;
224 setImageAndTooltip();
225 }
226
227 private void setImageAndTooltip(){
228 setImageDescriptor(new ImageDescriptor() {
229 @Override
230 public ImageData getImageData() {
231 setText(expanded ? "Collapse All" : "Expand All");
232 String resource = expanded ? ImageResources.COLLAPSE_ALL : ImageResources.EXPAND_ALL;
233 return ImageResources.getImage(resource).getImageData();
234 }
235 });
236
237 String toolTipText = expanded ? "Collapse all" : "Show all descriptive data";
238 setToolTipText(toolTipText);
239 }
240
241 @Override
242 public void run() {
243 if(expanded){
244 viewer.collapseAll();
245 }else{
246 viewer.expandAll();
247 }
248 setImageAndTooltip();
249 }
250 }
251
252
253
254 }