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