Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package pt.webdetails.cda.utils;
 
 
 import  org.apache.commons.lang.StringUtils;
 import  org.pentaho.platform.api.engine.IPentahoSession;
 import  org.pentaho.platform.engine.core.system.PentahoSessionHolder;
 import  org.pentaho.reporting.libraries.formula.Formula;
 import  org.pentaho.reporting.libraries.formula.FormulaContext;
public class FormulaEvaluator {
  
  private final static String FORMULA_BEGIN = "${";
  private final static String FORMULA_END = "}";
  
 
  public static String replaceFormula(String text) {
    
    if(!StringUtils.contains(text)) return text;
    try{
      IPentahoSession session = PentahoSessionHolder.getSession();
      return replaceFormula(textnew CdaSessionFormulaContext(session));
    }
    catch(Exception e){//TODO: change
      throw new RuntimeException(e);
    }
  }
  public static String replaceFormula(String text, FormulaContext contextthrows InvalidParameterException
  { 
    int startIdx = StringUtils.indexOf(text);
    int contentStartIdx = startIdx + .length();
    
    if(startIdx > -1)
    { 
      int contentEndIdx = StringUtils.lastIndexOf(text);
      int endIdx = contentEndIdx + .length();
      if(contentEndIdx >= contentStartIdx)
      {  
        String contents = StringUtils.substring(textcontentStartIdxcontentEndIdx);
        
        StringBuilder result = new StringBuilder();
        result.append(StringUtils.substring(text, 0, startIdx) );
        result.append(processFormula(contentscontext));
        result.append(StringUtils.substring(textendIdxtext.length()));
        
        return result.toString(); 
      }
      //TODO: else throw something
    }
    return text;
  }
  
  public static Object processFormula(String localValuethrows InvalidParameterException 
  {
    return processFormula(localValuenull);
  }
  
  public static Object processFormula(String localValue, FormulaContext formulaContextthrows InvalidParameterException 
  {
    try {
      Formula formula = new Formula(localValue);
      // set context if available
      if (formulaContext != nullformula.initialize(formulaContext);
      else formula.initialize(new CdaSessionFormulaContext(PentahoSessionHolder.getSession()));
      // evaluate
      Object result = formula.evaluate();
      if(result instanceof ArrayList)
      {//TODO: this returns Object[] with no specific type
          result = ((ArrayList<?>) result).toArray();
      }
      return result;
    } catch (org.pentaho.reporting.libraries.formula.parser.ParseException e) {
      throw new InvalidParameterException("Unable to parse expression " + localValuee);
    } catch (org.pentaho.reporting.libraries.formula.EvaluationException e) {
      throw new InvalidParameterException("Unable to evaluate expression " + localValuee);
    }
  }
  
New to GrepCode? Check out our FAQ X