/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.provider.curve;
import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.Set;
import org.apache.commons.lang.ObjectUtils;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.tuple.Pair;
/**
* Class describing a block of curves build together.
*/
public class CurveBuildingBlock implements Serializable {
/**
* The list of curve in the block as a map: Name to a pair of integers:
* 1) Start of the curve parameters in the array of all parameters of the block.
* 2) Number of parameters in the curve
*/
private final LinkedHashMap<String, Pair<Integer, Integer>> _unit;
// TODO: Replace the curve names by some curve ID, maybe some UniqueIdentifiable objects
// Review: maybe a 'copy' method would be useful.
/**
* Constructor.
*/
public CurveBuildingBlock() {
_unit = new LinkedHashMap<>();
}
/**
* Constructor from a map. A new map is created.
* @param block The curve block. Not null.
*/
public CurveBuildingBlock(final LinkedHashMap<String, Pair<Integer, Integer>> block) {
ArgumentChecker.notNull(block, "Curve building block");
_unit = new LinkedHashMap<>();
_unit.putAll(block);
}
/**
* Returns the start index of the given string in the array of all parameters.
* @param name The string name.
* @return The start index.
*/
public Integer getStart(final String name) {
// TODO: Test name exists?
return _unit.get(name).getFirst();
}
/**
* Returns the number of parameters for the curve.
* @param name The curve name.
* @return The number of parameters.
*/
public Integer getNbParameters(final String name) {
return _unit.get(name).getSecond();
}
/**
* Returns a set with all the curve names.
* @return The set of names.
*/
public Set<String> getAllNames() {
return _unit.keySet();
}
/**
* Gets all of the underlying data.
* @return The data wrapped in an unmodifiable map.
*/
public LinkedHashMap<String, Pair<Integer, Integer>> getData() {
return _unit;
}
@Override
public String toString() {
return _unit.toString();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + _unit.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 CurveBuildingBlock other = (CurveBuildingBlock) obj;
if (!ObjectUtils.equals(_unit, other._unit)) {
return false;
}
return true;
}
}