/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.analytics.blotter;
import static org.testng.Assert.assertTrue;
import java.util.Map;
import org.joda.beans.Bean;
import org.joda.beans.BeanBuilder;
import org.joda.beans.JodaBeanUtils;
import org.joda.beans.MetaBean;
import org.joda.beans.MetaProperty;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.opengamma.financial.security.fx.FXForwardSecurity;
import com.opengamma.financial.security.swap.FixedInterestRateLeg;
import com.opengamma.financial.security.swap.FloatingInterestRateLeg;
import com.opengamma.financial.security.swap.InterestRateNotional;
import com.opengamma.financial.security.swap.SwapLeg;
import com.opengamma.financial.security.swap.SwapSecurity;
import com.opengamma.master.security.ManageableSecurity;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
@SuppressWarnings("unchecked")
public class BeanBuildingVisitorTest {
private static final BeanVisitorDecorator s_securityTypeFilter = new PropertyFilter(ManageableSecurity.meta().securityType());
private static final MetaBeanFactory META_BEAN_FACTORY = new MapMetaBeanFactory(ImmutableSet.<MetaBean>of(
FXForwardSecurity.meta(),
SwapSecurity.meta(),
FixedInterestRateLeg.meta(),
FloatingInterestRateLeg.meta(),
InterestRateNotional.meta()));
private static Map<MetaProperty<?>, Converter<?, ?>> s_regionConverters =
ImmutableMap.<MetaProperty<?>, Converter<?, ?>>of(
FXForwardSecurity.meta().regionId(), new FXRegionConverter(),
SwapLeg.meta().regionId(), new StringToRegionIdConverter());
private static final Converters CONVERTERS = new Converters(s_regionConverters,
BlotterUtils.getStringConvert());
/**
* test building a nice simple security
*/
@Test
public void buildFXForwardSecurity() {
BeanVisitor<BeanBuilder<Bean>> visitor = new BeanBuildingVisitor<>(BlotterTestUtils.FX_FORWARD_DATA_SOURCE,
META_BEAN_FACTORY,
CONVERTERS);
MetaBean metaBean = META_BEAN_FACTORY.beanFor(BlotterTestUtils.FX_FORWARD_DATA_SOURCE);
BeanBuilder<ManageableSecurity> beanBuilder =
(BeanBuilder<ManageableSecurity>) new BeanTraverser(s_securityTypeFilter).traverse(metaBean, visitor);
ManageableSecurity security = beanBuilder.build();
assertTrue(JodaBeanUtils.equalIgnoring(BlotterTestUtils.FX_FORWARD, security, ManageableSecurity.meta().uniqueId()));
}
/**
* test building a security with fields that are also beans and have bean fields themsevles (legs, notionals)
*/
@Test
public void buildSwapSecurity() {
BeanVisitor<BeanBuilder<Bean>> visitor = new BeanBuildingVisitor<>(BlotterTestUtils.SWAP_DATA_SOURCE,
META_BEAN_FACTORY,
CONVERTERS);
MetaBean metaBean = META_BEAN_FACTORY.beanFor(BlotterTestUtils.SWAP_DATA_SOURCE);
BeanBuilder<ManageableSecurity> beanBuilder =
(BeanBuilder<ManageableSecurity>) new BeanTraverser(s_securityTypeFilter).traverse(metaBean, visitor);
ManageableSecurity security = beanBuilder.build();
assertTrue(JodaBeanUtils.equalIgnoring(BlotterTestUtils.SWAP, security, ManageableSecurity.meta().uniqueId()));
}
}