/*
* This file is part of Flicklib.
*
* Copyright (C) Francis De Brabandere
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.flicklib.module;
import com.flicklib.api.InfoFetcherFactory;
import com.flicklib.api.MovieInfoFetcher;
import com.flicklib.api.Parser;
import com.flicklib.api.SubtitlesLoader;
import com.flicklib.api.TrailerFinder;
import com.flicklib.service.Constants;
import com.flicklib.service.SourceLoader;
import com.flicklib.service.movie.InfoFetcherFactoryImpl;
import com.flicklib.service.movie.apple.AppleTrailerFinder;
import com.flicklib.service.movie.blippr.Blippr;
import com.flicklib.service.movie.blippr.BlipprInfoFetcher;
import com.flicklib.service.movie.cinebel.Cinebel;
import com.flicklib.service.movie.cinebel.CinebelFetcher;
import com.flicklib.service.movie.cinebel.CinebelParser;
import com.flicklib.service.movie.flixter.Flixster;
import com.flicklib.service.movie.flixter.FlixsterInfoFetcher;
import com.flicklib.service.movie.flixter.FlixsterParser;
import com.flicklib.service.movie.google.Google;
import com.flicklib.service.movie.google.GoogleInfoFetcher;
import com.flicklib.service.movie.google.GoogleParser;
import com.flicklib.service.movie.imdb.Imdb;
import com.flicklib.service.movie.imdb.ImdbInfoFetcher;
import com.flicklib.service.movie.imdb.ImdbParser;
import com.flicklib.service.movie.movieweb.MovieWeb;
import com.flicklib.service.movie.movieweb.MovieWebInfoFetcher;
import com.flicklib.service.movie.movieweb.MovieWebParser;
import com.flicklib.service.movie.netflix.Netflix;
import com.flicklib.service.movie.netflix.NetflixInfoFetcher;
import com.flicklib.service.movie.ofdb.Ofdb;
import com.flicklib.service.movie.ofdb.OfdbFetcher;
import com.flicklib.service.movie.ofdb.OfdbParser;
import com.flicklib.service.movie.porthu.PortHu;
import com.flicklib.service.movie.porthu.PorthuFetcher;
import com.flicklib.service.movie.tomatoes.RottenTomatoes;
import com.flicklib.service.movie.tomatoes.TomatoesInfoFetcher;
import com.flicklib.service.movie.tomatoes.TomatoesParser;
import com.flicklib.service.movie.xpress.XpressHu;
import com.flicklib.service.movie.xpress.XpressHuFetcher;
import com.flicklib.service.sub.OpenSubtitlesLoader;
import com.google.inject.AbstractModule;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Names;
/**
*
* @author francisdb
*/
public class FlicklibModule extends AbstractModule {
Provider<SourceLoader> loader;
Class<Provider<SourceLoader>> loaderClass;
String cacheRoot = "";
boolean httpComponents = true;
public FlicklibModule() {
}
public FlicklibModule setLoader(Provider<SourceLoader> loader) {
this.loader = loader;
return this;
}
public FlicklibModule setLoaderClass(Class<Provider<SourceLoader>> loaderClass) {
this.loaderClass = loaderClass;
return this;
}
/**
* @param cacheRoot the cacheRoot to set
* @return
*/
public FlicklibModule setCacheRoot(String cacheRoot) {
this.cacheRoot = cacheRoot != null ? cacheRoot : "";
return this;
}
/**
* @param httpComponents the httpComponents to set
* @return
*/
public FlicklibModule setUseHttpComponents(boolean httpComponents) {
this.httpComponents = httpComponents;
return this;
}
@Override
protected void configure() {
bindConstant().annotatedWith(Names.named(Constants.HTTP_TIMEOUT)).to(20 * 1000);
bindConstant().annotatedWith(Names.named(Constants.HTTP_CACHE)).to(Boolean.TRUE);
bindConstant().annotatedWith(Names.named(Constants.CACHE_ROOT)).to(cacheRoot);
bindConstant().annotatedWith(Names.named(Constants.USE_HTTPCOMPONENTS)).to(httpComponents);
// bind(HttpCache.class).to(HttpEHCache.class);
// bind(HttpCache.class).to(HttpCache4J.class);
if (loader != null) {
bind(SourceLoader.class).toProvider(loader).in(Singleton.class);
} else if (loaderClass != null) {
bind(SourceLoader.class).toProvider(loaderClass).in(Singleton.class);
} else {
bind(SourceLoader.class).toProvider(SourceLoaderSelector.class).in(Singleton.class);
}
bind(SubtitlesLoader.class).to(OpenSubtitlesLoader.class);
bind(InfoFetcherFactory.class).to(InfoFetcherFactoryImpl.class);
bind(Parser.class).annotatedWith(MovieWeb.class).to(MovieWebParser.class);
bind(Parser.class).annotatedWith(Imdb.class).to(ImdbParser.class);
bind(Parser.class).annotatedWith(RottenTomatoes.class).to(TomatoesParser.class);
bind(Parser.class).annotatedWith(Google.class).to(GoogleParser.class);
bind(Parser.class).annotatedWith(Flixster.class).to(FlixsterParser.class);
bind(Parser.class).annotatedWith(Cinebel.class).to(CinebelParser.class);
bind(Parser.class).annotatedWith(Ofdb.class).to(OfdbParser.class);
bind(MovieInfoFetcher.class).annotatedWith(Imdb.class).to(ImdbInfoFetcher.class);
bind(MovieInfoFetcher.class).annotatedWith(MovieWeb.class).to(MovieWebInfoFetcher.class);
bind(MovieInfoFetcher.class).annotatedWith(RottenTomatoes.class).to(TomatoesInfoFetcher.class);
bind(MovieInfoFetcher.class).annotatedWith(Google.class).to(GoogleInfoFetcher.class);
bind(MovieInfoFetcher.class).annotatedWith(Flixster.class).to(FlixsterInfoFetcher.class);
bind(MovieInfoFetcher.class).annotatedWith(Netflix.class).to(NetflixInfoFetcher.class);
bind(MovieInfoFetcher.class).annotatedWith(PortHu.class).to(PorthuFetcher.class);
bind(MovieInfoFetcher.class).annotatedWith(Cinebel.class).to(CinebelFetcher.class);
bind(MovieInfoFetcher.class).annotatedWith(Ofdb.class).to(OfdbFetcher.class);
bind(MovieInfoFetcher.class).annotatedWith(XpressHu.class).to(XpressHuFetcher.class);
bind(MovieInfoFetcher.class).annotatedWith(Blippr.class).to(BlipprInfoFetcher.class);
bind(TrailerFinder.class).to(AppleTrailerFinder.class);
Multibinder<MovieInfoFetcher> multibinder = Multibinder.newSetBinder(binder(), MovieInfoFetcher.class);
multibinder.addBinding().to(ImdbInfoFetcher.class);
multibinder.addBinding().to(MovieWebInfoFetcher.class);
multibinder.addBinding().to(TomatoesInfoFetcher.class);
multibinder.addBinding().to(GoogleInfoFetcher.class);
multibinder.addBinding().to(FlixsterInfoFetcher.class);
multibinder.addBinding().to(NetflixInfoFetcher.class);
multibinder.addBinding().to(PorthuFetcher.class);
multibinder.addBinding().to(CinebelFetcher.class);
multibinder.addBinding().to(OfdbFetcher.class);
multibinder.addBinding().to(XpressHuFetcher.class);
multibinder.addBinding().to(BlipprInfoFetcher.class);
}
}