View Javadoc

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.orchestra.lib.jsf;
20  
21  /**
22   * TODO: This class is a copy of 
23   * org.apache.myfaces.commons.util.RequestType
24   * 
25   * Since orchestra should be compatible with 1.1, this is placed
26   * here and there is not a dependency for myfaces-commons-utils, because
27   * this stuff only works for 1.2 (this class is also compatible
28   * with jdk 1.4)
29   * 
30   * Represents the type of request currently in the ExternalContext.
31   * All servlet requests will be of the SERVLET requestType whereas
32   * all of the other RequestTypes will be portlet type requests.  There
33   * are a number of convenience methods on the RequestType enumeration
34   * which can be used to determine the capabilities of the current request.
35   * 
36   * @since 1.4
37   */
38  public class RequestType
39  {
40      /**
41       * The type for all servlet requests.  SERVLET request types are
42       * both client requests and response writable.
43       */
44      final public static RequestType SERVLET = new RequestType(true, true, false);
45      
46      /**
47       * The type for a portlet RenderRequest.  RENDER request types are
48       * for portlets and are response writable but are NOT client
49       * requests.
50       */
51      final public static RequestType RENDER = new RequestType(false, true, true);
52      
53      /**
54       * The type for a portlet ActionRequest.  ACTION request types are
55       * for portlets and are client requests but are NOT response 
56       * writable.
57       */
58      final public static RequestType ACTION = new RequestType(true, false, true);
59      
60      /**
61       * The type for a portlet ResourceRequest.  RESOURCE request types
62       * are for portlets and are both client requests and response 
63       * writable.  RESOURCE request types will only be returned in a
64       * Portlet 2.0 portlet container.
65       */
66      final public static RequestType RESOURCE = new RequestType(true, true, true);
67      
68      /**
69       * The type for a portlet EventRequest.  EVENT request types
70       * are for portlets and are neither client requests nor response 
71       * writable.  EVENT request types will only be returned in a
72       * Portlet 2.0 portlet container.
73       */        
74      final public static RequestType EVENT  = new RequestType(false, false, true);
75      
76      private boolean _client;
77      private boolean _writable;
78      private boolean _portlet;
79      
80      RequestType(boolean client, boolean writable, boolean portlet)
81      {
82          _client = client;
83          _writable  = writable;
84          _portlet    = portlet;
85      }
86          
87      /**
88       * Returns <code>true</code> if this request was a direct
89       * result of a call from the client.  This implies that
90       * the current application is the "owner" of the current
91       * request and that it has access to the inputStream, can
92       * get and set character encodings, etc.  Currently all
93       * SERVLET, ACTION, and RESOURCE RequestTypes are client
94       * requests.
95       * 
96       * @return <code>true</code> if the current request is a
97       *         client data type request and <code>false</code>
98       *         if it is not.
99       */
100     public boolean isRequestFromClient()
101     {
102         return _client;
103     }
104     
105     /**
106      * Returns <code>true</code> if the response for this
107      * RequestType is intended to produce output to the client.
108      * Currently the SERVLET, RENDER, and RESOURCE request are
109      * response writable.
110      *  
111      * @return <code>true</code> if the current request is 
112      *         intended to produce output and <code>false</code>
113      *         if it is not.
114      */
115     public boolean isResponseWritable()
116     {
117         return _writable;
118     }
119     
120     /**
121      * Returns <code>true</code> if the response for this
122      * RequestType originated from a JSR-168 or JSR-286 
123      * portlet container.  Currently RENDER, ACTION,
124      * RESOURCE, and EVENT RequestTypes are all portlet
125      * requests.
126      * 
127      * @return <code>true</code> if the current request
128      *         originated inside of a JSR-168 or JSR-286
129      *         Portlet Container or <code>false</code> if
130      *         it did not.
131      */
132     public boolean isPortlet()
133     {
134         return _portlet;
135     }
136 }