1 package net.bmahe.genetics4j.core.mutation;
2
3 import java.util.List;
4 import java.util.Objects;
5
6 import net.bmahe.genetics4j.core.spec.AbstractEAExecutionContext;
7 import net.bmahe.genetics4j.core.spec.mutation.MutationPolicy;
8
9 public class MutationPolicyHandlerResolver<T extends Comparable<T>> {
10
11 private final AbstractEAExecutionContext<T> eaExecutionContext;
12 private final List<MutationPolicyHandler<T>> mutationPolicyHandlers;
13
14 public MutationPolicyHandlerResolver(final AbstractEAExecutionContext<T> _eaExecutionContext) {
15 Objects.requireNonNull(_eaExecutionContext);
16
17 this.eaExecutionContext = _eaExecutionContext;
18 mutationPolicyHandlers = eaExecutionContext.mutationPolicyHandlers();
19 }
20
21 public boolean canHandle(final MutationPolicy mutationPolicy) {
22 Objects.requireNonNull(mutationPolicy);
23
24 return mutationPolicyHandlers.stream().anyMatch(sph -> sph.canHandle(this, mutationPolicy));
25 }
26
27 public MutationPolicyHandler<T> resolve(final MutationPolicy mutationPolicy) {
28 Objects.requireNonNull(mutationPolicy);
29
30 return mutationPolicyHandlers.stream()
31 .dropWhile(sph -> sph.canHandle(this, mutationPolicy) == false)
32 .findFirst()
33 .orElseThrow(
34 () -> new IllegalStateException(
35 "Could not find suitable mutation policy handler for policy: " + mutationPolicy));
36
37 }
38 }