/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.currency; import com.opengamma.engine.function.FunctionExecutionContext; import com.opengamma.engine.function.FunctionInputs; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.engine.value.ValueRequirementNames; import com.opengamma.timeseries.DoubleTimeSeries; import com.opengamma.util.money.Currency; /** * Injects the last point from a time series implied from a value from a {@link CurrencyMatrix} into a dependency graph. */ public class CurrencyMatrixLatestSourcingFunction extends CurrencyMatrixSeriesSourcingFunction { public CurrencyMatrixLatestSourcingFunction() { super(ValueRequirementNames.HISTORICAL_TIME_SERIES_LATEST); } @Override protected Object getRate(CurrencyMatrix matrix, ValueRequirement desiredValue, FunctionExecutionContext executionContext, FunctionInputs inputs, Currency source, Currency target) { final Object fxSeries = super.getRate(matrix, desiredValue, executionContext, inputs, source, target); if (fxSeries == null) { return null; } if (fxSeries instanceof DoubleTimeSeries) { final DoubleTimeSeries<?> ts = (DoubleTimeSeries<?>) fxSeries; return ts.getLatestValue(); } throw new IllegalArgumentException("Expected timeseries, got " + fxSeries); } public static ValueRequirement getConversionRequirement(final Currency source, final Currency target) { return new ValueRequirement(ValueRequirementNames.HISTORICAL_TIME_SERIES_LATEST, CurrencyPair.TYPE.specification(CurrencyPair.of(target, source))); } public static ValueRequirement getConversionRequirement(final String source, final String target) { return getConversionRequirement(Currency.of(source), Currency.of(target)); } }