From: jsimomaa Date: Tue, 27 Sep 2016 10:59:37 +0000 (+0300) Subject: Work around one active experiment per model limitation for FMI studio. X-Git-Tag: v1.25.0~88 X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=commitdiff_plain;h=fc8cac7f1919844a37195fd6bd7742c4ce093f96;p=simantics%2Fplatform.git Work around one active experiment per model limitation for FMI studio. refs #6711 Change-Id: I78a98ca08b81828a728f8bd0ab4c338a064a04fd --- diff --git a/bundles/org.simantics.charts/src/org/simantics/charts/Charts.java b/bundles/org.simantics.charts/src/org/simantics/charts/Charts.java index dd7ae02a0..1358c4023 100644 --- a/bundles/org.simantics.charts/src/org/simantics/charts/Charts.java +++ b/bundles/org.simantics.charts/src/org/simantics/charts/Charts.java @@ -1,77 +1,75 @@ -package org.simantics.charts; - -import java.util.Collections; -import java.util.List; - -import org.simantics.Simantics; -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.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.utils.datastructures.hints.IHintContext.Key; - -/** - * 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, Resource subscriptionItem) throws DatabaseException { - - try { - - Resource model = graph.syncRequest(new PossibleIndexRoot(subscriptionItem)); - if ( model == null ) { - throw new DatabaseException("There is no model for " + subscriptionItem); - } - - Key chartDataKey = ChartKeys.chartSourceKey(model); - - final ChartData data = Simantics.getProject().getHint(chartDataKey); - if ( data == null ) { - throw new DatabaseException("There is no chart data for " + model); - } - - ItemManager im = new ItemManager( data.history.getItems() ); - - SubscriptionItem i = graph.syncRequest(new SubscriptionItemQuery(subscriptionItem)); - - List 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); - } - - } - -} +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 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); + } + } + +} diff --git a/bundles/org.simantics.charts/src/org/simantics/charts/ITrendSupport.java b/bundles/org.simantics.charts/src/org/simantics/charts/ITrendSupport.java index c7a1f84a2..d1c374e60 100644 --- a/bundles/org.simantics.charts/src/org/simantics/charts/ITrendSupport.java +++ b/bundles/org.simantics.charts/src/org/simantics/charts/ITrendSupport.java @@ -1,5 +1,6 @@ package org.simantics.charts; +import org.simantics.charts.editor.ChartData; import org.simantics.db.ReadGraph; import org.simantics.db.exception.DatabaseException; @@ -7,4 +8,6 @@ public interface ITrendSupport { void setChartData(ReadGraph graph) throws DatabaseException; + ChartData getChartData(); + }