21 package org.matsim.core.population.io;
25 import java.io.BufferedWriter;
26 import java.io.IOException;
28 import org.apache.logging.log4j.LogManager;
29 import org.apache.logging.log4j.Logger;
50 class PopulationWriterHandlerImplV5
implements PopulationWriterHandler {
51 private static final Logger log = LogManager.getLogger( PopulationWriterHandlerImplV5.class );
53 private final CoordinateTransformation coordinateTransformation;
55 PopulationWriterHandlerImplV5(CoordinateTransformation coordinateTransformation) {
56 this.coordinateTransformation = coordinateTransformation;
60 public void writeHeaderAndStartElement(
final BufferedWriter out)
throws IOException {
61 out.write(
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
62 out.write(
"<!DOCTYPE population SYSTEM \"" + MatsimXmlWriter.DEFAULT_DTD_LOCATION +
"population_v5.dtd\">\n\n");
66 public void startPlans(
final Population plans,
final BufferedWriter out)
throws IOException {
67 out.write(
"<population");
68 if (plans.getName() != null) {
69 out.write(
" desc=\"" + encodeAttributeValue(plans.getName()) +
"\"");
75 public void writePerson(
final Person person,
final BufferedWriter out)
throws IOException {
76 PopulationWriterHandlerImplV5.startPerson(person, out);
77 for (Plan plan : person.getPlans()) {
78 PopulationWriterHandlerImplV5.startPlan(plan, out);
80 for (PlanElement pe : plan.getPlanElements()) {
81 if (pe instanceof Activity) {
82 Activity act = (Activity) pe;
83 this.writeAct(act, out);
85 else if (pe instanceof Leg) {
87 PopulationWriterHandlerImplV5.startLeg(leg, out);
89 Route route = leg.getRoute();
91 PopulationWriterHandlerImplV5.startRoute(route, out);
92 PopulationWriterHandlerImplV5.endRoute(out);
94 PopulationWriterHandlerImplV5.endLeg(out);
97 PopulationWriterHandlerImplV5.endPlan(out);
99 PopulationWriterHandlerImplV5.endPerson(out);
100 this.writeSeparator(out);
104 public void endPlans(
final BufferedWriter out)
throws IOException {
105 out.write(
"</population>\n");
109 private static void startPerson(
final Person person,
final BufferedWriter out)
throws IOException {
110 out.write(
"\t<person id=\"");
111 out.write(encodeAttributeValue(person.getId().toString()));
113 if (PersonUtils.getSex(person) != null) {
114 out.write(
" sex=\"");
115 out.write(PersonUtils.getSex(person));
118 if (PersonUtils.getAge(person) != null) {
119 out.write(
" age=\"");
120 out.write(Integer.toString(PersonUtils.getAge(person)));
123 if (PersonUtils.getLicense(person) != null) {
124 out.write(
" license=\"");
125 out.write(PersonUtils.getLicense(person));
128 if (PersonUtils.getCarAvail(person) != null) {
129 out.write(
" car_avail=\"");
130 out.write(PersonUtils.getCarAvail(person));
133 if (PersonUtils.isEmployed(person) != null) {
134 out.write(
" employed=\"");
135 out.write((PersonUtils.isEmployed(person) ?
"yes" :
"no"));
141 private static void endPerson(
final BufferedWriter out)
throws IOException {
142 out.write(
"\t</person>\n\n");
145 private static void startPlan(
final Plan plan,
final BufferedWriter out)
throws IOException {
146 out.write(
"\t\t<plan");
147 if (plan.getScore() != null) {
148 out.write(
" score=\"");
149 out.write(plan.getScore().toString());
152 if (PersonUtils.isSelected(plan))
153 out.write(
" selected=\"yes\"");
155 out.write(
" selected=\"no\"");
156 if ((plan.getType() != null)) {
157 out.write(
" type=\"");
158 out.write(encodeAttributeValue(plan.getType()));
164 private static void endPlan(
final BufferedWriter out)
throws IOException {
165 out.write(
"\t\t</plan>\n\n");
168 private void writeAct(
final Activity act,
final BufferedWriter out)
throws IOException {
169 out.write(
"\t\t\t<act type=\"");
170 out.write(encodeAttributeValue(act.getType()));
172 if (act.getLinkId() != null) {
173 out.write(
" link=\"");
174 out.write(encodeAttributeValue(act.getLinkId().toString()));
177 if (act.getFacilityId() != null) {
178 out.write(
" facility=\"");
179 out.write(encodeAttributeValue(act.getFacilityId().toString()));
182 if (act.getCoord() != null) {
183 final Coord coord = this.coordinateTransformation.transform( act.getCoord() );
185 out.write(Double.toString( coord.getX() ));
186 out.write(
"\" y=\"");
187 out.write(Double.toString( coord.getY() ));
190 if (act.getStartTime().isDefined()) {
191 out.write(
" start_time=\"");
192 out.write(Time.writeTime(act.getStartTime().seconds()));
195 if (act.getMaximumDuration().isDefined()) {
196 out.write(
" max_dur=\"");
197 out.write(Time.writeTime(act.getMaximumDuration().seconds()));
200 if (act.getEndTime().isDefined()) {
201 out.write(
" end_time=\"");
202 out.write(Time.writeTime(act.getEndTime().seconds()));
208 private static void startLeg(
final Leg leg,
final BufferedWriter out)
throws IOException {
209 out.write(
"\t\t\t<leg mode=\"");
210 out.write(encodeAttributeValue(leg.getMode()));
212 if (leg.getDepartureTime().isDefined()) {
213 out.write(
" dep_time=\"");
214 out.write(Time.writeTime(leg.getDepartureTime().seconds()));
217 if (leg.getTravelTime().isDefined()) {
218 out.write(
" trav_time=\"");
219 out.write(Time.writeTime(leg.getTravelTime().seconds()));
235 private static void endLeg(
final BufferedWriter out)
throws IOException {
236 out.write(
"\t\t\t</leg>\n");
239 private static void startRoute(
final Route route,
final BufferedWriter out)
throws IOException {
240 out.write(
"\t\t\t\t<route ");
241 out.write(
"type=\"");
242 out.write(encodeAttributeValue(route.getRouteType()));
244 out.write(
" start_link=\"");
245 out.write(encodeAttributeValue(route.getStartLinkId().toString()));
247 out.write(
" end_link=\"");
248 out.write(encodeAttributeValue(route.getEndLinkId().toString()));
250 out.write(
" trav_time=\"");
251 out.write(Time.writeTime(route.getTravelTime()));
253 out.write(
" distance=\"");
254 out.write(Double.toString(route.getDistance()));
259 if ( route instanceof NetworkRoute ) {
260 out.write(
" vehicleRefId=\"");
261 out.write(encodeAttributeValue(Id.writeId(((NetworkRoute) route).getVehicleId())));
265 String rd = route.getRouteDescription();
267 out.write(XmlUtils.encodeContent(rd));
271 private static void endRoute(
final BufferedWriter out)
throws IOException {
272 out.write(
"</route>\n");
276 public void writeSeparator(
final BufferedWriter out)
throws IOException {
277 out.write(
"<!-- ====================================================================== -->\n\n");
static String encodeAttributeValue(final String attributeValue)