com.opengamma.engine.function.MarketDataAliasingFunction.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.engine.function.MarketDataAliasingFunction.java

Source

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

import java.util.Collection;
import java.util.Set;

import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import com.opengamma.engine.ComputationTarget;
import com.opengamma.engine.cache.MissingInput;
import com.opengamma.engine.value.ComputedValue;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.UniqueId;

/**
 * A no-op function that relabels an input as any of the desired outputs. This will be selected during graph construction to handle any mismatches between value specifications the market data provider
 * is capable of recognizing and the value specifications corresponding to the requirements of a function. The will typically mean that a target has become re-labeled - for example the market data is
 * keyed off a {@link UniqueId} that is not easily converted to/from the {@link ExternalIdBundle} for the actual target.
 * <p>
 * This should be present in all function repositories with its preferred identifier.
 */
public final class MarketDataAliasingFunction extends IntrinsicFunction {

    /**
     * Shared instance.
     */
    public static final MarketDataAliasingFunction INSTANCE = new MarketDataAliasingFunction();

    /**
     * Preferred identifier this function will be available in a repository as.
     */
    public static final String UNIQUE_ID = "Alias";

    public MarketDataAliasingFunction() {
        super(UNIQUE_ID);
    }

    // FunctionInvoker

    @Override
    public Set<ComputedValue> execute(final FunctionExecutionContext executionContext, final FunctionInputs inputs,
            final ComputationTarget target, final Set<ValueRequirement> desiredValues) {
        final Collection<ComputedValue> values = inputs.getAllValues();
        final Object value = values.isEmpty() ? MissingInput.MISSING_MARKET_DATA
                : Iterables.getOnlyElement(values).getValue();
        final Set<ComputedValue> result = Sets.newHashSetWithExpectedSize(desiredValues.size());
        for (ValueRequirement desiredValueReq : desiredValues) {
            final ValueSpecification desiredValue = new ValueSpecification(desiredValueReq.getValueName(),
                    target.toSpecification(), desiredValueReq.getConstraints());
            result.add(new ComputedValue(desiredValue, value));
        }
        return result;
    }

}