com.opengamma.engine.test.CalculationNodeUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.engine.test.CalculationNodeUtils.java

Source

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

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

import org.threeten.bp.Instant;

import com.google.common.collect.Sets;
import com.opengamma.engine.ComputationTarget;
import com.opengamma.engine.cache.CacheSelectHint;
import com.opengamma.engine.calcnode.CalculationJob;
import com.opengamma.engine.calcnode.CalculationJobItem;
import com.opengamma.engine.calcnode.CalculationJobSpecification;
import com.opengamma.engine.function.InMemoryFunctionRepository;
import com.opengamma.engine.target.ComputationTargetType;
import com.opengamma.engine.value.ValuePropertyNames;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.engine.view.ExecutionLogMode;
import com.opengamma.id.UniqueId;
import com.opengamma.id.VersionCorrection;
import com.opengamma.util.money.Currency;

/**
 *
 */
public class CalculationNodeUtils {

    /**
     * Default calculation configuration name
     */
    public static final String CALC_CONF_NAME = "Default";

    public static TestCalculationNode getTestCalcNode(final MockFunction mockFunction) {
        final TestCalculationNode calcNode = new TestCalculationNode();
        configureTestCalcNode(calcNode, mockFunction);
        return calcNode;
    }

    public static void configureTestCalcNode(final TestCalculationNode calcNode, final MockFunction mockFunction) {
        final InMemoryFunctionRepository functionRepo = (InMemoryFunctionRepository) calcNode
                .getFunctionCompilationService().getFunctionRepository();
        functionRepo.addFunction(mockFunction);
        calcNode.getFunctionCompilationService().initialize();
    }

    public static MockFunction getMockFunction() {
        final ComputationTarget target = new ComputationTarget(ComputationTargetType.CURRENCY, Currency.USD);
        return getMockFunction(target, "Nothing we care about");
    }

    public static MockFunction getMockFunction(final ComputationTarget target, final Object output) {
        return MockFunction.getMockFunction(MockFunction.UNIQUE_ID, target, output,
                new ValueRequirement("INPUT", target.toSpecification()));
    }

    public static Set<ValueSpecification> getMockFunctionInputs(final MockFunction function) {
        final Set<ValueRequirement> requirements = function.getRequirements();
        final Set<ValueSpecification> inputs = Sets.newHashSetWithExpectedSize(requirements.size());
        for (final ValueRequirement requirement : requirements) {
            inputs.add(new ValueSpecification(requirement.getValueName(),
                    requirement.getTargetReference().getSpecification(),
                    requirement.getConstraints().copy().with(ValuePropertyNames.FUNCTION, "mock").get()));
        }
        return inputs;
    }

    public static CalculationJob getCalculationJob(final MockFunction function) {
        return getCalculationJob(function, ExecutionLogMode.INDICATORS);
    }

    public static CalculationJob getCalculationJob(final MockFunction function, final ExecutionLogMode logMode) {
        final Instant valuationTime = Instant.now();
        final CalculationJobSpecification jobSpec = new CalculationJobSpecification(
                UniqueId.of("Test", "ViewProcess"), CALC_CONF_NAME, valuationTime, 1L);
        final CalculationJobItem calculationJobItem = new CalculationJobItem(function.getUniqueId(),
                function.getDefaultParameters(), function.getTarget().toSpecification(),
                getMockFunctionInputs(function), function.getResultSpecs(), logMode);
        final CalculationJob calcJob = new CalculationJob(jobSpec, 0L, VersionCorrection.LATEST, null,
                Collections.singletonList(calculationJobItem), CacheSelectHint.allShared());
        return calcJob;
    }

}