/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame.engine;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.sesame.config.ViewConfig;
import com.opengamma.sesame.marketdata.FieldName;
import com.opengamma.sesame.marketdata.MarketDataEnvironment;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.result.Result;
import com.opengamma.util.tuple.Pair;
/**
* A simple cycle recorder implementation that captures all component calls made during execution of the cycle.
*/
public class DefaultCycleRecorder implements CycleRecorder {
private final ViewConfig _viewConfig;
private final List<?> _tradeInputs;
private final CalculationArguments _calculationArguments;
private final ProxiedComponentMap _proxiedComponentMap;
private final MarketDataEnvironment _marketDataEnvironment;
/**
* Construct the recorder.
*
* @param viewConfig the view config used for the cycle
* @param tradeInputs the trades/securities used for the cycle
* @param calculationArguments the cycle arguments used to run the cycle
* be used whilst the cycle is running
* @param proxiedComponentMap the components that will be used
* whilst the cycle is running
*/
public DefaultCycleRecorder(ViewConfig viewConfig,
List<?> tradeInputs,
CalculationArguments calculationArguments,
MarketDataEnvironment marketDataEnvironment,
ProxiedComponentMap proxiedComponentMap) {
_marketDataEnvironment = ArgumentChecker.notNull(marketDataEnvironment, "marketDataEnvironment");
_viewConfig = ArgumentChecker.notNull(viewConfig, "viewConfig");
_tradeInputs = ArgumentChecker.notNull(tradeInputs, "tradeInputs");
_calculationArguments = ArgumentChecker.notNull(calculationArguments, "calculationArguments");
_proxiedComponentMap = ArgumentChecker.notNull(proxiedComponentMap, "proxiedComponentMap");
}
@Override
public Results complete(Results results) {
Map<ZonedDateTime, Map<Pair<ExternalIdBundle, FieldName>, Result<?>>> emptyMarketData = Collections.emptyMap();
ViewInputs viewInputs = new ViewInputs(_tradeInputs,
_viewConfig,
_calculationArguments.getFunctionArguments(),
_calculationArguments.getValuationTime(),
emptyMarketData,
_proxiedComponentMap.retrieveResults(),
_proxiedComponentMap.retrieveHtsResults(),
_marketDataEnvironment);
return results.withViewInputs(viewInputs);
}
}