--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
+ * Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.trend.configuration;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.simantics.databoard.Datatypes;\r
+import org.simantics.databoard.type.RecordType;\r
+import org.simantics.history.util.subscription.SamplingFormat;\r
+\r
+public class TrendSamplingFormats {\r
+\r
+ // Template Sampling formats \r
+ public final static SamplingFormat analog_all, analog_100ms, analog_1s, analog_10s, analog_60s, analog_minmax; \r
+ public final static SamplingFormat binary_all, binary_100ms, binary_1s, binary_10s, binary_60s;\r
+ public final static SamplingFormat time;\r
+ \r
+ public final static String all="all", _100ms="100ms", _1s="1s", _10s="10s", _60s="60s", minmax="minmax"; \r
+ \r
+ /**\r
+ * Create a list of sampling formats for trend's needs \r
+ * \r
+ * @param interval\r
+ * @param deadband\r
+ * @return\r
+ */\r
+ public static List<SamplingFormat> createAnalogSamplingFormats( double interval, double deadband, String unit )\r
+ {\r
+ ArrayList<SamplingFormat> result = new ArrayList<SamplingFormat>( 6 );\r
+ \r
+ result.add( analog_minmax );\r
+ \r
+ if (interval==0. && deadband==0.) {\r
+ result.add( analog_all.clone().setUnit(unit) );\r
+ result.add( analog_100ms.clone().setUnit(unit) );\r
+ result.add( analog_1s.clone().setUnit(unit) );\r
+ result.add( analog_10s.clone().setUnit(unit) );\r
+ result.add( analog_60s.clone().setUnit(unit) );\r
+ return result;\r
+ } \r
+\r
+ // Format for ]0,1 .. 1[\r
+ if (interval < 0.1) {\r
+ result.add( analog_all.clone( interval, deadband ).setUnit(unit) );\r
+ result.add( analog_100ms.clone( 0.1, deadband ).setUnit(unit) );\r
+ result.add( analog_1s.clone( 1, deadband).setUnit(unit) );\r
+ result.add( analog_10s.clone( 10, deadband).setUnit(unit) );\r
+ result.add( analog_60s.clone( 60, deadband).setUnit(unit) );\r
+ return result;\r
+ }\r
+ \r
+ // Format for ]0 .. 1[\r
+ if (interval < 1.) {\r
+ result.add( analog_100ms.clone( interval, deadband ).setUnit(unit) );\r
+ result.add( analog_1s.clone( 1, deadband).setUnit(unit) );\r
+ result.add( analog_10s.clone( 10, deadband).setUnit(unit) );\r
+ result.add( analog_60s.clone( 60, deadband).setUnit(unit) );\r
+ return result;\r
+ }\r
+\r
+ // Format for [1 .. 10[\r
+ if (interval < 10.) {\r
+ result.add( analog_1s.clone( interval, deadband).setUnit(unit) );\r
+ result.add( analog_10s.clone( 10, deadband).setUnit(unit) );\r
+ result.add( analog_60s.clone( 60, deadband).setUnit(unit) );\r
+ return result;\r
+ }\r
+\r
+ // Format for [10 .. 60[\r
+ if (interval < 60.) {\r
+ result.add( analog_10s.clone( interval, deadband).setUnit(unit) );\r
+ result.add( analog_60s.clone( 60, deadband).setUnit(unit) );\r
+ return result;\r
+ }\r
+\r
+ // Format for >60s\r
+ result.add( analog_60s.clone( interval, deadband).setUnit(unit) );\r
+ return result;\r
+ }\r
+\r
+ /**\r
+ * Create a list of sampling formats for trend's needs \r
+ * \r
+ * @param interval\r
+ * @return\r
+ */\r
+ public static List<SamplingFormat> createBinarySamplingFormats( double interval )\r
+ {\r
+ ArrayList<SamplingFormat> result = new ArrayList<SamplingFormat>( 5 );\r
+ \r
+ if (interval==0.) {\r
+ result.add( binary_all );\r
+ result.add( binary_100ms );\r
+ result.add( binary_1s );\r
+ result.add( binary_10s );\r
+ result.add( binary_60s );\r
+ return result;\r
+ } \r
+\r
+ // Format for ]0,1 .. 1[\r
+ if (interval < 1.) {\r
+ result.add( binary_all.clone( interval, Double.NaN ) );\r
+ result.add( binary_100ms );\r
+ result.add( binary_1s );\r
+ result.add( binary_10s );\r
+ result.add( binary_60s );\r
+ return result;\r
+ }\r
+ \r
+ // Format for ]0 .. 1[\r
+ if (interval < 1.) {\r
+ result.add( binary_100ms.clone( interval, Double.NaN ) );\r
+ result.add( binary_1s );\r
+ result.add( binary_10s );\r
+ result.add( binary_60s );\r
+ return result;\r
+ }\r
+\r
+ // Format for [1 .. 10[\r
+ if (interval < 10.) {\r
+ result.add( binary_1s.clone( interval, Double.NaN) );\r
+ result.add( binary_10s );\r
+ result.add( binary_60s );\r
+ return result;\r
+ }\r
+\r
+ // Format for [10 .. 60[\r
+ if (interval < 60.) {\r
+ result.add( binary_10s.clone( interval, Double.NaN) );\r
+ result.add( binary_60s );\r
+ return result;\r
+ }\r
+\r
+ // Format for >60s\r
+ result.add( binary_60s.clone( interval, Double.NaN) );\r
+ return result;\r
+ }\r
+ \r
+ static {\r
+ time = new SamplingFormat();\r
+ RecordType format = (RecordType) (time.format = new RecordType());\r
+ format.addComponent("time", Datatypes.DOUBLE);\r
+ format.addComponent("value", Datatypes.DOUBLE);\r
+ format.addComponent("quality", Datatypes.BYTE);\r
+ time.interval = Double.NaN;\r
+ time.deadband = Double.NaN;\r
+\r
+ analog_all = new SamplingFormat();\r
+ analog_all.formatId = all;\r
+ format = (RecordType) (analog_all.format = new RecordType());\r
+ format.addComponent("time", Datatypes.DOUBLE);\r
+ format.addComponent("endTime", Datatypes.DOUBLE);\r
+ format.addComponent("value", Datatypes.DOUBLE);\r
+ format.addComponent("quality", Datatypes.BYTE);\r
+ analog_all.interval = Double.NaN;\r
+ analog_all.deadband = Double.NaN;\r
+ \r
+ analog_1s = new SamplingFormat();\r
+ analog_1s.formatId = _1s;\r
+ analog_1s.format = new RecordType();\r
+ format = (RecordType) (analog_1s.format = new RecordType());\r
+ format.addComponent("time", Datatypes.DOUBLE);\r
+ format.addComponent("endTime", Datatypes.DOUBLE); \r
+ format.addComponent("value", Datatypes.DOUBLE);\r
+ format.addComponent("min", Datatypes.DOUBLE);\r
+ format.addComponent("max", Datatypes.DOUBLE);\r
+ format.addComponent("avg", Datatypes.DOUBLE); \r
+ //format.addComponent("median", Datatypes.DOUBLE); \r
+ format.addComponent("quality", Datatypes.BYTE);\r
+ analog_1s.interval = 1.0;\r
+ analog_1s.deadband = Double.NaN; \r
+ \r
+ analog_100ms = analog_1s.cloneTo(_100ms, 0.1, Double.NaN); \r
+ analog_10s = analog_1s.cloneTo(_10s, 10., Double.NaN); \r
+ analog_60s = analog_10s.cloneTo(_60s, 60., Double.NaN);\r
+\r
+ analog_minmax = new SamplingFormat();\r
+ analog_minmax.formatId = minmax;\r
+ format = (RecordType) (analog_minmax.format = new RecordType());\r
+ format.addComponent("time", Datatypes.DOUBLE);\r
+ format.addComponent("endTime", Datatypes.DOUBLE);\r
+ format.addComponent("value", Datatypes.DOUBLE);\r
+ format.addComponent("min", Datatypes.DOUBLE);\r
+ format.addComponent("max", Datatypes.DOUBLE);\r
+ analog_minmax.interval = Double.MAX_VALUE;\r
+ analog_minmax.deadband = Double.MAX_VALUE;\r
+ \r
+ binary_all = new SamplingFormat();\r
+ binary_all.formatId = all;\r
+ format = (RecordType) (binary_all.format = new RecordType());\r
+ format.addComponent("time", Datatypes.DOUBLE);\r
+ format.addComponent("endTime", Datatypes.DOUBLE);\r
+ format.addComponent("value", Datatypes.BYTE);\r
+ format.addComponent("max", Datatypes.BYTE);\r
+ format.addComponent("quality", Datatypes.BYTE);\r
+ binary_all.interval = Double.NaN;\r
+ binary_all.deadband = Double.NaN;\r
+ \r
+ binary_1s = new SamplingFormat();\r
+ binary_1s.formatId = _1s;\r
+ format = (RecordType) (binary_1s.format = new RecordType());\r
+ format.addComponent("time", Datatypes.DOUBLE);\r
+ format.addComponent("endTime", Datatypes.DOUBLE); \r
+ format.addComponent("value", Datatypes.BYTE);\r
+ format.addComponent("max", Datatypes.BYTE);\r
+ //format.addComponent("median", Datatypes.BYTE); \r
+ format.addComponent("quality", Datatypes.BYTE);\r
+ binary_1s.interval = 1.0;\r
+ binary_1s.deadband = Double.NaN; \r
+ \r
+ binary_100ms = binary_1s.cloneTo(_100ms, 0.1, Double.NaN); \r
+ binary_10s = binary_1s.cloneTo(_10s, 10., Double.NaN); \r
+ binary_60s = binary_1s.cloneTo(_60s, 60., Double.NaN);\r
+ }\r
+ \r
+ \r
+}\r