Package ch.entwine.weblounge.common.impl.request

Source Code of ch.entwine.weblounge.common.impl.request.SiteRequestWrapper

/*
*  Weblounge: Web Content Management System
*  Copyright (c) 2003 - 2011 The Weblounge Team
*  http://entwinemedia.com/weblounge
*
*  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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

package ch.entwine.weblounge.common.impl.request;

import ch.entwine.weblounge.common.impl.url.WebUrlImpl;
import ch.entwine.weblounge.common.language.Language;
import ch.entwine.weblounge.common.request.RequestFlavor;
import ch.entwine.weblounge.common.request.WebloungeRequest;
import ch.entwine.weblounge.common.security.User;
import ch.entwine.weblounge.common.site.Environment;
import ch.entwine.weblounge.common.site.Site;
import ch.entwine.weblounge.common.url.WebUrl;

import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

/**
* DispatcherRequest
*/
public class SiteRequestWrapper extends HttpServletRequestWrapper implements WebloungeRequest {

  /** the name of the request uri include attribute */
  public static final String REQUEST_URI = "javax.servlet.include.request_uri";

  /** the name of the context path include attribute */
  public static final String CONTEXT_PATH = "javax.servlet.include.context_path";

  /** the name of the servlet path include attribute */
  public static final String SERVLET_PATH = "javax.servlet.include.servlet_path";

  /** the name of the path info include attribute */
  public static final String PATH_INFO = "javax.servlet.include.path_info";

  /** the name of the query string include attribute */
  public static final String QUERY_STRING = "javax.servlet.include.query_string";

  /** the attributes used for including requests */
  private static Set<String> includeAttrs = new HashSet<String>();

  /** initialize the set of include attributes */
  static {
    includeAttrs.add(REQUEST_URI);
    includeAttrs.add(CONTEXT_PATH);
    includeAttrs.add(SERVLET_PATH);
    includeAttrs.add(PATH_INFO);
    includeAttrs.add(QUERY_STRING);
  }

  /** the attributes of this request */
  private Map<String, Object> attrs;

  /** indicates an include request */
  private boolean include = false;

  /** the request uri */
  private String requestURI = null;

  /** the context path */
  private String contextPath = null;

  /** the servlet path */
  private String servletPath = null;

  /** the path info */
  private String pathInfo = null;

  /** the query string */
  private String queryString = null;

  /** The site */
  private final Site site;

  /** The url */
  private final WebUrl url;

  /** The request environment */
  private final Environment environment;

  /**
   * Creates a new <code>DispatcherRequest</code>.
   *
   * @param request
   *          the original request
   * @param url
   *          the new target url
   * @param include
   *          whether to include the path elements of the original request in
   *          the attributes of the new request
   */
  public SiteRequestWrapper(WebloungeRequest request, String url,
      boolean include) {
    super(request);

    this.site = request.getSite();
    this.include = include;
    this.environment = request.getEnvironment();

    int index = url.indexOf('?');
    if (index > -1) {
      url = url.substring(0, index);
    }

    // Set the context path, servlet path and request uri
    String contextPath = request.getContextPath();
    String servletPath = "";
    String pathInfo = url.substring(contextPath.length() + servletPath.length());
    String requestURI = pathInfo;

    // Adjust the url
    this.url = new WebUrlImpl((WebUrlImpl) request.getUrl(), url);

    if (include) {
      attrs = new HashMap<String, Object>(5);
      attrs.put(REQUEST_URI, requestURI);
      attrs.put(CONTEXT_PATH, contextPath);
      attrs.put(SERVLET_PATH, servletPath);
      attrs.put(QUERY_STRING, request.getQueryString());
    } else {
      this.contextPath = contextPath;
      this.servletPath = servletPath;
      this.pathInfo = pathInfo;
      this.requestURI = requestURI;
      this.queryString = request.getQueryString();
      this.attrs = new HashMap<String, Object>(0);
    }
  }

  /**
   * @see javax.servlet.ServletRequest#getAttribute(java.lang.String)
   */
  public Object getAttribute(String name) {
    if (includeAttrs.contains(name))
      return attrs.get(name);
    return ((WebloungeRequest) getRequest()).getAttribute(name);
  }

  /**
   * @see javax.servlet.ServletRequest#getAttributeNames()
   */
  @SuppressWarnings({ "unchecked", "rawtypes" })
  public Enumeration getAttributeNames() {
    final Set s = new HashSet();
    for (Enumeration e = getRequest().getAttributeNames(); e.hasMoreElements();)
      s.add(e.nextElement());
    s.addAll(attrs.keySet());
    return Collections.enumeration(s);
  }

  /**
   * @see javax.servlet.ServletRequest#setAttribute(java.lang.String,
   *      java.lang.Object)
   */
  public void setAttribute(String name, Object o) {
    if (includeAttrs.contains(name))
      attrs.put(name, o);
    else
      ((WebloungeRequest) getRequest()).setAttribute(name, o);
  }

  /**
   * @see javax.servlet.ServletRequest#removeAttribute(java.lang.String)
   */
  public void removeAttribute(String name) {
    if (includeAttrs.contains(name))
      attrs.remove(name);
    else
      ((WebloungeRequest) getRequest()).removeAttribute(name);
  }

  /**
   * @see javax.servlet.http.HttpServletRequest#getContextPath()
   */
  public String getContextPath() {
    if (include)
      return ((WebloungeRequest) getRequest()).getContextPath();
    return contextPath;
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.request.WebloungeRequest#getEnvironment()
   */
  public Environment getEnvironment() {
    return environment;
  }

  /**
   * @see javax.servlet.http.HttpServletRequest#getPathInfo()
   */
  public String getPathInfo() {
    if (include)
      return ((WebloungeRequest) getRequest()).getPathInfo();
    return pathInfo;
  }

  /**
   * @see javax.servlet.http.HttpServletRequest#getQueryString()
   */
  public String getQueryString() {
    if (include)
      return ((WebloungeRequest) getRequest()).getQueryString();
    return queryString;
  }

  /**
   * @see javax.servlet.http.HttpServletRequest#getRequestURI()
   */
  public String getRequestURI() {
    if (include)
      return ((WebloungeRequest) getRequest()).getRequestURI();
    return requestURI;
  }

  /**
   * @see javax.servlet.http.HttpServletRequest#getServletPath()
   */
  public String getServletPath() {
    if (include)
      return ((WebloungeRequest) getRequest()).getServletPath();
    return servletPath;
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.request.WebloungeRequest#getFlavor()
   */
  public RequestFlavor getFlavor() {
    return ((WebloungeRequest) getRequest()).getFlavor();
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.request.WebloungeRequest#getLanguage()
   */
  public Language getLanguage() {
    return ((WebloungeRequest) getRequest()).getLanguage();
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.request.WebloungeRequest#getSessionLanguage()
   */
  public Language getSessionLanguage() {
    return ((WebloungeRequest) getRequest()).getSessionLanguage();
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.request.WebloungeRequest#getRequestedUrl()
   */
  public WebUrl getRequestedUrl() {
    ServletRequest request = getRequest();
    while (request instanceof HttpServletRequestWrapper && !(request instanceof WebloungeRequestImpl)) {
      request = ((HttpServletRequestWrapper) request).getRequest();
    }
    return ((WebloungeRequest) request).getUrl();
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.request.WebloungeRequest#getSite()
   */
  public Site getSite() {
    return site;
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.request.WebloungeRequest#getUrl()
   */
  public WebUrl getUrl() {
    return url;
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.request.WebloungeRequest#getUser()
   */
  public User getUser() {
    return ((WebloungeRequest) getRequest()).getUser();
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.request.WebloungeRequest#getVersion()
   */
  public long getVersion() {
    return ((WebloungeRequest) getRequest()).getVersion();
  }

  /**
   * {@inheritDoc}
   *
   * @see java.lang.Object#toString()
   */
  @Override
  public String toString() {
    return getRequestURI();
  }

}
TOP

Related Classes of ch.entwine.weblounge.common.impl.request.SiteRequestWrapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.