/******************************************************************************* * Copyright (c) 2012-2016 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.everrest.guice; import com.google.inject.AbstractModule; import com.google.inject.Provider; import com.google.inject.ProvisionException; import org.everrest.core.ApplicationContext; import org.everrest.core.InitialProperties; import org.everrest.core.impl.EnvironmentContext; import javax.servlet.ServletConfig; import javax.ws.rs.core.Application; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Request; import javax.ws.rs.core.SecurityContext; import javax.ws.rs.core.UriInfo; import javax.ws.rs.ext.Providers; /** * @author andrew00x */ public class EverrestModule extends AbstractModule { public static class HttpHeadersProvider implements Provider<HttpHeaders> { @Override public HttpHeaders get() { ApplicationContext context = ApplicationContext.getCurrent(); if (context == null) { throw new ProvisionException("EverRest ApplicationContext is not initialized."); } return context.getHttpHeaders(); } } public static class InitialPropertiesProvider implements Provider<InitialProperties> { @Override public InitialProperties get() { ApplicationContext context = ApplicationContext.getCurrent(); if (context == null) { throw new ProvisionException("EverRest ApplicationContext is not initialized."); } return context.getInitialProperties(); } } public static class ProvidersProvider implements Provider<Providers> { @Override public Providers get() { ApplicationContext context = ApplicationContext.getCurrent(); if (context == null) { throw new ProvisionException("EverRest ApplicationContext is not initialized."); } return context.getProviders(); } } public static class RequestProvider implements Provider<Request> { @Override public Request get() { ApplicationContext context = ApplicationContext.getCurrent(); if (context == null) { throw new ProvisionException("EverRest ApplicationContext is not initialized."); } return context.getRequest(); } } public static class SecurityContextProvider implements Provider<SecurityContext> { @Override public SecurityContext get() { ApplicationContext context = ApplicationContext.getCurrent(); if (context == null) { throw new ProvisionException("EverRest ApplicationContext is not initialized."); } return context.getSecurityContext(); } } public static class ServletConfigProvider implements Provider<ServletConfig> { @Override public ServletConfig get() { EnvironmentContext context = EnvironmentContext.getCurrent(); if (context == null) { throw new ProvisionException("EverRest EnvironmentContext is not initialized."); } return (ServletConfig)EnvironmentContext.getCurrent().get(ServletConfig.class); } } public static class UriInfoProvider implements Provider<UriInfo> { @Override public UriInfo get() { ApplicationContext context = ApplicationContext.getCurrent(); if (context == null) { throw new ProvisionException("EverRest ApplicationContext is not initialized."); } return context.getUriInfo(); } } public static class ApplicationProvider implements Provider<Application> { @Override public Application get() { ApplicationContext context = ApplicationContext.getCurrent(); if (context == null) { throw new ProvisionException("EverRest ApplicationContext is not initialized."); } return context.getApplication(); } } /** * Add binding for HttpHeaders, InitialProperties, Providers, Request, SecurityContext, ServletConfig, UriInfo. All this types will be * supported for injection in constructor or fields of component of Guice container. * * @see javax.inject.Inject * @see com.google.inject.Inject */ @Override protected void configure() { bind(HttpHeaders.class).toProvider(new HttpHeadersProvider()); bind(InitialProperties.class).toProvider(new InitialPropertiesProvider()); bind(Providers.class).toProvider(new ProvidersProvider()); bind(Request.class).toProvider(new RequestProvider()); bind(SecurityContext.class).toProvider(new SecurityContextProvider()); bind(ServletConfig.class).toProvider(new ServletConfigProvider()); bind(UriInfo.class).toProvider(new UriInfoProvider()); bind(Application.class).toProvider(new ApplicationProvider()); } }