1 package org.opentrafficsim.road.gtu.strategical.od;
2
3 import java.io.Serializable;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import nl.tudelft.simulation.language.Throw;
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public class Categorization implements Serializable
23 {
24
25
26 public static final Categorization UNCATEGORIZED = new Categorization("Uncategorized");
27
28
29 private static final long serialVersionUID = 20160921L;
30
31
32 private final String id;
33
34
35 private final List<Class<?>> classes = new ArrayList<>();
36
37
38
39
40 private Categorization(final String id)
41 {
42 Throw.whenNull(id, "Id may not be null.");
43 this.id = id;
44 }
45
46
47
48
49
50
51
52
53 public Categorization(final String id, final Class<?> class1, final Class<?>... classes)
54 {
55 this(id);
56 Throw.whenNull(class1, "Classes may not be null.");
57 this.classes.add(class1);
58 for (Class<?> clazz : classes)
59 {
60 Throw.whenNull(clazz, "Classes may not be null.");
61 Throw.when(this.classes.contains(clazz), IllegalArgumentException.class,
62 "Class %s is given multiple times.", clazz);
63 this.classes.add(clazz);
64 }
65 }
66
67
68
69
70
71 public final int size()
72 {
73 return this.classes.size();
74 }
75
76
77
78
79
80
81
82 public final Class<?> get(final int i)
83 {
84 Throw.when(i < 0 || i >= size(), IndexOutOfBoundsException.class,
85 "Index %d is out of range for categorization of size %d.", i, size());
86 return this.classes.get(i);
87 }
88
89
90
91
92 public final String getId()
93 {
94 return this.id;
95 }
96
97
98 @Override
99 public final int hashCode()
100 {
101 final int prime = 31;
102 int result = 1;
103 result = prime * result + ((this.classes == null) ? 0 : this.classes.hashCode());
104 return result;
105 }
106
107
108 @Override
109 public final boolean equals(final Object obj)
110 {
111 if (this == obj)
112 {
113 return true;
114 }
115 if (obj == null)
116 {
117 return false;
118 }
119 if (getClass() != obj.getClass())
120 {
121 return false;
122 }
123 Categorization other = (Categorization) obj;
124 if (this.classes == null)
125 {
126 if (other.classes != null)
127 {
128 return false;
129 }
130 }
131 else if (!this.classes.equals(other.classes))
132 {
133 return false;
134 }
135 return true;
136 }
137
138
139 @Override
140 public final String toString()
141 {
142 return "Categorization [id=" + this.id + ", classes=" + this.classes + "]";
143 }
144
145 }