]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/subscription/SubscriptionItemLabel.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / subscription / SubscriptionItemLabel.java
index ddc33342085cd9cf983a8ad9e87ccdd22f8e5bc9..50979c90bcedba1c3c81593ef4e3de27cde39e4e 100644 (file)
-package org.simantics.modeling.subscription;\r
-\r
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;\r
-import org.eclipse.core.runtime.preferences.InstanceScope;\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.databoard.Databoard;\r
-import org.simantics.databoard.accessor.reference.ChildReference;\r
-import org.simantics.databoard.accessor.reference.IndexReference;\r
-import org.simantics.databoard.binding.Binding;\r
-import org.simantics.databoard.util.URIStringUtils;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.common.procedure.adapter.TransientCacheAsyncListener;\r
-import org.simantics.db.common.request.PossibleIndexRoot;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.exception.PendingVariableException;\r
-import org.simantics.db.layer0.request.PossibleVariableValue;\r
-import org.simantics.db.layer0.variable.RVI;\r
-import org.simantics.db.layer0.variable.Variable;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.modeling.ModelingResources;\r
-import org.simantics.utils.datastructures.Pair;\r
-import org.simantics.utils.format.FormattingUtils;\r
-import org.simantics.utils.format.ValueFormat;\r
-\r
-public class SubscriptionItemLabel {\r
-\r
-    private static final String NO_VARIABLE_ID = "<no variable id>";\r
-\r
-    public static String resolveLabel(ReadGraph graph, Resource item, boolean synchronous) throws DatabaseException {\r
-        IEclipsePreferences chartPreferenceNode = InstanceScope.INSTANCE.getNode( "org.simantics.charts" );\r
-        String s = chartPreferenceNode.get("chart.valueformat", ValueFormat.Default.name());\r
-        ValueFormat valueFormat = ValueFormat.valueOf( s );\r
-        return resolveLabel(graph, item, valueFormat, synchronous);\r
-    }\r
-\r
-    public static String resolveLabel(ReadGraph graph, Resource item, ValueFormat valueFormat, boolean synchronous) throws DatabaseException {\r
-        return resolveLabel(graph, item, valueFormat, synchronous, true, true);\r
-    }\r
-\r
-    public static String resolveLabel(ReadGraph graph, Resource item, ValueFormat valueFormat, boolean synchronous, boolean tryLabel, boolean showValue) throws DatabaseException {\r
-\r
-        Layer0 L0 = Layer0.getInstance(graph);\r
-        ModelingResources MOD = ModelingResources.getInstance(graph);\r
-\r
-        String label = tryLabel ? graph.<String>getPossibleRelatedValue(item, L0.HasLabel, Bindings.STRING) : null;\r
-        boolean labelDefined = isNonempty(label);\r
-        if (!showValue && labelDefined)\r
-            return label;\r
-\r
-        // Create label from rvi\r
-        Binding rviBinding = graph.getService(Databoard.class).getBindingUnchecked( RVI.class );\r
-        RVI rvi = graph.getPossibleRelatedValue(item, MOD.Subscription_Item_VariableId, rviBinding);\r
-        if (rvi == null)\r
-            return NO_VARIABLE_ID;\r
-\r
-        Resource model = graph.syncRequest(new PossibleIndexRoot(item));\r
-        if (model != null) {\r
-            ModelContexts contexts = graph.syncRequest(new ModelContextsRequest(model), TransientCacheAsyncListener.<ModelContexts>instance());\r
-            Variable configurationContext = contexts.getConfigurationContext();\r
-            Variable experimentContext = contexts.getExperimentContext();\r
-\r
-            if (configurationContext != null) {\r
-                // Resolve variable and take note of the resolution context\r
-                Variable variable = null;\r
-                Variable resolutionContext = experimentContext;\r
-                String resolutionContextURI = contexts.getExperimentContextURI();\r
-                if (showValue && experimentContext != null)\r
-                    variable = rvi.resolvePossible(graph, experimentContext);\r
-                if (variable == null) {\r
-                    resolutionContext = configurationContext;\r
-                    resolutionContextURI = contexts.getConfigurationContextURI();\r
-                    variable = rvi.resolvePossible(graph, configurationContext);\r
-                }\r
-\r
-                if (variable != null) {\r
-                    if (!labelDefined) {\r
-                        label = relativeURI(graph, variable, resolutionContextURI);\r
-                        if (label == null)\r
-                            label = rvi.toPossibleString(graph, configurationContext);\r
-                        if (label != null) {\r
-                            label = removeVariablePrefixPath(label);\r
-                            label = URIStringUtils.unescape(label);\r
-                        }\r
-                    }\r
-\r
-                    if (showValue && resolutionContext == experimentContext) {\r
-                        StringBuilder sb = new StringBuilder(label);\r
-\r
-                        Double gain = graph.getPossibleRelatedValue(item, MOD.Subscription_Item_Gain, Bindings.DOUBLE);\r
-                        Double bias = graph.getPossibleRelatedValue(item, MOD.Subscription_Item_Bias, Bindings.DOUBLE);\r
-                        String unit = graph.getPossibleRelatedValue(item, MOD.Subscription_Item_Unit, Bindings.STRING);\r
-\r
-                        boolean oldSync = graph.setSynchronous(synchronous);\r
-                        try {\r
-                            Object value = graph.syncRequest( new PossibleVariableValue<Object>(variable) );\r
-                            sb = formatValue(value, gain, bias, unit, valueFormat, sb);\r
-                        } catch (PendingVariableException e) {\r
-                            sb.append(" (<pending>)");\r
-                        } finally {\r
-                            graph.setSynchronous(oldSync);\r
-                        }\r
-\r
-                        label = sb.toString();\r
-                    }\r
-                }\r
-            }\r
-        }\r
-\r
-        return label != null ? label : NO_VARIABLE_ID;\r
-    }\r
-\r
-    private static StringBuilder formatValue(Object value, Double gain, Double bias, String unit, ValueFormat valueFormat, StringBuilder sb) {\r
-        if (value instanceof Number) {\r
-            double d = ((Number) value).doubleValue();\r
-            double ad = d;\r
-            if (gain != null)\r
-                ad *= gain;\r
-            if (bias != null)\r
-                ad += bias;\r
-            sb.append(" (").append(valueFormat.format.format(ad));\r
-        } else {\r
-            sb.append(" (").append(FormattingUtils.engineeringFormat(value));\r
-        }\r
-        if (unit != null && !unit.isEmpty()) {\r
-            sb.append(' ').append(unit);\r
-        }\r
-        return sb.append(')');\r
-    }\r
-\r
-    public static String removeVariablePrefixPath(String rvi) {\r
-        // Apros-specific logics:\r
-        //   1. remove path prefix\r
-        //   2. change IndexReferences (i-N) into "(N+1)" Apros-style indexing\r
-        int propIndex = rvi.indexOf('#');\r
-        if (propIndex == -1)\r
-            return rvi;\r
-        int prevSlash = rvi.lastIndexOf('/', propIndex);\r
-        if (prevSlash == -1)\r
-            return rvi;\r
-        Pair<String, Integer> attrKey = attributeKey(rvi, propIndex + 1);\r
-        return rvi.substring(prevSlash + 1, propIndex + 1) + attrKey.first\r
-                + (attrKey.second != null ? "(" + (attrKey.second + 1) + ")" : "");\r
-    }\r
-\r
-    private static Pair<String, Integer> attributeKey(String key, int start) {\r
-        int iy = key.lastIndexOf('/');\r
-        boolean isIndexed = iy >= start;\r
-        if (isIndexed) {\r
-            ChildReference child = ChildReference.parsePath(key.substring(iy + 1));\r
-            if (child instanceof IndexReference)\r
-                return Pair.make(key.substring(start, iy), ((IndexReference) child).getIndex());\r
-        }\r
-        return Pair.make(key.substring(start), null);\r
-    }\r
-\r
-    private static boolean isNonempty(String label) {\r
-        return label != null && !label.trim().isEmpty();\r
-    }\r
-\r
-    private static String relativeURI(ReadGraph graph, Variable variable, String contextURI) throws DatabaseException {\r
-        return relativeURI(variable.getURI(graph), contextURI);\r
-    }\r
-\r
-    private static String relativeURI(String fullURI, String contextURI) {\r
-        return fullURI.substring(contextURI.length());\r
-    }\r
-\r
+package org.simantics.modeling.subscription;
+
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.Databoard;
+import org.simantics.databoard.accessor.reference.ChildReference;
+import org.simantics.databoard.accessor.reference.IndexReference;
+import org.simantics.databoard.binding.Binding;
+import org.simantics.databoard.util.URIStringUtils;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.procedure.adapter.TransientCacheAsyncListener;
+import org.simantics.db.common.request.PossibleIndexRoot;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.exception.PendingVariableException;
+import org.simantics.db.layer0.request.PossibleVariableValue;
+import org.simantics.db.layer0.variable.RVI;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.layer0.Layer0;
+import org.simantics.modeling.ModelingResources;
+import org.simantics.utils.datastructures.Pair;
+import org.simantics.utils.format.FormattingUtils;
+import org.simantics.utils.format.ValueFormat;
+
+public class SubscriptionItemLabel {
+
+    private static final String NO_VARIABLE_ID = "<no variable id>";
+
+    public static String resolveLabel(ReadGraph graph, Resource item, boolean synchronous) throws DatabaseException {
+        IEclipsePreferences chartPreferenceNode = InstanceScope.INSTANCE.getNode( "org.simantics.charts" );
+        String s = chartPreferenceNode.get("chart.valueformat", ValueFormat.Default.name());
+        ValueFormat valueFormat = ValueFormat.valueOf( s );
+        return resolveLabel(graph, item, valueFormat, synchronous);
+    }
+
+    public static String resolveLabel(ReadGraph graph, Resource item, ValueFormat valueFormat, boolean synchronous) throws DatabaseException {
+        return resolveLabel(graph, item, valueFormat, synchronous, true, true);
+    }
+
+    public static String resolveLabel(ReadGraph graph, Resource item, ValueFormat valueFormat, boolean synchronous, boolean tryLabel, boolean showValue) throws DatabaseException {
+
+        Layer0 L0 = Layer0.getInstance(graph);
+        ModelingResources MOD = ModelingResources.getInstance(graph);
+
+        String label = tryLabel ? graph.<String>getPossibleRelatedValue(item, L0.HasLabel, Bindings.STRING) : null;
+        boolean labelDefined = isNonempty(label);
+        if (!showValue && labelDefined)
+            return label;
+
+        // Create label from rvi
+        Binding rviBinding = graph.getService(Databoard.class).getBindingUnchecked( RVI.class );
+        RVI rvi = graph.getPossibleRelatedValue(item, MOD.Subscription_Item_VariableId, rviBinding);
+        if (rvi == null)
+            return NO_VARIABLE_ID;
+
+        Resource model = graph.syncRequest(new PossibleIndexRoot(item));
+        if (model != null) {
+            ModelContexts contexts = graph.syncRequest(new ModelContextsRequest(model), TransientCacheAsyncListener.<ModelContexts>instance());
+            Variable configurationContext = contexts.getConfigurationContext();
+            Variable experimentContext = contexts.getExperimentContext();
+
+            if (configurationContext != null) {
+                // Resolve variable and take note of the resolution context
+                Variable variable = null;
+                Variable resolutionContext = experimentContext;
+                String resolutionContextURI = contexts.getExperimentContextURI();
+                if (showValue && experimentContext != null)
+                    variable = rvi.resolvePossible(graph, experimentContext);
+                if (variable == null) {
+                    resolutionContext = configurationContext;
+                    resolutionContextURI = contexts.getConfigurationContextURI();
+                    variable = rvi.resolvePossible(graph, configurationContext);
+                }
+
+                if (variable != null) {
+                    if (!labelDefined) {
+                        label = relativeURI(graph, variable, resolutionContextURI);
+                        if (label == null)
+                            label = rvi.toPossibleString(graph, configurationContext);
+                        if (label != null) {
+                            label = removeVariablePrefixPath(label);
+                            label = URIStringUtils.unescape(label);
+                        }
+                    }
+
+                    if (showValue && resolutionContext == experimentContext) {
+                        StringBuilder sb = new StringBuilder(label);
+
+                        Double gain = graph.getPossibleRelatedValue(item, MOD.Subscription_Item_Gain, Bindings.DOUBLE);
+                        Double bias = graph.getPossibleRelatedValue(item, MOD.Subscription_Item_Bias, Bindings.DOUBLE);
+                        String unit = graph.getPossibleRelatedValue(item, MOD.Subscription_Item_Unit, Bindings.STRING);
+
+                        boolean oldSync = graph.setSynchronous(synchronous);
+                        try {
+                            Object value = graph.syncRequest( new PossibleVariableValue<Object>(variable) );
+                            sb = formatValue(value, gain, bias, unit, valueFormat, sb);
+                        } catch (PendingVariableException e) {
+                            sb.append(" (<pending>)");
+                        } finally {
+                            graph.setSynchronous(oldSync);
+                        }
+
+                        label = sb.toString();
+                    }
+                }
+            }
+        }
+
+        return label != null ? label : NO_VARIABLE_ID;
+    }
+
+    private static StringBuilder formatValue(Object value, Double gain, Double bias, String unit, ValueFormat valueFormat, StringBuilder sb) {
+        if (value instanceof Number) {
+            double d = ((Number) value).doubleValue();
+            double ad = d;
+            if (gain != null)
+                ad *= gain;
+            if (bias != null)
+                ad += bias;
+            sb.append(" (").append(valueFormat.format.format(ad));
+        } else {
+            sb.append(" (").append(FormattingUtils.engineeringFormat(value));
+        }
+        if (unit != null && !unit.isEmpty()) {
+            sb.append(' ').append(unit);
+        }
+        return sb.append(')');
+    }
+
+    public static String removeVariablePrefixPath(String rvi) {
+        // Apros-specific logics:
+        //   1. remove path prefix
+        //   2. change IndexReferences (i-N) into "(N+1)" Apros-style indexing
+        int propIndex = rvi.indexOf('#');
+        if (propIndex == -1)
+            return rvi;
+        int prevSlash = rvi.lastIndexOf('/', propIndex);
+        if (prevSlash == -1)
+            return rvi;
+        Pair<String, Integer> attrKey = attributeKey(rvi, propIndex + 1);
+        return rvi.substring(prevSlash + 1, propIndex + 1) + attrKey.first
+                + (attrKey.second != null ? "(" + (attrKey.second + 1) + ")" : "");
+    }
+
+    private static Pair<String, Integer> attributeKey(String key, int start) {
+        int iy = key.lastIndexOf('/');
+        boolean isIndexed = iy >= start;
+        if (isIndexed) {
+            ChildReference child = ChildReference.parsePath(key.substring(iy + 1));
+            if (child instanceof IndexReference)
+                return Pair.make(key.substring(start, iy), ((IndexReference) child).getIndex());
+        }
+        return Pair.make(key.substring(start), null);
+    }
+
+    private static boolean isNonempty(String label) {
+        return label != null && !label.trim().isEmpty();
+    }
+
+    private static String relativeURI(ReadGraph graph, Variable variable, String contextURI) throws DatabaseException {
+        return relativeURI(variable.getURI(graph), contextURI);
+    }
+
+    private static String relativeURI(String fullURI, String contextURI) {
+        return fullURI.substring(contextURI.length());
+    }
+
 }
\ No newline at end of file