1 package org.opentrafficsim.road.test;
2
3 import java.awt.Dimension;
4 import java.awt.Frame;
5 import java.awt.geom.Rectangle2D;
6 import java.awt.geom.Rectangle2D.Double;
7 import java.io.IOException;
8 import java.net.URL;
9 import java.nio.file.Files;
10 import java.nio.file.Paths;
11 import java.rmi.RemoteException;
12 import java.util.ArrayList;
13
14 import javax.naming.NamingException;
15 import javax.swing.JPanel;
16 import javax.swing.SwingUtilities;
17 import javax.swing.WindowConstants;
18 import javax.xml.parsers.ParserConfigurationException;
19
20 import org.djunits.unit.TimeUnit;
21 import org.djunits.value.vdouble.scalar.DoubleScalar;
22 import org.djunits.value.vdouble.scalar.Duration;
23 import org.djunits.value.vdouble.scalar.Time;
24 import org.opentrafficsim.core.dsol.OTSDEVSSimulatorInterface;
25 import org.opentrafficsim.core.dsol.OTSModelInterface;
26 import org.opentrafficsim.core.dsol.OTSSimTimeDouble;
27 import org.opentrafficsim.core.geometry.OTSGeometryException;
28 import org.opentrafficsim.core.gtu.GTUException;
29 import org.opentrafficsim.core.gtu.animation.DefaultSwitchableGTUColorer;
30 import org.opentrafficsim.core.gtu.animation.GTUColorer;
31 import org.opentrafficsim.core.network.NetworkException;
32 import org.opentrafficsim.core.network.OTSNetwork;
33 import org.opentrafficsim.gui.OTSAnimationPanel;
34 import org.opentrafficsim.gui.SimulatorFrame;
35 import org.opentrafficsim.road.network.factory.OTSNetworkUtils;
36 import org.opentrafficsim.road.network.factory.xml.XmlNetworkLaneParser;
37 import org.opentrafficsim.simulationengine.AbstractWrappableAnimation;
38 import org.opentrafficsim.simulationengine.OTSSimulationException;
39 import org.opentrafficsim.simulationengine.SimpleAnimator;
40 import org.opentrafficsim.simulationengine.WrappableAnimation;
41 import org.opentrafficsim.simulationengine.properties.AbstractProperty;
42 import org.opentrafficsim.simulationengine.properties.PropertyException;
43 import org.xml.sax.SAXException;
44
45 import com.thoughtworks.xstream.XStream;
46
47 import nl.tudelft.simulation.dsol.SimRuntimeException;
48 import nl.tudelft.simulation.dsol.simulators.SimulatorInterface;
49 import nl.tudelft.simulation.language.io.URLResource;
50
51
52
53
54
55
56
57
58
59
60 public class TestXMLParserXStream extends AbstractWrappableAnimation
61 {
62
63 private static final long serialVersionUID = 1L;
64
65
66
67
68
69
70 public static void main(final String[] args) throws SimRuntimeException
71 {
72 SwingUtilities.invokeLater(new Runnable()
73 {
74 @Override
75 public void run()
76 {
77 try
78 {
79 TestXMLParserXStream xmlModel = new TestXMLParserXStream();
80
81 xmlModel.buildAnimator(new Time(0.0, TimeUnit.SECOND), new Duration(0.0, TimeUnit.SECOND),
82 new Duration(60.0, TimeUnit.MINUTE), new ArrayList<AbstractProperty<?>>(), null, true);
83 }
84 catch (SimRuntimeException | NamingException | OTSSimulationException | PropertyException exception)
85 {
86 exception.printStackTrace();
87 }
88 }
89 });
90 }
91
92
93 @Override
94 public final String shortName()
95 {
96 return "TestXMLModel";
97 }
98
99
100 @Override
101 public final String description()
102 {
103 return "TestXMLModel";
104 }
105
106
107 @Override
108 public final void stopTimersThreads()
109 {
110 super.stopTimersThreads();
111 }
112
113
114 @Override
115 protected final JPanel makeCharts()
116 {
117 return null;
118 }
119
120
121 @Override
122 protected final OTSModelInterface makeModel(final GTUColorer colorer)
123 {
124 return new TestXMLModel();
125 }
126
127
128 @Override
129 protected final Double makeAnimationRectangle()
130 {
131 return new Rectangle2D.Double(-1000, -1000, 2000, 2000);
132 }
133
134
135 @Override
136 public final String toString()
137 {
138 return "TestXMLParserXStream []";
139 }
140
141
142
143
144
145
146
147
148
149
150
151
152
153 class TestXMLModel implements OTSModelInterface
154 {
155
156 private static final long serialVersionUID = 20141121L;
157
158
159 private OTSDEVSSimulatorInterface simulator;
160
161
162 @Override
163 public final void constructModel(
164 final SimulatorInterface<DoubleScalar.Abs<TimeUnit>, DoubleScalar.Rel<TimeUnit>, OTSSimTimeDouble> pSimulator)
165 throws SimRuntimeException
166 {
167 this.simulator = (OTSDEVSSimulatorInterface) pSimulator;
168
169
170
171 URL url = URLResource.getResource("/straight-road-new-gtu-example_2.xml");
172 XmlNetworkLaneParser nlp = new XmlNetworkLaneParser(this.simulator);
173 try
174 {
175 OTSNetwork network = nlp.build(url);
176
177 System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
178 System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
179 System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
180 System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
181 System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
182 System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
183 String xml = OTSNetworkUtils.toXml(network);
184
185 Files.write(Paths.get("e://temp/network.txt"), xml.getBytes());
186
187 this.simulator = makeNewAnimator();
188
189 XStream xstream = new XStream();
190 network = (OTSNetwork) xstream.fromXML(xml);
191 }
192 catch (NetworkException | ParserConfigurationException | SAXException | IOException | NamingException | GTUException
193 | OTSGeometryException | PropertyException exception)
194 {
195 exception.printStackTrace();
196 }
197 }
198
199 private SimpleAnimator makeNewAnimator() throws PropertyException, SimRuntimeException, NamingException
200 {
201 final SimpleAnimator animator = new SimpleAnimator(new Time(0.0, TimeUnit.SECOND),
202 new Duration(0.0, TimeUnit.SECOND), new Duration(60.0, TimeUnit.MINUTE), this);
203 try
204 {
205 TestXMLParserXStream.this.panel = new OTSAnimationPanel(makeAnimationRectangle(), new Dimension(1024, 768), animator,
206 TestXMLParserXStream.this, new DefaultSwitchableGTUColorer());
207 }
208 catch (RemoteException exception)
209 {
210 throw new SimRuntimeException(exception);
211 }
212 JPanel charts = makeCharts();
213 if (null != charts)
214 {
215 TestXMLParserXStream.this.panel.getTabbedPane().addTab("statistics", charts);
216 }
217
218 SimulatorFrame frame = new SimulatorFrame(shortName(), TestXMLParserXStream.this.panel);
219 frame.setExtendedState(Frame.MAXIMIZED_BOTH);
220 frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
221 return animator;
222 }
223
224
225 @Override
226 public SimulatorInterface<DoubleScalar.Abs<TimeUnit>, DoubleScalar.Rel<TimeUnit>, OTSSimTimeDouble> getSimulator()
227
228 {
229 return this.simulator;
230 }
231
232
233 @Override
234 public final String toString()
235 {
236 return "TestXMLModel [simulator=" + this.simulator + "]";
237 }
238
239 }
240
241 }