// $Id$\r
/**\r
* Copyright (C) 2009 EDIT\r
- * European Distributed Institute of Taxonomy \r
+ * European Distributed Institute of Taxonomy\r
* http://www.e-taxonomy.eu\r
- * \r
+ *\r
* The contents of this file are subject to the Mozilla Public License Version 1.1\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
*/\r
package eu.etaxonomy.taxeditor.editor.definedterm;\r
\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
import org.eclipse.core.runtime.IProgressMonitor;\r
import org.eclipse.jface.action.GroupMarker;\r
import org.eclipse.jface.action.MenuManager;\r
import org.eclipse.jface.viewers.ISelection;\r
import org.eclipse.jface.viewers.StructuredSelection;\r
import org.eclipse.jface.viewers.TreeViewer;\r
+import org.eclipse.jface.viewers.Viewer;\r
import org.eclipse.jface.viewers.ViewerSorter;\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.dnd.DND;\r
\r
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
-import eu.etaxonomy.cdm.api.service.IVocabularyService;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
-import eu.etaxonomy.cdm.model.common.TermType;\r
-import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
+import eu.etaxonomy.cdm.model.common.OrderedTermBase;\r
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
-import eu.etaxonomy.taxeditor.editor.definedterm.input.AbstractDefinedTermEditorInput;\r
import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput;\r
-import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;\r
+import eu.etaxonomy.taxeditor.model.IDirtyMarkable;\r
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
import eu.etaxonomy.taxeditor.store.CdmStore;\r
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;\r
* @date 3 Jan 2012\r
*\r
*/\r
-public class DefinedTermEditor extends EditorPart implements IConversationEnabled, ISelectionListener, IDirtyMarkableSelectionProvider, IPostOperationEnabled {\r
+public class DefinedTermEditor extends EditorPart implements IConversationEnabled, ISelectionListener, IDirtyMarkable, IPostOperationEnabled {\r
\r
public static final String ID = "eu.etaxonomy.taxeditor.editor.definedTerm";\r
\r
public static final String OPEN_COMMAND_ID = "eu.etaxonomy.taxeditor.store.openDefinedTermEditor";\r
- \r
+\r
protected TreeViewer viewer;\r
protected ConversationHolder conversation;\r
private ISelectionService selectionService;\r
\r
\r
\r
- private int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;\r
+ private final int dndOperations = DND.DROP_COPY | DND.DROP_MOVE;\r
/**\r
- * \r
+ *\r
*/\r
public DefinedTermEditor() {\r
super();\r
\r
@Override\r
public void createPartControl(Composite parent) {\r
- \r
+\r
// parent.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLUE));\r
- \r
+\r
FillLayout layout = new FillLayout();\r
layout.marginHeight = 0;\r
layout.marginWidth = 0;\r
layout.type = SWT.VERTICAL;\r
- \r
+\r
parent.setLayout(layout);\r
viewer = new TreeViewer(parent);\r
viewer.getControl().setLayoutData(LayoutConstants.FILL());\r
viewer.setContentProvider(new TermContentProvider());\r
viewer.setLabelProvider(new TermLabelProvider());\r
- viewer.setSorter(new ViewerSorter());\r
- \r
+ viewer.setSorter(new DefinedTermSorter());\r
+\r
Transfer[] transfers = new Transfer[] { TermTransfer.getInstance() };\r
viewer.addDragSupport(dndOperations, transfers, new DefinedTermDragListener(viewer));\r
viewer.addDropSupport(dndOperations, transfers, new DefinedTermDropAdapter(this));\r
- \r
+\r
getDefinedTermEditorInput().initialiseVocabularies();\r
viewer.setInput(getDefinedTermEditorInput().getVocabularies());\r
- \r
+\r
getSite().setSelectionProvider(viewer);\r
- \r
+\r
selectionService = getSite().getWorkbenchWindow().getSelectionService();\r
selectionService.addSelectionListener(this);\r
- \r
+\r
setPartName(getEditorInput().getName());\r
createMenu();\r
}\r
- \r
- \r
\r
- \r
+\r
+\r
+\r
/**\r
- * \r
+ *\r
*/\r
public TermEditorInput getDefinedTermEditorInput() {\r
return (TermEditorInput) getEditorInput();\r
*/\r
@Override\r
public boolean postOperation(CdmBase objectAffectedByOperation) {\r
- \r
- \r
- viewer.refresh(); \r
- \r
+\r
+\r
+ viewer.refresh();\r
+\r
if(objectAffectedByOperation != null){\r
viewer.setSelection(new StructuredSelection(objectAffectedByOperation));\r
}\r
setDirty(true);\r
\r
return true;\r
- } \r
+ }\r
\r
private void createMenu() {\r
// register context menu\r
menuManager\r
.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));\r
getSite().registerContextMenu(ID, menuManager, viewer);\r
- \r
+\r
Control control = viewer.getControl();\r
Menu menu = menuManager.createContextMenu(control);\r
control.setMenu(menu);\r
}\r
- \r
\r
- \r
+\r
+\r
\r
@Override\r
public void doSave(IProgressMonitor monitor) {\r
setDirty(false);\r
getDefinedTermEditorInput().initialiseVocabularies();\r
}\r
- \r
+\r
\r
@Override\r
public void doSaveAs() {}\r
public void init(IEditorSite site, IEditorInput input) throws PartInitException {\r
setSite(site);\r
setInput(input);\r
- \r
+\r
}\r
\r
@Override\r
\r
@Override\r
public void setFocus() {\r
+ viewer.getControl().setFocus();\r
getConversationHolder().bind();\r
}\r
\r
@Override\r
public void update(CdmDataChangeMap changeEvents) {\r
// TODO Auto-generated method stub\r
- \r
+\r
}\r
\r
@Override\r
@Override\r
public void selectionChanged(IWorkbenchPart part, ISelection selection) {\r
// TODO Auto-generated method stub\r
- \r
+\r
}\r
\r
@Override\r
viewer.update(element, null);\r
}\r
\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()\r
+ */\r
+ @Override\r
+ public void forceDirty() {\r
+ changed(null);\r
+ }\r
+\r
/**\r
* @param dirty the dirty to set\r
*/\r
}\r
\r
/**\r
- * \r
+ *\r
*/\r
public TreeViewer getViewer() {\r
return viewer;\r
}\r
\r
+ private class DefinedTermSorter extends ViewerSorter {\r
+\r
+ @Override\r
+ public int compare(Viewer viewer, Object e1, Object e2) {\r
+ // the comparison value in this method determines the\r
+ // location <-> add term method used in the MoveDefinedTermOperation\r
+ // execute call\r
+ if(e1 instanceof OrderedTermBase && e2 instanceof OrderedTermBase) {\r
+ OrderedTermBase otbe1 = (OrderedTermBase)e1;\r
+ OrderedTermBase otbe2 = (OrderedTermBase)e2;\r
+ if(otbe1.getOrderIndex() == otbe2.getOrderIndex()) {\r
+ return 0;\r
+ } else if(otbe1.isHigher(otbe2)) {\r
+ return 1;\r
+ } else {\r
+ return -1;\r
+ }\r
+ } else {\r
+ return super.compare(viewer, e1, e2);\r
+ }\r
+ }\r
+ }\r
\r
\r
}
\ No newline at end of file