20 package org.matsim.utils.eventsfilecomparison;
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.HashMap;
25 import java.util.List;
27 import java.util.Map.Entry;
28 import java.util.concurrent.BrokenBarrierException;
29 import java.util.concurrent.CyclicBarrier;
31 import org.apache.logging.log4j.LogManager;
32 import org.apache.logging.log4j.Logger;
39 class Worker
extends Thread implements BasicEventHandler{
41 private static final Logger log = LogManager.getLogger(Worker.class);
43 private final EventsManager eventsManager;
44 private final String eFile;
45 private final CyclicBarrier doComparison;
46 private final boolean ignoringCoordinates;
48 private final Map<String,Counter> events =
new HashMap<String,Counter>();
50 private volatile double time = -1;
51 private volatile boolean finished =
false;
52 private volatile int numEvents = 0;
54 Worker( String eFile1,
final CyclicBarrier doComparison,
boolean ignoringCoordinates ) {
56 this.doComparison = doComparison;
57 this.ignoringCoordinates = ignoringCoordinates;
59 this.eventsManager =
new SingleHandlerEventsManager(
this);
63 String getEventsFile() {
70 new MatsimEventsReader(this.eventsManager).readFile(this.eFile);
73 this.doComparison.await();
75 }
catch (InterruptedException e1) {
76 throw new ComparatorInterruptedException(e1);
77 }
catch (BrokenBarrierException e1) {
78 throw new ComparatorInterruptedException(e1);
80 }
catch (ComparatorInterruptedException e1) {
82 log.info(
"events-comparator got interrupted");
86 public boolean isFinished() {
90 public Map<String, Counter> getEventsMap() {
94 public double getCurrentTime() {
99 public void reset(
int iteration) {
103 public void handleEvent(Event event) {
104 if (this.time != event.getTime()) {
106 doComparison.await();
107 }
catch (InterruptedException e1) {
108 throw new ComparatorInterruptedException(e1);
109 }
catch (BrokenBarrierException e1) {
110 throw new ComparatorInterruptedException(e1);
114 this.time =
event.getTime();
121 public int getNumEvents() {
122 return this.numEvents;
125 private void addEvent(Event event) {
127 String lexString = toLexicographicSortedString(event);
128 Counter counter = this.events.get(lexString);
129 if (counter == null) {
130 counter =
new Counter();
131 this.events.put(lexString, counter);
136 private String toLexicographicSortedString(Event event) {
137 List<String> strings =
new ArrayList<String>();
138 for (Entry<String, String> e : event.getAttributes().entrySet()) {
139 StringBuilder tmp =
new StringBuilder();
140 final String key = e.getKey();
143 if ( ignoringCoordinates ){
145 case Event.ATTRIBUTE_X:
146 case Event.ATTRIBUTE_Y:
147 case Event.ATTRIBUTE_TIME:
154 tmp.append(e.getValue());
155 strings.add(tmp.toString());
157 Collections.sort(strings);
158 StringBuilder eventStr =
new StringBuilder();
159 for (String str : strings) {
160 eventStr.append(
" | ");
161 eventStr.append(str);
164 eventStr.append(
" | ") ;
165 return eventStr.toString();
ComparatorInterruptedException(final Exception e)