package com.elibom.jogger.middleware.router.loader;
import com.elibom.jogger.middleware.router.RoutesException;
/**
* A concrete implementation of {@link ControllerLoader} that loads controllers from the classpath using a
* <code>ClassLoader</code>. You can specified a <code>basePackage</code> to avoid repeating the package in the routes
* file.
*
* @author German Escobar
*/
public class ClassPathControllerLoader implements ControllerLoader {
private String basePackage;
private ClassLoader classLoader = ClassPathControllerLoader.class.getClassLoader();
/**
* Constructor. Initializes the object with an empty <code>basePackage</code>.
*/
public ClassPathControllerLoader() {
this("");
}
/**
* Constructor. Initializes the object with the specified <code>basePackage</code>.
* @param basePackage
*/
public ClassPathControllerLoader(String basePackage) {
this.basePackage = basePackage;
if (this.basePackage != null && !"".equals(this.basePackage)) {
if (!this.basePackage.endsWith(".")) {
this.basePackage += ".";
}
}
}
@Override
public Object load(String controllerName) throws RoutesException {
String className = basePackage + controllerName;
try {
// load the controller class and instantiate it
Class<?> controllerClass = classLoader.loadClass(className);
return controllerClass.newInstance();
} catch (Exception e) {
throw new RoutesException(e);
}
}
public String getBasePackage() {
return basePackage;
}
public void setBasePackage(String basePackage) {
this.basePackage = basePackage;
}
public ClassLoader getClassLoader() {
return classLoader;
}
public void setClassLoader(ClassLoader classLoader) {
this.classLoader = classLoader;
}
}