package fi.otavanopisto.pyramus.plugin;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** The repository containing page hooks loaded by plugins. */
public class PageHookVault {
/** Returns the page hook vault instance.
*
* @return The page hook vault instance.
*/
public static final PageHookVault getInstance() {
return pageHookVault;
}
private static final PageHookVault pageHookVault = new PageHookVault();
/** List the registered page hooks with a specified name.
*
* @param hookName The name of the returned hooks.
* @return The hooks named <code>hookName</code>
*/
public synchronized List<PageHookController> getPageHooks(String hookName) {
return pageHooks.get(hookName);
}
private synchronized void registerPageHook(String hookName, Class<?> hookControllerClass) {
List<PageHookController> hooks = pageHooks.get(hookName);
if (hooks == null) {
hooks = new ArrayList<>();
pageHooks.put(hookName, hooks);
}
try {
hooks.add((PageHookController) hookControllerClass.newInstance());
} catch (InstantiationException e) {
throw new PluginManagerException(e);
} catch (IllegalAccessException e) {
throw new PluginManagerException(e);
}
}
private Map<String, List<PageHookController>> pageHooks = new HashMap<>();
static {
List<PluginDescriptor> plugins = PluginManager.getInstance().getPlugins();
for (PluginDescriptor plugin : plugins) {
if (plugin.getPageHookControllers() != null) {
Map<String, Class<?>> pageHooks = plugin.getPageHookControllers();
for (Map.Entry<String, Class<?>> entry : pageHooks.entrySet()) {
getInstance().registerPageHook(entry.getKey(), entry.getValue());
}
}
}
}
}