1 package com.atlassian.vcache;
2
3 import com.atlassian.annotations.PublicApi;
4
5 import java.time.Duration;
6 import java.util.Optional;
7
8 import static com.atlassian.vcache.SettingsUtils.ifPresent;
9 import static java.util.Objects.requireNonNull;
10
11
12
13
14
15
16 @PublicApi
17 public class ExternalCacheSettings {
18 private final Optional<Duration> defaultTtl;
19 private final Optional<Integer> entryCountHint;
20 private final Optional<ChangeRate> dataChangeRateHint;
21 private final Optional<ChangeRate> entryGrowthRateHint;
22
23 ExternalCacheSettings(
24 Optional<Duration> defaultTtl,
25 Optional<Integer> entryCountHint,
26 Optional<ChangeRate> dataChangeRateHint,
27 Optional<ChangeRate> entryGrowthRateHint) {
28 this.defaultTtl = requireNonNull(defaultTtl);
29 this.entryCountHint = requireNonNull(entryCountHint);
30 this.dataChangeRateHint = requireNonNull(dataChangeRateHint);
31 this.entryGrowthRateHint = requireNonNull(entryGrowthRateHint);
32 }
33
34
35
36
37
38
39
40
41 public ExternalCacheSettings override(ExternalCacheSettings overrides) {
42 return new ExternalCacheSettings(
43 ifPresent(overrides.getDefaultTtl(), getDefaultTtl()),
44 ifPresent(overrides.getEntryCountHint(), getEntryCountHint()),
45 ifPresent(overrides.getDataChangeRateHint(), getDataChangeRateHint()),
46 ifPresent(overrides.getEntryGrowthRateHint(), getEntryGrowthRateHint()));
47 }
48
49
50
51
52
53
54
55 public Optional<Duration> getDefaultTtl() {
56 return defaultTtl;
57 }
58
59
60
61
62
63
64 public Optional<Integer> getEntryCountHint() {
65 return entryCountHint;
66 }
67
68
69
70
71
72
73 public Optional<ChangeRate> getDataChangeRateHint() {
74 return dataChangeRateHint;
75 }
76
77
78
79
80
81
82 public Optional<ChangeRate> getEntryGrowthRateHint() {
83 return entryGrowthRateHint;
84 }
85 }