diff --git a/subsystem/src/main/java/org/wildfly/subsystem/service/ResourceServiceConfigurator.java b/subsystem/src/main/java/org/wildfly/subsystem/service/ResourceServiceConfigurator.java index 1a8021da5bd..ef01fe9679b 100644 --- a/subsystem/src/main/java/org/wildfly/subsystem/service/ResourceServiceConfigurator.java +++ b/subsystem/src/main/java/org/wildfly/subsystem/service/ResourceServiceConfigurator.java @@ -4,6 +4,10 @@ */ package org.wildfly.subsystem.service; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; import org.jboss.dmr.ModelNode; @@ -22,4 +26,31 @@ public interface ResourceServiceConfigurator { * @throws OperationFailedException if there was a failure reading the model or resolving expressions/capabilities */ ResourceServiceInstaller configure(OperationContext context, ModelNode model) throws OperationFailedException; + + /** + * Returns a composite {@link ResourceServiceConfigurator} that configures the specified service configurators. + * @param configurators a variable number of configurators + * @return a composite service configurator + */ + static ResourceServiceConfigurator combine(ResourceServiceConfigurator... configurators) { + return combine(List.of(configurators)); + } + + /** + * Returns a composite {@link ResourceServiceConfigurator} that configures the specified service configurators. + * @param configurators a collection of configurators + * @return a composite configurator + */ + static ResourceServiceConfigurator combine(Collection configurators) { + return new ResourceServiceConfigurator() { + @Override + public ResourceServiceInstaller configure(OperationContext context, ModelNode model) throws OperationFailedException { + List installers = new ArrayList<>(configurators.size()); + for (ResourceServiceConfigurator configurator : configurators) { + installers.add(configurator.configure(context, model)); + } + return ResourceServiceInstaller.combine(installers); + } + }; + } } diff --git a/subsystem/src/main/java/org/wildfly/subsystem/service/ResourceServiceInstaller.java b/subsystem/src/main/java/org/wildfly/subsystem/service/ResourceServiceInstaller.java index 7e6b552e370..85ba36cd674 100644 --- a/subsystem/src/main/java/org/wildfly/subsystem/service/ResourceServiceInstaller.java +++ b/subsystem/src/main/java/org/wildfly/subsystem/service/ResourceServiceInstaller.java @@ -17,6 +17,13 @@ */ public interface ResourceServiceInstaller { + /** + * Installs a service into the target associated with the specified operation context. + * @param context an operation context + * @return a mechanism to remove the installed service + */ + Consumer install(OperationContext context); + /** * Returns a composite {@link ResourceServiceInstaller} that installs the specified installers. * @param installers a variable number of installers @@ -50,11 +57,4 @@ public void accept(OperationContext context) { } }; } - - /** - * Installs a service into the target associated with the specified operation context. - * @param context an operation context - * @return a mechanism to remove the installed service - */ - Consumer install(OperationContext context); }