/*
* Copyright (c) 2006-2011 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.emulation.hibernate3.ast.whereClause;
import mockit.emulation.hibernate3.ast.*;
final class AccessPathExpr extends PrimaryExpr
{
final String[] accessElements;
AccessPathExpr(String accessPath)
{
accessElements = accessPath.split("\\.");
}
public static Expr parse(Tokens tokens)
{
if (tokens.hasNext()) {
String accessPath = tokens.next();
if (accessPath.matches("\\w+(\\.\\w+)*")) {
return new AccessPathExpr(accessPath);
}
}
return null;
}
@Override
public Object evaluate(QueryEval eval)
{
Object result = eval.tuple.get(accessElements[0]);
for (int i = 1; i < accessElements.length; i++) {
String accessElement = accessElements[i];
String name =
"get" + Character.toUpperCase(accessElement.charAt(0)) + accessElement.substring(1);
result = QueryEval.executeGetter(result, name);
}
return result;
}
}