com.opengamma.financial.analytics.volatility.surface.VolatilitySurfaceDefinition.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.financial.analytics.volatility.surface.VolatilitySurfaceDefinition.java

Source

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

import java.util.Arrays;

import org.apache.commons.lang.Validate;
import org.apache.commons.lang.builder.ToStringBuilder;

import com.opengamma.core.config.Config;
import com.opengamma.id.UniqueIdentifiable;
import com.opengamma.util.money.Currency;

/**
 * Hold the valid range of X and Y for a surface.  E.g. VolatilitySurfaceDefinition<Tenor, Double> (tenor vs strike, z is volatility), where Tenors go from 1YR..10YR,
 * strikes from 220.0d to 240.0d with deltas of 5
 * @param <X> Type of the x-data
 * @param <Y> Type of the y-data
 */
@Config(description = "Volatility surface definition")
public class VolatilitySurfaceDefinition<X, Y> {
    private final String _name;
    private final UniqueIdentifiable _target;
    private final X[] _xs;
    private final Y[] _ys;

    // TODO: can we hold a target specification here instead of the UID so that we can preserve any type information
    public VolatilitySurfaceDefinition(final String name, final UniqueIdentifiable target, final X[] xs,
            final Y[] ys) {
        Validate.notNull(name, "Name");
        Validate.notNull(target, "Target");
        Validate.notNull(xs, "xs");
        _name = name;
        _target = target;
        _xs = xs;
        _ys = ys;
    }

    public X[] getXs() {
        return _xs;
    }

    public Y[] getYs() {
        return _ys;
    }

    public String getName() {
        return _name;
    }

    /**
     * @deprecated use getTarget()
     * @throws ClassCastException if target not a currency
     * @return currency assuming that the target is a currency
     */
    @Deprecated
    public Currency getCurrency() {
        return (Currency) _target;
    }

    public UniqueIdentifiable getTarget() {
        return _target;
    }

    @Override
    public boolean equals(final Object o) {
        if (o == null) {
            return false;
        }
        if (!(o instanceof VolatilitySurfaceDefinition)) {
            return false;
        }
        final VolatilitySurfaceDefinition<?, ?> other = (VolatilitySurfaceDefinition<?, ?>) o;
        return other.getTarget().equals(getTarget()) && other.getName().equals(getName())
                && Arrays.equals(other.getXs(), getXs()) && Arrays.equals(other.getYs(), getYs());
    }

    @Override
    public int hashCode() {
        return getTarget().hashCode() * getName().hashCode();
    }

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
}