package org.openflexo.module; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; public class Modules { private static final java.util.logging.Logger logger = org.openflexo.logging.FlexoLogger .getLogger(Modules.class.getPackage().getName()); private static final Modules instance = new Modules(); public static Modules getInstance() { return instance; } /** * Vector of Module instance representing all available modules */ private ArrayList<Module> availableModules = new ArrayList<Module>(); public Modules() { initialize(); } public List<Module> getAvailableModules() { return availableModules; } /** * @param moduleName * the name of a module * @return the Module definition for the given moduleName or null if the Module is not available for the currentUserType or the module * name is unknown. * @see #isAvailable(Module) * @see UserType */ public Module getModule(String moduleName) { for (Module candidate : getAvailableModules()) { if (candidate.getName().equals(moduleName)) { return candidate; } } if (logger.isLoggable(Level.WARNING)) { logger.warning("Module named " + moduleName + " is either unknown, either not available in " + UserType.getCurrentUserType().getBusinessName2()); } return null; } /** * Given a list of modules, check if user type has right to use them and register them consequently * */ private void initialize() { for (Module module : UserType.getCurrentUserType().getModules()) { if (module.getModuleClass() != null) { registerModule(module); } } } /** * Internally used to register module with class name moduleClass * * @param module * the module to register */ private void registerModule(Module module) { if (module.register()) { availableModules.add(module); } } }