Project

General

Profile

Download (8.27 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 java.util.ArrayList;
13
import java.util.Set;
14

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

    
39
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
40
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
41
import eu.etaxonomy.cdm.api.service.IVocabularyService;
42
import eu.etaxonomy.cdm.model.common.CdmBase;
43
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
44
import eu.etaxonomy.cdm.model.common.OrderedTermBase;
45
import eu.etaxonomy.cdm.model.common.TermVocabulary;
46
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
47
import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;
48
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
49
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
50
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
51
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
52
import eu.etaxonomy.taxeditor.store.CdmStore;
53
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
54

    
55
/**
56
 * @author l.morris
57
 * @date 3 Jan 2012
58
 *
59
 */
60
public class DefinedTermEditor extends EditorPart implements IConversationEnabled, ISelectionListener, IDirtyMarkable, IPostOperationEnabled, ICdmEntitySessionEnabled {
61

    
62
	public static final String ID = "eu.etaxonomy.taxeditor.editor.definedTerm";
63

    
64
	public static final String OPEN_COMMAND_ID = "eu.etaxonomy.taxeditor.store.openDefinedTermEditor";
65

    
66
	protected TreeViewer viewer;
67
	protected ConversationHolder conversation;
68
	private ISelectionService selectionService;
69
	private boolean dirty;
70

    
71
	private final ICdmEntitySession cdmEntitySession;
72

    
73

    
74
	private final int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;
75
	/**
76
	 *
77
	 */
78
	public DefinedTermEditor() {
79
		super();
80
		conversation = CdmStore.createConversation();
81
		cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
82
	}
83

    
84
	@Override
85
	public void createPartControl(Composite parent) {
86

    
87
	//		parent.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLUE));
88

    
89
			FillLayout layout = new FillLayout();
90
			layout.marginHeight = 0;
91
			layout.marginWidth = 0;
92
			layout.type = SWT.VERTICAL;
93

    
94
			parent.setLayout(layout);
95
			viewer = new TreeViewer(parent);
96
			viewer.getControl().setLayoutData(LayoutConstants.FILL());
97
			viewer.setContentProvider(new TermContentProvider());
98
			viewer.setLabelProvider(new TermLabelProvider());
99
			viewer.setSorter(new DefinedTermSorter());
100

    
101
			Transfer[] transfers = new Transfer[] { TermTransfer.getInstance() };
102
			viewer.addDragSupport(dndOperations, transfers, new DefinedTermDragListener(viewer));
103
			viewer.addDropSupport(dndOperations, transfers, new DefinedTermDropAdapter(this));
104

    
105
			getDefinedTermEditorInput().initialiseVocabularies();
106
			viewer.setInput(getDefinedTermEditorInput().getVocabularies());
107

    
108
			getSite().setSelectionProvider(viewer);
109

    
110
			selectionService = getSite().getWorkbenchWindow().getSelectionService();
111
			selectionService.addSelectionListener(this);
112

    
113
			setPartName(getEditorInput().getName());
114
			createMenu();
115
		}
116

    
117

    
118

    
119

    
120
	/**
121
	 *
122
	 */
123
	public TermEditorInput getDefinedTermEditorInput() {
124
		return (TermEditorInput) getEditorInput();
125
	}
126

    
127
	/* (non-Javadoc)
128
	 * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
129
	 */
130
	@Override
131
	public boolean postOperation(CdmBase objectAffectedByOperation) {
132

    
133

    
134
		viewer.refresh();
135

    
136
		if(objectAffectedByOperation != null){
137
			viewer.setSelection(new StructuredSelection(objectAffectedByOperation));
138
		}
139
		setDirty(true);
140

    
141
		return true;
142
	}
143

    
144
	private void createMenu() {
145
		// register context menu
146
		MenuManager menuManager = new MenuManager();
147
		menuManager
148
				.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
149
		getSite().registerContextMenu(ID, menuManager, viewer);
150

    
151
		Control control = viewer.getControl();
152
		Menu menu = menuManager.createContextMenu(control);
153
		control.setMenu(menu);
154
	}
155

    
156

    
157

    
158

    
159
	@Override
160
	public void doSave(IProgressMonitor monitor) {
161
		getConversationHolder().commit();
162
		CdmStore.getService(IVocabularyService.class).merge(new ArrayList<TermVocabulary>(getRootEntities()));
163
		setDirty(false);
164
		getDefinedTermEditorInput().initialiseVocabularies();
165
		viewer.refresh();
166
	}
167

    
168

    
169
	@Override
170
	public void doSaveAs() {}
171

    
172
	@Override
173
	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
174
		setSite(site);
175
		setInput(input);
176

    
177
	}
178

    
179
	@Override
180
	public boolean isDirty() {
181
		return dirty;
182
	}
183

    
184
	@Override
185
	public boolean isSaveAsAllowed() {
186
		return false;
187
	}
188

    
189
	@Override
190
	public void setFocus() {
191
	    viewer.getControl().setFocus();
192
		getConversationHolder().bind();
193
		cdmEntitySession.bind();
194
	}
195

    
196
	@Override
197
	public void update(CdmDataChangeMap changeEvents) {
198
		// TODO Auto-generated method stub
199

    
200
	}
201

    
202
	@Override
203
	public ConversationHolder getConversationHolder() {
204
		return conversation;
205
	}
206

    
207
	@Override
208
	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
209
		// TODO Auto-generated method stub
210

    
211
	}
212

    
213
	@Override
214
	public void changed(Object element) {
215
		dirty = true;
216
		setDirty(true);
217
		viewer.update(element, null);
218
	}
219

    
220
	/* (non-Javadoc)
221
	 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
222
	 */
223
	@Override
224
	public void forceDirty() {
225
	    changed(null);
226
	}
227

    
228
	/**
229
	 * @param dirty the dirty to set
230
	 */
231
	public void setDirty(boolean dirty) {
232
		this.dirty = dirty;
233
		firePropertyChange(PROP_DIRTY);
234
	}
235

    
236
	@Override
237
	public boolean onComplete() {
238
		// TODO Auto-generated method stub
239
		return false;
240
	}
241

    
242
	/**
243
	 *
244
	 */
245
	public TreeViewer getViewer() {
246
		return viewer;
247
	}
248

    
249
	private class DefinedTermSorter extends ViewerSorter {
250

    
251
	    @Override
252
	    public int compare(Viewer viewer, Object e1, Object e2) {
253
	        // the comparison value in this method determines the
254
	        // location <-> add term method used in the MoveDefinedTermOperation
255
	        // execute call
256
	        if(e1 instanceof OrderedTermBase && e2 instanceof OrderedTermBase) {
257
	            OrderedTermBase otbe1 = (OrderedTermBase)e1;
258
	            OrderedTermBase otbe2 = (OrderedTermBase)e2;
259
	            if(otbe1.getOrderIndex() == otbe2.getOrderIndex()) {
260
	                return 0;
261
	            } else if(otbe1.isHigher(otbe2)) {
262
	                return 1;
263
	            } else {
264
	                return -1;
265
	            }
266
	        } else {
267
	            return super.compare(viewer, e1, e2);
268
	        }
269
	    }
270
	}
271

    
272
	@Override
273
	public void dispose() {
274
	    cdmEntitySession.dispose();
275
	    super.dispose();
276
	}
277

    
278
    /* (non-Javadoc)
279
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
280
     */
281
    @Override
282
    public ICdmEntitySession getCdmEntitySession() {
283
        return cdmEntitySession;
284
    }
285

    
286
    /* (non-Javadoc)
287
     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
288
     */
289
    @Override
290
    public Set<TermVocabulary<DefinedTermBase>> getRootEntities() {
291
        return getDefinedTermEditorInput().getVocabularies();
292
    }
293

    
294

    
295
}
(3-3/8)