/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.bbg.referencedata.impl;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.opengamma.bbg.referencedata.ReferenceData;
import com.opengamma.bbg.referencedata.ReferenceDataProvider;
import com.opengamma.bbg.referencedata.cache.AbstractValueCachingReferenceDataProvider;
/**
* In memory caching reference data provider
*/
public class InMemoryCachingReferenceDataProvider extends AbstractValueCachingReferenceDataProvider implements ReferenceDataProvider {
private final Map<String, ReferenceData> _refDataMap = Maps.newHashMap();
public InMemoryCachingReferenceDataProvider(ReferenceDataProvider underlying) {
this(underlying, Collections.<String, ReferenceData>emptyMap());
}
public InMemoryCachingReferenceDataProvider(ReferenceDataProvider underlying, Map<String, ReferenceData> prePopulated) {
super(underlying);
_refDataMap.putAll(prePopulated);
}
@Override
protected synchronized Map<String, ReferenceData> loadFieldValues(Set<String> identifiers) {
Map<String, ReferenceData> filtered = Maps.filterKeys(_refDataMap, Predicates.in(identifiers));
return ImmutableMap.copyOf(filtered);
}
@Override
protected synchronized void saveFieldValues(ReferenceData result) {
_refDataMap.put(result.getIdentifier(), result);
}
/**
* An immutable map containing the records accessed by this instance
* @return a map of reference data objects
*/
public synchronized ImmutableMap<String, ReferenceData> getDataAccessed() {
return ImmutableMap.copyOf(_refDataMap);
}
/**
* Adds the given data to the map
* @param refData the data to add
*/
public synchronized void addToCache(Map<String, ReferenceData> refData) {
_refDataMap.putAll(refData);
}
}