ref #6190 removing svn property place holder in first line of code - java files
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / key / polytomous / PolytomousKeyListEditor.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.taxeditor.editor.key.polytomous;
11
12 import java.util.List;
13
14 import org.eclipse.core.runtime.IProgressMonitor;
15 import org.eclipse.jface.action.GroupMarker;
16 import org.eclipse.jface.action.MenuManager;
17 import org.eclipse.jface.viewers.StructuredSelection;
18 import org.eclipse.jface.viewers.TableViewer;
19 import org.eclipse.jface.viewers.TableViewerColumn;
20 import org.eclipse.swt.SWT;
21 import org.eclipse.swt.events.MouseAdapter;
22 import org.eclipse.swt.events.MouseEvent;
23 import org.eclipse.swt.graphics.Point;
24 import org.eclipse.swt.graphics.Rectangle;
25 import org.eclipse.swt.layout.FillLayout;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Control;
28 import org.eclipse.swt.widgets.Menu;
29 import org.eclipse.swt.widgets.Table;
30 import org.eclipse.swt.widgets.TableItem;
31 import org.eclipse.ui.IEditorInput;
32 import org.eclipse.ui.IEditorSite;
33 import org.eclipse.ui.IWorkbenchActionConstants;
34 import org.eclipse.ui.PartInitException;
35 import org.eclipse.ui.PlatformUI;
36 import org.eclipse.ui.part.EditorPart;
37
38 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
39 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
40 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
41 import eu.etaxonomy.cdm.model.common.CdmBase;
42 import eu.etaxonomy.cdm.model.description.PolytomousKey;
43 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
44 import eu.etaxonomy.cdm.model.taxon.Taxon;
45 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
46 import eu.etaxonomy.taxeditor.editor.EditorUtil;
47 import eu.etaxonomy.taxeditor.editor.key.KeyEditor;
48 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
49 import eu.etaxonomy.taxeditor.model.MessagingUtils;
50
51 /**
52 * @author n.hoffmann
53 * @created Mar 31, 2011
54 * @version 1.0
55 */
56 public class PolytomousKeyListEditor extends EditorPart implements
57 IConversationEnabled, IDirtyMarkable,
58 IPolytomousKeyEditorPage {
59
60 private class LinkListener extends MouseAdapter {
61
62
63 /*
64 * (non-Javadoc)
65 *
66 * @see
67 * org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events
68 * .MouseEvent)
69 */
70 @Override
71 public void mouseUp(MouseEvent event) {
72
73 if(event.button == 1 && event.count == 2) {
74 Table table = (Table) event.widget;
75 // Determine where the mouse was clicked
76 Point point = new Point(event.x, event.y);
77
78 int selectedColumn = getSelectedColumn(table, point);
79
80 if (table == null || point == null ){
81 return;
82 }
83
84 TableItem item = getTableItem(
85 table, point);
86 PolytomousKeyNode node ;
87 if (item != null){
88 node =(PolytomousKeyNode) item.getData();
89 } else{
90 return;
91 }
92 if (selectedColumn == 4) {
93 PolytomousKeyNode linkData = getItemLinkData(node);
94 if (linkData != null) {
95 viewer.setSelection(new StructuredSelection(linkData), true);
96 }
97 }
98 if (selectedColumn == 5) {
99 Taxon taxon = getItemTaxon(node);
100 if (taxon != null) {
101 try {
102 EditorUtil.openTaxonBase((taxon).getUuid());
103 } catch (PartInitException e) {
104 MessagingUtils.error(getClass(), e);
105 }
106 }
107 }
108 }
109
110
111 }
112
113
114 private int getSelectedColumn(Table table, Point point) {
115 TableItem item = getTableItem(table, point);
116 if (item != null) {
117 for (int i = 0, n = table.getColumnCount(); i < n; i++) {
118 Rectangle rect = item.getBounds(i);
119 if (rect.contains(point)) {
120 // This is the selected column
121 return i;
122 }
123 }
124 }
125 return -1;
126 }
127
128 private TableItem getTableItem(Table table, Point point) {
129 return table.getItem(point);
130 }
131
132 /**
133 * @return
134 */
135 private PolytomousKeyNode getItemLinkData(PolytomousKeyNode node) {
136 return node.getChildren().isEmpty() ? null : node
137 .getChildAt(0);
138 }
139
140 /**
141 * @return
142 */
143 private Taxon getItemTaxon(PolytomousKeyNode node) {
144 return node.getTaxon();
145 }
146 }
147
148 public static final String ID = "eu.etaxonomy.taxeditor.editor.key.polytomous.list";
149
150 private TableViewer viewer;
151
152 private final KeyEditor editor;
153
154 public PolytomousKeyListEditor(KeyEditor editor) {
155 this.editor = editor;
156 }
157
158 /*
159 * (non-Javadoc)
160 *
161 * @see
162 * eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
163 * (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
164 */
165 @Override
166 public void update(CdmDataChangeMap arg0) {
167
168 }
169
170 /*
171 * (non-Javadoc)
172 *
173 * @see
174 * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
175 * ()
176 */
177 @Override
178 public ConversationHolder getConversationHolder() {
179 return ((PolytomousKeyEditorInput) getEditorInput())
180 .getConversationHolder();
181 }
182
183 /*
184 * (non-Javadoc)
185 *
186 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
187 * IProgressMonitor)
188 */
189 @Override
190 public void doSave(IProgressMonitor monitor) {
191 }
192
193 /*
194 * (non-Javadoc)
195 *
196 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
197 */
198 @Override
199 public void doSaveAs() {
200 }
201
202 /*
203 * (non-Javadoc)
204 *
205 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
206 * org.eclipse.ui.IEditorInput)
207 */
208 @Override
209 public void init(IEditorSite site, IEditorInput input)
210 throws PartInitException {
211 setSite(site);
212 setInput(input);
213 }
214
215 /*
216 * (non-Javadoc)
217 *
218 * @see org.eclipse.ui.part.EditorPart#isDirty()
219 */
220 @Override
221 public boolean isDirty() {
222 return false;
223 }
224
225 /*
226 * (non-Javadoc)
227 *
228 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
229 */
230 @Override
231 public boolean isSaveAsAllowed() {
232 return false;
233 }
234
235 /*
236 * (non-Javadoc)
237 *
238 * @see
239 * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
240 * .Composite)
241 */
242 @Override
243 public void createPartControl(Composite parent) {
244
245 FillLayout fillLayout = new FillLayout();
246 fillLayout.marginWidth = 0;
247 fillLayout.marginHeight = 0;
248 fillLayout.type = SWT.VERTICAL;
249 parent.setLayout(fillLayout);
250
251 viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
252 | SWT.V_SCROLL | SWT.FULL_SELECTION);
253 getSite().setSelectionProvider(viewer);
254
255 createColumns(viewer);
256 viewer.getControl().addMouseListener(new LinkListener());
257 viewer.setContentProvider(new PolytomousKeyListContentProvider());
258 viewer.setLabelProvider(new PolytomousKeyListLabelProvider());
259
260 createMenu();
261
262 PolytomousKey key = ((PolytomousKeyEditorInput) getEditorInput())
263 .getKey();
264 key = HibernateProxyHelper.deproxy(key, PolytomousKey.class);
265 key.setRoot(HibernateProxyHelper.deproxy(key.getRoot(), PolytomousKeyNode.class));
266 setPartName(key.getTitleCache());
267
268 viewer.setInput(getEditorInput());
269 }
270
271 public int getTableItemCount() {
272 if (viewer != null && viewer.getTable() != null) {
273 return viewer.getTable().getItemCount();
274 }
275
276 return 0;
277 }
278
279 public PolytomousKey getViewerInputKey() {
280 return ((PolytomousKeyEditorInput) viewer.getInput()).getKey();
281 }
282 private void createMenu() {
283 // register context menu
284 MenuManager menuManager = new MenuManager();
285 menuManager
286 .add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
287 getSite().registerContextMenu(ID, menuManager, viewer);
288
289 Control control = viewer.getControl();
290 Menu menu = menuManager.createContextMenu(control);
291 menuManager.setRemoveAllWhenShown(true);
292 control.setMenu(menu);
293 }
294
295 // This will create the columns for the table
296 private void createColumns(TableViewer viewer) {
297 Table table = viewer.getTable();
298 String[] titles = { "Node", "Question", "Edge", "Statement", "Link", "Taxon" };
299 int[] bounds = { 50, 200, 50, 200, 100, 200 };
300
301 for (int i = 0; i < titles.length; i++) {
302 TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
303 column.getColumn().setText(titles[i]);
304 column.getColumn().setWidth(bounds[i]);
305 column.getColumn().setResizable(true);
306 column.getColumn().setMoveable(true);
307 }
308 table.setHeaderVisible(true);
309 table.setLinesVisible(false);
310
311 }
312
313 /*
314 * (non-Javadoc)
315 *
316 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
317 */
318 @Override
319 public void setFocus() {
320 PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setFocus();
321 }
322
323 /*
324 * (non-Javadoc)
325 *
326 * @see
327 * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
328 * java.lang.Object)
329 */
330 @Override
331 public void changed(Object element) {
332 if(element != null) {
333 viewer.update(element, null);
334
335 }
336
337 if (element instanceof PolytomousKeyNode) {
338 List<PolytomousKeyNode> children = ((PolytomousKeyNode) element)
339 .getParent().getChildren();
340 for (PolytomousKeyNode child : children) {
341 viewer.update(child, null);
342 }
343 }
344
345 viewer.refresh();
346
347 }
348
349 /* (non-Javadoc)
350 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
351 */
352 @Override
353 public void forceDirty() {
354 changed(null);
355 }
356
357 /*
358 * (non-Javadoc)
359 *
360 * @see
361 * eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#postOperation(
362 * eu.etaxonomy.cdm.model.common.CdmBase)
363 */
364 @Override
365 public boolean postOperation(CdmBase objectAffectedByOperation) {
366 viewer.refresh();
367 getConversationHolder().bind();
368 getConversationHolder().commit(true);
369 editor.changed(objectAffectedByOperation);
370
371 if (objectAffectedByOperation != null) {
372 viewer.setSelection(new StructuredSelection(
373 objectAffectedByOperation), true);
374 }
375 return true;
376 }
377
378 /*
379 * (non-Javadoc)
380 *
381 * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#onComplete()
382 */
383 @Override
384 public boolean onComplete() {
385 return true;
386 }
387
388 }