Coverage Report - org.apache.myfaces.context.servlet.ServletExternalContextImpl
 
Classes in this File Line Coverage Branch Coverage Complexity
ServletExternalContextImpl
0%
0/148
0%
0/38
0
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements.  See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership.  The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License.  You may obtain a copy of the License at
 9  
  *
 10  
  *   http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing,
 13  
  * software distributed under the License is distributed on an
 14  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15  
  * KIND, either express or implied.  See the License for the
 16  
  * specific language governing permissions and limitations
 17  
  * under the License.
 18  
  */
 19  
 package org.apache.myfaces.context.servlet;
 20  
 
 21  
 import java.io.IOException;
 22  
 import java.io.InputStream;
 23  
 import java.net.MalformedURLException;
 24  
 import java.net.URL;
 25  
 import java.security.Principal;
 26  
 import java.util.Iterator;
 27  
 import java.util.Locale;
 28  
 import java.util.Map;
 29  
 import java.util.Set;
 30  
 
 31  
 import javax.faces.FacesException;
 32  
 import javax.faces.context.ExternalContext;
 33  
 import javax.faces.context.FacesContext;
 34  
 import javax.servlet.RequestDispatcher;
 35  
 import javax.servlet.ServletContext;
 36  
 import javax.servlet.ServletException;
 37  
 import javax.servlet.ServletRequest;
 38  
 import javax.servlet.ServletResponse;
 39  
 import javax.servlet.http.HttpServletRequest;
 40  
 import javax.servlet.http.HttpServletResponse;
 41  
 
 42  
 import org.apache.myfaces.context.ReleaseableExternalContext;
 43  
 import org.apache.myfaces.util.EnumerationIterator;
 44  
 
 45  
 /**
 46  
  * Implements the external context for servlet request. JSF 1.2, 6.1.3
 47  
  * 
 48  
  * @author Manfred Geiler (latest modification by $Author: bommel $)
 49  
  * @author Anton Koinov
 50  
  * @version $Revision: 693059 $ $Date: 2008-09-08 06:42:28 -0500 (Mon, 08 Sep 2008) $
 51  
  */
 52  
 public final class ServletExternalContextImpl extends ExternalContext implements ReleaseableExternalContext
 53  
 {
 54  0
     private static final String INIT_PARAMETER_MAP_ATTRIBUTE = InitParameterMap.class.getName();
 55  
 
 56  
     private ServletContext _servletContext;
 57  
     private ServletRequest _servletRequest;
 58  
     private ServletResponse _servletResponse;
 59  
     private Map<String, Object> _applicationMap;
 60  
     private Map<String, Object> _sessionMap;
 61  
     private Map<String, Object> _requestMap;
 62  
     private Map<String, String> _requestParameterMap;
 63  
     private Map<String, String[]> _requestParameterValuesMap;
 64  
     private Map<String, String> _requestHeaderMap;
 65  
     private Map<String, String[]> _requestHeaderValuesMap;
 66  
     private Map _requestCookieMap;
 67  
     private Map<String, String> _initParameterMap;
 68  
     private HttpServletRequest _httpServletRequest;
 69  
     private String _requestServletPath;
 70  
     private String _requestPathInfo;
 71  
 
 72  
     public ServletExternalContextImpl(final ServletContext servletContext, final ServletRequest servletRequest,
 73  
             final ServletResponse servletResponse)
 74  0
     {
 75  0
         _servletContext = servletContext;
 76  0
         _servletRequest = servletRequest;
 77  0
         _servletResponse = servletResponse;
 78  0
         _applicationMap = null;
 79  0
         _sessionMap = null;
 80  0
         _requestMap = null;
 81  0
         _requestParameterMap = null;
 82  0
         _requestParameterValuesMap = null;
 83  0
         _requestHeaderMap = null;
 84  0
         _requestHeaderValuesMap = null;
 85  0
         _requestCookieMap = null;
 86  0
         _initParameterMap = null;
 87  0
         _httpServletRequest = isHttpServletRequest(servletRequest) ? (HttpServletRequest) servletRequest : null;
 88  
 
 89  0
         if (_httpServletRequest != null)
 90  
         {
 91  
             // HACK: MultipartWrapper scrambles the servletPath for some reason in Tomcat 4.1.29 embedded in JBoss
 92  
             // 3.2.3!?
 93  
             // (this was reported by frederic.auge [frederic.auge@laposte.net])
 94  0
             _requestServletPath = _httpServletRequest.getServletPath();
 95  0
             _requestPathInfo = _httpServletRequest.getPathInfo();
 96  
         }
 97  0
     }
 98  
 
 99  
     public void release()
 100  
     {
 101  0
         _servletContext = null;
 102  0
         _servletRequest = null;
 103  0
         _servletResponse = null;
 104  0
         _applicationMap = null;
 105  0
         _sessionMap = null;
 106  0
         _requestMap = null;
 107  0
         _requestParameterMap = null;
 108  0
         _requestParameterValuesMap = null;
 109  0
         _requestHeaderMap = null;
 110  0
         _requestHeaderValuesMap = null;
 111  0
         _requestCookieMap = null;
 112  0
         _initParameterMap = null;
 113  0
         _httpServletRequest = null;
 114  0
     }
 115  
 
 116  
     @Override
 117  
     public Object getSession(boolean create)
 118  
     {
 119  0
         checkHttpServletRequest();
 120  0
         return ((HttpServletRequest) _servletRequest).getSession(create);
 121  
     }
 122  
 
 123  
     @Override
 124  
     public Object getContext()
 125  
     {
 126  0
         return _servletContext;
 127  
     }
 128  
 
 129  
     @Override
 130  
     public Object getRequest()
 131  
     {
 132  0
         return _servletRequest;
 133  
     }
 134  
 
 135  
     @Override
 136  
     public Object getResponse()
 137  
     {
 138  0
         return _servletResponse;
 139  
     }
 140  
 
 141  
     @Override
 142  
     public String getResponseContentType()
 143  
     {
 144  0
         return _servletResponse.getContentType();
 145  
     }
 146  
 
 147  
     @Override
 148  
     public Map<String, Object> getApplicationMap()
 149  
     {
 150  0
         if (_applicationMap == null)
 151  
         {
 152  0
             _applicationMap = new ApplicationMap(_servletContext);
 153  
         }
 154  0
         return _applicationMap;
 155  
     }
 156  
 
 157  
     @Override
 158  
     public Map<String, Object> getSessionMap()
 159  
     {
 160  0
         if (_sessionMap == null)
 161  
         {
 162  0
             checkHttpServletRequest();
 163  0
             _sessionMap = new SessionMap(_httpServletRequest);
 164  
         }
 165  0
         return _sessionMap;
 166  
     }
 167  
 
 168  
     @Override
 169  
     public Map<String, Object> getRequestMap()
 170  
     {
 171  0
         if (_requestMap == null)
 172  
         {
 173  0
             _requestMap = new RequestMap(_servletRequest);
 174  
         }
 175  0
         return _requestMap;
 176  
     }
 177  
 
 178  
     @Override
 179  
     public Map<String, String> getRequestParameterMap()
 180  
     {
 181  0
         if (_requestParameterMap == null)
 182  
         {
 183  0
             _requestParameterMap = new RequestParameterMap(_servletRequest);
 184  
         }
 185  0
         return _requestParameterMap;
 186  
     }
 187  
 
 188  
     @Override
 189  
     public Map<String, String[]> getRequestParameterValuesMap()
 190  
     {
 191  0
         if (_requestParameterValuesMap == null)
 192  
         {
 193  0
             _requestParameterValuesMap = new RequestParameterValuesMap(_servletRequest);
 194  
         }
 195  0
         return _requestParameterValuesMap;
 196  
     }
 197  
 
 198  
     @Override
 199  
     @SuppressWarnings("unchecked")
 200  
     public Iterator<String> getRequestParameterNames()
 201  
     {
 202  0
         return new EnumerationIterator(_servletRequest.getParameterNames());
 203  
     }
 204  
 
 205  
     @Override
 206  
     public Map<String, String> getRequestHeaderMap()
 207  
     {
 208  0
         if (_requestHeaderMap == null)
 209  
         {
 210  0
             checkHttpServletRequest();
 211  0
             _requestHeaderMap = new RequestHeaderMap(_httpServletRequest);
 212  
         }
 213  0
         return _requestHeaderMap;
 214  
     }
 215  
 
 216  
     @Override
 217  
     public Map<String, String[]> getRequestHeaderValuesMap()
 218  
     {
 219  0
         if (_requestHeaderValuesMap == null)
 220  
         {
 221  0
             checkHttpServletRequest();
 222  0
             _requestHeaderValuesMap = new RequestHeaderValuesMap(_httpServletRequest);
 223  
         }
 224  0
         return _requestHeaderValuesMap;
 225  
     }
 226  
 
 227  
     @Override
 228  
     @SuppressWarnings("unchecked")
 229  
     public Map<String, Object> getRequestCookieMap()
 230  
     {
 231  0
         if (_requestCookieMap == null)
 232  
         {
 233  0
             checkHttpServletRequest();
 234  0
             _requestCookieMap = new CookieMap(_httpServletRequest);
 235  
         }
 236  0
         return _requestCookieMap;
 237  
     }
 238  
 
 239  
     @Override
 240  
     public Locale getRequestLocale()
 241  
     {
 242  0
         return _servletRequest.getLocale();
 243  
     }
 244  
 
 245  
     @Override
 246  
     public String getRequestPathInfo()
 247  
     {
 248  0
         checkHttpServletRequest();
 249  
         // return (_httpServletRequest).getPathInfo();
 250  
         // HACK: see constructor
 251  0
         return _requestPathInfo;
 252  
     }
 253  
 
 254  
     @Override
 255  
     public String getRequestContentType()
 256  
     {
 257  0
         return _servletRequest.getContentType();
 258  
     }
 259  
 
 260  
     @Override
 261  
     public String getRequestContextPath()
 262  
     {
 263  0
         checkHttpServletRequest();
 264  0
         return _httpServletRequest.getContextPath();
 265  
     }
 266  
 
 267  
     @Override
 268  
     public String getInitParameter(final String s)
 269  
     {
 270  0
         return _servletContext.getInitParameter(s);
 271  
     }
 272  
 
 273  
     @Override
 274  
     @SuppressWarnings("unchecked")
 275  
     public Map<String, String> getInitParameterMap()
 276  
     {
 277  0
         if (_initParameterMap == null)
 278  
         {
 279  
             // We cache it as an attribute in ServletContext itself (is this circular reference a problem?)
 280  0
             if ((_initParameterMap = (Map<String, String>) _servletContext.getAttribute(INIT_PARAMETER_MAP_ATTRIBUTE)) == null)
 281  
             {
 282  0
                 _initParameterMap = new InitParameterMap(_servletContext);
 283  0
                 _servletContext.setAttribute(INIT_PARAMETER_MAP_ATTRIBUTE, _initParameterMap);
 284  
             }
 285  
         }
 286  0
         return _initParameterMap;
 287  
     }
 288  
 
 289  
     @Override
 290  
     @SuppressWarnings("unchecked")
 291  
     public Set<String> getResourcePaths(final String path)
 292  
     {
 293  0
         checkNull(path, "path");
 294  0
         return _servletContext.getResourcePaths(path);
 295  
     }
 296  
 
 297  
     @Override
 298  
     public InputStream getResourceAsStream(final String path)
 299  
     {
 300  0
         checkNull(path, "path");
 301  0
         return _servletContext.getResourceAsStream(path);
 302  
     }
 303  
 
 304  
     @Override
 305  
     public String encodeActionURL(final String url)
 306  
     {
 307  0
         checkNull(url, "url");
 308  0
         checkHttpServletRequest();
 309  0
         return ((HttpServletResponse) _servletResponse).encodeURL(url);
 310  
     }
 311  
 
 312  
     @Override
 313  
     public String encodeResourceURL(final String url)
 314  
     {
 315  0
         checkNull(url, "url");
 316  0
         checkHttpServletRequest();
 317  0
         return ((HttpServletResponse) _servletResponse).encodeURL(url);
 318  
     }
 319  
 
 320  
     @Override
 321  
     public String encodeNamespace(final String s)
 322  
     {
 323  0
         return s;
 324  
     }
 325  
 
 326  
     @Override
 327  
     public void dispatch(final String requestURI) throws IOException, FacesException
 328  
     {
 329  0
         RequestDispatcher requestDispatcher = _servletRequest.getRequestDispatcher(requestURI);
 330  
 
 331  
         // If there is no dispatcher, send NOT_FOUND
 332  0
         if (requestDispatcher == null)
 333  
         {
 334  0
             ((HttpServletResponse) _servletResponse).sendError(HttpServletResponse.SC_NOT_FOUND);
 335  
 
 336  0
             return;
 337  
         }
 338  
 
 339  
         try
 340  
         {
 341  0
             requestDispatcher.forward(_servletRequest, _servletResponse);
 342  
         }
 343  0
         catch (ServletException e)
 344  
         {
 345  0
             if (e.getMessage() != null)
 346  
             {
 347  0
                 throw new FacesException(e.getMessage(), e);
 348  
             }
 349  
 
 350  0
             throw new FacesException(e);
 351  
 
 352  0
         }
 353  0
     }
 354  
 
 355  
     @Override
 356  
     public String getRequestServletPath()
 357  
     {
 358  0
         checkHttpServletRequest();
 359  
         // return (_httpServletRequest).getServletPath();
 360  
         // HACK: see constructor
 361  0
         return _requestServletPath;
 362  
     }
 363  
 
 364  
     @Override
 365  
     public String getAuthType()
 366  
     {
 367  0
         checkHttpServletRequest();
 368  0
         return _httpServletRequest.getAuthType();
 369  
     }
 370  
 
 371  
     @Override
 372  
     public String getRemoteUser()
 373  
     {
 374  0
         checkHttpServletRequest();
 375  0
         return _httpServletRequest.getRemoteUser();
 376  
     }
 377  
 
 378  
     @Override
 379  
     public boolean isUserInRole(final String role)
 380  
     {
 381  0
         checkNull(role, "role");
 382  0
         checkHttpServletRequest();
 383  0
         return _httpServletRequest.isUserInRole(role);
 384  
     }
 385  
 
 386  
     @Override
 387  
     public Principal getUserPrincipal()
 388  
     {
 389  0
         checkHttpServletRequest();
 390  0
         return _httpServletRequest.getUserPrincipal();
 391  
     }
 392  
 
 393  
     @Override
 394  
     public void log(final String message)
 395  
     {
 396  0
         checkNull(message, "message");
 397  0
         _servletContext.log(message);
 398  0
     }
 399  
 
 400  
     @Override
 401  
     public void log(final String message, final Throwable exception)
 402  
     {
 403  0
         checkNull(message, "message");
 404  0
         checkNull(exception, "exception");
 405  0
         _servletContext.log(message, exception);
 406  0
     }
 407  
 
 408  
     @Override
 409  
     public void redirect(final String url) throws IOException
 410  
     {
 411  0
         if (_servletResponse instanceof HttpServletResponse)
 412  
         {
 413  0
             ((HttpServletResponse) _servletResponse).sendRedirect(url);
 414  0
             FacesContext.getCurrentInstance().responseComplete();
 415  
         }
 416  
         else
 417  
         {
 418  0
             throw new IllegalArgumentException("Only HttpServletResponse supported");
 419  
         }
 420  0
     }
 421  
 
 422  
     @SuppressWarnings("unchecked")
 423  
     public Iterator<Locale> getRequestLocales()
 424  
     {
 425  0
         checkHttpServletRequest();
 426  0
         return new EnumerationIterator(_httpServletRequest.getLocales());
 427  
     }
 428  
 
 429  
     @Override
 430  
     public URL getResource(final String path) throws MalformedURLException
 431  
     {
 432  0
         checkNull(path, "path");
 433  0
         return _servletContext.getResource(path);
 434  
     }
 435  
 
 436  
     /**
 437  
      * @since JSF 1.2
 438  
      * @param request
 439  
      */
 440  
     @Override
 441  
     public void setRequest(final java.lang.Object request)
 442  
     {
 443  0
         this._servletRequest = (ServletRequest) request;
 444  0
         this._httpServletRequest = isHttpServletRequest(_servletRequest) ? (HttpServletRequest) _servletRequest : null;
 445  0
         this._httpServletRequest = isHttpServletRequest(_servletRequest) ? (HttpServletRequest) _servletRequest : null;
 446  0
     }
 447  
 
 448  
     /**
 449  
      * @since JSF 1.2
 450  
      * @param encoding
 451  
      * @throws java.io.UnsupportedEncodingException
 452  
      */
 453  
     @Override
 454  
     public void setRequestCharacterEncoding(final java.lang.String encoding) throws java.io.UnsupportedEncodingException
 455  
     {
 456  
 
 457  0
         this._servletRequest.setCharacterEncoding(encoding);
 458  
 
 459  0
     }
 460  
 
 461  
     /**
 462  
      * @since JSF 1.2
 463  
      */
 464  
     @Override
 465  
     public String getRequestCharacterEncoding()
 466  
     {
 467  0
         return _servletRequest.getCharacterEncoding();
 468  
     }
 469  
 
 470  
     /**
 471  
      * @since JSF 1.2
 472  
      */
 473  
     @Override
 474  
     public String getResponseCharacterEncoding()
 475  
     {
 476  0
         return _servletResponse.getCharacterEncoding();
 477  
     }
 478  
 
 479  
     /**
 480  
      * @since JSF 1.2
 481  
      * @param response
 482  
      */
 483  
     @Override
 484  
     public void setResponse(final java.lang.Object response)
 485  
     {
 486  0
         this._servletResponse = (ServletResponse) response;
 487  0
     }
 488  
 
 489  
     /**
 490  
      * @since JSF 1.2
 491  
      * @param encoding
 492  
      */
 493  
     @Override
 494  
     public void setResponseCharacterEncoding(final java.lang.String encoding)
 495  
     {
 496  0
         this._servletResponse.setCharacterEncoding(encoding);
 497  0
     }
 498  
 
 499  
     private void checkNull(final Object o, final String param)
 500  
     {
 501  0
         if (o == null)
 502  
         {
 503  0
             throw new NullPointerException(param + " can not be null.");
 504  
         }
 505  0
     }
 506  
 
 507  
     private void checkHttpServletRequest()
 508  
     {
 509  0
         if (_httpServletRequest == null)
 510  
         {
 511  0
             throw new UnsupportedOperationException("Only HttpServletRequest supported");
 512  
         }
 513  0
     }
 514  
 
 515  
     private boolean isHttpServletRequest(final ServletRequest servletRequest)
 516  
     {
 517  0
         return servletRequest instanceof HttpServletRequest;
 518  
     }
 519  
 
 520  
 }