/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.masterdb.security.hibernate.option;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.financial.security.option.AmericanExerciseType;
import com.opengamma.financial.security.option.AsianExerciseType;
import com.opengamma.financial.security.option.BermudanExerciseType;
import com.opengamma.financial.security.option.EuropeanExerciseType;
import com.opengamma.financial.security.option.ExerciseType;
import com.opengamma.financial.security.option.ExerciseTypeVisitor;
/**
* Exercise type of the option.
*/
public enum OptionExerciseType {
/** American */
AMERICAN,
/** Asian */
ASIAN,
/** Bermudan */
BERMUDAN,
/** European */
EUROPEAN;
public static OptionExerciseType identify(ExerciseType exerciseType) {
return exerciseType.accept(new ExerciseTypeVisitor<OptionExerciseType>() {
@Override
public OptionExerciseType visitAmericanExerciseType(AmericanExerciseType exerciseType) {
return AMERICAN;
}
@Override
public OptionExerciseType visitAsianExerciseType(AsianExerciseType exerciseType) {
return ASIAN;
}
@Override
public OptionExerciseType visitBermudanExerciseType(BermudanExerciseType exerciseType) {
return BERMUDAN;
}
@Override
public OptionExerciseType visitEuropeanExerciseType(EuropeanExerciseType exerciseType) {
return EUROPEAN;
}
});
}
public <T> T accept(final ExerciseTypeVisitor<T> visitor) {
switch (this) {
case AMERICAN :
return visitor.visitAmericanExerciseType(null);
case ASIAN :
return visitor.visitAsianExerciseType(null);
case BERMUDAN :
return visitor.visitBermudanExerciseType(null);
case EUROPEAN :
return visitor.visitEuropeanExerciseType(null);
default:
throw new OpenGammaRuntimeException("unexpected enum value " + this);
}
}
}