21 package org.matsim.core.population.io;
25 import java.io.BufferedWriter;
26 import java.io.IOException;
46 class PopulationWriterHandlerImplV4
extends AbstractPopulationWriterHandler {
48 private final CoordinateTransformation coordinateTransformation;
49 private final Network network;
51 public PopulationWriterHandlerImplV4(
52 final Network network) {
53 this(
new IdentityTransformation() , network );
56 public PopulationWriterHandlerImplV4(
57 final CoordinateTransformation coordinateTransformation,
58 final Network network) {
59 this.coordinateTransformation = coordinateTransformation;
60 this.network = network;
64 public void writeHeaderAndStartElement(
final BufferedWriter out)
throws IOException {
65 out.write(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
66 out.write(
"<!DOCTYPE plans SYSTEM \"" + MatsimXmlWriter.DEFAULT_DTD_LOCATION +
"plans_v4.dtd\">\n\n");
74 public void startPlans(
final Population plans,
final BufferedWriter out)
throws IOException {
76 if (plans.getName() != null) {
77 out.write(
" name=\"" + encodeAttributeValue(plans.getName()) +
"\"");
83 public void endPlans(
final BufferedWriter out)
throws IOException {
84 out.write(
"</plans>\n");
93 public void startPerson(
final Person person,
final BufferedWriter out)
throws IOException {
94 out.write(
"\t<person id=\"");
95 out.write(encodeAttributeValue(person.getId().toString()));
97 if (PersonUtils.getSex(person) != null) {
99 out.write(PersonUtils.getSex(person));
102 if (PersonUtils.getAge(person) != null) {
103 out.write(
" age=\"");
104 out.write(Integer.toString(PersonUtils.getAge(person)));
107 if (PersonUtils.getLicense(person) != null) {
108 out.write(
" license=\"");
109 out.write(PersonUtils.getLicense(person));
112 if (PersonUtils.getCarAvail(person) != null) {
113 out.write(
" car_avail=\"");
114 out.write(PersonUtils.getCarAvail(person));
117 if (PersonUtils.isEmployed(person) != null) {
118 out.write(
" employed=\"");
119 out.write((PersonUtils.isEmployed(person) ?
"yes" :
"no"));
126 public void endPerson(
final BufferedWriter out)
throws IOException {
127 out.write(
"\t</person>\n\n");
135 public void startTravelCard(
final String travelcard,
final BufferedWriter out)
throws IOException {
136 out.write(
"\t\t<travelcard type=\"");
137 out.write(travelcard);
138 out.write(
"\" />\n\n");
142 public void endTravelCard(
final BufferedWriter out)
throws IOException {
150 public void startPlan(
final Plan plan,
final BufferedWriter out)
throws IOException {
151 out.write(
"\t\t<plan");
152 if (plan.getScore() != null) {
153 out.write(
" score=\"");
154 out.write(plan.getScore().toString());
157 if (PersonUtils.isSelected(plan))
158 out.write(
" selected=\"yes\"");
160 out.write(
" selected=\"no\"");
161 if ((plan.getType() != null)) {
162 out.write(
" type=\"");
163 out.write(encodeAttributeValue(plan.getType()));
170 public void endPlan(
final BufferedWriter out)
throws IOException {
171 out.write(
"\t\t</plan>\n\n");
179 public void startAct(
final Activity act,
final BufferedWriter out)
throws IOException {
180 out.write(
"\t\t\t<act type=\"");
181 out.write(encodeAttributeValue(act.getType()));
183 if (act.getLinkId() != null) {
184 out.write(
" link=\"");
185 out.write(encodeAttributeValue(act.getLinkId().toString()));
188 if (act.getFacilityId() != null) {
189 out.write(
" facility=\"");
190 out.write(encodeAttributeValue(act.getFacilityId().toString()));
193 if (act.getCoord() != null) {
194 final Coord coord = coordinateTransformation.transform( act.getCoord() );
196 out.write(Double.toString( coord.getX() ));
197 out.write(
"\" y=\"");
198 out.write(Double.toString( coord.getY() ));
201 if (act.getStartTime().isDefined()) {
202 out.write(
" start_time=\"");
203 out.write(Time.writeTime(act.getStartTime().seconds()));
206 if (act.getMaximumDuration().isDefined()) {
207 out.write(
" dur=\"");
208 out.write(Time.writeTime(act.getMaximumDuration().seconds()));
211 if (act.getEndTime().isDefined()) {
212 out.write(
" end_time=\"");
213 out.write(Time.writeTime(act.getEndTime().seconds()));
220 public void endAct(
final BufferedWriter out)
throws IOException {
228 public void startLeg(
final Leg leg,
final BufferedWriter out)
throws IOException {
229 out.write(
"\t\t\t<leg mode=\"");
230 out.write(leg.getMode());
232 if (leg.getDepartureTime().isDefined()) {
233 out.write(
" dep_time=\"");
234 out.write(Time.writeTime(leg.getDepartureTime().seconds()));
237 if (leg.getTravelTime().isDefined()) {
238 out.write(
" trav_time=\"");
239 out.write(Time.writeTime(leg.getTravelTime().seconds()));
255 public void endLeg(
final BufferedWriter out)
throws IOException {
256 out.write(
"\t\t\t</leg>\n");
264 public void startRoute(
final Route route,
final BufferedWriter out)
throws IOException {
265 out.write(
"\t\t\t\t<route");
266 if (!Double.isNaN(route.getDistance())) {
267 out.write(
" dist=\"");
268 out.write(Double.toString(route.getDistance()));
271 if (route.getTravelTime().isDefined()) {
272 out.write(
" trav_time=\"");
273 out.write(Time.writeTime(route.getTravelTime().seconds()));
278 out.write(
"\t\t\t\t\t");
279 if (route instanceof NetworkRoute) {
280 for (Node n : RouteUtils.getNodes((NetworkRoute) route,
this.network)) {
281 out.write(n.getId().toString());
285 String rd = route.getRouteDescription();
287 out.write(XmlUtils.encodeContent(rd));
296 public void endRoute(
final BufferedWriter out)
throws IOException {
297 out.write(
"\t\t\t\t</route>\n");
305 public void writeSeparator(
final BufferedWriter out)
throws IOException {
306 out.write(
"<!-- ====================================================================== -->\n\n");
static String encodeAttributeValue(final String attributeValue)