Skip to content

Commit 2c089c8

Browse files
committed
feat: explicit interfaces for filters (#1333)
1 parent ba01088 commit 2c089c8

28 files changed

+259
-187
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AnnotationControllerConfiguration.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
import java.util.List;
1111
import java.util.Optional;
1212
import java.util.Set;
13-
import java.util.function.BiPredicate;
1413
import java.util.function.Function;
15-
import java.util.function.Predicate;
1614
import java.util.stream.Collectors;
1715

1816
import io.fabric8.kubernetes.api.model.HasMetadata;
@@ -32,10 +30,7 @@
3230
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
3331
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilter;
3432
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilters;
35-
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidGenericFilter;
36-
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidOnAddFilter;
37-
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidOnDeleteFilter;
38-
import io.javaoperatorsdk.operator.processing.event.source.filter.VoidOnUpdateFilter;
33+
import io.javaoperatorsdk.operator.processing.event.source.filter.*;
3934
import io.javaoperatorsdk.operator.processing.retry.Retry;
4035

4136
import static io.javaoperatorsdk.operator.api.reconciler.Constants.DEFAULT_NAMESPACES_SET;
@@ -194,8 +189,8 @@ private <T> T instantiateAndConfigureIfNeeded(Class<? extends T> targetClass,
194189

195190
@Override
196191
@SuppressWarnings("unchecked")
197-
public Optional<Predicate<P>> onAddFilter() {
198-
return (Optional<Predicate<P>>) createFilter(annotation.onAddFilter(), FilterType.onAdd,
192+
public Optional<OnAddFilter<P>> onAddFilter() {
193+
return (Optional<OnAddFilter<P>>) createFilter(annotation.onAddFilter(), FilterType.onAdd,
199194
annotation.getClass().getSimpleName());
200195
}
201196

@@ -229,15 +224,15 @@ private <T> Optional<T> createFilter(Class<T> filter, FilterType filterType, Str
229224

230225
@SuppressWarnings("unchecked")
231226
@Override
232-
public Optional<BiPredicate<P, P>> onUpdateFilter() {
233-
return (Optional<BiPredicate<P, P>>) createFilter(annotation.onUpdateFilter(),
227+
public Optional<OnUpdateFilter<P>> onUpdateFilter() {
228+
return (Optional<OnUpdateFilter<P>>) createFilter(annotation.onUpdateFilter(),
234229
FilterType.onUpdate, annotation.getClass().getSimpleName());
235230
}
236231

237232
@SuppressWarnings("unchecked")
238233
@Override
239-
public Optional<Predicate<P>> genericFilter() {
240-
return (Optional<Predicate<P>>) createFilter(annotation.genericFilter(),
234+
public Optional<GenericFilter<P>> genericFilter() {
235+
return (Optional<GenericFilter<P>>) createFilter(annotation.genericFilter(),
241236
FilterType.generic, annotation.getClass().getSimpleName());
242237
}
243238

@@ -310,10 +305,10 @@ private Object createKubernetesResourceConfig(Class<? extends DependentResource>
310305
var namespaces = getNamespaces();
311306
var configuredNS = false;
312307
String labelSelector = null;
313-
Predicate<? extends HasMetadata> onAddFilter = null;
314-
BiPredicate<? extends HasMetadata, ? extends HasMetadata> onUpdateFilter = null;
315-
BiPredicate<? extends HasMetadata, Boolean> onDeleteFilter = null;
316-
Predicate<? extends HasMetadata> genericFilter = null;
308+
OnAddFilter<? extends HasMetadata> onAddFilter = null;
309+
OnUpdateFilter<? extends HasMetadata> onUpdateFilter = null;
310+
OnDeleteFilter<? extends HasMetadata> onDeleteFilter = null;
311+
GenericFilter<? extends HasMetadata> genericFilter = null;
317312
if (kubeDependent != null) {
318313
if (!Arrays.equals(KubernetesDependent.DEFAULT_NAMESPACES,
319314
kubeDependent.namespaces())) {

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverrider.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import java.util.List;
77
import java.util.Optional;
88
import java.util.Set;
9-
import java.util.function.BiPredicate;
109
import java.util.function.Predicate;
1110
import java.util.stream.Collectors;
1211

@@ -15,6 +14,9 @@
1514
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResourceConfig;
1615
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
1716
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilter;
17+
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
18+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
19+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
1820
import io.javaoperatorsdk.operator.processing.retry.GenericRetry;
1921
import io.javaoperatorsdk.operator.processing.retry.Retry;
2022

@@ -33,9 +35,9 @@ public class ControllerConfigurationOverrider<R extends HasMetadata> {
3335
private final ControllerConfiguration<R> original;
3436
private Duration reconciliationMaxInterval;
3537
private final LinkedHashMap<String, DependentResourceSpec> namedDependentResourceSpecs;
36-
private Predicate<R> onAddFilter;
37-
private BiPredicate<R, R> onUpdateFilter;
38-
private Predicate<R> genericFilter;
38+
private OnAddFilter<R> onAddFilter;
39+
private OnUpdateFilter<R> onUpdateFilter;
40+
private GenericFilter<R> genericFilter;
3941
private RateLimiter rateLimiter;
4042

4143
private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
@@ -142,17 +144,17 @@ public ControllerConfigurationOverrider<R> withReconciliationMaxInterval(
142144
return this;
143145
}
144146

145-
public ControllerConfigurationOverrider<R> withOnAddFilter(Predicate<R> onAddFilter) {
147+
public ControllerConfigurationOverrider<R> withOnAddFilter(OnAddFilter<R> onAddFilter) {
146148
this.onAddFilter = onAddFilter;
147149
return this;
148150
}
149151

150-
public ControllerConfigurationOverrider<R> withOnUpdateFilter(BiPredicate<R, R> onUpdateFilter) {
152+
public ControllerConfigurationOverrider<R> withOnUpdateFilter(OnUpdateFilter<R> onUpdateFilter) {
151153
this.onUpdateFilter = onUpdateFilter;
152154
return this;
153155
}
154156

155-
public ControllerConfigurationOverrider<R> withGenericFilter(Predicate<R> genericFilter) {
157+
public ControllerConfigurationOverrider<R> withGenericFilter(GenericFilter<R> genericFilter) {
156158
this.genericFilter = genericFilter;
157159
return this;
158160
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/DefaultControllerConfiguration.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55
import java.util.List;
66
import java.util.Optional;
77
import java.util.Set;
8-
import java.util.function.BiPredicate;
9-
import java.util.function.Predicate;
108

119
import io.fabric8.kubernetes.api.model.HasMetadata;
1210
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
1311
import io.javaoperatorsdk.operator.processing.event.rate.LinearRateLimiter;
1412
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
1513
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilter;
14+
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
15+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
16+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
1617
import io.javaoperatorsdk.operator.processing.retry.Retry;
1718

1819
@SuppressWarnings("rawtypes")
@@ -44,9 +45,9 @@ public DefaultControllerConfiguration(
4445
ResourceEventFilter<R> resourceEventFilter,
4546
Class<R> resourceClass,
4647
Duration reconciliationMaxInterval,
47-
Predicate<R> onAddFilter,
48-
BiPredicate<R, R> onUpdateFilter,
49-
Predicate<R> genericFilter,
48+
OnAddFilter<R> onAddFilter,
49+
OnUpdateFilter<R> onUpdateFilter,
50+
GenericFilter<R> genericFilter,
5051
RateLimiter rateLimiter,
5152
List<DependentResourceSpec> dependents) {
5253
super(labelSelector, resourceClass, onAddFilter, onUpdateFilter, genericFilter, namespaces);

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/DefaultResourceConfiguration.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
import java.util.Optional;
44
import java.util.Set;
5-
import java.util.function.BiPredicate;
6-
import java.util.function.Predicate;
75

86
import io.fabric8.kubernetes.api.model.HasMetadata;
7+
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
8+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
9+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
910

1011
import static io.javaoperatorsdk.operator.api.reconciler.Constants.DEFAULT_NAMESPACES_SET;
1112

@@ -15,21 +16,21 @@ public class DefaultResourceConfiguration<R extends HasMetadata>
1516
private final String labelSelector;
1617
private final Set<String> namespaces;
1718
private final Class<R> resourceClass;
18-
private final Predicate<R> onAddFilter;
19-
private final BiPredicate<R, R> onUpdateFilter;
20-
private final Predicate<R> genericFilter;
19+
private final OnAddFilter<R> onAddFilter;
20+
private final OnUpdateFilter<R> onUpdateFilter;
21+
private final GenericFilter<R> genericFilter;
2122

2223
public DefaultResourceConfiguration(String labelSelector, Class<R> resourceClass,
23-
Predicate<R> onAddFilter,
24-
BiPredicate<R, R> onUpdateFilter, Predicate<R> genericFilter, String... namespaces) {
24+
OnAddFilter<R> onAddFilter,
25+
OnUpdateFilter<R> onUpdateFilter, GenericFilter<R> genericFilter, String... namespaces) {
2526
this(labelSelector, resourceClass, onAddFilter, onUpdateFilter, genericFilter,
2627
namespaces == null || namespaces.length == 0 ? DEFAULT_NAMESPACES_SET
2728
: Set.of(namespaces));
2829
}
2930

3031
public DefaultResourceConfiguration(String labelSelector, Class<R> resourceClass,
31-
Predicate<R> onAddFilter,
32-
BiPredicate<R, R> onUpdateFilter, Predicate<R> genericFilter, Set<String> namespaces) {
32+
OnAddFilter<R> onAddFilter,
33+
OnUpdateFilter<R> onUpdateFilter, GenericFilter<R> genericFilter, Set<String> namespaces) {
3334
this.labelSelector = labelSelector;
3435
this.resourceClass = resourceClass;
3536
this.onAddFilter = onAddFilter;
@@ -61,16 +62,16 @@ public Class<R> getResourceClass() {
6162
}
6263

6364
@Override
64-
public Optional<Predicate<R>> onAddFilter() {
65+
public Optional<OnAddFilter<R>> onAddFilter() {
6566
return Optional.ofNullable(onAddFilter);
6667
}
6768

6869
@Override
69-
public Optional<BiPredicate<R, R>> onUpdateFilter() {
70+
public Optional<OnUpdateFilter<R>> onUpdateFilter() {
7071
return Optional.ofNullable(onUpdateFilter);
7172
}
7273

73-
public Optional<Predicate<R>> genericFilter() {
74+
public Optional<GenericFilter<R>> genericFilter() {
7475
return Optional.ofNullable(genericFilter);
7576
}
7677
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResourceConfiguration.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
import java.util.Collections;
44
import java.util.Optional;
55
import java.util.Set;
6-
import java.util.function.BiPredicate;
7-
import java.util.function.Predicate;
86

97
import io.fabric8.kubernetes.api.model.HasMetadata;
108
import io.javaoperatorsdk.operator.OperatorException;
119
import io.javaoperatorsdk.operator.ReconcilerUtils;
1210
import io.javaoperatorsdk.operator.api.reconciler.Constants;
11+
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
12+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
13+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
1314

1415
import static io.javaoperatorsdk.operator.api.reconciler.Constants.DEFAULT_NAMESPACES_SET;
1516
import static io.javaoperatorsdk.operator.api.reconciler.Constants.WATCH_CURRENT_NAMESPACE_SET;
@@ -20,15 +21,15 @@ default String getResourceTypeName() {
2021
return ReconcilerUtils.getResourceTypeName(getResourceClass());
2122
}
2223

23-
default Optional<Predicate<R>> onAddFilter() {
24+
default Optional<OnAddFilter<R>> onAddFilter() {
2425
return Optional.empty();
2526
}
2627

27-
default Optional<BiPredicate<R, R>> onUpdateFilter() {
28+
default Optional<OnUpdateFilter<R>> onUpdateFilter() {
2829
return Optional.empty();
2930
}
3031

31-
default Optional<Predicate<R>> genericFilter() {
32+
default Optional<GenericFilter<R>> genericFilter() {
3233
return Optional.empty();
3334
}
3435

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerConfiguration.java

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import java.util.Objects;
44
import java.util.Optional;
55
import java.util.Set;
6-
import java.util.function.BiPredicate;
7-
import java.util.function.Predicate;
86

97
import io.fabric8.kubernetes.api.model.HasMetadata;
108
import io.javaoperatorsdk.operator.api.config.DefaultResourceConfiguration;
@@ -13,6 +11,10 @@
1311
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
1412
import io.javaoperatorsdk.operator.processing.event.source.PrimaryToSecondaryMapper;
1513
import io.javaoperatorsdk.operator.processing.event.source.SecondaryToPrimaryMapper;
14+
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
15+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
16+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter;
17+
import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter;
1618
import io.javaoperatorsdk.operator.processing.event.source.informer.Mappers;
1719

1820
import static io.javaoperatorsdk.operator.api.reconciler.Constants.DEFAULT_NAMESPACES_SET;
@@ -26,17 +28,17 @@ class DefaultInformerConfiguration<R extends HasMetadata> extends
2628
private final PrimaryToSecondaryMapper<?> primaryToSecondaryMapper;
2729
private final SecondaryToPrimaryMapper<R> secondaryToPrimaryMapper;
2830
private final boolean followControllerNamespaceChanges;
29-
private final BiPredicate<R, Boolean> onDeleteFilter;
31+
private final OnDeleteFilter<R> onDeleteFilter;
3032

3133
protected DefaultInformerConfiguration(String labelSelector,
3234
Class<R> resourceClass,
3335
PrimaryToSecondaryMapper<?> primaryToSecondaryMapper,
3436
SecondaryToPrimaryMapper<R> secondaryToPrimaryMapper,
3537
Set<String> namespaces, boolean followControllerNamespaceChanges,
36-
Predicate<R> onAddFilter,
37-
BiPredicate<R, R> onUpdateFilter,
38-
BiPredicate<R, Boolean> onDeleteFilter,
39-
Predicate<R> genericFilter) {
38+
OnAddFilter<R> onAddFilter,
39+
OnUpdateFilter<R> onUpdateFilter,
40+
OnDeleteFilter<R> onDeleteFilter,
41+
GenericFilter<R> genericFilter) {
4042
super(labelSelector, resourceClass, onAddFilter, onUpdateFilter, genericFilter, namespaces);
4143
this.followControllerNamespaceChanges = followControllerNamespaceChanges;
4244

@@ -57,7 +59,7 @@ public SecondaryToPrimaryMapper<R> getSecondaryToPrimaryMapper() {
5759
return secondaryToPrimaryMapper;
5860
}
5961

60-
public Optional<BiPredicate<R, Boolean>> onDeleteFilter() {
62+
public Optional<OnDeleteFilter<R>> onDeleteFilter() {
6163
return Optional.ofNullable(onDeleteFilter);
6264
}
6365

@@ -77,13 +79,13 @@ public <P extends HasMetadata> PrimaryToSecondaryMapper<P> getPrimaryToSecondary
7779

7880
SecondaryToPrimaryMapper<R> getSecondaryToPrimaryMapper();
7981

80-
Optional<Predicate<R>> onAddFilter();
82+
Optional<OnAddFilter<R>> onAddFilter();
8183

82-
Optional<BiPredicate<R, R>> onUpdateFilter();
84+
Optional<OnUpdateFilter<R>> onUpdateFilter();
8385

84-
Optional<BiPredicate<R, Boolean>> onDeleteFilter();
86+
Optional<OnDeleteFilter<R>> onDeleteFilter();
8587

86-
Optional<Predicate<R>> genericFilter();
88+
Optional<GenericFilter<R>> genericFilter();
8789

8890
<P extends HasMetadata> PrimaryToSecondaryMapper<P> getPrimaryToSecondaryMapper();
8991

@@ -95,10 +97,10 @@ class InformerConfigurationBuilder<R extends HasMetadata> {
9597
private Set<String> namespaces;
9698
private String labelSelector;
9799
private final Class<R> resourceClass;
98-
private Predicate<R> onAddFilter;
99-
private BiPredicate<R, R> onUpdateFilter;
100-
private BiPredicate<R, Boolean> onDeleteFilter;
101-
private Predicate<R> genericFilter;
100+
private OnAddFilter<R> onAddFilter;
101+
private OnUpdateFilter<R> onUpdateFilter;
102+
private OnDeleteFilter<R> onDeleteFilter;
103+
private GenericFilter<R> genericFilter;
102104
private boolean inheritControllerNamespacesOnChange = false;
103105

104106
private InformerConfigurationBuilder(Class<R> resourceClass) {
@@ -179,23 +181,23 @@ public InformerConfigurationBuilder<R> withLabelSelector(String labelSelector) {
179181
return this;
180182
}
181183

182-
public InformerConfigurationBuilder<R> withOnAddFilter(Predicate<R> onAddFilter) {
184+
public InformerConfigurationBuilder<R> withOnAddFilter(OnAddFilter<R> onAddFilter) {
183185
this.onAddFilter = onAddFilter;
184186
return this;
185187
}
186188

187-
public InformerConfigurationBuilder<R> withOnUpdateFilter(BiPredicate<R, R> onUpdateFilter) {
189+
public InformerConfigurationBuilder<R> withOnUpdateFilter(OnUpdateFilter<R> onUpdateFilter) {
188190
this.onUpdateFilter = onUpdateFilter;
189191
return this;
190192
}
191193

192194
public InformerConfigurationBuilder<R> withOnDeleteFilter(
193-
BiPredicate<R, Boolean> onDeleteFilter) {
195+
OnDeleteFilter<R> onDeleteFilter) {
194196
this.onDeleteFilter = onDeleteFilter;
195197
return this;
196198
}
197199

198-
public InformerConfigurationBuilder<R> withGenericFilter(Predicate<R> genericFilter) {
200+
public InformerConfigurationBuilder<R> withGenericFilter(GenericFilter<R> genericFilter) {
199201
this.genericFilter = genericFilter;
200202
return this;
201203
}

0 commit comments

Comments
 (0)