package org.softlang.company.actors;
import java.util.ArrayList;
import java.util.List;
import org.softlang.company.messages.DepartmentsMessage;
import org.softlang.company.messages.EmployeeMessage;
import org.softlang.company.messages.EndMessage;
import org.softlang.company.messages.TotalMessage;
import org.softlang.company.model.Department;
import org.softlang.company.model.Employee;
import akka.actor.ActorRef;
import akka.actor.Props;
import akka.actor.UntypedActor;
public class TotalActor extends UntypedActor {
// private ArrayList<Double> results = new ArrayList<Double>();
private ActorRef back = null;
// private ArrayList<Employee> employees = new ArrayList<Employee>();
// private Timeout timeout = new Timeout(Duration.create(5, "seconds"));
private ArrayList<Double> results = new ArrayList<Double>();
@Override
public void onReceive(Object message) throws Exception {
ActorRef child;
if (message instanceof TotalMessage) {// decide what to do depending on
// the message
back = this.getSender();
child = this.context().actorOf(
Props.create(DepartmentsActor.class), "total");// create new
// child
List<Department> ds = ((TotalMessage) message).getCompany()
.getDepartments();
child.tell(new DepartmentsMessage(ds), this.getSelf());
// send message asynchronously to actor
} else if (message instanceof EmployeeMessage) {
results.add(addSalaries(((EmployeeMessage) message).getEmployees()));
} else if (message instanceof EndMessage) {
double result = 0.0;
for (double r : results)
result += r;
back.tell(result, this.getSelf());
} else
unhandled(message);
}
/**
* add all salaries from employees es
*
* @param es
* @return added salaries
*/
private double addSalaries(List<Employee> es) {
double result = 0.0;
for (Employee e : es) {
result += e.getSalary();
}
return result;
}
}