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 ValueCachedReferenceListenerSupport<V> implements CachedReferenceListenerSupport<V>
7   {
8       private final LazyReference<Void> initReference = new LazyReference<Void>()
9       {
10          @Override
11          protected Void create() throws Exception
12          {
13              init(ValueCachedReferenceListenerSupport.this);
14              return null;
15          }
16      };
17  
18      private final CachedReferenceListenerSupport<V> valueListenerSupport =
19              new LazyCachedReferenceListenerSupport<V>()
20              {
21                  @Override
22                  protected void init()
23                  {
24                      initReference.get();
25                      initValue(this);
26                  }
27              };
28  
29      private final CachedReferenceListenerSupport<V> valuelessListenerSupport =
30              new LazyCachedReferenceListenerSupport<V>()
31              {
32                  @Override
33                  protected void init()
34                  {
35                      initReference.get();
36                      initValueless(this);
37                  }
38              };
39  
40      protected void init(CachedReferenceListenerSupport<V> actualListenerSupport)
41      {
42      }
43  
44      protected void initValue(CachedReferenceListenerSupport<V> actualListenerSupport)
45      {
46      }
47  
48      protected void initValueless(CachedReferenceListenerSupport<V> actualListenerSupport)
49      {
50      }
51  
52      @Override
53      public void add(final CachedReferenceListener<V> listener, final boolean includeValues)
54      {
55          if (includeValues)
56          {
57              valueListenerSupport.add(listener, true);
58          }
59          else
60          {
61              valuelessListenerSupport.add(listener, false);
62          }
63      }
64  
65      @Override
66      public void remove(final CachedReferenceListener<V> listener)
67      {
68          valueListenerSupport.remove(listener);
69          valuelessListenerSupport.remove(listener);
70      }
71  
72      @Override
73      public void notifyEvict(final V oldValue)
74      {
75          valueListenerSupport.notifyEvict(oldValue);
76          valuelessListenerSupport.notifyEvict(null);
77      }
78  
79      @Override
80      public void notifySet(final V value)
81      {
82          valueListenerSupport.notifySet(value);
83          valuelessListenerSupport.notifySet(null);
84      }
85  
86      @Override
87      public void notifyReset(final V oldValue)
88      {
89          valueListenerSupport.notifyReset(oldValue);
90          valuelessListenerSupport.notifyReset(null);
91      }
92  }