001    // Copyright 2005 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry.portlet;
016    
017    import java.security.Principal;
018    import java.util.List;
019    import java.util.Locale;
020    
021    import javax.portlet.PortletRequest;
022    import javax.portlet.PortletSession;
023    
024    import org.apache.hivemind.util.Defense;
025    import org.apache.tapestry.describe.DescriptionReceiver;
026    import org.apache.tapestry.web.WebRequest;
027    import org.apache.tapestry.web.WebSession;
028    import org.apache.tapestry.web.WebUtils;
029    
030    /**
031     * Implementation of {@link org.apache.tapestry.web.WebRequest} that adapts a
032     * {@link PortletRequest).
033     * 
034     * @author Howard M. Lewis Ship
035     * @since 4.0
036     */
037    public class PortletWebRequest implements WebRequest
038    {
039        private final PortletRequest _portletRequest;
040    
041        private WebSession _webSession;
042    
043        public PortletWebRequest(PortletRequest portletRequest)
044        {
045            Defense.notNull(portletRequest, "portletRequest");
046    
047            _portletRequest = portletRequest;
048        }
049    
050        public List getParameterNames()
051        {
052            return WebUtils.toSortedList(_portletRequest.getParameterNames());
053        }
054    
055        public String getParameterValue(String parameterName)
056        {
057            return _portletRequest.getParameter(parameterName);
058        }
059    
060        public String[] getParameterValues(String parameterName)
061        {
062            return _portletRequest.getParameterValues(parameterName);
063        }
064    
065        public String getContextPath()
066        {
067            return _portletRequest.getContextPath();
068        }
069    
070        public WebSession getSession(boolean create)
071        {
072            if (_webSession != null)
073                return _webSession;
074    
075            PortletSession session = _portletRequest.getPortletSession(create);
076    
077            if (session != null)
078                _webSession = new PortletWebSession(session);
079    
080            return _webSession;
081        }
082    
083        public String getScheme()
084        {
085            return _portletRequest.getScheme();
086        }
087    
088        public String getServerName()
089        {
090            return _portletRequest.getServerName();
091        }
092    
093        public int getServerPort()
094        {
095            return _portletRequest.getServerPort();
096        }
097    
098        /**
099         * Returns "<PortletRequest>", because portlets don't have a notion of request URI.
100         */
101    
102        public String getRequestURI()
103        {
104            return "<PortletRequest>";
105        }
106    
107        public void forward(String URL)
108        {
109            unsupported("forward");
110        }
111    
112        public String getActivationPath()
113        {
114            return "";
115        }
116    
117        /**
118         * Returns null, always.
119         */
120        public String getPathInfo()
121        {
122            return null;
123        }
124    
125        public List getAttributeNames()
126        {
127            return WebUtils.toSortedList(_portletRequest.getAttributeNames());
128        }
129    
130        public Object getAttribute(String name)
131        {
132            return _portletRequest.getAttribute(name);
133        }
134    
135        public void setAttribute(String name, Object attribute)
136        {
137            if (attribute == null)
138                _portletRequest.removeAttribute(name);
139            else
140                _portletRequest.setAttribute(name, attribute);
141        }
142    
143        protected final void unsupported(String methodName)
144        {
145            throw new UnsupportedOperationException(PortletMessages.unsupportedMethod(methodName));
146        }
147    
148        public void describeTo(DescriptionReceiver receiver)
149        {
150            receiver.describeAlternate(_portletRequest);
151        }
152    
153        public Locale getLocale()
154        {
155            return _portletRequest.getLocale();
156        }
157    
158        public String getHeader(String name)
159        {
160            unsupported("getHeader");
161    
162            return null;
163        }
164    
165        public String getRemoteUser()
166        {
167            return _portletRequest.getRemoteUser();
168        }
169    
170        public Principal getUserPrincipal()
171        {
172            return _portletRequest.getUserPrincipal();
173        }
174    
175        public boolean isUserInRole(String role)
176        {
177            return _portletRequest.isUserInRole(role);
178        }
179    }