/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.model.credit;
import com.opengamma.core.security.SecuritySource;
import com.opengamma.financial.credit.CdsRecoveryRateIdentifier;
import com.opengamma.financial.security.FinancialSecurityVisitorAdapter;
import com.opengamma.financial.security.cds.CreditDefaultSwapSecurity;
import com.opengamma.financial.security.cds.LegacyVanillaCDSSecurity;
import com.opengamma.financial.security.cds.StandardVanillaCDSSecurity;
import com.opengamma.financial.security.option.CreditDefaultSwapOptionSecurity;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.Currency;
/**
*
*/
public final class CreditSecurityToRecoveryRateVisitor extends FinancialSecurityVisitorAdapter<CdsRecoveryRateIdentifier> {
private final SecuritySource _securitySource;
public CreditSecurityToRecoveryRateVisitor(final SecuritySource securitySource) {
ArgumentChecker.notNull(securitySource, "security source");
_securitySource = securitySource;
}
@Override
public CdsRecoveryRateIdentifier visitStandardVanillaCDSSecurity(final StandardVanillaCDSSecurity security) {
final ExternalId redCode = security.getReferenceEntity();
final Currency currency = security.getNotional().getCurrency();
final String seniority = security.getDebtSeniority().name();
final String restructuringClause = security.getRestructuringClause().name();
return CdsRecoveryRateIdentifier.forSamedayCds(redCode.getValue(), currency, seniority, restructuringClause);
}
@Override
public CdsRecoveryRateIdentifier visitLegacyVanillaCDSSecurity(final LegacyVanillaCDSSecurity security) {
final ExternalId redCode = security.getReferenceEntity();
final Currency currency = security.getNotional().getCurrency();
final String seniority = security.getDebtSeniority().name();
final String restructuringClause = security.getRestructuringClause().name();
return CdsRecoveryRateIdentifier.forSamedayCds(redCode.getValue(), currency, seniority, restructuringClause);
}
@Override
public CdsRecoveryRateIdentifier visitCreditDefaultSwapOptionSecurity(final CreditDefaultSwapOptionSecurity security) {
final CreditDefaultSwapSecurity underlyingSwap = (CreditDefaultSwapSecurity) _securitySource.getSingle(ExternalIdBundle.of(security.getUnderlyingId())); //TODO version correction?
return underlyingSwap.accept(this);
}
}