com.opengamma.analytics.financial.interestrate.payments.derivative.Payment.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.analytics.financial.interestrate.payments.derivative.Payment.java

Source

/**
 * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
 * 
 * Please see distribution for license.
 */
package com.opengamma.analytics.financial.interestrate.payments.derivative;

import org.apache.commons.lang.ObjectUtils;

import com.opengamma.analytics.financial.instrument.InstrumentDefinition;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivative;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.Currency;

/**
 * Class describing a generic payment.
 */
public abstract class Payment implements InstrumentDerivative {

    /**
     * The index currency.
     */
    private final Currency _currency;
    /**
     * The payment time.
     */
    private final double _paymentTime;
    /**
     * The funding curve name used in pricing.
     */
    private final String _fundingCurveName;

    /**
     * Constructor for a Payment.
     * @param currency The payment currency.
     * @param paymentTime Time (in years) up to the payment.
     * @param fundingCurveName Name of the funding curve.
     * @deprecated Use the constructor that does not take a curve name
     */
    @Deprecated
    public Payment(final Currency currency, final double paymentTime, final String fundingCurveName) {
        ArgumentChecker.notNull(currency, "currency");
        ArgumentChecker.notNull(fundingCurveName, "funding curve name");
        ArgumentChecker.isTrue(paymentTime >= 0.0, "payment time < 0");
        _currency = currency;
        _paymentTime = paymentTime;
        _fundingCurveName = fundingCurveName;
    }

    /**
     * Constructor for a Payment.
     * @param currency The payment currency.
     * @param paymentTime Time (in years) up to the payment.
     */
    public Payment(final Currency currency, final double paymentTime) {
        ArgumentChecker.notNull(currency, "currency");
        ArgumentChecker.isTrue(paymentTime >= 0.0, "payment time < 0");
        _currency = currency;
        _paymentTime = paymentTime;
        _fundingCurveName = null;
    }

    /**
     * Gets the _paymentTime field.
     * @return the payment time
     */
    public double getPaymentTime() {
        return _paymentTime;
    }

    /**
     * Gets the _fundingCurveName field.
     * @return The funding curve name.
     * @deprecated Curve names should no longer be set in {@link InstrumentDefinition}s
     */
    @Deprecated
    public String getFundingCurveName() {
        if (_fundingCurveName == null) {
            throw new IllegalStateException("Funding curve name was not set");
        }
        return _fundingCurveName;
    }

    /**
     * Gets the _currency field.
     * @return The currency
     */
    public Currency getCurrency() {
        return _currency;
    }

    /**
     * Return a reference amount. For coupon it is the notional, for simple payments it is the paid amount. Used mainly to assess if the amount is paid or received.
     * @return The amount.
     */
    public abstract double getReferenceAmount();

    /**
     * Check if the payment is of the type CouponFixed or CouponIbor. Used to check that payment are of vanilla type.
     * @return  True if IborCoupon or FixedCoupon
     */
    public boolean isIborOrFixed() { //TODO: is this method necessary?
        return (this instanceof CouponFixed) || (this instanceof CouponIbor);
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("Currency=");
        sb.append(_currency);
        sb.append(", payment time=");
        sb.append(_paymentTime);
        if (_fundingCurveName != null) {
            sb.append(", funding curve=");
            sb.append(_fundingCurveName);
        }
        return sb.toString();
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + _currency.hashCode();
        result = prime * result + (_fundingCurveName == null ? 0 : _fundingCurveName.hashCode());
        long temp;
        temp = Double.doubleToLongBits(_paymentTime);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        return result;
    }

    @Override
    public boolean equals(final Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Payment other = (Payment) obj;
        if (!ObjectUtils.equals(_currency, other._currency)) {
            return false;
        }
        if (!ObjectUtils.equals(_fundingCurveName, other._fundingCurveName)) {
            return false;
        }
        if (Double.doubleToLongBits(_paymentTime) != Double.doubleToLongBits(other._paymentTime)) {
            return false;
        }
        return true;
    }

}