Package com.opengamma.financial.depgraph.provider

Source Code of com.opengamma.financial.depgraph.provider.RemoteDependencyGraphTraceProvider

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

import static java.lang.String.format;

import java.net.URI;
import java.util.Collection;
import java.util.List;
import java.util.Set;

import org.threeten.bp.Instant;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Iterables;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.marketdata.spec.MarketDataSpecification;
import com.opengamma.engine.marketdata.spec.UserMarketDataSpecification;
import com.opengamma.engine.target.ComputationTargetReference;
import com.opengamma.engine.target.ComputationTargetRequirement;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.financial.depgraph.rest.DependencyGraphBuildTrace;
import com.opengamma.financial.depgraph.rest.DependencyGraphTraceBuilderProperties;
import com.opengamma.financial.depgraph.rest.DependencyGraphTraceProviderResource;
import com.opengamma.id.ExternalId;
import com.opengamma.id.UniqueId;
import com.opengamma.id.VersionCorrection;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.rest.AbstractRemoteClient;

/**
* Provides remote access to a {@link DependencyGraphTraceProvider}.
*/
public class RemoteDependencyGraphTraceProvider extends AbstractRemoteClient implements DependencyGraphTraceProvider {

  /**
   * Creates an instance.
   *
   * @param baseUri the target URI for all RESTful web services, not null
   */
  public RemoteDependencyGraphTraceProvider(URI baseUri) {
    super(baseUri);
  }

  @Override
  public DependencyGraphBuildTrace getTrace(DependencyGraphTraceBuilderProperties properties) {
    URI uri = buildUri(properties);

    return accessRemote(uri).get(DependencyGraphBuildTrace.class);
  }

  /**
   * Builds the url to use for the remote access.
   * @param properties the properties to use
   * @return a full URI
   */
  @VisibleForTesting
  URI buildUri(DependencyGraphTraceBuilderProperties properties) {
    URI uri = getBaseUri();

    //process single value properties:
    String calcConfigName = properties.getCalculationConfigurationName();
    uri = DependencyGraphTraceProviderResource.uriCalculationConfigurationName(uri, calcConfigName);

    ValueProperties defaultProperties = properties.getDefaultProperties();
    uri = DependencyGraphTraceProviderResource.uriDefaultProperties(uri, defaultProperties);

    List<MarketDataSpecification> marketData = properties.getMarketData();
    if (marketData != null) {
      uri = DependencyGraphTraceProviderResource.uriMarketData(uri, marketData);
    }

    VersionCorrection resolutionTime = properties.getResolutionTime();
    uri = DependencyGraphTraceProviderResource.uriResolutionTime(uri, resolutionTime);

    Instant valuationTime = properties.getValuationTime();
    if (valuationTime != null) {
      uri = DependencyGraphTraceProviderResource.uriValuationTime(uri, valuationTime);
    }

    //process requirements:
    uri = processRequirements(uri, properties.getRequirements());

    return DependencyGraphTraceProviderResource.uriBuild(uri);
  }

  /**
   * Unpacks the requirements into URI form.
   * @param uri the uri to append to
   * @param requirements the requirements to append
   */
  private URI processRequirements(URI uri, Collection<ValueRequirement> requirements) {
    for (ValueRequirement valueRequirement : requirements) {

      String valueName = valueRequirement.getValueName();

      ValueProperties constraints = valueRequirement.getConstraints();

      String contraintStr = constraints.isEmpty() ? "" : constraints.toString();

      String constrainedValueName = valueName + contraintStr;

      ComputationTargetReference targetReference = valueRequirement.getTargetReference();
      String targetType = targetReference.getType().toString();

      if (targetReference instanceof ComputationTargetRequirement) {
        ComputationTargetRequirement requirement = (ComputationTargetRequirement) targetReference;
        Set<ExternalId> externalIds = requirement.getIdentifiers().getExternalIds();
        ArgumentChecker.isTrue(externalIds.size() == 1, "One (and only one) external id must be specified currently.");
        ExternalId externalId = Iterables.get(externalIds, 0);
        uri = DependencyGraphTraceProviderResource.uriValueRequirementByExternalId(uri, constrainedValueName, targetType, externalId);
      } else if (targetReference instanceof ComputationTargetSpecification) {
        UniqueId uniqueId = ((ComputationTargetSpecification) targetReference).getUniqueId();
        uri = DependencyGraphTraceProviderResource.uriValueRequirementByUniqueId(uri, constrainedValueName, targetType, uniqueId);
      } else {
        throw new IllegalArgumentException(format("Unrecognised ValueRequirement class: %s", ValueRequirement.class.getName()));
      }
    }
    return uri;
  }
}
TOP

Related Classes of com.opengamma.financial.depgraph.provider.RemoteDependencyGraphTraceProvider

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.