/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame.engine;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.UniqueIdentifiable;
import com.opengamma.sesame.marketdata.HtsRequestKey;
import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries;
/**
* Proxies the components from a component map such that
* registered listeners can be informed of any requests made.
*/
public class DefaultProxiedComponentMap implements ProxiedComponentMap {
private final Multimap<Class<?>, UniqueIdentifiable> _componentDataRequests =
Multimaps.synchronizedMultimap(HashMultimap.<Class<?>, UniqueIdentifiable>create());
private final Multimap<HtsRequestKey, LocalDateDoubleTimeSeries> _htsRequests =
Multimaps.synchronizedMultimap(HashMultimap.<HtsRequestKey, LocalDateDoubleTimeSeries>create());
@Override
public void receivedCall(Class<?> componentType, UniqueIdentifiable result) {
_componentDataRequests.put(componentType, result);
}
@Override
public void receivedHtsCall(ExternalIdBundle identifierBundle,
String dataSource,
String dataProvider,
String dataField,
LocalDateDoubleTimeSeries hts) {
_htsRequests.put(HtsRequestKey.of(identifierBundle, dataSource, dataProvider, dataField), hts);
}
@Override
public Multimap<Class<?>, UniqueIdentifiable> retrieveResults() {
// Strictly we should synchronize access as per Guava
// documentation, but this method is called once all
// entries have been added to the map
return ImmutableMultimap.copyOf(_componentDataRequests);
}
@Override
public Multimap<HtsRequestKey, LocalDateDoubleTimeSeries> retrieveHtsResults() {
// Strictly we should synchronize access as per Guava
// documentation, but this method is called once all
// entries have been added to the map
return ImmutableMultimap.copyOf(_htsRequests);
}
}