/**
* 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 java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import com.google.common.collect.Maps;
import com.opengamma.bbg.referencedata.ReferenceDataProvider;
/**
* Decorates a reference data provider, adding caching of invalid field errors.
* <p>
* The cache is implemented using memory.
*/
public class InMemoryInvalidFieldCachingReferenceDataProvider extends AbstractInvalidFieldCachingReferenceDataProvider {
/**
* The in memory cache.
*/
private static final ConcurrentMap<String, Set<String>> s_cache = new ConcurrentHashMap<String, Set<String>>();
/**
* Creates an instance.
*
* @param underlying the underlying provider, not null
*/
public InMemoryInvalidFieldCachingReferenceDataProvider(ReferenceDataProvider underlying) {
super(underlying);
}
//-------------------------------------------------------------------------
@Override
protected void saveInvalidFields(String identifier, Set<String> invalidFields) {
s_cache.put(identifier, invalidFields);
}
@Override
protected Map<String, Set<String>> loadInvalidFields(Set<String> identifiers) {
Map<String, Set<String>> result = Maps.newHashMap();
for (String identifier : identifiers) {
Set<String> invalidFields = s_cache.get(identifier);
result.put(identifier, invalidFields);
}
return result;
}
}