3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.editor
.definedterm
;
12 import java
.util
.ArrayList
;
13 import java
.util
.List
;
17 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
18 import org
.eclipse
.jface
.action
.GroupMarker
;
19 import org
.eclipse
.jface
.action
.MenuManager
;
20 import org
.eclipse
.jface
.viewers
.ISelection
;
21 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
22 import org
.eclipse
.jface
.viewers
.TreeViewer
;
23 import org
.eclipse
.jface
.viewers
.Viewer
;
24 import org
.eclipse
.jface
.viewers
.ViewerSorter
;
25 import org
.eclipse
.swt
.SWT
;
26 import org
.eclipse
.swt
.dnd
.DND
;
27 import org
.eclipse
.swt
.dnd
.Transfer
;
28 import org
.eclipse
.swt
.layout
.FillLayout
;
29 import org
.eclipse
.swt
.widgets
.Composite
;
30 import org
.eclipse
.swt
.widgets
.Control
;
31 import org
.eclipse
.swt
.widgets
.Menu
;
32 import org
.eclipse
.ui
.IEditorInput
;
33 import org
.eclipse
.ui
.IEditorSite
;
34 import org
.eclipse
.ui
.ISelectionListener
;
35 import org
.eclipse
.ui
.ISelectionService
;
36 import org
.eclipse
.ui
.IWorkbenchActionConstants
;
37 import org
.eclipse
.ui
.IWorkbenchPart
;
38 import org
.eclipse
.ui
.PartInitException
;
39 import org
.eclipse
.ui
.part
.EditorPart
;
41 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
42 import eu
.etaxonomy
.cdm
.api
.conversation
.IConversationEnabled
;
43 import eu
.etaxonomy
.cdm
.api
.service
.IVocabularyService
;
44 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
45 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
46 import eu
.etaxonomy
.cdm
.model
.common
.OrderedTermBase
;
47 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
48 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.CdmDataChangeMap
;
49 import eu
.etaxonomy
.taxeditor
.editor
.definedterm
.input
.TermEditorInput
;
50 import eu
.etaxonomy
.taxeditor
.model
.IDirtyMarkable
;
51 import eu
.etaxonomy
.taxeditor
.operation
.IPostOperationEnabled
;
52 import eu
.etaxonomy
.taxeditor
.session
.ICdmEntitySession
;
53 import eu
.etaxonomy
.taxeditor
.session
.ICdmEntitySessionEnabled
;
54 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
55 import eu
.etaxonomy
.taxeditor
.ui
.element
.LayoutConstants
;
62 public class DefinedTermEditor
extends EditorPart
implements IConversationEnabled
, ISelectionListener
, IDirtyMarkable
, IPostOperationEnabled
, ICdmEntitySessionEnabled
{
64 public static final String ID
= "eu.etaxonomy.taxeditor.editor.definedTerm";
66 public static final String OPEN_COMMAND_ID
= "eu.etaxonomy.taxeditor.store.openDefinedTermEditor";
68 protected TreeViewer viewer
;
69 protected ConversationHolder conversation
;
70 private ISelectionService selectionService
;
71 private boolean dirty
;
73 private final ICdmEntitySession cdmEntitySession
;
76 private final int dndOperations
= DND
.DROP_COPY
| DND
.DROP_MOVE
;
80 public DefinedTermEditor() {
82 conversation
= CdmStore
.createConversation();
83 cdmEntitySession
= CdmStore
.getCurrentSessionManager().newSession(this, true);
87 public void createPartControl(Composite parent
) {
89 // parent.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLUE));
91 FillLayout layout
= new FillLayout();
92 layout
.marginHeight
= 0;
93 layout
.marginWidth
= 0;
94 layout
.type
= SWT
.VERTICAL
;
96 parent
.setLayout(layout
);
97 viewer
= new TreeViewer(parent
);
98 viewer
.getControl().setLayoutData(LayoutConstants
.FILL());
99 viewer
.setContentProvider(new TermContentProvider());
100 viewer
.setLabelProvider(new TermLabelProvider());
101 viewer
.setSorter(new DefinedTermSorter());
103 Transfer
[] transfers
= new Transfer
[] { TermTransfer
.getInstance() };
104 viewer
.addDragSupport(dndOperations
, transfers
, new DefinedTermDragListener(viewer
));
105 viewer
.addDropSupport(dndOperations
, transfers
, new DefinedTermDropAdapter(this));
107 getDefinedTermEditorInput().initialiseVocabularies();
108 viewer
.setInput(getDefinedTermEditorInput().getVocabularies());
110 getSite().setSelectionProvider(viewer
);
112 selectionService
= getSite().getWorkbenchWindow().getSelectionService();
113 selectionService
.addSelectionListener(this);
115 setPartName(getEditorInput().getName());
125 public TermEditorInput
getDefinedTermEditorInput() {
126 return (TermEditorInput
) getEditorInput();
130 * @see eu.etaxonomy.taxeditor.operation.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)
133 public boolean postOperation(CdmBase objectAffectedByOperation
) {
138 if(objectAffectedByOperation
!= null){
139 viewer
.setSelection(new StructuredSelection(objectAffectedByOperation
));
146 private void createMenu() {
147 // register context menu
148 MenuManager menuManager
= new MenuManager();
150 .add(new GroupMarker(IWorkbenchActionConstants
.MB_ADDITIONS
));
151 getSite().registerContextMenu(ID
, menuManager
, viewer
);
153 Control control
= viewer
.getControl();
154 Menu menu
= menuManager
.createContextMenu(control
);
155 control
.setMenu(menu
);
162 public void doSave(IProgressMonitor monitor
) {
163 getConversationHolder().commit();
164 CdmStore
.getService(IVocabularyService
.class).merge(new ArrayList
<TermVocabulary
>(getRootEntities()));
166 getDefinedTermEditorInput().initialiseVocabularies();
172 public void doSaveAs() {}
175 public void init(IEditorSite site
, IEditorInput input
) throws PartInitException
{
182 public boolean isDirty() {
187 public boolean isSaveAsAllowed() {
192 public void setFocus() {
193 viewer
.getControl().setFocus();
194 getConversationHolder().bind();
195 cdmEntitySession
.bind();
199 public void update(CdmDataChangeMap changeEvents
) {
200 // TODO Auto-generated method stub
205 public ConversationHolder
getConversationHolder() {
210 public void selectionChanged(IWorkbenchPart part
, ISelection selection
) {
211 // TODO Auto-generated method stub
216 public void changed(Object element
) {
219 viewer
.update(element
, null);
223 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
226 public void forceDirty() {
231 * @param dirty the dirty to set
233 public void setDirty(boolean dirty
) {
235 firePropertyChange(PROP_DIRTY
);
239 public boolean onComplete() {
240 // TODO Auto-generated method stub
247 public TreeViewer
getViewer() {
251 private class DefinedTermSorter
extends ViewerSorter
{
254 public int compare(Viewer viewer
, Object e1
, Object e2
) {
255 // the comparison value in this method determines the
256 // location <-> add term method used in the MoveDefinedTermOperation
258 if(e1
instanceof OrderedTermBase
&& e2
instanceof OrderedTermBase
) {
259 OrderedTermBase otbe1
= (OrderedTermBase
)e1
;
260 OrderedTermBase otbe2
= (OrderedTermBase
)e2
;
261 if(otbe1
.getOrderIndex() == otbe2
.getOrderIndex()) {
263 } else if(otbe1
.isHigher(otbe2
)) {
269 return super.compare(viewer
, e1
, e2
);
275 public void dispose() {
276 cdmEntitySession
.dispose();
281 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
284 public ICdmEntitySession
getCdmEntitySession() {
285 return cdmEntitySession
;
289 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
292 public Set
<TermVocabulary
<DefinedTermBase
>> getRootEntities() {
293 return getDefinedTermEditorInput().getVocabularies();
297 * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap()
300 public Map
<Object
, List
<String
>> getPropertyPathsMap() {
301 // TODO Auto-generated method stub