public BasicFixedLeg(IsdaCompliantDiscountCurveCalibrator outerInstance, LocalDate curveSpotDate, LocalDate maturityDate, Period swapInterval, DayCount swapDCC, DayCount curveDcc, BusinessDayAdjustment busAdj, ReferenceData refData)
            {
                this.outerInstance = outerInstance;

                IList <LocalDate> list  = new List <LocalDate>();
                LocalDate         tDate = maturityDate;
                int step = 1;

                while (tDate.isAfter(curveSpotDate))
                {
                    list.Add(tDate);
                    tDate = maturityDate.minus(swapInterval.multipliedBy(step++));
                }

                // remove spotDate from list, if it ends up there
                list.Remove(curveSpotDate);

                nPayment        = list.Count;
                swapPaymentTime = new double[nPayment];
                yearFraction    = new double[nPayment];
                LocalDate prev = curveSpotDate;
                int       j    = nPayment - 1;

                for (int i = 0; i < nPayment; i++, j--)
                {
                    LocalDate current = list[j];
                    LocalDate adjCurr = busAdj.adjust(current, refData);
                    yearFraction[i]    = swapDCC.relativeYearFraction(prev, adjCurr);
                    swapPaymentTime[i] = curveDcc.relativeYearFraction(curveSpotDate, adjCurr);     // Payment times always good business days
                    prev = adjCurr;
                }
            }
        //-------------------------------------------------------------------------
        private static ImmutableCreditRatesProvider createRatesProvider(LocalDate tradeDate, LocalDate snapDate, double rateScale, double recoveryRate)
        {
            ImmutableMarketDataBuilder builder = ImmutableMarketData.builder(snapDate);

            for (int j = 0; j < NUM_INSTRUMENTS; j++)
            {
                builder.addValue(QuoteId.of(StandardId.of("OG", ID_VALUES[j])), RATES[j] * rateScale);
            }
            ImmutableMarketData       quotes          = builder.build();
            IsdaCreditCurveDefinition curveDefinition = IsdaCreditCurveDefinition.of(CurveName.of("yield"), EUR, tradeDate, ACT_365F, DSC_NODES, false, false);
            IsdaCreditDiscountFactors yc = IsdaCompliantDiscountCurveCalibrator.standard().calibrate(curveDefinition, quotes, REF_DATA);

            return(ImmutableCreditRatesProvider.builder().valuationDate(tradeDate).discountCurves(ImmutableMap.of(EUR, yc)).recoveryRateCurves(ImmutableMap.of(LEGAL_ENTITY, ConstantRecoveryRates.of(LEGAL_ENTITY, tradeDate, recoveryRate))).creditCurves(ImmutableMap.of()).build());
        }