]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.charts/src/org/simantics/charts/Charts.java
Work around one active experiment per model limitation for FMI studio.
[simantics/platform.git] / bundles / org.simantics.charts / src / org / simantics / charts / Charts.java
index 69aea11ee2773f0ea4ed3f93fefdab99b2f74ced..1358c402333b40a42d425e66acaef6faf339af42 100644 (file)
@@ -1,77 +1,75 @@
-package org.simantics.charts;\r
-\r
-import java.util.Collections;\r
-import java.util.List;\r
-\r
-import org.simantics.Simantics;\r
-import org.simantics.charts.editor.ChartData;\r
-import org.simantics.charts.editor.ChartKeys;\r
-import org.simantics.databoard.binding.error.BindingException;\r
-import org.simantics.databoard.util.Bean;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.request.PossibleModel;\r
-import org.simantics.history.HistoryException;\r
-import org.simantics.history.HistorySamplerItem;\r
-import org.simantics.history.ItemManager;\r
-import org.simantics.history.util.subscription.SamplingFormat;\r
-import org.simantics.modeling.subscription.SubscriptionItem;\r
-import org.simantics.modeling.subscription.SubscriptionItemQuery;\r
-import org.simantics.project.IProject;\r
-import org.simantics.utils.datastructures.hints.IHintContext.Key;\r
-\r
-/**\r
- * Main facade for externally dealing with the trending system.\r
- * \r
- * @author Tuukka Lehtonen\r
- * @author Antti Villberg\r
- * \r
- */\r
-public final class Charts {\r
-\r
-    public static void resetChartEditorData(IProject project, Resource model, ChartData editorData) {\r
-        if (editorData != null) {\r
-            project.setHint(ChartKeys.chartSourceKey(model), editorData);\r
-        } else {\r
-            project.removeHint(ChartKeys.chartSourceKey(model));\r
-        }\r
-    }\r
-\r
-       public static HistorySamplerItem createHistorySamplerItem(ReadGraph graph, Resource subscriptionItem) throws DatabaseException {\r
-               \r
-               try {\r
-\r
-                       Resource model = graph.syncRequest(new PossibleModel(subscriptionItem));\r
-                       if ( model == null ) {\r
-                               throw new DatabaseException("There is no model for " + subscriptionItem);\r
-                       }\r
-\r
-                       Key chartDataKey = ChartKeys.chartSourceKey(model);\r
-\r
-                       final ChartData data = Simantics.getProject().getHint(chartDataKey);\r
-                       if ( data == null ) {\r
-                               throw new DatabaseException("There is no chart data for " + model);\r
-                       }\r
-\r
-                       ItemManager im = new ItemManager( data.history.getItems() );\r
-\r
-                       SubscriptionItem i = graph.syncRequest(new SubscriptionItemQuery(subscriptionItem));\r
-\r
-                       List<Bean> items = im.search("variableId", i.variableId);\r
-                       Collections.sort(items, SamplingFormat.INTERVAL_COMPARATOR);\r
-                       if (items.isEmpty()) new DatabaseException("There is history item for " + i.variableId);\r
-                       Bean config = items.get(0);\r
-                       String historyId = (String) config.getFieldUnchecked("id");\r
-\r
-                       return new HistorySamplerItem(data.collector, data.history, historyId, System.identityHashCode(data));\r
-\r
-               } catch (HistoryException e) {\r
-                       throw new DatabaseException(e);\r
-               } catch (BindingException e) {\r
-                       throw new DatabaseException(e);\r
-               }\r
-       \r
-       }\r
-\r
-}\r
+package org.simantics.charts;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.simantics.charts.editor.ChartData;
+import org.simantics.charts.editor.ChartKeys;
+import org.simantics.databoard.binding.error.BindingException;
+import org.simantics.databoard.util.Bean;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.request.PossibleIndexRoot;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.history.HistoryException;
+import org.simantics.history.HistorySamplerItem;
+import org.simantics.history.ItemManager;
+import org.simantics.history.util.subscription.SamplingFormat;
+import org.simantics.modeling.subscription.SubscriptionItem;
+import org.simantics.modeling.subscription.SubscriptionItemQuery;
+import org.simantics.project.IProject;
+import org.simantics.simulation.experiment.IExperiment;
+
+/**
+ * Main facade for externally dealing with the trending system.
+ * 
+ * @author Tuukka Lehtonen
+ * @author Antti Villberg
+ * 
+ */
+public final class Charts {
+
+    public static void resetChartEditorData(IProject project, Resource model, ChartData editorData) {
+        if (editorData != null) {
+            project.setHint(ChartKeys.chartSourceKey(model), editorData);
+        } else {
+            project.removeHint(ChartKeys.chartSourceKey(model));
+        }
+    }
+
+       public static HistorySamplerItem createHistorySamplerItem(ReadGraph graph, Variable run, Resource subscriptionItem) throws DatabaseException {
+                       IExperiment exp = (IExperiment) run.getPropertyValue(graph, "iExperiment");
+                       ITrendSupport support = exp.getService(ITrendSupport.class);
+                       ChartData data = support.getChartData();
+                       return createHistorySamplerItem(graph, subscriptionItem, data);
+       }
+
+    public static HistorySamplerItem createHistorySamplerItem(ReadGraph graph, Resource subscriptionItem, ChartData data) throws DatabaseException {
+
+        try {
+            Resource model = graph.syncRequest(new PossibleIndexRoot(subscriptionItem));
+            if (model == null) {
+                throw new DatabaseException("There is no model for " + subscriptionItem);
+            }
+
+            ItemManager im = new ItemManager(data.history.getItems());
+
+            SubscriptionItem i = graph.syncRequest(new SubscriptionItemQuery(subscriptionItem));
+
+            List<Bean> items = im.search("variableId", i.variableId);
+            Collections.sort(items, SamplingFormat.INTERVAL_COMPARATOR);
+            if (items.isEmpty())
+                new DatabaseException("There is history item for " + i.variableId);
+            Bean config = items.get(0);
+            String historyId = (String) config.getFieldUnchecked("id");
+
+            return new HistorySamplerItem(data.collector, data.history, historyId, System.identityHashCode(data));
+        } catch (HistoryException e) {
+            throw new DatabaseException(e);
+        } catch (BindingException e) {
+            throw new DatabaseException(e);
+        }
+    }
+
+}