package org.limewire.friend.api.feature; import java.net.URI; /** * A registry of all of the locally supported features. * * For each <cod>Feature</code> there is a <code>FeatureInitializer</code> that * is invoked on a <code>FriendPresence</code> after it is discovered * that that presence supports the feature.<p> * * A <code>FeatureInitializer</code> might, for example, send the * local address to the friend presence. */ public interface FeatureRegistry { /** * Adds a <code>FeatureInitializer</code> to the registry for * a specific <code>URI</code> id. The URI is meant to be broacast and published * to other clients as a supported feature. * @param uri the id of the <code>Feature</code> * @param featureInitializer the entity to initialize the feature when needed. */ void registerPublicInitializer(URI uri, FeatureInitializer featureInitializer); /** * Adds a <code>FeatureInitializer</code> to the registry for a * specific URI. The URI is not meant to be broadcast to other clients. */ void registerPrivateInitializer(URI uri, FeatureInitializer featureInitializer); /** * Deregisters a feature initializer for a uri. */ void deregisterInitializer(URI uri); /** * Retrieve the {@link FeatureInitializer} based on the identifying URI. * @param uri identifies the feature being retrieved * @return the <code>FeatureInitializer</code the <code>uri</code> * or null if it does not exist */ FeatureInitializer get(URI uri); /** * @return the URIs that are meant to be published to other clients */ Iterable<URI> getPublicFeatureUris(); /** * @return URIs for all features */ Iterable<URI> getAllFeatureUris(); }