public override EvaluationResult evaluate(ResultsRow resultsRow, CalculationFunctions functions, string firstToken, IList <string> remainingTokens) { ValueRootType rootType = ValueRootType.parseToken(firstToken); switch (rootType.innerEnumValue) { case com.opengamma.strata.report.framework.expression.ValueRootType.InnerEnum.MEASURES: return(evaluateMeasures(resultsRow, functions, remainingTokens)); case com.opengamma.strata.report.framework.expression.ValueRootType.InnerEnum.PRODUCT: return(EvaluationResult.of(resultsRow.Product, remainingTokens)); case com.opengamma.strata.report.framework.expression.ValueRootType.InnerEnum.SECURITY: return(EvaluationResult.of(resultsRow.Security, remainingTokens)); case com.opengamma.strata.report.framework.expression.ValueRootType.InnerEnum.TRADE: return(EvaluationResult.of(resultsRow.Trade, remainingTokens)); case com.opengamma.strata.report.framework.expression.ValueRootType.InnerEnum.POSITION: return(EvaluationResult.of(resultsRow.Position, remainingTokens)); case com.opengamma.strata.report.framework.expression.ValueRootType.InnerEnum.TARGET: return(EvaluationResult.success(resultsRow.Target, remainingTokens)); default: throw new System.ArgumentException("Unknown root token '" + rootType.token() + "'"); } }
// find the result starting from a measure private EvaluationResult evaluateMeasures(ResultsRow resultsRow, CalculationFunctions functions, IList <string> remainingTokens) { // if no measures, return list of valid measures if (remainingTokens.Count == 0 || Strings.nullToEmpty(remainingTokens[0]).Trim().Empty) { IList <string> measureNames = ResultsRow.measureNames(resultsRow.Target, functions); return(EvaluationResult.failure("No measure specified. Use one of: {}", measureNames)); } // evaluate the measure name string measureToken = remainingTokens[0]; return(EvaluationResult.of(resultsRow.getResult(measureToken), remainingTokens.subList(1, remainingTokens.Count))); }