]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/visuals/VisualsContribution.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.browsing.ui.model / src / org / simantics / browsing / ui / model / visuals / VisualsContribution.java
diff --git a/bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/visuals/VisualsContribution.java b/bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/visuals/VisualsContribution.java
new file mode 100644 (file)
index 0000000..a426efd
--- /dev/null
@@ -0,0 +1,122 @@
+/*******************************************************************************\r
+ * Copyright (c) 2010, 2011 Association for Decentralized Information Management in\r
+ * 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.model.visuals;\r
+\r
+import org.simantics.browsing.ui.model.InvalidContribution;\r
+import org.simantics.browsing.ui.model.check.CheckedStateContribution;\r
+import org.simantics.browsing.ui.model.check.CheckedStateRule;\r
+import org.simantics.browsing.ui.model.imagedecorators.ImageDecorationContribution;\r
+import org.simantics.browsing.ui.model.imagedecorators.ImageDecorationRule;\r
+import org.simantics.browsing.ui.model.images.ImageContribution;\r
+import org.simantics.browsing.ui.model.images.ImageRule;\r
+import org.simantics.browsing.ui.model.labeldecorators.LabelDecorationContribution;\r
+import org.simantics.browsing.ui.model.labeldecorators.LabelDecorationRule;\r
+import org.simantics.browsing.ui.model.labels.LabelContribution;\r
+import org.simantics.browsing.ui.model.labels.LabelRule;\r
+import org.simantics.browsing.ui.model.modifiers.ModifierContribution;\r
+import org.simantics.browsing.ui.model.modifiers.ModifierRule;\r
+import org.simantics.browsing.ui.model.nodetypes.NodeType;\r
+import org.simantics.browsing.ui.model.nodetypes.OrderedNodeTypeMultiMap;\r
+import org.simantics.browsing.ui.model.sorters.SorterContribution;\r
+import org.simantics.browsing.ui.model.sorters.SorterRule;\r
+import org.simantics.browsing.ui.model.tests.Test;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.exception.AdaptionException;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.viewpoint.ontology.ViewpointResource;\r
+\r
+/**\r
+ * Produces labels for nodes of given node type.\r
+ * @author Hannu Niemistö\r
+ */\r
+public class VisualsContribution implements Comparable<VisualsContribution> {\r
+    protected NodeType nodeType;\r
+    protected Test test;\r
+    protected double priority;\r
+    \r
+    public VisualsContribution(NodeType nodeType, Test test, double priority) throws InvalidContribution {\r
+        if(test != null && !test.isCompatible(\r
+                nodeType.getContentType()\r
+                ))\r
+            throw new InvalidContribution("Test is not compatible with the content type.");\r
+        this.nodeType = nodeType;\r
+        this.test = test;\r
+        this.priority = priority;\r
+    }\r
+    \r
+    public static void load(ReadGraph g, Resource visualsContributionResource,\r
+            OrderedNodeTypeMultiMap<LabelContribution> labelContributions,\r
+            OrderedNodeTypeMultiMap<ImageContribution> imageContributions,\r
+            OrderedNodeTypeMultiMap<CheckedStateContribution> checkedStateContributions,\r
+            OrderedNodeTypeMultiMap<LabelDecorationContribution> labelDecorationContributions,\r
+            OrderedNodeTypeMultiMap<ImageDecorationContribution> imageDecorationContributions,\r
+            OrderedNodeTypeMultiMap<ModifierContribution> modifierContributions,\r
+            OrderedNodeTypeMultiMap<SorterContribution> sorterContributions,\r
+            OrderedNodeTypeMultiMap<FlatNodeContribution> flatNodeContributions) \r
+    throws DatabaseException, InvalidContribution {\r
+        ViewpointResource vr = ViewpointResource.getInstance(g);\r
+        \r
+        Resource testResource = g.getPossibleObject(visualsContributionResource, vr.VisualsContribution_HasCondition);\r
+        Test test = testResource == null ? null : g.adapt(testResource, Test.class);\r
+        \r
+        Double mpriority = g.getPossibleRelatedValue(visualsContributionResource, vr.VisualsContribution_HasPriority);\r
+        double priority = mpriority == null ? 0.0 : mpriority.doubleValue();         \r
+        \r
+        for(Resource nodeTypeResource : g.getObjects(visualsContributionResource, vr.VisualsContribution_HasNodeType)) {\r
+            NodeType nodeType = g.adapt(nodeTypeResource, NodeType.class);\r
+\r
+            for(Resource ruleResource : g.getObjects(visualsContributionResource, vr.VisualsContribution_HasRule)) {\r
+                if(ruleResource.equals(vr.FlatNodeRule)) \r
+                    flatNodeContributions.put(nodeType, FlatNodeContribution.INSTANCE);\r
+                else {          \r
+                    VisualsRule rule;\r
+                    try {\r
+                        rule = g.adapt(ruleResource, VisualsRule.class);\r
+                    } catch(AdaptionException e) {\r
+                        e.printStackTrace();\r
+                        continue;\r
+                    }                    \r
+                    try {\r
+                        // Note: the rule may be an instance of multiple interfaces\r
+                        if(rule instanceof LabelRule)\r
+                            labelContributions.put(nodeType, new LabelContribution(nodeType, test, (LabelRule)rule, priority));\r
+                        if(rule instanceof ModifierRule)\r
+                            modifierContributions.put(nodeType, new ModifierContribution(nodeType, test, (ModifierRule)rule, priority));\r
+                        if(rule instanceof ImageRule)\r
+                            imageContributions.put(nodeType, new ImageContribution(nodeType, test, (ImageRule)rule, priority));\r
+                        if(rule instanceof CheckedStateRule)\r
+                            checkedStateContributions.put(nodeType, new CheckedStateContribution(nodeType, test, (CheckedStateRule)rule, priority));\r
+                        if(rule instanceof LabelDecorationRule)\r
+                            labelDecorationContributions.put(nodeType, new LabelDecorationContribution(nodeType, test, (LabelDecorationRule)rule, priority));\r
+                        if(rule instanceof ImageDecorationRule)\r
+                            imageDecorationContributions.put(nodeType, new ImageDecorationContribution(nodeType, test, (ImageDecorationRule)rule, priority));\r
+                        if(rule instanceof SorterRule)\r
+                            sorterContributions.put(nodeType, new SorterContribution(nodeType, test, (SorterRule)rule, priority));\r
+                    } catch(InvalidContribution e) {\r
+                        e.printStackTrace();\r
+                        continue;\r
+                    }\r
+                }\r
+            }\r
+        }\r
+    }   \r
+    \r
+    public NodeType getNodeType() {\r
+        return nodeType;\r
+    }\r
+\r
+    @Override\r
+    public int compareTo(VisualsContribution o) {\r
+        return Double.compare(o.priority, priority);\r
+    }\r
+}\r