/** * Copyright (C) 2010 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.bbg.loader; import java.util.List; import java.util.Set; import com.google.common.collect.Sets; import com.opengamma.financial.security.FinancialSecurityVisitor; import com.opengamma.financial.security.FinancialSecurityVisitorAdapter; import com.opengamma.financial.security.bond.CorporateBondSecurity; import com.opengamma.financial.security.bond.GovernmentBondSecurity; 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.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.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; /** * Collects Underlying identifiers for loaded securities */ public final class UnderlyingIdentifierCollector { private final Set<ExternalIdBundle> _underlyings = Sets.newHashSet(); private final FinancialSecurityVisitor<Void> _financialSecurityVisitor; /** * Creates an instance */ public UnderlyingIdentifierCollector() { FinancialSecurityVisitor<Void> underlyingIdentifierCollector = new FinancialSecurityVisitorAdapter<Void>() { @Override public Void visitEquitySecurity(EquitySecurity security) { return null; } @Override public Void visitGovernmentBondSecurity(GovernmentBondSecurity security) { return null; } @Override public Void visitCorporateBondSecurity(CorporateBondSecurity security) { return null; } @Override public Void visitAgricultureFutureSecurity(AgricultureFutureSecurity security) { return null; } @Override public Void visitBondFutureSecurity(BondFutureSecurity security) { List<BondFutureDeliverable> basketList = security.getBasket(); for (BondFutureDeliverable deliverable : basketList) { ExternalIdBundle identifiers = deliverable.getIdentifiers(); if (identifiers != null) { _underlyings.add(identifiers); } } return null; } @Override public Void visitEnergyFutureSecurity(EnergyFutureSecurity security) { ExternalId identifier = security.getUnderlyingId(); if (identifier != null) { _underlyings.add(ExternalIdBundle.of(identifier)); } return null; } @Override public Void visitFXFutureSecurity(FXFutureSecurity security) { return null; } @Override public Void visitIndexFutureSecurity(IndexFutureSecurity security) { ExternalId identifier = security.getUnderlyingId(); if (identifier != null) { _underlyings.add(ExternalIdBundle.of(identifier)); } return null; } @Override public Void visitInterestRateFutureSecurity(InterestRateFutureSecurity security) { ExternalId identifier = security.getUnderlyingId(); if (identifier != null) { _underlyings.add(ExternalIdBundle.of(identifier)); } return null; } @Override public Void visitMetalFutureSecurity(MetalFutureSecurity security) { ExternalId identifier = security.getUnderlyingId(); if (identifier != null) { _underlyings.add(ExternalIdBundle.of(identifier)); } return null; } @Override public Void visitStockFutureSecurity(StockFutureSecurity security) { ExternalId identifier = security.getUnderlyingId(); if (identifier != null) { _underlyings.add(ExternalIdBundle.of(identifier)); } return null; } @Override public Void visitEquityFutureSecurity(EquityFutureSecurity security) { ExternalId identifier = security.getUnderlyingId(); if (identifier != null) { _underlyings.add(ExternalIdBundle.of(identifier)); } return null; } @Override public Void visitEquityIndexDividendFutureSecurity(EquityIndexDividendFutureSecurity security) { ExternalId identifier = security.getUnderlyingId(); if (identifier != null) { _underlyings.add(ExternalIdBundle.of(identifier)); } return null; } @Override public Void visitEquityOptionSecurity(EquityOptionSecurity equityOptionSecurity) { ExternalId identifier = equityOptionSecurity.getUnderlyingId(); if (identifier != null) { _underlyings.add(ExternalIdBundle.of(identifier)); } return null; } @Override public Void visitEquityIndexOptionSecurity(EquityIndexOptionSecurity security) { ExternalId identifier = security.getUnderlyingId(); if (identifier != null) { _underlyings.add(ExternalIdBundle.of(identifier)); } return null; } @Override public Void visitIRFutureOptionSecurity(IRFutureOptionSecurity security) { ExternalId underlyingIdentifier = security.getUnderlyingId(); if (underlyingIdentifier != null) { _underlyings.add(ExternalIdBundle.of(underlyingIdentifier)); } return null; } @Override public Void visitEquityIndexFutureOptionSecurity(final EquityIndexFutureOptionSecurity security) { ExternalId underlyingIdentifier = security.getUnderlyingId(); if (underlyingIdentifier != null) { _underlyings.add(ExternalIdBundle.of(underlyingIdentifier)); } return null; } @Override public Void visitEquityIndexDividendFutureOptionSecurity(final EquityIndexDividendFutureOptionSecurity security) { ExternalId underlyingIdentifier = security.getUnderlyingId(); if (underlyingIdentifier != null) { _underlyings.add(ExternalIdBundle.of(underlyingIdentifier)); } return null; } @Override public Void visitCommodityFutureOptionSecurity(CommodityFutureOptionSecurity security) { ExternalId underlyingIdentifier = security.getUnderlyingId(); if (underlyingIdentifier != null) { _underlyings.add(ExternalIdBundle.of(underlyingIdentifier)); } return null; } @Override public Void visitFxFutureOptionSecurity(FxFutureOptionSecurity security) { ExternalId underlyingIdentifier = security.getUnderlyingId(); if (underlyingIdentifier != null) { _underlyings.add(ExternalIdBundle.of(underlyingIdentifier)); } return null; } @Override public Void visitBondFutureOptionSecurity(BondFutureOptionSecurity security) { ExternalId underlyingIdentifier = security.getUnderlyingId(); if (underlyingIdentifier != null) { _underlyings.add(ExternalIdBundle.of(underlyingIdentifier)); } return null; } }; _financialSecurityVisitor = underlyingIdentifierCollector; } /** * Gets the underlyings. * @return the underlyings */ public Set<ExternalIdBundle> getUnderlyings() { return _underlyings; } /** * Gets the financialSecurityVisitor. * @return the financialSecurityVisitor */ public FinancialSecurityVisitor<Void> getFinancialSecurityVisitor() { return _financialSecurityVisitor; } }