DistributedFactory.java
package progen.roles.distributed;
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;
/**
* @author jirsis
*
*/
public class DistributedFactory extends ProGenFactory {
@Override
public Client makeClient() {
final String roleClass = ProGenContext.getOptionalProperty("progen.role.client.class", "ClientDistributed");
return (Client) loadRole(roleClass);
}
@Override
public Dispatcher makeDispatcher() {
final String roleClass = ProGenContext.getOptionalProperty("progen.role.dispatcher.class", "DispatcherDistributed");
return (Dispatcher) loadRole(roleClass);
}
@Override
public Worker makeWorker() {
final String roleClass = ProGenContext.getOptionalProperty("progen.role.worker.class", "WorkerDistributed");
return (Worker) loadRole(roleClass);
}
@Override
public ExecutionRole makeExecutionRole() {
ExecutionRole exec = null;
final String name = ProGenContext.getMandatoryProperty("progen.role");
try {
final Role executionRole = Role.valueOf(name.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(name, e);
}
return exec;
}
private Object loadRole(String clazz) {
Object role = null;
final String roleName = "progen.roles.distributed." + clazz;
try {
role = Class.forName(roleName).newInstance();
} catch (ClassNotFoundException e) {
throw new UnknownRoleImplementationException(roleName, e);
} catch (InstantiationException e) {
throw new UnknownRoleImplementationException(roleName, e);
} catch (IllegalAccessException e) {
throw new UnknownRoleImplementationException(roleName, e);
}
return role;
}
}