/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.masterdb.security.hibernate.option;
import static com.opengamma.masterdb.security.hibernate.Converters.currencyBeanToCurrency;
import static com.opengamma.masterdb.security.hibernate.Converters.expiryBeanToExpiry;
import static com.opengamma.masterdb.security.hibernate.Converters.expiryToExpiryBean;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.financial.security.option.ExerciseType;
import com.opengamma.financial.security.option.ExerciseTypeVisitorImpl;
import com.opengamma.financial.security.option.NonDeliverableFXOptionSecurity;
import com.opengamma.masterdb.security.hibernate.AbstractSecurityBeanOperation;
import com.opengamma.masterdb.security.hibernate.Converters;
import com.opengamma.masterdb.security.hibernate.HibernateSecurityMasterDao;
import com.opengamma.masterdb.security.hibernate.OperationContext;
import com.opengamma.util.money.Currency;
import com.opengamma.util.time.Expiry;
/**
* NonDeliverableFXOptionSecurityBeanOperation
*/
public final class NonDeliverableFxOptionSecurityBeanOperation extends AbstractSecurityBeanOperation<NonDeliverableFXOptionSecurity, NonDeliverableFXOptionSecurityBean> {
/**
* Singleton
*/
public static final NonDeliverableFxOptionSecurityBeanOperation INSTANCE = new NonDeliverableFxOptionSecurityBeanOperation();
private NonDeliverableFxOptionSecurityBeanOperation() {
super(NonDeliverableFXOptionSecurity.SECURITY_TYPE, NonDeliverableFXOptionSecurity.class, NonDeliverableFXOptionSecurityBean.class);
}
@Override
public NonDeliverableFXOptionSecurityBean createBean(final OperationContext context, final HibernateSecurityMasterDao secMasterSession, final NonDeliverableFXOptionSecurity security) {
final NonDeliverableFXOptionSecurityBean bean = new NonDeliverableFXOptionSecurityBean();
bean.setCallAmount(security.getCallAmount());
bean.setPutAmount(security.getPutAmount());
bean.setCallCurrency(secMasterSession.getOrCreateCurrencyBean(security.getCallCurrency().getCode()));
bean.setPutCurrency(secMasterSession.getOrCreateCurrencyBean(security.getPutCurrency().getCode()));
bean.setExpiry(expiryToExpiryBean(security.getExpiry()));
bean.setSettlementDate(Converters.dateTimeWithZoneToZonedDateTimeBean(security.getSettlementDate()));
bean.setIsLong(security.isLong());
bean.setOptionExerciseType(OptionExerciseType.identify(security.getExerciseType()));
bean.setIsDeliveryInCallCurrency(security.isDeliveryInCallCurrency());
return bean;
}
@Override
public NonDeliverableFXOptionSecurity createSecurity(OperationContext context, NonDeliverableFXOptionSecurityBean bean) {
final ExerciseType exerciseType = bean.getOptionExerciseType().accept(new ExerciseTypeVisitorImpl());
Currency putCurrency = currencyBeanToCurrency(bean.getPutCurrency());
Currency callCurrency = currencyBeanToCurrency(bean.getCallCurrency());
Expiry expiry = expiryBeanToExpiry(bean.getExpiry());
ZonedDateTime settlementDate = Converters.zonedDateTimeBeanToDateTimeWithZone(bean.getSettlementDate());
boolean isDeliveryInCallCurrency = bean.getIsDeliveryInCallCurrency();
NonDeliverableFXOptionSecurity sec =
new NonDeliverableFXOptionSecurity(putCurrency, callCurrency, bean.getPutAmount(), bean.getCallAmount(), expiry, settlementDate, bean.getIsLong(), exerciseType, isDeliveryInCallCurrency);
return sec;
}
}