Package com.opengamma.engine.view.impl

Source Code of com.opengamma.engine.view.impl.InMemoryViewResultModel

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

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.threeten.bp.Duration;
import org.threeten.bp.Instant;

import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.value.ComputedValueResult;
import com.opengamma.engine.view.ViewCalculationResultModel;
import com.opengamma.engine.view.ViewResultEntry;
import com.opengamma.engine.view.ViewResultModel;
import com.opengamma.engine.view.ViewTargetResultModel;
import com.opengamma.engine.view.execution.ViewCycleExecutionOptions;
import com.opengamma.id.UniqueId;
import com.opengamma.id.VersionCorrection;

/**
* A simple in-memory implementation of {@link ViewResultModel}.
*/
public abstract class InMemoryViewResultModel implements ViewResultModel, Serializable {

  private static final long serialVersionUID = 1L;

  private UniqueId _viewProcessId;
  private UniqueId _viewCycleId;
  private ViewCycleExecutionOptions _viewCycleExecutionOptions;
  private Instant _calculationTime;
  private Duration _calculationDuration;
  private VersionCorrection _versionCorrection;
  private final Map<String, ViewCalculationResultModelImpl> _resultsByConfiguration = new HashMap<String, ViewCalculationResultModelImpl>();
  private final Map<ComputationTargetSpecification, ViewTargetResultModelImpl> _resultsByTarget = new HashMap<ComputationTargetSpecification, ViewTargetResultModelImpl>();

  public InMemoryViewResultModel() {
  }

  public InMemoryViewResultModel(final ViewResultModel copyFrom) {
    update(copyFrom);
  }

  /**
   * Updates the data held in this model with data from (and about) a delta cycle.
   *
   * @param delta the delta results, not null
   */
  public void update(final ViewResultModel delta) {
    setViewProcessId(delta.getViewProcessId());
    setViewCycleId(delta.getViewCycleId());
    setViewCycleExecutionOptions(delta.getViewCycleExecutionOptions());
    setCalculationTime(delta.getCalculationTime());
    setCalculationDuration(delta.getCalculationDuration());
    setVersionCorrection(delta.getVersionCorrection());
    for (String calculationConfiguration : delta.getCalculationConfigurationNames()) {
      final ViewCalculationResultModel deltaConfigResults = delta.getCalculationResult(calculationConfiguration);
      ViewCalculationResultModelImpl calcConfigResults = _resultsByConfiguration.get(calculationConfiguration);
      if (calcConfigResults == null) {
        calcConfigResults = new ViewCalculationResultModelImpl();
        _resultsByConfiguration.put(calculationConfiguration, calcConfigResults);
      }
      for (ComputationTargetSpecification target : deltaConfigResults.getAllTargets()) {
        for (ComputedValueResult value : deltaConfigResults.getAllValues(target)) {
          calcConfigResults.addValue(target, value);
          ViewTargetResultModelImpl targetResults = _resultsByTarget.get(target);
          if (targetResults == null) {
            targetResults = new ViewTargetResultModelImpl();
            _resultsByTarget.put(target, targetResults);
          }
          targetResults.addValue(calculationConfiguration, value);
        }
      }
    }
  }

  public boolean isEmpty() {
    // Adding any results makes the maps non-empty
    return _resultsByTarget.isEmpty();
  }

  @Override
  public UniqueId getViewProcessId() {
    return _viewProcessId;
  }

  public void setViewProcessId(UniqueId viewProcessId) {
    _viewProcessId = viewProcessId;
  }

  @Override
  public UniqueId getViewCycleId() {
    return _viewCycleId;
  }

  public void setViewCycleId(UniqueId viewCycleId) {
    _viewCycleId = viewCycleId;
  }

  @Override
  public ViewCycleExecutionOptions getViewCycleExecutionOptions() {
    return _viewCycleExecutionOptions;
  }

  public void setViewCycleExecutionOptions(ViewCycleExecutionOptions viewCycleExecutionOptions) {
    _viewCycleExecutionOptions = viewCycleExecutionOptions;
  }

  @Override
  public Instant getCalculationTime() {
    return _calculationTime;
  }

  public void setCalculationTime(Instant calculationTime) {
    _calculationTime = calculationTime;
  }

  @Override
  public Duration getCalculationDuration() {
    return _calculationDuration;
  }

  public void setCalculationDuration(Duration calculationDuration) {
    _calculationDuration = calculationDuration;
  }

  @Override
  public VersionCorrection getVersionCorrection() {
    return _versionCorrection;
  }

  public void setVersionCorrection(VersionCorrection versionCorrection) {
    _versionCorrection = versionCorrection;
  }

  @Override
  public Set<ComputationTargetSpecification> getAllTargets() {
    return Collections.unmodifiableSet(_resultsByTarget.keySet());
  }

  /**
   * For testing.
   */
  /* package */ViewCalculationResultModelImpl getCalculationResultModelImpl(final String calcConfigurationName) {
    return _resultsByConfiguration.get(calcConfigurationName);
  }

  public void addValue(final String calcConfigurationName, final ComputedValueResult value) {
    final ComputationTargetSpecification target = value.getSpecification().getTargetSpecification();
    ViewCalculationResultModelImpl result = _resultsByConfiguration.get(calcConfigurationName);
    if (result == null) {
      result = new ViewCalculationResultModelImpl();
      _resultsByConfiguration.put(calcConfigurationName, result);
    }
    result.addValue(target, value);
    ViewTargetResultModelImpl targetResult = _resultsByTarget.get(target);
    if (targetResult == null) {
      targetResult = new ViewTargetResultModelImpl();
      _resultsByTarget.put(target, targetResult);
    }
    targetResult.addValue(calcConfigurationName, value);
  }

  @Override
  public Collection<String> getCalculationConfigurationNames() {
    return Collections.unmodifiableSet(_resultsByConfiguration.keySet());
  }

  @Override
  public ViewCalculationResultModel getCalculationResult(String calcConfigurationName) {
    return _resultsByConfiguration.get(calcConfigurationName);
  }

  @Override
  public ViewTargetResultModel getTargetResult(ComputationTargetSpecification targetSpecification) {
    return _resultsByTarget.get(targetSpecification);
  }

  @Override
  public List<ViewResultEntry> getAllResults() {
    final ArrayList<ViewResultEntry> results = new ArrayList<ViewResultEntry>();
    for (Map.Entry<String, ViewCalculationResultModelImpl> config : _resultsByConfiguration.entrySet()) {
      final Collection<ComputationTargetSpecification> targets = config.getValue().getAllTargets();
      int numTargets = targets.size();
      int totalComputedValues = 0;
      int targetsSeen = 0;
      for (ComputationTargetSpecification target : targets) {
        final Collection<ComputedValueResult> computedValues = config.getValue().getAllValues(target);
        totalComputedValues += computedValues.size();
        targetsSeen++;
        results.ensureCapacity(numTargets * (totalComputedValues / targetsSeen));
        for (ComputedValueResult computedValue : computedValues) {
          results.add(new ViewResultEntry(config.getKey(), computedValue));
        }
      }
    }
    return results;
  }

  @Override
  public Set<String> getAllOutputValueNames() {
    Set<String> outputValueNames = new HashSet<String>();
    for (ViewResultEntry result : getAllResults()) {
      outputValueNames.add(result.getComputedValue().getSpecification().getValueName());
    }
    return outputValueNames;
  }

}
TOP

Related Classes of com.opengamma.engine.view.impl.InMemoryViewResultModel

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.