package de.skuzzle.polly.core.internal;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Constructor;
import org.apache.log4j.Logger;
import de.skuzzle.polly.core.moduleloader.ModuleLoader;
import de.skuzzle.polly.core.moduleloader.SetupException;
public class ModuleBootstrapper {
private final static Logger logger = Logger.getLogger(
ModuleBootstrapper.class.getName());
public static void prepareModuleLoader(ModuleLoader loader,
File modulesCfg) throws IOException, SetupException {
parseConfig(modulesCfg, loader);
}
private static void parseConfig(File modules, ModuleLoader loader)
throws IOException, SetupException {
if (!modules.exists()) {
throw new FileNotFoundException(
MSG.bind(MSG.moduleDefinitionNotFound, modules));
}
BufferedReader input = null;
try {
logger.info("Reading modules cfg from " + modules); //$NON-NLS-1$
input = new BufferedReader(
new InputStreamReader(new FileInputStream(modules)));
String module = null;
while ((module = input.readLine()) != null) {
module = module.trim();
try {
if (module.startsWith("include ")) { //$NON-NLS-1$
String[] parts = module.split(" ", 2); //$NON-NLS-1$
File parent = modules.getParentFile();
parseConfig(new File(parent, parts[1]), loader);
continue;
}
if (module.startsWith("#") || module.startsWith("//") || module.equals("")) { //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
// skip comments
continue;
}
logger.debug("Searching class for module '" + module + "'"); //$NON-NLS-1$ //$NON-NLS-2$
Class<?> cls = Class.forName(module);
Constructor<?> ctor = cls.getConstructor(ModuleLoader.class);
ctor.newInstance(loader);
} catch (Exception e) {
throw new SetupException(e);
}
}
} finally {
if (input != null) {
input.close();
}
}
}
}