View Javadoc
1   package org.djutils.data;
2   
3   import java.io.IOException;
4   import java.util.ArrayList;
5   import java.util.HashMap;
6   import java.util.List;
7   import java.util.Map;
8   
9   import javax.xml.stream.XMLStreamException;
10  
11  import org.djunits.unit.AbsoluteTemperatureUnit;
12  import org.djunits.unit.TimeUnit;
13  import org.djunits.value.vdouble.scalar.AbsoluteTemperature;
14  import org.djunits.value.vdouble.scalar.Time;
15  import org.djutils.data.csv.CSVData;
16  import org.djutils.data.csv.TSVData;
17  import org.djutils.data.json.JSONData;
18  import org.djutils.data.serialization.TextSerializationException;
19  import org.djutils.data.xml.XMLData;
20  
21  /**
22   * DataDemo.java demonstration code used in the GRAV documentation. <br>
23   * <br>
24   * Copyright (c) 2020-2022 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See
25   * for project information <a href="https://djutils.org" target="_blank"> https://djutils.org</a>. The DJUTILS project is
26   * distributed under a three-clause BSD-style license, which can be found at
27   * <a href="https://djutils.org/docs/license.html" target="_blank"> https://djutils.org/docs/license.html</a>. <br>
28   * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
29   * @author <a href="https://www.tudelft.nl/pknoppers">Peter Knoppers</a>
30   * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
31   */
32  public final class DataDemo
33  {
34      /**
35       * Do not instantiate.
36       */
37      private DataDemo()
38      {
39          // Do not instantiate
40      }
41  
42      /**
43       * Demonstration code.
44       * @param args String[]; the command line arguments (not used)
45       * @throws TextSerializationException ...
46       * @throws IOException ...
47       * @throws XMLStreamException ...
48       */
49      public static void main(final String[] args)
50              throws IOException, TextSerializationException, XMLStreamException
51      {
52          System.out.println("Example using java basic types");
53          example1();
54          System.out.println("Example using DJUNITS");
55          example2();
56      }
57  
58      /**
59       * Straight forward example.
60       * @throws TextSerializationException ...
61       * @throws IOException ...
62       * @throws XMLStreamException ...
63       */
64      public static void example1() throws IOException, TextSerializationException, XMLStreamException
65      {
66          DataColumn<Integer> timeStamp = new SimpleDataColumn<>("timeStamp", "time rounded to nearest second", int.class);
67          DataColumn<Double> temperature = new SimpleDataColumn<>("temperature", "engine temperature in Celcius", double.class);
68          DataColumn<String> remark = new SimpleDataColumn<>("remark", "remark", String.class);
69          List<DataColumn<?>> columns = new ArrayList<>();
70          columns.add(timeStamp);
71          columns.add(temperature);
72          columns.add(remark);
73          ListDataTable table = new ListDataTable("engineTemperatureData", "engine temperature samples", columns);
74  
75          System.out.println(table);
76  
77          Object[] record = new Object[] { 600, 18.0, "starting engine" };
78          table.addRecord(record);
79  
80          Map<String, Object> map = new HashMap<>();
81          map.put("remark", "leaving parking lot");
82          map.put("temperature", 28.5);
83          map.put("timeStamp", 660);
84          table.addRecordByColumnIds(map);
85  
86          for (DataRecord dataRecord : table)
87          {
88              for (int column = 0; column < table.getNumberOfColumns(); column++)
89              {
90                  System.out.println("column " + column + ": " + dataRecord.getValues()[column]);
91              }
92          }
93          for (DataRecord dataRecord : table)
94          {
95              System.out.println("timeStamp=" + dataRecord.getValue("timeStamp") + ", temperature="
96                      + dataRecord.getValue("temperature") + ", " + dataRecord.getValue("remark"));
97          }
98  
99          System.out.println("JSON");
100         JSONData.writeData("C:/Temp/example.json", table);
101 
102         DataTable readBack = JSONData.readData("C:/Temp/example.json");
103         for (DataRecord dataRecord : readBack)
104         {
105             for (int column = 0; column < readBack.getNumberOfColumns(); column++)
106             {
107                 System.out.println("column " + column + ": " + dataRecord.getValues()[column]);
108             }
109         }
110 
111         System.out.println("XML");
112         XMLData.writeData("C:/Temp/example.xml", table);
113 
114         readBack = XMLData.readData("C:/Temp/example.xml");
115         for (DataRecord dataRecord : readBack)
116         {
117             for (int column = 0; column < readBack.getNumberOfColumns(); column++)
118             {
119                 System.out.println("column " + column + ": " + dataRecord.getValues()[column]);
120             }
121         }
122 
123         System.out.println("CSV");
124         CSVData.writeData("C:/Temp/example.csv", "C:/Temp/example.csvm", table);
125 
126         readBack = CSVData.readData("C:/Temp/example.csv", "C:/Temp/example.csvm");
127         for (DataRecord dataRecord : readBack)
128         {
129             for (int column = 0; column < readBack.getNumberOfColumns(); column++)
130             {
131                 System.out.println("column " + column + ": " + dataRecord.getValues()[column]);
132             }
133         }
134 
135         System.out.println("TSV");
136         TSVData.writeData("C:/Temp/example.tsv", "C:/Temp/example.tsvm", table);
137 
138         readBack = TSVData.readData("C:/Temp/example.tsv", "C:/Temp/example.tsvm");
139         for (DataRecord dataRecord : readBack)
140         {
141             for (int column = 0; column < readBack.getNumberOfColumns(); column++)
142             {
143                 System.out.println("column " + column + ": " + dataRecord.getValues()[column]);
144             }
145         }
146 
147         table.addRecord(new Object[] { 720, Double.NaN, "can we store a NaN value?" });
148         table.addRecord(new Object[] { 780, Double.POSITIVE_INFINITY, "can we store positive infinity?" });
149         table.addRecord(new Object[] { 840, Double.NEGATIVE_INFINITY, "can we store negative infinity?" });
150         System.out.println("JSON");
151         JSONData.writeData("C:/Temp/example.json", table);
152 
153         readBack = JSONData.readData("C:/Temp/example.json");
154         for (DataRecord dataRecord : readBack)
155         {
156             for (int column = 0; column < readBack.getNumberOfColumns(); column++)
157             {
158                 System.out.println("column " + column + ": " + dataRecord.getValues()[column]);
159             }
160         }
161         CSVData.writeData("C:/Temp/example.csv", "C:/Temp/example.csvm", table);
162 
163     }
164 
165     /**
166      * Example using DJUNITS strongly types values.
167      * @throws TextSerializationException ...
168      * @throws IOException ...
169      */
170     public static void example2() throws IOException, TextSerializationException
171     {
172         DataColumn<Time> timeStamp = new SimpleDataColumn<>("timeStamp", "time rounded to nearest second", Time.class);
173         DataColumn<AbsoluteTemperature> temperature =
174                 new SimpleDataColumn<>("temperature", "engine temperature in Celcius", AbsoluteTemperature.class);
175         DataColumn<String> remark = new SimpleDataColumn<>("remark", "remark", String.class);
176         List<DataColumn<?>> columns = new ArrayList<>();
177         columns.add(timeStamp);
178         columns.add(temperature);
179         columns.add(remark);
180         ListDataTable table = new ListDataTable("engineTemperatureData", "engine temperature samples", columns);
181 
182         System.out.println(table);
183 
184         Object[] record = new Object[] { new Time(600, TimeUnit.BASE_SECOND),
185                 new AbsoluteTemperature(18.0, AbsoluteTemperatureUnit.DEGREE_CELSIUS), "starting engine" };
186         table.addRecord(record);
187 
188         Map<String, Object> map = new HashMap<>();
189         map.put("remark", "leaving parking lot");
190         map.put("temperature", new AbsoluteTemperature(28.5, AbsoluteTemperatureUnit.DEGREE_CELSIUS));
191         map.put("timeStamp", new Time(660, TimeUnit.BASE_SECOND));
192         table.addRecordByColumnIds(map);
193 
194         for (DataRecord dataRecord : table)
195         {
196             for (int column = 0; column < table.getNumberOfColumns(); column++)
197             {
198                 System.out.println("column " + column + ": " + dataRecord.getValues()[column]);
199             }
200         }
201         for (DataRecord dataRecord : table)
202         {
203             System.out.println("timeStamp=" + dataRecord.getValue("timeStamp") + ", temperature="
204                     + dataRecord.getValue("temperature") + ", " + dataRecord.getValue("remark"));
205         }
206 
207         System.out.println("JSON");
208         JSONData.writeData("C:/Temp/example.json", table);
209 
210         DataTable readBack = JSONData.readData("C:/Temp/example.json");
211         for (DataRecord dataRecord : readBack)
212         {
213             for (int column = 0; column < readBack.getNumberOfColumns(); column++)
214             {
215                 System.out.println("column " + column + ": " + dataRecord.getValues()[column]);
216             }
217         }
218 
219     }
220 
221 }