Project

General

Profile

Download (7.29 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
		menuManager.setRemoveAllWhenShown(true);
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.getOrderIndex() < otbe2.getOrderIndex()){
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)