From 1a73b424f2e94414650a9bf6a6a4afaec89005a1 Mon Sep 17 00:00:00 2001
From: Simon Barner <barner@fortiss.org>
Date: Tue, 21 Sep 2021 10:50:31 +0200
Subject: [PATCH] Keep Combo values (EENum literals, EReference objects) sorted

* Use TreeMap for return value

Issue-Ref: 4092
Issue-Url: https://git.fortiss.org/af3/af3/-/issues/4092

Signed-off-by: Simon Barner <barner@fortiss.org>
---
 .../base/ui/annotation/view/fx/.ratings       |  2 +-
 .../view/fx/AnnotationViewFXController.java   | 33 ++++++++++++++-----
 2 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/.ratings
index e7cd505cf..be6692896 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/.ratings
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/.ratings
@@ -1,6 +1,6 @@
 AnnotationFxViewPart.java ca1548c49aa3842a9436262531464ba345b83688 GREEN
 AnnotationTreeTableUIProvider.java 9efdeb7261cafe9dfe763daf20af186c906c3ec3 YELLOW
-AnnotationViewFXController.java 7d62ea076e87b14c4916935d3466168503c83c6f YELLOW
+AnnotationViewFXController.java c2b3e6a1cbffae55b88bff93418fa5797585d75d YELLOW
 AnnotationsFXUtils.java e180d593b69b1e4b90adf83ba47753b29f9d6ff8 YELLOW
 ColumnHandle.java 7b0fe536d4eb9faa63c4d812f0c078cf83d0fd42 GREEN
 FXAnnotationFilterContentProvider.java ca4587ef5dce1288ee4d7bf3bea5bd544ce6b89e GREEN
diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/AnnotationViewFXController.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/AnnotationViewFXController.java
index 7d62ea076..c2b3e6a1c 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/AnnotationViewFXController.java
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/annotation/view/fx/AnnotationViewFXController.java
@@ -18,7 +18,6 @@ package org.fortiss.tooling.base.ui.annotation.view.fx;
 import static java.util.Collections.emptyMap;
 import static java.util.Collections.sort;
 import static java.util.stream.Collectors.toList;
-import static java.util.stream.Collectors.toMap;
 import static org.fortiss.tooling.base.ui.annotation.view.fx.AnnotationsFXUtils.getValueLabel;
 import static org.fortiss.tooling.base.ui.annotation.view.fx.FXAnnotationFilterContentProvider.HIERARCHY_LEVELS_ALL;
 import static org.fortiss.tooling.base.ui.annotation.view.fx.FXAnnotationFilterContentProvider.HIERARCHY_LEVELS_CURRENT;
@@ -29,15 +28,18 @@ import static org.fortiss.tooling.kernel.utils.EcoreUtils.getFirstParentWithType
 import static org.fortiss.tooling.kernel.utils.LoggingUtils.showWarning;
 
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.TreeMap;
 import java.util.TreeSet;
 
 import org.eclipse.emf.common.util.BasicEList;
 import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.Enumerator;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.emf.ecore.EEnum;
@@ -451,9 +453,21 @@ public class AnnotationViewFXController extends CompositeFXControllerBase<SplitP
 
 		EClassifier eType = featureDescriptor.getEType(specification);
 		if(eType instanceof EEnum) {
-			EList<EEnumLiteral> allLiterals = ((EEnum)eType).getELiterals();
 
-			return allLiterals.stream().collect(toMap(l -> l.getInstance(), l -> l.getLiteral()));
+			Map<Object, String> rval = new TreeMap<>(new Comparator<Object>() {
+
+				@Override
+				public int compare(Object e1, Object e2) {
+					return Integer.compare(((Enumerator)e1).getValue(),
+							((Enumerator)e2).getValue());
+				}
+			});
+
+			for(EEnumLiteral lit : featureDescriptor.getEnumLiterals((EEnum)eType, modelElement)) {
+				rval.put(lit.getInstance(), lit.getLiteral());
+			}
+
+			return rval;
 		} else if(eType instanceof EClass) {
 
 			EObject root = featureDescriptor.getValueRootElement(modelElement);
@@ -461,19 +475,22 @@ public class AnnotationViewFXController extends CompositeFXControllerBase<SplitP
 				return emptyMap();
 			}
 
-			EList<EObject> values = new BasicEList<EObject>();
+			EList<EObject> refValues = new BasicEList<EObject>();
 			if(featureDescriptor.getEReferenceScope() == EReferenceScope.SUB_MODEL) {
-				values.add(root);
+				refValues.add(root);
 			}
 			Class<? extends EObject> clazz = (Class<? extends EObject>)eType.getInstanceClass();
 			for(EObject obj : getChildrenWithType(root, clazz)) {
 				if(featureDescriptor.isAvailableObject(obj, specification, modelElement)) {
-					values.add(obj);
+					refValues.add(obj);
 				}
 			}
 
-			sort(values, new HierarchicalNameComparator());
-			return values.stream().collect(toMap(v -> v, v -> getValueLabel(v, root)));
+			Map<Object, String> rval = new TreeMap<>(new HierarchicalNameComparator());
+			for(EObject obj : refValues) {
+				rval.put(obj, getValueLabel(obj, root));
+			}
+			return rval;
 		}
 
 		return emptyMap();
-- 
GitLab