package org.softlang.company.actors; import java.util.List; import org.softlang.company.messages.CutMessage; import org.softlang.company.messages.DepartmentsMessage; import org.softlang.company.messages.EmployeeMessage; import org.softlang.company.messages.EndMessage; 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 CutActor extends UntypedActor { private ActorRef back = null; @Override public void onReceive(Object message) throws Exception { ActorRef child = null; if (message instanceof CutMessage) { // decide what to do depending on // the message back = this.getSender(); child = this.context().actorOf( Props.create(DepartmentsActor.class), "cut"); // create new // child List<Department> ds = ((CutMessage) message).getCompany() .getDepartments(); child.tell(new DepartmentsMessage(ds), getSelf()); // send message // asynchronously // to actor } else if (message instanceof EndMessage) { back.tell(message, this.getSelf()); } else if (message instanceof EmployeeMessage) { // get employees cutSalaries(((EmployeeMessage) message).getEmployees()); } else unhandled(message); } /** * cut all salaries from es * * @param es */ private void cutSalaries(List<Employee> es) { for (Employee e : es) e.setSalary(e.getSalary() / 2); } }