MATSIM
NetworkWriter.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * NetworkWriter.java
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2007 by the members listed in the COPYING, *
8  * LICENSE and WARRANTY file. *
9  * email : info at matsim dot org *
10  * *
11  * *********************************************************************** *
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * See also COPYING, LICENSE and WARRANTY file *
18  * *
19  * *********************************************************************** */
20 
21 package org.matsim.core.network.io;
22 
23 import org.apache.logging.log4j.LogManager;
24 import org.apache.logging.log4j.Logger;
34 
35 import java.io.IOException;
36 import java.io.OutputStream;
37 import java.io.UncheckedIOException;
38 import java.util.HashMap;
39 import java.util.Map;
40 
41 public final class NetworkWriter extends MatsimXmlWriter implements MatsimWriter {
42 
43  private static final Logger log = LogManager.getLogger(NetworkWriter.class);
44 
45  private final Network network;
47  private final Map<Class<?>,AttributeConverter<?>> converters = new HashMap<>();
48 
49  public NetworkWriter(final Network network) {
50  this( new IdentityTransformation() , network );
51  }
52 
53  public NetworkWriter(
54  final CoordinateTransformation transformation,
55  final Network network) {
56  this.transformation = transformation;
57  this.network = network;
58  }
59 
60  public void putAttributeConverters(final Map<Class<?>, AttributeConverter<?>> converters) {
61  this.converters.putAll( converters );
62  }
63 
64  public void putAttributeConverter(Class<?> clazz , AttributeConverter<?> converter) {
65  this.converters.put( clazz , converter );
66  }
67 
68  @Override
69  public void write(final String filename) {
70  log.info("Writing network to file: " + filename + "...");
71  // always write out in newest version, currently v2
72  writeFileV2(filename);
73  log.info("done.");
74  }
75 
76  public void writeFileV1(final String filename) {
77  String dtd = "http://www.matsim.org/files/dtd/network_v1.dtd";
78  NetworkWriterHandler handler = new NetworkWriterHandlerImplV1(transformation);
79  writeFile( dtd , handler , filename );
80  }
81 
82  public void writeStreamV1(final OutputStream stream) {
83  String dtd = "http://www.matsim.org/files/dtd/network_v1.dtd";
84  NetworkWriterHandler handler = new NetworkWriterHandlerImplV1(transformation);
85  writeStream(dtd, handler, stream);
86  }
87 
88  public void writeFileV2(final String filename) {
89  String dtd = "http://www.matsim.org/files/dtd/network_v2.dtd";
90  NetworkWriterHandlerImplV2 handler = new NetworkWriterHandlerImplV2(transformation);
91 
92  handler.putAttributeConverters( converters );
93 
94  writeFile(dtd, handler, filename);
95  }
96 
97  public void writeStreamV2(final OutputStream stream) {
98  String dtd = "http://www.matsim.org/files/dtd/network_v2.dtd";
99  NetworkWriterHandlerImplV2 handler = new NetworkWriterHandlerImplV2(transformation);
100 
101  handler.putAttributeConverters( converters );
102 
103  writeStream( dtd , handler , stream );
104  }
105 
106  private void writeFile(
107  final String dtd,
108  final NetworkWriterHandler handler,
109  final String filename) {
110 
111  try {
112  openFile(filename);
113  writeContent(dtd, handler);
114  }
115  catch (IOException e) {
116  throw new UncheckedIOException(e);
117  }
118  }
119 
120  private void writeStream(
121  final String dtd,
122  final NetworkWriterHandler handler,
123  final OutputStream stream) {
124 
125  try {
126  openOutputStream(stream);
127  writeContent(dtd, handler);
128  }
129  catch (IOException e) {
130  throw new UncheckedIOException(e);
131  }
132  }
133 
134  private void writeContent(String dtd, NetworkWriterHandler handler) throws IOException {
135  writeXmlHead();
136  writeDoctype("network", dtd);
137 
138  handler.startNetwork(network, this.writer);
139  handler.writeSeparator(this.writer);
140  handler.startNodes(network, this.writer);
141  for (Node n : NetworkUtils.getSortedNodes(network)) {
142  handler.startNode(n, this.writer);
143  handler.endNode(this.writer);
144  }
145  handler.endNodes(this.writer);
146  handler.writeSeparator(this.writer);
147  handler.startLinks(network, this.writer);
148  for (Link l : NetworkUtils.getSortedLinks(network)) {
149  handler.startLink(l, this.writer);
150  handler.endLink(this.writer);
151  }
152  handler.endLinks(this.writer);
153  handler.writeSeparator(this.writer);
154  handler.endNetwork(this.writer);
155  this.writer.close();
156  }
157 }
static Node [] getSortedNodes(final Network network)
final CoordinateTransformation transformation
void write(final String filename)
void writeStream(final String dtd, final NetworkWriterHandler handler, final OutputStream stream)
void writeFileV1(final String filename)
NetworkWriter(final CoordinateTransformation transformation, final Network network)
void writeStreamV2(final OutputStream stream)
void writeFileV2(final String filename)
final void openOutputStream(OutputStream outputStream)
void writeStreamV1(final OutputStream stream)
static Link [] getSortedLinks(final Network network)
final Map< Class<?>, AttributeConverter<?> > converters
void writeContent(String dtd, NetworkWriterHandler handler)
void putAttributeConverter(Class<?> clazz, AttributeConverter<?> converter)
final void writeDoctype(String rootTag, String dtdUrl)
void putAttributeConverters(final Map< Class<?>, AttributeConverter<?>> converters)
void writeFile(final String dtd, final NetworkWriterHandler handler, final String filename)