/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.masterdb.security.hibernate.bond; import com.opengamma.OpenGammaRuntimeException; import com.opengamma.financial.security.FinancialSecurityVisitor; import com.opengamma.financial.security.FinancialSecurityVisitorAdapter; import com.opengamma.financial.security.bond.BondSecurity; import com.opengamma.financial.security.bond.CorporateBondSecurity; import com.opengamma.financial.security.bond.GovernmentBondSecurity; import com.opengamma.financial.security.bond.InflationBondSecurity; import com.opengamma.financial.security.bond.MunicipalBondSecurity; /** * Bond type enumeration. */ public enum BondType { /** * */ CORPORATE, /** * */ MUNICIPAL, /** * */ GOVERNMENT, /** * */ INFLATION; public static BondType identify(final BondSecurity object) { return object.accept(new FinancialSecurityVisitorAdapter<BondType>() { @Override public BondType visitCorporateBondSecurity(CorporateBondSecurity security) { return CORPORATE; } @Override public BondType visitGovernmentBondSecurity( GovernmentBondSecurity security) { return GOVERNMENT; } @Override public BondType visitMunicipalBondSecurity(MunicipalBondSecurity security) { return MUNICIPAL; } @Override public BondType visitInflationBondSecurity(InflationBondSecurity security) { return INFLATION; } }); } public <T> T accept(final FinancialSecurityVisitor<T> visitor) { switch (this) { case CORPORATE: return visitor.visitCorporateBondSecurity(null); case GOVERNMENT: return visitor.visitGovernmentBondSecurity(null); case MUNICIPAL: return visitor.visitMunicipalBondSecurity(null); case INFLATION: return visitor.visitInflationBondSecurity(null); default: throw new OpenGammaRuntimeException("unexpected BondType: " + this); } } }