package org.limewire.core.settings;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Collections;
import org.limewire.concurrent.AbstractLazySingletonProvider;
import org.limewire.facebook.service.settings.ChatChannel;
import org.limewire.facebook.service.settings.FacebookAPIKey;
import org.limewire.facebook.service.settings.FacebookAppID;
import org.limewire.facebook.service.settings.FacebookAuthServerUrls;
import org.limewire.facebook.service.settings.FacebookReportBugs;
import org.limewire.facebook.service.settings.FacebookURLs;
import org.limewire.facebook.service.settings.InspectionsServerUrls;
import org.limewire.geocode.GeoLocation;
import org.limewire.geocode.GeocodeUrl;
import org.limewire.inject.AbstractModule;
import org.limewire.inject.MutableProvider;
import org.limewire.setting.StringSetting;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.google.inject.TypeLiteral;
import com.google.inject.internal.ImmutableMap;
public class LimeWireCoreSettingsModule extends AbstractModule {
@Override
protected void configure() {
bind(String.class).annotatedWith(GeocodeUrl.class).toProvider(GeocodeSettings.GEOCODE_URL);
bind(new TypeLiteral<MutableProvider<Properties>>(){}).annotatedWith(GeoLocation.class).toInstance(GeocodeSettings.GEO_LOCATION);
bind(new TypeLiteral<MutableProvider<String>>(){}).annotatedWith(ChatChannel.class).toInstance(FacebookSettings.CHAT_CHANNEL);
bind(new TypeLiteral<String[]>(){}).annotatedWith(FacebookAuthServerUrls.class).toProvider(FacebookSettings.AUTH_SERVER_URLS);
bind(new TypeLiteral<String>(){}).annotatedWith(FacebookAPIKey.class).toProvider(FacebookSettings.API_KEY);
bind(new TypeLiteral<String>(){}).annotatedWith(FacebookAppID.class).toProvider(FacebookSettings.APP_ID);
bind(new TypeLiteral<Boolean>(){}).annotatedWith(FacebookReportBugs.class).toProvider(FacebookSettings.REPORT_BUGS);
bind(new TypeLiteral<Map<String, Provider<String>>>(){}).annotatedWith(FacebookURLs.class).toProvider(FacebookURLsMapProvider.class);
bind(new TypeLiteral<Map<String, StringSetting>>(){}).annotatedWith(InspectionsServerUrls.class).toProvider(InspectionsURLsMapProvider.class);
}
@Singleton
private static class FacebookURLsMapProvider extends AbstractLazySingletonProvider<Map<String, Provider<String>>> {
@Inject
public FacebookURLsMapProvider() {
}
@Override
protected Map<String, Provider<String>> createObject() {
Map<String, Provider<String>> map = new HashMap<String, Provider<String>>();
map.put(FacebookURLs.HOME_PAGE_URL, FacebookSettings.HOME_PAGE_URL);
map.put(FacebookURLs.PRESENCE_POPOUT_PAGE_URL, FacebookSettings.PRESENCE_POPOUT_PAGE_URL);
map.put(FacebookURLs.CHAT_SETTINGS_URL, FacebookSettings.CHAT_SETTINGS_URL);
map.put(FacebookURLs.RECONNECT_URL, FacebookSettings.RECONNECT_URL);
map.put(FacebookURLs.LOGOUT_URL, FacebookSettings.LOGOUT_URL);
map.put(FacebookURLs.SEND_CHAT_URL, FacebookSettings.SEND_CHAT_URL);
map.put(FacebookURLs.SEND_CHAT_STATE_URL, FacebookSettings.SEND_CHAT_STATE_URL);
map.put(FacebookURLs.UPDATE_PRESENCES_URL, FacebookSettings.UPDATE_PRESENCES_URL);
map.put(FacebookURLs.RECEIVE_CHAT_URL, FacebookSettings.RECEIVE_CHAT_URL);
return Collections.unmodifiableMap(map);
}
}
@Singleton
private static class InspectionsURLsMapProvider extends AbstractLazySingletonProvider<Map<String, StringSetting>> {
@Inject public InspectionsURLsMapProvider() {}
@Override
protected Map<String, StringSetting> createObject() {
return ImmutableMap.of(
InspectionsServerUrls.INSPECTION_SPEC_REQUEST_URL, InspectionsSettings.INSPECTION_SPEC_REQUEST_URL,
InspectionsServerUrls.INSPECTION_SPEC_SUBMIT_URL, InspectionsSettings.INSPECTION_SPEC_SUBMIT_URL);
}
}
}