1 package org.opentrafficsim.road.network;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import org.djutils.immutablecollections.Immutable;
7 import org.djutils.immutablecollections.ImmutableHashMap;
8 import org.djutils.immutablecollections.ImmutableMap;
9 import org.opentrafficsim.core.compatibility.GTUCompatibility;
10 import org.opentrafficsim.core.gtu.GTUType;
11 import org.opentrafficsim.core.network.LongitudinalDirectionality;
12 import org.opentrafficsim.core.network.OTSNetwork;
13 import org.opentrafficsim.road.network.lane.LaneType;
14
15
16
17
18
19
20
21
22
23 public class OTSRoadNetwork extends OTSNetwork implements RoadNetwork
24 {
25
26 private static final long serialVersionUID = 1L;
27
28
29 private Map<String, LaneType> laneTypeMap = new HashMap<>();
30
31
32
33
34
35
36 public OTSRoadNetwork(final String id, final boolean addDefaultTypes)
37 {
38 super(id, addDefaultTypes);
39 if (addDefaultTypes)
40 {
41 addDefaultLaneTypes();
42 }
43 }
44
45
46 @Override
47 public void addDefaultLaneTypes()
48 {
49 GTUCompatibility<LaneType> noTrafficCompatibility = new GTUCompatibility<>((LaneType) null);
50 new LaneType("NONE", noTrafficCompatibility, this);
51 GTUCompatibility<LaneType> roadCompatibility = new GTUCompatibility<>((LaneType) null);
52 roadCompatibility.addAllowedGTUType(getGtuType(GTUType.DEFAULTS.ROAD_USER), LongitudinalDirectionality.DIR_BOTH);
53 LaneType twoWayLane = new LaneType("TWO_WAY_LANE", roadCompatibility, this);
54 new LaneType("RURAL_ROAD", twoWayLane, new GTUCompatibility<>(roadCompatibility), this);
55 new LaneType("URBAN_ROAD", twoWayLane, new GTUCompatibility<>(roadCompatibility), this);
56 new LaneType("RESIDENTIAL_ROAD", twoWayLane, new GTUCompatibility<>(roadCompatibility), this);
57 GTUCompatibility<LaneType> oneWayLaneCompatibility = new GTUCompatibility<>(roadCompatibility);
58 oneWayLaneCompatibility.addAllowedGTUType(getGtuType(GTUType.DEFAULTS.ROAD_USER), LongitudinalDirectionality.DIR_PLUS);
59 oneWayLaneCompatibility.addAllowedGTUType(getGtuType(GTUType.DEFAULTS.PEDESTRIAN), LongitudinalDirectionality.DIR_BOTH);
60 new LaneType("ONE_WAY_LANE", oneWayLaneCompatibility, this);
61 GTUCompatibility<LaneType> highwayLaneCompatibility = new GTUCompatibility<>(oneWayLaneCompatibility)
62 .addAllowedGTUType(getGtuType(GTUType.DEFAULTS.PEDESTRIAN), LongitudinalDirectionality.DIR_NONE);
63 new LaneType("FREEWAY", highwayLaneCompatibility, this);
64 new LaneType("HIGHWAY", highwayLaneCompatibility, this);
65 GTUCompatibility<LaneType> busLaneCompatibility = new GTUCompatibility<>(roadCompatibility);
66 busLaneCompatibility.addAllowedGTUType(getGtuType(GTUType.DEFAULTS.BUS), LongitudinalDirectionality.DIR_BOTH);
67 busLaneCompatibility.addAllowedGTUType(getGtuType(GTUType.DEFAULTS.ROAD_USER), LongitudinalDirectionality.DIR_NONE);
68 new LaneType("BUS_LANE", busLaneCompatibility, this);
69 GTUCompatibility<LaneType> mopedAndBicycleLaneCompatibility = new GTUCompatibility<>(roadCompatibility);
70 mopedAndBicycleLaneCompatibility.addAllowedGTUType(getGtuType(GTUType.DEFAULTS.BICYCLE),
71 LongitudinalDirectionality.DIR_BOTH);
72 mopedAndBicycleLaneCompatibility.addAllowedGTUType(getGtuType(GTUType.DEFAULTS.ROAD_USER),
73 LongitudinalDirectionality.DIR_NONE);
74 new LaneType("MOPED_PATH", mopedAndBicycleLaneCompatibility, this);
75 GTUCompatibility<LaneType> bicycleOnlyCompatibility = new GTUCompatibility<>(mopedAndBicycleLaneCompatibility);
76 bicycleOnlyCompatibility.addAllowedGTUType(getGtuType(GTUType.DEFAULTS.MOPED), LongitudinalDirectionality.DIR_NONE);
77 new LaneType("BICYCLE_PATH", bicycleOnlyCompatibility, this);
78 GTUCompatibility<LaneType> pedestriansOnly = new GTUCompatibility<>(roadCompatibility);
79 pedestriansOnly.addAllowedGTUType(getGtuType(GTUType.DEFAULTS.ROAD_USER), LongitudinalDirectionality.DIR_NONE);
80 new LaneType("FOOTPATH", pedestriansOnly, this);
81 }
82
83
84 @Override
85 public void addLaneType(final LaneType laneType)
86 {
87 this.laneTypeMap.put(laneType.getId(), laneType);
88 }
89
90
91 @Override
92 public LaneType getLaneType(final String laneTypeId)
93 {
94 return this.laneTypeMap.get(laneTypeId);
95 }
96
97
98 @Override
99 public LaneType getLaneType(final LaneType.DEFAULTS laneTypeEnum)
100 {
101 return this.laneTypeMap.get(laneTypeEnum.getId());
102 }
103
104
105 @Override
106 public ImmutableMap<String, LaneType> getLaneTypes()
107 {
108 return new ImmutableHashMap<>(this.laneTypeMap, Immutable.WRAP);
109 }
110
111 }