From 314f8f64742e7bf82b0f9da8055cbbfb9a78ca6c Mon Sep 17 00:00:00 2001 From: lempinen Date: Thu, 1 Dec 2011 12:48:05 +0000 Subject: [PATCH] Axis and series label rules for ChartAxisAndVariablesTab git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@23385 ac1ea38d-2e2b-0410-8846-a27921b304fc --- org.simantics.sysdyn.ontology/graph.tg | Bin 78412 -> 78460 bytes .../ChartAxisAndVariablesViewpoint.pgraph | 6 +- .../org/simantics/sysdyn/SysdynResource.java | 6 ++ org.simantics.sysdyn.ui/adapters.xml | 2 +- .../sysdyn/ui/trend/chart/ChartUtils.java | 4 +- .../chart/graphexplorer/AxisLabelRule.java | 67 ++++++++++++++++++ .../chart/graphexplorer/SeriesLabelRule.java | 60 ++++++++++++++++ 7 files changed, 140 insertions(+), 5 deletions(-) create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/graphexplorer/AxisLabelRule.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/graphexplorer/SeriesLabelRule.java diff --git a/org.simantics.sysdyn.ontology/graph.tg b/org.simantics.sysdyn.ontology/graph.tg index 613fa022d034bb046a7ac5b9308769a8df480a06..4dbbefac4e9ca21a63b1c48226f5e55f2aaa1729 100644 GIT binary patch literal 78460 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�+*raZUj~ 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 diff --git a/org.simantics.sysdyn.ontology/graph/ChartAxisAndVariablesViewpoint.pgraph b/org.simantics.sysdyn.ontology/graph/ChartAxisAndVariablesViewpoint.pgraph index 4d6f3fab..e5c72a0c 100644 --- a/org.simantics.sysdyn.ontology/graph/ChartAxisAndVariablesViewpoint.pgraph +++ b/org.simantics.sysdyn.ontology/graph/ChartAxisAndVariablesViewpoint.pgraph @@ -13,6 +13,8 @@ CAC = SYSDYN.ChartAxisAndVariablesActionContext : VP.BrowseContext CBC.AxisChildRule : VP.ChildRule CBC.VariableChildRule : VP.ChildRule +CBC.SeriesLabelRule : VP.LabelRule +CBC.AxisLabelRule : VP.LabelRule CBC @VP.customChildRule JFREE.Chart CBC.AxisChildRule @@ -21,8 +23,8 @@ CBC JFREE.Series : VP.ResourceNodeType CBC - @VP.customLabelRule JFREE.Axis VP.ResourceLabelLabelRule - @VP.customLabelRule JFREE.Series VP.ResourceLabelLabelRule + @VP.customLabelRule JFREE.Axis CBC.AxisLabelRule + @VP.customLabelRule JFREE.Series CBC.SeriesLabelRule CBC @VP.dropActionContribution JFREE.Axis ACTIONS.DropAction 1.0 diff --git a/org.simantics.sysdyn.ontology/src/org/simantics/sysdyn/SysdynResource.java b/org.simantics.sysdyn.ontology/src/org/simantics/sysdyn/SysdynResource.java index 3cb6e09a..bcebfbec 100644 --- a/org.simantics.sysdyn.ontology/src/org/simantics/sysdyn/SysdynResource.java +++ b/org.simantics.sysdyn.ontology/src/org/simantics/sysdyn/SysdynResource.java @@ -51,6 +51,8 @@ public class SysdynResource { public final Resource ChartAxisAndVariablesActionContext_Actions_DropAction; public final Resource ChartAxisAndVariablesBrowseContext; public final Resource ChartAxisAndVariablesBrowseContext_AxisChildRule; + public final Resource ChartAxisAndVariablesBrowseContext_AxisLabelRule; + public final Resource ChartAxisAndVariablesBrowseContext_SeriesLabelRule; public final Resource ChartAxisAndVariablesBrowseContext_VariableChildRule; public final Resource Cloud; public final Resource CloudSymbol; @@ -320,6 +322,8 @@ public class SysdynResource { public static final String ChartAxisAndVariablesActionContext_Actions_DropAction = "http://www.simantics.org/Sysdyn-1.1/ChartAxisAndVariablesActionContext/Actions/DropAction"; public static final String ChartAxisAndVariablesBrowseContext = "http://www.simantics.org/Sysdyn-1.1/ChartAxisAndVariablesBrowseContext"; public static final String ChartAxisAndVariablesBrowseContext_AxisChildRule = "http://www.simantics.org/Sysdyn-1.1/ChartAxisAndVariablesBrowseContext/AxisChildRule"; + public static final String ChartAxisAndVariablesBrowseContext_AxisLabelRule = "http://www.simantics.org/Sysdyn-1.1/ChartAxisAndVariablesBrowseContext/AxisLabelRule"; + public static final String ChartAxisAndVariablesBrowseContext_SeriesLabelRule = "http://www.simantics.org/Sysdyn-1.1/ChartAxisAndVariablesBrowseContext/SeriesLabelRule"; public static final String ChartAxisAndVariablesBrowseContext_VariableChildRule = "http://www.simantics.org/Sysdyn-1.1/ChartAxisAndVariablesBrowseContext/VariableChildRule"; public static final String Cloud = "http://www.simantics.org/Sysdyn-1.1/Cloud"; public static final String CloudSymbol = "http://www.simantics.org/Sysdyn-1.1/CloudSymbol"; @@ -599,6 +603,8 @@ public class SysdynResource { ChartAxisAndVariablesActionContext_Actions_DropAction = getResourceOrNull(graph, URIs.ChartAxisAndVariablesActionContext_Actions_DropAction); ChartAxisAndVariablesBrowseContext = getResourceOrNull(graph, URIs.ChartAxisAndVariablesBrowseContext); ChartAxisAndVariablesBrowseContext_AxisChildRule = getResourceOrNull(graph, URIs.ChartAxisAndVariablesBrowseContext_AxisChildRule); + ChartAxisAndVariablesBrowseContext_AxisLabelRule = getResourceOrNull(graph, URIs.ChartAxisAndVariablesBrowseContext_AxisLabelRule); + ChartAxisAndVariablesBrowseContext_SeriesLabelRule = getResourceOrNull(graph, URIs.ChartAxisAndVariablesBrowseContext_SeriesLabelRule); ChartAxisAndVariablesBrowseContext_VariableChildRule = getResourceOrNull(graph, URIs.ChartAxisAndVariablesBrowseContext_VariableChildRule); Cloud = getResourceOrNull(graph, URIs.Cloud); CloudSymbol = getResourceOrNull(graph, URIs.CloudSymbol); diff --git a/org.simantics.sysdyn.ui/adapters.xml b/org.simantics.sysdyn.ui/adapters.xml index cd26fb0a..bde90b08 100644 --- a/org.simantics.sysdyn.ui/adapters.xml +++ b/org.simantics.sysdyn.ui/adapters.xml @@ -10,5 +10,5 @@ VTT Technical Research Centre of Finland - initial API and implementation --> - none 0 fill 1 + none 0 fill 1 \ No newline at end of file diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/ChartUtils.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/ChartUtils.java index 73f08545..6aa3ac6f 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/ChartUtils.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/ChartUtils.java @@ -37,7 +37,7 @@ public class ChartUtils { // Create range axis axis = GraphUtils.create2(graph, jfree.NumberAxis, l0.HasName, "NumberAxis" + UUID.randomUUID().toString(), - l0.HasLabel, NameUtils.findFreshLabel(graph, "range", plot), + l0.HasLabel, NameUtils.findFreshLabel(graph, "Range", plot), jfree.Plot_rangeAxis_Inverse, plot, l0.PartOf, plot); @@ -98,7 +98,7 @@ public class ChartUtils { // Create series Resource series = GraphUtils.create2(graph, jfree.Series, l0.HasName, "Series" + UUID.randomUUID().toString(), - jfree.variableRVI, rvi == null ? " " : rvi, + jfree.variableRVI, rvi == null ? " Set variable" : rvi, l0.PartOf, dataset); // Add series to the dataset's series list diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/graphexplorer/AxisLabelRule.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/graphexplorer/AxisLabelRule.java new file mode 100644 index 00000000..ee3d3636 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/graphexplorer/AxisLabelRule.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * Copyright (c) 2007, 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.sysdyn.ui.trend.chart.graphexplorer; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.simantics.browsing.ui.common.ColumnKeys; +import org.simantics.browsing.ui.model.labels.LabelRule; +import org.simantics.databoard.Bindings; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.utils.ListUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.JFreeChartResource; + +/** + * Label rule for range axis label + * @author Teemu Lempinen + * + */ +public class AxisLabelRule implements LabelRule { + + @Override + public boolean isCompatible(Class contentType) { + return contentType.equals(Resource.class); + } + + /** + * Range axis label + * + * Options: + * 1. Label + * 2. Default + */ + @Override + public Map getLabel(ReadGraph graph, Object content) throws DatabaseException { + JFreeChartResource jfree = JFreeChartResource.getInstance(graph); + Layer0 l0 = Layer0.getInstance(graph); + Resource resource = (Resource)content; + String label = graph.getPossibleRelatedValue(resource, l0.HasLabel, Bindings.STRING); + if(label == null || label.isEmpty()) { + label = "Range"; + Resource plot = graph.getPossibleObject(resource, l0.PartOf); + if(plot != null) { + Resource axisListResource = graph.getPossibleObject(plot, jfree.Plot_rangeAxisList); + if(axisListResource != null) { + List axisList = ListUtils.toList(graph, axisListResource); + if(axisList.contains(resource)) + label = label + " " + (axisList.indexOf(resource) + 1); + } + } + } + return Collections.singletonMap(ColumnKeys.SINGLE, label); + } +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/graphexplorer/SeriesLabelRule.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/graphexplorer/SeriesLabelRule.java new file mode 100644 index 00000000..d334765a --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/trend/chart/graphexplorer/SeriesLabelRule.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2007, 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.sysdyn.ui.trend.chart.graphexplorer; + +import java.util.Collections; +import java.util.Map; + +import org.simantics.browsing.ui.common.ColumnKeys; +import org.simantics.browsing.ui.model.labels.LabelRule; +import org.simantics.databoard.Bindings; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.JFreeChartResource; + +/** + * Label rule for dataset series + * @author Teemu Lempinen + * + */ +public class SeriesLabelRule implements LabelRule { + + @Override + public boolean isCompatible(Class contentType) { + return contentType.equals(Resource.class); + } + + /** + * Options: + * 1. Label + * 2. Variable rvi + * 3. Default + */ + @Override + public Map getLabel(ReadGraph graph, Object content) throws DatabaseException { + JFreeChartResource jfree = JFreeChartResource.getInstance(graph); + Layer0 l0 = Layer0.getInstance(graph); + Resource resource = (Resource)content; + String label = graph.getPossibleRelatedValue(resource, l0.HasLabel, Bindings.STRING); + if(label == null || label.isEmpty()) { + label = graph.getPossibleRelatedValue(resource, jfree.variableRVI); + if(label != null && !label.isEmpty() && label.length() > 1) + label = label.substring(1).replace('/', '.'); + else + label = "Set variable"; + } + return Collections.singletonMap(ColumnKeys.SINGLE, label); + } + +} -- 2.47.1