/**
  * Fixed coupon bond builder from standard financial details. The accrual dates are unadjusted;
  * the payment dates are adjusted according to the business day convention.
  *
  * @param maturityDate The maturity date.
  * @param firstAccrualDate The first accrual date (bond start date).
  * @param index The coupon Ibor index.
  * @param settlementDays Standard number of days between trade date and trade settlement. Used for
  *     clean price and yield computation.
  * @param dayCount The coupon day count convention.
  * @param businessDay The business day convention for the payments.
  * @param isEOM The end-of-month flag.
  * @param issuer The issuer name.
  * @param calendar The holiday calendar for the ibor leg.
  * @return The fixed coupon bond.
  */
 public static BondIborSecurityDefinition from(
     final ZonedDateTime maturityDate,
     final ZonedDateTime firstAccrualDate,
     final IborIndex index,
     final int settlementDays,
     final DayCount dayCount,
     final BusinessDayConvention businessDay,
     final boolean isEOM,
     final String issuer,
     final Calendar calendar) {
   ArgumentChecker.notNull(maturityDate, "Maturity date");
   ArgumentChecker.notNull(firstAccrualDate, "First accrual date");
   ArgumentChecker.notNull(index, "Ibor index");
   ArgumentChecker.notNull(dayCount, "Day count");
   ArgumentChecker.notNull(businessDay, "Business day convention");
   final AnnuityCouponIborDefinition coupon =
       AnnuityCouponIborDefinition.fromAccrualUnadjusted(
           firstAccrualDate, maturityDate, DEFAULT_NOTIONAL, index, false, calendar);
   final PaymentFixedDefinition[] nominalPayment =
       new PaymentFixedDefinition[] {
         new PaymentFixedDefinition(
             index.getCurrency(), businessDay.adjustDate(calendar, maturityDate), DEFAULT_NOTIONAL)
       };
   final AnnuityPaymentFixedDefinition nominal =
       new AnnuityPaymentFixedDefinition(nominalPayment, calendar);
   return new BondIborSecurityDefinition(
       nominal, coupon, DEFAULT_EX_COUPON_DAYS, settlementDays, calendar, dayCount, issuer);
 }