/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.interestrate; import com.opengamma.analytics.financial.interestrate.annuity.derivative.Annuity; import com.opengamma.analytics.financial.interestrate.annuity.derivative.AnnuityCouponFixed; import com.opengamma.analytics.financial.interestrate.annuity.derivative.AnnuityCouponIborRatchet; import com.opengamma.analytics.financial.interestrate.payments.derivative.Payment; /** * Gets the fixed rates for an annuity. */ public final class AnnuityFixedRatesVisitor extends InstrumentDerivativeVisitorAdapter<Void, Double[]> { /** Gets the fixed rates for coupons */ private static final InstrumentDerivativeVisitor<Void, Double> COUPON_VISITOR = new CouponFixedRateVisitor(); /** The singleton instance */ private static final InstrumentDerivativeVisitor<Void, Double[]> INSTANCE = new AnnuityFixedRatesVisitor(); /** * Gets the singleton instance. * @return The instance */ public static InstrumentDerivativeVisitor<Void, Double[]> getInstance() { return INSTANCE; } /** * Private constructor. */ private AnnuityFixedRatesVisitor() { } @Override public Double[] visitGenericAnnuity(final Annuity<? extends Payment> annuity) { final int n = annuity.getNumberOfPayments(); final Double[] ca = new Double[n]; for (int i = 0; i < n; i++) { try { ca[i] = annuity.getNthPayment(i).accept(COUPON_VISITOR); } catch (final UnsupportedOperationException e) { // expected in the case where the coupon is floating ca[i] = null; } } return ca; } @Override public Double[] visitFixedCouponAnnuity(final AnnuityCouponFixed annuity) { return visitGenericAnnuity(annuity); } @Override public Double[] visitAnnuityCouponIborRatchet(final AnnuityCouponIborRatchet annuity) { return visitGenericAnnuity(annuity); } }