Project

General

Profile

Download (7.23 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
 * Copyright (C) 2009 EDIT
4
 * European Distributed Institute of Taxonomy
5
 * http://www.e-taxonomy.eu
6
 *
7
 * The contents of this file are subject to the Mozilla Public License Version 1.1
8
 * See LICENSE.TXT at the top of this package for the full license terms.
9
 */
10
package eu.etaxonomy.taxeditor.editor.definedterm;
11

    
12
import org.eclipse.core.runtime.IProgressMonitor;
13
import org.eclipse.jface.action.GroupMarker;
14
import org.eclipse.jface.action.MenuManager;
15
import org.eclipse.jface.viewers.ISelection;
16
import org.eclipse.jface.viewers.StructuredSelection;
17
import org.eclipse.jface.viewers.TreeViewer;
18
import org.eclipse.jface.viewers.Viewer;
19
import org.eclipse.jface.viewers.ViewerSorter;
20
import org.eclipse.swt.SWT;
21
import org.eclipse.swt.dnd.DND;
22
import org.eclipse.swt.dnd.Transfer;
23
import org.eclipse.swt.layout.FillLayout;
24
import org.eclipse.swt.widgets.Composite;
25
import org.eclipse.swt.widgets.Control;
26
import org.eclipse.swt.widgets.Menu;
27
import org.eclipse.ui.IEditorInput;
28
import org.eclipse.ui.IEditorSite;
29
import org.eclipse.ui.ISelectionListener;
30
import org.eclipse.ui.ISelectionService;
31
import org.eclipse.ui.IWorkbenchActionConstants;
32
import org.eclipse.ui.IWorkbenchPart;
33
import org.eclipse.ui.PartInitException;
34
import org.eclipse.ui.part.EditorPart;
35

    
36
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
37
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
38
import eu.etaxonomy.cdm.model.common.CdmBase;
39
import eu.etaxonomy.cdm.model.common.OrderedTermBase;
40
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
41
import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;
42
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
43
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
44
import eu.etaxonomy.taxeditor.store.CdmStore;
45
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
46

    
47
/**
48
 * @author l.morris
49
 * @date 3 Jan 2012
50
 *
51
 */
52
public class DefinedTermEditor extends EditorPart implements IConversationEnabled, ISelectionListener, IDirtyMarkable, IPostOperationEnabled {
53

    
54
	public static final String ID = "eu.etaxonomy.taxeditor.editor.definedTerm";
55

    
56
	public static final String OPEN_COMMAND_ID = "eu.etaxonomy.taxeditor.store.openDefinedTermEditor";
57

    
58
	protected TreeViewer viewer;
59
	protected ConversationHolder conversation;
60
	private ISelectionService selectionService;
61
	private boolean dirty;
62

    
63

    
64
	private final int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
65
	/**
66
	 *
67
	 */
68
	public DefinedTermEditor() {
69
		super();
70
		conversation = CdmStore.createConversation();
71
	}
72

    
73
	@Override
74
	public void createPartControl(Composite parent) {
75

    
76
	//		parent.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLUE));
77

    
78
			FillLayout layout = new FillLayout();
79
			layout.marginHeight = 0;
80
			layout.marginWidth = 0;
81
			layout.type = SWT.VERTICAL;
82

    
83
			parent.setLayout(layout);
84
			viewer = new TreeViewer(parent);
85
			viewer.getControl().setLayoutData(LayoutConstants.FILL());
86
			viewer.setContentProvider(new TermContentProvider());
87
			viewer.setLabelProvider(new TermLabelProvider());
88
			viewer.setSorter(new DefinedTermSorter());
89

    
90
			Transfer[] transfers = new Transfer[] { TermTransfer.getInstance() };
91
			viewer.addDragSupport(dndOperations, transfers, new DefinedTermDragListener(viewer));
92
			viewer.addDropSupport(dndOperations, transfers, new DefinedTermDropAdapter(this));
93

    
94
			getDefinedTermEditorInput().initialiseVocabularies();
95
			viewer.setInput(getDefinedTermEditorInput().getVocabularies());
96

    
97
			getSite().setSelectionProvider(viewer);
98

    
99
			selectionService = getSite().getWorkbenchWindow().getSelectionService();
100
			selectionService.addSelectionListener(this);
101

    
102
			setPartName(getEditorInput().getName());
103
			createMenu();
104
		}
105

    
106

    
107

    
108

    
109
	/**
110
	 *
111
	 */
112
	public TermEditorInput getDefinedTermEditorInput() {
113
		return (TermEditorInput) getEditorInput();
114
	}
115

    
116
	/* (non-Javadoc)
117
	 * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
118
	 */
119
	@Override
120
	public boolean postOperation(CdmBase objectAffectedByOperation) {
121

    
122

    
123
		viewer.refresh();
124

    
125
		if(objectAffectedByOperation != null){
126
			viewer.setSelection(new StructuredSelection(objectAffectedByOperation));
127
		}
128
		setDirty(true);
129

    
130
		return true;
131
	}
132

    
133
	private void createMenu() {
134
		// register context menu
135
		MenuManager menuManager = new MenuManager();
136
		menuManager
137
				.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
138
		getSite().registerContextMenu(ID, menuManager, viewer);
139

    
140
		Control control = viewer.getControl();
141
		Menu menu = menuManager.createContextMenu(control);
142
		control.setMenu(menu);
143
	}
144

    
145

    
146

    
147

    
148
	@Override
149
	public void doSave(IProgressMonitor monitor) {
150
		getConversationHolder().commit();
151
		getDefinedTermEditorInput().merge();
152
		setDirty(false);
153
		getDefinedTermEditorInput().initialiseVocabularies();
154
		viewer.refresh();
155
	}
156

    
157

    
158
	@Override
159
	public void doSaveAs() {}
160

    
161
	@Override
162
	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
163
		setSite(site);
164
		setInput(input);
165

    
166
	}
167

    
168
	@Override
169
	public boolean isDirty() {
170
		return dirty;
171
	}
172

    
173
	@Override
174
	public boolean isSaveAsAllowed() {
175
		return false;
176
	}
177

    
178
	@Override
179
	public void setFocus() {
180
	    viewer.getControl().setFocus();
181
		getConversationHolder().bind();
182
		getDefinedTermEditorInput().bind();
183
	}
184

    
185
	@Override
186
	public void update(CdmDataChangeMap changeEvents) {
187
		// TODO Auto-generated method stub
188

    
189
	}
190

    
191
	@Override
192
	public ConversationHolder getConversationHolder() {
193
		return conversation;
194
	}
195

    
196
	@Override
197
	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
198
		// TODO Auto-generated method stub
199

    
200
	}
201

    
202
	@Override
203
	public void changed(Object element) {
204
		dirty = true;
205
		setDirty(true);
206
		viewer.update(element, null);
207
	}
208

    
209
	/* (non-Javadoc)
210
	 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
211
	 */
212
	@Override
213
	public void forceDirty() {
214
	    changed(null);
215
	}
216

    
217
	/**
218
	 * @param dirty the dirty to set
219
	 */
220
	public void setDirty(boolean dirty) {
221
		this.dirty = dirty;
222
		firePropertyChange(PROP_DIRTY);
223
	}
224

    
225
	@Override
226
	public boolean onComplete() {
227
		// TODO Auto-generated method stub
228
		return false;
229
	}
230

    
231
	/**
232
	 *
233
	 */
234
	public TreeViewer getViewer() {
235
		return viewer;
236
	}
237

    
238
	private class DefinedTermSorter extends ViewerSorter {
239

    
240
	    @Override
241
	    public int compare(Viewer viewer, Object e1, Object e2) {
242
	        // the comparison value in this method determines the
243
	        // location <-> add term method used in the MoveDefinedTermOperation
244
	        // execute call
245
	        if(e1 instanceof OrderedTermBase && e2 instanceof OrderedTermBase) {
246
	            OrderedTermBase otbe1 = (OrderedTermBase)e1;
247
	            OrderedTermBase otbe2 = (OrderedTermBase)e2;
248
	            if(otbe1.getOrderIndex() == otbe2.getOrderIndex()) {
249
	                return 0;
250
	            } else if(otbe1.isHigher(otbe2)) {
251
	                return 1;
252
	            } else {
253
	                return -1;
254
	            }
255
	        } else {
256
	            return super.compare(viewer, e1, e2);
257
	        }
258
	    }
259
	}
260

    
261
	@Override
262
	public void dispose() {
263
	    getDefinedTermEditorInput().dispose();
264
	    super.dispose();
265
	}
266
}
(3-3/8)