21 package org.matsim.core.network.io;
33 import java.io.BufferedWriter;
34 import java.io.IOException;
40 class NetworkWriterHandlerImplV2
implements NetworkWriterHandler {
41 private final CoordinateTransformation transformation;
42 private final AttributesXmlWriterDelegate attributesWriter =
new AttributesXmlWriterDelegate();
44 NetworkWriterHandlerImplV2(CoordinateTransformation transformation) {
45 this.transformation = transformation;
48 public void putAttributeConverters(
final Map<Class<?>, AttributeConverter<?>> converters) {
49 attributesWriter.putAttributeConverters(converters);
63 public void startNetwork(
final Network network,
final BufferedWriter out)
throws IOException {
64 out.write(
"<network");
65 if (network.getName() != null) {
66 out.write(
" name=\"" + encodeAttributeValue(network.getName()) +
"\"");
70 attributesWriter.writeAttributes(
"\t" , out , network.getAttributes() );
74 public void endNetwork(
final BufferedWriter out)
throws IOException {
75 out.write(
"</network>\n");
83 public void startNodes(
final Network network,
final BufferedWriter out)
throws IOException {
84 out.write(
"\t<nodes>\n");
88 public void endNodes(
final BufferedWriter out)
throws IOException {
89 out.write(
"\t</nodes>\n\n");
97 public void startLinks(
final Network network,
final BufferedWriter out)
throws IOException {
98 out.write(
"\t<links");
99 if (network.getCapacityPeriod() != Integer.MIN_VALUE) {
100 out.write(
" capperiod=\"" + Time.writeTime(network.getCapacityPeriod()) +
"\"");
103 out.write(
" effectivecellsize=\"" + network.getEffectiveCellSize() +
"\"");
104 out.write(
" effectivelanewidth=\"" + network.getEffectiveLaneWidth() +
"\"");
110 public void endLinks(
final BufferedWriter out)
throws IOException {
111 out.write(
"\t</links>\n\n");
119 public void startNode(
final Node node,
final BufferedWriter out)
throws IOException {
120 out.write(
"\t\t<node");
121 out.write(
" id=\"" + encodeAttributeValue(node.getId().toString()) +
"\"");
122 final Coord coord = transformation.transform( node.getCoord() );
123 out.write(
" x=\"" + coord.getX() +
"\"");
124 out.write(
" y=\"" + coord.getY() +
"\"");
125 if ( coord.hasZ() ) out.write(
" z=\"" + coord.getZ() +
"\"");
126 if (NetworkUtils.getType( node ) != null) {
127 out.write(
" type=\"" + encodeAttributeValue(NetworkUtils.getType(node)) +
"\"");
129 if (NetworkUtils.getOrigId( node ) != null) {
130 out.write(
" origid=\"" + encodeAttributeValue(NetworkUtils.getOrigId(node)) +
"\"");
134 attributesWriter.writeAttributes(
"\t\t\t" , out , node.getAttributes() );
138 public void endNode(
final BufferedWriter out)
throws IOException {
139 out.write(
"\t\t</node>\n");
146 private Set<String> lastSet = null;
147 private String lastModes = null;
150 public void startLink(
final Link link,
final BufferedWriter out)
throws IOException {
151 out.write(
"\t\t<link");
152 out.write(
" id=\"" + encodeAttributeValue(link.getId().toString()) +
"\"");
153 out.write(
" from=\"" + encodeAttributeValue(link.getFromNode().getId().toString()) +
"\"");
154 out.write(
" to=\"" + encodeAttributeValue(link.getToNode().getId().toString()) +
"\"");
155 out.write(
" length=\"" + link.getLength() +
"\"");
156 out.write(
" freespeed=\"" + link.getFreespeed() +
"\"");
157 out.write(
" capacity=\"" + link.getCapacity() +
"\"");
158 out.write(
" permlanes=\"" + link.getNumberOfLanes() +
"\"");
159 out.write(
" oneway=\"1\"");
161 Set<String> modes = link.getAllowedModes();
163 if (modes != this.lastSet) {
164 StringBuilder buffer =
new StringBuilder();
166 for (String mode : modes) {
173 this.lastModes = encodeAttributeValue(buffer.toString());
174 this.lastSet = modes;
176 out.write(
" modes=\"" + this.lastModes +
"\"");
191 attributesWriter.writeAttributes(
"\t\t\t" , out , link.getAttributes() );
195 public void endLink(
final BufferedWriter out)
throws IOException {
196 out.write(
"\t\t</link>\n");
204 public void writeSeparator(
final BufferedWriter out)
throws IOException {
205 out.write(
"<!-- =================================================" +
206 "===================== -->\n\n");
static String encodeAttributeValue(final String attributeValue)