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