-/*******************************************************************************\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.browsing.ui.model.tooltips.TooltipContribution;\r
-import org.simantics.browsing.ui.model.tooltips.TooltipRule;\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
- OrderedNodeTypeMultiMap<TooltipContribution> tooltipContributions)\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
- if(rule instanceof TooltipRule)\r
- tooltipContributions.put(nodeType, new TooltipContribution(nodeType, test, (TooltipRule)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
+/*******************************************************************************
+ * Copyright (c) 2010, 2011 Association for Decentralized Information Management in
+ * Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.browsing.ui.model.visuals;
+
+import org.simantics.browsing.ui.model.InvalidContribution;
+import org.simantics.browsing.ui.model.check.CheckedStateContribution;
+import org.simantics.browsing.ui.model.check.CheckedStateRule;
+import org.simantics.browsing.ui.model.imagedecorators.ImageDecorationContribution;
+import org.simantics.browsing.ui.model.imagedecorators.ImageDecorationRule;
+import org.simantics.browsing.ui.model.images.ImageContribution;
+import org.simantics.browsing.ui.model.images.ImageRule;
+import org.simantics.browsing.ui.model.labeldecorators.LabelDecorationContribution;
+import org.simantics.browsing.ui.model.labeldecorators.LabelDecorationRule;
+import org.simantics.browsing.ui.model.labels.LabelContribution;
+import org.simantics.browsing.ui.model.labels.LabelRule;
+import org.simantics.browsing.ui.model.modifiers.ModifierContribution;
+import org.simantics.browsing.ui.model.modifiers.ModifierRule;
+import org.simantics.browsing.ui.model.nodetypes.NodeType;
+import org.simantics.browsing.ui.model.nodetypes.OrderedNodeTypeMultiMap;
+import org.simantics.browsing.ui.model.sorters.SorterContribution;
+import org.simantics.browsing.ui.model.sorters.SorterRule;
+import org.simantics.browsing.ui.model.tests.Test;
+import org.simantics.browsing.ui.model.tooltips.TooltipContribution;
+import org.simantics.browsing.ui.model.tooltips.TooltipRule;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.exception.AdaptionException;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.viewpoint.ontology.ViewpointResource;
+
+/**
+ * Produces labels for nodes of given node type.
+ * @author Hannu Niemistö
+ */
+public class VisualsContribution implements Comparable<VisualsContribution> {
+ protected NodeType nodeType;
+ protected Test test;
+ protected double priority;
+
+ public VisualsContribution(NodeType nodeType, Test test, double priority) throws InvalidContribution {
+ if(test != null && !test.isCompatible(
+ nodeType.getContentType()
+ ))
+ throw new InvalidContribution("Test is not compatible with the content type.");
+ this.nodeType = nodeType;
+ this.test = test;
+ this.priority = priority;
+ }
+
+ public static void load(ReadGraph g, Resource visualsContributionResource,
+ OrderedNodeTypeMultiMap<LabelContribution> labelContributions,
+ OrderedNodeTypeMultiMap<ImageContribution> imageContributions,
+ OrderedNodeTypeMultiMap<CheckedStateContribution> checkedStateContributions,
+ OrderedNodeTypeMultiMap<LabelDecorationContribution> labelDecorationContributions,
+ OrderedNodeTypeMultiMap<ImageDecorationContribution> imageDecorationContributions,
+ OrderedNodeTypeMultiMap<ModifierContribution> modifierContributions,
+ OrderedNodeTypeMultiMap<SorterContribution> sorterContributions,
+ OrderedNodeTypeMultiMap<FlatNodeContribution> flatNodeContributions,
+ OrderedNodeTypeMultiMap<TooltipContribution> tooltipContributions)
+ throws DatabaseException, InvalidContribution {
+ ViewpointResource vr = ViewpointResource.getInstance(g);
+
+ Resource testResource = g.getPossibleObject(visualsContributionResource, vr.VisualsContribution_HasCondition);
+ Test test = testResource == null ? null : g.adapt(testResource, Test.class);
+
+ Double mpriority = g.getPossibleRelatedValue(visualsContributionResource, vr.VisualsContribution_HasPriority);
+ double priority = mpriority == null ? 0.0 : mpriority.doubleValue();
+
+ for(Resource nodeTypeResource : g.getObjects(visualsContributionResource, vr.VisualsContribution_HasNodeType)) {
+ NodeType nodeType = g.adapt(nodeTypeResource, NodeType.class);
+
+ for(Resource ruleResource : g.getObjects(visualsContributionResource, vr.VisualsContribution_HasRule)) {
+ if(ruleResource.equals(vr.FlatNodeRule))
+ flatNodeContributions.put(nodeType, FlatNodeContribution.INSTANCE);
+ else {
+ VisualsRule rule;
+ try {
+ rule = g.adapt(ruleResource, VisualsRule.class);
+ } catch(AdaptionException e) {
+ e.printStackTrace();
+ continue;
+ }
+ try {
+ // Note: the rule may be an instance of multiple interfaces
+ if(rule instanceof LabelRule)
+ labelContributions.put(nodeType, new LabelContribution(nodeType, test, (LabelRule)rule, priority));
+ if(rule instanceof ModifierRule)
+ modifierContributions.put(nodeType, new ModifierContribution(nodeType, test, (ModifierRule)rule, priority));
+ if(rule instanceof ImageRule)
+ imageContributions.put(nodeType, new ImageContribution(nodeType, test, (ImageRule)rule, priority));
+ if(rule instanceof CheckedStateRule)
+ checkedStateContributions.put(nodeType, new CheckedStateContribution(nodeType, test, (CheckedStateRule)rule, priority));
+ if(rule instanceof LabelDecorationRule)
+ labelDecorationContributions.put(nodeType, new LabelDecorationContribution(nodeType, test, (LabelDecorationRule)rule, priority));
+ if(rule instanceof ImageDecorationRule)
+ imageDecorationContributions.put(nodeType, new ImageDecorationContribution(nodeType, test, (ImageDecorationRule)rule, priority));
+ if(rule instanceof SorterRule)
+ sorterContributions.put(nodeType, new SorterContribution(nodeType, test, (SorterRule)rule, priority));
+ if(rule instanceof TooltipRule)
+ tooltipContributions.put(nodeType, new TooltipContribution(nodeType, test, (TooltipRule)rule, priority));
+ } catch(InvalidContribution e) {
+ e.printStackTrace();
+ continue;
+ }
+ }
+ }
+ }
+ }
+
+ public NodeType getNodeType() {
+ return nodeType;
+ }
+
+ @Override
+ public int compareTo(VisualsContribution o) {
+ return Double.compare(o.priority, priority);
+ }
+}