1 package eu
.etaxonomy
.taxeditor
.editor
.view
.derivate
;
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
;
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
;
31 * Displays the derivate hierarchy of all derivates belonging to a taxon.
34 public class DerivateView
extends EditorPart
implements IPartContentHasFactualData
, IDirtyMarkableSelectionProvider
, IConversationEnabled
, IPartContentHasDetails
, IPartContentHasSupplementalData
{
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";
39 private ConversationHolder conversation
;
41 protected TreeViewer viewer
;
43 private boolean isDirty
;
46 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
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
);
58 MenuManager menuManager
= new MenuManager();
60 getSite().registerContextMenu(menuManager
, viewer
);
62 Control control
= viewer
.getControl();
63 Menu menu
= menuManager
.createContextMenu(control
);
65 control
.setMenu(menu
);
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
));
78 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
81 public void doSave(IProgressMonitor monitor
) {
82 monitor
.beginTask("Saving Derivates", 3);
83 if (!conversation
.isBound()) {
88 // commit the conversation and start a new transaction immediately
89 conversation
.commit(true);
95 firePropertyChange(PROP_DIRTY
);
99 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
102 public void doSaveAs() {
103 // TODO Auto-generated method stub
108 * @see org.eclipse.ui.part.EditorPart#getTitleToolTip()
111 public String
getTitleToolTip() {
112 return "Derivate View";
116 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
119 public void init(IEditorSite site
, IEditorInput input
) throws PartInitException
{
122 if(input
instanceof DerivateViewEditorInput
){
123 conversation
= ((DerivateViewEditorInput
) input
).getConversationHolder();
128 * @see org.eclipse.ui.part.EditorPart#isDirty()
131 public boolean isDirty() {
136 * @param isDirty the isDirty to set
138 public void setDirty(boolean isDirty
) {
139 this.isDirty
= isDirty
;
143 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
146 public boolean isSaveAsAllowed() {
147 // TODO Auto-generated method stub
153 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
156 public void setFocus() {
157 //make sure to bind again if maybe in another view the conversation was unbound
158 if(!conversation
.isBound()){
164 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
167 public void update(CdmDataChangeMap changeEvents
) {
168 // TODO Auto-generated method stub
173 * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
176 public ConversationHolder
getConversationHolder() {
181 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(java.lang.Object)
184 public void changed(Object element
) {
185 viewer
.setInput(getEditorInput());
187 firePropertyChange(IEditorPart
.PROP_DIRTY
);