com.atlassian.jira.util.cache
Class CompositeKeyCache<R,S,T>

java.lang.Object
  extended by com.atlassian.jira.util.cache.CompositeKeyCache<R,S,T>
Type Parameters:
R - the first key, usually a string. Must be a type that can be used as a map key (ie. immutable with correct equals/hashcode).
S - the field name, usually a string. Must be a type that can be used as a map key (ie. immutable with correct equals/hashcode).
T - the result thing.

public class CompositeKeyCache<R,S,T>
extends java.lang.Object

Cache of (R, S) -> T. Designed to be used for general mappings of things to a field in an index.

Usage:

 CompositeKeyCache<IndexReader, String, Collection<String>[]> cache = CompositeKeyCache.createWeakFirstKeySoftValueCache();
 cache.get(reader, fieldName, 
     new Supplier<Collection<String>[]>()
     {
         public Collection<String>[] get()
         {
             return doStuff(reader, fieldName);
         }
     }
 );
 


Method Summary
static
<R,S,T> CompositeKeyCache<R,S,T>
createWeakFirstKeySoftValueCache()
          This cache caches the first (R) reference weakly, the second (S) reference strongly and the value (T) reference softly.
 T get(R one, S two, Supplier<T> supplier)
          Get the thing mapped to this key for the specified reader.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

createWeakFirstKeySoftValueCache

public static <R,S,T> CompositeKeyCache<R,S,T> createWeakFirstKeySoftValueCache()
This cache caches the first (R) reference weakly, the second (S) reference strongly and the value (T) reference softly. This is specifically designed for use with Lucene where the IndexReader is being recycled regularly (the R) and the terms (T) may be softly referenced.

Type Parameters:
R - the first key type
S - the second key type
T - the value type
Returns:
a cache with weak references to the first key and soft references to the value.

get

public T get(@NotNull
             R one,
             @NotNull
             S two,
             Supplier<T> supplier)
Get the thing mapped to this key for the specified reader.

Parameters:
one - the first one
two - the second one
supplier - to generate the value if not already there, only called if not already cached.
Returns:
the cached value


Copyright © 2002-2010 Atlassian. All Rights Reserved.