merge-update from trunk
[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.model.occurrence.SpecimenOrObservationBase;
23 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
24 import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
25 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
26 import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
27 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
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 SpecimenOrObservationBase<?> specimen = ((DerivateViewEditorInput) editorInput).getDerivate();
71 FieldUnit fieldUnit = ((DerivateViewEditorInput) editorInput).getFieldUnit();
72 setPartName(fieldUnit.toString());
73 viewer.setSelection(new StructuredSelection(specimen));
74 }
75 }
76
77 /* (non-Javadoc)
78 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
79 */
80 @Override
81 public void doSave(IProgressMonitor monitor) {
82 monitor.beginTask("Saving Derivates", 3);
83 if (!conversation.isBound()) {
84 conversation.bind();
85 }
86 monitor.worked(1);
87
88 // commit the conversation and start a new transaction immediately
89 conversation.commit(true);
90 monitor.worked(1);
91
92 this.setDirty(false);
93 monitor.worked(1);
94 monitor.done();
95 firePropertyChange(PROP_DIRTY);
96 }
97
98 /* (non-Javadoc)
99 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
100 */
101 @Override
102 public void doSaveAs() {
103 // TODO Auto-generated method stub
104
105 }
106
107 /* (non-Javadoc)
108 * @see org.eclipse.ui.part.EditorPart#getTitleToolTip()
109 */
110 @Override
111 public String getTitleToolTip() {
112 return "Derivate View";
113 }
114
115 /* (non-Javadoc)
116 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
117 */
118 @Override
119 public void init(IEditorSite site, IEditorInput input) throws PartInitException {
120 setSite(site);
121 setInput(input);
122 if(input instanceof DerivateViewEditorInput){
123 conversation = ((DerivateViewEditorInput) input).getConversationHolder();
124 }
125 }
126
127 /* (non-Javadoc)
128 * @see org.eclipse.ui.part.EditorPart#isDirty()
129 */
130 @Override
131 public boolean isDirty() {
132 return isDirty;
133 }
134
135 /**
136 * @param isDirty the isDirty to set
137 */
138 public void setDirty(boolean isDirty) {
139 this.isDirty = isDirty;
140 }
141
142 /* (non-Javadoc)
143 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
144 */
145 @Override
146 public boolean isSaveAsAllowed() {
147 // TODO Auto-generated method stub
148 return false;
149 }
150
151
152 /* (non-Javadoc)
153 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
154 */
155 @Override
156 public void setFocus() {
157 //make sure to bind again if maybe in another view the conversation was unbound
158 if(!conversation.isBound()){
159 conversation.bind();
160 }
161 }
162
163 /* (non-Javadoc)
164 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
165 */
166 @Override
167 public void update(CdmDataChangeMap changeEvents) {
168 // TODO Auto-generated method stub
169
170 }
171
172 /* (non-Javadoc)
173 * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
174 */
175 @Override
176 public ConversationHolder getConversationHolder() {
177 return conversation;
178 }
179
180 /* (non-Javadoc)
181 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(java.lang.Object)
182 */
183 @Override
184 public void changed(Object element) {
185 viewer.setInput(getEditorInput());
186 setDirty(true);
187 firePropertyChange(IEditorPart.PROP_DIRTY);
188 }
189
190 }