package org.simbasecurity.dwclient.dropwizard.config;
import java.util.List;
import javax.inject.Named;
import org.hibernate.SessionFactory;
import org.simbasecurity.dwclient.dropwizard.authenticator.SimbaAuthenticator;
import org.simbasecurity.dwclient.dropwizard.healthcheck.SimbaHealthCheck;
import org.simbasecurity.dwclient.dropwizard.healthcheck.SimbaManagerDBHealthCheck;
import org.simbasecurity.dwclient.dropwizard.healthcheck.SimbaManagerRestHealthCheck;
import org.simbasecurity.dwclient.gateway.SimbaGateway;
import org.simbasecurity.dwclient.gateway.SimbaManagerDBGateway;
import org.simbasecurity.dwclient.gateway.SimbaManagerRestGateway;
import org.simbasecurity.dwclient.gateway.SimbaServiceFactory;
import org.simbasecurity.dwclient.gateway.resources.roles.SimbaRoleService;
import org.simbasecurity.dwclient.gateway.resources.users.SimbaUserService;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.yammer.dropwizard.client.JerseyClientBuilder;
import com.yammer.dropwizard.config.Configuration;
import com.yammer.dropwizard.config.Environment;
import com.yammer.dropwizard.db.DatabaseConfiguration;
import com.yammer.dropwizard.hibernate.SessionFactoryFactory;
import com.yammer.dropwizard.json.ObjectMapperFactory;
import com.yammer.dropwizard.validation.Validator;
public class SimbaModule extends AbstractModule {
private List<Class<?>> simbentities;
public SimbaModule(List<Class<?>> simbentities) {
this.simbentities = simbentities;
}
@Override
protected void configure() {
requireBinding(SimbaConfiguration.class);
requireBinding(SimbaManagerRestConfiguration.class);
bind(SimbaServiceFactory.class).in(Singleton.class);
bind(SimbaGateway.class).in(Singleton.class);
bind(SimbaAuthenticator.class).in(Singleton.class);
bind(SimbaManagerDBGateway.class).in(Singleton.class);
bind(SimbaManagerRestGateway.class).in(Singleton.class);
bind(SimbaRoleService.class).in(Singleton.class);
bind(SimbaUserService.class).in(Singleton.class);
bind(SimbaHealthCheck.class).in(Singleton.class);
bind(SimbaManagerRestHealthCheck.class).in(Singleton.class);
bind(SimbaManagerDBHealthCheck.class).in(Singleton.class);
}
@Provides
@Singleton
@Named("simbaWebURL")
public String provideSimbaWebURL(SimbaConfiguration config) {
return config.getSimbaWebURL();
}
@Provides
@Singleton
@Named("simbaManagerAppUser")
public String provideSimbaManagerAppUser(SimbaManagerRestConfiguration config) {
return config.getAppUser();
}
@Provides
@Singleton
@Named("simbaManagerAppPassword")
public String provideSimbaManagerAppPassword(SimbaManagerRestConfiguration config) {
return config.getAppPassword();
}
@Provides
@Singleton
@Named("simbaSessionFactory")
public SessionFactory provideSessionFactory(@Named("simbaDatabaseConfiguration") DatabaseConfiguration configuration, Environment environment)
throws ClassNotFoundException {
return new SessionFactoryFactory().build(environment, configuration, simbentities);
}
@Provides
@Singleton
@Named("simbaManagerWebResource")
public WebResource provideSimbaManagerWebResource(SimbaManagerRestConfiguration config) {
return getClient(config).resource(config.getSimbaManagerURL());
}
private Client getClient(SimbaManagerRestConfiguration config) {
return new JerseyClientBuilder()
.using(getEnv())
.using(config)
.build();
}
private Environment getEnv() {
return new Environment("SimbaRestManager Environment", new Configuration(), new ObjectMapperFactory(), new Validator());
}
}