package com.eucalyptus.binding; import java.lang.reflect.Field; import java.util.Arrays; import java.util.List; import org.apache.log4j.Logger; import com.eucalyptus.bootstrap.ServiceJarDiscovery; import com.google.common.base.Function; import com.google.common.collect.Lists; public class BindingDiscovery extends ServiceJarDiscovery { private static Logger LOG = Logger.getLogger( BindingDiscovery.class ); public BindingDiscovery( ) {} @Override public Double getPriority( ) { return 0.9; } @Override public boolean processClass( Class candidate ) throws Throwable { Field f; String bindingList; try { f = candidate.getDeclaredField( "JiBX_bindingList" ); bindingList = ( String ) f.get( null ); } catch ( Exception e ) { return false; } List<String> bindings = Lists.transform( Arrays.asList( bindingList.split( "\\|" ) ), new Function<String,String>() { @Override public String apply( String arg0 ) { return BindingManager.sanitizeNamespace( arg0.replaceAll(".*JiBX_","").replaceAll("Factory","") ); } }); boolean seeded = false; for( String binding : bindings ) { if( binding.length( ) > 2 ) { try { seeded |= BindingManager.seedBinding( binding, candidate ); } catch ( Exception e ) { } } } return seeded; } }