ba4c5a84caad65d7af922f0a49128c5a252da51b
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / DerivateView.java
1 package eu.etaxonomy.taxeditor.editor.view.derivate;
2
3 import org.eclipse.core.runtime.IProgressMonitor;
4 import org.eclipse.jface.action.MenuManager;
5 import org.eclipse.jface.viewers.AbstractTreeViewer;
6 import org.eclipse.jface.viewers.StructuredSelection;
7 import org.eclipse.jface.viewers.TreeViewer;
8 import org.eclipse.swt.SWT;
9 import org.eclipse.swt.widgets.Composite;
10 import org.eclipse.swt.widgets.Control;
11 import org.eclipse.swt.widgets.Menu;
12 import org.eclipse.swt.widgets.Tree;
13 import org.eclipse.ui.IEditorInput;
14 import org.eclipse.ui.IEditorPart;
15 import org.eclipse.ui.IEditorSite;
16 import org.eclipse.ui.PartInitException;
17 import org.eclipse.ui.part.EditorPart;
18
19 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
20 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
21 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
22 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
23 import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
24 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
25 import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
26 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
27 import eu.etaxonomy.taxeditor.store.CdmStore;
28 import eu.etaxonomy.taxeditor.ui.campanula.derivatesearch.DerivateLabelProvider;
29
30 /**
31 * Displays the derivate hierarchy of all derivates belonging to a taxon.
32 *
33 */
34 public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkableSelectionProvider, IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData {
35
36 /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.view.desc"{trunked}</code> */
37 public static final String ID = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView";
38
39 private ConversationHolder conversation;
40
41 protected TreeViewer viewer;
42
43 private boolean isDirty;
44
45 /* (non-Javadoc)
46 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
47 */
48 @Override
49 public void createPartControl(Composite parent) {
50 viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION));
51 viewer.setContentProvider(new DerivateContentProvider());
52 viewer.setLabelProvider(new DerivateLabelProvider());
53 viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
54 // Propagate selection from viewer
55 getSite().setSelectionProvider(viewer);
56
57 //create context menu
58 MenuManager menuManager = new MenuManager();
59
60 getSite().registerContextMenu(menuManager, viewer);
61
62 Control control = viewer.getControl();
63 Menu menu = menuManager.createContextMenu(control);
64
65 control.setMenu(menu);
66
67 IEditorInput editorInput = getEditorInput();
68 viewer.setInput(editorInput);
69 if(editorInput instanceof DerivateViewEditorInput){
70 FieldUnit fieldUnit = ((DerivateViewEditorInput) editorInput).getFieldUnit();
71 setPartName(fieldUnit.toString());
72 viewer.setSelection(new StructuredSelection(fieldUnit));
73 }
74 }
75
76 /* (non-Javadoc)
77 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
78 */
79 @Override
80 public void doSave(IProgressMonitor monitor) {
81 monitor.beginTask("Saving Derivates", 3);
82 if (!conversation.isBound()) {
83 conversation.bind();
84 }
85 monitor.worked(1);
86
87 // commit the conversation and start a new transaction immediately
88 conversation.commit(true);
89 monitor.worked(1);
90
91 this.setDirty(false);
92 monitor.worked(1);
93 monitor.done();
94 firePropertyChange(PROP_DIRTY);
95 }
96
97 /* (non-Javadoc)
98 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
99 */
100 @Override
101 public void doSaveAs() {
102 // TODO Auto-generated method stub
103
104 }
105
106 /* (non-Javadoc)
107 * @see org.eclipse.ui.part.EditorPart#getTitleToolTip()
108 */
109 @Override
110 public String getTitleToolTip() {
111 return "Derivate View";
112 }
113
114 /* (non-Javadoc)
115 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
116 */
117 @Override
118 public void init(IEditorSite site, IEditorInput input) throws PartInitException {
119 conversation = CdmStore.createConversation();
120 setSite(site);
121 setInput(input);
122 }
123
124 /* (non-Javadoc)
125 * @see org.eclipse.ui.part.EditorPart#isDirty()
126 */
127 @Override
128 public boolean isDirty() {
129 return isDirty;
130 }
131
132 /**
133 * @param isDirty the isDirty to set
134 */
135 public void setDirty(boolean isDirty) {
136 this.isDirty = isDirty;
137 }
138
139 /* (non-Javadoc)
140 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
141 */
142 @Override
143 public boolean isSaveAsAllowed() {
144 // TODO Auto-generated method stub
145 return false;
146 }
147
148
149 /* (non-Javadoc)
150 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
151 */
152 @Override
153 public void setFocus() {
154 // TODO Auto-generated method stub
155
156 }
157
158 /* (non-Javadoc)
159 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
160 */
161 @Override
162 public void update(CdmDataChangeMap changeEvents) {
163 // TODO Auto-generated method stub
164
165 }
166
167 /* (non-Javadoc)
168 * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
169 */
170 @Override
171 public ConversationHolder getConversationHolder() {
172 return conversation;
173 }
174
175 /* (non-Javadoc)
176 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(java.lang.Object)
177 */
178 @Override
179 public void changed(Object element) {
180 viewer.setInput(getEditorInput());
181 setDirty(true);
182 firePropertyChange(IEditorPart.PROP_DIRTY);
183 }
184
185 }