/**
*
*/
package org.richfaces.cdk.templatecompiler.el;
import org.richfaces.cdk.Logger;
import org.richfaces.cdk.model.ClassName;
import org.richfaces.cdk.templatecompiler.ELParser;
import org.richfaces.cdk.templatecompiler.builder.model.Variables;
import org.richfaces.cdk.templatecompiler.el.types.ELType;
import org.richfaces.cdk.templatecompiler.el.types.TypesFactory;
import org.richfaces.cdk.templatecompiler.statements.TypedTemplateStatement;
import com.google.inject.Inject;
/**
* @author asmirnov
*
*/
public class ELParserImpl implements ELParser {
private final TypesFactory typesFactory;
private final Logger log;
@Inject
public ELParserImpl(TypesFactory typesFactory, Logger log) {
this.typesFactory = typesFactory;
this.log = log;
}
/*
* (non-Javadoc)
*
* @see org.richfaces.cdk.templatecompiler.ELParser#parse(java.lang.String,
* org.richfaces.cdk.templatecompiler.builder.model.Variables, org.richfaces.cdk.templatecompiler.el.ELType)
*/
@Override
public TypedTemplateStatement parse(String expression, Variables variables, ELType expectedType) throws ParsingException {
ELVisitor visitor = new ELVisitor(log, typesFactory);
visitor.parse(expression, variables, expectedType);
return visitor;
}
@Override
public TypedTemplateStatement parse(String expression, Variables variables, String expectedType) throws ParsingException {
return parse(expression, variables, typesFactory.getType(expectedType));
}
/*
* (non-Javadoc)
*
* @see org.richfaces.cdk.templatecompiler.ELParser#getType(java.lang.Class)
*/
@Override
public ELType getType(Class<?> targetClass) {
return typesFactory.getType(targetClass);
}
/*
* (non-Javadoc)
*
* @see org.richfaces.cdk.templatecompiler.ELParser#getType(java.lang.String)
*/
@Override
public ELType getType(String classExpression) {
return typesFactory.getType(classExpression);
}
/*
* (non-Javadoc)
*
* @see org.richfaces.cdk.templatecompiler.ELParser#getType(org.richfaces.cdk.model.ClassName)
*/
@Override
public ELType getType(ClassName targetClass) {
return typesFactory.getType(targetClass.toString());
}
}