21 package org.matsim.core.population.io;
26 import java.io.BufferedWriter;
27 import java.io.IOException;
30 import org.apache.logging.log4j.LogManager;
31 import org.apache.logging.log4j.Logger;
59 class PopulationWriterHandlerImplV6
implements PopulationWriterHandler {
60 private static final Logger log = LogManager.getLogger( PopulationWriterHandlerImplV6.class );
63 private final AttributesXmlWriterDelegate attributesWriter =
new AttributesXmlWriterDelegate();
64 private final CoordinateTransformation coordinateTransformation;
66 PopulationWriterHandlerImplV6(CoordinateTransformation coordinateTransformation) {
67 this.coordinateTransformation = coordinateTransformation;
71 public void putAttributeConverters(
final Map<Class<?>, AttributeConverter<?>> converters ) {
72 this.attributesWriter.putAttributeConverters( converters );
76 public void writeHeaderAndStartElement(
final BufferedWriter out)
throws IOException {
77 out.write(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
78 out.write(
"<!DOCTYPE population SYSTEM \"" + MatsimXmlWriter.DEFAULT_DTD_LOCATION +
"population_v6.dtd\">\n\n");
82 public void startPlans(
final Population plans,
final BufferedWriter out)
throws IOException {
83 out.write(
"<population");
84 if (plans.getName() != null) {
85 out.write(
" desc=\"" + encodeAttributeValue(plans.getName()) +
"\"");
89 this.attributesWriter.writeAttributes(
"\t" , out , plans.getAttributes() );
95 public void writePerson(
final Person person,
final BufferedWriter out)
throws IOException {
96 this.startPerson(person, out);
97 for (Plan plan : person.getPlans()) {
100 for (PlanElement pe : plan.getPlanElements()) {
101 if (pe instanceof Activity) {
102 Activity act = (Activity) pe;
103 this.writeAct(act, out);
105 else if (pe instanceof Leg) {
107 this.startLeg(leg, out);
109 Route route = leg.getRoute();
111 PopulationWriterHandlerImplV6.startRoute(route, out);
112 PopulationWriterHandlerImplV6.endRoute(out);
114 PopulationWriterHandlerImplV6.endLeg(out);
117 PopulationWriterHandlerImplV6.endPlan(out);
119 PopulationWriterHandlerImplV6.endPerson(out);
120 this.writeSeparator(out);
124 public void endPlans(
final BufferedWriter out)
throws IOException {
125 out.write(
"</population>\n");
129 private void startPerson(
final Person person,
final BufferedWriter out)
throws IOException {
130 out.write(
"\t<person id=\"");
131 out.write(encodeAttributeValue(person.getId().toString()));
134 this.attributesWriter.writeAttributes(
"\t\t" , out , person.getAttributes() );
137 private static void endPerson(
final BufferedWriter out)
throws IOException {
138 out.write(
"\t</person>\n\n");
141 private void startPlan(
final Plan plan,
final BufferedWriter out)
throws IOException {
142 out.write(
"\t\t<plan");
143 if (plan.getScore() != null) {
144 out.write(
" score=\"");
145 out.write(plan.getScore().toString());
148 if (PersonUtils.isSelected(plan))
149 out.write(
" selected=\"yes\"");
151 out.write(
" selected=\"no\"");
152 if ((plan.getType() != null)) {
153 out.write(
" type=\"");
154 out.write(encodeAttributeValue(plan.getType()));
159 this.attributesWriter.writeAttributes(
"\t\t\t\t" , out , plan.getAttributes() );
163 private static void endPlan(
final BufferedWriter out)
throws IOException {
164 out.write(
"\t\t</plan>\n\n");
167 private void writeAct(
final Activity act,
final BufferedWriter out)
throws IOException {
168 out.write(
"\t\t\t<activity type=\"");
169 out.write(encodeAttributeValue(act.getType()));
171 if (act.getLinkId() != null) {
172 out.write(
" link=\"");
173 out.write(encodeAttributeValue(act.getLinkId().toString()));
176 if (act.getFacilityId() != null) {
177 out.write(
" facility=\"");
178 out.write(encodeAttributeValue(act.getFacilityId().toString()));
181 if (act.getCoord() != null) {
182 final Coord coord = this.coordinateTransformation.transform( act.getCoord() );
184 out.write(Double.toString( coord.getX() ));
185 out.write(
"\" y=\"");
186 out.write(Double.toString( coord.getY() ));
189 if ( act.getCoord().hasZ() ) {
191 out.write(Double.toString( coord.getZ() ));
195 if (act.getStartTime().isDefined()) {
196 out.write(
" start_time=\"");
197 out.write(Time.writeTime(act.getStartTime().seconds()));
200 if (act.getMaximumDuration().isDefined()) {
201 out.write(
" max_dur=\"");
202 out.write(Time.writeTime(act.getMaximumDuration().seconds()));
205 if (act.getEndTime().isDefined()) {
206 out.write(
" end_time=\"");
207 out.write(Time.writeTime(act.getEndTime().seconds()));
212 this.attributesWriter.writeAttributes(
"\t\t\t\t", out, act.getAttributes());
214 out.write(
"\t\t\t</activity>\n");
217 private void startLeg(
final Leg leg,
final BufferedWriter out)
throws IOException {
218 out.write(
"\t\t\t<leg mode=\"");
219 out.write(encodeAttributeValue(leg.getMode()));
221 if (leg.getDepartureTime().isDefined()) {
222 out.write(
" dep_time=\"");
223 out.write(Time.writeTime(leg.getDepartureTime().seconds()));
226 if (leg.getTravelTime().isDefined()) {
227 out.write(
" trav_time=\"");
228 out.write(Time.writeTime(leg.getTravelTime().seconds()));
243 if (leg.getRoutingMode() != null) {
244 Attributes attributes =
new AttributesImpl();
245 AttributesUtils.copyTo(leg.getAttributes(), attributes);
246 attributes.putAttribute(TripStructureUtils.routingMode, leg.getRoutingMode());
247 this.attributesWriter.writeAttributes(
"\t\t\t\t" , out , attributes );
248 }
else this.attributesWriter.writeAttributes(
"\t\t\t\t" , out , leg.getAttributes() );
251 private static void endLeg(
final BufferedWriter out)
throws IOException {
252 out.write(
"\t\t\t</leg>\n");
255 private static void startRoute(
final Route route,
final BufferedWriter out)
throws IOException {
256 out.write(
"\t\t\t\t<route ");
257 out.write(
"type=\"");
258 out.write(encodeAttributeValue(route.getRouteType()));
260 out.write(
" start_link=\"");
261 out.write(encodeAttributeValue(route.getStartLinkId().toString()));
263 out.write(
" end_link=\"");
264 out.write(encodeAttributeValue(route.getEndLinkId().toString()));
266 out.write(
" trav_time=\"");
267 out.write(Time.writeTime(route.getTravelTime()));
269 out.write(
" distance=\"");
270 out.write(Double.toString(route.getDistance()));
272 if ( route instanceof NetworkRoute) {
273 out.write(
" vehicleRefId=\"");
274 final Id<Vehicle> vehicleId = ((NetworkRoute) route).getVehicleId();
275 if ( vehicleId==null ) {
278 out.write(encodeAttributeValue(vehicleId.toString()));
283 String rd = route.getRouteDescription();
285 out.write(encodeContent(rd));
289 private static void endRoute(
final BufferedWriter out)
throws IOException {
290 out.write(
"</route>\n");
294 public void writeSeparator(
final BufferedWriter out)
throws IOException {
295 out.write(
"<!-- ====================================================================== -->\n\n");
static String encodeAttributeValue(final String attributeValue)
static String encodeContent(final String content)