/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.opengamma.DataNotFoundException;
import com.opengamma.core.link.ConfigLink;
import com.opengamma.financial.analytics.curve.CurveDefinition;
import com.opengamma.util.result.FailureStatus;
import com.opengamma.util.result.Result;
/**
* Function implementation that returns a curve definition from the configured source.
* <p>
* If not available, the return Result will indicate the reason why.
*/
public class DefaultCurveDefinitionFn implements CurveDefinitionFn {
//-------------------------------------------------------------------------
@Override
public Result<CurveDefinition> getCurveDefinition(String curveName) {
try {
return Result.success(ConfigLink.resolvable(curveName, CurveDefinition.class).resolve());
} catch (DataNotFoundException ex) {
return Result.failure(FailureStatus.MISSING_DATA, ex, "Could not get curve definition called {}", curveName);
}
}
@Override
public Result<Map<String, CurveDefinition>> getCurveDefinitions(Set<String> curveNames) {
Map<String, CurveDefinition> curveDefinitions = new HashMap<>();
Result<?> curveDefinitionResult = Result.success(true);
for (String curveName : curveNames) {
Result<CurveDefinition> curveDefinition = getCurveDefinition(curveName);
if (curveDefinition.isSuccess()) {
curveDefinitions.put(curveName, curveDefinition.getValue());
} else {
curveDefinitionResult = Result.failure(curveDefinitionResult, Result.failure(curveDefinition));
}
}
if (!curveDefinitionResult.isSuccess()) {
return Result.failure(curveDefinitionResult);
}
return Result.success(curveDefinitions);
}
}