package de.skuzzle.polly.core.internal.runonce; import java.io.IOException; import de.skuzzle.polly.core.configuration.ConfigurationImpl; import de.skuzzle.polly.core.configuration.ConfigurationProviderImpl; import de.skuzzle.polly.core.internal.ModuleStates; 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 = ConfigurationProviderImpl.class), @Require(state = ModuleStates.USERS_READY), @Require(state = ModuleStates.PERSISTENCE_READY), @Require(state = ModuleStates.PLUGINS_NOTIFIED) }, provides = @Provide(component = RunOnceManagerImpl.class) ) public class RunOnceProvider extends AbstractProvider { public final static String RUN_ONCE_CONFIG = "runOnce.cfg"; private RunOnceManagerImpl runOnceManager; private ConfigurationImpl runOnceCfg; public RunOnceProvider(ModuleLoader loader) { super("RUNONCE_PROVIDER", loader, false); } @Override public void setup() throws SetupException { final ConfigurationProviderImpl cfgProvider = this.requireNow( ConfigurationProviderImpl.class, true); try { this.runOnceCfg = (ConfigurationImpl) cfgProvider.createConfiguration(RUN_ONCE_CONFIG); this.runOnceManager = new RunOnceManagerImpl(this.runOnceCfg); this.provideComponent(this.runOnceManager); } catch (IOException e) { throw new SetupException(e); } } @Override public void run() throws Exception { this.runOnceManager.runActions(); this.runOnceCfg.store(); } @Override public void dispose() { this.runOnceManager = null; super.dispose(); } }