Project

General

Profile

Download (7.24 KB) Statistics
| Branch: | Tag: | Revision:
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
}
(3-3/8)