001// Generated by delombok at Sun Jul 30 17:21:56 UTC 2023
002package de.cuioss.test.jsf.mocks;
003
004import static de.cuioss.tools.collect.CollectionLiterals.mutableList;
005import java.util.Collection;
006import java.util.Collections;
007import java.util.Enumeration;
008import java.util.List;
009import java.util.Locale;
010import java.util.Vector;
011import javax.servlet.AsyncContext;
012import javax.servlet.DispatcherType;
013import javax.servlet.ServletRequest;
014import javax.servlet.ServletResponse;
015import javax.servlet.http.HttpServletResponse;
016import javax.servlet.http.HttpSession;
017import javax.servlet.http.HttpSessionEvent;
018import javax.servlet.http.Part;
019import org.apache.myfaces.test.mock.MockHttpServletRequest;
020
021/**
022 * Extends {@link MockHttpServletRequest} and provides some additional
023 * convenience methods
024 *
025 * @author Oliver Wolff
026 */
027public class CuiMockHttpServletRequest extends MockHttpServletRequest {
028    /**
029     * "http://localhost:8080/servletRequestUrl/"
030     */
031    public static final String SERVLET_REQUEST_URL = "http://localhost:8080/servletRequestUrl/";
032    private List<Locale> requestLocales = mutableList(Locale.getDefault());
033    private String requestUrl = SERVLET_REQUEST_URL;
034
035    // API defined
036    @SuppressWarnings("rawtypes")
037    @Override
038    public Enumeration getLocales() {
039        return new Vector<>(requestLocales).elements();
040    }
041
042    @Override
043    public StringBuffer getRequestURL() {
044        return new StringBuffer(requestUrl);
045    }
046
047    /* Servlet 3+ api */
048    @Override
049    public boolean authenticate(final HttpServletResponse response) {
050        return false;
051    }
052
053    @Override
054    public Part getPart(final String name) {
055        return null;
056    }
057
058    @Override
059    public Collection<Part> getParts() {
060        return Collections.emptyList();
061    }
062
063    @Override
064    public void login(final String username, final String password) {
065        // No login for mock
066    }
067
068    @Override
069    public void logout() {
070        // No logout for mock
071    }
072
073    @Override
074    public AsyncContext getAsyncContext() {
075        return null;
076    }
077
078    @Override
079    public DispatcherType getDispatcherType() {
080        return null;
081    }
082
083    @Override
084    public boolean isAsyncStarted() {
085        return false;
086    }
087
088    @Override
089    public boolean isAsyncSupported() {
090        return false;
091    }
092
093    @Override
094    public AsyncContext startAsync() {
095        return null;
096    }
097
098    @Override
099    public AsyncContext startAsync(final ServletRequest request, final ServletResponse response) {
100        return null;
101    }
102
103    /**
104     * getSession should never return an invalidated session.
105     */
106    @Override
107    public HttpSession getSession(final boolean create) {
108        HttpSession session = null;
109        if (!create) {
110            session = super.getSession(false);
111            if (null == session) {
112                return null;
113            }
114        } else {
115            session = super.getSession(true);
116        }
117        try {
118            session.getAttribute("test"); // test if the session was invalidated
119        } catch (IllegalStateException e) {
120            super.setHttpSession(null);
121            session = super.getSession(true);
122        }
123        if (!(session instanceof CuiMockHttpSession)) {
124            session = new CuiMockHttpSession(getServletContext());
125            super.setHttpSession(session);
126            var container = getWebContainer();
127            if (container != null) {
128                var se = new HttpSessionEvent(session);
129                container.sessionCreated(se);
130            }
131        }
132        return session;
133    }
134
135    @java.lang.SuppressWarnings("all")
136    @lombok.Generated
137    public void setRequestLocales(final List<Locale> requestLocales) {
138        this.requestLocales = requestLocales;
139    }
140
141    @java.lang.SuppressWarnings("all")
142    @lombok.Generated
143    public void setRequestUrl(final String requestUrl) {
144        this.requestUrl = requestUrl;
145    }
146}