/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.masterdb.security.hibernate.cds;
import static com.opengamma.masterdb.security.hibernate.Converters.businessDayConventionBeanToBusinessDayConvention;
import static com.opengamma.masterdb.security.hibernate.Converters.dateTimeWithZoneToZonedDateTimeBean;
import static com.opengamma.masterdb.security.hibernate.Converters.dayCountBeanToDayCount;
import static com.opengamma.masterdb.security.hibernate.Converters.debtSeniorityBeanToDebtSeniority;
import static com.opengamma.masterdb.security.hibernate.Converters.externalIdBeanToExternalId;
import static com.opengamma.masterdb.security.hibernate.Converters.frequencyBeanToFrequency;
import static com.opengamma.masterdb.security.hibernate.Converters.restructuringClauseBeanToRestructuringClause;
import static com.opengamma.masterdb.security.hibernate.Converters.stubTypeBeanToStubType;
import static com.opengamma.masterdb.security.hibernate.Converters.zonedDateTimeBeanToDateTimeWithZone;
import static com.opengamma.masterdb.security.hibernate.swap.NotionalBeanOperation.createNotional;
import com.opengamma.financial.security.cds.StandardVanillaCDSSecurity;
import com.opengamma.financial.security.swap.InterestRateNotional;
import com.opengamma.masterdb.security.hibernate.AbstractSecurityBeanOperation;
import com.opengamma.masterdb.security.hibernate.HibernateSecurityMasterDao;
import com.opengamma.masterdb.security.hibernate.OperationContext;
import com.opengamma.masterdb.security.hibernate.swap.NotionalBeanOperation;
/**
*
*/
public final class StdVanillaCDSSecurityBeanOperation extends AbstractSecurityBeanOperation<StandardVanillaCDSSecurity, StandardVanillaCDSSecurityBean> {
/**
* Singleton
*/
public static final StdVanillaCDSSecurityBeanOperation INSTANCE = new StdVanillaCDSSecurityBeanOperation();
private StdVanillaCDSSecurityBeanOperation() {
super(StandardVanillaCDSSecurity.SECURITY_TYPE, StandardVanillaCDSSecurity.class, StandardVanillaCDSSecurityBean.class);
}
@Override
public StandardVanillaCDSSecurityBean createBean(OperationContext context, HibernateSecurityMasterDao secMasterSession, StandardVanillaCDSSecurity security) {
StandardVanillaCDSSecurityBean bean = new StandardVanillaCDSSecurityBean();
CreditDefaultSwapBeanOperation.createBean(secMasterSession, bean, security);
bean.setQuotedSpread(security.getQuotedSpread());
bean.setUpfrontAmount(NotionalBeanOperation.createBean(secMasterSession, security.getUpfrontAmount()));
bean.setCoupon(security.getCoupon());
bean.setAdjustCashSettlementDate(security.isAdjustCashSettlementDate());
bean.setCashSettlementDate(dateTimeWithZoneToZonedDateTimeBean(security.getCashSettlementDate()));
return bean;
}
@Override
public StandardVanillaCDSSecurity createSecurity(OperationContext context, StandardVanillaCDSSecurityBean bean) {
StandardVanillaCDSSecurity security = new StandardVanillaCDSSecurity(
bean.getBuy(),
externalIdBeanToExternalId(bean.getProtectionSeller()),
externalIdBeanToExternalId(bean.getProtectionBuyer()),
externalIdBeanToExternalId(bean.getReferenceEntity()),
debtSeniorityBeanToDebtSeniority(bean.getDebtSeniority()),
restructuringClauseBeanToRestructuringClause(bean.getRestructuringClause()),
externalIdBeanToExternalId(bean.getRegionId()),
zonedDateTimeBeanToDateTimeWithZone(bean.getStartDate()),
zonedDateTimeBeanToDateTimeWithZone(bean.getEffectiveDate()),
zonedDateTimeBeanToDateTimeWithZone(bean.getMaturityDate()),
stubTypeBeanToStubType(bean.getStubType()),
frequencyBeanToFrequency(bean.getCouponFrequency()),
dayCountBeanToDayCount(bean.getDayCount()),
businessDayConventionBeanToBusinessDayConvention(bean.getBusinessDayConvention()),
bean.getImmAdjustMaturityDate(),
bean.getAdjustEffectiveDate(),
bean.getAdjustMaturityDate(),
(InterestRateNotional) createNotional(bean.getNotional()),
bean.getIncludeAccruedPremium(),
bean.getProtectionStart(),
bean.getQuotedSpread(),
(InterestRateNotional) createNotional(bean.getUpfrontAmount()),
bean.getCoupon(),
zonedDateTimeBeanToDateTimeWithZone(bean.getCashSettlementDate()),
bean.getAdjustCashSettlementDate());
return security;
}
}