325fd55df55f81565345eea508d770e4d0e2c579
[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.SpecimenOrObservationBase;
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.ui.campanula.derivatesearch.DerivateLabelProvider;
28
29 /**
30 * Displays the derivate hierarchy of all derivates belonging to a taxon.
31 *
32 */
33 public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkableSelectionProvider, IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData {
34
35 /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.view.desc"{trunked}</code> */
36 public static final String ID = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView";
37
38 private ConversationHolder conversation;
39
40 protected TreeViewer viewer;
41
42 private boolean isDirty;
43
44 /* (non-Javadoc)
45 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
46 */
47 @Override
48 public void createPartControl(Composite parent) {
49 viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION));
50 viewer.setContentProvider(new DerivateContentProvider());
51 viewer.setLabelProvider(new DerivateLabelProvider());
52 viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
53 // Propagate selection from viewer
54 getSite().setSelectionProvider(viewer);
55
56 //create context menu
57 MenuManager menuManager = new MenuManager();
58
59 getSite().registerContextMenu(menuManager, viewer);
60
61 Control control = viewer.getControl();
62 Menu menu = menuManager.createContextMenu(control);
63
64 control.setMenu(menu);
65
66 IEditorInput editorInput = getEditorInput();
67 viewer.setInput(editorInput);
68 if(editorInput instanceof DerivateViewEditorInput){
69 SpecimenOrObservationBase<?> specimen = ((DerivateViewEditorInput) editorInput).getDerivate();
70 SpecimenOrObservationBase rootElement = ((DerivateViewEditorInput) editorInput).getRootElement();
71 setPartName(rootElement.toString());
72 viewer.setSelection(new StructuredSelection(specimen));
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 setSite(site);
120 setInput(input);
121 if(input instanceof DerivateViewEditorInput){
122 conversation = ((DerivateViewEditorInput) input).getConversationHolder();
123 }
124 }
125
126 /* (non-Javadoc)
127 * @see org.eclipse.ui.part.EditorPart#isDirty()
128 */
129 @Override
130 public boolean isDirty() {
131 return isDirty;
132 }
133
134 /**
135 * @param isDirty the isDirty to set
136 */
137 public void setDirty(boolean isDirty) {
138 this.isDirty = isDirty;
139 }
140
141 /* (non-Javadoc)
142 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
143 */
144 @Override
145 public boolean isSaveAsAllowed() {
146 // TODO Auto-generated method stub
147 return false;
148 }
149
150
151 /* (non-Javadoc)
152 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
153 */
154 @Override
155 public void setFocus() {
156 //make sure to bind again if maybe in another view the conversation was unbound
157 if(!conversation.isBound()){
158 conversation.bind();
159 }
160 }
161
162 /* (non-Javadoc)
163 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
164 */
165 @Override
166 public void update(CdmDataChangeMap changeEvents) {
167 // TODO Auto-generated method stub
168
169 }
170
171 /* (non-Javadoc)
172 * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
173 */
174 @Override
175 public ConversationHolder getConversationHolder() {
176 return conversation;
177 }
178
179 /* (non-Javadoc)
180 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(java.lang.Object)
181 */
182 @Override
183 public void changed(Object element) {
184 viewer.setInput(getEditorInput());
185 setDirty(true);
186 firePropertyChange(IEditorPart.PROP_DIRTY);
187 }
188
189 }