package com.eucalyptus.component;
import java.net.URI;
import java.util.List;
/**
* Interface providing support for creating service configurations.<br/>
* Used by configuration service as follows:
* 1. checkAdd/checkRemove
* 2. add/remove
* 3. fireStart/fireStop
* @author decker
*
* @param <T>
*/
public interface ServiceBuilder<T extends ServiceConfiguration> {
public abstract Component getComponent();
/**
* Do input validation on the parameters.
* @param name
* @param host
* @param port
* @return true if request accepted.
* @throws ServiceRegistrationException
*/
public abstract Boolean checkAdd( String name, String host, Integer port ) throws ServiceRegistrationException;
public abstract Boolean checkRemove( String name ) throws ServiceRegistrationException;
public abstract ServiceConfiguration remove( ServiceConfiguration config ) throws ServiceRegistrationException;
public abstract ServiceConfiguration add( String name, String host, Integer port ) throws ServiceRegistrationException;
/**
* NOTE: This method does not necessarily return the cannonical copy of the service configuration.
* @param uri
* @return ServiceConfiguration
* @throws ServiceRegistrationException
*/
public abstract ServiceConfiguration toConfiguration( URI uri ) throws ServiceRegistrationException;
public abstract void fireStart( ServiceConfiguration config ) throws ServiceRegistrationException;
public abstract void fireStop( ServiceConfiguration config ) throws ServiceRegistrationException;
public abstract List<T> list() throws ServiceRegistrationException;
public abstract T lookupByName( String name ) throws ServiceRegistrationException;
public abstract T lookupByHost( String name ) throws ServiceRegistrationException;
}