001
014
015 package com.liferay.portlet;
016
017 import com.liferay.portal.kernel.portlet.LiferayPortletResponse;
018 import com.liferay.portal.kernel.util.JavaConstants;
019 import com.liferay.portal.kernel.util.WebKeys;
020 import com.liferay.portal.theme.ThemeDisplay;
021 import com.liferay.portal.util.PortalUtil;
022
023 import javax.portlet.PortletRequest;
024 import javax.portlet.PortletResponse;
025 import javax.portlet.PortletURL;
026
027 import javax.servlet.http.HttpServletRequest;
028
029
032 public class RequestBackedPortletURLFactoryUtil {
033
034 public static RequestBackedPortletURLFactory create(
035 HttpServletRequest request) {
036
037 return new HttpServletRequestRequestBackedPortletURLFactory(request);
038 }
039
040 public static RequestBackedPortletURLFactory create(
041 PortletRequest portletRequest) {
042
043 PortletResponse portletResponse =
044 (PortletResponse)portletRequest.getAttribute(
045 JavaConstants.JAVAX_PORTLET_RESPONSE);
046
047 if (portletResponse == null) {
048 return create(PortalUtil.getHttpServletRequest(portletRequest));
049 }
050
051 return new LiferayPortletResponseRequestBackedPortletURLFactory(
052 PortalUtil.getLiferayPortletResponse(portletResponse));
053 }
054
055 private static class HttpServletRequestRequestBackedPortletURLFactory
056 implements RequestBackedPortletURLFactory {
057
058 @Override
059 public PortletURL createActionURL(String portletId) {
060 String actionPhase = PortletRequest.ACTION_PHASE;
061
062 return createPortletURL(portletId, actionPhase);
063 }
064
065 @Override
066 public PortletURL createRenderURL(String portletId) {
067 return createPortletURL(portletId, PortletRequest.RENDER_PHASE);
068 }
069
070 @Override
071 public PortletURL createResourceURL(String portletId) {
072 return createPortletURL(portletId, PortletRequest.RESOURCE_PHASE);
073 }
074
075 protected PortletURL createPortletURL(
076 String portletId, String lifecycle) {
077
078 ThemeDisplay themeDisplay = (ThemeDisplay)_request.getAttribute(
079 WebKeys.THEME_DISPLAY);
080
081 return PortletURLFactoryUtil.create(
082 _request, portletId, themeDisplay.getPlid(), lifecycle);
083 }
084
085 private HttpServletRequestRequestBackedPortletURLFactory(
086 HttpServletRequest request) {
087
088 _request = request;
089 }
090
091 private final HttpServletRequest _request;
092
093 }
094
095 private static class LiferayPortletResponseRequestBackedPortletURLFactory
096 implements RequestBackedPortletURLFactory {
097
098 @Override
099 public PortletURL createActionURL(String portletId) {
100 return _liferayPortletResponse.createActionURL(portletId);
101 }
102
103 @Override
104 public PortletURL createRenderURL(String portletId) {
105 return _liferayPortletResponse.createRenderURL(portletId);
106 }
107
108 @Override
109 public PortletURL createResourceURL(String portletId) {
110 return _liferayPortletResponse.createResourceURL(portletId);
111 }
112
113 private LiferayPortletResponseRequestBackedPortletURLFactory(
114 LiferayPortletResponse liferayPortletResponse) {
115
116 _liferayPortletResponse = liferayPortletResponse;
117 }
118
119 private final LiferayPortletResponse _liferayPortletResponse;
120
121 }
122
123 }