]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/Evaluators.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.browsing.ui.graph.impl / src / org / simantics / browsing / ui / graph / impl / Evaluators.java
diff --git a/bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/Evaluators.java b/bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/Evaluators.java
new file mode 100644 (file)
index 0000000..58d3cf5
--- /dev/null
@@ -0,0 +1,466 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.browsing.ui.graph.impl;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+import org.eclipse.jface.resource.ResourceManager;\r
+import org.simantics.browsing.ui.BuiltinKeys.CheckedStateKey;\r
+import org.simantics.browsing.ui.BuiltinKeys.ImageDecoratorKey;\r
+import org.simantics.browsing.ui.BuiltinKeys.ImagerKey;\r
+import org.simantics.browsing.ui.BuiltinKeys.LabelDecoratorKey;\r
+import org.simantics.browsing.ui.BuiltinKeys.LabelerKey;\r
+import org.simantics.browsing.ui.BuiltinKeys.ViewpointKey;\r
+import org.simantics.browsing.ui.CheckedState;\r
+import org.simantics.browsing.ui.NodeContext;\r
+import org.simantics.browsing.ui.PrimitiveQueryUpdater;\r
+import org.simantics.browsing.ui.Tester;\r
+import org.simantics.browsing.ui.common.EvaluatorData;\r
+import org.simantics.browsing.ui.common.EvaluatorData.Evaluator;\r
+import org.simantics.browsing.ui.common.EvaluatorData.EvaluatorTree;\r
+import org.simantics.browsing.ui.common.EvaluatorDataImpl;\r
+import org.simantics.browsing.ui.common.EvaluatorImpl;\r
+import org.simantics.browsing.ui.common.exception.InvalidBrowserIdException;\r
+import org.simantics.browsing.ui.common.extension.CheckedStateContributorBindingExtensionManager;\r
+import org.simantics.browsing.ui.common.extension.ComparableContextContributorBindingExtensionManager;\r
+import org.simantics.browsing.ui.common.extension.EvaluatorBindingExtensionManager;\r
+import org.simantics.browsing.ui.common.extension.EvaluatorFactory;\r
+import org.simantics.browsing.ui.common.extension.ImageDecoratorContributorBindingExtensionManager;\r
+import org.simantics.browsing.ui.common.extension.ImagerContributorBindingExtensionManager;\r
+import org.simantics.browsing.ui.common.extension.LabelDecoratorContributorBindingExtensionManager;\r
+import org.simantics.browsing.ui.common.extension.LabelerContributorBindingExtensionManager;\r
+import org.simantics.browsing.ui.common.extension.ViewpointContributionContributorBindingExtensionManager;\r
+import org.simantics.browsing.ui.content.CheckedStateFactory;\r
+import org.simantics.browsing.ui.content.ComparableContextFactory;\r
+import org.simantics.browsing.ui.content.ContributorBinding;\r
+import org.simantics.browsing.ui.content.ImageDecorator;\r
+import org.simantics.browsing.ui.content.ImageDecoratorFactory;\r
+import org.simantics.browsing.ui.content.Imager;\r
+import org.simantics.browsing.ui.content.ImagerFactory;\r
+import org.simantics.browsing.ui.content.LabelDecorator;\r
+import org.simantics.browsing.ui.content.LabelDecoratorFactory;\r
+import org.simantics.browsing.ui.content.Labeler;\r
+import org.simantics.browsing.ui.content.LabelerFactory;\r
+import org.simantics.browsing.ui.content.Viewpoint;\r
+import org.simantics.browsing.ui.content.ViewpointContributionFactory;\r
+import org.simantics.browsing.ui.content.ViewpointFactory;\r
+import org.simantics.browsing.ui.model.InvalidContribution;\r
+import org.simantics.browsing.ui.model.browsecontexts.BrowseContext;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.RequestProcessor;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.request.ReadRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.exception.ResourceNotFoundException;\r
+\r
+/**\r
+ * An entry point for loading an EvaluatorData in a data-oriented fashion. Also\r
+ * adds contributions made by extensions of the related extension points.\r
+ * \r
+ * @author Antti Villberg\r
+ */\r
+public class Evaluators {\r
+\r
+    public static final boolean DEBUG = false;\r
+\r
+    public static void create(EvaluatorData data, final ResourceManager resourceManager,\r
+            final Map<String, Collection<ContributorBinding<ViewpointContributionFactory>>> viewpointContributions,\r
+            final Set<ContributorBinding<ComparableContextFactory>> comparableContextContributions,\r
+            final Set<ContributorBinding<LabelerFactory>> labelerContributions,\r
+            final Set<ContributorBinding<CheckedStateFactory>> checkStateContributions,\r
+            final Set<ContributorBinding<LabelDecoratorFactory>> labelDecoratorContributions,\r
+            final Set<ContributorBinding<ImagerFactory>> imagerContributions,\r
+            final Set<ContributorBinding<ImageDecoratorFactory>> imageDecoratorContributions) {\r
+\r
+        Map<Class<?>, Evaluator> evaluators = new HashMap<Class<?>, Evaluator>();\r
+\r
+        HashMap<String, ContributionViewpointFactory> viewpointFactories = new HashMap<String, ContributionViewpointFactory>();\r
+\r
+        for(final Map.Entry<String, Collection<ContributorBinding<ViewpointContributionFactory>>> entry : viewpointContributions.entrySet()) {\r
+            Collection<ViewpointContributionFactory> factories = new ArrayList<ViewpointContributionFactory>();\r
+            for(ContributorBinding<ViewpointContributionFactory> binding : entry.getValue()) factories.add(binding.getContributor().getFactory());\r
+            viewpointFactories.put(entry.getKey(), new ContributionViewpointFactory(entry.getKey(), factories));\r
+        }\r
+\r
+        for(final Map.Entry<String, Collection<ContributorBinding<ViewpointContributionFactory>>> entry : viewpointContributions.entrySet()) {\r
+            ContributionViewpointFactory factory = viewpointFactories.get(entry.getKey());\r
+            for(ContributorBinding<ViewpointContributionFactory> binding : entry.getValue()) {\r
+                Tester test = binding.getContributor().getNodeContextTester();\r
+                Class<?> clazz = binding.getContributor().getInputClass();\r
+                Evaluator evaluator = evaluators.get(clazz);\r
+                if(evaluator == null) {\r
+                    evaluator = data.newEvaluator();\r
+                    evaluators.put(clazz, evaluator);\r
+                }\r
+                if(test == null) {\r
+                    if (DEBUG)\r
+                        System.out.println("add root viewpoint " + factory + " to class " + clazz.getSimpleName());\r
+                    evaluator.addViewpoint(factory, binding.getPreference());\r
+                } else {\r
+                    if (DEBUG)\r
+                        System.out.println("add viewpoint " + factory + " to class " + clazz.getSimpleName() + " with tester " + test);\r
+                    EvaluatorTree<ViewpointFactory> branch = ((EvaluatorImpl)evaluator).getViewpointTree().addBranch(test);\r
+                    branch.addFactory(factory, binding.getPreference());\r
+                }\r
+            }\r
+        }\r
+\r
+        for(final ContributorBinding<ComparableContextFactory> binding : comparableContextContributions) {\r
+\r
+            ComparableContextFactory factory = binding.getContributor().getFactory();\r
+            Tester test = binding.getContributor().getNodeContextTester();\r
+            Class<?> clazz = binding.getContributor().getInputClass();\r
+            Evaluator evaluator = evaluators.get(clazz);\r
+            if(evaluator == null) {\r
+                evaluator = data.newEvaluator();\r
+                evaluators.put(clazz, evaluator);\r
+            }\r
+            if(test == null) {\r
+                if (DEBUG)\r
+                    System.out.println("add root comparable context " + factory + " to class " + clazz.getSimpleName());\r
+                evaluator.addComparableContext(factory, binding.getPreference());\r
+            } else {\r
+                if (DEBUG)\r
+                    System.out.println("add comparable context " + factory + " to class " + clazz.getSimpleName() + " with tester " + test);\r
+                EvaluatorTree<ComparableContextFactory> branch = ((EvaluatorImpl)evaluator).getComparableContextTree().addBranch(test);\r
+                branch.addFactory(factory, binding.getPreference());\r
+            }\r
+        }\r
+\r
+        for(final ContributorBinding<LabelerFactory> binding : labelerContributions) {\r
+\r
+            LabelerFactory factory = binding.getContributor().getFactory();\r
+            Tester test = binding.getContributor().getNodeContextTester();\r
+            Class<?> clazz = binding.getContributor().getInputClass();\r
+            Evaluator evaluator = evaluators.get(clazz);\r
+            if(evaluator == null) {\r
+                evaluator = data.newEvaluator();\r
+                evaluators.put(clazz, evaluator);\r
+            }\r
+            if(test == null) {\r
+                if (DEBUG)\r
+                    System.out.println("add root labeler " + factory + " to class " + clazz.getSimpleName());\r
+                evaluator.addLabeler(factory, binding.getPreference());\r
+            } else {\r
+                if (DEBUG)\r
+                    System.out.println("add labeler " + factory + " to class " + clazz.getSimpleName() + " with tester " + test);\r
+                EvaluatorTree<LabelerFactory> branch = ((EvaluatorImpl)evaluator).getLabelerTree().addBranch(test);\r
+                branch.addFactory(factory, binding.getPreference());\r
+            }\r
+        }\r
+\r
+        for(final ContributorBinding<CheckedStateFactory> binding : checkStateContributions) {\r
+\r
+            CheckedStateFactory factory = binding.getContributor().getFactory();\r
+            Tester test = binding.getContributor().getNodeContextTester();\r
+            Class<?> clazz = binding.getContributor().getInputClass();\r
+            Evaluator evaluator = evaluators.get(clazz);\r
+            if(evaluator == null) {\r
+                evaluator = data.newEvaluator();\r
+                evaluators.put(clazz, evaluator);\r
+            }\r
+            if(test == null) {\r
+                if (DEBUG)\r
+                    System.out.println("add root check state " + factory + " to class " + clazz.getSimpleName());\r
+                evaluator.addCheckState(factory, binding.getPreference());\r
+            } else {\r
+                if (DEBUG)\r
+                    System.out.println("add check state " + factory + " to class " + clazz.getSimpleName() + " with tester " + test);\r
+                EvaluatorTree<CheckedStateFactory> branch = ((EvaluatorImpl)evaluator).getCheckStateTree().addBranch(test);\r
+                branch.addFactory(factory, binding.getPreference());\r
+            }\r
+        }\r
+\r
+        for(final ContributorBinding<LabelDecoratorFactory> binding : labelDecoratorContributions) {\r
+\r
+            LabelDecoratorFactory factory = binding.getContributor().getFactory();\r
+            Tester test = binding.getContributor().getNodeContextTester();\r
+            Class<?> clazz = binding.getContributor().getInputClass();\r
+            Evaluator evaluator = evaluators.get(clazz);\r
+            if(evaluator == null) {\r
+                evaluator = data.newEvaluator();\r
+                evaluators.put(clazz, evaluator);\r
+            }\r
+            if(test == null) {\r
+                if (DEBUG)\r
+                    System.out.println("add root label decorator " + factory + " to class " + clazz.getSimpleName());\r
+                evaluator.addLabelDecorator(factory, binding.getPreference());\r
+            } else {\r
+                if (DEBUG)\r
+                    System.out.println("add label decorator " + factory + " to class " + clazz.getSimpleName() + " with tester " + test);\r
+                EvaluatorTree<LabelDecoratorFactory> branch = ((EvaluatorImpl)evaluator).getLabelDecoratorTree().addBranch(test);\r
+                branch.addFactory(factory, binding.getPreference());\r
+            }\r
+        }\r
+\r
+        for(final ContributorBinding<ImagerFactory> binding : imagerContributions) {\r
+\r
+            ImagerFactory factory = binding.getContributor().getFactory();\r
+            Tester test = binding.getContributor().getNodeContextTester();\r
+            Class<?> clazz = binding.getContributor().getInputClass();\r
+            Evaluator evaluator = evaluators.get(clazz);\r
+            if(evaluator == null) {\r
+                evaluator = data.newEvaluator();\r
+                evaluators.put(clazz, evaluator);\r
+            }\r
+            if(test == null) {\r
+                if (DEBUG)\r
+                    System.out.println("add root imager " + factory + " to class " + clazz.getSimpleName());\r
+                evaluator.addImager(factory, binding.getPreference());\r
+            } else {\r
+                if (DEBUG)\r
+                    System.out.println("add imager " + factory + " to class " + clazz.getSimpleName() + " with tester " + test);\r
+                EvaluatorTree<ImagerFactory> branch = ((EvaluatorImpl)evaluator).getImagerTree().addBranch(test);\r
+                branch.addFactory(factory, binding.getPreference());\r
+            }\r
+        }\r
+\r
+        for(final ContributorBinding<ImageDecoratorFactory> binding : imageDecoratorContributions) {\r
+\r
+            ImageDecoratorFactory factory = binding.getContributor().getFactory();\r
+            Tester test = binding.getContributor().getNodeContextTester();\r
+            Class<?> clazz = binding.getContributor().getInputClass();\r
+            Evaluator evaluator = evaluators.get(clazz);\r
+            if(evaluator == null) {\r
+                evaluator = data.newEvaluator();\r
+                evaluators.put(clazz, evaluator);\r
+            }\r
+            if(test == null) {\r
+                if (DEBUG)\r
+                    System.out.println("add root image decorator " + factory + " to class " + clazz.getSimpleName());\r
+                evaluator.addImageDecorator(factory, binding.getPreference());\r
+            } else {\r
+                if (DEBUG)\r
+                    System.out.println("add image decorator " + factory + " to class " + clazz.getSimpleName() + " with tester " + test);\r
+                EvaluatorTree<ImageDecoratorFactory> branch = ((EvaluatorImpl)evaluator).getImageDecoratorTree().addBranch(test);\r
+                branch.addFactory(factory, binding.getPreference());\r
+            }\r
+        }\r
+\r
+        for(Map.Entry<Class<?>, Evaluator> entry : evaluators.entrySet()) {\r
+            data.addEvaluator(entry.getKey(), entry.getValue());\r
+        }\r
+\r
+    }\r
+\r
+    /**\r
+     * @param processor\r
+     * @param browseContexts\r
+     * @param resourceManager\r
+     * @param data\r
+     * @return the URIs of the actual set of browse contexts loaded by this\r
+     *         method. If an included browse context resource has no URI, it\r
+     *         will not be included in this set.\r
+     */\r
+    public static Set<String> loadModelled(\r
+            RequestProcessor processor, \r
+            final Set<String> browseContexts, \r
+            final ResourceManager resourceManager,\r
+            final EvaluatorDataImpl data,\r
+            final boolean useNodeBrowseContexts,\r
+            final boolean useNodeActionContexts) {\r
+\r
+        final Set<String> allBrowseContexts = new HashSet<String>(browseContexts);\r
+\r
+        // Create evaluator\r
+        final EvaluatorImpl eval = new EvaluatorImpl();\r
+        data.addEvaluator(Object.class, eval);  \r
+        \r
+        try {\r
+\r
+            // Load data for evaluator\r
+            processor.syncRequest(new ReadRequest() {\r
+                \r
+                @Override\r
+                public void run(ReadGraph graph) throws DatabaseException {\r
+\r
+                    // Map browse context names to resources\r
+                    Collection<Resource> browseContextResources = new ArrayList<Resource>(browseContexts.size());\r
+                    for(String browseContext : browseContexts) {\r
+                        try {\r
+                            browseContextResources.add(graph.getResource(browseContext));\r
+                        } catch(ResourceNotFoundException e) {\r
+                            // Expected result, if no modelled contributions exist.\r
+                            //System.err.println("Didn't find " + browseContext + " while loading model browser.");\r
+                        } catch(DatabaseException e) {\r
+                            System.err.println("Didn't find " + browseContext + " while loading model browser.");\r
+                            e.printStackTrace();\r
+                        }\r
+                    }\r
+\r
+                    // Load browse context\r
+                    try {\r
+                        final BrowseContext browseContext = \r
+                            BrowseContext.create(graph, browseContextResources);\r
+                        \r
+                        data.setBrowseContext(browseContext);\r
+\r
+                        // Get URI's for all found browse contexts to fill return value\r
+                        for (Resource context : BrowseContext.findSubcontexts(graph, browseContextResources)) {\r
+                            String uri = graph.getPossibleURI(context);\r
+                            if (uri != null)\r
+                                allBrowseContexts.add(uri);\r
+                        }\r
+\r
+                        // Fill evaluator\r
+                        eval.addLabeler(new LabelerFactory() {\r
+                            @Override\r
+                            public Labeler create(PrimitiveQueryUpdater updater, final NodeContext context,\r
+                                    LabelerKey key) {\r
+                                return new EvaluatorLabeler(updater, context, key, browseContext, useNodeBrowseContexts);\r
+                            }\r
+                        }, 0.0);\r
+\r
+                        eval.addImager(new ImagerFactory() {\r
+                            @Override\r
+                            public Imager create(PrimitiveQueryUpdater updater, NodeContext context,\r
+                                    ImagerKey key) {\r
+                                return new EvaluatorImager(updater, context, key, browseContext, useNodeBrowseContexts);\r
+                            }\r
+                        }, 0.0);\r
+\r
+                        eval.addCheckState(new CheckedStateFactory() {\r
+\r
+                            @Override\r
+                            public CheckedState create(PrimitiveQueryUpdater updater,\r
+                                    NodeContext context, CheckedStateKey key) {\r
+                                return new EvaluatorCheckedState(updater, context, key, browseContext, useNodeBrowseContexts).getState();\r
+                            }\r
+                        }, 0.0);\r
+\r
+                        eval.addLabelDecorator(new LabelDecoratorFactory() {\r
+                            @Override\r
+                            public LabelDecorator create(PrimitiveQueryUpdater updater,\r
+                                    NodeContext context, LabelDecoratorKey key) {\r
+                                return new EvaluatorLabelDecorator(updater, context, key, browseContext, useNodeBrowseContexts);\r
+                            }\r
+                        }, 0.0);\r
+\r
+                        eval.addImageDecorator(new ImageDecoratorFactory() {\r
+                            @Override\r
+                            public ImageDecorator create(PrimitiveQueryUpdater updater,\r
+                                    NodeContext context, ImageDecoratorKey key) {\r
+                                return new EvaluatorImageDecorator(updater, context, key, browseContext, useNodeBrowseContexts);\r
+                            }\r
+                        }, 0.0);\r
+\r
+                        eval.addViewpoint(new ViewpointFactory() {\r
+                            @Override\r
+                            public Viewpoint create(PrimitiveQueryUpdater updater, \r
+                                    final NodeContext context,\r
+                                    ViewpointKey key) {\r
+                                return new EvaluatorViewpoint(updater, context, key, browseContext, useNodeBrowseContexts, useNodeActionContexts);\r
+                            }\r
+                        }, 0.0);\r
+                    } catch (InvalidContribution e) {\r
+                        e.printStackTrace();\r
+                        return;\r
+                    }\r
+\r
+                }\r
+\r
+            });\r
+\r
+        } catch (DatabaseException e) {\r
+\r
+            e.printStackTrace();\r
+\r
+        }\r
+\r
+        return allBrowseContexts;\r
+    }\r
+\r
+    public static void loadExtensions(RequestProcessor processor, final Set<String> browseContexts, final ResourceManager resourceManager,\r
+            final Map<String, Collection<ContributorBinding<ViewpointContributionFactory>>> viewpointContributions,\r
+            final Set<ContributorBinding<ComparableContextFactory>> comparableContextContributions,\r
+            final Set<ContributorBinding<LabelerFactory>> labelerContributions,\r
+            final Set<ContributorBinding<CheckedStateFactory>> checkStateContributions,\r
+            final Set<ContributorBinding<LabelDecoratorFactory>> labelDecoratorContributions,\r
+            final Set<ContributorBinding<ImagerFactory>> imagerContributions,\r
+            final Set<ContributorBinding<ImageDecoratorFactory>> imageDecoratorContributions) {\r
+\r
+        for(ContributorBinding<ViewpointContributionFactory> binding : ViewpointContributionContributorBindingExtensionManager.getInstance().getBoundContributions(browseContexts)) {\r
+            String viewpointId = binding.getContributor().getFactory().getViewpointId();\r
+            Collection<ContributorBinding<ViewpointContributionFactory>> viewpoints = viewpointContributions.get(viewpointId);\r
+            if(viewpoints == null) {\r
+                viewpoints = new ArrayList<ContributorBinding<ViewpointContributionFactory>>();\r
+                viewpointContributions.put(viewpointId, viewpoints);\r
+            }\r
+            viewpoints.add(binding);\r
+        }\r
+\r
+        for(final ContributorBinding<ComparableContextFactory> binding : ComparableContextContributorBindingExtensionManager.getInstance().getBoundContributions(browseContexts)) {\r
+            comparableContextContributions.add(binding);\r
+        }\r
+\r
+        for(final ContributorBinding<LabelerFactory> binding : LabelerContributorBindingExtensionManager.getInstance().getBoundContributions(browseContexts)) {\r
+            labelerContributions.add(binding);\r
+        }\r
+\r
+        for(final ContributorBinding<CheckedStateFactory> binding : CheckedStateContributorBindingExtensionManager.getInstance().getBoundContributions(browseContexts)) {\r
+            checkStateContributions.add(binding);\r
+        }\r
+\r
+        for(final ContributorBinding<LabelDecoratorFactory> binding : LabelDecoratorContributorBindingExtensionManager.getInstance().getBoundContributions(browseContexts)) {\r
+            labelDecoratorContributions.add(binding);\r
+        }\r
+\r
+        for(final ContributorBinding<ImagerFactory> binding : ImagerContributorBindingExtensionManager.getInstance().getBoundContributions(browseContexts)) {\r
+            imagerContributions.add(binding);\r
+        }\r
+\r
+        for(final ContributorBinding<ImageDecoratorFactory> binding : ImageDecoratorContributorBindingExtensionManager.getInstance().getBoundContributions(browseContexts)) {\r
+            imageDecoratorContributions.add(binding);\r
+        }\r
+\r
+    }\r
+\r
+    public static EvaluatorData load(RequestProcessor processor, Set<String> browseContexts, ResourceManager resourceManager) throws InvalidBrowserIdException {\r
+        return load(processor, browseContexts, resourceManager, false, false);\r
+    }\r
+\r
+    public static EvaluatorData load(RequestProcessor processor, Set<String> browseContexts, ResourceManager resourceManager, boolean useNodeBrowseContexts, boolean useNodeActionContexts) throws InvalidBrowserIdException {\r
+\r
+        Map<String, Collection<ContributorBinding<ViewpointContributionFactory>>> viewpointContributions = new HashMap<String, Collection<ContributorBinding<ViewpointContributionFactory>>>();\r
+        Set<ContributorBinding<ComparableContextFactory>> comparableContextContributions = new HashSet<ContributorBinding<ComparableContextFactory>>();\r
+        Set<ContributorBinding<LabelerFactory>> labelerContributions = new HashSet<ContributorBinding<LabelerFactory>>();\r
+        Set<ContributorBinding<CheckedStateFactory>> checkStateContributions = new HashSet<ContributorBinding<CheckedStateFactory>>();\r
+        Set<ContributorBinding<LabelDecoratorFactory>> labelDecoratorContributions = new HashSet<ContributorBinding<LabelDecoratorFactory>>();\r
+        Set<ContributorBinding<ImagerFactory>> imagerContributions = new HashSet<ContributorBinding<ImagerFactory>>();\r
+        Set<ContributorBinding<ImageDecoratorFactory>> imageDecoratorContributions = new HashSet<ContributorBinding<ImageDecoratorFactory>>();\r
+\r
+        EvaluatorDataImpl data = new EvaluatorDataImpl();\r
+\r
+        // Load modelled contributions\r
+        Set<String> allBrowseContexts = loadModelled(processor, browseContexts, resourceManager, data, useNodeBrowseContexts, useNodeActionContexts);\r
+\r
+        // Load extension point contributions\r
+        loadExtensions(processor, allBrowseContexts, resourceManager, viewpointContributions, comparableContextContributions, labelerContributions, checkStateContributions, labelDecoratorContributions, imagerContributions, imageDecoratorContributions);\r
+\r
+        // Create contributed evaluators\r
+        create(data, resourceManager, viewpointContributions, comparableContextContributions, labelerContributions, checkStateContributions, labelDecoratorContributions, imagerContributions, imageDecoratorContributions);\r
+\r
+        // Create plugin evaluators for the contexts\r
+        for(EvaluatorFactory factory : EvaluatorBindingExtensionManager.getInstance().getBoundFactories(allBrowseContexts)) {\r
+            data.addEvaluator(factory.getClazz(), factory.create(allBrowseContexts));\r
+        }\r
+\r
+        return data;\r
+\r
+    }\r
+    \r
+}\r