1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.spi;
18
19 import java.util.HashMap;
20 import java.util.Map;
21
22
23
24
25 public class DefaultThreadContextMap implements ThreadContextMap {
26
27 private final boolean useMap;
28
29 private final ThreadLocal<Map<String, String>> localMap =
30 new InheritableThreadLocal<Map<String, String>>() {
31 @Override
32 protected Map<String, String> childValue(final Map<String, String> parentValue) {
33 return parentValue == null || !useMap ? null : new HashMap<String, String>(parentValue);
34 }
35 };
36
37 public DefaultThreadContextMap(final boolean useMap) {
38 this.useMap = useMap;
39 }
40
41
42
43
44
45
46
47
48
49
50
51 public void put(final String key, final String value) {
52 if (!useMap) {
53 return;
54 }
55 Map<String, String> map = localMap.get();
56 if (map == null) {
57 map = new HashMap<String, String>();
58 localMap.set(map);
59 }
60 map.put(key, value);
61 }
62
63
64
65
66
67
68
69
70 public String get(final String key) {
71 final Map<String, String> map = localMap.get();
72 return map == null ? null : map.get(key);
73 }
74
75
76
77
78
79
80 public void remove(final String key) {
81 final Map<String, String> map = localMap.get();
82 if (map != null) {
83 map.remove(key);
84 }
85 }
86
87
88
89
90 public void clear() {
91 localMap.remove();
92 }
93
94
95
96
97
98
99 public boolean containsKey(final String key) {
100 final Map<String, String> map = localMap.get();
101 return map == null ? false : map.containsKey(key);
102 }
103
104
105
106
107
108 public Map<String, String> getContext() {
109 final Map<String, String> map = localMap.get();
110 return map == null ? new HashMap<String, String>() : new HashMap<String, String>(map);
111 }
112
113
114
115
116
117 public Map<String, String> get() {
118 return localMap.get();
119 }
120
121
122
123
124
125 public boolean isEmpty() {
126 final Map<String, String> map = localMap.get();
127 return map == null || map.size() == 0;
128 }
129 }