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