View Javadoc
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   * Simulation runner for when running from editor.
28   * <p>
29   * Copyright (c) 2013-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
30   * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
31   * </p>
32   * @author <a href="https://github.com/wjschakel">Wouter Schakel</a>
33   */
34  public class OtsRunner extends OtsSimulationApplication<OtsRunnerModel>
35  {
36      /** */
37      private static final long serialVersionUID = 20231012;
38  
39      /**
40       * Run a simulation.
41       * @param panel the tabbed panel to display
42       * @param model the model
43       */
44      public OtsRunner(final OtsAnimationPanel panel, final OtsRunnerModel model)
45      {
46          // TODO: colorer and markers based on user specification
47          super(model, panel, Collections.emptyMap());
48      }
49  
50      /**
51       * Run single run from a file.
52       * @param file XML file.
53       * @param scenario scenario, may be {@code null}.
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       * The simulation model.
83       */
84      public static class OtsRunnerModel extends AbstractOtsModel
85      {
86          /** */
87          private static final long serialVersionUID = 20231012L;
88  
89          /** File. */
90          private File file;
91  
92          /** Scenario. */
93          private String scenario;
94  
95          /** The network. */
96          private RoadNetwork network;
97  
98          /**
99           * Constructor.
100          * @param simulator simulator.
101          * @param file XML file.
102          * @param scenario scenario, may be {@code null}.
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 }