MATSIM
EventWriterTXT.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * EventWriterTXT.java
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2007, 2008 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.events.algorithms;
22 
23 import java.io.BufferedWriter;
24 import java.io.IOException;
25 import java.util.HashMap;
26 import java.util.Map;
27 
28 import org.apache.logging.log4j.LogManager;
29 import org.apache.logging.log4j.Logger;
30 import org.matsim.api.core.v01.Id;
51 import org.matsim.core.utils.io.IOUtils;
52 import org.matsim.vehicles.Vehicle;
53 
57 
58  private static final Logger LOG = LogManager.getLogger(EventWriterTXT.class);
59 
60  /* Implement all the different event handlers by its own. Future event types will no longer be
61  * suitable to be written to a TXT-format file, but will have additional attributes that need to be
62  * stored in XML. Explicitly listing the event handlers makes sure only events are written to TXT that
63  * can also correctly be read in again, and helps fix the test cases during introduction of the new,
64  * additional events.
65  */
66 
67  private BufferedWriter out = null;
68  private double lastTime = Double.NaN;
69  private String timeString = null;
70 
71  private Map<Id<Vehicle>, Id<Person>> vehicleToDriverMap = new HashMap<>();
72 
73  public EventWriterTXT(final String filename) {
74  init(filename);
75  }
76 
77  @Override
78  public void closeFile() {
79  if (this.out != null) {
80  try {
81  this.out.close();
82  this.out = null;
83  } catch (IOException e) {
84  LOG.error(e.getMessage(), e);
85  }
86  }
87  }
88 
89  public void init(final String outfilename) {
90  if (this.out != null) {
91  try {
92  this.out.close();
93  this.out = null;
94  } catch (IOException e) {
95  LOG.error(e.getMessage(), e);
96  }
97  }
98  try {
99  this.out = IOUtils.getBufferedWriter(outfilename);
100  String eventsTxtFile = "T_GBL\t";
101  eventsTxtFile += "VEH_ID\t";
102  eventsTxtFile += "LEG_NR\t";
103  eventsTxtFile += "LINK_ID\t";
104  eventsTxtFile += "FROM_NODE_ID\t";
105  eventsTxtFile += "EVENT_FLAG\t";
106  eventsTxtFile += "DESCRIPTION\n";
107  this.out.write(eventsTxtFile);
108  } catch (IOException e) {
109  LOG.error(e.getMessage(), e);
110  }
111  }
112 
113  @Override
114  public void reset(final int iter) {
115  closeFile();
116  }
117 
118  private void writeLine(final double time, final Id<Person> agentId, final Id<Link> linkId, final int flag, final String description) {
119  try {
120  this.out.write(getTimeString(time));
121  if (agentId != null) {
122  this.out.write(agentId.toString());
123  }
124  this.out.write('\t');
125  // nothing to be written for leg-nr
126  this.out.write('\t');
127  if (linkId != null) {
128  this.out.write(linkId.toString());
129  }
130  this.out.write('\t');
131  this.out.write('0'); // from-node-id
132  this.out.write('\t');
133  this.out.write(Integer.toString(flag));
134  this.out.write('\t');
135  if (description != null) {
136  this.out.write(description);
137  }
138  this.out.write('\n');
139  } catch (IOException e) {
140  LOG.error(e.getMessage(), e);
141  }
142  }
143 
152  private String getTimeString(final double time) {
153  if (time != this.lastTime) {
154  this.lastTime = time;
155  this.timeString = Long.toString((long) this.lastTime) + "\t";
156  }
157  return this.timeString;
158  }
159 
160  @Override
161  public void handleEvent(ActivityEndEvent event) {
162  writeLine(event.getTime(), event.getPersonId(), event.getLinkId(), Number.ActivityEnd.ordinal(), ActivityEndEvent.EVENT_TYPE + " " + event.getActType());
163  }
164 
165  @Override
166  public void handleEvent(ActivityStartEvent event) {
167  writeLine(event.getTime(), event.getPersonId(), event.getLinkId(), Number.ActivityStart.ordinal(), ActivityStartEvent.EVENT_TYPE + " " + event.getActType());
168  }
169 
170  @Override
171  public void handleEvent(PersonArrivalEvent event) {
172  writeLine(event.getTime(), event.getPersonId(), event.getLinkId(), Number.PersonArrival.ordinal(), PersonArrivalEvent.EVENT_TYPE);
173  }
174 
175  @Override
176  public void handleEvent(PersonDepartureEvent event) {
177  writeLine(event.getTime(), event.getPersonId(), event.getLinkId(), Number.PersonDeparture.ordinal(), PersonDepartureEvent.EVENT_TYPE);
178  }
179 
180  public enum Number{ /*0:*/ PersonArrival, dummy, LinkLeave, PersonStuck, /*4:*/ VehicleEntersTraffic,
181  /*5:*/ LinkEnter, PersonDeparture, ActivityStart, ActivityEnd, /*9:*/ PersonMoney }
182 
183  @Override
184  public void handleEvent(PersonStuckEvent event) {
185  writeLine(event.getTime(), event.getPersonId(), event.getLinkId(), Number.PersonStuck.ordinal(), PersonStuckEvent.EVENT_TYPE);
186  }
187 
188  @Override
189  public void handleEvent(PersonMoneyEvent event) {
190  writeLine(event.getTime(), event.getPersonId(), null, Number.PersonMoney.ordinal(), "agentMoney" + "\t" + event.getAmount());
191  }
192 
193  @Override
195  writeLine(event.getTime(), event.getPersonId(), event.getLinkId(), Number.VehicleEntersTraffic.ordinal(), VehicleEntersTrafficEvent.EVENT_TYPE);
196 
197  vehicleToDriverMap.put(event.getVehicleId(), event.getPersonId());
198  }
199 
200  @Override
201  public void handleEvent(LinkEnterEvent event) {
202  writeLine(event.getTime(), vehicleToDriverMap.get(event.getVehicleId()), event.getLinkId(), Number.LinkEnter.ordinal(), LinkEnterEvent.EVENT_TYPE);
203  }
204 
205  @Override
206  public void handleEvent(LinkLeaveEvent event) {
207  writeLine(event.getTime(), vehicleToDriverMap.get(event.getVehicleId()), event.getLinkId(), Number.LinkLeave.ordinal(), LinkLeaveEvent.EVENT_TYPE);
208  }
209 }
void handleEvent(PersonDepartureEvent event)
static BufferedWriter getBufferedWriter(URL url, Charset charset, boolean append)
Definition: IOUtils.java:390
void writeLine(final double time, final Id< Person > agentId, final Id< Link > linkId, final int flag, final String description)
Map< Id< Vehicle >, Id< Person > > vehicleToDriverMap
void handleEvent(VehicleEntersTrafficEvent event)