View Javadoc
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   * <p>
53   * Copyright (c) 2013-2016 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
54   * BSD-style license. See <a href="http://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
55   * <p>
56   * $LastChangedDate: 2015-09-14 01:33:02 +0200 (Mon, 14 Sep 2015) $, @version $Revision: 1401 $, by $Author: averbraeck $,
57   * initial version Oct 17, 2014 <br>
58   * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
59   */
60  public class TestXMLParserXStream extends AbstractWrappableAnimation
61  {
62      /** */
63      private static final long serialVersionUID = 1L;
64  
65      /**
66       * Main program.
67       * @param args String[]; the command line arguments (not used)
68       * @throws SimRuntimeException should never happen
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                      // 1 hour simulation run for testing
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      /** {@inheritDoc} */
93      @Override
94      public final String shortName()
95      {
96          return "TestXMLModel";
97      }
98  
99      /** {@inheritDoc} */
100     @Override
101     public final String description()
102     {
103         return "TestXMLModel";
104     }
105 
106     /** {@inheritDoc} */
107     @Override
108     public final void stopTimersThreads()
109     {
110         super.stopTimersThreads();
111     }
112 
113     /** {@inheritDoc} */
114     @Override
115     protected final JPanel makeCharts()
116     {
117         return null;
118     }
119 
120     /** {@inheritDoc} */
121     @Override
122     protected final OTSModelInterface makeModel(final GTUColorer colorer)
123     {
124         return new TestXMLModel();
125     }
126 
127     /** {@inheritDoc} */
128     @Override
129     protected final Double makeAnimationRectangle()
130     {
131         return new Rectangle2D.Double(-1000, -1000, 2000, 2000);
132     }
133 
134     /** {@inheritDoc} */
135     @Override
136     public final String toString()
137     {
138         return "TestXMLParserXStream []";
139     }
140 
141     /**
142      * Model to test the XML parser.
143      * <p>
144      * Copyright (c) 2013-2016 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. <br>
145      * All rights reserved. BSD-style license. See <a href="http://opentrafficsim.org/docs/license.html">OpenTrafficSim
146      * License</a>.
147      * <p>
148      * $LastChangedDate: 2015-09-14 01:33:02 +0200 (Mon, 14 Sep 2015) $, @version $Revision: 1401 $, by $Author: averbraeck $,
149      * initial version un 27, 2015 <br>
150      * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
151      * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
152      */
153     class TestXMLModel implements OTSModelInterface
154     {
155         /** */
156         private static final long serialVersionUID = 20141121L;
157 
158         /** The simulator. */
159         private OTSDEVSSimulatorInterface simulator;
160 
161         /** {@inheritDoc} */
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             // URL url = URLResource.getResource("/PNH1.xml");
169             // URL url = URLResource.getResource("/offset-example.xml");
170             // URL url = URLResource.getResource("/circular-road-new-gtu-example.xml");
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         /** {@inheritDoc} */
225         @Override
226         public SimulatorInterface<DoubleScalar.Abs<TimeUnit>, DoubleScalar.Rel<TimeUnit>, OTSSimTimeDouble> getSimulator()
227 
228         {
229             return this.simulator;
230         }
231 
232         /** {@inheritDoc} */
233         @Override
234         public final String toString()
235         {
236             return "TestXMLModel [simulator=" + this.simulator + "]";
237         }
238 
239     }
240 
241 }