1 package com.atlassian.vcache;
2
3 import java.time.Duration;
4 import java.util.Optional;
5 import javax.annotation.Nonnull;
6
7 import com.atlassian.annotations.PublicApi;
8
9 import static java.util.Objects.requireNonNull;
10
11
12
13
14
15
16 @PublicApi
17 public class ExternalCacheSettingsBuilder
18 {
19 private Optional<Duration> defaultTtl = Optional.empty();
20 private Optional<Integer> entryCountHint = Optional.empty();
21 private Optional<ChangeRate> dataChangeRateHint = Optional.empty();
22 private Optional<ChangeRate> entryGrowthRateHint = Optional.empty();
23
24
25
26
27 public ExternalCacheSettingsBuilder()
28 {
29 }
30
31
32
33
34
35 public ExternalCacheSettingsBuilder(ExternalCacheSettings settings)
36 {
37 this.defaultTtl = requireNonNull(settings.getDefaultTtl());
38 this.entryCountHint = requireNonNull(settings.getEntryCountHint());
39 this.dataChangeRateHint = requireNonNull(settings.getDataChangeRateHint());
40 this.entryGrowthRateHint = requireNonNull(settings.getEntryGrowthRateHint());
41 }
42
43
44
45
46
47 @Nonnull
48 public ExternalCacheSettings build()
49 {
50 return new ExternalCacheSettings(
51 defaultTtl, entryCountHint, dataChangeRateHint, entryGrowthRateHint);
52 }
53
54
55
56
57
58
59
60
61 @Nonnull
62 public ExternalCacheSettingsBuilder defaultTtl(Duration ttl)
63 {
64 if (ttl.getNano() <= 0)
65 {
66 throw new IllegalArgumentException("ttl must be greater than zero, passed: " + ttl);
67 }
68
69 defaultTtl = Optional.of(ttl);
70 return this;
71 }
72
73
74
75
76
77
78
79
80
81
82 @Nonnull
83 public ExternalCacheSettingsBuilder entryCountHint(int hint)
84 {
85 if (hint < 0)
86 {
87 throw new IllegalArgumentException("maxEntries cannot be negative, passed: " + hint);
88 }
89
90 entryCountHint = Optional.of(hint);
91 return this;
92 }
93
94
95
96
97
98
99
100 @Nonnull
101 public ExternalCacheSettingsBuilder dataChangeRateHint(ChangeRate hint)
102 {
103 dataChangeRateHint = Optional.of(hint);
104 return this;
105 }
106
107
108
109
110
111
112
113 @Nonnull
114 public ExternalCacheSettingsBuilder entryGrowthRateHint(ChangeRate hint)
115 {
116 entryGrowthRateHint = Optional.of(hint);
117 return this;
118 }
119 }