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