View Javadoc

1   package com.atlassian.vcache.internal.core.service;
2   
3   import com.atlassian.vcache.internal.core.ExternalCacheKeyGenerator;
4   
5   import java.util.Optional;
6   import java.util.function.Supplier;
7   
8   /**
9    * Represents the request context for an {@link com.atlassian.vcache.ExternalCache} that maintains a
10   * cache version.
11   *
12   * @param <V> the value type
13   * @since 1.0.0
14   */
15  public class VersionedExternalCacheRequestContext<V> extends AbstractExternalCacheRequestContext<V> {
16      protected final String externalCacheVersionKey;
17      private Optional<Long> cacheVersion = Optional.empty();
18  
19      public VersionedExternalCacheRequestContext(ExternalCacheKeyGenerator keyGenerator,
20                                                  String name,
21                                                  Supplier<String> partitionSupplier) {
22          super(keyGenerator, name, partitionSupplier);
23          this.externalCacheVersionKey =
24                  keyGenerator.cacheVersionKey(partitionSupplier.get(), name);
25      }
26  
27      @Override
28      protected long cacheVersion() {
29          return cacheVersion.get();
30      }
31  
32      public void updateCacheVersion(long value) {
33          cacheVersion = Optional.of(value);
34          clearKeyMaps();
35      }
36  
37      public String externalCacheVersionKey() {
38          return externalCacheVersionKey;
39      }
40  }