com.opengamma.analytics.financial.interestrate.cash.derivative.DepositZero.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.analytics.financial.interestrate.cash.derivative.DepositZero.java

Source

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

import org.apache.commons.lang.ObjectUtils;

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

/**
 * Class describing a deposit where the rate is expressed in a specific composition convention.
 * Used mainly for curve construction with rates directly provided (not calibrated).
 */
public class DepositZero implements InstrumentDerivative {

    /**
     * The deposit currency.
     */
    private final Currency _currency;
    /**
     * The deposit start time.
     */
    private final double _startTime;
    /**
     * The deposit end (or maturity) time.
     */
    private final double _endTime;
    /**
     * The initial amount. Usually is equal to the notional or 0 if the amount has been paid in the past.
     */
    private final double _initialAmount;
    /**
     * The deposit notional.
     */
    private final double _notional;
    /**
     * The accrual factor (or year fraction).
     */
    private final double _paymentAccrualFactor;
    /**
     * The interest rate and its composition type.
     */
    private final InterestRate _rate;
    /**
     * The interest amount to be paid at end date.
     */
    private final double _interestAmount;
    /**
     * The discounting curve name
     */
    private final String _discountingCurveName;

    /**
     * Constructor from all details.
     * @param currency The currency.
     * @param startTime The start time.
     * @param endTime The end time.
     * @param initialAmount The initial amount. Usually is equal to the notional or 0 if the amount has been paid in the past. Should be of the same sign as notional.
     * @param notional The notional.
     * @param paymentAccrualFactor The accrual factor (or year fraction).
     * @param rate The interest rate and its composition type.
     * @param interestAmount  The interest amount to be paid at end date.
     * @param discountingCurveName The discounting curve name.
     * @deprecated Use the constructor that does not take yield curve names.
     */
    @Deprecated
    public DepositZero(final Currency currency, final double startTime, final double endTime,
            final double initialAmount, final double notional, final double paymentAccrualFactor,
            final InterestRate rate, final double interestAmount, final String discountingCurveName) {
        ArgumentChecker.notNull(currency, "Currency");
        ArgumentChecker.notNull(rate, "Rate");
        ArgumentChecker.notNull(discountingCurveName, "Curve name");
        _currency = currency;
        _startTime = startTime;
        _endTime = endTime;
        _initialAmount = initialAmount;
        _notional = notional;
        _paymentAccrualFactor = paymentAccrualFactor;
        _rate = rate;
        _interestAmount = interestAmount;
        _discountingCurveName = discountingCurveName;
    }

    /**
     * Constructor from all details.
     * @param currency The currency.
     * @param startTime The start time.
     * @param endTime The end time.
     * @param initialAmount The initial amount. Usually is equal to the notional or 0 if the amount has been paid in the past. Should be of the same sign as notional.
     * @param notional The notional.
     * @param paymentAccrualFactor The accrual factor (or year fraction).
     * @param rate The interest rate and its composition type.
     * @param interestAmount  The interest amount to be paid at end date.
     */
    public DepositZero(final Currency currency, final double startTime, final double endTime,
            final double initialAmount, final double notional, final double paymentAccrualFactor,
            final InterestRate rate, final double interestAmount) {
        ArgumentChecker.notNull(currency, "Currency");
        ArgumentChecker.notNull(rate, "Rate");
        _currency = currency;
        _startTime = startTime;
        _endTime = endTime;
        _initialAmount = initialAmount;
        _notional = notional;
        _paymentAccrualFactor = paymentAccrualFactor;
        _rate = rate;
        _interestAmount = interestAmount;
        _discountingCurveName = null;
    }

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

    /**
     * Gets the deposit start time.
     * @return The time.
     */
    public double getStartTime() {
        return _startTime;
    }

    /**
     * Gets the deposit end time.
     * @return The time.
     */
    public double getEndTime() {
        return _endTime;
    }

    /**
     * Gets the initial amount.
     * @return The amount.
     */
    public double getInitialAmount() {
        return _initialAmount;
    }

    /**
     * Gets the deposit notional.
     * @return The notional.
     */
    public double getNotional() {
        return _notional;
    }

    /**
     * Gets the accrual factor (or year fraction).
     * @return The factor.
     */
    public double getPaymentAccrualFactor() {
        return _paymentAccrualFactor;
    }

    /**
     * Gets the rate (figure and composition rule).
     * @return The rate.
     */
    public InterestRate getRate() {
        return _rate;
    }

    /**
     * Gets the interest rate amount.
     * @return The amount.
     */
    public double getInterestAmount() {
        return _interestAmount;
    }

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

    @Override
    public <S, T> T accept(final InstrumentDerivativeVisitor<S, T> visitor, final S data) {
        ArgumentChecker.notNull(visitor, "visitor");
        return visitor.visitDepositZero(this, data);
    }

    @Override
    public <T> T accept(final InstrumentDerivativeVisitor<?, T> visitor) {
        ArgumentChecker.notNull(visitor, "visitor");
        return visitor.visitDepositZero(this);
    }

    @Override
    public String toString() {
        return "DepositZero " + _currency + " [" + _startTime + ", " + _endTime + "], notional: " + _notional
                + ", rate: " + _rate;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + _currency.hashCode();
        result = prime * result + (_discountingCurveName == null ? 0 : _discountingCurveName.hashCode());
        long temp;
        temp = Double.doubleToLongBits(_endTime);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(_initialAmount);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(_interestAmount);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(_notional);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(_paymentAccrualFactor);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        result = prime * result + ((_rate == null) ? 0 : _rate.hashCode());
        temp = Double.doubleToLongBits(_startTime);
        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 DepositZero other = (DepositZero) obj;
        if (!ObjectUtils.equals(_currency, other._currency)) {
            return false;
        }
        if (!ObjectUtils.equals(_discountingCurveName, other._discountingCurveName)) {
            return false;
        }
        if (Double.doubleToLongBits(_endTime) != Double.doubleToLongBits(other._endTime)) {
            return false;
        }
        if (Double.doubleToLongBits(_initialAmount) != Double.doubleToLongBits(other._initialAmount)) {
            return false;
        }
        if (Double.doubleToLongBits(_interestAmount) != Double.doubleToLongBits(other._interestAmount)) {
            return false;
        }
        if (Double.doubleToLongBits(_notional) != Double.doubleToLongBits(other._notional)) {
            return false;
        }
        if (Double.doubleToLongBits(_paymentAccrualFactor) != Double
                .doubleToLongBits(other._paymentAccrualFactor)) {
            return false;
        }
        if (!ObjectUtils.equals(_rate, other._rate)) {
            return false;
        }
        if (Double.doubleToLongBits(_startTime) != Double.doubleToLongBits(other._startTime)) {
            return false;
        }
        return true;
    }

}