- created utility method in AbstractUtility for sorting/ordering IEnumTerms accordin...
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / combo / EnumComboElement.java
index 3371a6ae531dbfcd310698b2fd49384153095cda..16047827455312dafafd1c47f1220d2db85c680b 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 /**
  * Copyright (C) 2007 EDIT
- * European Distributed Institute of Taxonomy 
+ * European Distributed Institute of Taxonomy
  * http://www.e-taxonomy.eu
- * 
+ *
  * The contents of this file are subject to the Mozilla Public License Version 1.1
  * See LICENSE.TXT at the top of this package for the full license terms.
  */
@@ -14,6 +14,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map.Entry;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
@@ -22,12 +23,12 @@ import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Label;
 
-import eu.etaxonomy.cdm.model.common.IDefinedTerm;
 import eu.etaxonomy.cdm.model.common.IEnumTerm;
 import eu.etaxonomy.cdm.model.common.OriginalSourceType;
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
 import eu.etaxonomy.cdm.model.reference.ReferenceType;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.preference.Resources;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
 import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
@@ -42,7 +43,7 @@ import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
  * <p>
  * Abstract AbstractEnumComboElement class.
  * </p>
- * 
+ *
  * @author n.hoffmann
  * @created Mar 16, 2010
  * @version 1.0
@@ -53,7 +54,7 @@ public class EnumComboElement<T extends IEnumTerm> extends
 
        private static CdmEnumDataHolder[] cdmEnumDataHolders = {
                new CdmEnumDataHolder<NomenclaturalCode>(){
-                       
+
                        @Override
                        public String getName() {
                                return "Nomenclatural Code";
@@ -68,7 +69,7 @@ public class EnumComboElement<T extends IEnumTerm> extends
                        public Class<NomenclaturalCode> getClazz() {
                                return NomenclaturalCode.class;
                        }
-                       
+
                },
                new CdmEnumDataHolder<ReferenceType>(){
 
@@ -86,7 +87,7 @@ public class EnumComboElement<T extends IEnumTerm> extends
                        public Class<ReferenceType> getClazz() {
                                return ReferenceType.class;
                        }
-                       
+
                },
                new CdmEnumDataHolder<SpecimenOrObservationType>(){
 
@@ -104,7 +105,7 @@ public class EnumComboElement<T extends IEnumTerm> extends
                        public Class<SpecimenOrObservationType> getClazz() {
                                return SpecimenOrObservationType.class;
                        }
-                       
+
                },
                new CdmEnumDataHolder<OriginalSourceType>(){
 
@@ -122,27 +123,27 @@ public class EnumComboElement<T extends IEnumTerm> extends
                        public Class<OriginalSourceType> getClazz() {
                                return OriginalSourceType.class;
                        }
-                       
+
                }
-               
+
        };
-       
+
        private static final int DEFAULT_VISIBLE_ITEMS = 10;
 
        protected T selection;
 
        protected List<T> elementTypeList = new ArrayList<T>();
 
-       private Label label;
+       private final Label label;
        protected Combo combo;
 
-       private Class<T> enumType;
+       private final Class<T> enumType;
 
        /**
         * <p>
         * Constructor for AbstractEnumComboElement.
         * </p>
-        * 
+        *
         * @param formFactory
         *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
         *            object.
@@ -191,9 +192,9 @@ public class EnumComboElement<T extends IEnumTerm> extends
         * </p>
         */
        private void populateTypes(){
-               for(T enumElement : getElementsForClass(enumType)){
-                       elementTypeList.add(enumElement);
-                       combo.add(((Enum) enumElement).name());
+               for(Entry<T, String> keyLabelPair : AbstractUtility.orderTerms(getElementsForClass(enumType)).entrySet()){
+                       elementTypeList.add(keyLabelPair.getKey());
+                       combo.add(keyLabelPair.getValue());
                }
        }
 
@@ -201,7 +202,7 @@ public class EnumComboElement<T extends IEnumTerm> extends
         * <p>
         * Setter for the field <code>selection</code>.
         * </p>
-        * 
+        *
         * @param selection
         *            the selection to set
         */
@@ -214,7 +215,7 @@ public class EnumComboElement<T extends IEnumTerm> extends
         * <p>
         * addSelectionListener
         * </p>
-        * 
+        *
         * @param listener
         *            a {@link org.eclipse.swt.events.SelectionListener} object.
         */
@@ -226,7 +227,7 @@ public class EnumComboElement<T extends IEnumTerm> extends
         * <p>
         * removeSelectionListener
         * </p>
-        * 
+        *
         * @param listener
         *            a {@link org.eclipse.swt.events.SelectionListener} object.
         */
@@ -235,7 +236,8 @@ public class EnumComboElement<T extends IEnumTerm> extends
        }
 
        /** {@inheritDoc} */
-       public void setSelected(boolean selected) {
+       @Override
+    public void setSelected(boolean selected) {
                setBackground(selected ? SELECTED : getPersistentBackground());
        }
 
@@ -243,7 +245,7 @@ public class EnumComboElement<T extends IEnumTerm> extends
         * <p>
         * Getter for the field <code>selection</code>.
         * </p>
-        * 
+        *
         * @return the selection
         */
        public T getSelection() {
@@ -251,25 +253,28 @@ public class EnumComboElement<T extends IEnumTerm> extends
        }
 
        /** {@inheritDoc} */
-       public void setEnabled(boolean enabled) {
+       @Override
+    public void setEnabled(boolean enabled) {
                combo.setEnabled(enabled);
        }
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
         * .events.SelectionEvent)
         */
        /** {@inheritDoc} */
-       public void widgetSelected(SelectionEvent e) {
+       @Override
+    public void widgetSelected(SelectionEvent e) {
                selection = elementTypeList.get(combo.getSelectionIndex());
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
        }
 
        /** {@inheritDoc} */
-       public void setIrrelevant(boolean irrelevant) {
+       @Override
+    public void setIrrelevant(boolean irrelevant) {
                String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT
                                : Resources.COLOR_COMPOSITE_BACKGROUND;
 
@@ -284,21 +289,22 @@ public class EnumComboElement<T extends IEnumTerm> extends
        }
 
        /** {@inheritDoc} */
-       public void widgetDefaultSelected(SelectionEvent e) {
+       @Override
+    public void widgetDefaultSelected(SelectionEvent e) {
        }
-       
+
        public void setVisibleItemCount(int visibleItems){
                combo.setVisibleItemCount(visibleItems);
        }
-       
+
        private Collection<T> getElementsForClass(Class<T> clazz){
                CdmEnumDataHolder<T> dataHolder = getCdmEnumDataHolderForClass(clazz);
                if (dataHolder != null) {
-                       return dataHolder.getElements(); 
+                       return dataHolder.getElements();
                }
                return null;
        }
-       
+
        private CdmEnumDataHolder<T> getCdmEnumDataHolderForClass(Class<T> clazz){
                for (CdmEnumDataHolder dataHolder : cdmEnumDataHolders) {
                        if (dataHolder.getClazz().equals(clazz)){
@@ -307,7 +313,7 @@ public class EnumComboElement<T extends IEnumTerm> extends
                }
                return null;
        }
-       
+
        private interface CdmEnumDataHolder<T> {
                Class<T> getClazz();
                String getName();