## org.autoplot.datasource.ReferenceCache

Provide a cache of datasets that are in memory, so that the same data is not loaded twice. This first implementation uses WeakReferences, so that this cache need not be emptied, but we will avoid the situation where the same data is loaded twice.

## PROP_ENABLE_REFERENCE_CACHE

System property the enables the reference cache. Clients should check this before using the cache with code like: `boolean useReferenceCache= "true".equals( System.getProperty( ReferenceCache.PROP_ENABLE_REFERENCE_CACHE, "false" ) );`

## NULL

marker dataset used to indicate null was loaded for the URI. This dataset should not be used.

## getDataSet

getDataSet( String uri ) → QDataSet

Query to see if the dataset exists in the cache. Null is returned if it is not, or a QDataSet is returned if it is. NOTE: the entry might be ReferenceCache.NULL, meaning the load resulted in no data.

### Parameters

uri - the URI that can be resolved into a dataset.

### Returns:

the dataset or null
[search for examples] [view on GitHub] [view on old javadoc] [view source]

## getDataSetOrLock

getDataSetOrLock( String uri, ProgressMonitor monitor ) → org.autoplot.datasource.ReferenceCache.ReferenceCacheEntry

Get a ReferenceCacheEntry for the URI, which will indicate the thread which has been designated as the load thread.

>     rcent= ReferenceCache.getInstance().getDataSetOrLock( this.tsb.getURI(), mon);
>     if ( !rcent.shouldILoad( Thread.currentThread() ) ) {
>        QDataSet result= rcent.park( mon );

Be sure to use try/finally when using this cache!

### Parameters

uri - the URI to load.
monitor - to monitor the load.

### Returns:

the ReferenceCacheEntry
[search for examples] [view on GitHub] [view on old javadoc] [view source]

## getInstance

getInstance( ) → org.autoplot.datasource.ReferenceCache

get the single instance of the ReferenceCache

### Returns:

an org.autoplot.datasource.ReferenceCache
[search for examples] [view on GitHub] [view on old javadoc] [view source]

## getReferenceCacheEntry

getReferenceCacheEntry( String uri ) → org.autoplot.datasource.ReferenceCache.ReferenceCacheEntry

return the ReferenceCacheEntry, if any, for the URI. This is to resolve the ambiguity of the getDataSet call. Typically the status of the entry is called.

### Parameters

uri - the URI that can be resolved into a dataset.

### Returns:

null or the ReferenceCacheEntry.
[search for examples] [view on GitHub] [view on old javadoc] [view source]

## offerDataSet

offerDataSet( String uri, QDataSet ds ) → void

like putDataSet, but if no one has requested this dataset, then simply add it to the cache of datasets in case someone else wants it. Be sure to call this before the call to putDataSet that will release the lock.

### Parameters

uri - the URI
ds - the dataset

### Returns:

void (returns nothing)
[search for examples] [view on GitHub] [view on old javadoc] [view source]

## park

park( org.autoplot.datasource.ReferenceCache.ReferenceCacheEntry ent, ProgressMonitor monitor ) → void

park this thread until the other guy has finished loading.

### Parameters

ent - a ReferenceCache.ReferenceCacheEntry
monitor - the monitor of the load.

### Returns:

void (returns nothing)
[search for examples] [view on GitHub] [view on old javadoc] [view source]

## printStatus

printStatus( ) → void

display the status of all the entries.

### Returns:

void (returns nothing)
[search for examples] [view on GitHub] [view on old javadoc] [view source]

## reset

reset( ) → void

explicitly remove entries from the cache.

### Returns:

void (returns nothing)
[search for examples] [view on GitHub] [view on old javadoc] [view source]

## tidy

tidy( ) → void

remove all the entries that have been garbage collected.

### Returns:

void (returns nothing)
[search for examples] [view on GitHub] [view on old javadoc] [view source]