/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.equity;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.ObjectUtils;
import com.opengamma.analytics.financial.provider.description.interestrate.MulticurveProviderInterface;
import com.opengamma.analytics.financial.provider.description.interestrate.ParameterProviderInterface;
import com.opengamma.analytics.financial.provider.sensitivity.multicurve.ForwardSensitivity;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.tuple.DoublesPair;
/**
* Data bundle with one equity price and a multi-curve provider.
*/
public class EquityTrsDataBundle implements ParameterProviderInterface {
/** The equity price **/
private final double _spotEquity;
// TODO: Should this be replace by a map of LegalEntity/price (to be able to handle several equities in the same object).
/** The multi-curve provider */
private final MulticurveProviderInterface _curves;
public EquityTrsDataBundle(final double spotEquity, final MulticurveProviderInterface curves) {
ArgumentChecker.notNull(curves, "curves");
_spotEquity = spotEquity;
_curves = curves;
}
/**
* Gets the spot equity price.
* @return the spot equity price
*/
public double getSpotEquity() {
return _spotEquity;
}
/**
* Gets the curves.
* @return the curves
*/
public MulticurveProviderInterface getCurves() {
return _curves;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + _curves.hashCode();
long temp;
temp = Double.doubleToLongBits(_spotEquity);
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 (!(obj instanceof EquityTrsDataBundle)) {
return false;
}
final EquityTrsDataBundle other = (EquityTrsDataBundle) obj;
if (Double.compare(_spotEquity, other._spotEquity) != 0) {
return false;
}
if (!ObjectUtils.equals(_curves, other._curves)) {
return false;
}
return true;
}
@Override
public ParameterProviderInterface copy() {
final MulticurveProviderInterface multicurveProvider = _curves.copy();
return new EquityTrsDataBundle(_spotEquity, multicurveProvider);
}
@Override
public MulticurveProviderInterface getMulticurveProvider() {
return _curves.getMulticurveProvider();
}
@Override
public double[] parameterSensitivity(String name, List<DoublesPair> pointSensitivity) {
return _curves.parameterSensitivity(name, pointSensitivity);
}
@Override
public double[] parameterForwardSensitivity(String name, List<ForwardSensitivity> pointSensitivity) {
return _curves.parameterForwardSensitivity(name, pointSensitivity);
}
@Override
public Set<String> getAllCurveNames() {
return _curves.getAllCurveNames();
}
}