3 * Copyright (C) 2007 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.
11 package eu
.etaxonomy
.taxeditor
.ui
.combo
;
13 import java
.util
.ArrayList
;
14 import java
.util
.Arrays
;
15 import java
.util
.Collection
;
16 import java
.util
.List
;
18 import org
.eclipse
.swt
.SWT
;
19 import org
.eclipse
.swt
.events
.SelectionEvent
;
20 import org
.eclipse
.swt
.events
.SelectionListener
;
21 import org
.eclipse
.swt
.graphics
.Color
;
22 import org
.eclipse
.swt
.widgets
.Combo
;
23 import org
.eclipse
.swt
.widgets
.Label
;
25 import eu
.etaxonomy
.cdm
.model
.common
.IDefinedTerm
;
26 import eu
.etaxonomy
.cdm
.model
.common
.IEnumTerm
;
27 import eu
.etaxonomy
.cdm
.model
.common
.OriginalSourceType
;
28 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalCode
;
29 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
30 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceType
;
31 import eu
.etaxonomy
.taxeditor
.preference
.Resources
;
32 import eu
.etaxonomy
.taxeditor
.store
.StoreUtil
;
33 import eu
.etaxonomy
.taxeditor
.ui
.campanula
.compatibility
.ICdmFormElement
;
34 import eu
.etaxonomy
.taxeditor
.ui
.element
.AbstractCdmFormElement
;
35 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmFormFactory
;
36 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmPropertyChangeEvent
;
37 import eu
.etaxonomy
.taxeditor
.ui
.element
.IEnableableFormElement
;
38 import eu
.etaxonomy
.taxeditor
.ui
.element
.ISelectable
;
39 import eu
.etaxonomy
.taxeditor
.ui
.element
.LayoutConstants
;
43 * Abstract AbstractEnumComboElement class.
47 * @created Mar 16, 2010
50 public class EnumComboElement
<T
extends IEnumTerm
> extends
51 AbstractCdmFormElement
implements SelectionListener
,
52 IEnableableFormElement
, ISelectable
{
54 private static CdmEnumDataHolder
[] cdmEnumDataHolders
= {
55 new CdmEnumDataHolder
<NomenclaturalCode
>(){
58 public String
getName() {
59 return "Nomenclatural Code";
63 public Collection
<NomenclaturalCode
> getElements() {
64 return Arrays
.asList(NomenclaturalCode
.values());
68 public Class
<NomenclaturalCode
> getClazz() {
69 return NomenclaturalCode
.class;
73 new CdmEnumDataHolder
<ReferenceType
>(){
76 public String
getName() {
77 return "Reference Type";
81 public Collection
<ReferenceType
> getElements() {
82 return Arrays
.asList(ReferenceType
.values());
86 public Class
<ReferenceType
> getClazz() {
87 return ReferenceType
.class;
91 new CdmEnumDataHolder
<SpecimenOrObservationType
>(){
94 public String
getName() {
95 return "Specimen / Observation Type";
99 public Collection
<SpecimenOrObservationType
> getElements() {
100 return Arrays
.asList(SpecimenOrObservationType
.values());
104 public Class
<SpecimenOrObservationType
> getClazz() {
105 return SpecimenOrObservationType
.class;
109 new CdmEnumDataHolder
<OriginalSourceType
>(){
112 public String
getName() {
113 return "Original Source Type";
117 public Collection
<OriginalSourceType
> getElements() {
118 return Arrays
.asList(OriginalSourceType
.values());
122 public Class
<OriginalSourceType
> getClazz() {
123 return OriginalSourceType
.class;
130 private static final int DEFAULT_VISIBLE_ITEMS
= 10;
132 protected T selection
;
134 protected List
<T
> elementTypeList
= new ArrayList
<T
>();
137 protected Combo combo
;
139 private Class
<T
> enumType
;
143 * Constructor for AbstractEnumComboElement.
147 * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
149 * @param parentElement
150 * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
153 * a {@link java.lang.String} object.
157 public EnumComboElement(CdmFormFactory formFactory
,
158 ICdmFormElement parentElement
, Class
<T
> enumType
, int style
) {
159 super(formFactory
, parentElement
);
160 this.enumType
= enumType
;
161 label
= formFactory
.createLabel(getLayoutComposite(), getDefaultLabelString());
165 combo
= new Combo(getLayoutComposite(), SWT
.BORDER
| SWT
.READ_ONLY
);
167 combo
.setLayoutData(LayoutConstants
.FILL_HORIZONTALLY());
168 setVisibleItemCount(DEFAULT_VISIBLE_ITEMS
);
172 combo
.addSelectionListener(this);
175 private String
getDefaultLabelString() {
176 if(enumType
.equals(ReferenceType
.class)){
177 return "Reference Type";
178 } else if (enumType
.equals(NomenclaturalCode
.class)){
179 return "Nomenclatural Code";
180 } else if(enumType
.equals(OriginalSourceType
.class)) {
181 return "Orig. Source Type";
182 } else if(enumType
.equals(SpecimenOrObservationType
.class)) {
183 return "Spec./Obs. Type";
193 private void populateTypes(){
194 for(T enumElement
: getElementsForClass(enumType
)){
195 elementTypeList
.add(enumElement
);
196 combo
.add(((Enum
) enumElement
).name());
202 * Setter for the field <code>selection</code>.
206 * the selection to set
208 public void setSelection(T selection
) {
209 this.selection
= selection
;
210 combo
.select(elementTypeList
.indexOf(selection
));
215 * addSelectionListener
219 * a {@link org.eclipse.swt.events.SelectionListener} object.
221 public void addSelectionListener(SelectionListener listener
) {
222 combo
.addSelectionListener(listener
);
227 * removeSelectionListener
231 * a {@link org.eclipse.swt.events.SelectionListener} object.
233 public void removeSelectionListener(SelectionListener listener
) {
234 combo
.removeSelectionListener(listener
);
238 public void setSelected(boolean selected
) {
239 setBackground(selected ? SELECTED
: getPersistentBackground());
244 * Getter for the field <code>selection</code>.
247 * @return the selection
249 public T
getSelection() {
254 public void setEnabled(boolean enabled
) {
255 combo
.setEnabled(enabled
);
262 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
263 * .events.SelectionEvent)
266 public void widgetSelected(SelectionEvent e
) {
267 selection
= elementTypeList
.get(combo
.getSelectionIndex());
268 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e
));
272 public void setIrrelevant(boolean irrelevant
) {
273 String colorId
= irrelevant ? Resources
.COLOR_COMPOSITE_IRRELEVANT
274 : Resources
.COLOR_COMPOSITE_BACKGROUND
;
276 Color color
= StoreUtil
.getColor(colorId
);
277 combo
.setBackground(color
);
282 public void setBackground(Color color
) {
283 label
.setBackground(color
);
287 public void widgetDefaultSelected(SelectionEvent e
) {
290 public void setVisibleItemCount(int visibleItems
){
291 combo
.setVisibleItemCount(visibleItems
);
294 private Collection
<T
> getElementsForClass(Class
<T
> clazz
){
295 CdmEnumDataHolder
<T
> dataHolder
= getCdmEnumDataHolderForClass(clazz
);
296 if (dataHolder
!= null) {
297 return dataHolder
.getElements();
302 private CdmEnumDataHolder
<T
> getCdmEnumDataHolderForClass(Class
<T
> clazz
){
303 for (CdmEnumDataHolder dataHolder
: cdmEnumDataHolders
) {
304 if (dataHolder
.getClazz().equals(clazz
)){
311 private interface CdmEnumDataHolder
<T
> {
314 Collection
<T
> getElements();