/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.model.volatility.curve;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.Validate;
import com.opengamma.analytics.financial.model.volatility.VolatilityTermStructure;
import com.opengamma.analytics.math.curve.Curve;
import com.opengamma.analytics.math.curve.CurveShiftFunctionFactory;
/**
* VolatilityTermStructure backed by a Curve<Double, Double>
*/
public class VolatilityCurve implements VolatilityTermStructure {
private final Curve<Double, Double> _curve;
public VolatilityCurve(final Curve<Double, Double> curve) {
Validate.notNull(curve, "curve");
_curve = curve;
}
@Override
public Double getVolatility(final Double x) {
return _curve.getYValue(x);
}
public Curve<Double, Double> getCurve() {
return _curve;
}
public VolatilityCurve withParallelShift(final double shift) {
return new VolatilityCurve(CurveShiftFunctionFactory.getShiftedCurve(_curve, shift));
}
public VolatilityCurve withSingleShift(final double x, final double shift) {
return new VolatilityCurve(CurveShiftFunctionFactory.getShiftedCurve(_curve, x, shift));
}
public VolatilityCurve withMultipleShifts(final double[] xShifts, final double[] yShifts) {
return new VolatilityCurve(CurveShiftFunctionFactory.getShiftedCurve(_curve, xShifts, yShifts));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + _curve.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 VolatilityCurve other = (VolatilityCurve) obj;
return ObjectUtils.equals(_curve, other._curve);
}
}