View Javadoc

1   package com.atlassian.cache.impl;
2   
3   import com.atlassian.cache.CachedReferenceListener;
4   import com.atlassian.util.concurrent.LazyReference;
5   
6   public class LazyCachedReferenceListenerSupport<V> implements CachedReferenceListenerSupport<V>
7   {
8       private final LazyReference<CachedReferenceListenerSupport<V>> lazyListenerSupport =
9               new LazyReference<CachedReferenceListenerSupport<V>>()
10              {
11                  @Override
12                  protected CachedReferenceListenerSupport<V> create() throws Exception
13                  {
14                      init();
15                      return createDelegate();
16                  }
17              };
18  
19      protected void init()
20      {
21      }
22  
23      protected CachedReferenceListenerSupport<V> createDelegate()
24      {
25          return new DefaultCachedReferenceListenerSupport<V>();
26      }
27  
28      private CachedReferenceListenerSupport<V> loadDelegate()
29      {
30          return lazyListenerSupport.get();
31      }
32  
33      private CachedReferenceListenerSupport<V> getDelegate()
34      {
35          if (lazyListenerSupport.isInitialized())
36          {
37              return lazyListenerSupport.get();
38          }
39          else
40          {
41              return CachedReferenceListenerSupport.EMPTY;
42          }
43      }
44  
45      @Override
46      public void add(CachedReferenceListener<V> listener, boolean includeValues)
47      {
48          loadDelegate().add(listener, includeValues);
49      }
50  
51      @Override
52      public void remove(CachedReferenceListener<V> listener)
53      {
54          getDelegate().remove(listener);
55      }
56  
57      @Override
58      public void notifyEvict(V oldValue)
59      {
60          getDelegate().notifyEvict(oldValue);
61      }
62  
63      @Override
64      public void notifySet(V value)
65      {
66          getDelegate().notifySet(value);
67      }
68  
69      @Override
70      public void notifyReset(V oldValue)
71      {
72          getDelegate().notifyReset(oldValue);
73      }
74  }