/** * Copyright (C) 2011 - 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 java.util.HashMap; import java.util.Map; import org.apache.commons.lang.Validate; import com.opengamma.id.UniqueIdentifiable; /** * Data structure to hold the data points for a future price curve. * @param <X> Type of the x-data */ public class FuturePriceCurveData<X> { private String _definitionName; private String _specificationName; private UniqueIdentifiable _target; private Map<X, Double> _values; private X[] _xs; public FuturePriceCurveData(final String definitionName, final String specificationName, final UniqueIdentifiable target, final X[] xs, final Map<X, Double> values) { Validate.notNull(definitionName, "Definition Name"); Validate.notNull(specificationName, "Specification Name"); Validate.notNull(target, "Target"); Validate.notNull(xs, "X axis values"); Validate.notNull(values, "Volatility Values Map"); _definitionName = definitionName; _specificationName = specificationName; _target = target; _values = new HashMap<X, Double>(values); _xs = xs; } public X[] getXs() { return _xs; } public Double getFuturePrice(final X x) { return _values.get(x); } public Map<X, Double> asMap() { return _values; } public String getDefinitionName() { return _definitionName; } public String getSpecificationName() { return _specificationName; } public UniqueIdentifiable getTarget() { return _target; } @Override public boolean equals(final Object o) { if (o == null) { return false; } if (!(o instanceof FuturePriceCurveData)) { return false; } final FuturePriceCurveData<?> other = (FuturePriceCurveData<?>) o; return getDefinitionName().equals(other.getDefinitionName()) && getSpecificationName().equals(other.getSpecificationName()) && getTarget().equals(other.getTarget()) && Arrays.equals(getXs(), other.getXs()) && _values.equals(other._values); } @Override public int hashCode() { return getDefinitionName().hashCode() * getSpecificationName().hashCode() * getTarget().hashCode(); } }