package org.eclipse.jst.jsf.common.internal.locator; import org.eclipse.jst.jsf.common.internal.strategy.IIdentifiableStrategy; /** * A generic location strategy object. * * @author cbateman * * @param <LOCATORTYPE> * the type of object being returned by the locator * @param <CONTEXTTYPE> * the type of the context object passed for starting and locating * @param <IDTYPE> * the type of the id used to identify a locator * @noimplement extend AbstractLocator instead */ public interface ILocator<LOCATORTYPE, CONTEXTTYPE, IDTYPE> extends IIdentifiableStrategy<CONTEXTTYPE, LOCATORTYPE, IDTYPE> { /** * Initialize the locator optionally using initialContext. * * Must be called before any other methods. Implementations should throw * IllegalStateException if this has not been called before anything else. * * @param initialContext */ void start(CONTEXTTYPE initialContext); /** * Implementations should return false if the system prevents them from * starting. It must also be checked before a client attempts to restart a * stopped locator. Must return false if isStarted is true. * * @return true if the locator can be started */ boolean canStart(); /** * @return true if the start() has been called but stop has not yet been * called. */ boolean isStarted(); /** * Stop the locator. */ void stop(); /** * @param listener */ void addListener( final ILocatorChangeListener listener); /** * @param listener */ void removeListener(final ILocatorChangeListener listener); /** * perform must call this method in any concrete implementation. * * @param context * @return the located type. */ LOCATORTYPE locate(CONTEXTTYPE context); }