2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.navigation
;
14 import org
.apache
.log4j
.Logger
;
15 import org
.eclipse
.core
.databinding
.beans
.BeansObservables
;
16 import org
.eclipse
.core
.databinding
.observable
.map
.IMapChangeListener
;
17 import org
.eclipse
.core
.databinding
.observable
.map
.IObservableMap
;
18 import org
.eclipse
.core
.databinding
.observable
.map
.MapChangeEvent
;
19 import org
.eclipse
.core
.databinding
.observable
.set
.IObservableSet
;
20 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
21 import org
.eclipse
.jface
.viewers
.LabelProviderChangedEvent
;
22 import org
.eclipse
.swt
.graphics
.Image
;
24 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
25 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
26 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
27 import eu
.etaxonomy
.taxeditor
.ITaxEditorConstants
;
28 import eu
.etaxonomy
.taxeditor
.TaxEditorPlugin
;
29 import eu
.etaxonomy
.taxeditor
.editor
.name
.IterableSynonymyList
;
30 import eu
.etaxonomy
.taxeditor
.model
.CdmUtil
;
37 public class TaxonomicTreeLabelProvider
extends ColumnLabelProvider
{
38 private static final Logger logger
= Logger
39 .getLogger(TaxonomicTreeLabelProvider
.class);
41 private final IObservableMap
[] attributeMaps
;
43 private IMapChangeListener mapChangeListener
= new IMapChangeListener() {
44 public void handleMapChange(MapChangeEvent event
) {
45 Set affectedElements
= event
.diff
.getChangedKeys();
46 LabelProviderChangedEvent newEvent
= new LabelProviderChangedEvent(
47 TaxonomicTreeLabelProvider
.this, affectedElements
49 fireLabelProviderChanged(newEvent
);
54 public TaxonomicTreeLabelProvider(IObservableSet observableTaxonSet
) {
55 this(BeansObservables
.observeMaps(
57 Taxon
.class, new String
[]{"name"}));
63 public TaxonomicTreeLabelProvider(IObservableMap attributeMap
) {
64 this(new IObservableMap
[] { attributeMap
});
68 * @param attributeMaps
70 public TaxonomicTreeLabelProvider(IObservableMap
[] attributeMaps
) {
71 System
.arraycopy(attributeMaps
, 0, this.attributeMaps
= attributeMaps
, 0, attributeMaps
.length
);
72 for (int i
= 0; i
< attributeMaps
.length
; i
++) {
73 attributeMaps
[i
].addMapChangeListener(mapChangeListener
);
79 * @see org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider#getColumnImage(java.lang.Object, int)
81 public Image
getColumnImage(Object element
, int columnIndex
) {
82 if (element
instanceof Taxon
) {
83 TaxonNameBase name
= ((Taxon
) element
).getName();
84 if (name
!= null && name
.getHasProblem()) {
85 return TaxEditorPlugin
.getDefault().getImage(ITaxEditorConstants
.WARNING_ICON
);
91 public String
getText(Object element
) {
92 return getColumnText(element
, 0);
96 * JFace databinding syntax makes it to difficult to retrieve
97 * Taxon.getName().getNameCache, so override function that returns
101 * @see org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider#getColumnText(java.lang.Object, int)
103 public String
getColumnText(Object element
, int columnIndex
) {
104 if (element
instanceof Taxon
) {
105 return CdmUtil
.getDisplayName((Taxon
) element
);
110 public String
getToolTipText(Object element
) {
111 if (element
instanceof Taxon
) {
112 return getSynonymyListDisplay((Taxon
) element
);
117 public void dispose() {
118 for (int i
= 0; i
< attributeMaps
.length
; i
++) {
119 attributeMaps
[i
].removeMapChangeListener(mapChangeListener
);
128 private String
getSynonymyListDisplay(Taxon taxon
) {
129 IterableSynonymyList synonymyList
= new IterableSynonymyList(
131 String synonymyListDisplay
= CdmUtil
132 .getDisplayName(taxon
);
134 for (TaxonBase synonymOrMisName
: synonymyList
) {
135 TaxonNameBase name
= synonymOrMisName
.getName();
137 synonymyListDisplay
+= "\n "
138 + CdmUtil
.getDisplayName(name
);
141 return synonymyListDisplay
;