Package com.opengamma.financial.depgraph.rest

Source Code of com.opengamma.financial.depgraph.rest.DependencyGraphTraceBuilder

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

import java.util.Collection;
import java.util.Collections;
import java.util.List;

import org.threeten.bp.Instant;

import com.opengamma.engine.depgraph.DependencyGraph;
import com.opengamma.engine.depgraph.DependencyGraphBuilder;
import com.opengamma.engine.depgraph.ResolutionFailure;
import com.opengamma.engine.depgraph.ResolutionFailureAccumulator;
import com.opengamma.engine.function.FunctionCompilationContext;
import com.opengamma.engine.function.resolver.DefaultCompiledFunctionResolver;
import com.opengamma.engine.function.resolver.ResolutionRule;
import com.opengamma.engine.marketdata.CombinedMarketDataProvider;
import com.opengamma.engine.marketdata.MarketDataProvider;
import com.opengamma.engine.marketdata.availability.MarketDataAvailabilityProvider;
import com.opengamma.engine.marketdata.resolver.MarketDataProviderResolver;
import com.opengamma.engine.marketdata.spec.MarketData;
import com.opengamma.engine.marketdata.spec.MarketDataSpecification;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.view.ViewCalculationConfiguration;
import com.opengamma.engine.view.ViewDefinition;
import com.opengamma.engine.view.worker.SnapshottingViewExecutionDataProvider;
import com.opengamma.financial.depgraph.provider.LocalDependencyGraphTraceProvider;
import com.opengamma.livedata.UserPrincipal;

/**
* Helper class for {@link LocalDependencyGraphTraceProvider}.
*
* Implements builder pattern with defaults.
*/
public class DependencyGraphTraceBuilder {

  private final DependencyGraphBuilderResourceContextBean _builderContext;

  public DependencyGraphTraceBuilder(DependencyGraphBuilderResourceContextBean builderContext) {
    _builderContext = builderContext;
  }

  /**
   * Builds the dependency graph trace with the configured params.
   * @param properties the properties to use
   * @return the built trace object
   */
  public DependencyGraphBuildTrace build(DependencyGraphTraceBuilderProperties properties) {
    final DependencyGraphBuilder builder = _builderContext.getDependencyGraphBuilderFactory().newInstance();
    builder.setCalculationConfigurationName(properties.getCalculationConfigurationName());
    final FunctionCompilationContext context = _builderContext.getFunctionCompilationContext().clone();
    final ViewDefinition definition = new ViewDefinition("Mock View", "Test");
    final ViewCalculationConfiguration calcConfig = new ViewCalculationConfiguration(definition, properties.getCalculationConfigurationName());
    calcConfig.setDefaultProperties(properties.getDefaultProperties());
    context.setViewCalculationConfiguration(calcConfig);
    context.setComputationTargetResolver(context.getRawComputationTargetResolver().atVersionCorrection(properties.getResolutionTime()));
    builder.setCompilationContext(context);
    final Collection<ResolutionRule> rules = _builderContext.getFunctionResolver().compile((properties.getValuationTime() != null) ? properties.getValuationTime() : Instant.now())
        .getAllResolutionRules();
    // TODO: allow transformation rules
    final DefaultCompiledFunctionResolver functions = new DefaultCompiledFunctionResolver(context, rules);
    functions.compileRules();
    builder.setFunctionResolver(functions);
    builder.setFunctionExclusionGroups(_builderContext.getFunctionExclusionGroups());
    // TODO this isn't used. is this OK?
    final UserPrincipal marketDataUser = UserPrincipal.getLocalUser();
    final MarketDataProviderResolver resolver = _builderContext.getMarketDataProviderResolver();
    List<MarketDataSpecification> marketData = properties.getMarketData();
    if (marketData == null || marketData.isEmpty()) {
      marketData = Collections.<MarketDataSpecification>singletonList(MarketData.live());
    }
   
    MarketDataAvailabilityProvider availabilityProvider = new SnapshottingViewExecutionDataProvider(marketDataUser, marketData, resolver).getAvailabilityProvider();
    builder.setMarketDataAvailabilityProvider(availabilityProvider);
    final ResolutionFailureAccumulator resolutionFailureAccumulator = new ResolutionFailureAccumulator();
    builder.setResolutionFailureListener(resolutionFailureAccumulator);
    builder.setDisableFailureReporting(false);
    for (final ValueRequirement requirement : properties.getRequirements()) {
      builder.addTarget(requirement);
    }
    DependencyGraph dependencyGraph = builder.getDependencyGraph();
    List<ResolutionFailure> resolutionFailures = resolutionFailureAccumulator.getResolutionFailures();

    DependencyGraphBuildTrace graphBuildTrace = DependencyGraphBuildTrace.of(
        dependencyGraph,
        builder.getExceptions(),
        resolutionFailures,
        builder.getValueRequirementMapping());

    return graphBuildTrace;

  }
}
TOP

Related Classes of com.opengamma.financial.depgraph.rest.DependencyGraphTraceBuilder

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.