docs: @Override
      public <T> CachedResource<T> getResource(
              Resource resource, Loader<T> builder, long checkInterval) throws IOException {
          if (Included.PLAIN == this.resourcesElementsProvider.getDefaultIncludedType()) {
              this.logger.trace(
                      "Resoure Aggregation Disabled, ignoring resource cache and loading '"
                              + resource
                              + "' directly");
              return this.loadResource(resource, builder);
          }
  
          // Look for the resource in the cache, since it has been wrapped with a SelfPopulatingCache
          // it should never return null.
          final GetResourceArguments<T> arguments = new GetResourceArguments<T>(resource, builder);
          final Element element =
                  this.entryFactory.getWithData(this.resourceCache, resource, arguments);
  
          CachedResource<T> cachedResource = (CachedResource<T>) element.getObjectValue();
          if (this.logger.isTraceEnabled()) {
              this.logger.trace("Found " + cachedResource + " in cache");
          }
  
          // Found it, now check if the last-load time is within the check interval
          final long lastCheckTime = cachedResource.getLastCheckTime();
          if (lastCheckTime + checkInterval >= System.currentTimeMillis()) {
              if (this.logger.isTraceEnabled()) {
                  this.logger.trace(
                          cachedResource
                                  + " is within checkInterval "
                                  + checkInterval
                                  + ", returning");
              }
              return cachedResource;
          }
          if (this.logger.isTraceEnabled()) {
              this.logger.trace(
                      cachedResource
                              + " is older than checkInterval "
                              + checkInterval
                              + ", checking for modification");
          }
  
          // If the resource has not been modified return the cached resource.
          final boolean resourceModified = this.checkIfModified(cachedResource);
          if (!resourceModified) {
              cachedResource.setLastCheckTime(System.currentTimeMillis());
              this.resourceCache.put(
                      element); // do a cache put to notify the cache the object has been modified
              return cachedResource;
          }
  
          // The resource has been modified, reload it.
          cachedResource = this.loadResource(resource, builder);
  
          // Cache the loaded resource
          this.resourceCache.put(new Element(resource, cachedResource));
  
          if (this.logger.isDebugEnabled()) {
              this.logger.debug("Loaded and cached " + cachedResource);
          }
  
          return cachedResource;
      }