/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.aggregation;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.impl.SimplePositionComparator;
import com.opengamma.core.security.Security;
import com.opengamma.financial.security.FinancialSecurity;
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.bond.MunicipalBondSecurity;
import com.opengamma.financial.security.capfloor.CapFloorCMSSpreadSecurity;
import com.opengamma.financial.security.capfloor.CapFloorSecurity;
import com.opengamma.financial.security.cash.CashSecurity;
import com.opengamma.financial.security.cashflow.CashFlowSecurity;
import com.opengamma.financial.security.deposit.ContinuousZeroDepositSecurity;
import com.opengamma.financial.security.deposit.PeriodicZeroDepositSecurity;
import com.opengamma.financial.security.deposit.SimpleZeroDepositSecurity;
import com.opengamma.financial.security.equity.EquitySecurity;
import com.opengamma.financial.security.equity.EquityVarianceSwapSecurity;
import com.opengamma.financial.security.fra.FRASecurity;
import com.opengamma.financial.security.future.AgricultureFutureSecurity;
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.fx.FXForwardSecurity;
import com.opengamma.financial.security.fx.NonDeliverableFXForwardSecurity;
import com.opengamma.financial.security.option.BondFutureOptionSecurity;
import com.opengamma.financial.security.option.CommodityFutureOptionSecurity;
import com.opengamma.financial.security.option.EquityBarrierOptionSecurity;
import com.opengamma.financial.security.option.EquityIndexDividendFutureOptionSecurity;
import com.opengamma.financial.security.option.EquityIndexOptionSecurity;
import com.opengamma.financial.security.option.EquityOptionSecurity;
import com.opengamma.financial.security.option.FXBarrierOptionSecurity;
import com.opengamma.financial.security.option.FXDigitalOptionSecurity;
import com.opengamma.financial.security.option.FXOptionSecurity;
import com.opengamma.financial.security.option.FxFutureOptionSecurity;
import com.opengamma.financial.security.option.IRFutureOptionSecurity;
import com.opengamma.financial.security.option.NonDeliverableFXDigitalOptionSecurity;
import com.opengamma.financial.security.option.NonDeliverableFXOptionSecurity;
import com.opengamma.financial.security.option.SwaptionSecurity;
import com.opengamma.financial.security.swap.ForwardSwapSecurity;
import com.opengamma.financial.security.swap.SwapSecurity;
/**
*
*/
public class DetailedAssetClassAggregationFunction implements AggregationFunction<String> {
private static final String NAME = "Asset Class - Detailed";
private final Comparator<Position> _comparator = new SimplePositionComparator();
private static final String EQUITIES = "Equities";
private static final String GOVERNMENT_BONDS = "Government Bonds";
private static final String MUNICIPAL_BONDS = "Municipal Bonds";
private static final String CORPORATE_BONDS = "Corporate Bonds";
private static final String BOND_FUTURES = "Bond Futures";
private static final String CURRENCY_FUTURES = "Currency Futures";
private static final String INTEREST_RATE_FUTURES = "Interest Rate Futures";
private static final String UNKNOWN = "Unknown Security Type";
private static final String AGRICULTURAL_FUTURES = "Agriculture Futures";
private static final String METAL_FUTURES = "Metal Futures";
private static final String ENERGY_FUTURES = "Energy Futures";
private static final String INDEX_FUTURES = "Index Futures";
private static final String STOCK_FUTURES = "Stock Futures";
private static final String EQUITY_OPTIONS = "Equity Options";
private static final String EQUITY_BARRIER_OPTIONS = "Equity Barrier Options";
private static final String EQUITY_FUTURES = "Equity Futures";
private static final String EQUITY_INDEX_DIVIDEND_FUTURES = "Equity Index Dividend Futures";
private static final String EQUITY_VARIANCE_SWAPS = "Equity Variance Swaps";
private static final String IRFUTURE_OPTIONS = "IRFuture Options";
private static final String COMMODITY_FUTURE_OPTIONS = "Commodity Future Options";
private static final String FX_FUTURE_OPTIONS = "FX Future Options";
private static final String FX_OPTIONS = "FX Options";
private static final String NONDELIVERABLE_FX_OPTIONS = "Non-deliverable FX Options";
private static final String FX_BARRIER_OPTIONS = "FX Barrier Options";
private static final String SWAPTIONS = "Swaptions";
private static final String CASH = "Cash";
private static final String CASHFLOW = "CashFlow";
private static final String FRAS = "FRAs";
private static final String SWAPS = "Swaps";
private static final String FORWARD_SWAPS = "Forward Swaps";
private static final String EQUITY_INDEX_OPTIONS = "Equity Index Options";
private static final String FX_DIGITAL_OPTIONS = "FX Digital Options";
private static final String NONDELIVERABLE_FX_DIGITAL_OPTIONS = "Non-deliverable FX Digital Options";
private static final String FX_FORWARDS = "FX forwards";
private static final String NONDELIVERABLE_FX_FORWARDS = "Non-deliverable FX forwards";
private static final String CAP_FLOOR = "Cap/Floor";
private static final String CAP_FLOOR_CMS_SPREAD = "Cap/Floor CMS Spread";
private static final String EQUITY_INDEX_DIVIDEND_FUTURE_OPTIONS = "Equity Index Dividend Future Options";
private static final String BOND_FUTURE_OPTIONS = "Bond Future Options";
@Override
public String classifyPosition(final Position position) {
final Security security = position.getSecurity();
if (security instanceof FinancialSecurity) {
final FinancialSecurity finSec = (FinancialSecurity) security;
return finSec.accept(new FinancialSecurityVisitorAdapter<String>() {
@Override
public String visitAgricultureFutureSecurity(final AgricultureFutureSecurity security) {
return AGRICULTURAL_FUTURES;
}
@Override
public String visitCorporateBondSecurity(final CorporateBondSecurity security) {
return CORPORATE_BONDS;
}
@Override
public String visitGovernmentBondSecurity(final GovernmentBondSecurity security) {
return GOVERNMENT_BONDS;
}
@Override
public String visitMunicipalBondSecurity(final MunicipalBondSecurity security) {
return MUNICIPAL_BONDS;
}
@Override
public String visitCapFloorCMSSpreadSecurity(final CapFloorCMSSpreadSecurity security) {
return CAP_FLOOR_CMS_SPREAD;
}
@Override
public String visitCapFloorSecurity(final CapFloorSecurity security) {
return CAP_FLOOR;
}
@Override
public String visitCashSecurity(final CashSecurity security) {
return CASH;
}
@Override
public String visitCashFlowSecurity(final CashFlowSecurity security) {
return CASHFLOW;
}
@Override
public String visitContinuousZeroDepositSecurity(final ContinuousZeroDepositSecurity security) {
throw new UnsupportedOperationException("Should not form a position containing a ContinuousZeroDepositSecurity");
}
@Override
public String visitEquityBarrierOptionSecurity(final EquityBarrierOptionSecurity security) {
return EQUITY_BARRIER_OPTIONS;
}
@Override
public String visitEquityIndexDividendFutureOptionSecurity(final EquityIndexDividendFutureOptionSecurity security) {
return EQUITY_INDEX_DIVIDEND_FUTURE_OPTIONS;
}
@Override
public String visitEquityIndexOptionSecurity(final EquityIndexOptionSecurity security) {
return EQUITY_INDEX_OPTIONS;
}
@Override
public String visitEquityOptionSecurity(final EquityOptionSecurity security) {
return EQUITY_OPTIONS;
}
@Override
public String visitEquitySecurity(final EquitySecurity security) {
return EQUITIES;
}
@Override
public String visitEquityVarianceSwapSecurity(final EquityVarianceSwapSecurity security) {
return EQUITY_VARIANCE_SWAPS;
}
@Override
public String visitFRASecurity(final FRASecurity security) {
return FRAS;
}
@Override
public String visitFXBarrierOptionSecurity(final FXBarrierOptionSecurity security) {
return FX_BARRIER_OPTIONS;
}
@Override
public String visitFXDigitalOptionSecurity(final FXDigitalOptionSecurity security) {
return FX_DIGITAL_OPTIONS;
}
@Override
public String visitFXForwardSecurity(final FXForwardSecurity security) {
return FX_FORWARDS;
}
@Override
public String visitFXOptionSecurity(final FXOptionSecurity security) {
return FX_OPTIONS;
}
@Override
public String visitIRFutureOptionSecurity(final IRFutureOptionSecurity security) {
return IRFUTURE_OPTIONS;
}
@Override
public String visitInterestRateFutureSecurity(final InterestRateFutureSecurity security) {
return INTEREST_RATE_FUTURES;
}
@Override
public String visitNonDeliverableFXDigitalOptionSecurity(final NonDeliverableFXDigitalOptionSecurity security) {
return NONDELIVERABLE_FX_DIGITAL_OPTIONS;
}
@Override
public String visitNonDeliverableFXForwardSecurity(final NonDeliverableFXForwardSecurity security) {
return NONDELIVERABLE_FX_FORWARDS;
}
@Override
public String visitNonDeliverableFXOptionSecurity(final NonDeliverableFXOptionSecurity security) {
return NONDELIVERABLE_FX_OPTIONS;
}
@Override
public String visitPeriodicZeroDepositSecurity(final PeriodicZeroDepositSecurity security) {
throw new UnsupportedOperationException("Should not form a position containing a PeriodicZeroDepositSecurity");
}
@Override
public String visitSimpleZeroDepositSecurity(final SimpleZeroDepositSecurity security) {
throw new UnsupportedOperationException("Should not form a position containing a SimpleZeroDepositSecurity");
}
@Override
public String visitForwardSwapSecurity(final ForwardSwapSecurity security) {
return FORWARD_SWAPS;
}
@Override
public String visitSwapSecurity(final SwapSecurity security) {
return SWAPS;
}
@Override
public String visitSwaptionSecurity(final SwaptionSecurity security) {
return SWAPTIONS;
}
@Override
public String visitBondFutureSecurity(final BondFutureSecurity security) {
return BOND_FUTURES;
}
@Override
public String visitCommodityFutureOptionSecurity(final CommodityFutureOptionSecurity security) {
return COMMODITY_FUTURE_OPTIONS;
}
@Override
public String visitFxFutureOptionSecurity(final FxFutureOptionSecurity security) {
return FX_FUTURE_OPTIONS;
}
@Override
public String visitEnergyFutureSecurity(final EnergyFutureSecurity security) {
return ENERGY_FUTURES;
}
@Override
public String visitEquityFutureSecurity(final EquityFutureSecurity security) {
return EQUITY_FUTURES;
}
@Override
public String visitEquityIndexDividendFutureSecurity(final EquityIndexDividendFutureSecurity security) {
return EQUITY_INDEX_DIVIDEND_FUTURES;
}
@Override
public String visitFXFutureSecurity(final FXFutureSecurity security) {
return CURRENCY_FUTURES;
}
@Override
public String visitIndexFutureSecurity(final IndexFutureSecurity security) {
return INDEX_FUTURES;
}
@Override
public String visitMetalFutureSecurity(final MetalFutureSecurity security) {
return METAL_FUTURES;
}
@Override
public String visitStockFutureSecurity(final StockFutureSecurity security) {
return STOCK_FUTURES;
}
@Override
public String visitBondFutureOptionSecurity(final BondFutureOptionSecurity security) {
return BOND_FUTURE_OPTIONS;
}
});
}
return UNKNOWN;
}
@Override
public String getName() {
return NAME;
}
@Override
public Collection<String> getRequiredEntries() {
return Collections.emptyList();
}
@Override
public int compare(final String detailedAssetClass1, final String detailedAssetClass2) {
return detailedAssetClass1.compareTo(detailedAssetClass2);
}
@Override
public Comparator<Position> getPositionComparator() {
return _comparator;
}
}