class InterestRateSwapNotional extends InterestRateNotional {

  public static InterestRateSwapNotional of(Currency ccy, final List<LocalDate> dates, final List<Double> notionals, List<Rate.ShiftType> types) {
    ArgumentChecker.noNulls(dates, "dates");
    ArgumentChecker.noNulls(notionals, "notionals");
    ArgumentChecker.noNulls(types, "types");
    ArgumentChecker.isTrue(dates.size() == notionals.size(), "Different numbers of overrides & notionals");
    ArgumentChecker.isTrue(dates.size() == types.size(), "Different numbers of overrides & notionals");
    ArgumentChecker.isTrue(notionals.size() > 0, "Require at least one notional");
    if (notionals.size() == 1) {      // constant notional
      return new InterestRateSwapNotional(ccy, notionals.get(0));
    }
    ArgumentChecker.isTrue(types.get(0) == Rate.ShiftType.OUTRIGHT, "First notional in schedule must be an OUTRIGHT quote");
    return new InterestRateSwapNotional(ccy, dates, notionals, types);
  }

  private  InterestRateSwapNotional(Currency ccy, List<LocalDate> overridePeriods, List<Double> notionals, List<Rate.ShiftType> types);
  public  InterestRateSwapNotional(final Currency ccy, final double notional);
  protected  InterestRateSwapNotional();

}