package eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
import java.util.TreeMap;
+import java.util.TreeSet;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IStatus;
*/
@Override
public Map<Object, String> getKeyLabelPairs() {
-// Comparator<Object> comparator = new Comparator<Object>() {
-// public int compare(Object o1, Object o2) {
-// String key1 = ((SpecimenOrObservationType)o1).getKey();
-// String key2 = ((SpecimenOrObservationType)o2).getKey();
-// return key1.compareTo(key2);
-// }
-// };
-// Map<Object, String> result = new TreeMap<Object, String>(comparator);
-// Map<Object, String> result = new HashMap<Object, String>();
- Map<Object, String> result = new TreeMap<Object, String>();
+ Comparator<Object> comparator = new Comparator<Object>() {
+ @Override
+ public int compare(Object o1, Object o2) {
+ String key1 = ((SpecimenOrObservationType)o1).getKey();
+ String key2 = ((SpecimenOrObservationType)o2).getKey();
+ return key1.compareTo(key2);
+ }
+ };
+ Map<Object, String> result = new LinkedHashMap<Object, String>();
+
+ Map<SpecimenOrObservationType, Set<SpecimenOrObservationType>> typeHierarchy = new TreeMap<SpecimenOrObservationType, Set<SpecimenOrObservationType>>(comparator);
for(SpecimenOrObservationType sooType : SpecimenOrObservationType.values()) {
- result.put(sooType, sooType.getMessage());
+ Set<SpecimenOrObservationType> childList = new TreeSet<SpecimenOrObservationType>(comparator);
+ // add root element as keys
+ if(sooType.getKindOf()==null){
+ typeHierarchy.put(sooType, childList);
+ }
+ // add child element to topmost parent i.e. root
+ else{
+ SpecimenOrObservationType root = getRootFor(sooType);
+ if(typeHierarchy.containsKey(root)){
+ typeHierarchy.get(root).add(sooType);
+ }
+ else{
+ childList.add(sooType);
+ typeHierarchy.put(root, childList);
+ }
+ }
}
+ // create list according to the type hierarchy (root elements alphabetically with recursive children also alphabetically)
+ for(Entry<SpecimenOrObservationType, Set<SpecimenOrObservationType>> entry:typeHierarchy.entrySet()){
+ SpecimenOrObservationType root = entry.getKey();
+ result.put(root, root.getMessage());
+ for(SpecimenOrObservationType child:entry.getValue()){
+ result.put(child, " - " + child.getMessage());
+ }
+ }
return result;
}
+ private SpecimenOrObservationType getRootFor(SpecimenOrObservationType type){
+ SpecimenOrObservationType parent = type.getKindOf();
+ if(parent==null){
+ return type;
+ }
+ else{
+ return getRootFor(type.getKindOf());
+ }
+ }
+
@Override
public boolean savesEntity() {
// TODO Auto-generated method stub