package org.jboss.loom.utils.el;
import java.lang.reflect.Field;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Ondrej Zizka, ozizka at redhat.com
*/
public class ELUtils {
//private static final Logger log = LoggerFactory.getLogger( ELUtils.class );
public static void evaluateObjectMembersEL( Object obj, JuelCustomResolverEvaluator eval, EL.ResolvingStage stage ) {
Class curClass = obj.getClass();
while( curClass != null && ! Object.class.equals( curClass ) ){
for( Field fld : curClass.getDeclaredFields() ){
//if( ! fld.getType().equals( String.class ))
if( ! String.class.isAssignableFrom( fld.getType() ) )
continue;
final EL ann = fld.getAnnotation( EL.class );
if( null == ann )
continue;
if( stage != null && ann.stage() != stage )
continue;
try {
fld.setAccessible( true );
String orig = (String) fld.get( obj );
if( orig == null || orig.trim().isEmpty() )
continue;
String res = eval.evaluateEL( orig );
fld.set( obj, res );
} catch( IllegalArgumentException | IllegalAccessException ex ) {
throw new IllegalStateException("Failed resolving EL in " + obj + "." + fld.getName() + ": " + ex.getMessage(), ex);
}
}
curClass = curClass.getSuperclass();
}
}
}// class