X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.charts%2Fsrc%2Forg%2Fsimantics%2Fcharts%2FCharts.java;fp=bundles%2Forg.simantics.charts%2Fsrc%2Forg%2Fsimantics%2Fcharts%2FCharts.java;h=69aea11ee2773f0ea4ed3f93fefdab99b2f74ced;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 diff --git a/bundles/org.simantics.charts/src/org/simantics/charts/Charts.java b/bundles/org.simantics.charts/src/org/simantics/charts/Charts.java new file mode 100644 index 000000000..69aea11ee --- /dev/null +++ b/bundles/org.simantics.charts/src/org/simantics/charts/Charts.java @@ -0,0 +1,77 @@ +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.exception.DatabaseException; +import org.simantics.db.layer0.request.PossibleModel; +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 PossibleModel(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); + } + + } + +}