+package org.simantics.history.examples;\r
+\r
+import java.util.List;\r
+import java.util.UUID;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.Datatypes;\r
+import org.simantics.databoard.accessor.StreamAccessor;\r
+import org.simantics.databoard.accessor.error.AccessorException;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.binding.RecordBinding;\r
+import org.simantics.databoard.binding.error.BindingException;\r
+import org.simantics.databoard.type.RecordType;\r
+import org.simantics.databoard.util.Bean;\r
+import org.simantics.history.History;\r
+import org.simantics.history.HistoryException;\r
+import org.simantics.history.HistoryItem;\r
+import org.simantics.history.HistoryManager;\r
+import org.simantics.history.ItemManager;\r
+\r
+public class HistoryExample1 {\r
+\r
+ public static void main(String[] args) throws HistoryException, BindingException, AccessorException {\r
+ \r
+ /// Example1: Create History Manager & Item\r
+ // Create History Manager\r
+ HistoryManager history = History.createMemoryHistory();\r
+ \r
+ // Create a sample format\r
+ RecordType sampleFormat = new RecordType();\r
+ sampleFormat.addComponent("time", Datatypes.DOUBLE );\r
+ sampleFormat.addComponent("value", Datatypes.DOUBLE );\r
+ sampleFormat.addComponent("quality", Datatypes.BYTE );\r
+ \r
+ // Create History Item configuration\r
+ String id = UUID.randomUUID().toString();\r
+ HistoryItem hi = new HistoryItem(id, sampleFormat);\r
+ \r
+ // Create the item in the history\r
+ history.create( hi );\r
+ \r
+ /// Example 2: Write data to history item's stream (without Collector)\r
+ {\r
+ // Open item for writing\r
+ StreamAccessor sa = history.openStream(id, "rw");\r
+ // Create bean based binding for the sample\r
+ RecordBinding sampleBinding = (RecordBinding) Bindings.getBeanBinding( sampleFormat );\r
+ // Create sample object\r
+ Bean sample = (Bean) sampleBinding.createPartial();\r
+ try {\r
+ \r
+ // Set quality\r
+ sample.setField(2, Bindings.BYTE, (byte)0);\r
+ \r
+ // Write 10 samples\r
+ for (int i=0; i<10; i++) {\r
+ \r
+ // Set time\r
+ sample.setField(0, Bindings.DOUBLE, 1.0*i );\r
+ // Set Value\r
+ sample.setField(1, Bindings.DOUBLE, 100.0*i );\r
+ \r
+ sa.add(sampleBinding, sample); \r
+ }\r
+ } finally {\r
+ sa.flush();\r
+ sa.close();\r
+ }\r
+ }\r
+ \r
+ /// Example 3: Read & print data\r
+ {\r
+ // Open stream from history\r
+ StreamAccessor aa = history.openStream(id, "r");\r
+ // Read sample type\r
+ RecordType sampleType = (RecordType) aa.type().componentType;\r
+ // Create bean binding\r
+ RecordBinding sampleBinding = (RecordBinding) Bindings.getBeanBinding( sampleType );\r
+ // Create sample object\r
+ Bean sample = (Bean) sampleBinding.createPartial();\r
+ \r
+ try {\r
+ for (int i=0; i<aa.size(); i++) {\r
+ aa.get(i, sampleBinding, sample);\r
+ System.out.println(i+": "+sample);\r
+ }\r
+ } finally {\r
+ aa.close();\r
+ }\r
+ }\r
+ \r
+ /// Example 4: To search and read history items\r
+ // Read items from history. Each item is a record with various fields.\r
+ // The fields depending on usage and initialization.\r
+ //\r
+ // If collector is used, it adds a field called "collectorState" that persists\r
+ // the state data and subscription parameters. \r
+ Bean[] items = history.getItems();\r
+ \r
+ // ItemManager is a utility that helps in the management of items \r
+ ItemManager im = new ItemManager( items );\r
+ \r
+ // Print all item Ids\r
+ System.out.println("Items Identifiers:");\r
+ for ( String itemId : im.toIdArray() )\r
+ {\r
+ System.out.println( itemId );\r
+ }\r
+ \r
+ // To search an item by id, use\r
+ List<Bean> result = im.search("id", id);\r
+ \r
+ // To search items of specific parameter, say file format, use\r
+ im.search("format", sampleFormat);\r
+ \r
+ // Or interval\r
+ im.search("interval", 0.1);\r
+ \r
+ }\r
+ \r
+}\r