]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.history/examples/org/simantics/history/examples/HistoryExample2.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.history / examples / org / simantics / history / examples / HistoryExample2.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
3  * Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.history.examples;
13
14 import java.io.File;
15
16 import org.simantics.databoard.Bindings;
17 import org.simantics.databoard.Datatypes;
18 import org.simantics.databoard.accessor.StreamAccessor;
19 import org.simantics.databoard.binding.Binding;
20 import org.simantics.databoard.type.Datatype;
21 import org.simantics.databoard.type.RecordType;
22 import org.simantics.databoard.util.Bean;
23 import org.simantics.history.Collector;
24 import org.simantics.history.History;
25 import org.simantics.history.HistoryManager;
26 import org.simantics.history.ItemManager;
27 import org.simantics.history.impl.CollectorImpl;
28 import org.simantics.history.util.subscription.SubscriptionItem;
29 import org.simantics.history.util.subscription.SamplingFormat;
30 import org.simantics.utils.FileUtils;
31
32 public class HistoryExample2 {
33                 
34         public static void main(String[] args) throws Exception {
35                 
36                 //// Create sampling formats            
37                 // Simple format captures all samples, no min/max/avg/median 
38                 SamplingFormat simpleFormat, intervalFormat;
39                 simpleFormat = new SamplingFormat();
40                 RecordType format = (RecordType) (simpleFormat.format = new RecordType());
41                 format.addComponent("time", Datatypes.DOUBLE);
42                 format.addComponent("value", Datatypes.DOUBLE );
43                 format.addComponent("quality", Datatypes.BYTE );
44                 simpleFormat.interval = Double.NaN;
45                 simpleFormat.deadband = Double.NaN;
46                 simpleFormat.formatId = "Simple";
47                 
48                 // Interval format captures samples with 0.5s interval. It also calculates min/max/avg/median 
49                 intervalFormat = new SamplingFormat();
50                 format = (RecordType) (intervalFormat.format = new RecordType());
51                 format.addComponent("time", Datatypes.DOUBLE);
52                 format.addComponent("endTime", Datatypes.DOUBLE);
53                 format.addComponent("value", Datatypes.DOUBLE );
54                 format.addComponent("lastValue", Datatypes.DOUBLE);             
55                 format.addComponent("min", Datatypes.DOUBLE);
56                 format.addComponent("max", Datatypes.DOUBLE);
57                 format.addComponent("avg", Datatypes.DOUBLE);
58                 format.addComponent("median", Datatypes.DOUBLE);
59                 format.addComponent("quality", Datatypes.BYTE );
60                 format.addComponent("count", Datatypes.INTEGER);
61                 intervalFormat.interval = Double.NaN;
62                 intervalFormat.deadband = Double.NaN;
63                 intervalFormat.interval = 0.5;
64                 intervalFormat.formatId = "Interval";
65                 
66                 //// Create item descriptions
67                 SubscriptionItem[] items = SubscriptionItem.createItems("Variable", "MySubscription", simpleFormat, intervalFormat);
68
69                 // Manage items
70                 ItemManager im = new ItemManager( items );
71                 im.search("groupId", "MySubscription");
72                 
73                 //// Open file history & initialize subscription 
74                 File workarea = FileUtils.createTmpDir();
75                 HistoryManager historian = History.openFileHistory( workarea );
76                 historian.create( items );
77                                 
78                 //// Record data
79                 Collector collector = new CollectorImpl( historian );
80                 collector.addItems( items );
81                 try {
82                         double NaN = Double.NaN;
83                         double[] data = { 5.0, 5.0, 5.0, 5.0, 6.0, 6.0, 6.0, 7.0, 8.0, 9.0, NaN,10.0, NaN, NaN, NaN };
84
85                         for (int i=0; i<data.length; i++) 
86                         {
87                                 collector.beginStep(Bindings.DOUBLE, i * 0.1);
88                                 collector.setValue("Variable", Bindings.DOUBLE, data[i]);
89                                 collector.endStep();
90                         }
91                         
92                 } finally {
93                         collector.close();
94                 }
95                 
96                 // Open accessor to the data, read & print data.
97                 System.out.println("IntervalFormat = "+intervalFormat.toString());
98                 StreamAccessor sa = historian.openStream( items[1].id, "r" );
99                 try {                   
100                         sa.reset();
101                         Datatype sampleType = sa.type().componentType;
102                         Binding beanBinding = Bindings.getBeanBinding( sampleType );
103                         Bean sample = (Bean) beanBinding.createDefault();
104                         for (int i=0; i<sa.size(); i++) {
105                                 sa.get(i, beanBinding, sample);
106                                 System.out.println( sample );
107                         }
108                 } finally {
109                         sa.close();
110                 }
111                                 
112                 // The data can also be read using generic binding
113                 System.out.println("\nSimpleFormat = "+simpleFormat.toString());
114                 sa = historian.openStream(items[0].id, "r");
115                 try {                   
116                         sa.reset();
117                         Binding b = Bindings.getBinding( simpleFormat.format );
118                         Object sample = b.createDefault();
119                         for (int i=0; i<sa.size(); i++) {
120                                 sa.get(i, b, sample);
121                                 System.out.println( b.toString(sample) );
122                         }
123                 } finally {
124                         sa.close();
125                 }
126                 
127                 
128         }
129
130 }