1 package org.opentrafficsim.road.network.sampling.data;
2
3 import java.util.Iterator;
4
5 import org.opentrafficsim.kpi.sampling.data.ExtendedDataTypeString;
6 import org.opentrafficsim.road.gtu.lane.LaneBasedGTU;
7 import org.opentrafficsim.road.gtu.lane.perception.RelativeLane;
8 import org.opentrafficsim.road.gtu.lane.perception.categories.neighbors.NeighborsPerception;
9 import org.opentrafficsim.road.network.sampling.GtuData;
10
11
12
13
14
15
16
17
18
19
20
21
22 public class LeaderId extends ExtendedDataTypeString<GtuData>
23 {
24
25
26
27
28 public LeaderId()
29 {
30 super("leaderId");
31 }
32
33
34 @Override
35 public String getValue(final GtuData gtu)
36 {
37 NeighborsPerception neigbors =
38 gtu.getGtu().getTacticalPlanner().getPerception().getPerceptionCategoryOrNull(NeighborsPerception.class);
39 if (neigbors == null)
40 {
41 throw new RuntimeException("Leader id can only be stored in trajectories if the GTU's have NeighborsPerception.");
42 }
43 Iterator<LaneBasedGTU> it = neigbors.getLeaders(RelativeLane.CURRENT).underlying();
44 return it.hasNext() ? it.next().getId() : "";
45 }
46
47 }