1   package org.opentrafficsim.road.gtu.strategical.route;
2   
3   import java.io.Serializable;
4   
5   import org.opentrafficsim.base.parameters.Parameters;
6   import org.opentrafficsim.core.gtu.GTUException;
7   import org.opentrafficsim.core.gtu.behavioralcharacteristics.ParameterFactory;
8   import org.opentrafficsim.core.network.Node;
9   import org.opentrafficsim.core.network.route.Route;
10  import org.opentrafficsim.road.gtu.lane.LaneBasedGTU;
11  import org.opentrafficsim.road.gtu.lane.tactical.LaneBasedTacticalPlanner;
12  import org.opentrafficsim.road.gtu.lane.tactical.LaneBasedTacticalPlannerFactory;
13  import org.opentrafficsim.road.gtu.strategical.AbstractLaneBasedStrategicalPlannerFactory;
14  import org.opentrafficsim.road.gtu.strategical.LaneBasedStrategicalPlanner;
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  public class LaneBasedStrategicalRoutePlannerFactory
28          extends AbstractLaneBasedStrategicalPlannerFactory<LaneBasedStrategicalPlanner> implements Serializable
29  {
30  
31      
32      private static final long serialVersionUID = 20160811L;
33  
34      
35      private final RouteGeneratorOD routeGenerator;
36  
37      
38  
39  
40  
41  
42      public LaneBasedStrategicalRoutePlannerFactory(
43              final LaneBasedTacticalPlannerFactory<? extends LaneBasedTacticalPlanner> tacticalPlannerFactory)
44      {
45          super(tacticalPlannerFactory);
46          this.routeGenerator = null;
47      }
48  
49      
50  
51  
52  
53  
54  
55      public LaneBasedStrategicalRoutePlannerFactory(
56              final LaneBasedTacticalPlannerFactory<? extends LaneBasedTacticalPlanner> tacticalPlannerFactory,
57              final RouteGeneratorOD routeGenerator)
58      {
59          super(tacticalPlannerFactory);
60          this.routeGenerator = routeGenerator;
61      }
62  
63      
64  
65  
66  
67  
68  
69      public LaneBasedStrategicalRoutePlannerFactory(
70              final LaneBasedTacticalPlannerFactory<? extends LaneBasedTacticalPlanner> tacticalPlannerFactory,
71              final ParameterFactory parametersFactory)
72      {
73          super(tacticalPlannerFactory, parametersFactory);
74          this.routeGenerator = null;
75      }
76  
77      
78  
79  
80  
81  
82  
83  
84      public LaneBasedStrategicalRoutePlannerFactory(
85              final LaneBasedTacticalPlannerFactory<? extends LaneBasedTacticalPlanner> tacticalPlannerFactory,
86              final ParameterFactory parametersFactory, final RouteGeneratorOD routeGenerator)
87      {
88          super(tacticalPlannerFactory, parametersFactory);
89          this.routeGenerator = routeGenerator;
90      }
91  
92      
93      @Override
94      public final LaneBasedStrategicalPlanner create(final LaneBasedGTU gtu, final Route route, final Node origin,
95              final Node destination) throws GTUException
96      {
97          LaneBasedStrategicalRoutePlanner strategicalPlanner;
98          if (this.routeGenerator == null)
99          {
100             strategicalPlanner =
101                     new LaneBasedStrategicalRoutePlanner(nextTacticalPlanner(gtu), route, gtu, origin, destination);
102         }
103         else
104         {
105             strategicalPlanner = new LaneBasedStrategicalRoutePlanner(nextTacticalPlanner(gtu), route, gtu, origin, destination,
106                     this.routeGenerator);
107         }
108         gtu.setParameters(nextParameters(gtu.getGTUType()));
109         return strategicalPlanner;
110     }
111 
112     
113     @Override
114     protected Parameters getParameters()
115     {
116         
117         return null;
118     }
119 
120     
121     @Override
122     public final String toString()
123     {
124         return "LaneBasedStrategicalRoutePlannerFactory [tacticalPlannerFactory=" + getTacticalPlannerFactory() + "]";
125     }
126 
127 }