77import io .fabric8 .kubernetes .api .model .HasMetadata ;
88import io .javaoperatorsdk .operator .api .config .ConfigurationService ;
99import io .javaoperatorsdk .operator .api .config .DefaultResourceConfiguration ;
10+ import io .javaoperatorsdk .operator .api .reconciler .EventSourceContext ;
1011import io .javaoperatorsdk .operator .processing .event .ResourceID ;
1112import io .javaoperatorsdk .operator .processing .event .source .AssociatedSecondaryResourceIdentifier ;
1213import io .javaoperatorsdk .operator .processing .event .source .PrimaryResourcesRetriever ;
@@ -18,23 +19,7 @@ public class InformerConfiguration<R extends HasMetadata, P extends HasMetadata>
1819 private final AssociatedSecondaryResourceIdentifier <P > associatedWith ;
1920 private final boolean skipUpdateEventPropagationIfNoChange ;
2021
21- public InformerConfiguration (ConfigurationService service , String labelSelector ,
22- Class <R > resourceClass , String ... namespaces ) {
23- this (service , labelSelector , resourceClass , Mappers .fromOwnerReference (), null , true ,
24- namespaces );
25- }
26-
27- public InformerConfiguration (ConfigurationService service , String labelSelector ,
28- Class <R > resourceClass ,
29- PrimaryResourcesRetriever <R > secondaryToPrimaryResourcesIdSet ,
30- AssociatedSecondaryResourceIdentifier <P > associatedWith ,
31- boolean skipUpdateEventPropagationIfNoChange , String ... namespaces ) {
32- this (service , labelSelector , resourceClass , secondaryToPrimaryResourcesIdSet , associatedWith ,
33- skipUpdateEventPropagationIfNoChange ,
34- namespaces != null ? Set .of (namespaces ) : Collections .emptySet ());
35- }
36-
37- public InformerConfiguration (ConfigurationService service , String labelSelector ,
22+ private InformerConfiguration (ConfigurationService service , String labelSelector ,
3823 Class <R > resourceClass ,
3924 PrimaryResourcesRetriever <R > secondaryToPrimaryResourcesIdSet ,
4025 AssociatedSecondaryResourceIdentifier <P > associatedWith ,
@@ -59,4 +44,89 @@ public AssociatedSecondaryResourceIdentifier<P> getAssociatedResourceIdentifier(
5944 public boolean isSkipUpdateEventPropagationIfNoChange () {
6045 return skipUpdateEventPropagationIfNoChange ;
6146 }
47+
48+ public static class InformerConfigurationBuilder <R extends HasMetadata , P extends HasMetadata > {
49+
50+ private PrimaryResourcesRetriever <R > secondaryToPrimaryResourcesIdSet ;
51+ private AssociatedSecondaryResourceIdentifier <P > associatedWith ;
52+ private boolean skipUpdateEventPropagationIfNoChange = true ;
53+ private Set <String > namespaces ;
54+ private String labelSelector ;
55+ private final Class <R > resourceClass ;
56+ private final ConfigurationService configurationService ;
57+
58+ private InformerConfigurationBuilder (Class <R > resourceClass ,
59+ ConfigurationService configurationService ) {
60+ this .resourceClass = resourceClass ;
61+ this .configurationService = configurationService ;
62+ }
63+
64+ public InformerConfigurationBuilder <R , P > withPrimaryResourcesRetriever (
65+ PrimaryResourcesRetriever <R > primaryResourcesRetriever ) {
66+ this .secondaryToPrimaryResourcesIdSet = primaryResourcesRetriever ;
67+ return this ;
68+ }
69+
70+ public InformerConfigurationBuilder <R , P > withAssociatedSecondaryResourceIdentifier (
71+ AssociatedSecondaryResourceIdentifier <P > associatedWith ) {
72+ this .associatedWith = associatedWith ;
73+ return this ;
74+ }
75+
76+ public InformerConfigurationBuilder <R , P > withoutSkippingEventPropagationIfUnchanged () {
77+ this .skipUpdateEventPropagationIfNoChange = false ;
78+ return this ;
79+ }
80+
81+ public InformerConfigurationBuilder <R , P > skippingEventPropagationIfUnchanged (
82+ boolean skipIfUnchanged ) {
83+ this .skipUpdateEventPropagationIfNoChange = skipIfUnchanged ;
84+ return this ;
85+ }
86+
87+ public InformerConfigurationBuilder <R , P > withNamespaces (String ... namespaces ) {
88+ this .namespaces = namespaces != null ? Set .of (namespaces ) : Collections .emptySet ();
89+ return this ;
90+ }
91+
92+ public InformerConfigurationBuilder <R , P > withNamespaces (Set <String > namespaces ) {
93+ this .namespaces = namespaces != null ? namespaces : Collections .emptySet ();
94+ return this ;
95+ }
96+
97+
98+ public InformerConfigurationBuilder <R , P > withLabelSelector (String labelSelector ) {
99+ this .labelSelector = labelSelector ;
100+ return this ;
101+ }
102+
103+ public InformerConfiguration <R , P > build () {
104+ return new InformerConfiguration <>(configurationService , labelSelector , resourceClass ,
105+ secondaryToPrimaryResourcesIdSet , associatedWith , skipUpdateEventPropagationIfNoChange ,
106+ namespaces );
107+ }
108+ }
109+
110+ public static <R extends HasMetadata , P extends HasMetadata > InformerConfigurationBuilder <R , P > from (
111+ EventSourceContext <P > context , Class <R > resourceClass ) {
112+ return new InformerConfigurationBuilder <>(resourceClass , context .getConfigurationService ());
113+ }
114+
115+ public static InformerConfigurationBuilder from (ConfigurationService configurationService ,
116+ Class resourceClass ) {
117+ return new InformerConfigurationBuilder <>(resourceClass , configurationService );
118+ }
119+
120+ public static <R extends HasMetadata , P extends HasMetadata > InformerConfigurationBuilder <R , P > from (
121+ InformerConfiguration <R , P > configuration ) {
122+ return new InformerConfigurationBuilder <R , P >(configuration .getResourceClass (),
123+ configuration .getConfigurationService ())
124+ .withNamespaces (configuration .getNamespaces ())
125+ .withLabelSelector (configuration .getLabelSelector ())
126+ .skippingEventPropagationIfUnchanged (
127+ configuration .isSkipUpdateEventPropagationIfNoChange ())
128+ .withAssociatedSecondaryResourceIdentifier (
129+ configuration .getAssociatedResourceIdentifier ())
130+ .withPrimaryResourcesRetriever (configuration .getPrimaryResourcesRetriever ());
131+ }
62132}
0 commit comments