From bc4382c56a54da9ac1a05b56c6b8e5580b06bbed Mon Sep 17 00:00:00 2001
From: csviri <csviri@gmail.com>
Date: Mon, 29 May 2023 09:52:04 +0200
Subject: [PATCH 1/5] improve: PerResourcePollingEventSource init improvements

---
 .../PerResourcePollingDependentResource.java  |  6 ++-
 .../PerResourcePollingEventSource.java        | 46 ++++++++++++++++++-
 .../PerResourcePollingEventSourceTest.java    | 15 +++---
 .../ExternalStateReconciler.java              |  3 +-
 ...ourcePollingEventSourceTestReconciler.java |  3 +-
 5 files changed, 61 insertions(+), 12 deletions(-)

diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PerResourcePollingDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PerResourcePollingDependentResource.java
index f495f5f316..affc63cfd3 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PerResourcePollingDependentResource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PerResourcePollingDependentResource.java
@@ -1,5 +1,7 @@
 package io.javaoperatorsdk.operator.processing.dependent.external;
 
+import java.time.Duration;
+
 import io.fabric8.kubernetes.api.model.HasMetadata;
 import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
 import io.javaoperatorsdk.operator.api.reconciler.Ignore;
@@ -23,8 +25,8 @@ public PerResourcePollingDependentResource(Class<R> resourceType, long pollingPe
   @Override
   protected ExternalResourceCachingEventSource<R, P> createEventSource(
       EventSourceContext<P> context) {
-    return new PerResourcePollingEventSource<>(this, context.getPrimaryCache(),
-        getPollingPeriod(), resourceType(), this);
+    return new PerResourcePollingEventSource<>(this, context,
+        Duration.ofMillis(getPollingPeriod()), resourceType(), this);
   }
 
 }
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
index 7b02f7e43e..06c4cb8948 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
@@ -10,6 +10,7 @@
 
 import io.fabric8.kubernetes.api.model.HasMetadata;
 import io.javaoperatorsdk.operator.OperatorException;
+import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
 import io.javaoperatorsdk.operator.processing.event.ResourceID;
 import io.javaoperatorsdk.operator.processing.event.source.Cache;
 import io.javaoperatorsdk.operator.processing.event.source.CacheKeyMapper;
@@ -43,19 +44,49 @@ public class PerResourcePollingEventSource<R, P extends HasMetadata>
   private final long period;
   private final Set<ResourceID> fetchedForPrimaries = ConcurrentHashMap.newKeySet();
 
+  public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
+      EventSourceContext<P> context, Duration defaultPollingPeriod,
+      Class<R> resourceClass) {
+    this(resourceFetcher, context.getPrimaryCache(), defaultPollingPeriod.toMillis(),
+        null, resourceClass,
+        CacheKeyMapper.singleResourceCacheKeyMapper());
+  }
 
+  @Deprecated
   public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
       Cache<P> resourceCache, long period, Class<R> resourceClass) {
     this(resourceFetcher, resourceCache, period, null, resourceClass,
         CacheKeyMapper.singleResourceCacheKeyMapper());
   }
 
+  public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
+      EventSourceContext<P> context,
+      Duration defaultPollingPeriod,
+      Class<R> resourceClass,
+      CacheKeyMapper<R> cacheKeyMapper) {
+    this(resourceFetcher, context.getPrimaryCache(), defaultPollingPeriod.toMillis(),
+        null, resourceClass, cacheKeyMapper);
+  }
+
+  @Deprecated
   public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
       Cache<P> resourceCache, long period, Class<R> resourceClass,
       CacheKeyMapper<R> cacheKeyMapper) {
     this(resourceFetcher, resourceCache, period, null, resourceClass, cacheKeyMapper);
   }
 
+  public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
+      EventSourceContext<P> context,
+      Duration defaultPollingPeriod,
+      Predicate<P> registerPredicate,
+      Class<R> resourceClass,
+      CacheKeyMapper<R> cacheKeyMapper) {
+    this(resourceFetcher, context.getPrimaryCache(), defaultPollingPeriod.toMillis(),
+        registerPredicate, resourceClass, cacheKeyMapper,
+        new ScheduledThreadPoolExecutor(DEFAULT_EXECUTOR_THREAD_NUMBER));
+  }
+
+  @Deprecated
   public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
       Cache<P> resourceCache, long period,
       Predicate<P> registerPredicate, Class<R> resourceClass,
@@ -64,7 +95,20 @@ public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
         new ScheduledThreadPoolExecutor(DEFAULT_EXECUTOR_THREAD_NUMBER));
   }
 
-  public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
+
+  public PerResourcePollingEventSource(
+      ResourceFetcher<R, P> resourceFetcher,
+      EventSourceContext<P> context, Duration defaultPollingPeriod,
+      Predicate<P> registerPredicate, Class<R> resourceClass,
+      CacheKeyMapper<R> cacheKeyMapper, ScheduledExecutorService executorService) {
+    this(resourceFetcher, context.getPrimaryCache(), defaultPollingPeriod.toMillis(),
+        registerPredicate,
+        resourceClass, cacheKeyMapper, executorService);
+  }
+
+  @Deprecated
+  public PerResourcePollingEventSource(
+      ResourceFetcher<R, P> resourceFetcher,
       Cache<P> resourceCache, long period,
       Predicate<P> registerPredicate, Class<R> resourceClass,
       CacheKeyMapper<R> cacheKeyMapper, ScheduledExecutorService executorService) {
diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSourceTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSourceTest.java
index 02f173da2b..70249f6125 100644
--- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSourceTest.java
+++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSourceTest.java
@@ -9,11 +9,9 @@
 import org.junit.jupiter.api.Test;
 
 import io.javaoperatorsdk.operator.TestUtils;
+import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
 import io.javaoperatorsdk.operator.processing.event.EventHandler;
-import io.javaoperatorsdk.operator.processing.event.source.AbstractEventSourceTestBase;
-import io.javaoperatorsdk.operator.processing.event.source.Cache;
-import io.javaoperatorsdk.operator.processing.event.source.CacheKeyMapper;
-import io.javaoperatorsdk.operator.processing.event.source.SampleExternalResource;
+import io.javaoperatorsdk.operator.processing.event.source.*;
 import io.javaoperatorsdk.operator.sample.simple.TestCustomResource;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -35,16 +33,19 @@ class PerResourcePollingEventSourceTest extends
   private final PerResourcePollingEventSource.ResourceFetcher<SampleExternalResource, TestCustomResource> supplier =
       mock(PerResourcePollingEventSource.ResourceFetcher.class);
   @SuppressWarnings("unchecked")
-  private final Cache<TestCustomResource> resourceCache = mock(Cache.class);
+  private final IndexerResourceCache<TestCustomResource> resourceCache =
+      mock(IndexerResourceCache.class);
   private final TestCustomResource testCustomResource = TestUtils.testCustomResource();
+  private final EventSourceContext<TestCustomResource> context = mock(EventSourceContext.class);
 
   @BeforeEach
   public void setup() {
     when(resourceCache.get(any())).thenReturn(Optional.of(testCustomResource));
     when(supplier.fetchResources(any()))
         .thenReturn(Set.of(SampleExternalResource.testResource1()));
+    when(context.getPrimaryCache()).thenReturn(resourceCache);
 
-    setUpSource(new PerResourcePollingEventSource<>(supplier, resourceCache, PERIOD,
+    setUpSource(new PerResourcePollingEventSource<>(supplier, context, Duration.ofMillis(PERIOD),
         SampleExternalResource.class, r -> r.getName() + "#" + r.getValue()));
   }
 
@@ -61,7 +62,7 @@ void pollsTheResourceAfterAwareOfIt() {
 
   @Test
   void registeringTaskOnAPredicate() {
-    setUpSource(new PerResourcePollingEventSource<>(supplier, resourceCache, PERIOD,
+    setUpSource(new PerResourcePollingEventSource<>(supplier, context, Duration.ofMillis(PERIOD),
         testCustomResource -> testCustomResource.getMetadata().getGeneration() > 1,
         SampleExternalResource.class, CacheKeyMapper.singleResourceCacheKeyMapper()));
     source.onResourceCreated(testCustomResource);
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/ExternalStateReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/ExternalStateReconciler.java
index e2efb32999..804906e3c1 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/ExternalStateReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/ExternalStateReconciler.java
@@ -1,5 +1,6 @@
 package io.javaoperatorsdk.operator.sample.externalstate;
 
+import java.time.Duration;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
@@ -122,7 +123,7 @@ public Map<String, EventSource> prepareEventSources(
       var id = configMap.getData().get(ID_KEY);
       var externalResource = externalService.read(id);
       return externalResource.map(Set::of).orElseGet(Collections::emptySet);
-    }, context.getPrimaryCache(), 300L, ExternalResource.class);
+    }, context, Duration.ofMillis(300L), ExternalResource.class);
 
     return EventSourceInitializer.nameEventSources(configMapEventSource,
         externalResourceEventSource);
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/perresourceeventsource/PerResourcePollingEventSourceTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/perresourceeventsource/PerResourcePollingEventSourceTestReconciler.java
index d22285d6a7..f8cb3ffa44 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/perresourceeventsource/PerResourcePollingEventSourceTestReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/perresourceeventsource/PerResourcePollingEventSourceTestReconciler.java
@@ -1,5 +1,6 @@
 package io.javaoperatorsdk.operator.sample.perresourceeventsource;
 
+import java.time.Duration;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
@@ -41,7 +42,7 @@ public Map<String, EventSource> prepareEventSources(
           numberOfFetchExecutions.compute(resource.getMetadata().getName(), (s, v) -> v + 1);
           return Set.of(UUID.randomUUID().toString());
         },
-            context.getPrimaryCache(), POLL_PERIOD, String.class);
+            context, Duration.ofMillis(POLL_PERIOD), String.class);
     return EventSourceInitializer.nameEventSources(eventSource);
   }
 

From e5a7e961702292988478f400c2706f44b69b6409 Mon Sep 17 00:00:00 2001
From: csviri <csviri@gmail.com>
Date: Mon, 29 May 2023 09:59:32 +0200
Subject: [PATCH 2/5] annotation improvement

---
 .../event/source/polling/PerResourcePollingEventSource.java | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
index 06c4cb8948..6424ff042d 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
@@ -52,7 +52,7 @@ public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
         CacheKeyMapper.singleResourceCacheKeyMapper());
   }
 
-  @Deprecated
+  @Deprecated(forRemoval = true)
   public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
       Cache<P> resourceCache, long period, Class<R> resourceClass) {
     this(resourceFetcher, resourceCache, period, null, resourceClass,
@@ -68,7 +68,7 @@ public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
         null, resourceClass, cacheKeyMapper);
   }
 
-  @Deprecated
+  @Deprecated(forRemoval = true)
   public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
       Cache<P> resourceCache, long period, Class<R> resourceClass,
       CacheKeyMapper<R> cacheKeyMapper) {
@@ -86,7 +86,7 @@ public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
         new ScheduledThreadPoolExecutor(DEFAULT_EXECUTOR_THREAD_NUMBER));
   }
 
-  @Deprecated
+  @Deprecated(forRemoval = true)
   public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
       Cache<P> resourceCache, long period,
       Predicate<P> registerPredicate, Class<R> resourceClass,

From 95f3f0463e82302f50ca1023e433ff517384fa95 Mon Sep 17 00:00:00 2001
From: csviri <csviri@gmail.com>
Date: Mon, 29 May 2023 13:40:35 +0200
Subject: [PATCH 3/5] javadoc

---
 .../PerResourcePollingEventSource.java        | 48 +++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
index 6424ff042d..f5abfbe9a9 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
@@ -52,6 +52,15 @@ public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
         CacheKeyMapper.singleResourceCacheKeyMapper());
   }
 
+  /**
+   * @deprecated use the variant which uses {@link EventSourceContext} instead of {@link Cache} and
+   *             {@link Duration} for period parameter. What provides a more intuitive API.
+   *
+   * @param resourceFetcher fetches resource related to a primary resource
+   * @param resourceCache cache of the primary resource
+   * @param period default polling period
+   * @param resourceClass class of the target resource
+   */
   @Deprecated(forRemoval = true)
   public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
       Cache<P> resourceCache, long period, Class<R> resourceClass) {
@@ -68,6 +77,17 @@ public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
         null, resourceClass, cacheKeyMapper);
   }
 
+  /**
+   * @deprecated use the variant which uses {@link EventSourceContext} instead of {@link Cache} and
+   *             {@link Duration} for period parameter. What provides a more intuitive API.
+   *
+   * @param resourceFetcher fetches resource related to a primary resource
+   * @param resourceCache cache of the primary resource
+   * @param period default polling period
+   * @param resourceClass class of the target resource
+   * @param cacheKeyMapper use to distinguish resource in case more resources are handled for a
+   *        single primary resource
+   */
   @Deprecated(forRemoval = true)
   public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
       Cache<P> resourceCache, long period, Class<R> resourceClass,
@@ -86,6 +106,19 @@ public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
         new ScheduledThreadPoolExecutor(DEFAULT_EXECUTOR_THREAD_NUMBER));
   }
 
+  /**
+   * @deprecated use the variant which uses {@link EventSourceContext} instead of {@link Cache} and
+   *             {@link Duration} for period parameter. What provides a more intuitive API.
+   *
+   * @param resourceFetcher fetches resource related to a primary resource
+   * @param resourceCache cache of the primary resource
+   * @param period default polling period
+   * @param resourceClass class of the target resource
+   * @param cacheKeyMapper use to distinguish resource in case more resources are handled for a
+   *        single primary resource
+   * @param registerPredicate used to determine if the related resource for a custom resource should
+   *        be polled or not.
+   */
   @Deprecated(forRemoval = true)
   public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
       Cache<P> resourceCache, long period,
@@ -106,6 +139,21 @@ public PerResourcePollingEventSource(
         resourceClass, cacheKeyMapper, executorService);
   }
 
+  /**
+   * @deprecated use the variant which uses {@link EventSourceContext} instead of {@link Cache} and
+   *             {@link Duration} for period parameter. What provides a more intuitive API.
+   *
+   * @param resourceFetcher fetches resource related to a primary resource
+   * @param resourceCache cache of the primary resource
+   * @param period default polling period
+   * @param resourceClass class of the target resource
+   * @param cacheKeyMapper use to distinguish resource in case more resources are handled for a
+   *        single primary resource
+   * @param registerPredicate used to determine if the related resource for a custom resource should
+   *        be polled or not.
+   * @param executorService custom executor service
+   */
+
   @Deprecated
   public PerResourcePollingEventSource(
       ResourceFetcher<R, P> resourceFetcher,

From 497c866b248da97a48dde2933bdbc575c734a4d0 Mon Sep 17 00:00:00 2001
From: csviri <csviri@gmail.com>
Date: Mon, 29 May 2023 16:51:11 +0200
Subject: [PATCH 4/5] minor fix

---
 .../event/source/polling/PerResourcePollingEventSource.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
index f5abfbe9a9..5bc8b0d6d2 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
@@ -154,7 +154,7 @@ public PerResourcePollingEventSource(
    * @param executorService custom executor service
    */
 
-  @Deprecated
+  @Deprecated(forRemoval = true)
   public PerResourcePollingEventSource(
       ResourceFetcher<R, P> resourceFetcher,
       Cache<P> resourceCache, long period,

From 58e57966afb5cc48eb2b0501876f68bafe310050 Mon Sep 17 00:00:00 2001
From: Chris Laprun <metacosm@gmail.com>
Date: Tue, 30 May 2023 18:06:42 +0200
Subject: [PATCH 5/5] fix: grammar

---
 .../PerResourcePollingEventSource.java        | 20 +++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
index 5bc8b0d6d2..6da1ec0e58 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java
@@ -1,8 +1,16 @@
 package io.javaoperatorsdk.operator.processing.event.source.polling;
 
 import java.time.Duration;
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 import java.util.function.Predicate;
 
 import org.slf4j.Logger;
@@ -54,7 +62,7 @@ public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
 
   /**
    * @deprecated use the variant which uses {@link EventSourceContext} instead of {@link Cache} and
-   *             {@link Duration} for period parameter. What provides a more intuitive API.
+   *             {@link Duration} for period parameter as it provides a more intuitive API.
    *
    * @param resourceFetcher fetches resource related to a primary resource
    * @param resourceCache cache of the primary resource
@@ -79,7 +87,7 @@ public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
 
   /**
    * @deprecated use the variant which uses {@link EventSourceContext} instead of {@link Cache} and
-   *             {@link Duration} for period parameter. What provides a more intuitive API.
+   *             {@link Duration} for period parameter as it provides a more intuitive API.
    *
    * @param resourceFetcher fetches resource related to a primary resource
    * @param resourceCache cache of the primary resource
@@ -108,7 +116,7 @@ public PerResourcePollingEventSource(ResourceFetcher<R, P> resourceFetcher,
 
   /**
    * @deprecated use the variant which uses {@link EventSourceContext} instead of {@link Cache} and
-   *             {@link Duration} for period parameter. What provides a more intuitive API.
+   *             {@link Duration} for period parameter as it provides a more intuitive API.
    *
    * @param resourceFetcher fetches resource related to a primary resource
    * @param resourceCache cache of the primary resource
@@ -141,7 +149,7 @@ public PerResourcePollingEventSource(
 
   /**
    * @deprecated use the variant which uses {@link EventSourceContext} instead of {@link Cache} and
-   *             {@link Duration} for period parameter. What provides a more intuitive API.
+   *             {@link Duration} for period parameter as it provides a more intuitive API.
    *
    * @param resourceFetcher fetches resource related to a primary resource
    * @param resourceCache cache of the primary resource