View Javadoc
1   package org.opentrafficsim.road.network.factory.vissim;
2   
3   import java.io.Serializable;
4   
5   import org.opentrafficsim.core.network.NetworkException;
6   import org.w3c.dom.NamedNodeMap;
7   import org.w3c.dom.Node;
8   import org.w3c.dom.NodeList;
9   import org.xml.sax.SAXException;
10  
11  /**
12   * <p>
13   * Copyright (c) 2013-2019 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
14   * BSD-style license. See <a href="http://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
15   * <p>
16   * $LastChangedDate: 2019-01-06 01:39:32 +0100 (Sun, 06 Jan 2019) $, @version $Revision: 4833 $, by $Author: averbraeck $,
17   * initial version Jul 23, 2015 <br>
18   * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
19   */
20  class SignalHeadTag implements Serializable
21  {
22      /** */
23      private static final long serialVersionUID = 20150723L;
24  
25      /** No, cannot be null in implementation of signal head. */
26      @SuppressWarnings("checkstyle:visibilitymodifier")
27      String no = "";
28  
29      /** No, cannot be null in implementation of signal head. */
30      @SuppressWarnings("checkstyle:visibilitymodifier")
31      String sg = "";
32  
33      /** is the signalHead really located on this link? */
34      Boolean activeOnThisLink = true;
35  
36      /**
37       * Position of the signalHead on the link, relative to the design line, stored as a string to parse when the length is
38       * known.
39       */
40      @SuppressWarnings("checkstyle:visibilitymodifier")
41      String positionStr = null;
42  
43      /**
44       * Position of the signalHead on the link, relative to the design line, stored as a string to parse when the length is
45       * known.
46       */
47      @SuppressWarnings("checkstyle:visibilitymodifier")
48      String signalGroup = null;
49  
50      /** Class name of the TrafficLight. */
51      @SuppressWarnings("checkstyle:visibilitymodifier")
52      String className = null;
53  
54      String linkName;
55  
56      String laneName;
57  
58      /**
59       * @param signalHeadTag SignalHeadTag;
60       */
61      public SignalHeadTag(SignalHeadTag signalHeadTag)
62      {
63          this.no = signalHeadTag.no;
64          this.sg = signalHeadTag.sg;
65          this.activeOnThisLink = signalHeadTag.activeOnThisLink;
66          this.positionStr = signalHeadTag.positionStr;
67          this.signalGroup = signalHeadTag.signalGroup;
68          this.className = signalHeadTag.className;
69          this.linkName = signalHeadTag.linkName;
70          this.laneName = signalHeadTag.laneName;
71      }
72  
73      /**
74       *
75       */
76      public SignalHeadTag()
77      {
78          // TODO Auto-generated constructor stub
79      }
80  
81      /**
82       * Parse the TRAFFICLIGHT tag.
83       * @param nodeList NodeList; the SignalHead nodes to parse
84       * @param parser VissimNetworkLaneParser; the parser with the lists of information
85       * @throws SAXException when parsing of the tag fails
86       * @throws NetworkException when parsing of the tag fails
87       */
88      @SuppressWarnings("checkstyle:needbraces")
89      static void parseSignalHead(final NodeList nodeList, final VissimNetworkLaneParser parser)
90              throws SAXException, NetworkException
91      {
92          for (Node linksNode : XMLParser.getNodes(nodeList, "signalHeads"))
93          {
94  
95              for (Node node : XMLParser.getNodes(linksNode.getChildNodes(), "signalHead"))
96              {
97                  NamedNodeMap attributes = node.getAttributes();
98                  // make a link with its attributes
99                  SignalHeadTag signalHeadTag = new SignalHeadTag();
100 
101                 if (attributes.getNamedItem("lane") == null)
102                 {
103                     throw new SAXException("SignalHead: missing attribute: lane");
104                 }
105                 String laneLink = attributes.getNamedItem("lane").getNodeValue().trim();
106                 String[] laneLinkInfo = laneLink.split("\\s+");
107                 signalHeadTag.linkName = laneLinkInfo[0];
108                 signalHeadTag.laneName = laneLinkInfo[1];
109 
110                 if (attributes.getNamedItem("no") == null)
111                 {
112                     throw new SAXException("SignalHead: missing attribute: no");
113                 }
114                 signalHeadTag.no = attributes.getNamedItem("no").getNodeValue().trim();
115 
116                 if (attributes.getNamedItem("pos") == null)
117                 {
118                     throw new SAXException("SignalHead: missing attribute: pos");
119                 }
120                 signalHeadTag.positionStr = attributes.getNamedItem("pos").getNodeValue().trim();
121 
122                 if (attributes.getNamedItem("sg") == null)
123                 {
124                     throw new SAXException("SignalHead: missing attribute: sg");
125                 }
126                 signalHeadTag.signalGroup = attributes.getNamedItem("sg").getNodeValue().trim();
127 
128                 parser.getSignalHeadTags().put(signalHeadTag.no, signalHeadTag);
129 
130             }
131         }
132 
133     }
134 
135     /** {@inheritDoc} */
136     @Override
137     public final String toString()
138     {
139         return "TrafficLightTag [name=" + this.no + ", positionStr=" + this.positionStr + ", className=" + this.className + "]";
140     }
141 
142 }