Package com.opengamma.masterdb.security.hibernate.forward

Source Code of com.opengamma.masterdb.security.hibernate.forward.CommodityForwardSecurityBeanOperation

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.masterdb.security.hibernate.forward;

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 static com.opengamma.masterdb.security.hibernate.Converters.externalIdBeanToExternalId;
import static com.opengamma.masterdb.security.hibernate.Converters.externalIdToExternalIdBean;

import java.util.Date;

import com.opengamma.financial.security.FinancialSecurityVisitorAdapter;
import com.opengamma.financial.security.forward.AgricultureForwardSecurity;
import com.opengamma.financial.security.forward.CommodityForwardSecurity;
import com.opengamma.financial.security.forward.EnergyForwardSecurity;
import com.opengamma.financial.security.forward.MetalForwardSecurity;
import com.opengamma.id.ExternalId;
import com.opengamma.masterdb.security.hibernate.AbstractSecurityBeanOperation;
import com.opengamma.masterdb.security.hibernate.HibernateSecurityMasterDao;
import com.opengamma.masterdb.security.hibernate.OperationContext;

/**
* Hibernate bean for storage.
*/
public final class CommodityForwardSecurityBeanOperation extends
  AbstractSecurityBeanOperation<CommodityForwardSecurity, CommodityForwardSecurityBean> {

  /**
   * Singleton.
   * */
  public static final CommodityForwardSecurityBeanOperation INSTANCE = new CommodityForwardSecurityBeanOperation();

  private CommodityForwardSecurityBeanOperation() {
    super(CommodityForwardSecurity.SECURITY_TYPE, CommodityForwardSecurity.class, CommodityForwardSecurityBean.class);
  }

  @Override
  public CommodityForwardSecurity createSecurity(final OperationContext context,
                                                 final CommodityForwardSecurityBean bean) {
    CommodityForwardSecurity sec = bean.accept(
      new CommodityForwardSecurityBean.Visitor<CommodityForwardSecurity>() {

        @Override
        public CommodityForwardSecurity visitAgricultureForwardType(AgricultureForwardSecurityBean bean) {
          final AgricultureForwardSecurity security = new AgricultureForwardSecurity(
            bean.getUnitName().getName(),
            bean.getUnitNumber(),
            expiryBeanToExpiry(bean.getExpiry()),
            currencyBeanToCurrency(bean.getCurrency()),
            bean.getUnitAmount(),
            bean.getCategory().getName());
          security.setUnitNumber(bean.getUnitNumber());
          if (bean.getUnitName() != null) {
            security.setUnitName(bean.getUnitName().getName());
          }
          return security;
        }

        @Override
        public CommodityForwardSecurity visitEnergyForwardType(EnergyForwardSecurityBean bean) {
          final EnergyForwardSecurity security = new EnergyForwardSecurity(
            bean.getUnitName().getName(),
            bean.getUnitNumber(),
            expiryBeanToExpiry(bean.getExpiry()),
            currencyBeanToCurrency(bean.getCurrency()),
            bean.getUnitAmount(),
            bean.getCategory().getName());
          security.setUnitNumber(bean.getUnitNumber());
          if (bean.getUnitName() != null) {
            security.setUnitName(bean.getUnitName().getName());
          }
          security.setUnderlyingId(externalIdBeanToExternalId(bean
            .getUnderlying()));
          return security;
        }

        @Override
        public CommodityForwardSecurity visitMetalForwardType(MetalForwardSecurityBean bean) {
          final MetalForwardSecurity security = new MetalForwardSecurity(
            bean.getUnitName().getName(),
            bean.getUnitNumber(),
            expiryBeanToExpiry(bean.getExpiry()),
            currencyBeanToCurrency(bean.getCurrency()),
            bean.getUnitAmount(),
            bean.getCategory().getName());
          security.setUnitNumber(bean.getUnitNumber());
          if (bean.getUnitName() != null) {
            security.setUnitName(bean.getUnitName().getName());
          }
          security.setUnderlyingId(externalIdBeanToExternalId(bean
            .getUnderlying()));
          return security;
        }

      });
    return sec;
  }

  @Override
  public CommodityForwardSecurityBean resolve(final OperationContext context,
                                              final HibernateSecurityMasterDao secMasterSession, final Date now,
                                              final CommodityForwardSecurityBean bean) {
    return bean.accept(
      new CommodityForwardSecurityBean.Visitor<CommodityForwardSecurityBean>() {

        @Override
        public CommodityForwardSecurityBean visitAgricultureForwardType(AgricultureForwardSecurityBean bean) {
          return bean;
        }

        @Override
        public CommodityForwardSecurityBean visitEnergyForwardType(EnergyForwardSecurityBean bean) {
          return bean;
        }

        @Override
        public CommodityForwardSecurityBean visitMetalForwardType(MetalForwardSecurityBean bean) {
          return bean;
        }

      });
  }

  @Override
  public void postPersistBean(final OperationContext context,
                              final HibernateSecurityMasterDao secMasterSession, final Date now,
                              final CommodityForwardSecurityBean bean) {
    bean.accept(new CommodityForwardSecurityBean.Visitor<Object>() {

      private void postPersistForward() {
        // No action
      }

      private void postPersistCommodityForward() {
        postPersistForward();
      }

      @Override
      public Object visitAgricultureForwardType(AgricultureForwardSecurityBean bean) {
        postPersistCommodityForward();
        return null;
      }

      @Override
      public Object visitEnergyForwardType(EnergyForwardSecurityBean bean) {
        postPersistCommodityForward();
        return null;
      }

      @Override
      public Object visitMetalForwardType(MetalForwardSecurityBean bean) {
        postPersistCommodityForward();
        return null;
      }

    });
  }

  @Override
  public CommodityForwardSecurityBean createBean(final OperationContext context,
                                                 final HibernateSecurityMasterDao secMasterSession,
                                                 final CommodityForwardSecurity security) {
    return security.accept(new FinancialSecurityVisitorAdapter<CommodityForwardSecurityBean>() {

      private <F extends CommodityForwardSecurityBean> F createForwardBean(final F bean, final CommodityForwardSecurity security) {
        bean.setExpiry(expiryToExpiryBean(security.getExpiry()));

        bean.setCurrency(secMasterSession
          .getOrCreateCurrencyBean(security.getCurrency()
            .getCode()));
        bean.setUnitAmount(security.getUnitAmount());
        bean.setCategory(secMasterSession.getOrCreateContractCategoryBean(security.getContractCategory()));
        return bean;
      }

      private <F extends CommodityForwardSecurityBean> F createCommodityForwardSecurityBean(
        final F commodityForwardSecurityBean, final CommodityForwardSecurity security) {
        final F bean = createForwardBean(commodityForwardSecurityBean, security);
        if (security.getUnitName() != null) {
          bean.setUnitName(secMasterSession
            .getOrCreateUnitNameBean(security.getUnitName()));
        }
        if (security.getUnitNumber() != null) {
          bean.setUnitNumber(security.getUnitNumber());
        }
        return bean;
      }

      @Override
      public AgricultureForwardSecurityBean visitAgricultureForwardSecurity(
        AgricultureForwardSecurity security) {
        return createCommodityForwardSecurityBean(new AgricultureForwardSecurityBean(), security);
      }

      @Override
      public EnergyForwardSecurityBean visitEnergyForwardSecurity(
        EnergyForwardSecurity security) {
        final EnergyForwardSecurityBean bean = createCommodityForwardSecurityBean(new EnergyForwardSecurityBean(), security);
        ExternalId underlying = security.getUnderlyingId();
        if (underlying != null) {
          bean.setUnderlying(externalIdToExternalIdBean(underlying));
        }
        return bean;
      }

      @Override
      public MetalForwardSecurityBean visitMetalForwardSecurity(
        MetalForwardSecurity security) {
        final MetalForwardSecurityBean bean = createCommodityForwardSecurityBean(new MetalForwardSecurityBean(), security);
        ExternalId underlying = security.getUnderlyingId();
        if (underlying != null) {
          bean.setUnderlying(externalIdToExternalIdBean(security.getUnderlyingId()));
        }
        return bean;
      }
    });
  }

}
TOP

Related Classes of com.opengamma.masterdb.security.hibernate.forward.CommodityForwardSecurityBeanOperation

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.