/**
* 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.Map;
import java.util.Set;
import java.util.stream.Collectors;
import com.opengamma.strata.calc.runner.CalculationFunctions;
import com.opengamma.strata.collect.MapStream;
/**
* Evaluates a token against a map.
*/
public class MapTokenEvaluator extends TokenEvaluator<Map<?, ?>> {
@Override
public Class<?> getTargetType() {
return Map.class;
}
@Override
public Set<String> tokens(Map<?, ?> map) {
return map.keySet().stream()
.map(k -> k.toString().toLowerCase(Locale.ENGLISH))
.collect(Collectors.toSet());
}
@Override
public EvaluationResult evaluate(
Map<?, ?> map,
CalculationFunctions functions,
String firstToken,
List<String> remainingTokens) {
return MapStream.of(map)
.filterKeys(key -> firstToken.equalsIgnoreCase(key.toString()))
.findFirst()
.map(e -> EvaluationResult.success(e.getValue(), remainingTokens))
.orElse(invalidTokenFailure(map, firstToken));
}
}