001package de.cuioss.test.jsf.producer;
002
003import javax.enterprise.context.ApplicationScoped;
004import javax.enterprise.context.Dependent;
005import javax.enterprise.context.RequestScoped;
006import javax.enterprise.inject.Produces;
007import javax.enterprise.inject.Typed;
008import javax.faces.context.FacesContext;
009import javax.servlet.ServletContext;
010import javax.servlet.http.HttpServletRequest;
011import javax.servlet.http.HttpServletResponse;
012
013import org.apache.myfaces.test.mock.MockExternalContext22;
014
015/**
016 * Produces a
017 * <ul>
018 * <li>{@link RequestScoped} {@link HttpServletResponse}</li>
019 * <li>{@link RequestScoped} {@link HttpServletRequest}.</li>
020 * <li>{@link Dependent} {@link ServletContext}</li>
021 * </ul>
022 * The objects are derived from the {@link FacesContext}
023 *
024 * It is designed as 'opt-in'. Use with {@code @AddBeanClasses}.
025 *
026 */
027@ApplicationScoped
028public class ServletObjectsFromJSFContextProducers {
029
030    @Produces
031    @Typed({ HttpServletRequest.class })
032    @RequestScoped
033    HttpServletRequest produceServletRequest() {
034        return (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
035    }
036
037    @Produces
038    @Typed({ HttpServletResponse.class })
039    @RequestScoped
040    HttpServletResponse produceServletResponse() {
041        return (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
042    }
043
044    @Produces
045//    @Typed({ ServletContext.class })
046    @Dependent
047    ServletContext produceServletContext() {
048        return (ServletContext) ((MockExternalContext22) FacesContext.getCurrentInstance().getExternalContext())
049                .getContext();
050    }
051}