package com.eucalyptus.configurable; import java.lang.reflect.Field; import org.apache.log4j.Logger; import com.eucalyptus.bootstrap.ServiceJarDiscovery; import edu.emory.mathcs.backport.java.util.Arrays; public class PropertiesDiscovery extends ServiceJarDiscovery { private static Logger LOG = Logger.getLogger( PropertiesDiscovery.class ); public PropertiesDiscovery() {} @Override public Double getPriority( ) { return 0.4; } @Override public boolean processClass( Class c ) throws Throwable { if ( (c.getAnnotation( ConfigurableClass.class ) != null) ) { LOG.info( "-> Registrering configuration properties for entry: " + c.getName( ) ); LOG.debug( "Checking fields: " + Arrays.asList( c.getDeclaredFields( ) )); for( Field f : c.getDeclaredFields( ) ) { LOG.debug( "Checking field: " + f ); try { ConfigurableProperty prop = PropertyDirectory.buildPropertyEntry( c, f ); if( prop == null ) { continue; } else { LOG.info( "--> Adding property: " + prop.getQualifiedName( ) ); } } catch ( Throwable e ) { LOG.debug( e, e ); } } return true; } else { return false; } } }