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