]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.model/src/org/simantics/browsing/ui/model/visuals/VisualsContribution.java
Sync git svn branch with SVN repository r33144.
[simantics/platform.git] / bundles / org.simantics.browsing.ui.model / src / org / simantics / browsing / ui / model / visuals / VisualsContribution.java
1 /*******************************************************************************\r
2  * Copyright (c) 2010, 2011 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.browsing.ui.model.visuals;\r
13 \r
14 import org.simantics.browsing.ui.model.InvalidContribution;\r
15 import org.simantics.browsing.ui.model.check.CheckedStateContribution;\r
16 import org.simantics.browsing.ui.model.check.CheckedStateRule;\r
17 import org.simantics.browsing.ui.model.imagedecorators.ImageDecorationContribution;\r
18 import org.simantics.browsing.ui.model.imagedecorators.ImageDecorationRule;\r
19 import org.simantics.browsing.ui.model.images.ImageContribution;\r
20 import org.simantics.browsing.ui.model.images.ImageRule;\r
21 import org.simantics.browsing.ui.model.labeldecorators.LabelDecorationContribution;\r
22 import org.simantics.browsing.ui.model.labeldecorators.LabelDecorationRule;\r
23 import org.simantics.browsing.ui.model.labels.LabelContribution;\r
24 import org.simantics.browsing.ui.model.labels.LabelRule;\r
25 import org.simantics.browsing.ui.model.modifiers.ModifierContribution;\r
26 import org.simantics.browsing.ui.model.modifiers.ModifierRule;\r
27 import org.simantics.browsing.ui.model.nodetypes.NodeType;\r
28 import org.simantics.browsing.ui.model.nodetypes.OrderedNodeTypeMultiMap;\r
29 import org.simantics.browsing.ui.model.sorters.SorterContribution;\r
30 import org.simantics.browsing.ui.model.sorters.SorterRule;\r
31 import org.simantics.browsing.ui.model.tests.Test;\r
32 import org.simantics.browsing.ui.model.tooltips.TooltipContribution;\r
33 import org.simantics.browsing.ui.model.tooltips.TooltipRule;\r
34 import org.simantics.db.ReadGraph;\r
35 import org.simantics.db.Resource;\r
36 import org.simantics.db.exception.AdaptionException;\r
37 import org.simantics.db.exception.DatabaseException;\r
38 import org.simantics.viewpoint.ontology.ViewpointResource;\r
39 \r
40 /**\r
41  * Produces labels for nodes of given node type.\r
42  * @author Hannu Niemistö\r
43  */\r
44 public class VisualsContribution implements Comparable<VisualsContribution> {\r
45     protected NodeType nodeType;\r
46     protected Test test;\r
47     protected double priority;\r
48     \r
49     public VisualsContribution(NodeType nodeType, Test test, double priority) throws InvalidContribution {\r
50         if(test != null && !test.isCompatible(\r
51                 nodeType.getContentType()\r
52                 ))\r
53             throw new InvalidContribution("Test is not compatible with the content type.");\r
54         this.nodeType = nodeType;\r
55         this.test = test;\r
56         this.priority = priority;\r
57     }\r
58     \r
59     public static void load(ReadGraph g, Resource visualsContributionResource,\r
60             OrderedNodeTypeMultiMap<LabelContribution> labelContributions,\r
61             OrderedNodeTypeMultiMap<ImageContribution> imageContributions,\r
62             OrderedNodeTypeMultiMap<CheckedStateContribution> checkedStateContributions,\r
63             OrderedNodeTypeMultiMap<LabelDecorationContribution> labelDecorationContributions,\r
64             OrderedNodeTypeMultiMap<ImageDecorationContribution> imageDecorationContributions,\r
65             OrderedNodeTypeMultiMap<ModifierContribution> modifierContributions,\r
66             OrderedNodeTypeMultiMap<SorterContribution> sorterContributions,\r
67             OrderedNodeTypeMultiMap<FlatNodeContribution> flatNodeContributions,\r
68             OrderedNodeTypeMultiMap<TooltipContribution> tooltipContributions)\r
69     throws DatabaseException, InvalidContribution {\r
70         ViewpointResource vr = ViewpointResource.getInstance(g);\r
71         \r
72         Resource testResource = g.getPossibleObject(visualsContributionResource, vr.VisualsContribution_HasCondition);\r
73         Test test = testResource == null ? null : g.adapt(testResource, Test.class);\r
74         \r
75         Double mpriority = g.getPossibleRelatedValue(visualsContributionResource, vr.VisualsContribution_HasPriority);\r
76         double priority = mpriority == null ? 0.0 : mpriority.doubleValue();         \r
77         \r
78         for(Resource nodeTypeResource : g.getObjects(visualsContributionResource, vr.VisualsContribution_HasNodeType)) {\r
79             NodeType nodeType = g.adapt(nodeTypeResource, NodeType.class);\r
80 \r
81             for(Resource ruleResource : g.getObjects(visualsContributionResource, vr.VisualsContribution_HasRule)) {\r
82                 if(ruleResource.equals(vr.FlatNodeRule)) \r
83                     flatNodeContributions.put(nodeType, FlatNodeContribution.INSTANCE);\r
84                 else {          \r
85                     VisualsRule rule;\r
86                     try {\r
87                         rule = g.adapt(ruleResource, VisualsRule.class);\r
88                     } catch(AdaptionException e) {\r
89                         e.printStackTrace();\r
90                         continue;\r
91                     }                    \r
92                     try {\r
93                         // Note: the rule may be an instance of multiple interfaces\r
94                         if(rule instanceof LabelRule)\r
95                             labelContributions.put(nodeType, new LabelContribution(nodeType, test, (LabelRule)rule, priority));\r
96                         if(rule instanceof ModifierRule)\r
97                             modifierContributions.put(nodeType, new ModifierContribution(nodeType, test, (ModifierRule)rule, priority));\r
98                         if(rule instanceof ImageRule)\r
99                             imageContributions.put(nodeType, new ImageContribution(nodeType, test, (ImageRule)rule, priority));\r
100                         if(rule instanceof CheckedStateRule)\r
101                             checkedStateContributions.put(nodeType, new CheckedStateContribution(nodeType, test, (CheckedStateRule)rule, priority));\r
102                         if(rule instanceof LabelDecorationRule)\r
103                             labelDecorationContributions.put(nodeType, new LabelDecorationContribution(nodeType, test, (LabelDecorationRule)rule, priority));\r
104                         if(rule instanceof ImageDecorationRule)\r
105                             imageDecorationContributions.put(nodeType, new ImageDecorationContribution(nodeType, test, (ImageDecorationRule)rule, priority));\r
106                         if(rule instanceof SorterRule)\r
107                             sorterContributions.put(nodeType, new SorterContribution(nodeType, test, (SorterRule)rule, priority));\r
108                         if(rule instanceof TooltipRule)\r
109                             tooltipContributions.put(nodeType, new TooltipContribution(nodeType, test, (TooltipRule)rule, priority));\r
110                     } catch(InvalidContribution e) {\r
111                         e.printStackTrace();\r
112                         continue;\r
113                     }\r
114                 }\r
115             }\r
116         }\r
117     }   \r
118     \r
119     public NodeType getNodeType() {\r
120         return nodeType;\r
121     }\r
122 \r
123     @Override\r
124     public int compareTo(VisualsContribution o) {\r
125         return Double.compare(o.priority, priority);\r
126     }\r
127 }\r