package org.akka.essentials.wc.mapreduce.example.server;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import akka.actor.UntypedActor;
public class AggregateActor extends UntypedActor {
private Map<String, Integer> finalReducedMap = new HashMap<String, Integer>();
@Override
public void onReceive(Object message) throws Exception {
if (message instanceof Map) {
@SuppressWarnings("unchecked")
Map<String, Integer> reducedList = (Map<String, Integer>) message;
aggregateInMemoryReduce(reducedList);
} else if (message instanceof String) {
if (((String) message).compareTo("DISPLAY_LIST") == 0) {
//getSender().tell(finalReducedMap.toString());
System.out.println(finalReducedMap.toString());
}
}
}
private void aggregateInMemoryReduce(Map<String, Integer> reducedList) {
Iterator<String> iter = reducedList.keySet().iterator();
while (iter.hasNext()) {
String key = iter.next();
if (finalReducedMap.containsKey(key)) {
Integer count = reducedList.get(key) + finalReducedMap.get(key);
finalReducedMap.put(key, count);
} else {
finalReducedMap.put(key, reducedList.get(key));
}
}
}
}