/**
* Copyright (C) 2010 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.security;
import java.util.List;
import java.util.Set;
import com.google.common.collect.Sets;
import com.opengamma.financial.security.bond.BillSecurity;
import com.opengamma.financial.security.bond.CorporateBondSecurity;
import com.opengamma.financial.security.bond.FloatingRateNoteSecurity;
import com.opengamma.financial.security.bond.GovernmentBondSecurity;
import com.opengamma.financial.security.bond.InflationBondSecurity;
import com.opengamma.financial.security.cds.CreditDefaultSwapIndexSecurity;
import com.opengamma.financial.security.credit.IndexCDSSecurity;
import com.opengamma.financial.security.equity.EquitySecurity;
import com.opengamma.financial.security.future.AgricultureFutureSecurity;
import com.opengamma.financial.security.future.BondFutureDeliverable;
import com.opengamma.financial.security.future.BondFutureSecurity;
import com.opengamma.financial.security.future.EnergyFutureSecurity;
import com.opengamma.financial.security.future.EquityFutureSecurity;
import com.opengamma.financial.security.future.EquityIndexDividendFutureSecurity;
import com.opengamma.financial.security.future.FXFutureSecurity;
import com.opengamma.financial.security.future.FederalFundsFutureSecurity;
import com.opengamma.financial.security.future.IndexFutureSecurity;
import com.opengamma.financial.security.future.InterestRateFutureSecurity;
import com.opengamma.financial.security.future.MetalFutureSecurity;
import com.opengamma.financial.security.future.StockFutureSecurity;
import com.opengamma.financial.security.option.BondFutureOptionSecurity;
import com.opengamma.financial.security.option.CommodityFutureOptionSecurity;
import com.opengamma.financial.security.option.CreditDefaultSwapOptionSecurity;
import com.opengamma.financial.security.option.EquityIndexDividendFutureOptionSecurity;
import com.opengamma.financial.security.option.EquityIndexFutureOptionSecurity;
import com.opengamma.financial.security.option.EquityIndexOptionSecurity;
import com.opengamma.financial.security.option.EquityOptionSecurity;
import com.opengamma.financial.security.option.FxFutureOptionSecurity;
import com.opengamma.financial.security.option.IRFutureOptionSecurity;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
/**
* Vistor to find the underlying {@code ExternalId}.
*/
public final class UnderlyingExternalIdVisitor extends FinancialSecurityVisitorAdapter<Void> {
/**
* The collected set of underlying identifiers.
*/
private final Set<ExternalIdBundle> _underlyings = Sets.newHashSet();
/**
* Creates an instance
*/
public UnderlyingExternalIdVisitor() {
}
//-------------------------------------------------------------------------
/**
* Gets the set of underlying identifiers that were found.
*
* @return the underlying identifiers, not null
*/
public Set<ExternalIdBundle> getUnderlyings() {
return _underlyings;
}
//-------------------------------------------------------------------------
@Override
public Void visitEquitySecurity(final EquitySecurity security) {
return null;
}
@Override
public Void visitBillSecurity(final BillSecurity security) {
return null;
}
@Override
public Void visitGovernmentBondSecurity(final GovernmentBondSecurity security) {
return null;
}
@Override
public Void visitCorporateBondSecurity(final CorporateBondSecurity security) {
return null;
}
@Override
public Void visitInflationBondSecurity(final InflationBondSecurity security) {
return null;
}
@Override
public Void visitAgricultureFutureSecurity(final AgricultureFutureSecurity security) {
return null;
}
@Override
public Void visitBondFutureSecurity(final BondFutureSecurity security) {
final List<BondFutureDeliverable> basketList = security.getBasket();
for (final BondFutureDeliverable deliverable : basketList) {
final ExternalIdBundle identifiers = deliverable.getIdentifiers();
if (identifiers != null) {
_underlyings.add(identifiers);
}
}
return null;
}
@Override
public Void visitEnergyFutureSecurity(final EnergyFutureSecurity security) {
final ExternalId identifier = security.getUnderlyingId();
if (identifier != null) {
_underlyings.add(ExternalIdBundle.of(identifier));
}
return null;
}
@Override
public Void visitFXFutureSecurity(final FXFutureSecurity security) {
return null;
}
@Override
public Void visitIndexFutureSecurity(final IndexFutureSecurity security) {
final ExternalId identifier = security.getUnderlyingId();
if (identifier != null) {
_underlyings.add(ExternalIdBundle.of(identifier));
}
return null;
}
@Override
public Void visitInterestRateFutureSecurity(final InterestRateFutureSecurity security) {
final ExternalId identifier = security.getUnderlyingId();
if (identifier != null) {
_underlyings.add(ExternalIdBundle.of(identifier));
}
return null;
}
@Override
public Void visitMetalFutureSecurity(final MetalFutureSecurity security) {
final ExternalId identifier = security.getUnderlyingId();
if (identifier != null) {
_underlyings.add(ExternalIdBundle.of(identifier));
}
return null;
}
@Override
public Void visitStockFutureSecurity(final StockFutureSecurity security) {
final ExternalId identifier = security.getUnderlyingId();
if (identifier != null) {
_underlyings.add(ExternalIdBundle.of(identifier));
}
return null;
}
@Override
public Void visitEquityFutureSecurity(final EquityFutureSecurity security) {
final ExternalId identifier = security.getUnderlyingId();
if (identifier != null) {
_underlyings.add(ExternalIdBundle.of(identifier));
}
return null;
}
@Override
public Void visitEquityIndexDividendFutureSecurity(final EquityIndexDividendFutureSecurity security) {
final ExternalId identifier = security.getUnderlyingId();
if (identifier != null) {
_underlyings.add(ExternalIdBundle.of(identifier));
}
return null;
}
@Override
public Void visitEquityOptionSecurity(final EquityOptionSecurity equityOptionSecurity) {
final ExternalId identifier = equityOptionSecurity.getUnderlyingId();
if (identifier != null) {
_underlyings.add(ExternalIdBundle.of(identifier));
}
return null;
}
@Override
public Void visitEquityIndexOptionSecurity(final EquityIndexOptionSecurity security) {
final ExternalId identifier = security.getUnderlyingId();
if (identifier != null) {
_underlyings.add(ExternalIdBundle.of(identifier));
}
return null;
}
@Override
public Void visitIRFutureOptionSecurity(final IRFutureOptionSecurity security) {
final ExternalId underlyingIdentifier = security.getUnderlyingId();
if (underlyingIdentifier != null) {
_underlyings.add(ExternalIdBundle.of(underlyingIdentifier));
}
return null;
}
@Override
public Void visitEquityIndexFutureOptionSecurity(final EquityIndexFutureOptionSecurity security) {
final ExternalId underlyingIdentifier = security.getUnderlyingId();
if (underlyingIdentifier != null) {
_underlyings.add(ExternalIdBundle.of(underlyingIdentifier));
}
return null;
}
@Override
public Void visitEquityIndexDividendFutureOptionSecurity(final EquityIndexDividendFutureOptionSecurity security) {
final ExternalId underlyingIdentifier = security.getUnderlyingId();
if (underlyingIdentifier != null) {
_underlyings.add(ExternalIdBundle.of(underlyingIdentifier));
}
return null;
}
@Override
public Void visitCommodityFutureOptionSecurity(final CommodityFutureOptionSecurity security) {
final ExternalId underlyingIdentifier = security.getUnderlyingId();
if (underlyingIdentifier != null) {
_underlyings.add(ExternalIdBundle.of(underlyingIdentifier));
}
return null;
}
@Override
public Void visitFxFutureOptionSecurity(final FxFutureOptionSecurity security) {
final ExternalId underlyingIdentifier = security.getUnderlyingId();
if (underlyingIdentifier != null) {
_underlyings.add(ExternalIdBundle.of(underlyingIdentifier));
}
return null;
}
@Override
public Void visitBondFutureOptionSecurity(final BondFutureOptionSecurity security) {
final ExternalId underlyingIdentifier = security.getUnderlyingId();
if (underlyingIdentifier != null) {
_underlyings.add(ExternalIdBundle.of(underlyingIdentifier));
}
return null;
}
@Override
public Void visitFederalFundsFutureSecurity(final FederalFundsFutureSecurity security) {
final ExternalId identifier = security.getUnderlyingId();
if (identifier != null) {
_underlyings.add(ExternalIdBundle.of(identifier));
}
return null;
}
@Override
public Void visitCreditDefaultSwapIndexSecurity(final CreditDefaultSwapIndexSecurity security) {
final ExternalId identifier = security.getReferenceEntity();
if (identifier != null) {
_underlyings.add(ExternalIdBundle.of(identifier));
}
return null;
}
@Override
public Void visitCreditDefaultSwapOptionSecurity(final CreditDefaultSwapOptionSecurity security) {
final ExternalId identifier = security.getUnderlyingId();
if (identifier != null) {
_underlyings.add(ExternalIdBundle.of(identifier));
}
return null;
}
@Override
public Void visitFloatingRateNoteSecurity(final FloatingRateNoteSecurity security) {
return null; //TODO the index?
}
@Override
public Void visitIndexCDSSecurity(final IndexCDSSecurity security) {
final ExternalIdBundle identifier = security.getUnderlyingIndex().resolve().getExternalIdBundle();
if (identifier != null) {
_underlyings.add(identifier);
}
return null;
}
}