ref #6190 removing svn property place holder in first line of code - java files
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / editor / definedterm / DefinedTermEditor.java
1 /**
2 * Copyright (C) 2009 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.taxeditor.editor.definedterm;
10
11 import org.eclipse.core.runtime.IProgressMonitor;
12 import org.eclipse.jface.action.GroupMarker;
13 import org.eclipse.jface.action.MenuManager;
14 import org.eclipse.jface.viewers.ISelection;
15 import org.eclipse.jface.viewers.StructuredSelection;
16 import org.eclipse.jface.viewers.TreeViewer;
17 import org.eclipse.jface.viewers.Viewer;
18 import org.eclipse.jface.viewers.ViewerSorter;
19 import org.eclipse.swt.SWT;
20 import org.eclipse.swt.dnd.DND;
21 import org.eclipse.swt.dnd.Transfer;
22 import org.eclipse.swt.layout.FillLayout;
23 import org.eclipse.swt.widgets.Composite;
24 import org.eclipse.swt.widgets.Control;
25 import org.eclipse.swt.widgets.Menu;
26 import org.eclipse.ui.IEditorInput;
27 import org.eclipse.ui.IEditorSite;
28 import org.eclipse.ui.ISelectionListener;
29 import org.eclipse.ui.ISelectionService;
30 import org.eclipse.ui.IWorkbenchActionConstants;
31 import org.eclipse.ui.IWorkbenchPart;
32 import org.eclipse.ui.PartInitException;
33 import org.eclipse.ui.part.EditorPart;
34
35 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
36 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
37 import eu.etaxonomy.cdm.model.common.CdmBase;
38 import eu.etaxonomy.cdm.model.common.OrderedTermBase;
39 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
40 import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;
41 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
42 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
43 import eu.etaxonomy.taxeditor.store.CdmStore;
44 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
45
46 /**
47 * @author l.morris
48 * @date 3 Jan 2012
49 *
50 */
51 public class DefinedTermEditor extends EditorPart implements IConversationEnabled, ISelectionListener, IDirtyMarkable, IPostOperationEnabled {
52
53 public static final String ID = "eu.etaxonomy.taxeditor.editor.definedTerm";
54
55 public static final String OPEN_COMMAND_ID = "eu.etaxonomy.taxeditor.store.openDefinedTermEditor";
56
57 protected TreeViewer viewer;
58 protected ConversationHolder conversation;
59 private ISelectionService selectionService;
60 private boolean dirty;
61
62
63 private final int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
64 /**
65 *
66 */
67 public DefinedTermEditor() {
68 super();
69 conversation = CdmStore.createConversation();
70 }
71
72 @Override
73 public void createPartControl(Composite parent) {
74
75 // parent.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLUE));
76
77 FillLayout layout = new FillLayout();
78 layout.marginHeight = 0;
79 layout.marginWidth = 0;
80 layout.type = SWT.VERTICAL;
81
82 parent.setLayout(layout);
83 viewer = new TreeViewer(parent);
84 viewer.getControl().setLayoutData(LayoutConstants.FILL());
85 viewer.setContentProvider(new TermContentProvider());
86 viewer.setLabelProvider(new TermLabelProvider());
87 viewer.setSorter(new DefinedTermSorter());
88
89 Transfer[] transfers = new Transfer[] { TermTransfer.getInstance() };
90 viewer.addDragSupport(dndOperations, transfers, new DefinedTermDragListener(viewer));
91 viewer.addDropSupport(dndOperations, transfers, new DefinedTermDropAdapter(this));
92
93 getDefinedTermEditorInput().initialiseVocabularies();
94 viewer.setInput(getDefinedTermEditorInput().getVocabularies());
95
96 getSite().setSelectionProvider(viewer);
97
98 selectionService = getSite().getWorkbenchWindow().getSelectionService();
99 selectionService.addSelectionListener(this);
100
101 setPartName(getEditorInput().getName());
102 createMenu();
103 }
104
105
106
107
108 /**
109 *
110 */
111 public TermEditorInput getDefinedTermEditorInput() {
112 return (TermEditorInput) getEditorInput();
113 }
114
115 /* (non-Javadoc)
116 * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
117 */
118 @Override
119 public boolean postOperation(CdmBase objectAffectedByOperation) {
120
121
122 viewer.refresh();
123
124 if(objectAffectedByOperation != null){
125 viewer.setSelection(new StructuredSelection(objectAffectedByOperation));
126 }
127 setDirty(true);
128
129 return true;
130 }
131
132 private void createMenu() {
133 // register context menu
134 MenuManager menuManager = new MenuManager();
135 menuManager
136 .add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
137 getSite().registerContextMenu(ID, menuManager, viewer);
138
139 Control control = viewer.getControl();
140 Menu menu = menuManager.createContextMenu(control);
141 control.setMenu(menu);
142 }
143
144
145
146
147 @Override
148 public void doSave(IProgressMonitor monitor) {
149 getConversationHolder().commit();
150 getDefinedTermEditorInput().merge();
151 setDirty(false);
152 getDefinedTermEditorInput().initialiseVocabularies();
153 viewer.refresh();
154 }
155
156
157 @Override
158 public void doSaveAs() {}
159
160 @Override
161 public void init(IEditorSite site, IEditorInput input) throws PartInitException {
162 setSite(site);
163 setInput(input);
164
165 }
166
167 @Override
168 public boolean isDirty() {
169 return dirty;
170 }
171
172 @Override
173 public boolean isSaveAsAllowed() {
174 return false;
175 }
176
177 @Override
178 public void setFocus() {
179 viewer.getControl().setFocus();
180 getConversationHolder().bind();
181 getDefinedTermEditorInput().bind();
182 }
183
184 @Override
185 public void update(CdmDataChangeMap changeEvents) {
186 // TODO Auto-generated method stub
187
188 }
189
190 @Override
191 public ConversationHolder getConversationHolder() {
192 return conversation;
193 }
194
195 @Override
196 public void selectionChanged(IWorkbenchPart part, ISelection selection) {
197 // TODO Auto-generated method stub
198
199 }
200
201 @Override
202 public void changed(Object element) {
203 dirty = true;
204 setDirty(true);
205 viewer.update(element, null);
206 }
207
208 /* (non-Javadoc)
209 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
210 */
211 @Override
212 public void forceDirty() {
213 changed(null);
214 }
215
216 /**
217 * @param dirty the dirty to set
218 */
219 public void setDirty(boolean dirty) {
220 this.dirty = dirty;
221 firePropertyChange(PROP_DIRTY);
222 }
223
224 @Override
225 public boolean onComplete() {
226 // TODO Auto-generated method stub
227 return false;
228 }
229
230 /**
231 *
232 */
233 public TreeViewer getViewer() {
234 return viewer;
235 }
236
237 private class DefinedTermSorter extends ViewerSorter {
238
239 @Override
240 public int compare(Viewer viewer, Object e1, Object e2) {
241 // the comparison value in this method determines the
242 // location <-> add term method used in the MoveDefinedTermOperation
243 // execute call
244 if(e1 instanceof OrderedTermBase && e2 instanceof OrderedTermBase) {
245 OrderedTermBase otbe1 = (OrderedTermBase)e1;
246 OrderedTermBase otbe2 = (OrderedTermBase)e2;
247 if(otbe1.getOrderIndex() == otbe2.getOrderIndex()) {
248 return 0;
249 } else if (otbe1.getOrderIndex() < otbe2.getOrderIndex()){
250 return -1;
251 } else{
252 return 1;
253 }
254 } else {
255 return super.compare(viewer, e1, e2);
256 }
257 }
258 }
259
260 @Override
261 public void dispose() {
262 getDefinedTermEditorInput().dispose();
263 super.dispose();
264 }
265 }