p2izing the editor
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / eu / etaxonomy / taxeditor / navigation / TaxonomicTreeLabelProvider.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9
10 package eu.etaxonomy.taxeditor.navigation;
11
12 import java.util.Set;
13
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;
23
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;
31
32 /**
33 * @author p.ciardelli
34 * @created 29.05.2008
35 * @version 1.0
36 */
37 public class TaxonomicTreeLabelProvider extends ColumnLabelProvider {
38 private static final Logger logger = Logger
39 .getLogger(TaxonomicTreeLabelProvider.class);
40
41 private final IObservableMap[] attributeMaps;
42
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
48 .toArray());
49 fireLabelProviderChanged(newEvent);
50 }
51 };
52
53
54 public TaxonomicTreeLabelProvider(IObservableSet observableTaxonSet) {
55 this(BeansObservables.observeMaps(
56 observableTaxonSet,
57 Taxon.class, new String[]{"name"}));
58 }
59
60 /**
61 * @param attributeMap
62 */
63 public TaxonomicTreeLabelProvider(IObservableMap attributeMap) {
64 this(new IObservableMap[] { attributeMap });
65 }
66
67 /**
68 * @param attributeMaps
69 */
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);
74 }
75 }
76
77 /**
78 *
79 * @see org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider#getColumnImage(java.lang.Object, int)
80 **/
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);
86 }
87 }
88 return null;
89 }
90
91 public String getText(Object element) {
92 return getColumnText(element, 0);
93 }
94
95 /**
96 * JFace databinding syntax makes it to difficult to retrieve
97 * Taxon.getName().getNameCache, so override function that returns
98 * label
99 *
100 * (non-Javadoc)
101 * @see org.eclipse.jface.databinding.viewers.ObservableMapLabelProvider#getColumnText(java.lang.Object, int)
102 **/
103 public String getColumnText(Object element, int columnIndex) {
104 if (element instanceof Taxon) {
105 return CdmUtil.getDisplayName((Taxon) element);
106 }
107 return "";
108 }
109
110 public String getToolTipText(Object element) {
111 if (element instanceof Taxon) {
112 return getSynonymyListDisplay((Taxon) element);
113 }
114 return null;
115 }
116
117 public void dispose() {
118 for (int i = 0; i < attributeMaps.length; i++) {
119 attributeMaps[i].removeMapChangeListener(mapChangeListener);
120 }
121 super.dispose();
122 }
123
124 /**
125 * @param taxon
126 * @return
127 */
128 private String getSynonymyListDisplay(Taxon taxon) {
129 IterableSynonymyList synonymyList = new IterableSynonymyList(
130 taxon);
131 String synonymyListDisplay = CdmUtil
132 .getDisplayName(taxon);
133
134 for (TaxonBase synonymOrMisName : synonymyList) {
135 TaxonNameBase name = synonymOrMisName.getName();
136 if (name != null) {
137 synonymyListDisplay += "\n "
138 + CdmUtil.getDisplayName(name);
139 }
140 }
141 return synonymyListDisplay;
142 }
143 }