/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.report.framework.expression;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import com.google.common.collect.ImmutableSet;
import com.opengamma.strata.calc.runner.CalculationFunctions;
import com.opengamma.strata.market.param.CurrencyParameterSensitivity;
/**
* Token evaluator for currency parameter sensitivity.
* <p>
* Although there is a formatter for this type, users will traverse to a single sensitivity from
* a list of sensitivities. This traversal may include redundant tokens, so the purpose of this
* evaluator is to continue returning the same sensitivity object as long as the tokens are
* consistent with the fields on this object.
*/
public class CurrencyParameterSensitivityTokenEvaluator extends TokenEvaluator<CurrencyParameterSensitivity> {
@Override
public Class<?> getTargetType() {
return CurrencyParameterSensitivity.class;
}
@Override
public Set<String> tokens(CurrencyParameterSensitivity sensitivity) {
return ImmutableSet.of(
sensitivity.getCurrency().getCode().toLowerCase(Locale.ENGLISH),
sensitivity.getMarketDataName().getName().toLowerCase(Locale.ENGLISH));
}
@Override
public EvaluationResult evaluate(
CurrencyParameterSensitivity sensitivity,
CalculationFunctions functions,
String firstToken,
List<String> remainingTokens) {
if (firstToken.equalsIgnoreCase(sensitivity.getCurrency().getCode()) ||
firstToken.equalsIgnoreCase(sensitivity.getMarketDataName().getName())) {
return EvaluationResult.success(sensitivity, remainingTokens);
} else {
return invalidTokenFailure(sensitivity, firstToken);
}
}
}