/*
* eXist Open Source Native XML Database
* Copyright (C) 2001-06 Wolfgang M. Meier
* wolfgang@exist-db.org
* http://exist.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Id$
*/
package org.exist.cocoon;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.security.Principal;
import java.util.Enumeration;
import java.util.Map;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.Session;
import org.apache.cocoon.servlet.multipart.Part;
import org.exist.http.servlets.RequestWrapper;
import org.exist.http.servlets.SessionWrapper;
/** A wrapper for requests processed by Cocoon.
* @author Wolfgang Meier <wolfgang@exist-db.org>
* @author Pierrick Brihaye <pierrick.brihaye@free.fr>
*/
public class CocoonRequestWrapper implements RequestWrapper {
private Request cocoonRequest;
private HttpServletRequest servletRequest = null;
/**
* Constructs a wrapper for the given Cocoon request.
* @param cocoonRequest The request as viewed by Cocoon.
*/
public CocoonRequestWrapper(Request cocoonRequest) {
this.cocoonRequest = cocoonRequest;
}
/** Constructs a wrapper for the given Cocoon request.
* @param cocoonRequest The request as viewed by Cocoon.
* @param servletRequest The request as viewed by Cocoon's servlet
*/
public CocoonRequestWrapper(Request cocoonRequest, HttpServletRequest servletRequest) {
this.cocoonRequest = cocoonRequest;
this.servletRequest = servletRequest;
}
public Object getAttribute(String name) {
return this.cocoonRequest.getAttribute(name);
}
public Enumeration getAttributeNames() {
return this.cocoonRequest.getAttributeNames();
}
public Cookie[] getCookies()
{
return servletRequest.getCookies();
}
/**
* @see javax.servlet.http.HttpServletRequest#getInputStream()
*/
public InputStream getInputStream() throws IOException {
if(servletRequest == null)
throw new IOException("Request input stream is only available " +
"within a servlet environment");
return servletRequest.getInputStream();
}
/**
* @see org.apache.cocoon.environment.Request#get(String)
*/
public Object get(String arg0) {
return cocoonRequest.get(arg0);
}
/**
* @see org.apache.cocoon.environment.Request#getCharacterEncoding()
*/
public String getCharacterEncoding() {
return cocoonRequest.getCharacterEncoding();
}
/**@see org.apache.cocoon.environment.Request#getContentLength()
*/
public int getContentLength() {
return cocoonRequest.getContentLength();
}
/**@see org.apache.cocoon.environment.Request#getContentType()
*/
public String getContentType() {
return cocoonRequest.getContentType();
}
/**@see org.apache.cocoon.environment.Request#getContextPath()
*/
public String getContextPath() {
return cocoonRequest.getContextPath();
}
/**@see org.apache.cocoon.environment.Request#getCookieMap()
*/
public Map getCookieMap() {
return cocoonRequest.getCookieMap();
}
/**@see org.apache.cocoon.environment.Request#getHeader(String)
*/
public String getHeader(String arg0) {
return cocoonRequest.getHeader(arg0);
}
/**@see org.apache.cocoon.environment.Request#getHeaderNames()
*/
public Enumeration getHeaderNames() {
return cocoonRequest.getHeaderNames();
}
/**@see org.apache.cocoon.environment.Request#getHeaders(String)
*/
public Enumeration getHeaders(String arg0) {
return cocoonRequest.getHeaders(arg0);
}
/**@see org.apache.cocoon.environment.Request#getMethod()
*/
public String getMethod() {
return cocoonRequest.getMethod();
}
/**@see org.apache.cocoon.environment.Request#getParameter(String)
*/
public String getParameter(String arg0) {
return cocoonRequest.getParameter(arg0);
}
/**@see org.apache.cocoon.environment.Request#getParameterNames()
*/
public Enumeration getParameterNames() {
return cocoonRequest.getParameterNames();
}
/**@see org.apache.cocoon.environment.Request#getParameterValues(String)
*/
public String[] getParameterValues(String arg0) {
return cocoonRequest.getParameterValues(arg0);
}
/**@see org.apache.cocoon.environment.Request#getPathInfo()
*/
public String getPathInfo() {
return cocoonRequest.getPathInfo();
}
/**@see org.apache.cocoon.environment.Request#getPathTranslated()
*/
public String getPathTranslated() {
return cocoonRequest.getPathTranslated();
}
/**@see org.apache.cocoon.environment.Request#getProtocol()
*/
public String getProtocol() {
return cocoonRequest.getProtocol();
}
/**@see org.apache.cocoon.environment.Request#getQueryString()
*/
public String getQueryString() {
return cocoonRequest.getQueryString();
}
/**@see org.apache.cocoon.environment.Request#getRemoteAddr()
*/
public String getRemoteAddr() {
return cocoonRequest.getRemoteAddr();
}
/**@see org.apache.cocoon.environment.Request#getRemoteHost()
*/
public String getRemoteHost() {
return cocoonRequest.getRemoteHost();
}
/**
As Cocoon does not implement the concept of remote port,
give at least the server port. Beware, it could be wrong!!!!
*/
public int getRemotePort() {
return cocoonRequest.getServerPort();
}
/**@see org.apache.cocoon.environment.Request#getRemoteUser()
*/
public String getRemoteUser() {
return cocoonRequest.getRemoteUser();
}
/**@see org.apache.cocoon.environment.Request#getRequestedSessionId()
*/
public String getRequestedSessionId() {
return cocoonRequest.getRequestedSessionId();
}
/**@see org.apache.cocoon.environment.Request#getRequestURI()
*/
public String getRequestURI() {
return cocoonRequest.getRequestURI();
}
/**@see javax.servlet.http.HttpServletRequest#getRequestURL()
*/
public StringBuffer getRequestURL() {
//TODO : check accuracy
if (this.servletRequest == null)
return null;
return this.servletRequest.getRequestURL();
}
/**@see org.apache.cocoon.environment.Request#getScheme()
*/
public String getScheme() {
return cocoonRequest.getScheme();
}
/**@see org.apache.cocoon.environment.Request#getServerName()
*/
public String getServerName() {
return cocoonRequest.getServerName();
}
/**@see org.apache.cocoon.environment.Request#getServerPort()
*/
public int getServerPort() {
return cocoonRequest.getServerPort();
}
/**@see org.apache.cocoon.environment.Request#getServletPath()()
*/
public String getServletPath() {
return cocoonRequest.getServletPath();
}
/**@see org.apache.cocoon.environment.Request#getSession()
*/
public SessionWrapper getSession() {
Session session = cocoonRequest.getSession();
if(session == null)
return null;
else
return new CocoonSessionWrapper(session);
}
/**@see org.apache.cocoon.environment.Request#getSession(boolean)
*/
public SessionWrapper getSession(boolean arg0) {
Session session = cocoonRequest.getSession(arg0);
if(session == null)
return null;
else
return new CocoonSessionWrapper(session);
}
/**@see org.apache.cocoon.environment.Request#getSitemapURI()
*/
public String getSitemapURI() {
return cocoonRequest.getSitemapURI();
}
/**@see org.apache.cocoon.environment.Request#getUserPrincipal()
*/
public Principal getUserPrincipal() {
return cocoonRequest.getUserPrincipal();
}
/**@see org.apache.cocoon.environment.Request#isRequestedSessionIdFromCookie()
*/
public boolean isRequestedSessionIdFromCookie() {
return cocoonRequest.isRequestedSessionIdFromCookie();
}
/**@see org.apache.cocoon.environment.Request#isRequestedSessionIdFromURL()
*/
public boolean isRequestedSessionIdFromURL() {
return cocoonRequest.isRequestedSessionIdFromURL();
}
/**@see org.apache.cocoon.environment.Request#isRequestedSessionIdValid()
*/
public boolean isRequestedSessionIdValid() {
return cocoonRequest.isRequestedSessionIdValid();
}
/**@see org.apache.cocoon.environment.Request#isSecure()
*/
public boolean isSecure() {
return cocoonRequest.isSecure();
}
/**@see org.apache.cocoon.environment.Request#isUserInRole(String)
*/
public boolean isUserInRole(String arg0) {
return cocoonRequest.isUserInRole(arg0);
}
/**@see org.apache.cocoon.environment.Request#removeAttribute(String)
*/
public void removeAttribute(String arg0) {
cocoonRequest.removeAttribute(arg0);
}
/**@see org.apache.cocoon.environment.Request#setAttribute(String, Object)
*/
public void setAttribute(String arg0, Object arg1) {
cocoonRequest.setAttribute(arg0, arg1);
}
/**@see org.apache.cocoon.environment.Request#setCharacterEncoding(String)
*/
public void setCharacterEncoding(String arg0) throws UnsupportedEncodingException {
cocoonRequest.setCharacterEncoding(arg0);
}
/*
* @see org.apache.cocoon.environment.Request#getFileUploadParam(String)
*/
public File getFileUploadParam(String parameter) {
Object param = cocoonRequest.get(parameter);
if(param == null)
return null;
if(param instanceof Part) {
Part part = (Part) param;
try {
File temp = File.createTempFile("existCRW", ".xml");
temp.deleteOnExit();
OutputStream os = new FileOutputStream(temp);
InputStream is = part.getInputStream();
byte[] data = new byte[1024];
int read = 0;
while((read = is.read(data)) > -1) {
os.write(data, 0, read);
}
is.close();
part.dispose();
return temp;
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
/*
* @see org.apache.cocoon.environment.Request#getUploadedFileName(String)
*/
public String getUploadedFileName(String parameter) {
Object param = cocoonRequest.get(parameter);
if(param == null)
return null;
if(param instanceof Part) {
Part part = (Part) param;
return new File(part.getUploadName()).getName();
}
return null;
}
}