View Javadoc

1   package com.atlassian.vcache.internal.core;
2   
3   import com.atlassian.vcache.internal.RequestContext;
4   
5   import java.util.Map;
6   import java.util.Optional;
7   import java.util.concurrent.ConcurrentHashMap;
8   import java.util.function.Supplier;
9   
10  import static java.util.Objects.requireNonNull;
11  
12  /**
13   * An implementation of the {@link RequestContext}.
14   *
15   * @since 1.0
16   */
17  public class DefaultRequestContext implements RequestContext {
18      private final String partitionId;
19      private final Map<Object, Object> map = new ConcurrentHashMap<>();
20  
21      public DefaultRequestContext(String partitionId) {
22          this.partitionId = requireNonNull(partitionId);
23      }
24  
25      @Override
26      public String partitionIdentifier() {
27          return partitionId;
28      }
29  
30      @SuppressWarnings("unchecked")
31      @Override
32      public <T> T computeIfAbsent(Object key, Supplier<T> supplier) {
33          return (T) map.computeIfAbsent(requireNonNull(key), o -> requireNonNull(supplier.get()));
34      }
35  
36      @SuppressWarnings("unchecked")
37      @Override
38      public <T> Optional<T> get(Object key) {
39          return Optional.ofNullable((T) map.get(key));
40      }
41  }