package com.eucalyptus.component; import java.net.URI; import java.util.List; import java.util.Map; import com.eucalyptus.config.LocalConfiguration; import com.eucalyptus.config.RemoteConfiguration; import com.eucalyptus.util.NetworkUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; public class DefaultServiceBuilder extends AbstractServiceBuilder<ServiceConfiguration> { private Component component; private Map<String, ServiceConfiguration> services = Maps.newConcurrentHashMap( ); public DefaultServiceBuilder( Component component ) { this.component = component; } @Override public Boolean checkRemove( String name ) throws ServiceRegistrationException { return this.services.containsKey( name ); } @Override public Component getComponent( ) { return this.component; } @Override public List<ServiceConfiguration> list( ) throws ServiceRegistrationException { return Lists.newArrayList( this.services.values( ) ); } @Override public ServiceConfiguration add( String name, String host, Integer port ) throws ServiceRegistrationException { throw new RuntimeException( "Not implemented yet." ); } @Override public ServiceConfiguration toConfiguration( URI uri ) throws ServiceRegistrationException { try { if( uri.getScheme( ).matches( ".*vm.*" ) || ( uri.getHost( ) != null && NetworkUtil.testLocal( uri.getHost( ) ) ) ) { return new LocalConfiguration( this.component.getPeer( ), uri ); } else { return new RemoteConfiguration( this.component.getPeer( ), uri ); } } catch ( Throwable t ) { return new LocalConfiguration( this.component.getPeer( ), uri ); } } @Override public Boolean checkAdd( String name, String host, Integer port ) throws ServiceRegistrationException { return !this.services.containsKey( name ); } @Override public ServiceConfiguration lookupByHost( String name ) throws ServiceRegistrationException { throw new RuntimeException( "Not implemented yet." ); } @Override public ServiceConfiguration lookupByName( String name ) throws ServiceRegistrationException { return this.services.get( name ); } @Override public ServiceConfiguration remove( ServiceConfiguration config ) throws ServiceRegistrationException { return this.services.remove( config.getName( ) ); } }