/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.bbg.referencedata.cache; import java.io.Serializable; import net.sf.ehcache.CacheManager; import org.fudgemsg.FudgeContext; import org.fudgemsg.FudgeMsg; import com.opengamma.bbg.referencedata.ReferenceData; import com.opengamma.bbg.referencedata.ReferenceDataProvider; /** * Decorates a reference data provider, adding caching. * <p> * The cache is implemented using {@code EHCache} and uses a byte[] for use on disk. */ public class DiskStoreEHValueCachingReferenceDataProvider extends EHValueCachingReferenceDataProvider { /** * Creates an instance. * * @param underlying the underlying reference data provider, not null * @param cacheManager the cache manager, not null */ public DiskStoreEHValueCachingReferenceDataProvider(final ReferenceDataProvider underlying, final CacheManager cacheManager) { super(underlying, cacheManager); } /** * Creates an instance. * * @param underlying the underlying reference data provider, not null * @param cacheManager the cache manager, not null * @param fudgeContext the Fudge context, not null */ public DiskStoreEHValueCachingReferenceDataProvider(final ReferenceDataProvider underlying, final CacheManager cacheManager, final FudgeContext fudgeContext) { super(underlying, cacheManager, fudgeContext); } //------------------------------------------------------------------------- @Override protected ReferenceData parseCachedObject(Object fromCache) { CachedReferenceDataForDisk rd = (CachedReferenceDataForDisk) fromCache; FudgeMsg fieldValues = getFudgeContext().deserialize(rd._fieldData).getMessage(); return new ReferenceData(rd._identifier, fieldValues); } @Override protected Object createCachedObject(ReferenceData refDataResult) { CachedReferenceDataForDisk result = new CachedReferenceDataForDisk(); result._identifier = refDataResult.getIdentifier(); result._fieldData = getFudgeContext().toByteArray(refDataResult.getFieldValues()); return result; } //------------------------------------------------------------------------- /** * Data holder for storing the results. */ private static class CachedReferenceDataForDisk implements Serializable { /** Serialization. */ private static final long serialVersionUID = -8758715022254765226L; private String _identifier; private byte[] _fieldData; } }