package com.mcb.module;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
import com.google.inject.matcher.Matchers;
import com.google.inject.spi.InjectionListener;
import com.google.inject.spi.TypeEncounter;
import com.google.inject.spi.TypeListener;
import com.mcb.App;
import com.mcb.HttpFiles;
import com.mcb.RePoster;
import com.mcb.annotations.CorsFilter;
import com.mcb.annotations.SSLConfig;
import com.mcb.base.ISparkFilter;
import com.mcb.base.SparkApp;
import com.mcb.base.SparkAuthFilter;
import com.mcb.owner.SparkAppConfig;
import org.aeonbits.owner.ConfigCache;
import java.util.ArrayList;
import java.util.List;
/**
* Created by matthewb on 10/15/15.
*/
public class SparkAppModule extends AbstractModule {
@Override
protected void configure() {
bind(SparkAppConfig.class).toInstance(ConfigCache.getOrCreate(
SparkAppConfig.class,
System.getProperties(),
System.getenv()
));
bind(Gson.class).toInstance(
new GsonBuilder()
.disableHtmlEscaping()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.setPrettyPrinting()
.create()
);
bind(SparkApp.class).to(App.class);
install(new HttpClientModule());
install(new NoAuthModule());
install(new CorsModule());
install(new SSLConfigModule());
}
@Provides
List<ISparkFilter> sparkAppFilters(@CorsFilter ISparkFilter cors, @SSLConfig ISparkFilter sslConfig, SparkAuthFilter authFilter, HttpFiles files, RePoster rePoster){
List<ISparkFilter> filters = new ArrayList<>();
filters.add(sslConfig);
filters.add(cors);
filters.add(authFilter);
filters.add(files);
filters.add(rePoster);
return filters;
}
}