Package com.opengamma.financial.analytics.fxforwardcurve

Source Code of com.opengamma.financial.analytics.fxforwardcurve.FXForwardCurveDefinitionFunction$CompiledImpl

/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.fxforwardcurve;

import java.util.Set;

import org.threeten.bp.Instant;

import com.google.common.collect.ImmutableSet;
import com.opengamma.core.config.ConfigSource;
import com.opengamma.engine.ComputationTarget;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.function.AbstractFunction;
import com.opengamma.engine.function.CompiledFunctionDefinition;
import com.opengamma.engine.function.FunctionCompilationContext;
import com.opengamma.engine.function.FunctionExecutionContext;
import com.opengamma.engine.function.FunctionInputs;
import com.opengamma.engine.target.ComputationTargetType;
import com.opengamma.engine.value.ComputedValue;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.value.ValuePropertyNames;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.value.ValueRequirementNames;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.financial.OpenGammaCompilationContext;
import com.opengamma.util.async.AsynchronousExecution;
import com.opengamma.util.money.Currency;
import com.opengamma.util.money.UnorderedCurrencyPair;

/**
* Retrieves an FXForwardCurveDefinition.
*/
public class FXForwardCurveDefinitionFunction extends AbstractFunction {

  private final UnorderedCurrencyPair _currencies;
  private final String _curveName;
  private final ComputationTargetSpecification _targetSpec;
 
  public FXForwardCurveDefinitionFunction(String ccy1, String ccy2, String curveName) {
    this(UnorderedCurrencyPair.of(Currency.of(ccy1), Currency.of(ccy2)), curveName);
  }
 
  public FXForwardCurveDefinitionFunction(UnorderedCurrencyPair currencies, String curveName) {
    _currencies = currencies;
    _curveName = curveName;
    _targetSpec = ComputationTargetType.UNORDERED_CURRENCY_PAIR.specification(currencies);
  }
 
  private class CompiledImpl extends AbstractFunction.AbstractInvokingCompiledFunction {
   
    private final FXForwardCurveDefinition _curveDefinition;
   
    public CompiledImpl(FXForwardCurveDefinition curveDefinition) {
      _curveDefinition = curveDefinition;
    }
   
    @Override
    public ComputationTargetType getTargetType() {
      return ComputationTargetType.UNORDERED_CURRENCY_PAIR;
    }
   
    @Override
    public boolean canApplyTo(FunctionCompilationContext context, ComputationTarget target) {
      return _currencies.equals((UnorderedCurrencyPair) target.getValue());
    }

    @Override
    public Set<ValueSpecification> getResults(FunctionCompilationContext context, ComputationTarget target) {
      ValueProperties properties = createResultProperties();
      return ImmutableSet.of(new ValueSpecification(ValueRequirementNames.FX_FORWARD_CURVE_DEFINITION, _targetSpec, properties));
    }

    protected ValueProperties createResultProperties() {
      return createValueProperties()
          .with(ValuePropertyNames.CURVE, _curveName).get();
    }
   
    @Override
    public Set<ValueRequirement> getRequirements(FunctionCompilationContext context, ComputationTarget target, ValueRequirement desiredValue) {
      return ImmutableSet.of();
    }
   
    @Override
    public Set<ComputedValue> execute(FunctionExecutionContext executionContext, FunctionInputs inputs, ComputationTarget target, Set<ValueRequirement> desiredValues) throws AsynchronousExecution {
      return ImmutableSet.of(new ComputedValue(new ValueSpecification(ValueRequirementNames.FX_FORWARD_CURVE_DEFINITION, _targetSpec, createResultProperties()), _curveDefinition));
    }
   
  }

  @Override
  public CompiledFunctionDefinition compile(FunctionCompilationContext context, Instant atInstant) {
    final ConfigSource configSource = OpenGammaCompilationContext.getConfigSource(context);
    final ConfigDBFXForwardCurveDefinitionSource curveDefinitionSource = new ConfigDBFXForwardCurveDefinitionSource(configSource);
    final FXForwardCurveDefinition definition = curveDefinitionSource.getDefinition(_curveName, _currencies.toString());
    return new CompiledImpl(definition);
  }

}
TOP

Related Classes of com.opengamma.financial.analytics.fxforwardcurve.FXForwardCurveDefinitionFunction$CompiledImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.