1 package net.bmahe.genetics4j.core.spec.mutation;
2
3 import java.util.Objects;
4
5 import org.apache.commons.lang3.Validate;
6 import org.immutables.value.Value;
7
8 @Value.Immutable
9 public abstract class PartialMutation implements MutationPolicy {
10
11 @Value.Parameter
12 public abstract int chromosomeIndex();
13
14 @Value.Parameter
15 public abstract MutationPolicy mutationPolicy();
16
17 @Value.Check
18 protected void check() {
19 Validate.isTrue(chromosomeIndex() >= 0);
20 Objects.requireNonNull(mutationPolicy());
21 }
22
23 public static PartialMutation of(final int chromosomeIndex, final MutationPolicy mutationPolicy) {
24 return ImmutablePartialMutation.of(chromosomeIndex, mutationPolicy);
25 }
26 }