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