ConfigManager
The config manager allows you to:
- Iterate over all
ConfigContainerinstances across Recaf - Register and unregister your own
ConfigContainervalues- Useful for plugin developers who want to expose config values in the UI
- Register and unregister listeners which are notified when new
ConfigContainervalues are registered and unregistered.
Iterating over registered containers
for (ConfigContainer container : configManager.getContainers())
logger.info("Container group={}, id={}", container.getGroup(), container.getId());
Registering and unregistering new containers
To add content to the config window create a ConfigContainer instance with some ConfigValue values and register it in the config manager. The config window is configured to listen to new containers and add them to the UI.
// If you have your own class to represent config values,
// you will probably want to extend from 'BasicConfigContainer' and add values
// in the class's constructor via 'addValue(ConfigValue);'
// You can reference most existing config classes for examples of this setup.
ConfigContainer container = ...
configManager.registerContainer(container);
configManager.unregisterContainer(container);
When creating a ConfigContainer class, it generally would be easiest to extend BasicConfigContainer and then use the addValue(ConfigValue) method.
public class MyThingConfig extends BasicConfigContainer {
private final ObservableString value = new ObservableString(null);
@Inject
public MyConfig() {
// Third party plugins should use 'EXTERNAL' as their group.
// This special group is treated differently in the config window UI,
// such that the ID's specified are text literals, and not translation keys.
super(ConfigGroups.EXTERNAL, "My thing config");
// Add values
addValue(new BasicConfigValue<>("My value", String.class, value));
}
public ObservableString getValue() {
return value;
}
}
Internal services within Recaf define their configs as ApplicationScoped so that they are discoverable by the manager when the manager is initialized. This allows all services to feed their configs into the system when the application launches.
Listening for new containers
configManager.addManagedConfigListener(new ManagedConfigListener() {
@Override
public void onRegister(@Nonnull ConfigContainer container) {
logger.info("Registered container: {} with {} values",
container.getGroupAndId(), container.getValues().size());
}
@Override
public void onUnregister(@Nonnull ConfigContainer container) {
logger.info("Unregistered container: {} with {} values",
container.getGroupAndId(), container.getValues().size());
}
});