com.opengamma.analytics.financial.pnl.SensitivityAndReturnDataBundle.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.analytics.financial.pnl.SensitivityAndReturnDataBundle.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.pnl;

import java.util.List;
import java.util.Map;

import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.Validate;

import com.opengamma.analytics.financial.greeks.Underlying;
import com.opengamma.analytics.financial.sensitivity.Sensitivity;
import com.opengamma.timeseries.DoubleTimeSeries;

/**
 * 
 */
public class SensitivityAndReturnDataBundle {
    private final Sensitivity<?> _sensitivity;
    private final double _value;
    private final Map<UnderlyingType, DoubleTimeSeries<?>> _underlyingReturnTS;
    private final List<UnderlyingType> _underlyings;

    public SensitivityAndReturnDataBundle(final Sensitivity<?> sensitivity, final double value,
            final Map<UnderlyingType, DoubleTimeSeries<?>> underlyingReturnTS) {
        Validate.notNull(sensitivity, "sensitivity");
        Validate.notNull(underlyingReturnTS, "underlying returns");
        Validate.notEmpty(underlyingReturnTS, "underlying returns");
        Validate.noNullElements(underlyingReturnTS.keySet(), "underlying return key set");
        Validate.noNullElements(underlyingReturnTS.values(), "underlying return values");
        _underlyings = sensitivity.getUnderlyingTypes();
        Validate.isTrue(_underlyings.size() == underlyingReturnTS.size());
        Validate.isTrue(_underlyings.containsAll(underlyingReturnTS.keySet()));
        _sensitivity = sensitivity;
        _value = value;
        _underlyingReturnTS = underlyingReturnTS;
    }

    public Sensitivity<?> getSensitivity() {
        return _sensitivity;
    }

    public double getValue() {
        return _value;
    }

    public Map<UnderlyingType, DoubleTimeSeries<?>> getUnderlyingReturnTS() {
        return _underlyingReturnTS;
    }

    public List<UnderlyingType> getUnderlyingTypes() {
        return _underlyings;
    }

    public Underlying getUnderlying() {
        return _sensitivity.getUnderlying();
    }

    public DoubleTimeSeries<?> getReturnTimeSeriesForUnderlying(final UnderlyingType type) {
        Validate.notNull(type, "underlying");
        final DoubleTimeSeries<?> result = _underlyingReturnTS.get(type);
        Validate.notNull(result, "underlying return time series for " + type);
        return result;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((_sensitivity == null) ? 0 : _sensitivity.hashCode());
        result = prime * result + ((_underlyingReturnTS == null) ? 0 : _underlyingReturnTS.hashCode());
        long temp;
        temp = Double.doubleToLongBits(_value);
        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 SensitivityAndReturnDataBundle other = (SensitivityAndReturnDataBundle) obj;
        return ObjectUtils.equals(_sensitivity, other._sensitivity)
                && ObjectUtils.equals(_underlyingReturnTS, other._underlyingReturnTS)
                && ObjectUtils.equals(_value, other._value);
    }

}