+++ /dev/null
-/**\r
- * Copyright (C) 2007 EDIT\r
- * European Distributed Institute of Taxonomy \r
- * http://www.e-taxonomy.eu\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.navigation.taxonomictree;\r
-\r
-import java.util.List;\r
-\r
-import org.eclipse.core.runtime.Assert;\r
-import org.eclipse.jface.viewers.ITreeContentProvider;\r
-import org.eclipse.jface.viewers.Viewer;\r
-\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-\r
-/**\r
- * TODO maybe we want to implement ILazyTreeContentProvider\r
- * \r
- * @author p.ciardelli\r
- * @created 27.06.2008\r
- * @version 1.0\r
- * @author n.hoffmann\r
- */\r
-@Deprecated public class TaxonomicTreeContentProvider implements ITreeContentProvider {\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)\r
- */\r
- public Object[] getChildren(Object parentElement) {\r
- \r
- String errorMessage = "getChildren(parentElement) called with non-Taxon element.";\r
- \r
- // Make sure we are dealing with taxon objects\r
- Assert.isTrue(parentElement instanceof Taxon, errorMessage);\r
- \r
- if (parentElement instanceof Taxon) {\r
- return ((Taxon) parentElement).getTaxonomicChildren().toArray();\r
- }\r
-\r
- return null;\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)\r
- */\r
- public Object getParent(Object element) {\r
- \r
- Assert.isTrue(element instanceof Taxon, \r
- "getParent(element) called with non-Taxon element.");\r
- \r
- return ((Taxon) element).getTaxonomicParent();\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)\r
- */\r
- public boolean hasChildren(Object element) {\r
- Assert.isTrue(element instanceof Taxon, \r
- "hasChildren(element) called with non-Taxon element.");\r
- \r
- return ((Taxon) element).getTaxonomicChildrenCount() > 0;\r
- }\r
-\r
- \r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)\r
- */\r
- @SuppressWarnings("unchecked")\r
- public Object[] getElements(Object inputElement) { \r
- List<Taxon> rootTaxa = (List<Taxon>) inputElement;\r
- return rootTaxa.toArray();\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see org.eclipse.jface.viewers.IContentProvider#dispose()\r
- */\r
- public void dispose() {}\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,\r
- * java.lang.Object, java.lang.Object)\r
- */\r
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
- }\r
-}
\ No newline at end of file
+++ /dev/null
-/**
- *
- */
-package eu.etaxonomy.taxeditor.navigation.taxonomictree;
-
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.navigator.IDescriptionProvider;
-
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;
-import eu.etaxonomy.taxeditor.editor.name.IterableSynonymyList;
-import eu.etaxonomy.taxeditor.model.NameHelper;
-
-/**
- *
- * @author n.hoffmann
- * @created 18.03.2009
- * @version 1.0
- */
-@Deprecated public class TaxonomicTreeLabelProvider extends ColumnLabelProvider implements ILabelProvider, IDescriptionProvider {
-
- public Image getImage(Object element) {
- // This code was to distinct a missaplied name from a accepted taxon name
- // in the taxonomic tree. Unfortunately lazy loading slows this down, so that
- // the taxonomic tree will take 10 minutes to initialize.
- // I will leave this in here as a reminder.
-// if (element instanceof Taxon){
-// if(((Taxon) element).isMisappliedName()){
-// // return misapplication image
-// return PlatformUI.getWorkbench().getSharedImages().getImage(
-// ISharedImages.IMG_ELCL_SYNCED);
-// }
-// // return standard taxon image
-// return PlatformUI.getWorkbench().getSharedImages().getImage(
-// ISharedImages.IMG_OBJS_INFO_TSK);
-// }
-
-
- // No image for now
- return null;
- }
-
- public String getText(Object element) {
- if (element instanceof Taxon) {
- Taxon data = (Taxon) element;
- return data.getName().getTitleCache(); //$NON-NLS-1$
- }
- return null;
- }
-
- public String getDescription(Object anElement) {
- if (anElement instanceof Taxon) {
- Taxon data = (Taxon) anElement;
- return "Taxon: " + data.getTitleCache(); //$NON-NLS-1$
- }
- return null;
- }
-
- public String getToolTipText(Object element) {
- if (element instanceof Taxon) {
- return getSynonymyListDisplay((Taxon) element);
- }
- return null;
- }
-
- /**
- * @param taxon
- * @return
- */
- private String getSynonymyListDisplay(Taxon taxon) {
- IterableSynonymyList synonymyList = new IterableSynonymyList(
- taxon);
- String synonymyListDisplay = NameHelper
- .getDisplayName(taxon);
-
- for (TaxonBase<?> synonymOrMisName : synonymyList) {
- TaxonNameBase<?, ?> name = synonymOrMisName.getName();
- if (name != null) {
- synonymyListDisplay += "\n "
- + NameHelper.getDisplayName(name);
- }
- }
- return synonymyListDisplay;
- }
-}
+++ /dev/null
-/**\r
- * Copyright (C) 2007 EDIT\r
- * European Distributed Institute of Taxonomy \r
- * http://www.e-taxonomy.eu\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
-\r
-package eu.etaxonomy.taxeditor.navigation.taxonomictree;\r
-\r
-import java.util.List;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.eclipse.jface.action.GroupMarker;\r
-import org.eclipse.jface.action.MenuManager;\r
-import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;\r
-import org.eclipse.jface.viewers.DoubleClickEvent;\r
-import org.eclipse.jface.viewers.IDoubleClickListener;\r
-import org.eclipse.jface.viewers.StructuredSelection;\r
-import org.eclipse.jface.viewers.TreeViewer;\r
-import org.eclipse.jface.viewers.ViewerComparator;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.dnd.DND;\r
-import org.eclipse.swt.dnd.DragSource;\r
-import org.eclipse.swt.dnd.DragSourceAdapter;\r
-import org.eclipse.swt.dnd.DragSourceEvent;\r
-import org.eclipse.swt.dnd.DropTarget;\r
-import org.eclipse.swt.dnd.DropTargetAdapter;\r
-import org.eclipse.swt.dnd.DropTargetEvent;\r
-import org.eclipse.swt.dnd.Transfer;\r
-import org.eclipse.swt.layout.FillLayout;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.swt.widgets.Menu;\r
-import org.eclipse.swt.widgets.Tree;\r
-import org.eclipse.swt.widgets.TreeItem;\r
-import org.eclipse.ui.IWorkbenchActionConstants;\r
-import org.eclipse.ui.part.ViewPart;\r
-\r
-import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
-import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;\r
-import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;\r
-import eu.etaxonomy.taxeditor.model.DataChangeBridge;\r
-import eu.etaxonomy.taxeditor.model.IDataChangeBehavior;\r
-import eu.etaxonomy.taxeditor.model.TaxonTransfer;\r
-import eu.etaxonomy.taxeditor.operations.IPostOperationEnabled;\r
-import eu.etaxonomy.taxeditor.store.CdmStore;\r
-\r
-/**\r
- * The panel containing the taxonomic tree.\r
- * \r
- * @author p.ciardelli\r
- * @created 27.05.2008\r
- * @version 1.0\r
- * @author n.hoffmann\r
- */\r
-@Deprecated \r
-public class TaxonomicTreeView extends ViewPart implements IConversationEnabled, IPostOperationEnabled {\r
- private static final Logger logger = Logger.getLogger(TaxonomicTreeView.class);\r
- \r
- public static final String ID = "eu.etaxonomy.taxeditor.navigation.taxonomictree.treeView"; //$NON-NLS-1$\r
- \r
- private TreeViewer treeViewer;\r
-\r
- private ConversationHolder conversation;\r
-\r
- private IDataChangeBehavior dataChangeBehavior;\r
-\r
- private Composite parent;\r
- \r
- /**\r
- * Create contents of the view part\r
- * @param parent\r
- */\r
- @Override\r
- public void createPartControl(Composite parent) {\r
- conversation = CdmStore.NewTransactionalConversation();\r
- conversation.registerForDataStoreChanges(this);\r
-\r
- \r
- if(this.parent == null){\r
- this.parent = parent;\r
- }\r
- \r
- // Create top composite\r
- FillLayout fillLayout = new FillLayout();\r
- fillLayout.marginWidth = 0;\r
- fillLayout.marginHeight = 0;\r
- fillLayout.type = SWT.VERTICAL; \r
- parent.setLayout(fillLayout);\r
- \r
- createTreeViewer(CdmStore.getDefault().getRootTaxa());\r
- }\r
- \r
- /**\r
- * Actual tooltips built in label provider\r
- */\r
- private void createToolTips() {\r
- ColumnViewerToolTipSupport.enableFor(treeViewer);\r
- }\r
- \r
- \r
- public void createTreeViewer(List<Taxon> rootTaxa) { \r
- \r
- // Create tree\r
- treeViewer = new TreeViewer(parent, SWT.VIRTUAL);\r
- \r
- Tree tree = treeViewer.getTree();\r
- \r
- tree.setLinesVisible(false);\r
- tree.setHeaderVisible(false);\r
- \r
- treeViewer.setContentProvider(new TaxonomicTreeContentProvider());\r
- treeViewer.setLabelProvider(new TaxonomicTreeLabelProvider());\r
- \r
- treeViewer.setInput(rootTaxa);\r
- \r
- createDoubleClickListener();\r
- createToolTips();\r
- createDragAndDrop();\r
- \r
- // Sort according to "getColumnText" above, i.e. by NameCache\r
- // TODO check if this is still up to date\r
- treeViewer.setComparator(new ViewerComparator());\r
- \r
- // register context menu\r
- MenuManager menuMgr = new MenuManager();\r
- menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));\r
- getSite().registerContextMenu(menuMgr, treeViewer);\r
-\r
- Control control = treeViewer.getControl();\r
- Menu menu = menuMgr.createContextMenu(control);\r
- control.setMenu(menu); \r
- \r
- }\r
- \r
- /**\r
- * On double click, open name editor\r
- */\r
- public void createDoubleClickListener() {\r
- treeViewer.addDoubleClickListener(new IDoubleClickListener() {\r
-\r
- public void doubleClick(DoubleClickEvent event) {\r
- if (event.getSelection() instanceof StructuredSelection) {\r
- Object element = ((StructuredSelection) event\r
- .getSelection()).getFirstElement();\r
- if (element instanceof Taxon) {\r
- // FIXME call EditTaxonHandler\r
- logger.info("Doubleclick on taxon element. Should open editor now");\r
-// NavigationUtil.openEditor((Taxon) element);\r
- }\r
- }\r
- }\r
- });\r
- }\r
- \r
- /**\r
- * \r
- */\r
- public void createDragAndDrop() {\r
- final Tree tree = treeViewer.getTree();\r
- Transfer[] types = new Transfer[] { TaxonTransfer.getInstance() };\r
- int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;\r
-\r
- final DragSource source = new DragSource(tree, operations);\r
- source.setTransfer(types);\r
- final TreeItem[] dragSourceItem = new TreeItem[1];\r
- source.addDragListener(new DragSourceAdapter() {\r
- public void dragStart(DragSourceEvent event) {\r
- TreeItem[] selection = tree.getSelection();\r
- if (selection.length > 0) {\r
- event.doit = true;\r
- dragSourceItem[0] = selection[0];\r
- } else {\r
- event.doit = false;\r
- }\r
- }\r
-\r
- public void dragSetData(DragSourceEvent event) {\r
- Taxon taxon = (Taxon) dragSourceItem[0].getData();\r
- TaxonTransfer.getInstance().setTaxon(taxon);\r
- }\r
- });\r
-\r
- DropTarget target = new DropTarget(tree, operations);\r
- target.setTransfer(types);\r
- target.addDropListener(new DropTargetAdapter() {\r
- public void drop(DropTargetEvent event) {\r
-\r
- // Only drop ONTO another TreeItem OR outside the tree area.\r
- // Dropping between TreeItems makes no sense because tree is\r
- // sorted.\r
- Taxon taxon = (Taxon) dragSourceItem[0].getData();\r
- Taxon newParentTaxon = null;\r
-\r
- // If event.item == null, user has dragged outside of the tree\r
- if (event.item == null) {\r
- newParentTaxon = null;\r
- } else {\r
- newParentTaxon = (Taxon) event.item.getData();\r
- \r
- // Make sure parentTaxon is not a child\r
-// if (TaxonNodeUtil.isTaxonChildOfTaxon(newParentTaxon, taxon)) {\r
-// \r
-// MessageDialog.openError(NavigationUtil.getShell(), "Can't move taxon.",\r
-// "'" + NameUtil.getDisplayName(taxon) + "' sits above " +\r
-// "'" + NameUtil.getDisplayName(newParentTaxon) + "' " +\r
-// "in the taxonomic hierarchy.");\r
-// \r
-// return;\r
-// }\r
- \r
- // Make sure taxon is not being dropped onto itself\r
- if (taxon.equals(newParentTaxon)) {\r
- return;\r
- }\r
- \r
- // Make sure parent taxon does not have unsaved changes\r
-// if (NavigationUtil.isDirty(newParentTaxon)){\r
-// MessageDialog.openWarning(NavigationUtil.getShell(), "Unsaved Parent Taxon", "There are unsaved " +\r
-// "changes in the parent taxon. Pleas save first.");\r
-// return;\r
-// }\r
- }\r
-\r
-// \r
-// IUndoableOperation operation = new MoveTaxonOperation\r
-// ("Move Taxon", NavigationUtil.getUndoContext(), taxon, newParentTaxon);\r
-// \r
-// NavigationUtil.executeOperation(operation); \r
- }\r
- });\r
- }\r
- \r
- /*\r
- * (non-Javadoc)\r
- * @see org.eclipse.ui.part.WorkbenchPart#setFocus()\r
- */\r
- public void setFocus() {\r
- // bind resources for this widget on focus\r
- getConversationHolder().bind();\r
- // pass focus to the tree viewer if it exists\r
- if(treeViewer != null){\r
- treeViewer.getControl().setFocus();\r
- }\r
- }\r
- \r
- /**\r
- * Expose TreeViewer, i.e. to manipulate tree nodes\r
- * @return\r
- */\r
- public TreeViewer getTreeViewer() {\r
- return treeViewer;\r
- }\r
- \r
- \r
- /*\r
- * (non-Javadoc)\r
- * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()\r
- */\r
- public ConversationHolder getConversationHolder() {\r
- return conversation;\r
- }\r
-\r
- /*\r
- * (non-Javadoc)\r
- * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostCrudObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent)\r
- */\r
- public void update(CdmDataChangeMap changeEvents) {\r
- if(dataChangeBehavior == null){\r
- dataChangeBehavior = new TaxonomicTreeViewDataChangeBehaviour(this);\r
- }\r
- DataChangeBridge.handleDataChange(changeEvents, dataChangeBehavior);\r
- }\r
-\r
- /**\r
- * Start the creation process of this Control anew. \r
- */\r
- public void recreate() {\r
- this.createPartControl(parent);\r
- }\r
- \r
- /**\r
- * Get a fresh model from CdmStore and refresh the tree viewer with the data\r
- */\r
- public void refresh(){\r
- treeViewer.setInput(CdmStore.getDefault().getRootTaxa());\r
- treeViewer.refresh(); \r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.eclipse.ui.part.WorkbenchPart#dispose()\r
- */\r
- @Override\r
- public void dispose() {\r
- conversation.unregisterForDataStoreChanges(this);\r
-\r
- super.dispose();\r
- }\r
-\r
- /**\r
- * If taxon node in the tree is hidden, open and select it\r
- * \r
- * @param taxon\r
- */\r
- public void revealTaxon(Taxon taxon) {\r
- if (taxon == null) {\r
- return;\r
- }\r
- treeViewer.setSelection(new StructuredSelection(taxon), true);\r
- treeViewer.reveal(taxon);\r
- }\r
- \r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.taxeditor.store.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase)\r
- */\r
- public boolean postOperation(CdmBase objectAffectedByOperation) {\r
- \r
- if(objectAffectedByOperation instanceof Taxon){\r
- revealTaxon((Taxon) objectAffectedByOperation);\r
- }\r
- \r
- return true;\r
- }\r
- \r
- \r
-}\r