diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AbstractConfigurationService.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AbstractConfigurationService.java index 6d4e36f067..de83fd9b36 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AbstractConfigurationService.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AbstractConfigurationService.java @@ -6,6 +6,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Stream; public abstract class AbstractConfigurationService implements ConfigurationService { @@ -17,10 +18,21 @@ public AbstractConfigurationService(Version version) { } protected void register(ControllerConfiguration config) { + put(config, true); + } + + protected void replace(ControllerConfiguration config) { + put(config, false); + } + + private void put( + ControllerConfiguration config, boolean failIfExisting) { final var name = config.getName(); - final var existing = configurations.get(name); - if (existing != null) { - throwExceptionOnNameCollision(config.getAssociatedControllerClassName(), existing); + if (failIfExisting) { + final var existing = configurations.get(name); + if (existing != null) { + throwExceptionOnNameCollision(config.getAssociatedControllerClassName(), existing); + } } configurations.put(name, config); } @@ -39,7 +51,19 @@ protected void throwExceptionOnNameCollision( @Override public ControllerConfiguration getConfigurationFor( ResourceController controller) { - return configurations.get(ControllerUtils.getNameFor(controller)); + return configurations.get(keyFor(controller)); + } + + protected String keyFor(ResourceController controller) { + return ControllerUtils.getNameFor(controller); + } + + protected ControllerConfiguration getFor(String controllerName) { + return configurations.get(controllerName); + } + + protected Stream controllerConfigurations() { + return configurations.values().stream(); } @Override