]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.trend/src/org/simantics/trend/configuration/TrendSamplingFormats.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.trend / src / org / simantics / trend / configuration / TrendSamplingFormats.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.trend.configuration;\r
13 \r
14 import java.util.ArrayList;\r
15 import java.util.List;\r
16 \r
17 import org.simantics.databoard.Datatypes;\r
18 import org.simantics.databoard.type.RecordType;\r
19 import org.simantics.history.util.subscription.SamplingFormat;\r
20 \r
21 public class TrendSamplingFormats {\r
22 \r
23         // Template Sampling formats    \r
24         public final static SamplingFormat analog_all, analog_100ms, analog_1s, analog_10s, analog_60s, analog_minmax; \r
25         public final static SamplingFormat binary_all, binary_100ms, binary_1s, binary_10s, binary_60s;\r
26         public final static SamplingFormat time;\r
27         \r
28         public final static String all="all", _100ms="100ms", _1s="1s", _10s="10s", _60s="60s", minmax="minmax"; \r
29         \r
30         /**\r
31          * Create a list of sampling formats for trend's needs \r
32          * \r
33          * @param interval\r
34          * @param deadband\r
35          * @return\r
36          */\r
37         public static List<SamplingFormat> createAnalogSamplingFormats( double interval, double deadband, String unit )\r
38         {\r
39                 ArrayList<SamplingFormat> result = new ArrayList<SamplingFormat>( 6 );\r
40                 \r
41                 result.add( analog_minmax );\r
42                 \r
43                 if (interval==0. && deadband==0.) {\r
44                         result.add( analog_all.clone().setUnit(unit) );\r
45                         result.add( analog_100ms.clone().setUnit(unit) );\r
46                         result.add( analog_1s.clone().setUnit(unit) );\r
47                         result.add( analog_10s.clone().setUnit(unit) );\r
48                         result.add( analog_60s.clone().setUnit(unit) );\r
49                         return result;\r
50                 } \r
51 \r
52                 // Format for ]0,1 .. 1[\r
53                 if (interval < 0.1) {\r
54                         result.add( analog_all.clone( interval, deadband ).setUnit(unit) );\r
55                         result.add( analog_100ms.clone( 0.1, deadband ).setUnit(unit) );\r
56                         result.add( analog_1s.clone( 1, deadband).setUnit(unit) );\r
57                         result.add( analog_10s.clone( 10, deadband).setUnit(unit) );\r
58                         result.add( analog_60s.clone( 60, deadband).setUnit(unit) );\r
59                         return result;\r
60                 }\r
61                 \r
62                 // Format for ]0 .. 1[\r
63                 if (interval < 1.) {\r
64                         result.add( analog_100ms.clone( interval, deadband ).setUnit(unit) );\r
65                         result.add( analog_1s.clone( 1, deadband).setUnit(unit) );\r
66                         result.add( analog_10s.clone( 10, deadband).setUnit(unit) );\r
67                         result.add( analog_60s.clone( 60, deadband).setUnit(unit) );\r
68                         return result;\r
69                 }\r
70 \r
71                 // Format for [1 .. 10[\r
72                 if (interval < 10.) {\r
73                         result.add( analog_1s.clone( interval, deadband).setUnit(unit) );\r
74                         result.add( analog_10s.clone( 10, deadband).setUnit(unit) );\r
75                         result.add( analog_60s.clone( 60, deadband).setUnit(unit) );\r
76                         return result;\r
77                 }\r
78 \r
79                 // Format for [10 .. 60[\r
80                 if (interval < 60.) {\r
81                         result.add( analog_10s.clone( interval, deadband).setUnit(unit) );\r
82                         result.add( analog_60s.clone( 60, deadband).setUnit(unit) );\r
83                         return result;\r
84                 }\r
85 \r
86                 // Format for >60s\r
87                 result.add( analog_60s.clone( interval, deadband).setUnit(unit) );\r
88                 return result;\r
89         }\r
90 \r
91         /**\r
92          * Create a list of sampling formats for trend's needs \r
93          * \r
94          * @param interval\r
95          * @return\r
96          */\r
97         public static List<SamplingFormat> createBinarySamplingFormats( double interval )\r
98         {\r
99                 ArrayList<SamplingFormat> result = new ArrayList<SamplingFormat>( 5 );\r
100                 \r
101                 if (interval==0.) {\r
102                         result.add( binary_all );\r
103                         result.add( binary_100ms );\r
104                         result.add( binary_1s );\r
105                         result.add( binary_10s );\r
106                         result.add( binary_60s );\r
107                         return result;\r
108                 } \r
109 \r
110                 // Format for ]0,1 .. 1[\r
111                 if (interval < 1.) {\r
112                         result.add( binary_all.clone( interval, Double.NaN ) );\r
113                         result.add( binary_100ms );\r
114                         result.add( binary_1s );\r
115                         result.add( binary_10s );\r
116                         result.add( binary_60s );\r
117                         return result;\r
118                 }\r
119                 \r
120                 // Format for ]0 .. 1[\r
121                 if (interval < 1.) {\r
122                         result.add( binary_100ms.clone( interval, Double.NaN ) );\r
123                         result.add( binary_1s );\r
124                         result.add( binary_10s );\r
125                         result.add( binary_60s );\r
126                         return result;\r
127                 }\r
128 \r
129                 // Format for [1 .. 10[\r
130                 if (interval < 10.) {\r
131                         result.add( binary_1s.clone( interval, Double.NaN) );\r
132                         result.add( binary_10s );\r
133                         result.add( binary_60s );\r
134                         return result;\r
135                 }\r
136 \r
137                 // Format for [10 .. 60[\r
138                 if (interval < 60.) {\r
139                         result.add( binary_10s.clone( interval, Double.NaN) );\r
140                         result.add( binary_60s );\r
141                         return result;\r
142                 }\r
143 \r
144                 // Format for >60s\r
145                 result.add( binary_60s.clone( interval, Double.NaN) );\r
146                 return result;\r
147         }\r
148         \r
149         static {\r
150                 time = new SamplingFormat();\r
151                 RecordType format = (RecordType) (time.format = new RecordType());\r
152                 format.addComponent("time", Datatypes.DOUBLE);\r
153                 format.addComponent("value", Datatypes.DOUBLE);\r
154                 format.addComponent("quality", Datatypes.BYTE);\r
155                 time.interval = Double.NaN;\r
156                 time.deadband = Double.NaN;\r
157 \r
158                 analog_all = new SamplingFormat();\r
159                 analog_all.formatId = all;\r
160                 format = (RecordType) (analog_all.format = new RecordType());\r
161                 format.addComponent("time", Datatypes.DOUBLE);\r
162                 format.addComponent("endTime", Datatypes.DOUBLE);\r
163                 format.addComponent("value", Datatypes.DOUBLE);\r
164                 format.addComponent("quality", Datatypes.BYTE);\r
165                 analog_all.interval = Double.NaN;\r
166                 analog_all.deadband = Double.NaN;\r
167                 \r
168                 analog_1s = new SamplingFormat();\r
169                 analog_1s.formatId = _1s;\r
170                 analog_1s.format = new RecordType();\r
171                 format = (RecordType) (analog_1s.format = new RecordType());\r
172                 format.addComponent("time", Datatypes.DOUBLE);\r
173                 format.addComponent("endTime", Datatypes.DOUBLE);               \r
174                 format.addComponent("value", Datatypes.DOUBLE);\r
175                 format.addComponent("min", Datatypes.DOUBLE);\r
176                 format.addComponent("max", Datatypes.DOUBLE);\r
177                 format.addComponent("avg", Datatypes.DOUBLE);           \r
178                 //format.addComponent("median", Datatypes.DOUBLE);              \r
179                 format.addComponent("quality", Datatypes.BYTE);\r
180                 analog_1s.interval = 1.0;\r
181                 analog_1s.deadband = Double.NaN;                \r
182                 \r
183                 analog_100ms = analog_1s.cloneTo(_100ms, 0.1, Double.NaN);              \r
184                 analog_10s = analog_1s.cloneTo(_10s, 10., Double.NaN);          \r
185                 analog_60s = analog_10s.cloneTo(_60s, 60., Double.NaN);\r
186 \r
187                 analog_minmax = new SamplingFormat();\r
188                 analog_minmax.formatId = minmax;\r
189                 format = (RecordType) (analog_minmax.format = new RecordType());\r
190                 format.addComponent("time", Datatypes.DOUBLE);\r
191                 format.addComponent("endTime", Datatypes.DOUBLE);\r
192                 format.addComponent("value", Datatypes.DOUBLE);\r
193                 format.addComponent("min", Datatypes.DOUBLE);\r
194                 format.addComponent("max", Datatypes.DOUBLE);\r
195                 analog_minmax.interval = Double.MAX_VALUE;\r
196                 analog_minmax.deadband = Double.MAX_VALUE;\r
197                 \r
198                 binary_all = new SamplingFormat();\r
199                 binary_all.formatId = all;\r
200                 format = (RecordType) (binary_all.format = new RecordType());\r
201                 format.addComponent("time", Datatypes.DOUBLE);\r
202                 format.addComponent("endTime", Datatypes.DOUBLE);\r
203                 format.addComponent("value", Datatypes.BYTE);\r
204                 format.addComponent("max", Datatypes.BYTE);\r
205                 format.addComponent("quality", Datatypes.BYTE);\r
206                 binary_all.interval = Double.NaN;\r
207                 binary_all.deadband = Double.NaN;\r
208                 \r
209                 binary_1s = new SamplingFormat();\r
210                 binary_1s.formatId = _1s;\r
211                 format = (RecordType) (binary_1s.format = new RecordType());\r
212                 format.addComponent("time", Datatypes.DOUBLE);\r
213                 format.addComponent("endTime", Datatypes.DOUBLE);               \r
214                 format.addComponent("value", Datatypes.BYTE);\r
215                 format.addComponent("max", Datatypes.BYTE);\r
216                 //format.addComponent("median", Datatypes.BYTE);                \r
217                 format.addComponent("quality", Datatypes.BYTE);\r
218                 binary_1s.interval = 1.0;\r
219                 binary_1s.deadband = Double.NaN;                \r
220                 \r
221                 binary_100ms = binary_1s.cloneTo(_100ms, 0.1, Double.NaN);              \r
222                 binary_10s = binary_1s.cloneTo(_10s, 10., Double.NaN);          \r
223                 binary_60s = binary_1s.cloneTo(_60s, 60., Double.NaN);\r
224         }\r
225         \r
226         \r
227 }\r