View Javadoc

1   package com.atlassian.cache;
2   
3   import javax.annotation.Nonnull;
4   
5   import com.atlassian.annotations.Internal;
6   
7   /**
8    * Provides an implementation of the {@link CacheSettings} interface.
9    *
10   * @since 2.0
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 }