/** * Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.instrument.annuity; import java.util.ArrayList; import java.util.List; import org.threeten.bp.ZonedDateTime; import com.opengamma.analytics.financial.instrument.payment.PaymentFixedDefinition; import com.opengamma.analytics.financial.interestrate.annuity.derivative.AnnuityPaymentFixed; import com.opengamma.analytics.financial.interestrate.payments.derivative.PaymentFixed; import com.opengamma.financial.convention.calendar.Calendar; /** * A wrapper class for a AnnuityDefinition containing PaymentFixedDefinition. */ public class AnnuityPaymentFixedDefinition extends AnnuityDefinition<PaymentFixedDefinition> { /** * Constructor from a list of fixed payments. * @param payments The fixed coupons. * @param calendar The calendar */ public AnnuityPaymentFixedDefinition(final PaymentFixedDefinition[] payments, final Calendar calendar) { super(payments, calendar); } /** * Remove the payments paying on or before the given date. * @param trimDate The date. * @return The trimmed annuity. */ @Override public AnnuityPaymentFixedDefinition trimBefore(final ZonedDateTime trimDate) { final List<PaymentFixedDefinition> list = new ArrayList<>(); for (final PaymentFixedDefinition payment : getPayments()) { if (payment.getPaymentDate().isAfter(trimDate)) { list.add(payment); } } return new AnnuityPaymentFixedDefinition(list.toArray(new PaymentFixedDefinition[list.size()]), getCalendar()); } @Override public AnnuityPaymentFixed toDerivative(final ZonedDateTime date) { final List<PaymentFixed> resultList = new ArrayList<>(); for (int loopcoupon = 0; loopcoupon < getPayments().length; loopcoupon++) { if (!date.isAfter(getNthPayment(loopcoupon).getPaymentDate())) { resultList.add(getNthPayment(loopcoupon).toDerivative(date)); } } return new AnnuityPaymentFixed(resultList.toArray(new PaymentFixed[resultList.size()])); } }