com.opengamma.analytics.financial.model.option.definition.OptionDataBundle.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.analytics.financial.model.option.definition.OptionDataBundle.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.model.option.definition;

import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.Validate;
import org.threeten.bp.ZonedDateTime;

import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve;
import com.opengamma.analytics.financial.model.volatility.surface.VolatilitySurface;
import com.opengamma.util.tuple.DoublesPair;

/**
 * 
 */
public class OptionDataBundle {
    private final YieldAndDiscountCurve _interestRateCurve;
    private final VolatilitySurface _volatilitySurface;
    private final ZonedDateTime _date;

    public OptionDataBundle(final YieldAndDiscountCurve interestRateCurve,
            final VolatilitySurface volatilitySurface, final ZonedDateTime date) {
        Validate.notNull(date, "date");
        _interestRateCurve = interestRateCurve;
        _volatilitySurface = volatilitySurface;
        _date = date;
    }

    public OptionDataBundle(final OptionDataBundle data) {
        Validate.notNull(data);
        _interestRateCurve = data.getInterestRateCurve();
        _volatilitySurface = data.getVolatilitySurface();
        _date = data.getDate();
    }

    public double getInterestRate(final double t) {
        return getInterestRateCurve().getInterestRate(t);
    }

    public YieldAndDiscountCurve getInterestRateCurve() {
        return _interestRateCurve;
    }

    public double getVolatility(final double timeToExpiry, final double strike) {
        return getVolatilitySurface().getVolatility(DoublesPair.of(timeToExpiry, strike));
    }

    public VolatilitySurface getVolatilitySurface() {
        return _volatilitySurface;
    }

    public ZonedDateTime getDate() {
        return _date;
    }

    public OptionDataBundle withInterestRateCurve(final YieldAndDiscountCurve curve) {
        return new OptionDataBundle(curve, getVolatilitySurface(), getDate());
    }

    public OptionDataBundle withVolatilitySurface(final VolatilitySurface surface) {
        return new OptionDataBundle(getInterestRateCurve(), surface, getDate());
    }

    public OptionDataBundle withDate(final ZonedDateTime date) {
        return new OptionDataBundle(getInterestRateCurve(), getVolatilitySurface(), date);
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + _date.hashCode();
        result = prime * result + ((_interestRateCurve == null) ? 0 : _interestRateCurve.hashCode());
        result = prime * result + ((_volatilitySurface == null) ? 0 : _volatilitySurface.hashCode());
        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 OptionDataBundle other = (OptionDataBundle) obj;
        if (!ObjectUtils.equals(_volatilitySurface, other._volatilitySurface)) {
            return false;
        }
        if (!ObjectUtils.equals(_interestRateCurve, other._interestRateCurve)) {
            return false;
        }
        return ObjectUtils.equals(_date, other._date);
    }

}