1   /**
2    * Copyright (c) 2000-2007 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.util.bridges.php;
24  
25  import com.liferay.portal.kernel.util.GetterUtil;
26  import com.liferay.portal.kernel.util.JavaConstants;
27  import com.liferay.portal.kernel.util.StringPool;
28  import com.liferay.portal.kernel.util.Validator;
29  
30  import java.util.Enumeration;
31  import java.util.HashMap;
32  import java.util.Map;
33  
34  import javax.portlet.PortletConfig;
35  import javax.portlet.RenderRequest;
36  import javax.portlet.RenderResponse;
37  
38  import javax.servlet.ServletConfig;
39  import javax.servlet.http.HttpServletRequest;
40  import javax.servlet.http.HttpServletRequestWrapper;
41  
42  /**
43   * <a href="PHPServletRequest.java.html"><b><i>View Source</i></b></a>
44   *
45   * @author Jorge Ferrer
46   */
47  public class PHPServletRequest extends HttpServletRequestWrapper {
48  
49      public PHPServletRequest(HttpServletRequest req, ServletConfig config,
50                               RenderRequest renderReq, RenderResponse renderRes,
51                               PortletConfig portletConfig, String phpURI) {
52  
53          super(req);
54  
55          _config = config;
56          _renderReq = renderReq;
57          _renderRes = renderRes;
58          _portletConfig = portletConfig;
59  
60          StringBuffer sb = new StringBuffer();
61  
62          int pos = phpURI.indexOf(StringPool.QUESTION);
63  
64          if (pos != -1) {
65              _path = phpURI.substring(0, pos);
66  
67              sb.append(phpURI.substring(pos + 1));
68          }
69          else {
70              _path = phpURI;
71          }
72  
73          if (GetterUtil.getBoolean(
74                  portletConfig.getInitParameter("add-portlet-params"), true)) {
75  
76              sb.append(StringPool.AMPERSAND);
77              sb.append("portlet_namespace");
78              sb.append(StringPool.EQUAL);
79              sb.append(_renderRes.getNamespace());
80              sb.append(StringPool.AMPERSAND);
81              sb.append("portlet_name");
82              sb.append(StringPool.EQUAL);
83              sb.append(_portletConfig.getPortletName());
84          }
85  
86          _queryString = sb.toString();
87  
88          req.setAttribute(
89              JavaConstants.JAVAX_SERVLET_INCLUDE_QUERY_STRING, getQueryString());
90          req.setAttribute(
91              JavaConstants.JAVAX_SERVLET_INCLUDE_PATH_INFO, getPathInfo());
92          req.setAttribute(
93              JavaConstants.JAVAX_SERVLET_INCLUDE_REQUEST_URI, getRequestURI());
94          req.setAttribute(
95              JavaConstants.JAVAX_SERVLET_INCLUDE_SERVLET_PATH, _path);
96      }
97  
98      public String getContextPath() {
99          return StringPool.SLASH;
100     }
101 
102     public String getParameter(String name) {
103         return _renderReq.getParameter(name);
104     }
105 
106     public Map getParameterMap() {
107         return _renderReq.getParameterMap();
108     }
109 
110     public Enumeration getParameterNames() {
111         return _renderReq.getParameterNames();
112     }
113 
114     public String[] getParameterValues(String name) {
115         return _renderReq.getParameterValues(name);
116     }
117 
118     public String getPathInfo() {
119         return StringPool.BLANK;
120     }
121 
122     public String getPathTranslated() {
123         return StringPool.BLANK;
124     }
125 
126     public String getQueryString() {
127         return _queryString;
128     }
129 
130     public String getRealPath(String path) {
131         return _config.getServletContext().getRealPath(path);
132     }
133 
134     public String getRequestURI() {
135         return _path + StringPool.QUESTION + _queryString;
136     }
137 
138     public StringBuffer getRequestURL() {
139         StringBuffer sb = new StringBuffer();
140 
141         sb.append(getRequest().getProtocol());
142         sb.append("://");
143         sb.append(getRequest().getRemoteHost());
144         sb.append(StringPool.COLON);
145         sb.append(getRequest().getServerPort());
146         sb.append(StringPool.SLASH);
147         sb.append(getRequestURI());
148 
149         return sb;
150     }
151 
152     public String getServletPath() {
153         return _path;
154     }
155 
156     protected Map parseQueryString(String queryString) {
157         Map params = new HashMap();
158 
159         if (Validator.isNull(queryString)) {
160             return params;
161         }
162 
163         int ampersandIndex;
164 
165         do {
166             ampersandIndex = queryString.indexOf(StringPool.AMPERSAND);
167 
168             String nameValuePair;
169 
170             if (ampersandIndex == -1) {
171                 nameValuePair = queryString;
172             }
173             else {
174                 nameValuePair = queryString.substring(0, ampersandIndex);
175                 queryString = queryString.substring(ampersandIndex + 1);
176             }
177 
178             int equalIndex = nameValuePair.indexOf(StringPool.EQUAL);
179 
180             String key = nameValuePair;
181             String value = StringPool.BLANK;
182 
183             if (equalIndex != -1) {
184                 key = nameValuePair.substring(0, equalIndex);
185                 value = nameValuePair.substring(equalIndex + 1);
186             }
187 
188             params.put(key, value);
189 
190         }
191         while (ampersandIndex != -1);
192 
193         return params;
194     }
195 
196     private ServletConfig _config;
197     private PortletConfig _portletConfig;
198     private RenderRequest _renderReq;
199     private RenderResponse _renderRes;
200     private String _queryString;
201     private String _path;
202 
203 }