001package de.cuioss.test.jsf.producer;
002
003import java.util.Map;
004
005import javax.enterprise.context.ApplicationScoped;
006import javax.enterprise.context.RequestScoped;
007import javax.enterprise.inject.Produces;
008import javax.faces.annotation.ApplicationMap;
009import javax.faces.annotation.HeaderMap;
010import javax.faces.annotation.HeaderValuesMap;
011import javax.faces.annotation.InitParameterMap;
012import javax.faces.annotation.RequestCookieMap;
013import javax.faces.annotation.RequestParameterMap;
014import javax.faces.annotation.SessionMap;
015import javax.faces.annotation.ViewMap;
016import javax.faces.application.Application;
017import javax.faces.component.UIViewRoot;
018import javax.faces.context.ExternalContext;
019import javax.faces.context.FacesContext;
020import javax.inject.Named;
021
022/**
023 * Various JSF Producers for junit tests.
024 *
025 * Reason: In the test context we don't have a JSF implementation, which would
026 * provide equivalent producers.
027 *
028 * It is designed as 'opt-in'. Use with {@code @AddBeanClasses}.
029 *
030 * @author Oliver Wolff
031 */
032@ApplicationScoped
033public class JsfObjectsProducers {
034
035    @Produces
036    @RequestScoped
037    @Named
038    FacesContext getFacesContext() {
039        return FacesContext.getCurrentInstance();
040    }
041
042    @Produces
043    @RequestScoped
044    @Named
045    ExternalContext getExternalContext() {
046        return getFacesContext().getExternalContext();
047    }
048
049    @Produces
050    @ApplicationScoped
051    Application produceApplication() {
052        return FacesContext.getCurrentInstance().getApplication();
053    }
054
055    @Produces
056    @RequestScoped
057    @Named
058    Object getRequest() {
059        return getExternalContext().getRequest();
060    }
061
062    @Produces
063    @RequestScoped
064    @SessionMap
065    @Named("sessionScope")
066    Map<String, Object> getSessionMap() {
067        return getExternalContext().getSessionMap();
068    }
069
070    @Produces
071    @RequestScoped
072    @RequestParameterMap
073    @Named("param")
074    Map<String, String> getRequestParameterMap() {
075        return getExternalContext().getRequestParameterMap();
076    }
077
078    @Produces
079    @RequestScoped
080    @Named("view")
081    UIViewRoot getViewRoot() {
082        return getFacesContext().getViewRoot();
083    }
084
085    @Produces
086    @RequestScoped
087    @ViewMap
088    @Named("viewScope")
089    Map<String, Object> getViewMap() {
090        return getFacesContext().getViewRoot().getViewMap();
091    }
092
093    @Produces
094    @RequestScoped
095    @HeaderMap
096    @Named("header")
097    Map<String, String> getHeaderMap() {
098        return getExternalContext().getRequestHeaderMap();
099    }
100
101    @Produces
102    @RequestScoped
103    @HeaderValuesMap
104    @Named("headerValues")
105    Map<String, String[]> getHeaderValuesMap() {
106        return getExternalContext().getRequestHeaderValuesMap();
107    }
108
109    @Produces
110    @RequestScoped
111    @InitParameterMap
112    @Named("initParam")
113    Map<String, String> getInitParameter() {
114        return getExternalContext().getInitParameterMap();
115    }
116
117    @Produces
118    @ApplicationScoped
119    @ApplicationMap
120    @Named("applicationScope")
121    Map<String, Object> getApplicationMap() {
122        return getExternalContext().getApplicationMap();
123    }
124
125    @Produces
126    @RequestScoped
127    @RequestCookieMap
128    @Named("cookie")
129    Map<String, Object> getRequestCookieMap() {
130        return FacesContext.getCurrentInstance().getExternalContext().getRequestCookieMap();
131    }
132}