Changes in details view get propagated to editor. Fixed a bug in MultilanguageTextEle...
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / key / polytomous / PolytomousKeyListEditor.java
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.key.polytomous;
12
13 import java.util.List;
14
15 import org.eclipse.core.runtime.IProgressMonitor;
16 import org.eclipse.jface.viewers.StructuredSelection;
17 import org.eclipse.jface.viewers.TableViewer;
18 import org.eclipse.jface.viewers.TableViewerColumn;
19 import org.eclipse.swt.SWT;
20 import org.eclipse.swt.events.MouseAdapter;
21 import org.eclipse.swt.events.MouseEvent;
22 import org.eclipse.swt.graphics.Point;
23 import org.eclipse.swt.graphics.Rectangle;
24 import org.eclipse.swt.layout.FillLayout;
25 import org.eclipse.swt.widgets.Composite;
26 import org.eclipse.swt.widgets.Table;
27 import org.eclipse.swt.widgets.TableItem;
28 import org.eclipse.ui.IEditorInput;
29 import org.eclipse.ui.IEditorSite;
30 import org.eclipse.ui.PartInitException;
31 import org.eclipse.ui.part.EditorPart;
32
33 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
34 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
35 import eu.etaxonomy.cdm.model.description.PolytomousKey;
36 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
37 import eu.etaxonomy.cdm.model.taxon.Taxon;
38 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
39 import eu.etaxonomy.taxeditor.editor.EditorUtil;
40 import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
41
42 /**
43 * @author n.hoffmann
44 * @created Mar 31, 2011
45 * @version 1.0
46 */
47 public class PolytomousKeyListEditor extends EditorPart implements
48 IConversationEnabled, IDirtyMarkableSelectionProvider {
49
50 private class LinkListener extends MouseAdapter {
51 /*
52 * (non-Javadoc)
53 *
54 * @see
55 * org.eclipse.swt.events.MouseAdapter#mouseUp(org.eclipse.swt.events
56 * .MouseEvent)
57 */
58 @Override
59 public void mouseUp(MouseEvent event) {
60
61 Table table = (Table) event.widget;
62 // Determine where the mouse was clicked
63 Point pt = new Point(event.x, event.y);
64
65 final TableItem item = table.getItem(pt);
66 if (item != null) {
67 // Determine which column was selected
68 int column = -1;
69 for (int i = 0, n = table.getColumnCount(); i < n; i++) {
70 Rectangle rect = item.getBounds(i);
71 if (rect.contains(pt)) {
72 // This is the selected column
73 column = i;
74 break;
75 }
76 }
77 if (column == 3) {
78 PolytomousKeyNode node = (PolytomousKeyNode) item.getData();
79 Object linkData = getItemLinkData(node);
80 if (linkData instanceof PolytomousKeyNode) {
81 viewer.setSelection(new StructuredSelection(linkData),
82 true);
83 } else if (linkData instanceof Taxon) {
84 try {
85 EditorUtil.openTaxonBase(((Taxon) linkData)
86 .getUuid());
87 } catch (PartInitException e) {
88 EditorUtil.error(getClass(), e);
89 }
90 }
91 }
92 }
93 }
94
95 /**
96 * @return
97 */
98 private Object getItemLinkData(PolytomousKeyNode node) {
99 return node.getChildren().isEmpty() ? node.getTaxon() : node
100 .getChildAt(0);
101 }
102 }
103
104 public static final String ID = "eu.etaxonomy.taxeditor.editor.key.polytomous.list";
105
106 private TableViewer viewer;
107
108 /*
109 * (non-Javadoc)
110 *
111 * @see
112 * eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
113 * (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
114 */
115 @Override
116 public void update(CdmDataChangeMap arg0) {
117
118 }
119
120 /*
121 * (non-Javadoc)
122 *
123 * @see
124 * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
125 * ()
126 */
127 @Override
128 public ConversationHolder getConversationHolder() {
129 return ((PolytomousKeyEditorInput) getEditorInput())
130 .getConversationHolder();
131 }
132
133 /*
134 * (non-Javadoc)
135 *
136 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
137 * IProgressMonitor)
138 */
139 @Override
140 public void doSave(IProgressMonitor monitor) {
141
142 }
143
144 /*
145 * (non-Javadoc)
146 *
147 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
148 */
149 @Override
150 public void doSaveAs() {
151 }
152
153 /*
154 * (non-Javadoc)
155 *
156 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
157 * org.eclipse.ui.IEditorInput)
158 */
159 @Override
160 public void init(IEditorSite site, IEditorInput input)
161 throws PartInitException {
162 setSite(site);
163 setInput(input);
164 }
165
166 /*
167 * (non-Javadoc)
168 *
169 * @see org.eclipse.ui.part.EditorPart#isDirty()
170 */
171 @Override
172 public boolean isDirty() {
173 // TODO Auto-generated method stub
174 return false;
175 }
176
177 /*
178 * (non-Javadoc)
179 *
180 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
181 */
182 @Override
183 public boolean isSaveAsAllowed() {
184 return false;
185 }
186
187 /*
188 * (non-Javadoc)
189 *
190 * @see
191 * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
192 * .Composite)
193 */
194 @Override
195 public void createPartControl(Composite parent) {
196
197 FillLayout fillLayout = new FillLayout();
198 fillLayout.marginWidth = 0;
199 fillLayout.marginHeight = 0;
200 fillLayout.type = SWT.VERTICAL;
201 parent.setLayout(fillLayout);
202
203 viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
204 | SWT.V_SCROLL | SWT.FULL_SELECTION);
205 getSite().setSelectionProvider(viewer);
206
207 createColumns(viewer);
208 viewer.getControl().addMouseListener(new LinkListener());
209 viewer.setContentProvider(new PolytomousKeyListContentProvider());
210 viewer.setLabelProvider(new PolytomousKeyListLabelProvider());
211
212 // viewer.getControl().setLayoutData(CdmFormFactory.FILL());
213
214 PolytomousKey key = ((PolytomousKeyEditorInput) getEditorInput())
215 .getKey();
216
217 viewer.setInput(key);
218 }
219
220 // This will create the columns for the table
221 private void createColumns(TableViewer viewer) {
222 Table table = viewer.getTable();
223 String[] titles = { "Node Number", "Question", "Statement", "Link" };
224 int[] bounds = { 50, 200, 200, 100 };
225
226 for (int i = 0; i < titles.length; i++) {
227 TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
228 column.getColumn().setText(titles[i]);
229 column.getColumn().setWidth(bounds[i]);
230 column.getColumn().setResizable(true);
231 column.getColumn().setMoveable(true);
232 }
233 table.setHeaderVisible(true);
234 table.setLinesVisible(false);
235
236 }
237
238 /*
239 * (non-Javadoc)
240 *
241 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
242 */
243 @Override
244 public void setFocus() {
245 setPartName("Test");
246 }
247
248 /*
249 * (non-Javadoc)
250 *
251 * @see
252 * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
253 * java.lang.Object)
254 */
255 @Override
256 public void changed(Object element) {
257 viewer.update(element, null);
258
259 if (element instanceof PolytomousKeyNode) {
260 List<PolytomousKeyNode> children = ((PolytomousKeyNode) element)
261 .getParent().getChildren();
262 for (PolytomousKeyNode child : children) {
263 viewer.update(child, null);
264 }
265 }
266
267 }
268
269 }