1 package org.opentrafficsim.road.test;
2
3 import java.awt.geom.Rectangle2D;
4 import java.awt.geom.Rectangle2D.Double;
5 import java.io.IOException;
6 import java.net.URL;
7 import java.util.ArrayList;
8
9 import javax.naming.NamingException;
10 import javax.swing.JPanel;
11 import javax.swing.SwingUtilities;
12 import javax.xml.parsers.ParserConfigurationException;
13
14 import nl.tudelft.simulation.dsol.SimRuntimeException;
15 import nl.tudelft.simulation.dsol.simulators.SimulatorInterface;
16 import nl.tudelft.simulation.language.io.URLResource;
17
18 import org.djunits.unit.TimeUnit;
19 import org.djunits.value.vdouble.scalar.DoubleScalar;
20 import org.djunits.value.vdouble.scalar.Time;
21 import org.opentrafficsim.core.dsol.OTSDEVSSimulatorInterface;
22 import org.opentrafficsim.core.dsol.OTSModelInterface;
23 import org.opentrafficsim.core.dsol.OTSSimTimeDouble;
24 import org.opentrafficsim.core.geometry.OTSGeometryException;
25 import org.opentrafficsim.core.gtu.GTUException;
26 import org.opentrafficsim.core.gtu.animation.GTUColorer;
27 import org.opentrafficsim.core.network.NetworkException;
28 import org.opentrafficsim.road.network.factory.xml.XmlNetworkLaneParser;
29 import org.opentrafficsim.simulationengine.AbstractWrappableAnimation;
30 import org.opentrafficsim.simulationengine.OTSSimulationException;
31 import org.opentrafficsim.simulationengine.properties.AbstractProperty;
32 import org.xml.sax.SAXException;
33
34
35
36
37
38
39
40
41
42
43 public class TestLaneDirections extends AbstractWrappableAnimation
44 {
45
46
47
48
49
50 public static void main(final String[] args) throws SimRuntimeException
51 {
52 SwingUtilities.invokeLater(new Runnable()
53 {
54 @Override
55 public void run()
56 {
57 try
58 {
59 TestLaneDirections xmlModel = new TestLaneDirections();
60
61 xmlModel.buildAnimator(new Time.Abs(0.0, TimeUnit.SECOND), new Time.Rel(0.0, TimeUnit.SECOND),
62 new Time.Rel(60.0, TimeUnit.MINUTE), new ArrayList<AbstractProperty<?>>(), null, true);
63 }
64 catch (SimRuntimeException | NamingException | OTSSimulationException exception)
65 {
66 exception.printStackTrace();
67 }
68 }
69 });
70 }
71
72
73 @Override
74 public final String shortName()
75 {
76 return "TestXMLModel";
77 }
78
79
80 @Override
81 public final String description()
82 {
83 return "TestXMLModel";
84 }
85
86
87 @Override
88 public final void stopTimersThreads()
89 {
90 super.stopTimersThreads();
91 }
92
93
94 @Override
95 protected final JPanel makeCharts()
96 {
97 return null;
98 }
99
100
101 @Override
102 protected final OTSModelInterface makeModel(final GTUColorer colorer)
103 {
104 return new TestXMLModel();
105 }
106
107
108 @Override
109 protected final Double makeAnimationRectangle()
110 {
111 return new Rectangle2D.Double(-50, 0, 400, 200);
112 }
113
114
115
116
117
118
119
120
121
122
123
124
125
126 class TestXMLModel implements OTSModelInterface
127 {
128
129 private static final long serialVersionUID = 20141121L;
130
131
132 private OTSDEVSSimulatorInterface simulator;
133
134
135 @Override
136 public final
137 void
138 constructModel(
139 final SimulatorInterface<DoubleScalar.Abs<TimeUnit>, DoubleScalar.Rel<TimeUnit>, OTSSimTimeDouble> pSimulator)
140 throws SimRuntimeException
141 {
142 this.simulator = (OTSDEVSSimulatorInterface) pSimulator;
143 URL url = URLResource.getResource("/lanedirection.xml");
144 XmlNetworkLaneParser nlp = new XmlNetworkLaneParser(this.simulator);
145 try
146 {
147 nlp.build(url);
148 }
149 catch (NetworkException | ParserConfigurationException | SAXException | IOException | NamingException
150 | GTUException | OTSGeometryException exception)
151 {
152 exception.printStackTrace();
153 }
154 }
155
156
157 @Override
158 public SimulatorInterface<DoubleScalar.Abs<TimeUnit>, DoubleScalar.Rel<TimeUnit>, OTSSimTimeDouble>
159 getSimulator()
160
161 {
162 return this.simulator;
163 }
164
165 }
166
167 }