package org.infinispan.server.endpoint.subsystem; import static org.infinispan.server.endpoint.subsystem.ModelNodeUtils.contains; import java.util.List; import java.util.stream.Collectors; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; import org.jboss.as.controller.OperationStepHandler; import org.jboss.as.controller.PathAddress; import org.jboss.as.controller.registry.Resource; import org.jboss.as.controller.registry.Resource.ResourceEntry; import org.jboss.dmr.ModelNode; /** * This handler inspects all endpoint resources to check if a one or more caches are being ignored. * * @author gustavonalle * @since 9.0 */ public class CacheIgnoreStatusHandler implements OperationStepHandler { public static final CacheIgnoreStatusHandler INSTANCE = new CacheIgnoreStatusHandler(); private CacheIgnoreStatusHandler() { } @Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { final ModelNode ignoreSummary = new ModelNode(); final ModelNode cacheNames = operation.get(ModelKeys.CACHE_NAMES); Resource endpointResource = context.readResource(PathAddress.EMPTY_ADDRESS); List<ResourceEntry> endpoints = endpointResource.getChildTypes().stream() .flatMap(type -> endpointResource.getChildren(type).stream()).collect(Collectors.toList()); cacheNames.asList().stream().map(ModelNode::asString).forEach(cacheName -> { boolean ignoredAllEndpoints = endpoints.stream() .map(endpoint -> endpoint.getModel().get(ModelKeys.IGNORED_CACHES)) .allMatch(ignoredList -> contains(ignoredList, cacheName)); ignoreSummary.get(cacheName).set(ignoredAllEndpoints); }); context.getResult().set(ignoreSummary); } }