View Javadoc
1   package net.bmahe.genetics4j.core.selection;
2   
3   import java.util.List;
4   import java.util.Objects;
5   
6   import org.apache.logging.log4j.LogManager;
7   import org.apache.logging.log4j.Logger;
8   
9   import net.bmahe.genetics4j.core.spec.AbstractEAExecutionContext;
10  import net.bmahe.genetics4j.core.spec.selection.SelectionPolicy;
11  
12  public class SelectionPolicyHandlerResolver<T extends Comparable<T>> {
13  	public static final Logger logger = LogManager.getLogger(SelectionPolicyHandlerResolver.class);
14  
15  	private final AbstractEAExecutionContext<T> eaExecutionContext;
16  
17  	private final List<SelectionPolicyHandler<T>> selectionPolicyHandlers;
18  
19  	public SelectionPolicyHandlerResolver(final AbstractEAExecutionContext<T> _eaExecutionContext) {
20  		Objects.requireNonNull(_eaExecutionContext);
21  
22  		this.eaExecutionContext = _eaExecutionContext;
23  		this.selectionPolicyHandlers = eaExecutionContext.selectionPolicyHandlers();
24  	}
25  
26  	public SelectionPolicyHandler<T> resolve(final SelectionPolicy selectionPolicy) {
27  		Objects.requireNonNull(selectionPolicy);
28  
29  		return selectionPolicyHandlers.stream()
30  				.dropWhile(sph -> sph.canHandle(selectionPolicy) == false)
31  				.findFirst()
32  				.orElseThrow(() -> {
33  
34  					if (logger.isDebugEnabled()) {
35  						logger.debug("Could not find suitable selection policy handler for policy {}", selectionPolicy);
36  						logger.debug("Currently known selectionPolicyHandlers: {}", selectionPolicyHandlers);
37  					}
38  
39  					throw new IllegalStateException(
40  							"Could not find suitable selection policy handler for policy: " + selectionPolicy);
41  				});
42  
43  	}
44  }