org.atmosphere.cpr.AtmosphereRequest Maven / Gradle / Ivy
/*
* Copyright 2008-2024 Async-IO.org
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.atmosphere.cpr;
import jakarta.servlet.AsyncContext;
import jakarta.servlet.DispatcherType;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import jakarta.servlet.http.Part;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.security.Principal;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
/**
* An Atmosphere request representation. An {@link AtmosphereRequest} is a two-way communication channel between the
* client and the server. If the {@link AtmosphereRequestImpl#isDestroyable()} is set to false, or if its
* associated {@link AtmosphereResource} has been suspended, this object can be re-used at any moment between requests.
* You can use its associated {@link AtmosphereResponse} to write bytes at any moment, making this object bi-directional.
*
*
* @author Jeanfrancois Arcand
*/
public interface AtmosphereRequest extends HttpServletRequest {
boolean destroyed();
AtmosphereRequest destroyable(boolean destroyable);
/**
* {@inheritDoc}
*/
@Override
String getPathInfo();
/**
* {@inheritDoc}
*/
@Override
String getPathTranslated();
/**
* {@inheritDoc}
*/
@Override
String getQueryString();
/**
* {@inheritDoc}
*/
@Override
String getRemoteUser();
/**
* {@inheritDoc}
*/
@Override
String getRequestedSessionId();
/**
* {@inheritDoc}
*/
@Override
String getMethod();
/**
* {@inheritDoc}
*/
@Override
Part getPart(String name) throws IOException, ServletException;
/**
* {@inheritDoc}
*/
@Override
Collection getParts() throws IOException, ServletException;
/**
* {@inheritDoc}
*/
@Override
String getContentType();
/**
* {@inheritDoc}
*/
@Override
DispatcherType getDispatcherType();
/**
* {@inheritDoc}
*/
@Override
String getServletPath();
/**
* {@inheritDoc}
*/
@Override
String getRequestURI();
/**
* {@inheritDoc}
*/
@Override
StringBuffer getRequestURL();
/**
* {@inheritDoc}
*/
@Override
Enumeration getHeaders(String name);
/**
* {@inheritDoc}
*/
@Override
int getIntHeader(String name);
/**
* {@inheritDoc}
*/
@Override
Enumeration getHeaderNames();
/**
* {@inheritDoc}
*/
@Override
boolean authenticate(HttpServletResponse response) throws IOException, ServletException;
/**
* {@inheritDoc}
*/
@Override
String getAuthType();
/**
* {@inheritDoc}
*/
@Override
String getContextPath();
/**
* {@inheritDoc}
*/
@Override
Cookie[] getCookies();
/**
* {@inheritDoc}
*/
@Override
long getDateHeader(String name);
/**
* {@inheritDoc}
*/
@Override
String getHeader(String s);
HttpServletRequest wrappedRequest();
String getHeader(String s, boolean checkCase);
/**
* {@inheritDoc}
*/
@Override
String getParameter(String s);
/**
* {@inheritDoc}
*/
@Override
Map getParameterMap();
/**
* {@inheritDoc}
*/
@Override
Enumeration getParameterNames();
/**
* {@inheritDoc}
*/
@Override
String[] getParameterValues(String s);
/**
* {@inheritDoc}
*/
@Override
String getProtocol();
/**
* {@inheritDoc}
*/
@Override
ServletInputStream getInputStream() throws IOException;
/**
* {@inheritDoc}
*/
@Override
BufferedReader getReader() throws IOException;
/**
* {@inheritDoc}
*/
@Override
String getRealPath(String path);
/**
* Add all headers contained within the Map.
*
* @param headers
* @return this;
*/
AtmosphereRequest headers(Map headers);
/**
* Add a header.
*
* @param name
* @param value
* @return this
*/
AtmosphereRequest header(String name, String value);
/**
* Set the query string.
*
* @param qs
* @return this
*/
AtmosphereRequest queryString(String qs);
Map headersMap();
Map queryStringsMap();
AtmosphereRequest method(String m);
AtmosphereRequest contentType(String m);
AtmosphereRequest body(String body);
AtmosphereRequest body(byte[] bytes);
AtmosphereRequest body(InputStream body);
AtmosphereRequest body(Reader body);
/**
* Return the request's body. This method will return an empty Body if the underlying container or framework is using
* InputStream or Reader.
*
* @return the request body;
*/
AtmosphereRequestImpl.Body body();
AtmosphereRequest servletPath(String servletPath);
AtmosphereRequest contextPath(String contextPath);
AtmosphereRequest requestURI(String requestURI);
/**
* {@inheritDoc}
*/
@Override
void setAttribute(String s, Object o);
/**
* {@inheritDoc}
*/
@Override
void setCharacterEncoding(String env) throws UnsupportedEncodingException;
/**
* {@inheritDoc}
*/
@Override
AsyncContext startAsync();
/**
* {@inheritDoc}
*/
@Override
AsyncContext startAsync(ServletRequest request, ServletResponse response);
/**
* {@inheritDoc}
*/
@Override
AsyncContext getAsyncContext();
/**
* {@inheritDoc}
*/
@Override
Object getAttribute(String s);
/**
* {@inheritDoc}
*/
@Override
void removeAttribute(String name);
/**
* Return the locally added attributes.
*
* @return the locally added attributes
* @deprecated Use {@link #localAttributes()}
*/
LocalAttributes attributes();
/**
* {@inheritDoc}
*/
@Override
HttpSession getSession();
/**
* {@inheritDoc}
*/
@Override
HttpSession getSession(boolean create);
/**
* {@inheritDoc}
*/
@Override
Principal getUserPrincipal();
/**
* {@inheritDoc}
*/
@Override
boolean isRequestedSessionIdFromCookie();
/**
* {@inheritDoc}
*/
@Override
boolean isRequestedSessionIdFromUrl();
/**
* {@inheritDoc}
*/
@Override
boolean isRequestedSessionIdFromURL();
/**
* {@inheritDoc}
*/
@Override
boolean isRequestedSessionIdValid();
/**
* {@inheritDoc}
*/
@Override
boolean isUserInRole(String role);
/**
* {@inheritDoc}
*/
@Override
void login(String username, String password) throws ServletException;
/**
* {@inheritDoc}
*/
@Override
void logout() throws ServletException;
/**
* {@inheritDoc}
*/
@Override
String getRemoteAddr();
/**
* {@inheritDoc}
*/
@Override
String getRemoteHost();
/**
* {@inheritDoc}
*/
@Override
int getRemotePort();
/**
* {@inheritDoc}
*/
@Override
RequestDispatcher getRequestDispatcher(String path);
/**
* {@inheritDoc}
*/
@Override
String getScheme();
/**
* {@inheritDoc}
*/
@Override
String getServerName();
/**
* {@inheritDoc}
*/
@Override
int getServerPort();
/**
* {@inheritDoc}
*/
@Override
ServletContext getServletContext();
/**
* {@inheritDoc}
*/
@Override
boolean isAsyncStarted();
/**
* {@inheritDoc}
*/
@Override
boolean isAsyncSupported();
/**
* {@inheritDoc}
*/
@Override
boolean isSecure();
/**
* {@inheritDoc}
*/
@Override
String getLocalName();
/**
* {@inheritDoc}
*/
@Override
int getLocalPort();
/**
* {@inheritDoc}
*/
@Override
String getLocalAddr();
/**
* {@inheritDoc}
*/
@Override
Locale getLocale();
/**
* The {@link AtmosphereResource} associated with this request.
*
* @return an {@link AtmosphereResource}
*/
AtmosphereResource resource();
/**
* {@inheritDoc}
*/
@Override
Enumeration getLocales();
/**
* Dispatch the request asynchronously to container. The default is false.
*
* @return true to dispatch the request asynchronously to container.
*/
boolean dispatchRequestAsynchronously();
/**
* Cjeck if this object can be destroyed. Default is true.
*/
boolean isDestroyable();
AtmosphereRequest pathInfo(String pathInfo);
/**
* {@inheritDoc}
*/
@Override
Enumeration getAttributeNames();
/**
* Return a subset of the attributes set on this AtmosphereRequest, set locally by the framework or by an application. Attributes added using this method
* won't be propagated to the original, container-only, native request object.
*
* @return a {@linkLocalAttributes>}
*/
LocalAttributes localAttributes();
/**
* {@inheritDoc}
*/
@Override
String getCharacterEncoding();
/**
* {@inheritDoc}
*/
@Override
int getContentLength();
/**
* Return the underlying {@link AtmosphereResource#uuid()}. May return "0" if no {@link AtmosphereResource}
* is associated with this object.
*
* @return the underlying {@link AtmosphereResource#uuid()}
*/
String uuid();
void destroy();
void destroy(boolean force);
/**
* {@inheritDoc}
*/
void setRequest(ServletRequest request);
@Override
String toString();
String requestURL();
final class LocalAttributes {
private final Map localAttributes;
public LocalAttributes(Map attributes) {
this.localAttributes = attributes;
}
public LocalAttributes() {
this.localAttributes = new ConcurrentHashMap<>();
}
public LocalAttributes put(String s, Object o) {
localAttributes.put(s, o);
return this;
}
public Object get(String s) {
return localAttributes.get(s);
}
public Object remove(String name) {
return localAttributes.remove(name);
}
public Map unmodifiableMap() {
return Collections.unmodifiableMap(localAttributes);
}
public void clear() {
synchronized (localAttributes) {
localAttributes.clear();
}
}
public boolean containsKey(String key) {
return localAttributes.containsKey(key);
}
}
interface Builder {
Builder destroyable(boolean destroyable);
Builder headers(Map headers);
Builder cookies(Set cookies);
Builder dispatchRequestAsynchronously(boolean dispatchRequestAsynchronously);
Builder remoteAddr(String remoteAddr);
Builder remoteHost(String remoteHost);
Builder remotePort(int remotePort);
Builder localAddr(String localAddr);
Builder localName(String localName);
Builder localPort(int localPort);
Builder remoteInetSocketAddress(Callable remoteAddr);
Builder localInetSocketAddress(Callable localAddr);
Builder attributes(Map attributes);
Builder request(HttpServletRequest request);
Builder servletPath(String servletPath);
Builder requestURI(String requestURI);
Builder requestURL(String requestURL);
Builder pathInfo(String pathInfo);
Builder queryString(String queryString);
Builder body(byte[] dataBytes);
Builder body(byte[] dataBytes, int offset, int length);
Builder encoding(String encoding);
Builder method(String methodType);
Builder contentType(String contentType);
Builder contentLength(Long contentLength);
Builder body(String data);
Builder inputStream(InputStream inputStream);
Builder reader(Reader reader);
AtmosphereRequest build();
Builder queryStrings(Map queryStrings);
Builder contextPath(String contextPath);
Builder serverName(String serverName);
Builder serverPort(int serverPort);
Builder session(HttpSession session);
Builder principal(Principal principal);
Builder authType(String authType);
Builder isSSecure(boolean isSecure);
Builder locale(Locale locale);
Builder userPrincipal(Principal userPrincipal);
}
}