55import java .util .Set ;
66import java .util .concurrent .ExecutorService ;
77import java .util .function .Consumer ;
8+ import java .util .function .Function ;
89
910import org .slf4j .Logger ;
1011import org .slf4j .LoggerFactory ;
@@ -40,6 +41,7 @@ public class ConfigurationServiceOverrider {
4041 private Boolean previousAnnotationForDependentResources ;
4142 private Boolean parseResourceVersions ;
4243 private Boolean useSSAToPatchPrimaryResource ;
44+ private Boolean cloneSecondaryResourcesWhenGettingFromCache ;
4345 private DependentResourceFactory dependentResourceFactory ;
4446
4547 ConfigurationServiceOverrider (ConfigurationService original ) {
@@ -180,29 +182,42 @@ public ConfigurationServiceOverrider withUseSSAToPatchPrimaryResource(boolean va
180182 return this ;
181183 }
182184
185+ public ConfigurationServiceOverrider withCloneSecondaryResourcesWhenGettingFromCache (
186+ boolean value ) {
187+ this .cloneSecondaryResourcesWhenGettingFromCache = value ;
188+ return this ;
189+ }
190+
183191 public ConfigurationService build () {
184192 return new BaseConfigurationService (original .getVersion (), cloner , client ) {
185193 @ Override
186194 public Set <String > getKnownReconcilerNames () {
187195 return original .getKnownReconcilerNames ();
188196 }
189197
198+ private <T > T overriddenValueOrDefault (T value ,
199+ Function <ConfigurationService , T > defaultValue ) {
200+ return value != null ? value : defaultValue .apply (original );
201+ }
202+
190203 @ Override
191204 public boolean checkCRDAndValidateLocalModel () {
192- return checkCR != null ? checkCR : original .checkCRDAndValidateLocalModel ();
205+ return overriddenValueOrDefault (checkCR ,
206+ ConfigurationService ::checkCRDAndValidateLocalModel );
193207 }
194208
195209 @ Override
210+ @ SuppressWarnings ("rawtypes" )
196211 public DependentResourceFactory dependentResourceFactory () {
197- return dependentResourceFactory != null ? dependentResourceFactory
198- : DependentResourceFactory . DEFAULT ;
212+ return overriddenValueOrDefault ( dependentResourceFactory ,
213+ ConfigurationService :: dependentResourceFactory ) ;
199214 }
200215
201216 @ Override
202217 public int concurrentReconciliationThreads () {
203218 return Utils .ensureValid (
204- concurrentReconciliationThreads != null ? concurrentReconciliationThreads
205- : original . concurrentReconciliationThreads ( ),
219+ overriddenValueOrDefault ( concurrentReconciliationThreads ,
220+ ConfigurationService :: concurrentReconciliationThreads ),
206221 "maximum reconciliation threads" ,
207222 minimumMaxValueFor (minConcurrentReconciliationThreads ),
208223 original .concurrentReconciliationThreads ());
@@ -211,8 +226,8 @@ public int concurrentReconciliationThreads() {
211226 @ Override
212227 public int concurrentWorkflowExecutorThreads () {
213228 return Utils .ensureValid (
214- concurrentWorkflowExecutorThreads != null ? concurrentWorkflowExecutorThreads
215- : original . concurrentWorkflowExecutorThreads ( ),
229+ overriddenValueOrDefault ( concurrentWorkflowExecutorThreads ,
230+ ConfigurationService :: concurrentWorkflowExecutorThreads ),
216231 "maximum workflow execution threads" ,
217232 minimumMaxValueFor (minConcurrentWorkflowExecutorThreads ),
218233 original .concurrentWorkflowExecutorThreads ());
@@ -224,8 +239,8 @@ public int concurrentWorkflowExecutorThreads() {
224239 @ Deprecated (forRemoval = true )
225240 @ Override
226241 public int minConcurrentReconciliationThreads () {
227- return minConcurrentReconciliationThreads != null ? minConcurrentReconciliationThreads
228- : original . minConcurrentReconciliationThreads ( );
242+ return overriddenValueOrDefault ( minConcurrentReconciliationThreads ,
243+ ConfigurationService :: minConcurrentReconciliationThreads );
229244 }
230245
231246 /**
@@ -234,30 +249,29 @@ public int minConcurrentReconciliationThreads() {
234249 @ Override
235250 @ Deprecated (forRemoval = true )
236251 public int minConcurrentWorkflowExecutorThreads () {
237- return minConcurrentWorkflowExecutorThreads != null ? minConcurrentWorkflowExecutorThreads
238- : original . minConcurrentWorkflowExecutorThreads ( );
252+ return overriddenValueOrDefault ( minConcurrentWorkflowExecutorThreads ,
253+ ConfigurationService :: minConcurrentWorkflowExecutorThreads );
239254 }
240255
241256 @ Override
242257 public Metrics getMetrics () {
243- return metrics != null ? metrics : original . getMetrics ( );
258+ return overriddenValueOrDefault ( metrics , ConfigurationService :: getMetrics );
244259 }
245260
246261 @ Override
247262 public boolean closeClientOnStop () {
248- return closeClientOnStop != null ? closeClientOnStop : original . closeClientOnStop ( );
263+ return overriddenValueOrDefault ( closeClientOnStop , ConfigurationService :: closeClientOnStop );
249264 }
250265
251266 @ Override
252267 public ExecutorService getExecutorService () {
253- return executorService != null ? executorService
254- : super .getExecutorService ();
268+ return overriddenValueOrDefault (executorService , ConfigurationService ::getExecutorService );
255269 }
256270
257271 @ Override
258272 public ExecutorService getWorkflowExecutorService () {
259- return workflowExecutorService != null ? workflowExecutorService
260- : super . getWorkflowExecutorService ( );
273+ return overriddenValueOrDefault ( workflowExecutorService ,
274+ ConfigurationService :: getWorkflowExecutorService );
261275 }
262276
263277 @ Override
@@ -274,54 +288,55 @@ public Optional<InformerStoppedHandler> getInformerStoppedHandler() {
274288
275289 @ Override
276290 public boolean stopOnInformerErrorDuringStartup () {
277- return stopOnInformerErrorDuringStartup != null ? stopOnInformerErrorDuringStartup
278- : super . stopOnInformerErrorDuringStartup ( );
291+ return overriddenValueOrDefault ( stopOnInformerErrorDuringStartup ,
292+ ConfigurationService :: stopOnInformerErrorDuringStartup );
279293 }
280294
281295 @ Override
282296 public Duration cacheSyncTimeout () {
283- return cacheSyncTimeout != null ? cacheSyncTimeout : super . cacheSyncTimeout ( );
297+ return overriddenValueOrDefault ( cacheSyncTimeout , ConfigurationService :: cacheSyncTimeout );
284298 }
285299
286300 @ Override
287301 public ResourceClassResolver getResourceClassResolver () {
288- return resourceClassResolver != null ? resourceClassResolver
289- : super . getResourceClassResolver ( );
302+ return overriddenValueOrDefault ( resourceClassResolver ,
303+ ConfigurationService :: getResourceClassResolver );
290304 }
291305
292306 @ Override
293307 public boolean ssaBasedCreateUpdateMatchForDependentResources () {
294- return ssaBasedCreateUpdateMatchForDependentResources != null
295- ? ssaBasedCreateUpdateMatchForDependentResources
296- : super .ssaBasedCreateUpdateMatchForDependentResources ();
308+ return overriddenValueOrDefault (ssaBasedCreateUpdateMatchForDependentResources ,
309+ ConfigurationService ::ssaBasedCreateUpdateMatchForDependentResources );
297310 }
298311
299312 @ Override
300313 public Set <Class <? extends HasMetadata >> defaultNonSSAResource () {
301- return defaultNonSSAResource != null ? defaultNonSSAResource
302- : super . defaultNonSSAResource ( );
314+ return overriddenValueOrDefault ( defaultNonSSAResource ,
315+ ConfigurationService :: defaultNonSSAResource );
303316 }
304317
305318 @ Override
306319 public boolean previousAnnotationForDependentResourcesEventFiltering () {
307- return previousAnnotationForDependentResources != null
308- ? previousAnnotationForDependentResources
309- : super .previousAnnotationForDependentResourcesEventFiltering ();
320+ return overriddenValueOrDefault (previousAnnotationForDependentResources ,
321+ ConfigurationService ::previousAnnotationForDependentResourcesEventFiltering );
310322 }
311323
312324 @ Override
313325 public boolean parseResourceVersionsForEventFilteringAndCaching () {
314- return parseResourceVersions != null
315- ? parseResourceVersions
316- : super .parseResourceVersionsForEventFilteringAndCaching ();
326+ return overriddenValueOrDefault (parseResourceVersions ,
327+ ConfigurationService ::parseResourceVersionsForEventFilteringAndCaching );
317328 }
318329
319330 @ Override
320331 public boolean useSSAToPatchPrimaryResource () {
321- return useSSAToPatchPrimaryResource != null
322- ? useSSAToPatchPrimaryResource
323- : super . useSSAToPatchPrimaryResource ();
332+ return overriddenValueOrDefault ( useSSAToPatchPrimaryResource ,
333+ ConfigurationService :: useSSAToPatchPrimaryResource );
334+ }
324335
336+ @ Override
337+ public boolean cloneSecondaryResourcesWhenGettingFromCache () {
338+ return overriddenValueOrDefault (cloneSecondaryResourcesWhenGettingFromCache ,
339+ ConfigurationService ::cloneSecondaryResourcesWhenGettingFromCache );
325340 }
326341 };
327342 }
0 commit comments