From fd6e3fee402455ca8496d1755f6d1b89dd8ca21d Mon Sep 17 00:00:00 2001
From: Alexander Diewald <diewald@fortiss.org>
Date: Wed, 18 Dec 2019 19:13:07 +0100
Subject: [PATCH] Editor Bindings: Move priority sorting to the service

* Priorities define the sorting of ExtendableMultipageEditors and the
  order in which the MVC factories are queried by the delegate ones.
* Instead of doing this lazily when opening some editor, sort the
  bindings already when starting the binding service to obtain a clearly
  defined behavior.

Issue-Ref: 3883
Issue-Url: https://af3-developer.fortiss.org/issues/3883
Signed-off-by: Alexander Diewald <diewald@fortiss.org>
---
 .../org/fortiss/tooling/kernel/ui/internal/.ratings  |  2 +-
 .../ui/internal/ModelEditorBindingService.java       | 12 ++++++++++++
 .../tooling/kernel/ui/internal/editor/.ratings       |  2 +-
 .../internal/editor/ExtendableMultiPageEditor.java   |  8 --------
 4 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/.ratings b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/.ratings
index 3ffa2ff1c..b88ab98cf 100644
--- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/.ratings
+++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/.ratings
@@ -5,7 +5,7 @@ ConstraintUIService.java 433e35bb1c9bbc628c6ee070ff45632400becf4a GREEN
 ContextMenuService.java ca3c899293f25b70ce8e5f0d86ca2f9683329d81 GREEN
 EditPartFactoryService.java e9180c0020f1769d9e24ef3c08f9ca5599dbc5c3 GREEN
 MarkerService.java b01b7706034691683df7bbc2e7828c42574b3147 GREEN
-ModelEditorBindingService.java 3de291c87e2183ee2943e1c1d26f4bf78ce77a65 GREEN
+ModelEditorBindingService.java 577f5db41abf240291434dbad6bc6b0fde1eeb2b YELLOW
 ModelElementHandlerService.java 07a30545ad687ff0fe13bf7a9348c41fb03e0b2c GREEN
 NavigatorService.java 2b1361eac805996e22e5409dafff9707fbac3376 GREEN
 ToolingKernelUIInternal.java 38903445a9084b7908716a00f41621dfb3126fca GREEN
diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/ModelEditorBindingService.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/ModelEditorBindingService.java
index 3de291c87..577f5db41 100644
--- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/ModelEditorBindingService.java
+++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/ModelEditorBindingService.java
@@ -16,11 +16,13 @@
 package org.fortiss.tooling.kernel.ui.internal;
 
 import static java.util.Collections.emptyList;
+import static java.util.Collections.sort;
 import static org.fortiss.tooling.kernel.utils.KernelModelElementUtils.getParentElement;
 import static org.fortiss.tooling.kernel.utils.KernelModelElementUtils.isChildElementOf;
 import static org.fortiss.tooling.kernel.utils.LoggingUtils.error;
 
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.EventObject;
 import java.util.HashMap;
 import java.util.List;
@@ -97,6 +99,16 @@ public class ModelEditorBindingService extends EObjectAwareServiceBase<IModelEdi
 	@Override
 	public void startService() {
 		IKernelIntrospectionSystemService.getInstance().registerService(this);
+
+		for(List<IModelEditorBinding<EObject>> bindings : handlerMap.values()) {
+			sort(bindings, new Comparator<IModelEditorBinding<EObject>>() {
+				@Override
+				public int compare(IModelEditorBinding<EObject> o1,
+						IModelEditorBinding<EObject> o2) {
+					return o2.getPriority() - o1.getPriority();
+				}
+			});
+		}
 	}
 
 	/** Registers the given editor binding with the service. */
diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/editor/.ratings b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/editor/.ratings
index 8f1ce218b..a6bebbf7e 100644
--- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/editor/.ratings
+++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/editor/.ratings
@@ -1,5 +1,5 @@
 ActionBarContributor.java 18d9db3744c5381cca8b6823b5f7bc18183a1cfa GREEN
-ExtendableMultiPageEditor.java e06a7746f2bdcd2dfa279ae87e0578e0ee5046b2 GREEN
+ExtendableMultiPageEditor.java b18b5eed364eaa1c83cbcb64a89288d1ad263f7d YELLOW
 IActionContributingEditor.java 4aa7496d67822de919a8cf0af0ddaafc61bf2919 GREEN
 ModelElementEditorInput.java e269eff5d992d375a646e54d048f1f0efc6144dd GREEN
 TutorialStepUIEditor.java 9eadc96c302b5131ff4cc3715777718fa06ec7e8 GREEN
diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/editor/ExtendableMultiPageEditor.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/editor/ExtendableMultiPageEditor.java
index e06a7746f..b18b5eed3 100644
--- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/editor/ExtendableMultiPageEditor.java
+++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/editor/ExtendableMultiPageEditor.java
@@ -15,12 +15,10 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.kernel.ui.internal.editor;
 
-import static java.util.Collections.sort;
 import static org.conqat.ide.commons.ui.logging.LoggingUtils.error;
 
 import java.lang.reflect.Constructor;
 import java.util.Collection;
-import java.util.Comparator;
 import java.util.EventObject;
 import java.util.List;
 
@@ -186,12 +184,6 @@ public class ExtendableMultiPageEditor extends MultiPageEditorPart
 		int pageIndex = 0;
 		List<IModelEditorBinding<EObject>> bindings =
 				IModelEditorBindingService.getInstance().getBindings(editedObject);
-		sort(bindings, new Comparator<IModelEditorBinding<EObject>>() {
-			@Override
-			public int compare(IModelEditorBinding<EObject> o1, IModelEditorBinding<EObject> o2) {
-				return o2.getPriority() - o1.getPriority();
-			}
-		});
 		for(IModelEditorBinding<EObject> editorBinding : bindings) {
 			try {
 				Class<? extends IEditorPart> editorClass =
-- 
GitLab