/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.sesame; import java.math.BigDecimal; import java.util.Set; import org.threeten.bp.LocalDate; import org.threeten.bp.OffsetTime; import com.google.common.collect.Iterables; import com.opengamma.analytics.financial.forex.method.FXMatrix; import com.opengamma.core.position.Counterparty; import com.opengamma.core.position.Trade; import com.opengamma.core.position.impl.SimpleCounterparty; import com.opengamma.core.position.impl.SimpleTrade; import com.opengamma.financial.analytics.curve.CurveConstructionConfiguration; import com.opengamma.financial.security.FinancialSecurity; import com.opengamma.id.ExternalId; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.result.FailureStatus; import com.opengamma.util.result.Result; /** * Default implementation of IssuerProviderFn that returns a multicurve bundle of curves by issuer. */ public class ExposureFunctionsIssuerProviderFn implements IssuerProviderFn { private final MarketExposureSelector _marketExposureSelector; private final IssuerProviderBundleFn _issuerProviderBundleFn; public ExposureFunctionsIssuerProviderFn(MarketExposureSelector marketExposureSelector, IssuerProviderBundleFn issuerProviderBundleFn) { _marketExposureSelector = ArgumentChecker.notNull(marketExposureSelector, "marketExposureSelector"); _issuerProviderBundleFn = ArgumentChecker.notNull(issuerProviderBundleFn, "issuerProviderBundleFn"); } @Override public Result<IssuerProviderBundle> createBundle(Environment env, FinancialSecurity security, FXMatrix fxMatrix) { Trade tradeWrapper = new SimpleTrade(security, BigDecimal.ONE, new SimpleCounterparty(ExternalId.of(Counterparty.DEFAULT_SCHEME, "CPARTY")), LocalDate.now(), OffsetTime.now()); return createBundle(env, tradeWrapper, fxMatrix); } @Override public Result<IssuerProviderBundle> createBundle(Environment env, Trade trade, FXMatrix fxMatrix) { return getMulticurveBundle(env, trade); } @Override public Result<IssuerProviderBundle> getMulticurveBundle(Environment env, Trade trade) { Set<CurveConstructionConfiguration> curveConfigs = _marketExposureSelector.determineCurveConfigurations(trade); switch (curveConfigs.size()) { case 0: return Result.failure(FailureStatus.MISSING_DATA, "No curve construction configs found for {}", trade); case 1: return _issuerProviderBundleFn.generateBundle(env, Iterables.getOnlyElement(curveConfigs)); default: return Result.failure(FailureStatus.MULTIPLE, "Found {} configs, expected one", curveConfigs.size()); } } }