1 package org.simantics.charts;
\r
3 import java.util.Collections;
\r
4 import java.util.List;
\r
6 import org.simantics.Simantics;
\r
7 import org.simantics.charts.editor.ChartData;
\r
8 import org.simantics.charts.editor.ChartKeys;
\r
9 import org.simantics.databoard.binding.error.BindingException;
\r
10 import org.simantics.databoard.util.Bean;
\r
11 import org.simantics.db.ReadGraph;
\r
12 import org.simantics.db.Resource;
\r
13 import org.simantics.db.common.request.PossibleIndexRoot;
\r
14 import org.simantics.db.exception.DatabaseException;
\r
15 import org.simantics.history.HistoryException;
\r
16 import org.simantics.history.HistorySamplerItem;
\r
17 import org.simantics.history.ItemManager;
\r
18 import org.simantics.history.util.subscription.SamplingFormat;
\r
19 import org.simantics.modeling.subscription.SubscriptionItem;
\r
20 import org.simantics.modeling.subscription.SubscriptionItemQuery;
\r
21 import org.simantics.project.IProject;
\r
22 import org.simantics.utils.datastructures.hints.IHintContext.Key;
\r
25 * Main facade for externally dealing with the trending system.
\r
27 * @author Tuukka Lehtonen
\r
28 * @author Antti Villberg
\r
31 public final class Charts {
\r
33 public static void resetChartEditorData(IProject project, Resource model, ChartData editorData) {
\r
34 if (editorData != null) {
\r
35 project.setHint(ChartKeys.chartSourceKey(model), editorData);
\r
37 project.removeHint(ChartKeys.chartSourceKey(model));
\r
41 public static HistorySamplerItem createHistorySamplerItem(ReadGraph graph, Resource subscriptionItem) throws DatabaseException {
\r
45 Resource model = graph.syncRequest(new PossibleIndexRoot(subscriptionItem));
\r
46 if ( model == null ) {
\r
47 throw new DatabaseException("There is no model for " + subscriptionItem);
\r
50 Key chartDataKey = ChartKeys.chartSourceKey(model);
\r
52 final ChartData data = Simantics.getProject().getHint(chartDataKey);
\r
53 if ( data == null ) {
\r
54 throw new DatabaseException("There is no chart data for " + model);
\r
57 ItemManager im = new ItemManager( data.history.getItems() );
\r
59 SubscriptionItem i = graph.syncRequest(new SubscriptionItemQuery(subscriptionItem));
\r
61 List<Bean> items = im.search("variableId", i.variableId);
\r
62 Collections.sort(items, SamplingFormat.INTERVAL_COMPARATOR);
\r
63 if (items.isEmpty()) new DatabaseException("There is history item for " + i.variableId);
\r
64 Bean config = items.get(0);
\r
65 String historyId = (String) config.getFieldUnchecked("id");
\r
67 return new HistorySamplerItem(data.collector, data.history, historyId, System.identityHashCode(data));
\r
69 } catch (HistoryException e) {
\r
70 throw new DatabaseException(e);
\r
71 } catch (BindingException e) {
\r
72 throw new DatabaseException(e);
\r