/** * 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().getFunctionRepositoryFactory().constructRepository(Instant.now()); 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; } }