/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.view.rest; import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.ws.rs.core.UriBuilder; import org.threeten.bp.Instant; import com.opengamma.core.position.Portfolio; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.depgraph.DependencyGraph; import com.opengamma.engine.depgraph.DependencyGraphExplorer; import com.opengamma.engine.function.FunctionParameters; import com.opengamma.engine.marketdata.manipulator.DistinctMarketDataSelector; import com.opengamma.engine.target.ComputationTargetReference; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.engine.value.ValueSpecification; import com.opengamma.engine.view.ViewDefinition; import com.opengamma.engine.view.compilation.CompiledViewCalculationConfiguration; import com.opengamma.engine.view.compilation.CompiledViewDefinition; import com.opengamma.engine.view.compilation.CompiledViewDefinitionWithGraphs; import com.opengamma.id.UniqueId; import com.opengamma.id.VersionCorrection; import com.opengamma.util.rest.FudgeRestClient; /** * Remote implementation of {@link CompiledViewDefinition}. */ public class RemoteCompiledViewDefinitionWithGraphs implements CompiledViewDefinitionWithGraphs { private final URI _baseUri; private final FudgeRestClient _client; public RemoteCompiledViewDefinitionWithGraphs(final URI baseUri) { _baseUri = baseUri; _client = FudgeRestClient.create(); } private RemoteCompiledViewDefinitionWithGraphs(final URI baseUri, final FudgeRestClient client) { _baseUri = baseUri; _client = client; } @Override public VersionCorrection getResolverVersionCorrection() { throw new UnsupportedOperationException("TODO: Implement this method over REST"); } @Override public String getCompilationIdentifier() { throw new UnsupportedOperationException("TODO: Implement this method over REST"); } @Override public CompiledViewDefinitionWithGraphs withResolverVersionCorrection(final VersionCorrection versionCorrection) { return new RemoteCompiledViewDefinitionWithGraphs(_baseUri, _client) { @Override public VersionCorrection getResolverVersionCorrection() { return versionCorrection; } }; } @Override public CompiledViewDefinitionWithGraphs withMarketDataManipulationSelections(Map<String, DependencyGraph> newGraphsByConfig, Map<String, Map<DistinctMarketDataSelector, Set<ValueSpecification>>> selectionsByConfig, Map<String, Map<DistinctMarketDataSelector, FunctionParameters>> paramsByConfig) { throw new UnsupportedOperationException("TODO: Implement this method over REST"); } @Override public ViewDefinition getViewDefinition() { final URI uri = UriBuilder.fromUri(_baseUri).path(DataCompiledViewDefinitionResource.PATH_VIEW_DEFINITION).build(); return _client.accessFudge(uri).get(ViewDefinition.class); } @Override public Portfolio getPortfolio() { final URI uri = UriBuilder.fromUri(_baseUri).path(DataCompiledViewDefinitionResource.PATH_PORTFOLIO).build(); return _client.accessFudge(uri).get(Portfolio.class); } @Override public CompiledViewCalculationConfiguration getCompiledCalculationConfiguration(final String viewCalculationConfiguration) { final URI baseUri = UriBuilder.fromUri(_baseUri).path(DataCompiledViewDefinitionResource.PATH_COMPILED_CALCULATION_CONFIGURATIONS).build(); final URI uri = DataCompiledViewDefinitionResource.uriCompiledCalculationConfiguration(baseUri, viewCalculationConfiguration); return _client.accessFudge(uri).get(CompiledViewCalculationConfiguration.class); } @SuppressWarnings("unchecked") @Override public Collection<CompiledViewCalculationConfiguration> getCompiledCalculationConfigurations() { final URI uri = UriBuilder.fromUri(_baseUri).path(DataCompiledViewDefinitionResource.PATH_COMPILED_CALCULATION_CONFIGURATIONS).build(); return _client.accessFudge(uri).get(List.class); } @SuppressWarnings("unchecked") @Override public Map<String, CompiledViewCalculationConfiguration> getCompiledCalculationConfigurationsMap() { final URI uri = UriBuilder.fromUri(_baseUri).path(DataCompiledViewDefinitionResource.PATH_COMPILED_CALCULATION_CONFIGURATIONS_MAP).build(); return _client.accessFudge(uri).get(Map.class); } @SuppressWarnings("unchecked") @Override public Set<ValueSpecification> getMarketDataRequirements() { final URI uri = UriBuilder.fromUri(_baseUri).path(DataCompiledViewDefinitionResource.PATH_MARKET_DATA_REQUIREMENTS).build(); return _client.accessFudge(uri).get(Set.class); } @SuppressWarnings("unchecked") @Override public Set<ComputationTargetSpecification> getComputationTargets() { final URI uri = UriBuilder.fromUri(_baseUri).path(DataCompiledViewDefinitionResource.PATH_COMPUTATION_TARGETS).build(); return _client.accessFudge(uri).get(Set.class); } @Override public Instant getValidFrom() { final URI uri = UriBuilder.fromUri(_baseUri).path(DataCompiledViewDefinitionResource.PATH_VALID_FROM).build(); return _client.accessFudge(uri).get(Instant.class); } @Override public Instant getValidTo() { final URI uri = UriBuilder.fromUri(_baseUri).path(DataCompiledViewDefinitionResource.PATH_VALID_TO).build(); return _client.accessFudge(uri).get(Instant.class); } @Override public Collection<DependencyGraphExplorer> getDependencyGraphExplorers() { final Collection<CompiledViewCalculationConfiguration> configurations = getCompiledCalculationConfigurations(); final List<DependencyGraphExplorer> explorers = new ArrayList<DependencyGraphExplorer>(configurations.size()); for (CompiledViewCalculationConfiguration configuration : configurations) { explorers.add(getDependencyGraphExplorer(configuration.getName())); } return explorers; } @Override public DependencyGraphExplorer getDependencyGraphExplorer(final String calcConfig) { final URI uri = UriBuilder.fromUri(_baseUri).path(DataCompiledViewDefinitionResource.PATH_GRAPHS).path(calcConfig).build(); return new RemoteDependencyGraphExplorer(uri); } @Override public Map<ComputationTargetReference, UniqueId> getResolvedIdentifiers() { throw new UnsupportedOperationException("TODO: Implement this method over REST"); } @Override public Map<ValueSpecification, Set<ValueRequirement>> getTerminalValuesRequirements() { final Map<ValueSpecification, Set<ValueRequirement>> terminalValuesRequirements = new HashMap<ValueSpecification, Set<ValueRequirement>>(); final Collection<CompiledViewCalculationConfiguration> compiledCalculationConfigurations = getCompiledCalculationConfigurations(); for (final CompiledViewCalculationConfiguration compiledCalculationConfiguration : compiledCalculationConfigurations) { terminalValuesRequirements.putAll(compiledCalculationConfiguration.getTerminalOutputSpecifications()); } return terminalValuesRequirements; } }