]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.trend/src/org/simantics/trend/configuration/TrendSamplingFormats.java b/bundles/org.simantics.trend/src/org/simantics/trend/configuration/TrendSamplingFormats.java
new file mode 100644 (file)
index 0000000..e1d4d2a
--- /dev/null
@@ -0,0 +1,227 @@
+/*******************************************************************************\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