/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics; import java.util.Collections; import java.util.Set; import org.apache.commons.lang.Validate; import com.google.common.collect.Sets; import com.opengamma.engine.ComputationTarget; 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; /** * */ public class PositionWeightFromNAVFunction extends AbstractFunction.NonCompiledInvoker { private final double _nav; public PositionWeightFromNAVFunction(final String nav) { Validate.notNull(nav, "nav"); _nav = Double.parseDouble(nav); } @Override public Set<ComputedValue> execute(final FunctionExecutionContext executionContext, final FunctionInputs inputs, final ComputationTarget target, final Set<ValueRequirement> desiredValues) { final Object fairValueObj = inputs.getValue(ValueRequirementNames.FAIR_VALUE); if (fairValueObj != null) { final double fairValue = (Double) fairValueObj; return Sets.newHashSet(new ComputedValue(new ValueSpecification(ValueRequirementNames.WEIGHT, target.toSpecification(), createValueProperties().get()), fairValue / _nav)); } return null; } @Override public Set<ValueRequirement> getRequirements(final FunctionCompilationContext context, final ComputationTarget target, final ValueRequirement desiredValue) { return Collections.singleton(new ValueRequirement(ValueRequirementNames.FAIR_VALUE, target.toSpecification())); } @Override public Set<ValueSpecification> getResults(final FunctionCompilationContext context, final ComputationTarget target) { return Collections.singleton(new ValueSpecification(ValueRequirementNames.WEIGHT, target.toSpecification(), createValueProperties().get())); } @Override public String getShortName() { return "PositionWeightFromNAV"; } @Override public ComputationTargetType getTargetType() { return ComputationTargetType.POSITION; } }