/* * 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.esigate.http; import java.security.Principal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.HttpVersion; import org.apache.http.RequestLine; import org.apache.http.cookie.Cookie; import org.apache.http.message.BasicHttpEntityEnclosingRequest; import org.apache.http.message.BasicRequestLine; import org.esigate.api.ContainerRequestContext; import org.esigate.api.Session; /** * Represents an incoming http request. * * @author fxbonnet * */ public final class IncomingRequest extends BasicHttpEntityEnclosingRequest { private final Map<String, Object> attributes = new HashMap<>(); private ContainerRequestContext context; private String remoteUser; private String remoteAddr; private String sessionId; private Principal userPrincipal; private List<Cookie> cookies = new ArrayList<>(); private List<Cookie> newCookies = new ArrayList<>(); private Session session; private String contextPath; public static final class Builder { private final IncomingRequest result; private Builder(RequestLine requestline) { result = new IncomingRequest(requestline); } public IncomingRequest build() { return result; } public Builder setContext(ContainerRequestContext context) { result.context = context; return this; } public Builder setRemoteAddr(String remoteAddr) { result.remoteAddr = remoteAddr; return this; } public Builder setRemoteUser(String remoteUser) { result.remoteUser = remoteUser; return this; } public Builder setSessionId(String sessionId) { result.sessionId = sessionId; return this; } public Builder setUserPrincipal(Principal userPrincipal) { result.userPrincipal = userPrincipal; return this; } public Builder addCookie(Cookie cookie) { result.cookies.add(cookie); return this; } public Builder setSession(Session session) { result.session = session; return this; } public Builder addHeader(String name, String value) { result.addHeader(name, value); return this; } public Builder setEntity(HttpEntity entity) { result.setEntity(entity); return this; } /** * A String to remove before mapping at the begining of the path, typically used for the context path in a * servlet engine. * * @param contextPath * the context path * @return the {@link Builder} */ public Builder setContextPath(String contextPath) { result.contextPath = contextPath; return this; } } public static Builder builder(RequestLine requestline) { return new Builder(requestline); } public static Builder builder(String uri) { return new Builder(new BasicRequestLine("GET", uri, HttpVersion.HTTP_1_1)); } private IncomingRequest(RequestLine requestline) { super(requestline); } public <T> T getAttribute(String name) { return (T) attributes.get(name); } public void setAttribute(String name, Object value) { attributes.put(name, value); } public ContainerRequestContext getContext() { return context; } public String getRemoteUser() { return remoteUser; } public String getRemoteAddr() { return remoteAddr; } public String getSessionId() { return sessionId; } public Principal getUserPrincipal() { return userPrincipal; } public Cookie[] getCookies() { return cookies.toArray(new Cookie[cookies.size()]); } public Cookie[] getNewCookies() { return newCookies.toArray(new Cookie[newCookies.size()]); } public void addNewCookie(Cookie cookie) { newCookies.add(cookie); } public Session getSession() { return session; } public String getContextPath() { return contextPath; } }