package com.xfestudio.xfeservermanager.core.policy;
import com.xfestudio.xfeservermanager.api.policy.DecisionEffect;
import com.xfestudio.xfeservermanager.api.policy.PolicyDecision;
import com.xfestudio.xfeservermanager.api.policy.PolicyEvaluationContext;
import com.xfestudio.xfeservermanager.api.policy.PolicySnapshot;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
public final class PolicySimulator {
public PolicySimulationResult simulate(PolicySnapshot snapshot, List<PolicyEvaluationContext> invocations) {
Objects.requireNonNull(snapshot, "snapshot");
Objects.requireNonNull(invocations, "invocations");
CommandPolicyEngine engine = new CommandPolicyEngine(() -> snapshot);
List<PolicyDecision> decisions = invocations.stream().map(engine::evaluate).toList();
Map<DecisionEffect, Long> counts = decisions.stream()
.collect(Collectors.groupingBy(
PolicyDecision::effect,
() -> new EnumMap<>(DecisionEffect.class),
Collectors.counting()));
return new PolicySimulationResult(snapshot.version(), decisions, counts);
}
}
package com.xfestudio.xfeservermanager.core.policy;
import com.xfestudio.xfeservermanager.api.policy.DecisionEffect;
import com.xfestudio.xfeservermanager.api.policy.PolicyDecision;
import com.xfestudio.xfeservermanager.api.policy.PolicyEvaluationContext;
import com.xfestudio.xfeservermanager.api.policy.PolicySnapshot;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
public final class PolicySimulator {
public PolicySimulationResult simulate(PolicySnapshot snapshot, List<PolicyEvaluationContext> invocations) {
Objects.requireNonNull(snapshot, "snapshot");
Objects.requireNonNull(invocations, "invocations");
CommandPolicyEngine engine = new CommandPolicyEngine(() -> snapshot);
List<PolicyDecision> decisions = invocations.stream().map(engine::evaluate).toList();
Map<DecisionEffect, Long> counts = decisions.stream()
.collect(Collectors.groupingBy(
PolicyDecision::effect,
() -> new EnumMap<>(DecisionEffect.class),
Collectors.counting()));
return new PolicySimulationResult(snapshot.version(), decisions, counts);
}
}