package de.skuzzle.polly.core.internal.plugins; import de.skuzzle.polly.core.internal.ModuleStates; import de.skuzzle.polly.core.internal.roles.RoleManagerImpl; import de.skuzzle.polly.core.moduleloader.AbstractProvider; import de.skuzzle.polly.core.moduleloader.ModuleLoader; import de.skuzzle.polly.core.moduleloader.SetupException; import de.skuzzle.polly.core.moduleloader.annotations.Module; import de.skuzzle.polly.core.moduleloader.annotations.Provide; import de.skuzzle.polly.core.moduleloader.annotations.Require; @Module( requires = { @Require(component = PluginManagerImpl.class), @Require(state = ModuleStates.PLUGINS_READY), @Require(state = ModuleStates.PERSISTENCE_READY), @Require(state = ModuleStates.IRC_READY), @Require(state = ModuleStates.ROLES_READY), @Require(state = ModuleStates.USERS_READY) }, provides = @Provide(state = ModuleStates.PLUGINS_NOTIFIED) ) public class NotifyPluginsProvider extends AbstractProvider { private PluginManagerImpl pluginManager; public NotifyPluginsProvider(ModuleLoader loader) { super("NOTIFY_PLUGINS_PROVIDER", loader, true); } @Override public void beforeSetup() { this.pluginManager = this.requireNow(PluginManagerImpl.class, true); } @Override public void setup() throws SetupException {} @Override public void run() throws Exception { // Get all contained permissions RoleManagerImpl roleManager = this.requireNow(RoleManagerImpl.class, false); for (Plugin plugin : this.pluginManager.loadedPlugins()) { roleManager.registerPermissions(plugin.getPluginInstance()); } // assign permissions to roles for (Plugin plugin : this.pluginManager.loadedPlugins()) { try { plugin.getPluginInstance().assignPermissions(roleManager); } catch (Exception ignore) { logger.warn("Ignoring Exception: ", ignore); } } this.pluginManager.notifyPlugins(); this.addState(ModuleStates.PLUGINS_NOTIFIED); } @Override public void dispose() { this.pluginManager = null; super.dispose(); } }