1 package org.simantics.charts.ui;
\r
3 import java.util.Collections;
\r
4 import java.util.Map;
\r
6 import org.simantics.browsing.ui.model.labels.LabelRule;
\r
7 import org.simantics.charts.ontology.ChartResource;
\r
8 import org.simantics.databoard.Bindings;
\r
9 import org.simantics.databoard.Databoard;
\r
10 import org.simantics.databoard.binding.Binding;
\r
11 import org.simantics.databoard.util.URIStringUtils;
\r
12 import org.simantics.db.ReadGraph;
\r
13 import org.simantics.db.Resource;
\r
14 import org.simantics.db.exception.DatabaseException;
\r
15 import org.simantics.db.layer0.request.PossibleActiveExperiment;
\r
16 import org.simantics.db.layer0.request.PossibleModel;
\r
17 import org.simantics.db.layer0.variable.RVI;
\r
18 import org.simantics.db.layer0.variable.Variable;
\r
19 import org.simantics.db.layer0.variable.Variables;
\r
20 import org.simantics.layer0.Layer0;
\r
21 import org.simantics.modeling.ModelingResources;
\r
22 import org.simantics.modeling.subscription.SubscriptionItemLabel;
\r
25 * Used for labeling both chart plots and subscription items.
\r
27 * @author Tuukka Lehtonen
\r
29 public class ChartItemLabelRule implements LabelRule {
\r
31 public static final ChartItemLabelRule INSTANCE = new ChartItemLabelRule();
\r
34 public boolean isCompatible(Class<?> contentType) {
\r
35 return contentType.equals(Resource.class);
\r
38 public String getLabel_(ReadGraph graph, Resource item) throws DatabaseException {
\r
39 Layer0 L0 = Layer0.getInstance(graph);
\r
40 ChartResource CHART = ChartResource.getInstance(graph);
\r
41 ModelingResources MOD = ModelingResources.getInstance(graph);
\r
43 StringBuilder sb = new StringBuilder();
\r
45 Integer index = graph.getPossibleRelatedValue(item, CHART.Chart_Item_Index, Bindings.INTEGER);
\r
46 sb.append( index==null ? "" : index+". " );
\r
48 String subscriptionItemLabel = null;
\r
49 String unitStr = null;
\r
50 SubscriptionState subscriptionState = SubscriptionState.IGNORE;
\r
51 Resource subscriptionItem = graph.getPossibleObject(item, CHART.Chart_Item_HasSubscriptionItem);
\r
52 if (subscriptionItem != null) {
\r
53 subscriptionItemLabel = graph.getPossibleRelatedValue(subscriptionItem, L0.HasLabel, Bindings.STRING);
\r
55 Binding rviBinding = graph.getService(Databoard.class).getBindingUnchecked( RVI.class );
\r
56 RVI rvi = graph.getPossibleRelatedValue(subscriptionItem, MOD.Subscription_Item_VariableId, rviBinding);
\r
58 // Create label from rvi if subscription has no label
\r
59 if (subscriptionItemLabel == null || subscriptionItemLabel.isEmpty()) {
\r
60 Variable configuration = Variables.getPossibleConfigurationContext(graph, subscriptionItem);
\r
61 if (rvi != null && configuration != null) {
\r
62 subscriptionItemLabel = rvi.asPossibleString(graph, configuration);
\r
63 if (subscriptionItemLabel == null)
\r
64 subscriptionItemLabel = rvi.toPossibleString(graph, configuration);
\r
65 if (subscriptionItemLabel != null) {
\r
66 subscriptionItemLabel = SubscriptionItemLabel.removeVariablePrefixPath(subscriptionItemLabel);
\r
67 subscriptionItemLabel = URIStringUtils.unescape(subscriptionItemLabel);
\r
72 subscriptionState = getSubscriptionState(graph, rvi, subscriptionItem);
\r
73 unitStr = graph.getPossibleRelatedValue(subscriptionItem, MOD.Subscription_Item_Unit, Bindings.STRING);
\r
75 if (subscriptionItemLabel!=null) {
\r
76 sb.append(subscriptionItemLabel);
\r
78 sb.append("<not associated to a subscription item>");
\r
81 if ( unitStr != null && !unitStr.isEmpty() ) {
\r
87 if (subscriptionState == SubscriptionState.INVALID)
\r
88 sb.append(" (invalid subscription)");
\r
90 return sb.toString();
\r
93 private static SubscriptionState getSubscriptionState(ReadGraph graph, RVI rvi, Resource subscriptionItem) throws DatabaseException {
\r
94 Resource model = graph.sync( new PossibleModel(subscriptionItem) );
\r
96 return SubscriptionState.IGNORE;
\r
97 Resource run = graph.sync( new PossibleActiveExperiment(model) );
\r
99 return SubscriptionState.IGNORE;
\r
100 Variable base = Variables.getPossibleVariable(graph, run);
\r
102 return SubscriptionState.IGNORE;
\r
103 Variable var = rvi.resolvePossible(graph, base);
\r
104 return var != null ? SubscriptionState.VALID : SubscriptionState.INVALID;
\r
108 public Map<String, String> getLabel(ReadGraph graph, Object content) throws DatabaseException {
\r
109 return Collections.singletonMap(ChartItemImageRule.COLUMN_KEY, getLabel_(graph, (Resource) content));
\r
112 public static enum SubscriptionState {
\r