/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.masterdb.security.hibernate.swap; import com.opengamma.OpenGammaRuntimeException; import com.opengamma.financial.security.FinancialSecurityVisitor; import com.opengamma.financial.security.FinancialSecurityVisitorAdapter; import com.opengamma.financial.security.swap.ForwardSwapSecurity; import com.opengamma.financial.security.swap.SwapSecurity; import com.opengamma.financial.security.swap.YearOnYearInflationSwapSecurity; import com.opengamma.financial.security.swap.ZeroCouponInflationSwapSecurity; /** * */ public enum SwapType { /** * A vanilla swap type */ SWAP, /** * Forward starting swap type */ FORWARD, /** * Zero coupon inflation swap type */ ZERO_COUPON_INFLATION, /** * Year on Year inflation swap type */ YEAR_ON_YEAR_INFLATION; public static SwapType identify(final SwapSecurity object) { return object.accept(new FinancialSecurityVisitorAdapter<SwapType>() { @Override public SwapType visitForwardSwapSecurity(ForwardSwapSecurity security) { return FORWARD; } @Override public SwapType visitSwapSecurity(SwapSecurity security) { return SWAP; } @Override public SwapType visitZeroCouponInflationSwapSecurity(ZeroCouponInflationSwapSecurity security) { return ZERO_COUPON_INFLATION; } @Override public SwapType visitYearOnYearInflationSwapSecurity(YearOnYearInflationSwapSecurity security) { return YEAR_ON_YEAR_INFLATION; } }); } public <T> T accept(final FinancialSecurityVisitor<T> visitor) { switch (this) { case SWAP: return visitor.visitSwapSecurity(null); case FORWARD: return visitor.visitForwardSwapSecurity(null); case ZERO_COUPON_INFLATION: return visitor.visitZeroCouponInflationSwapSecurity(null); case YEAR_ON_YEAR_INFLATION: return visitor.visitYearOnYearInflationSwapSecurity(null); default: throw new OpenGammaRuntimeException("unexpected SwapType: " + this); } } }