1 package org.opentrafficsim.editor;
2
3 import java.awt.Dimension;
4 import java.io.File;
5 import java.rmi.RemoteException;
6 import java.util.Collections;
7
8 import javax.naming.NamingException;
9
10 import org.djunits.value.vdouble.scalar.Duration;
11 import org.djunits.value.vdouble.scalar.Time;
12 import org.opentrafficsim.core.dsol.AbstractOtsModel;
13 import org.opentrafficsim.core.dsol.OtsAnimator;
14 import org.opentrafficsim.core.dsol.OtsSimulatorInterface;
15 import org.opentrafficsim.core.perception.HistoryManagerDevs;
16 import org.opentrafficsim.editor.OtsRunner.OtsRunnerModel;
17 import org.opentrafficsim.road.network.RoadNetwork;
18 import org.opentrafficsim.road.network.factory.xml.parser.XmlParser;
19 import org.opentrafficsim.swing.gui.AnimationToggles;
20 import org.opentrafficsim.swing.gui.OtsAnimationPanel;
21 import org.opentrafficsim.swing.gui.OtsSimulationApplication;
22
23 import nl.tudelft.simulation.dsol.SimRuntimeException;
24 import nl.tudelft.simulation.language.DsolException;
25
26
27
28
29
30
31
32
33
34 public class OtsRunner extends OtsSimulationApplication<OtsRunnerModel>
35 {
36
37 private static final long serialVersionUID = 20231012;
38
39
40
41
42
43
44 public OtsRunner(final OtsAnimationPanel panel, final OtsRunnerModel model)
45 {
46
47 super(model, panel, Collections.emptyMap());
48 }
49
50
51
52
53
54
55 public static void runSingle(final File file, final String scenario)
56 {
57 try
58 {
59 OtsAnimator simulator = new OtsAnimator("EditorRun");
60 final OtsRunnerModel runnerModel = new OtsRunnerModel(simulator, file, scenario);
61 simulator.initialize(Time.ZERO, Duration.ZERO, Duration.instantiateSI(3600.0), runnerModel,
62 new HistoryManagerDevs(simulator, Duration.instantiateSI(5.0), Duration.instantiateSI(10.0)));
63 OtsAnimationPanel animationPanel = new OtsAnimationPanel(runnerModel.getNetwork().getExtent(),
64 new Dimension(800, 600), simulator, runnerModel, DEFAULT_GTU_COLORERS, runnerModel.getNetwork());
65 OtsRunner app = new OtsRunner(animationPanel, runnerModel);
66 app.setExitOnClose(false);
67 animationPanel.enableSimulationControlButtons();
68 }
69 catch (SimRuntimeException | NamingException | RemoteException | DsolException exception)
70 {
71 exception.printStackTrace();
72 }
73 }
74
75 @Override
76 protected void setAnimationToggles()
77 {
78 AnimationToggles.setIconAnimationTogglesStandard(getAnimationPanel());
79 }
80
81
82
83
84 public static class OtsRunnerModel extends AbstractOtsModel
85 {
86
87 private static final long serialVersionUID = 20231012L;
88
89
90 private File file;
91
92
93 private String scenario;
94
95
96 private RoadNetwork network;
97
98
99
100
101
102
103
104 public OtsRunnerModel(final OtsSimulatorInterface simulator, final File file, final String scenario)
105 {
106 super(simulator);
107 this.file = file;
108 this.scenario = scenario;
109 }
110
111 @Override
112 public void constructModel() throws SimRuntimeException
113 {
114 try
115 {
116 this.network = new RoadNetwork("EditorNetwork", getSimulator());
117 XmlParser parser = new XmlParser(this.network).setUrl(this.file.toURI().toURL());
118 if (this.scenario != null)
119 {
120 parser.setScenario(this.scenario);
121 }
122 parser.build();
123 }
124 catch (Exception exception)
125 {
126 exception.printStackTrace();
127 }
128 }
129
130 @Override
131 public RoadNetwork getNetwork()
132 {
133 return this.network;
134 }
135
136 }
137 }