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