package br.com.geraldoferraz.testyourquery.runner; import java.lang.reflect.Method; import br.com.geraldoferraz.testyourquery.config.Configuration; import br.com.geraldoferraz.testyourquery.config.ConfigurationFactory; import br.com.geraldoferraz.testyourquery.util.reflection.ClassReflector; public class RunnerFactory { private ClassReflector classReflector; public RunnerFactory(Class<?> clazz) { classReflector = new ClassReflector(clazz); } public Runner createRunner() { Configuration configuration = resolveConfiguration(); Runner runner = resolveRunner(configuration); return runner; } private Runner resolveRunner(Configuration configuration) { Runner runner = configuration.getSessionMode().newInstance(configuration, classReflector); return runner; } private Configuration resolveConfiguration() { Configuration configuration; Method method = classReflector.getConfiguratorMethod(); if (method != null) { configuration = (Configuration) classReflector.invokeStatic(method); }else{ configuration = new ConfigurationFactory().build(); } return configuration; } }