package com.github.hburgmeier.jerseyoauth2.testsuite.rs2;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Inject;
import javax.persistence.EntityManagerFactory;
import javax.ws.rs.core.Application;
import net.sf.ehcache.CacheManager;
import org.glassfish.hk2.api.DynamicConfiguration;
import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.jersey.internal.inject.Injections;
import org.glassfish.jersey.jackson.JacksonFeature;
import com.github.hburgmeier.jerseyoauth2.api.protocol.IRequestFactory;
import com.github.hburgmeier.jerseyoauth2.authsrv.api.IConfiguration;
import com.github.hburgmeier.jerseyoauth2.authsrv.api.client.IClientIdGenerator;
import com.github.hburgmeier.jerseyoauth2.authsrv.api.client.IClientService;
import com.github.hburgmeier.jerseyoauth2.authsrv.api.token.IAccessTokenStorageService;
import com.github.hburgmeier.jerseyoauth2.authsrv.api.token.ITokenGenerator;
import com.github.hburgmeier.jerseyoauth2.authsrv.api.user.IUserService;
import com.github.hburgmeier.jerseyoauth2.authsrv.impl.services.DefaultPrincipalUserService;
import com.github.hburgmeier.jerseyoauth2.authsrv.impl.services.IntegratedAccessTokenVerifier;
import com.github.hburgmeier.jerseyoauth2.authsrv.impl.services.MD5TokenGenerator;
import com.github.hburgmeier.jerseyoauth2.authsrv.impl.services.UUIDClientIdGenerator;
import com.github.hburgmeier.jerseyoauth2.authsrv.jpa.CachingAccessTokenStorage;
import com.github.hburgmeier.jerseyoauth2.authsrv.jpa.DatabaseClientService;
import com.github.hburgmeier.jerseyoauth2.authsrv.jpa.guice.DefaultCacheManagerProvider;
import com.github.hburgmeier.jerseyoauth2.protocol.impl.RequestFactory;
import com.github.hburgmeier.jerseyoauth2.rs.api.IRSConfiguration;
import com.github.hburgmeier.jerseyoauth2.rs.api.token.IAccessTokenVerifier;
import com.github.hburgmeier.jerseyoauth2.rs.impl.rs2.filter.OAuth2FilterFeature;
import com.github.hburgmeier.jerseyoauth2.testsuite.base.resource.ClientAuthResource;
import com.github.hburgmeier.jerseyoauth2.testsuite.base.resource.ClientsResource;
import com.github.hburgmeier.jerseyoauth2.testsuite.base.resource.TokenInvalidateResource;
import com.github.hburgmeier.jerseyoauth2.testsuite.base.services.Configuration;
import com.github.hburgmeier.jerseyoauth2.testsuite.rs2.resource.Sample2Resource;
import com.github.hburgmeier.jerseyoauth2.testsuite.rs2.resource.SampleResource;
import com.github.hburgmeier.jerseyoauth2.testsuite.rs2.services.PersistenceProvider;
public class RestApplication extends Application {
@Inject
public RestApplication(ServiceLocator serviceLocator) {
DynamicConfiguration dc = Injections.getConfiguration(serviceLocator);
Injections.addBinding(Injections.newBinder(DatabaseClientService.class).to(IClientService.class),dc);
Injections.addBinding(Injections.newBinder(Configuration.class).to(IConfiguration.class),dc);
Injections.addBinding(Injections.newBinder(Configuration.class).to(IRSConfiguration.class),dc);
Injections.addBinding(Injections.newBinder(DefaultPrincipalUserService.class).to(IUserService.class),dc);
Injections.addBinding(Injections.newBinder(CachingAccessTokenStorage.class).to(IAccessTokenStorageService.class),dc);
Injections.addBinding(Injections.newBinder(IntegratedAccessTokenVerifier.class).to(IAccessTokenVerifier.class),dc);
Injections.addBinding(Injections.newBinder(RequestFactory.class).to(IRequestFactory.class),dc);
Injections.addBinding(Injections.newBinder(MD5TokenGenerator.class).to(ITokenGenerator.class),dc);
Injections.addBinding(Injections.newBinder(UUIDClientIdGenerator.class).to(IClientIdGenerator.class),dc);
EntityManagerFactory emf = new PersistenceProvider().get();
Injections.addBinding(Injections.newBinder(emf).to(EntityManagerFactory.class),dc);
CacheManager cacheManager = new DefaultCacheManagerProvider().get();
Injections.addBinding(Injections.newBinder(cacheManager).to(CacheManager.class),dc);
dc.commit();
}
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> clazzes = new HashSet<Class<?>>();
clazzes.add(ClientsResource.class);
clazzes.add(ClientAuthResource.class);
clazzes.add(SampleResource.class);
clazzes.add(Sample2Resource.class);
clazzes.add(TokenInvalidateResource.class);
clazzes.add(JacksonFeature.class);
clazzes.add(OAuth2FilterFeature.class);
return clazzes;
}
}