View Javadoc
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  }