package com.eucalyptus.component; import java.lang.reflect.Modifier; import com.eucalyptus.bootstrap.Component; import com.eucalyptus.bootstrap.ServiceJarDiscovery; import com.eucalyptus.system.Ats; public class ServiceBuilderDiscovery extends ServiceJarDiscovery { @Override public Double getPriority( ) { return 0.2; } @Override public boolean processClass( Class candidate ) throws Throwable { if( ServiceBuilder.class.isAssignableFrom( candidate ) && !Modifier.isAbstract( candidate.getModifiers( ) ) && !Modifier.isInterface( candidate.getModifiers( ) ) && Ats.from( candidate ).has( DiscoverableServiceBuilder.class ) ) { DiscoverableServiceBuilder at = Ats.from( candidate ).get( DiscoverableServiceBuilder.class ); for( Component c : at.value( ) ) { Components.lookup( c ).setBuilder( ( ServiceBuilder ) candidate.newInstance( ) ); } return true; } else { return false; } } }