/*
* Copyright (C) 2015 Actor LLC. <https://actor.im>
*/
package im.actor.runtime.actors;
/**
* <p>Props is a configuration class to specify options for the creation of actors, think of it as an immutable and
* thus freely shareable recipe for creating an actor including associated dispatcher information.</p>
* For more information you may read about <a href="http://doc.akka.io/docs/akka/2.3.5/java/untyped-actors.html">Akka Props</a>.
*/
public final class Props {
private final ActorCreator creator;
private final String dispatcher;
private final ActorSupervisor supervisor;
private Props(String dispatcher, ActorCreator creator, ActorSupervisor supervisor) {
this.creator = creator;
this.dispatcher = dispatcher;
this.supervisor = supervisor;
}
/**
* Creating actor from Props
*
* @return Actor
* @throws Exception
*/
public Actor create() throws Exception {
return creator.create();
}
/**
* Getting dispatcher id if available
*
* @return the dispatcher
*/
public String getDispatcher() {
return dispatcher;
}
/**
* Getting supervisor if available
*
* @return the supervisor
*/
public ActorSupervisor getSupervisor() {
return supervisor;
}
/**
* Changing dispatcher
*
* @param dispatcher dispatcher id
* @return updated props
*/
public Props changeDispatcher(String dispatcher) {
return new Props(dispatcher, creator, supervisor);
}
/**
* Changing supervisor of an Actor
*
* @param supervisor supervisor of actor
* @return updated props
*/
public Props changeSupervisor(ActorSupervisor supervisor) {
return new Props(dispatcher, creator, supervisor);
}
/**
* Create props from Actor creator
*
* @param creator Actor creator class
* @return Props object
*/
public static Props create(ActorCreator creator) {
return new Props(null, creator, null);
}
}