View Javadoc
1   package org.djutils.data;
2   
3   import org.djutils.base.Identifiable;
4   import org.djutils.immutablecollections.ImmutableList;
5   
6   /**
7    * Table with data stored in structured records.
8    * <p>
9    * Copyright (c) 2020-2021 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
10   * BSD-style license. See <a href="https://djutils.org/docs/current/djutils/licenses.html">DJUTILS License</a>.
11   * </p>
12   * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
13   * @author <a href="https://www.tudelft.nl/pknoppers">Peter Knoppers</a>
14   */
15  public interface DataTable extends Iterable<DataRecord>, Identifiable
16  {
17  
18      /**
19       * Returns the description.
20       * @return description
21       */
22      String getDescription();
23  
24      /**
25       * Returns the list of columns.
26       * @return list of columns
27       */
28      ImmutableList<DataColumn<?>> getColumns();
29  
30      /**
31       * Returns the number of columns.
32       * @return number of columns
33       */
34      default int getNumberOfColumns()
35      {
36          return getColumns().size();
37      }
38  
39      /**
40       * Returns whether the table is empty.
41       * @return whether the table is empty
42       */
43      boolean isEmpty();
44  
45      /**
46       * Return the column ids as a String[].
47       * @return String[]; the column ids
48       */
49      default String[] getColumnIds()
50      {
51          String[] headers = new String[getNumberOfColumns()];
52          int index = 0;
53          for (DataColumn<?> column : getColumns())
54          {
55              headers[index++] = column.getId();
56          }
57          return headers;
58      }
59  
60      /**
61       * Return the column descriptions as a String[].
62       * @return String[] the column headers
63       */
64      default String[] getColumnDescriptions()
65      {
66          String[] descriptions = new String[getNumberOfColumns()];
67          int index = 0;
68          for (DataColumn<?> column : getColumns())
69          {
70              descriptions[index++] = column.getDescription();
71          }
72          return descriptions;
73      }
74  
75      /**
76       * Return the column data types as a Class&lt;?&gt;[].
77       * @return Class&lt;?&gt;[] the column data types
78       */
79      default Class<?>[] getColumnDataTypes()
80      {
81          Class<?>[] dataTypes = new Class[getNumberOfColumns()];
82          int index = 0;
83          for (DataColumn<?> column : getColumns())
84          {
85              dataTypes[index++] = column.getValueType();
86          }
87          return dataTypes;
88      }
89  
90      /**
91       * Return the column data types as a String[]. Each data type is presented as the full class name or the primitive name. In
92       * case of an array, the result is preceded by an "[" for each dimension. After one or more "[" symbols, the class name is
93       * preceded by an "L" for a non-primitive class or interface, and by "I" for integer, "Z" for boolean, "B" for byte, "C" for
94       * char, "D" for double, "F" for float, "J" for long and "S" for short. So for a column with a double, "double" is returned.
95       * For a column with a "Double", "java.lang.Double" is returned, for an int[][], "[[I" is returned, and for a Long[],
96       * "[Ljava.lang.Long" is returned.
97       * @return String[] the column data types as an array of Strings
98       */
99      default String[] getColumnDataTypeStrings()
100     {
101         String[] dataTypes = new String[getNumberOfColumns()];
102         int index = 0;
103         for (DataColumn<?> column : getColumns())
104         {
105             dataTypes[index++] = column.getValueType().getName();
106         }
107         return dataTypes;
108     }
109 
110 }