class CouponFixedFxResetDiscountingMethod {

  public MultipleCurrencyAmount currencyExposure(final CouponFixedFxReset coupon, 
      final MulticurveProviderInterface multicurves) {
    Validate.notNull(coupon, "Coupon");
    Validate.notNull(multicurves, "multicurve");
    Currency ccyPayment = coupon.getCurrency();
    Currency ccyReference = coupon.getReferenceCurrency();
    double dfCcyPaymentAtPayment = multicurves.getDiscountFactor(ccyPayment, coupon.getPaymentTime());
    double dfCcyReferenceAtDelivery = multicurves.getDiscountFactor(ccyReference, coupon.getFxDeliveryTime());
    double dfCcyPaymentAtDelivery = multicurves.getDiscountFactor(ccyPayment, coupon.getFxDeliveryTime());
    double pv = coupon.getNotional() * coupon.getPaymentYearFraction() * coupon.getRate() * 
        dfCcyPaymentAtPayment * dfCcyReferenceAtDelivery / dfCcyPaymentAtDelivery;
    return MultipleCurrencyAmount.of(ccyReference, pv);
  }

  private  CouponFixedFxResetDiscountingMethod();

}