1 package org.djutils.data;
2
3 import org.djunits.Throw;
4 import org.djutils.immutablecollections.ImmutableList;
5
6 /**
7 * Abstract {@code Table} implementation taking care of the columns.
8 * <p>
9 * Copyright (c) 2020-2020 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
10 * BSD-style license. See <a href="https://opentrafficsim.org/docs/current/license.html">OpenTrafficSim 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 * @author <a href="https://www.transport.citg.tudelft.nl">Wouter Schakel</a>
15 */
16 public abstract class AbstractDataTable implements DataTable
17 {
18
19 /** Id. */
20 private final String id;
21
22 /** Description. */
23 private final String description;
24
25 /** Columns. */
26 private final ImmutableList<DataColumn<?>> columns;
27
28 /**
29 * Constructor for the data table using an ImmutableCollection for the columns.
30 * @param id String; id
31 * @param description String; description
32 * @param columns ImmutableList<Column<?>>; columns
33 * @throws NullPointerException when id, description or columns is null
34 * @throws IllegalArgumentException when id is empty or there are zero columns
35 */
36 public AbstractDataTable(final String id, final String description, final ImmutableList<DataColumn<?>> columns)
37 {
38 Throw.whenNull(id, "Id may not be null.");
39 Throw.whenNull(description, "Description may not be null.");
40 Throw.whenNull(columns, "Columns may not be null.");
41 Throw.when(id.length() == 0, IllegalArgumentException.class, "id cannot be empty");
42 Throw.when(columns.size() == 0, IllegalArgumentException.class, "there should be at least one column");
43 this.id = id;
44 this.description = description;
45 this.columns = columns;
46 }
47
48 /** {@inheritDoc} */
49 @Override
50 public ImmutableList<DataColumn<?>> getColumns()
51 {
52 return this.columns;
53 }
54
55 /** {@inheritDoc} */
56 @Override
57 public String getId()
58 {
59 return this.id;
60 }
61
62 /** {@inheritDoc} */
63 @Override
64 public String getDescription()
65 {
66 return this.description;
67 }
68
69 }