/**
* 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.cdsIndexComponentBeanToCDSIndexComponent;
import static com.opengamma.masterdb.security.hibernate.Converters.currencyBeanToCurrency;
import static com.opengamma.masterdb.security.hibernate.Converters.externalIdToExternalIdBean;
import static com.opengamma.masterdb.security.hibernate.Converters.tenorBeanToTenor;
import java.util.List;
import java.util.Set;
import com.google.common.collect.Lists;
import com.opengamma.financial.security.cds.CDSIndexComponentBundle;
import com.opengamma.financial.security.cds.CDSIndexTerms;
import com.opengamma.financial.security.cds.CreditDefaultSwapIndexComponent;
import com.opengamma.financial.security.cds.CreditDefaultSwapIndexDefinitionSecurity;
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.TenorBean;
import com.opengamma.util.time.Tenor;
/**
*
*/
public final class CreditDefaultSwapIndexDefinitionSecurityBeanOperation extends AbstractSecurityBeanOperation<CreditDefaultSwapIndexDefinitionSecurity, CreditDefaultSwapIndexDefinitionSecurityBean> {
/**
* Singleton
*/
public static final CreditDefaultSwapIndexDefinitionSecurityBeanOperation INSTANCE = new CreditDefaultSwapIndexDefinitionSecurityBeanOperation();
private CreditDefaultSwapIndexDefinitionSecurityBeanOperation() {
super(CreditDefaultSwapIndexDefinitionSecurity.SECURITY_TYPE, CreditDefaultSwapIndexDefinitionSecurity.class, CreditDefaultSwapIndexDefinitionSecurityBean.class);
}
@Override
public CreditDefaultSwapIndexDefinitionSecurityBean createBean(OperationContext context, HibernateSecurityMasterDao secMasterSession, CreditDefaultSwapIndexDefinitionSecurity security) {
CreditDefaultSwapIndexDefinitionSecurityBean bean = new CreditDefaultSwapIndexDefinitionSecurityBean();
bean.setVersion(security.getVersion());
bean.setSeries(security.getSeries());
bean.setCurrency(secMasterSession.getOrCreateCurrencyBean(security.getCurrency().getCode()));
bean.setRecoveryRate(security.getRecoveryRate());
bean.setFamily(secMasterSession.getOrCreateCDSIFamilyBean(security.getFamily()));
final Set<TenorBean> tenors = bean.getTenors();
for (Tenor tenor : security.getTerms()) {
tenors.add(secMasterSession.getOrCreateTenorBean(tenor.getPeriod().toString()));
}
final Set<CDSIndexComponentBean> componentBeans = bean.getComponents();
for (CreditDefaultSwapIndexComponent cdsiComponent : security.getComponents()) {
CDSIndexComponentBean componentBean = new CDSIndexComponentBean();
componentBean.setWeight(cdsiComponent.getWeight());
componentBean.setBondId(externalIdToExternalIdBean(cdsiComponent.getBondId()));
componentBean.setObligor(externalIdToExternalIdBean(cdsiComponent.getObligorRedCode()));
componentBean.setName(cdsiComponent.getName());
componentBeans.add(componentBean);
}
return bean;
}
@Override
public CreditDefaultSwapIndexDefinitionSecurity createSecurity(OperationContext context, CreditDefaultSwapIndexDefinitionSecurityBean bean) {
List<Tenor> tenors = Lists.newArrayList();
for (TenorBean tenorBean : bean.getTenors()) {
tenors.add(tenorBeanToTenor(tenorBean));
}
final List<CreditDefaultSwapIndexComponent> components = Lists.newArrayList();
for (CDSIndexComponentBean cdsIndexComponentBean : bean.getComponents()) {
components.add(cdsIndexComponentBeanToCDSIndexComponent(cdsIndexComponentBean));
}
final CreditDefaultSwapIndexDefinitionSecurity security = new CreditDefaultSwapIndexDefinitionSecurity(bean.getVersion(),
bean.getSeries(),
bean.getFamily().getName(),
currencyBeanToCurrency(bean.getCurrency()),
bean.getRecoveryRate(),
CDSIndexTerms.of(tenors),
CDSIndexComponentBundle.of(components));
return security;
}
}