package eu.choreos.vv.loadgenerator;
import eu.choreos.vv.loadgenerator.strategy.DegeneratedLoad;
import eu.choreos.vv.loadgenerator.strategy.LoadGenerationStrategy;
public class LoadGeneratorFactory {
private long delay;
private int poolSize;
private int timeout;
private LoadGenerationStrategy strategy;
private Class loadGeneratorClass;
private static LoadGeneratorFactory factory;
private LoadGeneratorFactory() {
this.delay = 1000000000;
this.poolSize = 50;
this.timeout = 60;
this.strategy = new DegeneratedLoad();
this.loadGeneratorClass = ParallelLoadGenerator.class;
}
public static LoadGeneratorFactory getInstance() {
if (factory == null)
factory = new LoadGeneratorFactory();
return factory;
}
public <T, K> LoadGenerator<T, K> create() {
LoadGenerator<T, K> instance;
try {
instance = (LoadGenerator<T, K>)loadGeneratorClass.newInstance();
instance.setDelay(delay);
instance.setPoolSize(poolSize);
instance.setTimeout(timeout);
instance.setStrategy(strategy);
return instance;
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException("Error creating load generator of type " + loadGeneratorClass.getName(), e);
}
}
public long getDelay() {
return delay;
}
public void setDelay(long delay) {
this.delay = delay;
}
public int getPoolSize() {
return poolSize;
}
public void setPoolSize(int poolSize) {
this.poolSize = poolSize;
}
public int getTimeout() {
return timeout;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public LoadGenerationStrategy getStrategy() {
return strategy;
}
public void setStrategy(LoadGenerationStrategy strategy) {
this.strategy = strategy;
}
public Class getLoadGeneratorClass() {
return loadGeneratorClass;
}
public void setLoadGeneratorClass(Class loadGeneratorClass) {
this.loadGeneratorClass = loadGeneratorClass;
}
}