View Javadoc
1   package org.opentrafficsim.kpi.sampling;
2   
3   import org.djunits.value.vdouble.scalar.Length;
4   import org.djunits.value.vdouble.scalar.Time;
5   
6   import nl.tudelft.simulation.language.Throw;
7   
8   /**
9    * <p>
10   * Copyright (c) 2013-2018 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
11   * BSD-style license. See <a href="http://opentrafficsim.org/node/13">OpenTrafficSim License</a>.
12   * <p>
13   * @version $Revision$, $LastChangedDate$, by $Author$, initial version Sep 22, 2016 <br>
14   * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
15   * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
16   * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
17   */
18  public class SpaceTimeRegion
19  {
20  
21      /** Lane direction. */
22      private final KpiLaneDirection laneDirection;
23  
24      /** Start position. */
25      private final Length startPosition;
26  
27      /** End position. */
28      private final Length endPosition;
29  
30      /** Start time. */
31      private final Time startTime;
32  
33      /** End time. */
34      private final Time endTime;
35  
36      /**
37       * @param laneDirection lane direction
38       * @param startPosition start position
39       * @param endPosition end position
40       * @param startTime start time
41       * @param endTime end time
42       * @throws IllegalArgumentException if start time is larger than end time
43       */
44      public SpaceTimeRegion(final KpiLaneDirection laneDirection, final Length startPosition, final Length endPosition,
45              final Time startTime, final Time endTime)
46      {
47          Throw.whenNull(startPosition, "Start position may not be null.");
48          Throw.whenNull(endPosition, "End position may not be null.");
49          Throw.whenNull(startTime, "Start time may not be null.");
50          Throw.whenNull(endTime, "End time may not be null.");
51          Throw.when(endPosition.lt(startPosition), IllegalArgumentException.class,
52                  "End position should be greater than start position.");
53          Throw.when(endTime.lt(startTime), IllegalArgumentException.class, "End time should be greater than start time.");
54          this.laneDirection = laneDirection;
55          this.startPosition = startPosition;
56          this.endPosition = endPosition;
57          this.startTime = startTime;
58          this.endTime = endTime;
59      }
60  
61      /**
62       * @return laneDirection.
63       */
64      public final KpiLaneDirection getLaneDirection()
65      {
66          return this.laneDirection;
67      }
68  
69      /**
70       * @return startPosition.
71       */
72      public final Length getStartPosition()
73      {
74          return this.startPosition;
75      }
76  
77      /**
78       * @return endPosition.
79       */
80      public final Length getEndPosition()
81      {
82          return this.endPosition;
83      }
84  
85      /**
86       * @return startTime.
87       */
88      public final Time getStartTime()
89      {
90          return this.startTime;
91      }
92  
93      /**
94       * @return endTime.
95       */
96      public final Time getEndTime()
97      {
98          return this.endTime;
99      }
100 
101     /** {@inheritDoc} */
102     @Override
103     public final int hashCode()
104     {
105         final int prime = 31;
106         int result = 1;
107         result = prime * result + ((this.endPosition == null) ? 0 : this.endPosition.hashCode());
108         result = prime * result + ((this.endTime == null) ? 0 : this.endTime.hashCode());
109         result = prime * result + ((this.laneDirection == null) ? 0 : this.laneDirection.hashCode());
110         result = prime * result + ((this.startPosition == null) ? 0 : this.startPosition.hashCode());
111         result = prime * result + ((this.startTime == null) ? 0 : this.startTime.hashCode());
112         return result;
113     }
114 
115     /** {@inheritDoc} */
116     @Override
117     public final boolean equals(final Object obj)
118     {
119         if (this == obj)
120         {
121             return true;
122         }
123         if (obj == null)
124         {
125             return false;
126         }
127         if (getClass() != obj.getClass())
128         {
129             return false;
130         }
131         SpaceTimeRegion other = (SpaceTimeRegion) obj;
132         if (this.endPosition == null)
133         {
134             if (other.endPosition != null)
135             {
136                 return false;
137             }
138         }
139         else if (!this.endPosition.equals(other.endPosition))
140         {
141             return false;
142         }
143         if (this.endTime == null)
144         {
145             if (other.endTime != null)
146             {
147                 return false;
148             }
149         }
150         else if (!this.endTime.equals(other.endTime))
151         {
152             return false;
153         }
154         if (this.laneDirection == null)
155         {
156             if (other.laneDirection != null)
157             {
158                 return false;
159             }
160         }
161         else if (!this.laneDirection.equals(other.laneDirection))
162         {
163             return false;
164         }
165         if (this.startPosition == null)
166         {
167             if (other.startPosition != null)
168             {
169                 return false;
170             }
171         }
172         else if (!this.startPosition.equals(other.startPosition))
173         {
174             return false;
175         }
176         if (this.startTime == null)
177         {
178             if (other.startTime != null)
179             {
180                 return false;
181             }
182         }
183         else if (!this.startTime.equals(other.startTime))
184         {
185             return false;
186         }
187         return true;
188     }
189 
190     /** {@inheritDoc} */
191     @Override
192     public final String toString()
193     {
194         return "SpaceTimeRegion [laneDirection=" + this.laneDirection + ", startPosition=" + this.startPosition
195                 + ", endPosition=" + this.endPosition + ", startTime=" + this.startTime + ", endTime=" + this.endTime + "]";
196     }
197 
198 }