@ImmutableValidator private void validate() { int size = deliveryBasket.size(); ArgChecker.isTrue(size == conversionFactors.size(), "The delivery basket size should be the same as the conversion factor size"); ArgChecker.inOrderOrEqual(firstNoticeDate, lastNoticeDate, "firstNoticeDate", "lastNoticeDate"); if (firstDeliveryDate != null && lastDeliveryDate != null) { ArgChecker.inOrderOrEqual(firstDeliveryDate, lastDeliveryDate, "firstDeliveryDate", "lastDeliveryDate"); ArgChecker.inOrderOrEqual(firstNoticeDate, firstDeliveryDate, "firstNoticeDate", "firstDeliveryDate"); ArgChecker.inOrderOrEqual(lastNoticeDate, lastDeliveryDate, "lastNoticeDate", "lastDeliveryDate"); } if (size > 1) { ImmutableList<FixedCouponBond> bondsList = getDeliveryBasket(); double notional = getNotional(); Currency currency = getCurrency(); for (int i = 1; i < size; ++i) { ArgChecker.isTrue(bondsList.get(i).getNotional() == notional, "Notional must be same for all bonds"); ArgChecker.isTrue(bondsList.get(i).getCurrency().equals(currency), "Currency must be same for all bonds"); } } }
/** * Restricted copy constructor. * @param beanToCopy the bean to copy from, not null */ private Builder(BondFuture beanToCopy) { this.securityId = beanToCopy.getSecurityId(); this.deliveryBasket = beanToCopy.getDeliveryBasket(); this.conversionFactors = beanToCopy.getConversionFactors(); this.lastTradeDate = beanToCopy.getLastTradeDate(); this.firstNoticeDate = beanToCopy.getFirstNoticeDate(); this.lastNoticeDate = beanToCopy.getLastNoticeDate(); this.firstDeliveryDate = beanToCopy.firstDeliveryDate; this.lastDeliveryDate = beanToCopy.lastDeliveryDate; this.rounding = beanToCopy.getRounding(); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 1574023291: // securityId return ((BondFuture) bean).getSecurityId(); case 1999764186: // deliveryBasket return ((BondFuture) bean).getDeliveryBasket(); case 1655488270: // conversionFactors return ((BondFuture) bean).getConversionFactors(); case -1041950404: // lastTradeDate return ((BondFuture) bean).getLastTradeDate(); case -1085415050: // firstNoticeDate return ((BondFuture) bean).getFirstNoticeDate(); case -1060668964: // lastNoticeDate return ((BondFuture) bean).getLastNoticeDate(); case 1755448466: // firstDeliveryDate return ((BondFuture) bean).firstDeliveryDate; case -233366664: // lastDeliveryDate return ((BondFuture) bean).lastDeliveryDate; case -142444: // rounding return ((BondFuture) bean).getRounding(); } return super.propertyGet(bean, propertyName, quiet); }
public void test_builder() { BondFutureSecurity test = sut(); assertEquals(test.getInfo(), INFO); assertEquals(test.getSecurityId(), PRODUCT.getSecurityId()); assertEquals(test.getCurrency(), PRODUCT.getCurrency()); assertEquals(test.getFirstDeliveryDate(), PRODUCT.getFirstDeliveryDate()); assertEquals(test.getLastDeliveryDate(), PRODUCT.getLastDeliveryDate()); ImmutableList<FixedCouponBond> basket = PRODUCT.getDeliveryBasket(); assertEquals(test.getUnderlyingIds(), ImmutableSet.of(basket.get(0).getSecurityId(), basket.get(1).getSecurityId())); }
public void test_builder_noDeliveryDate() { BondFuture test = BondFuture.builder() .securityId(SECURITY_ID) .deliveryBasket(BOND_PRODUCT) .conversionFactors(CONVERSION_FACTOR) .firstNoticeDate(FIRST_NOTICE_DATE) .lastNoticeDate(LAST_NOTICE_DATE) .lastTradeDate(LAST_TRADING_DATE) .rounding(ROUNDING) .build(); assertEquals(test.getDeliveryBasket(), ImmutableList.copyOf(BOND_PRODUCT)); assertEquals(test.getConversionFactors(), ImmutableList.copyOf(CONVERSION_FACTOR)); assertEquals(test.getCurrency(), USD); assertEquals(test.getNotional(), NOTIONAL); assertEquals(test.getFirstNoticeDate(), FIRST_NOTICE_DATE); assertEquals(test.getLastNoticeDate(), LAST_NOTICE_DATE); assertEquals(test.getFirstDeliveryDate(), Optional.empty()); assertEquals(test.getLastDeliveryDate(), Optional.empty()); assertEquals(test.getLastTradeDate(), LAST_TRADING_DATE); assertEquals(test.getRounding(), ROUNDING); }
public void test_createProduct_wrongType() { BondFutureSecurity test = sut(); ImmutableList<FixedCouponBond> basket = PRODUCT.getDeliveryBasket(); SecurityId secId = basket.get(0).getSecurityId(); GenericSecurity sec = GenericSecurity.of(INFO); ReferenceData refData = ImmutableReferenceData.of(secId, sec); assertThrows(() -> test.createProduct(refData), ClassCastException.class); }
public void test_createProduct() { BondFutureSecurity test = sut(); ImmutableList<FixedCouponBond> basket = PRODUCT.getDeliveryBasket(); FixedCouponBondSecurity bondSec0 = FixedCouponBondSecurityTest.createSecurity(PRODUCT.getDeliveryBasket().get(0)); FixedCouponBondSecurity bondSec1 = FixedCouponBondSecurityTest.createSecurity(PRODUCT.getDeliveryBasket().get(1)); ReferenceData refData = ImmutableReferenceData.of(ImmutableMap.of( basket.get(0).getSecurityId(), bondSec0, basket.get(1).getSecurityId(), bondSec1)); BondFuture product = test.createProduct(refData); assertEquals(product.getDeliveryBasket().get(0), PRODUCT.getDeliveryBasket().get(0)); assertEquals(product.getDeliveryBasket().get(1), PRODUCT.getDeliveryBasket().get(1)); TradeInfo tradeInfo = TradeInfo.of(date(2016, 6, 30)); BondFutureTrade expectedTrade = BondFutureTrade.builder()
public void test_builder_full() { BondFuture test = BondFuture.builder() .securityId(SECURITY_ID) .deliveryBasket(BOND_PRODUCT) .conversionFactors(CONVERSION_FACTOR) .firstNoticeDate(FIRST_NOTICE_DATE) .firstDeliveryDate(FIRST_DELIVERY_DATE) .lastNoticeDate(LAST_NOTICE_DATE) .lastDeliveryDate(LAST_DELIVERY_DATE) .lastTradeDate(LAST_TRADING_DATE) .rounding(ROUNDING) .build(); assertEquals(test.getDeliveryBasket(), ImmutableList.copyOf(BOND_PRODUCT)); assertEquals(test.getConversionFactors(), ImmutableList.copyOf(CONVERSION_FACTOR)); assertEquals(test.getCurrency(), USD); assertEquals(test.getNotional(), NOTIONAL); assertEquals(test.getFirstNoticeDate(), FIRST_NOTICE_DATE); assertEquals(test.getLastNoticeDate(), LAST_NOTICE_DATE); assertEquals(test.getFirstDeliveryDate(), Optional.of(FIRST_DELIVERY_DATE)); assertEquals(test.getLastDeliveryDate(), Optional.of(LAST_DELIVERY_DATE)); assertEquals(test.getLastTradeDate(), LAST_TRADING_DATE); assertEquals(test.getRounding(), ROUNDING); }
BondFuture future = PRODUCT.getUnderlyingFuture(); BondFutureSecurity futureSec = BondFutureSecurityTest.sut(); ImmutableList<FixedCouponBond> basket = future.getDeliveryBasket(); FixedCouponBondSecurity bondSec0 = FixedCouponBondSecurityTest.createSecurity(future.getDeliveryBasket().get(0)); FixedCouponBondSecurity bondSec1 = FixedCouponBondSecurityTest.createSecurity(future.getDeliveryBasket().get(1)); ReferenceData refData = ImmutableReferenceData.of(ImmutableMap.of( test.getUnderlyingFutureId(), futureSec, basket.get(1).getSecurityId(), bondSec1)); BondFutureOption product = test.createProduct(refData); assertEquals(product.getUnderlyingFuture().getDeliveryBasket().get(0), future.getDeliveryBasket().get(0)); assertEquals(product.getUnderlyingFuture().getDeliveryBasket().get(1), future.getDeliveryBasket().get(1)); TradeInfo tradeInfo = TradeInfo.of(date(2016, 6, 30)); BondFutureOptionTrade expectedTrade = BondFutureOptionTrade.builder()
static BondFutureSecurity sut() { ImmutableList<FixedCouponBond> basket = PRODUCT.getDeliveryBasket(); return BondFutureSecurity.builder() .info(INFO) .currency(PRODUCT.getCurrency()) .deliveryBasketIds(basket.get(0).getSecurityId(), basket.get(1).getSecurityId()) .conversionFactors(1d, 2d) .firstNoticeDate(PRODUCT.getFirstNoticeDate()) .firstDeliveryDate(PRODUCT.getFirstDeliveryDate().get()) .lastNoticeDate(PRODUCT.getLastNoticeDate()) .lastDeliveryDate(PRODUCT.getLastDeliveryDate().get()) .lastTradeDate(PRODUCT.getLastTradeDate()) .rounding(PRODUCT.getRounding()) .build(); }
static BondFutureSecurity sut2() { ImmutableList<FixedCouponBond> basket = PRODUCT2.getDeliveryBasket(); return BondFutureSecurity.builder() .info(INFO2) .currency(PRODUCT2.getCurrency()) .deliveryBasketIds(basket.get(0).getSecurityId()) .conversionFactors(3d) .firstNoticeDate(PRODUCT2.getFirstNoticeDate()) .lastNoticeDate(PRODUCT2.getLastNoticeDate()) .lastTradeDate(PRODUCT2.getLastTradeDate()) .rounding(PRODUCT2.getRounding()) .build(); }