Package com.opengamma.financial.security.function

Source Code of com.opengamma.financial.security.function.DefaultSecurityAttributeFunction

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

import java.util.Collections;
import java.util.Set;

import com.opengamma.core.security.Security;
import com.opengamma.engine.ComputationTarget;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.function.AbstractFunction;
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.ValueRequirement;
import com.opengamma.engine.value.ValueRequirementNames;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.financial.currency.CurrencyPairs;
import com.opengamma.financial.security.lookup.DefaultSecurityAttributeMappings;
import com.opengamma.financial.security.lookup.SecurityAttribute;
import com.opengamma.financial.security.lookup.SecurityAttributeMapper;
import com.opengamma.util.async.AsynchronousExecution;

/**
* Function which uses mappings configured in the {@link SecurityAttributeMapper} to
* extract its values from securities.
*/
public class DefaultSecurityAttributeFunction extends AbstractFunction.NonCompiledInvoker {

  private SecurityAttribute _attribute;
  private String _valueRequirementName;

  public DefaultSecurityAttributeFunction(String attribute, String valueRequirementName) {
    _attribute = SecurityAttribute.valueOf(attribute);
    _valueRequirementName = valueRequirementName;
  }

  @Override
  public ComputationTargetType getTargetType() {
    return ComputationTargetType.POSITION_OR_TRADE;
  }

  @Override
  public Set<ValueSpecification> getResults(FunctionCompilationContext context, ComputationTarget target) {
    return Collections.singleton(getSpec(target));
  }

  @Override
  public Set<ValueRequirement> getRequirements(FunctionCompilationContext context, ComputationTarget target, ValueRequirement desiredValue) {
    return Collections.singleton(new ValueRequirement(
        ValueRequirementNames.CURRENCY_PAIRS,
        ComputationTargetSpecification.NULL));
  }

  @Override
  public Set<ComputedValue> execute(FunctionExecutionContext executionContext, FunctionInputs inputs, ComputationTarget target, Set<ValueRequirement> desiredValues) throws AsynchronousExecution {
    CurrencyPairs ccyPairs = (CurrencyPairs) inputs.getComputedValue(ValueRequirementNames.CURRENCY_PAIRS).getValue();

    SecurityAttributeMapper mapper = DefaultSecurityAttributeMappings.create(ccyPairs);
   
    Security security = target.getPositionOrTrade().getSecurity();
    Object result = mapper.valueFor(_attribute, security);
   
    return Collections.singleton(new ComputedValue(getSpec(target), result));
  }

  private ValueSpecification getSpec(ComputationTarget target) {
    return new ValueSpecification(_valueRequirementName,
        target.toSpecification(),
        createValueProperties().get());
  }

}
TOP

Related Classes of com.opengamma.financial.security.function.DefaultSecurityAttributeFunction

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.