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 }