f79098099c7b53ca7947df9d3a808b74abc02547
[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.util.LocalSelectionTransfer;
6 import org.eclipse.jface.viewers.AbstractTreeViewer;
7 import org.eclipse.jface.viewers.StructuredSelection;
8 import org.eclipse.jface.viewers.TreeNode;
9 import org.eclipse.jface.viewers.TreeViewer;
10 import org.eclipse.swt.SWT;
11 import org.eclipse.swt.dnd.DND;
12 import org.eclipse.swt.dnd.Transfer;
13 import org.eclipse.swt.widgets.Composite;
14 import org.eclipse.swt.widgets.Control;
15 import org.eclipse.swt.widgets.Menu;
16 import org.eclipse.swt.widgets.Tree;
17 import org.eclipse.ui.IEditorInput;
18 import org.eclipse.ui.IEditorPart;
19 import org.eclipse.ui.IEditorSite;
20 import org.eclipse.ui.PartInitException;
21 import org.eclipse.ui.part.EditorPart;
22
23 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
24 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
25 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
26 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
27 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
28 import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
29 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
30 import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
31 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
32 import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
33
34 /**
35 * Displays the derivate hierarchy of all derivates having one single {@link FieldUnit} as root.
36 *
37 */
38 public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkableSelectionProvider, IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData {
39
40 public static final String ID = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView";
41
42 private ConversationHolder conversation;
43
44 private TreeViewer viewer;
45
46 private boolean isDirty;
47
48 private final int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
49
50 /* (non-Javadoc)
51 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
52 */
53 @Override
54 public void createPartControl(Composite parent) {
55 viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION));
56 viewer.setContentProvider(new DerivateContentProvider());
57 viewer.setLabelProvider(new DerivateLabelProvider());
58 viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
59 // Propagate selection from viewer
60 getSite().setSelectionProvider(viewer);
61
62 //create context menu
63 MenuManager menuManager = new MenuManager();
64 getSite().registerContextMenu(menuManager, viewer);
65 Control control = viewer.getControl();
66 Menu menu = menuManager.createContextMenu(control);
67 control.setMenu(menu);
68
69 IEditorInput editorInput = getEditorInput();
70 viewer.setInput(editorInput);
71 if(editorInput instanceof DerivateViewEditorInput){
72 SpecimenOrObservationBase<?> specimen = ((DerivateViewEditorInput) editorInput).getDerivate();
73 SpecimenOrObservationBase<?> rootElement = ((DerivateViewEditorInput) editorInput).getRootElement();
74 setPartName(rootElement.toString());
75 viewer.setSelection(new StructuredSelection(new TreeNode(specimen)));
76 }
77
78 //add drag'n'drop support
79 Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(),};
80 viewer.addDragSupport(dndOperations, transfers, new DerivateDragListener(viewer));
81 viewer.addDropSupport(dndOperations, transfers, new DerivateDropListener(this));
82 }
83
84 /* (non-Javadoc)
85 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
86 */
87 @Override
88 public void doSave(IProgressMonitor monitor) {
89 monitor.beginTask("Saving Derivates", 3);
90 if (!conversation.isBound()) {
91 conversation.bind();
92 }
93 monitor.worked(1);
94
95 // commit the conversation and start a new transaction immediately
96 conversation.commit(true);
97 monitor.worked(1);
98
99 this.setDirty(false);
100 monitor.worked(1);
101 monitor.done();
102 firePropertyChange(PROP_DIRTY);
103 }
104
105 /* (non-Javadoc)
106 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
107 */
108 @Override
109 public void doSaveAs() {
110 // TODO Auto-generated method stub
111
112 }
113
114 /* (non-Javadoc)
115 * @see org.eclipse.ui.part.EditorPart#getTitleToolTip()
116 */
117 @Override
118 public String getTitleToolTip() {
119 return "Derivate View";
120 }
121
122 /* (non-Javadoc)
123 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
124 */
125 @Override
126 public void init(IEditorSite site, IEditorInput input) throws PartInitException {
127 setSite(site);
128 setInput(input);
129 if(input instanceof DerivateViewEditorInput){
130 conversation = ((DerivateViewEditorInput) input).getConversationHolder();
131 }
132 }
133
134 /* (non-Javadoc)
135 * @see org.eclipse.ui.part.EditorPart#isDirty()
136 */
137 @Override
138 public boolean isDirty() {
139 return isDirty;
140 }
141
142 /**
143 * @param isDirty the isDirty to set
144 */
145 public void setDirty(boolean isDirty) {
146 this.isDirty = isDirty;
147 }
148
149 /* (non-Javadoc)
150 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
151 */
152 @Override
153 public boolean isSaveAsAllowed() {
154 // TODO Auto-generated method stub
155 return false;
156 }
157
158
159 /* (non-Javadoc)
160 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
161 */
162 @Override
163 public void setFocus() {
164 //make sure to bind again if maybe in another view the conversation was unbound
165 if(!conversation.isBound()){
166 conversation.bind();
167 }
168 }
169
170 /* (non-Javadoc)
171 * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
172 */
173 @Override
174 public void update(CdmDataChangeMap changeEvents) {
175 // TODO Auto-generated method stub
176
177 }
178
179 /* (non-Javadoc)
180 * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
181 */
182 @Override
183 public ConversationHolder getConversationHolder() {
184 return conversation;
185 }
186
187 /**
188 * @return the viewer
189 */
190 public TreeViewer getViewer() {
191 return viewer;
192 }
193
194 /* (non-Javadoc)
195 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(java.lang.Object)
196 */
197 @Override
198 public void changed(Object element) {
199 viewer.setInput(getEditorInput());
200 setDirty(true);
201 firePropertyChange(IEditorPart.PROP_DIRTY);
202 }
203
204 }