package org.stagemonitor.core; import java.util.List; import org.stagemonitor.configuration.ConfigurationRegistry; import org.stagemonitor.configuration.source.ConfigurationSource; /** * This SPI provides callback methods that can be used to modify stagemonitor's configuration and configuration sources. * <p/> * In order to register a callback, you have to implement this interface and create the file * <code>/META-INF/services/org.stagemonitor.core.StagemonitorConfigurationSourceInitializer</code> with the canonical * class name of the implementation as its content. */ public abstract class StagemonitorConfigurationSourceInitializer implements StagemonitorSPI { /** * This method is called before just before the initialisation of the stagemonitor {@link ConfigurationRegistry}. * <p/> * This callback can be used to initialize or modify the list of configuration sources. * * @param modifyArguments */ public abstract void modifyConfigurationSources(ModifyArguments modifyArguments); /** * This method is called as soon as the stagemonitor {@link ConfigurationRegistry} has been initialized and before anything * has been read from it. * * * @param configInitializedArguments@throws Exception if there was a initialisation error. If a exception is thrown, stagemonitor will be deactivated! */ public void onConfigurationInitialized(ConfigInitializedArguments configInitializedArguments) throws Exception { } public static class ModifyArguments { private final List<ConfigurationSource> configurationSources; /** * @param configurationSources the mutable list of currently registered configuration sources */ ModifyArguments(List<ConfigurationSource> configurationSources) { this.configurationSources = configurationSources; } public void addConfigurationSourceAsFirst(ConfigurationSource configurationSource) { configurationSources.add(0, configurationSource); } public void addConfigurationSourceAsLast(ConfigurationSource configurationSource) { configurationSources.add(configurationSource); } } public static class ConfigInitializedArguments { private final ConfigurationRegistry configuration; /** * @param configuration the configuration that has just been initialized */ ConfigInitializedArguments(ConfigurationRegistry configuration) { this.configuration = configuration; } public ConfigurationRegistry getConfiguration() { return configuration; } } }