1 package com.atlassian.cache;
2
3 import javax.annotation.Nonnull;
4
5 import com.atlassian.annotations.Internal;
6
7
8
9
10
11
12 @Internal
13 class DefaultCacheSettings implements CacheSettings
14 {
15 private final Long expireAfterAccess;
16 private final Long expireAfterWrite;
17 private final Boolean flushable;
18 private final Boolean local;
19 private final Integer maxEntries;
20 private final Boolean replicateAsynchronously;
21 private final Boolean replicateViaCopy;
22
23 DefaultCacheSettings(Long expireAfterAccess, Long expireAfterWrite, Boolean flushable,
24 Boolean local, Integer maxEntries, Boolean replicateAsynchronously, Boolean replicateViaCopy)
25 {
26 this.expireAfterAccess = expireAfterAccess;
27 this.expireAfterWrite = expireAfterWrite;
28 this.flushable = flushable;
29 this.local = local;
30 this.maxEntries = maxEntries;
31 this.replicateAsynchronously = replicateAsynchronously;
32 this.replicateViaCopy = replicateViaCopy;
33 }
34
35 @Nonnull
36 @Override
37 public CacheSettings override(@Nonnull CacheSettings overrides)
38 {
39 return new DefaultCacheSettings(
40 notNullElse(overrides.getExpireAfterAccess(), expireAfterAccess),
41 notNullElse(overrides.getExpireAfterWrite(), expireAfterWrite),
42 notNullElse(overrides.getFlushable(), flushable),
43 notNullElse(overrides.getLocal(), local),
44 notNullElse(overrides.getMaxEntries(), maxEntries),
45 notNullElse(overrides.getReplicateAsynchronously(), replicateAsynchronously),
46 notNullElse(overrides.getReplicateViaCopy(), replicateViaCopy));
47 }
48
49 @Override
50 public Long getExpireAfterAccess()
51 {
52 return expireAfterAccess;
53 }
54
55 @Override
56 public long getExpireAfterAccess(long defaultValue)
57 {
58 return (null == getExpireAfterAccess()) ? defaultValue : getExpireAfterAccess();
59 }
60
61 @Override
62 public Long getExpireAfterWrite()
63 {
64 return expireAfterWrite;
65 }
66
67 @Override
68 public long getExpireAfterWrite(long defaultValue)
69 {
70 return (null == getExpireAfterWrite()) ? defaultValue : getExpireAfterWrite();
71 }
72
73 @Override
74 public Boolean getFlushable()
75 {
76 return flushable;
77 }
78
79 @Override
80 public boolean getFlushable(boolean defaultValue)
81 {
82 return (null == getFlushable()) ? defaultValue : getFlushable();
83 }
84
85 @Override
86 public Boolean getLocal()
87 {
88 return local;
89 }
90
91 @Override
92 public boolean getLocal(boolean defaultValue)
93 {
94 return (null == getLocal()) ? defaultValue : getLocal();
95 }
96
97 @Override
98 public Integer getMaxEntries()
99 {
100 return maxEntries;
101 }
102
103 @Override
104 public int getMaxEntries(int defaultValue)
105 {
106 return (null == getMaxEntries()) ? defaultValue : getMaxEntries();
107 }
108
109 @Override
110 public Boolean getReplicateAsynchronously()
111 {
112 return replicateAsynchronously;
113 }
114
115 @Override
116 public boolean getReplicateAsynchronously(boolean defaultValue)
117 {
118 return (null == getReplicateAsynchronously()) ? defaultValue : getReplicateAsynchronously();
119 }
120
121 @Override
122 public Boolean getReplicateViaCopy()
123 {
124 return replicateViaCopy;
125 }
126
127 @Override
128 public boolean getReplicateViaCopy(boolean defaultValue)
129 {
130 return (null == getReplicateViaCopy()) ? defaultValue : getReplicateViaCopy();
131 }
132
133 private static <T> T notNullElse(T value, T def)
134 {
135 return (null != value) ? value : def;
136 }
137 }