StandaloneFactory.java
package progen.roles.standalone;
import java.util.Locale;
import progen.context.ProGenContext;
import progen.roles.Client;
import progen.roles.Dispatcher;
import progen.roles.ExecutionRole;
import progen.roles.ProGenFactory;
import progen.roles.Role;
import progen.roles.UnknownRoleException;
import progen.roles.UnknownRoleImplementationException;
import progen.roles.Worker;
/**
* Fábrica concreta en la que todos los roles que se pueden generar, son de tipo
* Local, es decir, todos los componentes interactuan a través de los mecanismos
* habituales de las llamadas a métodos del lenguaje.
*
* @author jirsis
* @since 2.0
*/
public class StandaloneFactory extends ProGenFactory {
@Override
public Client makeClient() {
final String roleClass = ProGenContext.getOptionalProperty("progen.role.client.class", "ClientLocal");
return (Client) loadRole(roleClass);
}
@Override
public Dispatcher makeDispatcher() {
final String roleClass = ProGenContext.getOptionalProperty("progen.role.dispatcher.class", "DispatcherLocal");
return (Dispatcher) loadRole(roleClass);
}
@Override
public Worker makeWorker() {
final String roleClass = ProGenContext.getOptionalProperty("progen.role.worker.class", "WorkerLocal");
return (Worker) loadRole(roleClass);
}
private Object loadRole(String clazz) {
Object role = null;
final String roleName = "progen.roles.standalone." + clazz;
try {
role = Class.forName(roleName).newInstance();
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
throw new UnknownRoleImplementationException(roleName, e);
}
return role;
}
@Override
public ExecutionRole makeExecutionRole() {
ExecutionRole exec = null;
final String element = ProGenContext.getOptionalProperty("progen.role", Role.CLIENT.name());
try {
final Role executionRole = Role.valueOf(element.toUpperCase(Locale.getDefault()));
switch (executionRole) {
case CLIENT:
exec = this.makeClient();
break;
case DISPATCHER:
exec = this.makeDispatcher();
break;
case WORKER:
exec = this.makeWorker();
break;
default:
throw new UnknownRoleException(executionRole.name());
}
} catch (IllegalArgumentException e) {
throw new UnknownRoleException(element, e);
}
return exec;
}
}