/* * Created on 07-Feb-2004 * Author is Michael Camacho */ package pipe.gui; import java.io.File; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; /** * Utility class that dynamically loads the modules required for PIPE */ public final class ModuleLoader { /** * Imodule location */ private static final String IMODULE_LOCATION = "pipe.modules.interfaces.IModule"; /** * Class logger */ private static final Logger LOGGER = Logger.getLogger(ModuleLoader.class.getName()); /** * Private constructor for the static class */ private ModuleLoader() { } /** * Jar to include as a module * @param modFile jar file * @return class of the module */ public static Class<?> importModule(File modFile) { Class<?> modClass = null; if (modFile.exists() && modFile.isFile() && modFile.canRead()) { String className = getClassName(modFile); modFile = modFile.getParentFile(); File moduleFile = modFile; while (!moduleFile.getName().endsWith("pipe")) { moduleFile = moduleFile.getParentFile(); } ExtFileManager.addSearchPath(moduleFile); modClass = ExtFileManager.loadExtClass(className); if (!isModule(modClass)) { return null; } } return modClass; } private static String getClassName(File moduleFile) { String filename; try { filename = moduleFile.getCanonicalPath(); } catch (IOException e) { LOGGER.log(Level.SEVERE, e.getMessage()); return null; } String seperator = System.getProperty("file.separator"); filename = filename.replace(seperator.charAt(0), '.'); filename = filename.substring(0, filename.length() - 6); int position = filename.lastIndexOf("pipe"); if (position != -1) { filename = filename.substring(position); } else { filename = filename.substring(filename.lastIndexOf(".") + 1); } return filename; } /** * * @param modClass * @return true if the class is a module */ private static boolean isModule(Class<?> modClass) { for (Class<?> anInterface : modClass.getInterfaces()) { if (anInterface.getName().equals(IMODULE_LOCATION)) { return true; } } return false; } }