/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.bbg.referencedata.cache;
import java.util.Map;
import java.util.Set;
import org.fudgemsg.FudgeContext;
import com.opengamma.bbg.referencedata.ReferenceData;
import com.opengamma.bbg.referencedata.ReferenceDataProvider;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.fudgemsg.OpenGammaFudgeContext;
import com.opengamma.util.mongo.MongoConnector;
/**
* Decorates a reference data provider, adding caching.
* <p>
* The cache is implemented using the a Mongo database.
*/
public class MongoDBValueCachingReferenceDataProvider extends AbstractValueCachingReferenceDataProvider {
/**
* The Mongo collection name.
*/
public static final String REFERENCE_DATA = "values";
/**
* The cache.
*/
private MongoDBReferenceDataCache _cache;
/**
* Creates an instance.
*
* @param underlying the underlying provider, not null
* @param mongoConnector the Mongo connector, not null
*/
public MongoDBValueCachingReferenceDataProvider(ReferenceDataProvider underlying, MongoConnector mongoConnector) {
this(underlying, mongoConnector, OpenGammaFudgeContext.getInstance());
}
/**
* Creates an instance.
*
* @param underlying the underlying provider, not null
* @param mongoConnector the Mongo connector, not null
* @param fudgeContext the Fudge context, not null
*/
public MongoDBValueCachingReferenceDataProvider(ReferenceDataProvider underlying, MongoConnector mongoConnector, FudgeContext fudgeContext) {
super(underlying, fudgeContext);
ArgumentChecker.notNull(mongoConnector, "mongoConnector");
_cache = new MongoDBReferenceDataCache(mongoConnector, REFERENCE_DATA);
}
//-------------------------------------------------------------------------
/**
* Gets the cache field.
*
* @return the cache
*/
public MongoDBReferenceDataCache getCache() {
return _cache;
}
//-------------------------------------------------------------------------
@Override
protected Map<String, ReferenceData> loadFieldValues(Set<String> identifiers) {
return _cache.load(identifiers);
}
@Override
protected void saveFieldValues(ReferenceData result) {
_cache.save(result);
}
}