package org.limewire.friend.impl.feature;
import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.limewire.friend.api.feature.FeatureInitializer;
import org.limewire.friend.api.feature.FeatureRegistry;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
class FeatureRegistryImpl implements FeatureRegistry {
private final Object lock = new Object();
private final Map<URI, FeatureInitializer> featureInitializers = new HashMap<URI, FeatureInitializer>();
private final Set<URI> publicFeatureUris = new HashSet<URI>();
@Inject
FeatureRegistryImpl() {
}
@Override
public FeatureInitializer get(URI uri) {
synchronized (lock) {
return featureInitializers.get(uri);
}
}
@Override
public Iterable<URI> getPublicFeatureUris() {
synchronized (lock) {
return new ArrayList<URI>(publicFeatureUris);
}
}
@Override
public Iterable<URI> getAllFeatureUris() {
synchronized (lock) {
return new ArrayList<URI>(featureInitializers.keySet());
}
}
@Override
public void registerPrivateInitializer(URI uri, FeatureInitializer featureInitializer) {
synchronized (lock) {
featureInitializers.put(uri, featureInitializer);
}
}
@Override
public void registerPublicInitializer(URI uri, FeatureInitializer featureInitializer) {
synchronized (lock) {
featureInitializers.put(uri, featureInitializer);
publicFeatureUris.add(uri);
}
}
@Override
public void deregisterInitializer(URI uri) {
synchronized (lock) {
featureInitializers.remove(uri);
publicFeatureUris.remove(uri);
}
}
}