/**
* 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.swap.CommodityNotional;
import com.opengamma.financial.security.swap.InterestRateNotional;
import com.opengamma.financial.security.swap.Notional;
import com.opengamma.financial.security.swap.NotionalVisitor;
import com.opengamma.financial.security.swap.SecurityNotional;
import com.opengamma.financial.security.swap.VarianceSwapNotional;
/**
*
*/
public enum NotionalType {
/**
*
*/
COMMODITY,
/**
*
*/
INTEREST_RATE,
/**
*
*/
SECURITY,
/**
*
*/
VARIANCE;
public static NotionalType identify(final Notional object) {
return object.accept(new NotionalVisitor<NotionalType>() {
@Override
public NotionalType visitCommodityNotional(CommodityNotional notional) {
return COMMODITY;
}
@Override
public NotionalType visitInterestRateNotional(InterestRateNotional notional) {
return INTEREST_RATE;
}
@Override
public NotionalType visitSecurityNotional(SecurityNotional notional) {
return SECURITY;
}
@Override
public NotionalType visitVarianceSwapNotional(VarianceSwapNotional notional) {
return VARIANCE;
}
});
}
public <T> T accept(final NotionalVisitor<T> visitor) {
switch (this) {
case COMMODITY:
return visitor.visitCommodityNotional(null);
case INTEREST_RATE:
return visitor.visitInterestRateNotional(null);
case SECURITY:
return visitor.visitSecurityNotional(null);
case VARIANCE:
return visitor.visitVarianceSwapNotional(null);
default:
throw new OpenGammaRuntimeException("unexpected SwapLegType: " + this);
}
}
}