1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether;
20
21 import java.util.concurrent.ConcurrentHashMap;
22 import java.util.concurrent.ConcurrentMap;
23 import java.util.function.Supplier;
24
25 import static java.util.Objects.requireNonNull;
26
27
28
29
30 public final class DefaultSessionData implements SessionData {
31
32 private final ConcurrentMap<Object, Object> data;
33
34
35
36
37 public DefaultSessionData() {
38 data = new ConcurrentHashMap<>();
39 }
40
41 public void set(Object key, Object value) {
42 requireNonNull(key, "key cannot be null");
43
44 if (value != null) {
45 data.put(key, value);
46 } else {
47 data.remove(key);
48 }
49 }
50
51 public boolean set(Object key, Object oldValue, Object newValue) {
52 requireNonNull(key, "key cannot be null");
53
54 if (newValue != null) {
55 if (oldValue == null) {
56 return data.putIfAbsent(key, newValue) == null;
57 }
58 return data.replace(key, oldValue, newValue);
59 } else {
60 if (oldValue == null) {
61 return !data.containsKey(key);
62 }
63 return data.remove(key, oldValue);
64 }
65 }
66
67 public Object get(Object key) {
68 requireNonNull(key, "key cannot be null");
69
70 return data.get(key);
71 }
72
73 public Object computeIfAbsent(Object key, Supplier<Object> supplier) {
74 return data.computeIfAbsent(key, k -> supplier.get());
75 }
76 }