001package com.randomnoun.common.jexl;
002
003/* (c) 2013 randomnoun. All Rights Reserved. This work is licensed under a
004 * BSD Simplified License. (http://www.randomnoun.com/bsd-simplified.html)
005 */
006import java.io.ByteArrayOutputStream;
007import java.io.PrintWriter;
008import java.io.StringReader;
009
010import com.randomnoun.common.jexl.ast.TopLevelExpression;
011import com.randomnoun.common.jexl.parser.ExpressionParser;
012import com.randomnoun.common.jexl.parser.ParseException;
013import com.randomnoun.common.jexl.parser.TokenMgrError;
014import com.randomnoun.common.jexl.visitor.TreeDumper;
015
016/**
017 * Couple of methods to convert things to and from TopLevelExpressions.
018 *
019 * 
020 * @author knoxg
021 */
022public class ExpressionUtil
023{
024
025    /** Convert Java expression String to a TopLevelExpression */
026    public static TopLevelExpression stringToExpression(String expressionString)
027        throws java.text.ParseException
028    {
029        StringReader reader = new StringReader(expressionString);
030        ExpressionParser parser = new ExpressionParser(reader);
031        TopLevelExpression root = null;
032
033        try {
034            root = parser.TopLevelExpression();
035        } catch (ParseException pe) {
036            throw new java.text.ParseException(pe.getMessage(), -1);
037        } catch (TokenMgrError tme) {
038            throw new java.text.ParseException(tme.getMessage(), -1);
039        }
040
041        return root;
042    }
043
044    /** Convert TopLevelExpression to a Java expression String */
045    public static String expressionToString(TopLevelExpression expression) {
046        ByteArrayOutputStream baos = new ByteArrayOutputStream();
047        PrintWriter out = new PrintWriter(baos);
048        TreeDumper dumper = new TreeDumper(out);
049        dumper.visit(expression);
050        out.flush();
051        return baos.toString();
052    }
053
054}