/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.regression; import java.util.List; import org.threeten.bp.Instant; import com.google.common.base.Preconditions; import com.google.common.collect.Iterables; import com.opengamma.core.marketdatasnapshot.impl.ManageableMarketDataSnapshot; import com.opengamma.financial.tool.ToolContext; import com.opengamma.id.VersionCorrection; import com.opengamma.master.marketdatasnapshot.MarketDataSnapshotDocument; import com.opengamma.master.marketdatasnapshot.MarketDataSnapshotMaster; import com.opengamma.master.marketdatasnapshot.MarketDataSnapshotSearchRequest; /** * Creates a golden copy instance, managing view execution. */ public class GoldenCopyCreator { private final ToolContext _toolContext; public GoldenCopyCreator(ToolContext toolContext) { _toolContext = toolContext; } public ToolContext getToolContext() { return _toolContext; } /** * Run the view, building a golden copy from the result. * @param viewName view name * @param snapshotName snapshot name * @param version version * @return a new golden copy */ public GoldenCopy run(String viewName, String snapshotName, String version) { Instant valuationTime = getValuationTime(snapshotName); ViewRunner viewRunner = new ViewRunner(getToolContext().getConfigMaster(), getToolContext().getViewProcessor(), getToolContext().getPositionSource(), getToolContext().getSecuritySource(), getToolContext().getMarketDataSnapshotMaster()); CalculationResults results = viewRunner.run(version, viewName, snapshotName, valuationTime); return GoldenCopy.create(snapshotName, viewName, valuationTime, results); } private Instant getValuationTime(String snapshotName) { MarketDataSnapshotMaster snapshotMaster = getToolContext().getMarketDataSnapshotMaster(); MarketDataSnapshotSearchRequest searchRequest = new MarketDataSnapshotSearchRequest(); searchRequest.setName(snapshotName); searchRequest.setVersionCorrection(VersionCorrection.LATEST); List<MarketDataSnapshotDocument> documents = snapshotMaster.search(searchRequest).getDocuments(); Preconditions.checkArgument(documents.size() == 1, "One (and only one) snapshot should exist for given name '%s'. Found %s records: %s", snapshotName, documents.size(), documents); return Iterables.getOnlyElement(documents).getNamedSnapshot(ManageableMarketDataSnapshot.class).getValuationTime(); } }