]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.charts/src/org/simantics/charts/Charts.java
Sync git svn branch with SVN repository r33158.
[simantics/platform.git] / bundles / org.simantics.charts / src / org / simantics / charts / Charts.java
1 package org.simantics.charts;\r
2 \r
3 import java.util.Collections;\r
4 import java.util.List;\r
5 \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
23 \r
24 /**\r
25  * Main facade for externally dealing with the trending system.\r
26  * \r
27  * @author Tuukka Lehtonen\r
28  * @author Antti Villberg\r
29  * \r
30  */\r
31 public final class Charts {\r
32 \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
36         } else {\r
37             project.removeHint(ChartKeys.chartSourceKey(model));\r
38         }\r
39     }\r
40 \r
41         public static HistorySamplerItem createHistorySamplerItem(ReadGraph graph, Resource subscriptionItem) throws DatabaseException {\r
42                 \r
43                 try {\r
44 \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
48                         }\r
49 \r
50                         Key chartDataKey = ChartKeys.chartSourceKey(model);\r
51 \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
55                         }\r
56 \r
57                         ItemManager im = new ItemManager( data.history.getItems() );\r
58 \r
59                         SubscriptionItem i = graph.syncRequest(new SubscriptionItemQuery(subscriptionItem));\r
60 \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
66 \r
67                         return new HistorySamplerItem(data.collector, data.history, historyId, System.identityHashCode(data));\r
68 \r
69                 } catch (HistoryException e) {\r
70                         throw new DatabaseException(e);\r
71                 } catch (BindingException e) {\r
72                         throw new DatabaseException(e);\r
73                 }\r
74         \r
75         }\r
76 \r
77 }\r