package org.limewire.friend.impl; import java.util.HashMap; import java.util.Map; import org.limewire.concurrent.ListeningFuture; import org.limewire.friend.api.FriendConnection; import org.limewire.friend.api.FriendConnectionConfiguration; import org.limewire.friend.api.FriendConnectionFactory; import org.limewire.friend.api.FriendConnectionFactoryRegistry; import org.limewire.friend.api.Network; import com.google.inject.Singleton; @Singleton class FriendConnectionFactoryRegistryImpl implements FriendConnectionFactoryRegistry, FriendConnectionFactory { private final Map<Network.Type, FriendConnectionFactory> factories = new HashMap<Network.Type, FriendConnectionFactory>(); @Override public void register(Network.Type type, FriendConnectionFactory factory) { factories.put(type, factory); } private FriendConnectionFactory getFactory(FriendConnectionConfiguration configuration) { FriendConnectionFactory factory = factories.get(configuration.getType()); if (factory != null) { return factory; } throw new IllegalArgumentException("no factory for: " + configuration); } @Override public ListeningFuture<FriendConnection> login(FriendConnectionConfiguration configuration) { return getFactory(configuration).login(configuration); } @Override public void register(FriendConnectionFactoryRegistry registry) { throw new UnsupportedOperationException(); } @Override public ListeningFuture<String> requestLoginUrl(FriendConnectionConfiguration configuration) { return getFactory(configuration).requestLoginUrl(configuration); } }