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
14
15
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 }