import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map.Entry;
private final Class<T> enumType;
public EnumComboElement(CdmFormFactory formFactory,
- ICdmFormElement parentElement, Class<T> enumType, int style) {
+ ICdmFormElement parentElement, Class<T> enumType, Comparator<T> comparator, int style) {
super(formFactory, parentElement);
this.enumType = enumType;
label.setText(getDefaultLabelString());
- populateTypes();
+ populateTypes(comparator);
combo.addSelectionListener(this);
}
return "No Label";
}
- private void populateTypes(){
- Collection<T> elementsForClass = getElementsForClass(enumType);
+ private void populateTypes(Comparator<T> comparator){
+ List<T> elementsForClass = new ArrayList<T>(getElementsForClass(enumType));
+ if(comparator!=null){
+ Collections.sort(elementsForClass, comparator);
+ }
// special hierarchical order for specimens
if(enumType.equals(SpecimenOrObservationType.class)){
LinkedHashMap<T, String> orderedTerms = AbstractUtility.orderTerms(elementsForClass);
}
// default order
else{
- for(T enumElement : getElementsForClass(enumType)){
+ for(T enumElement : elementsForClass){
elementTypeList.add(enumElement);
combo.add(((Enum) enumElement).name());
}
import java.net.URI;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
return element;
}
- /**
- * <p>
- * createEnumComboElement
- * </p>
- *
- * @param enumComboType
- * a
- * {@link eu.eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.EnumComboType}
- * object.
- * @param parentElement
- * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
- * object.
- * @param style
- * a int.
- * @return a {@link eu.etaxonomy.taxeditor.ui.term.AbstractEnumComboElement}
- * object.
- */
public <T extends IEnumTerm<T>> EnumComboElement<T> createEnumComboElement(
- Class<T> enumComboType, ICdmFormElement parentElement,
+ Class<T> enumComboType, ICdmFormElement parentElement,
+ int style) {
+ return createEnumComboElement(enumComboType, parentElement, null, style);
+ }
+
+ public <T extends IEnumTerm<T>> EnumComboElement<T> createEnumComboElement(
+ Class<T> enumComboType, ICdmFormElement parentElement, Comparator<T> comparator,
int style) {
- EnumComboElement<T> element = new EnumComboElement<T>(this, parentElement, enumComboType, style);
+ EnumComboElement<T> element = new EnumComboElement<T>(this, parentElement, enumComboType, comparator, style);
adapt(element);
parentElement.addElement(element);
return element;
AbstractFormSection section, ENTITY entity, SelectionListener removeListener,
boolean isChoosableEntity, Color backgroundColor, int style) {
super(formFactory, (ICdmFormElement) section);
+ this.entity = entity;
init();
package eu.etaxonomy.taxeditor.ui.section.supplemental;
+import java.util.Comparator;
+
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionListener;
public void createControls(ICdmFormElement formElement, int style) {
combo_origsourcetype = formFactory
.createEnumComboElement(OriginalSourceType.class,
- formElement, style);
+ formElement, new OriginalSourceTypeComparator(getEntity()), style);
super.createControls(formElement, style);
text_idInSource = formFactory.createTextWithLabelElement(formElement, "ID in Source", null, style);
text_idNamespace = formFactory.createTextWithLabelElement(formElement, "ID Namespace", null, style);
text_originaleNameString = formFactory.createTextWithLabelElement(
formElement, "Original Name", null, SWT.NULL);
}
+
+ /**
+ * Sorts source type combo alphabetically <b>except</b> for PrimaryTaxonomicSource resp.
+ * PrimaryMediaSource which are alway on top depending on the IdentifiableSource;
+ * @author pplitzner
+ * @date Jan 6, 2017
+ *
+ */
+ private class OriginalSourceTypeComparator implements Comparator<OriginalSourceType>{
+
+ private OriginalSourceBase entity;
+
+ public OriginalSourceTypeComparator(OriginalSourceBase entity) {
+ this.entity = entity;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int compare(OriginalSourceType o1, OriginalSourceType o2) {
+ if(o1!=null && o2==null){
+ return 1;
+ }
+ else if(o1==null && o2!=null){
+ return -1;
+ }
+ else if(o1!=null && o2 !=null){
+ if(entity.getType().equals(OriginalSourceType.PrimaryMediaSource)){
+ if(o1.equals(OriginalSourceType.PrimaryMediaSource)){
+ return -1;
+ }
+ else if(o2.equals(OriginalSourceType.PrimaryMediaSource)){
+ return 1;
+ }
+ }
+ else{
+ if(o1.equals(OriginalSourceType.PrimaryTaxonomicSource)){
+ return -1;
+ }
+ else if(o2.equals(OriginalSourceType.PrimaryTaxonomicSource)){
+ return 1;
+ }
+ }
+ String message1 = o1.getMessage();
+ String message2 = o2.getMessage();
+ return message1.compareTo(message2);
+ }
+ return 0;
+ }
+
+ }
}