JavaExpression.java
package org.sterling.runtime.expression;
import static org.sterling.runtime.expression.ExpressionConversions.convertString;
import static org.sterling.util.StringUtil.stringify;
import org.sterling.SterlingException;
public class JavaExpression extends Expression {
public static final JavaExpression JAVA = new JavaExpression();
private JavaExpression() {
// intentionally empty
}
@Override
public Expression apply(Expression argument) throws SterlingException {
return loadExpression(convertString(argument).getValue());
}
@Override
public String toString() {
return stringify(this);
}
private Expression loadExpression(String className) throws SterlingException {
try {
Class<?> klass = getClass().getClassLoader().loadClass(className);
if (Expression.class.isAssignableFrom(klass)) {
return (Expression) klass.newInstance();
} else {
throw new SterlingException("Cannot load non-expression Java class '" + className + "'");
}
} catch (ReflectiveOperationException exception) {
throw new SterlingException(exception);
}
}
}