View Javadoc
1   package net.bmahe.genetics4j.core.combination;
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.chromosome.ChromosomeSpec;
8   import net.bmahe.genetics4j.core.spec.combination.CombinationPolicy;
9   
10  public class ChromosomeCombinatorResolver<T extends Comparable<T>> {
11  
12  	private final AbstractEAExecutionContext<T> eaExecutionContext;
13  	private final List<ChromosomeCombinatorHandler<T>> chromosomeCombinatorHandlers;
14  
15  	public ChromosomeCombinatorResolver(final AbstractEAExecutionContext<T> _eaExecutionContext) {
16  		Objects.requireNonNull(_eaExecutionContext);
17  
18  		this.eaExecutionContext = _eaExecutionContext;
19  		this.chromosomeCombinatorHandlers = eaExecutionContext.chromosomeCombinatorHandlers();
20  	}
21  
22  	public boolean canHandle(final CombinationPolicy combinationPolicy, final ChromosomeSpec chromosome) {
23  		Objects.requireNonNull(combinationPolicy);
24  		Objects.requireNonNull(chromosome);
25  
26  		return chromosomeCombinatorHandlers.stream().anyMatch(cch -> cch.canHandle(this, combinationPolicy, chromosome));
27  
28  	}
29  
30  	public ChromosomeCombinator<T> resolve(final CombinationPolicy combinationPolicy, final ChromosomeSpec chromosome) {
31  		Objects.requireNonNull(combinationPolicy);
32  		Objects.requireNonNull(chromosome);
33  
34  		return chromosomeCombinatorHandlers.stream()
35  				.dropWhile(cch -> cch.canHandle(this, combinationPolicy, chromosome) == false)
36  				.findFirst()
37  				.map(cch -> cch.resolve(this, combinationPolicy, chromosome))
38  				.orElseThrow(
39  						() -> new IllegalStateException(
40  								"Could not find suitable chromosome combination policy handler for policy " + combinationPolicy
41  										+ " and chromosome " + chromosome));
42  	}
43  }