1 package com.atlassian.vcache.internal.memcached;
2
3 import com.atlassian.vcache.internal.BegunTransactionalActivityHandler;
4 import com.atlassian.vcache.internal.RequestContext;
5 import com.atlassian.vcache.internal.VCacheCreationHandler;
6 import com.atlassian.vcache.internal.VCacheSettingsDefaultsProvider;
7 import com.atlassian.vcache.internal.core.ExternalCacheKeyGenerator;
8 import com.atlassian.vcache.internal.core.Sha1ExternalCacheKeyGenerator;
9 import com.atlassian.vcache.internal.core.metrics.DefaultMetricsCollector;
10 import com.atlassian.vcache.internal.core.metrics.MetricsCollector;
11 import net.spy.memcached.MemcachedClientIF;
12
13 import java.time.Duration;
14 import java.util.function.Function;
15 import java.util.function.Supplier;
16
17 import static java.util.Objects.requireNonNull;
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 public class MemcachedVCacheServiceSettingsBuilder {
34 private Supplier<MemcachedClientIF> clientSupplier;
35 private Supplier<RequestContext> threadLocalContextSupplier;
36 private Supplier<RequestContext> workContextContextSupplier;
37 private VCacheSettingsDefaultsProvider defaultsProvider;
38 private VCacheCreationHandler creationHandler;
39 private MetricsCollector metricsCollector;
40 private ExternalCacheKeyGenerator externalCacheKeyGenerator;
41
42 private BegunTransactionalActivityHandler begunTransactionalActivityHandler = context -> {
43 };
44
45 private Function<String, Boolean> dontExternaliseCache = name -> false;
46
47 private boolean serializationHack;
48
49 @SuppressWarnings("checkstyle:MagicNumber")
50 private Duration lockTimeout = Duration.ofSeconds(30);
51
52
53
54
55
56
57
58 public MemcachedVCacheServiceSettingsBuilder clientSupplier(Supplier<MemcachedClientIF> clientSupplier) {
59 this.clientSupplier = requireNonNull(clientSupplier);
60 return this;
61 }
62
63
64
65
66
67
68
69 public MemcachedVCacheServiceSettingsBuilder threadLocalContextSupplier(Supplier<RequestContext> threadLocalContextSupplier) {
70 this.threadLocalContextSupplier = requireNonNull(threadLocalContextSupplier);
71 return this;
72 }
73
74
75
76
77
78
79
80 public MemcachedVCacheServiceSettingsBuilder workContextContextSupplier(Supplier<RequestContext> contextSupplier) {
81 this.workContextContextSupplier = contextSupplier;
82 return this;
83 }
84
85
86
87
88
89
90
91 public MemcachedVCacheServiceSettingsBuilder defaultsProvider(VCacheSettingsDefaultsProvider defaultsProvider) {
92 this.defaultsProvider = requireNonNull(defaultsProvider);
93 return this;
94 }
95
96
97
98
99
100
101
102 public MemcachedVCacheServiceSettingsBuilder creationHandler(VCacheCreationHandler creationHandler) {
103 this.creationHandler = requireNonNull(creationHandler);
104 return this;
105 }
106
107
108
109
110
111
112
113
114 public MemcachedVCacheServiceSettingsBuilder metricsCollector(MetricsCollector metricsCollector) {
115 this.metricsCollector = requireNonNull(metricsCollector);
116 return this;
117 }
118
119
120
121
122
123
124
125
126 public MemcachedVCacheServiceSettingsBuilder productIdentifier(String productIdentifier) {
127 this.externalCacheKeyGenerator = new Sha1ExternalCacheKeyGenerator(productIdentifier);
128 return this;
129 }
130
131
132
133
134
135
136
137 public MemcachedVCacheServiceSettingsBuilder externalCacheKeyGenerator(ExternalCacheKeyGenerator externalCacheKeyGenerator) {
138 this.externalCacheKeyGenerator = requireNonNull(externalCacheKeyGenerator);
139 return this;
140 }
141
142
143
144
145
146
147
148
149 public MemcachedVCacheServiceSettingsBuilder begunTransactionalActivityHandler(BegunTransactionalActivityHandler handler) {
150 this.begunTransactionalActivityHandler = requireNonNull(handler);
151 return this;
152 }
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170 public MemcachedVCacheServiceSettingsBuilder dontExternaliseCache(Function<String, Boolean> dontExternaliseCache) {
171 this.dontExternaliseCache = requireNonNull(dontExternaliseCache);
172 return this;
173 }
174
175
176
177
178
179
180 public MemcachedVCacheServiceSettingsBuilder enableSerializationHack() {
181 serializationHack = true;
182 return this;
183 }
184
185
186
187
188
189
190 public MemcachedVCacheServiceSettingsBuilder lockTimeout(Duration lockTimeout) {
191 this.lockTimeout = requireNonNull(lockTimeout);
192 return this;
193 }
194
195
196
197
198
199
200 public MemcachedVCacheServiceSettings build() {
201 return new MemcachedVCacheServiceSettings(
202 requireNonNull(clientSupplier, "missing clientSupplier"),
203 requireNonNull(threadLocalContextSupplier, "missing threadLocalContextSupplier"),
204 requireNonNull(workContextContextSupplier, "missing thread safe workContextContextSupplier"),
205 requireNonNull(defaultsProvider, "missing defaultsProvider"),
206 requireNonNull(creationHandler, "missing creationHandler"),
207 (metricsCollector != null) ? metricsCollector : new DefaultMetricsCollector(threadLocalContextSupplier),
208 requireNonNull(externalCacheKeyGenerator, "missing externalCacheKeyGenerator"),
209 begunTransactionalActivityHandler,
210 dontExternaliseCache,
211 serializationHack,
212 lockTimeout);
213 }
214 }