001
014
015 package com.liferay.portlet;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.language.LanguageUtil;
020 import com.liferay.portal.kernel.log.Log;
021 import com.liferay.portal.kernel.log.LogFactoryUtil;
022 import com.liferay.portal.kernel.portlet.ActionResult;
023 import com.liferay.portal.kernel.portlet.LiferayPortletMode;
024 import com.liferay.portal.kernel.portlet.PortletContainer;
025 import com.liferay.portal.kernel.portlet.PortletContainerException;
026 import com.liferay.portal.kernel.portlet.PortletModeFactory;
027 import com.liferay.portal.kernel.portlet.WindowStateFactory;
028 import com.liferay.portal.kernel.servlet.BufferCacheServletResponse;
029 import com.liferay.portal.kernel.servlet.DirectRequestDispatcherFactoryUtil;
030 import com.liferay.portal.kernel.servlet.HttpHeaders;
031 import com.liferay.portal.kernel.util.ArrayUtil;
032 import com.liferay.portal.kernel.util.JavaConstants;
033 import com.liferay.portal.kernel.util.ParamUtil;
034 import com.liferay.portal.kernel.util.Validator;
035 import com.liferay.portal.kernel.util.WebKeys;
036 import com.liferay.portal.kernel.webdav.WebDAVStorage;
037 import com.liferay.portal.kernel.xml.QName;
038 import com.liferay.portal.model.Layout;
039 import com.liferay.portal.model.LayoutTypePortlet;
040 import com.liferay.portal.model.Portlet;
041 import com.liferay.portal.model.PortletPreferencesIds;
042 import com.liferay.portal.model.PublicRenderParameter;
043 import com.liferay.portal.model.User;
044 import com.liferay.portal.security.permission.ActionKeys;
045 import com.liferay.portal.service.PortletPreferencesLocalServiceUtil;
046 import com.liferay.portal.service.ServiceContext;
047 import com.liferay.portal.service.ServiceContextFactory;
048 import com.liferay.portal.service.ServiceContextThreadLocal;
049 import com.liferay.portal.service.permission.LayoutPermissionUtil;
050 import com.liferay.portal.service.permission.PortletPermissionUtil;
051 import com.liferay.portal.theme.PortletDisplay;
052 import com.liferay.portal.theme.PortletDisplayFactory;
053 import com.liferay.portal.theme.ThemeDisplay;
054 import com.liferay.portal.util.PortalUtil;
055 import com.liferay.util.SerializableUtil;
056
057 import java.io.Serializable;
058 import java.io.Writer;
059
060 import java.util.HashMap;
061 import java.util.List;
062 import java.util.Map;
063
064 import javax.portlet.Event;
065 import javax.portlet.PortletConfig;
066 import javax.portlet.PortletContext;
067 import javax.portlet.PortletMode;
068 import javax.portlet.PortletPreferences;
069 import javax.portlet.PortletRequest;
070 import javax.portlet.PortletResponse;
071 import javax.portlet.PortletURL;
072 import javax.portlet.RenderRequest;
073 import javax.portlet.RenderResponse;
074 import javax.portlet.WindowState;
075
076 import javax.servlet.RequestDispatcher;
077 import javax.servlet.ServletContext;
078 import javax.servlet.http.HttpServletRequest;
079 import javax.servlet.http.HttpServletResponse;
080 import javax.servlet.http.HttpSession;
081
082
086 public class PortletContainerImpl implements PortletContainer {
087
088 @Override
089 public void preparePortlet(HttpServletRequest request, Portlet portlet)
090 throws PortletContainerException {
091
092 try {
093 _doPreparePortlet(request, portlet);
094 }
095 catch (Exception e) {
096 throw new PortletContainerException(e);
097 }
098 }
099
100 @Override
101 public ActionResult processAction(
102 HttpServletRequest request, HttpServletResponse response,
103 Portlet portlet)
104 throws PortletContainerException {
105
106 try {
107 return _doProcessAction(request, response, portlet);
108 }
109 catch (Exception e) {
110 throw new PortletContainerException(e);
111 }
112 }
113
114 @Override
115 public List<Event> processEvent(
116 HttpServletRequest request, HttpServletResponse response,
117 Portlet portlet, Layout layout, Event event)
118 throws PortletContainerException {
119
120 try {
121 return _doProcessEvent(request, response, portlet, layout, event);
122 }
123 catch (Exception e) {
124 throw new PortletContainerException(e);
125 }
126 }
127
128 @Override
129 public void render(
130 HttpServletRequest request, HttpServletResponse response,
131 Portlet portlet)
132 throws PortletContainerException {
133
134 try {
135 _doRender(request, response, portlet);
136 }
137 catch (Exception e) {
138 throw new PortletContainerException(e);
139 }
140 }
141
142 @Override
143 public void serveResource(
144 HttpServletRequest request, HttpServletResponse response,
145 Portlet portlet)
146 throws PortletContainerException {
147
148 try {
149 _doServeResource(request, response, portlet);
150 }
151 catch (Exception e) {
152 throw new PortletContainerException(e);
153 }
154 }
155
156 protected long getScopeGroupId(
157 HttpServletRequest request, Layout layout, String portletId)
158 throws PortalException, SystemException {
159
160 long scopeGroupId = 0;
161
162 Layout requestLayout = (Layout)request.getAttribute(WebKeys.LAYOUT);
163
164 try {
165 request.setAttribute(WebKeys.LAYOUT, layout);
166
167 scopeGroupId = PortalUtil.getScopeGroupId(request, portletId);
168 }
169 finally {
170 request.setAttribute(WebKeys.LAYOUT, requestLayout);
171 }
172
173 if (scopeGroupId <= 0) {
174 scopeGroupId = PortalUtil.getScopeGroupId(layout, portletId);
175 }
176
177 return scopeGroupId;
178 }
179
180 protected void processPublicRenderParameters(
181 HttpServletRequest request, Layout layout, Portlet portlet) {
182
183 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
184 WebKeys.THEME_DISPLAY);
185
186 Map<String, String[]> publicRenderParameters =
187 PublicRenderParametersPool.get(request, layout.getPlid());
188
189 Map<String, String[]> parameters = request.getParameterMap();
190
191 for (Map.Entry<String, String[]> entry : parameters.entrySet()) {
192 String name = entry.getKey();
193
194 QName qName = PortletQNameUtil.getQName(name);
195
196 if (qName == null) {
197 continue;
198 }
199
200 PublicRenderParameter publicRenderParameter =
201 portlet.getPublicRenderParameter(
202 qName.getNamespaceURI(), qName.getLocalPart());
203
204 if (publicRenderParameter == null) {
205 continue;
206 }
207
208 String publicRenderParameterName =
209 PortletQNameUtil.getPublicRenderParameterName(qName);
210
211 if (name.startsWith(
212 PortletQName.PUBLIC_RENDER_PARAMETER_NAMESPACE)) {
213
214 String[] values = entry.getValue();
215
216 if (themeDisplay.isLifecycleAction()) {
217 String[] oldValues = publicRenderParameters.get(
218 publicRenderParameterName);
219
220 if ((oldValues != null) && (oldValues.length != 0)) {
221 values = ArrayUtil.append(values, oldValues);
222 }
223 }
224
225 publicRenderParameters.put(publicRenderParameterName, values);
226 }
227 else {
228 publicRenderParameters.remove(publicRenderParameterName);
229 }
230 }
231 }
232
233 protected Event serializeEvent(
234 Event event, ClassLoader portletClassLoader) {
235
236 Serializable value = event.getValue();
237
238 if (value == null) {
239 return event;
240 }
241
242 Class<?> valueClass = value.getClass();
243
244 String valueClassName = valueClass.getName();
245
246 try {
247 Class<?> loadedValueClass = portletClassLoader.loadClass(
248 valueClassName);
249
250 if (loadedValueClass.equals(valueClass)) {
251 return event;
252 }
253 }
254 catch (ClassNotFoundException cnfe) {
255 throw new RuntimeException(cnfe);
256 }
257
258 byte[] serializedValue = SerializableUtil.serialize(value);
259
260 value = (Serializable)SerializableUtil.deserialize(
261 serializedValue, portletClassLoader);
262
263 return new EventImpl(event.getName(), event.getQName(), value);
264 }
265
266 private void _doPreparePortlet(HttpServletRequest request, Portlet portlet)
267 throws Exception {
268
269 User user = PortalUtil.getUser(request);
270 Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
271
272 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
273 WebKeys.THEME_DISPLAY);
274
275 long scopeGroupId = PortalUtil.getScopeGroupId(
276 request, portlet.getPortletId());
277
278 themeDisplay.setScopeGroupId(scopeGroupId);
279
280 long siteGroupId = 0;
281
282 if (layout.isTypeControlPanel()) {
283 siteGroupId = PortalUtil.getSiteGroupId(scopeGroupId);
284 }
285 else {
286 siteGroupId = PortalUtil.getSiteGroupId(layout.getGroupId());
287 }
288
289 themeDisplay.setSiteGroupId(siteGroupId);
290
291 if (user != null) {
292 HttpSession session = request.getSession();
293
294 InvokerPortletImpl.clearResponse(
295 session, layout.getPrimaryKey(), portlet.getPortletId(),
296 LanguageUtil.getLanguageId(request));
297 }
298
299 processPublicRenderParameters(request, layout, portlet);
300
301 if (themeDisplay.isLifecycleRender() ||
302 themeDisplay.isLifecycleResource()) {
303
304 WindowState windowState = WindowStateFactory.getWindowState(
305 ParamUtil.getString(request, "p_p_state"));
306
307 if (layout.isTypeControlPanel() &&
308 ((windowState == null) ||
309 windowState.equals(WindowState.NORMAL) ||
310 Validator.isNull(windowState.toString()))) {
311
312 windowState = WindowState.MAXIMIZED;
313 }
314
315 PortletMode portletMode = PortletModeFactory.getPortletMode(
316 ParamUtil.getString(request, "p_p_mode"));
317
318 PortalUtil.updateWindowState(
319 portlet.getPortletId(), user, layout, windowState, request);
320
321 PortalUtil.updatePortletMode(
322 portlet.getPortletId(), user, layout, portletMode, request);
323 }
324 }
325
326 private ActionResult _doProcessAction(
327 HttpServletRequest request, HttpServletResponse response,
328 Portlet portlet)
329 throws Exception {
330
331 Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
332
333 WindowState windowState = WindowStateFactory.getWindowState(
334 ParamUtil.getString(request, "p_p_state"));
335
336 if (layout.isTypeControlPanel() &&
337 ((windowState == null) || windowState.equals(WindowState.NORMAL) ||
338 Validator.isNull(windowState.toString()))) {
339
340 windowState = WindowState.MAXIMIZED;
341 }
342
343 PortletMode portletMode = PortletModeFactory.getPortletMode(
344 ParamUtil.getString(request, "p_p_mode"));
345
346 PortletPreferencesIds portletPreferencesIds =
347 PortletPreferencesFactoryUtil.getPortletPreferencesIds(
348 request, portlet.getPortletId());
349
350 PortletPreferences portletPreferences =
351 PortletPreferencesLocalServiceUtil.getStrictPreferences(
352 portletPreferencesIds);
353
354 ServletContext servletContext = (ServletContext)request.getAttribute(
355 WebKeys.CTX);
356
357 InvokerPortlet invokerPortlet = PortletInstanceFactoryUtil.create(
358 portlet, servletContext);
359
360 PortletConfig portletConfig = PortletConfigFactoryUtil.create(
361 portlet, servletContext);
362 PortletContext portletContext = portletConfig.getPortletContext();
363
364 String contentType = request.getHeader(HttpHeaders.CONTENT_TYPE);
365
366 if (_log.isDebugEnabled()) {
367 _log.debug("Content type " + contentType);
368 }
369
370 try {
371 ActionRequestImpl actionRequestImpl = ActionRequestFactory.create(
372 request, portlet, invokerPortlet, portletContext, windowState,
373 portletMode, portletPreferences, layout.getPlid());
374
375 User user = PortalUtil.getUser(request);
376
377 ActionResponseImpl actionResponseImpl =
378 ActionResponseFactory.create(
379 actionRequestImpl, response, portlet.getPortletId(), user,
380 layout, windowState, portletMode);
381
382 actionRequestImpl.defineObjects(portletConfig, actionResponseImpl);
383
384 ServiceContext serviceContext = ServiceContextFactory.getInstance(
385 actionRequestImpl);
386
387 ServiceContextThreadLocal.pushServiceContext(serviceContext);
388
389 invokerPortlet.processAction(actionRequestImpl, actionResponseImpl);
390
391 actionResponseImpl.transferHeaders(response);
392
393 RenderParametersPool.put(
394 request, layout.getPlid(), portlet.getPortletId(),
395 actionResponseImpl.getRenderParameterMap());
396
397 List<Event> events = actionResponseImpl.getEvents();
398
399 String redirectLocation = actionResponseImpl.getRedirectLocation();
400
401 if (Validator.isNull(redirectLocation) &&
402 portlet.isActionURLRedirect()) {
403
404 PortletURL portletURL = new PortletURLImpl(
405 actionRequestImpl, actionRequestImpl.getPortletName(),
406 layout.getPlid(), PortletRequest.RENDER_PHASE);
407
408 Map<String, String[]> renderParameters =
409 actionResponseImpl.getRenderParameterMap();
410
411 for (Map.Entry<String, String[]> entry :
412 renderParameters.entrySet()) {
413
414 String key = entry.getKey();
415 String[] value = entry.getValue();
416
417 portletURL.setParameter(key, value);
418 }
419
420 redirectLocation = portletURL.toString();
421 }
422
423 return new ActionResult(events, redirectLocation);
424 }
425 finally {
426 ServiceContextThreadLocal.popServiceContext();
427 }
428 }
429
430 private List<Event> _doProcessEvent(
431 HttpServletRequest request, HttpServletResponse response,
432 Portlet portlet, Layout layout, Event event)
433 throws Exception {
434
435 ServletContext servletContext = (ServletContext)request.getAttribute(
436 WebKeys.CTX);
437
438 InvokerPortlet invokerPortlet = PortletInstanceFactoryUtil.create(
439 portlet, servletContext);
440
441 PortletConfig portletConfig = PortletConfigFactoryUtil.create(
442 portlet, servletContext);
443 PortletContext portletContext = portletConfig.getPortletContext();
444
445 LayoutTypePortlet layoutTypePortlet =
446 (LayoutTypePortlet)layout.getLayoutType();
447
448 WindowState windowState = null;
449
450 if (layoutTypePortlet.hasStateMaxPortletId(portlet.getPortletId())) {
451 windowState = WindowState.MAXIMIZED;
452 }
453 else if (layoutTypePortlet.hasStateMinPortletId(
454 portlet.getPortletId())) {
455
456 windowState = WindowState.MINIMIZED;
457 }
458 else {
459 windowState = WindowState.NORMAL;
460 }
461
462 PortletMode portletMode = null;
463
464 if (layoutTypePortlet.hasModeAboutPortletId(portlet.getPortletId())) {
465 portletMode = LiferayPortletMode.ABOUT;
466 }
467 else if (layoutTypePortlet.hasModeConfigPortletId(
468 portlet.getPortletId())) {
469
470 portletMode = LiferayPortletMode.CONFIG;
471 }
472 else if (layoutTypePortlet.hasModeEditPortletId(
473 portlet.getPortletId())) {
474
475 portletMode = PortletMode.EDIT;
476 }
477 else if (layoutTypePortlet.hasModeEditDefaultsPortletId(
478 portlet.getPortletId())) {
479
480 portletMode = LiferayPortletMode.EDIT_DEFAULTS;
481 }
482 else if (layoutTypePortlet.hasModeEditGuestPortletId(
483 portlet.getPortletId())) {
484
485 portletMode = LiferayPortletMode.EDIT_GUEST;
486 }
487 else if (layoutTypePortlet.hasModeHelpPortletId(
488 portlet.getPortletId())) {
489
490 portletMode = PortletMode.HELP;
491 }
492 else if (layoutTypePortlet.hasModePreviewPortletId(
493 portlet.getPortletId())) {
494
495 portletMode = LiferayPortletMode.PREVIEW;
496 }
497 else if (layoutTypePortlet.hasModePrintPortletId(
498 portlet.getPortletId())) {
499
500 portletMode = LiferayPortletMode.PRINT;
501 }
502 else {
503 portletMode = PortletMode.VIEW;
504 }
505
506 long scopeGroupId = getScopeGroupId(
507 request, layout, portlet.getPortletId());
508
509 PortletPreferences portletPreferences =
510 PortletPreferencesFactoryUtil.getPortletSetup(
511 scopeGroupId, layout, portlet.getPortletId(), null);
512
513 EventRequestImpl eventRequestImpl = EventRequestFactory.create(
514 request, portlet, invokerPortlet, portletContext, windowState,
515 portletMode, portletPreferences, layout.getPlid());
516
517 eventRequestImpl.setEvent(
518 serializeEvent(event, invokerPortlet.getPortletClassLoader()));
519
520 User user = PortalUtil.getUser(request);
521 Layout requestLayout = (Layout)request.getAttribute(WebKeys.LAYOUT);
522
523 EventResponseImpl eventResponseImpl = EventResponseFactory.create(
524 eventRequestImpl, response, portlet.getPortletId(), user,
525 requestLayout);
526
527 eventRequestImpl.defineObjects(portletConfig, eventResponseImpl);
528
529 try {
530 invokerPortlet.processEvent(eventRequestImpl, eventResponseImpl);
531
532 if (eventResponseImpl.isCalledSetRenderParameter()) {
533 Map<String, String[]> renderParameterMap =
534 new HashMap<String, String[]>();
535
536 renderParameterMap.putAll(
537 eventResponseImpl.getRenderParameterMap());
538
539 RenderParametersPool.put(
540 request, requestLayout.getPlid(), portlet.getPortletId(),
541 renderParameterMap);
542 }
543
544 return eventResponseImpl.getEvents();
545 }
546 finally {
547 eventRequestImpl.cleanUp();
548 }
549 }
550
551 private void _doRender(
552 HttpServletRequest request, HttpServletResponse response,
553 Portlet portlet)
554 throws Exception {
555
556 if ((portlet != null) && portlet.isInstanceable() &&
557 !portlet.isAddDefaultResource()) {
558
559 String instanceId = portlet.getInstanceId();
560
561 if (!Validator.isPassword(instanceId)) {
562 if (_log.isDebugEnabled()) {
563 _log.debug(
564 "Portlet " + portlet.getPortletId() +
565 " is instanceable but does not have a valid " +
566 "instance id");
567 }
568
569 portlet = null;
570 }
571 }
572
573 if (portlet == null) {
574 return;
575 }
576
577
578
579
580 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
581 WebKeys.THEME_DISPLAY);
582
583 PortletPreferencesFactoryUtil.checkControlPanelPortletPreferences(
584 themeDisplay, portlet);
585
586 PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
587
588 PortletDisplay portletDisplayClone = PortletDisplayFactory.create();
589
590 portletDisplay.copyTo(portletDisplayClone);
591
592 PortletConfig portletConfig = (PortletConfig)request.getAttribute(
593 JavaConstants.JAVAX_PORTLET_CONFIG);
594
595 PortletRequest portletRequest = (PortletRequest)request.getAttribute(
596 JavaConstants.JAVAX_PORTLET_REQUEST);
597
598 if (!(portletRequest instanceof RenderRequest)) {
599 portletRequest = null;
600 }
601
602 PortletResponse portletResponse = (PortletResponse)request.getAttribute(
603 JavaConstants.JAVAX_PORTLET_RESPONSE);
604
605 if (!(portletResponse instanceof RenderResponse)) {
606 portletResponse = null;
607 }
608
609 String lifecycle = (String)request.getAttribute(
610 PortletRequest.LIFECYCLE_PHASE);
611
612 request.setAttribute(WebKeys.RENDER_PORTLET, portlet);
613
614 String path = (String)request.getAttribute(WebKeys.RENDER_PATH);
615
616 if (path == null) {
617 path = "/html/portal/render_portlet.jsp";
618 }
619
620 RequestDispatcher requestDispatcher =
621 DirectRequestDispatcherFactoryUtil.getRequestDispatcher(
622 request, path);
623
624 BufferCacheServletResponse bufferCacheServletResponse = null;
625
626 boolean writeOutput = false;
627
628 if (response instanceof BufferCacheServletResponse) {
629 bufferCacheServletResponse = (BufferCacheServletResponse)response;
630 }
631 else {
632 writeOutput = true;
633 bufferCacheServletResponse = new BufferCacheServletResponse(
634 response);
635 }
636
637 try {
638 requestDispatcher.include(request, bufferCacheServletResponse);
639
640 Boolean portletConfiguratorVisibility =
641 (Boolean)request.getAttribute(
642 WebKeys.PORTLET_CONFIGURATOR_VISIBILITY);
643
644 if (portletConfiguratorVisibility != null) {
645 request.removeAttribute(
646 WebKeys.PORTLET_CONFIGURATOR_VISIBILITY);
647
648 Layout layout = themeDisplay.getLayout();
649
650 if (!layout.isTypeControlPanel() &&
651 !LayoutPermissionUtil.contains(
652 themeDisplay.getPermissionChecker(), layout,
653 ActionKeys.UPDATE) &&
654 !PortletPermissionUtil.contains(
655 themeDisplay.getPermissionChecker(), layout,
656 portlet.getPortletId(), ActionKeys.CONFIGURATION)) {
657
658 bufferCacheServletResponse.setCharBuffer(null);
659
660 return;
661 }
662 }
663
664 if (writeOutput) {
665 Writer writer = response.getWriter();
666
667 writer.write(bufferCacheServletResponse.getString());
668 }
669 }
670 finally {
671 portletDisplay.copyFrom(portletDisplayClone);
672
673 portletDisplayClone.recycle();
674
675 if (portletConfig != null) {
676 request.setAttribute(
677 JavaConstants.JAVAX_PORTLET_CONFIG, portletConfig);
678 }
679
680 if (portletRequest != null) {
681 request.setAttribute(
682 JavaConstants.JAVAX_PORTLET_REQUEST, portletRequest);
683 }
684
685 if (portletResponse != null) {
686 request.setAttribute(
687 JavaConstants.JAVAX_PORTLET_RESPONSE, portletResponse);
688 }
689
690 if (lifecycle != null) {
691 request.setAttribute(PortletRequest.LIFECYCLE_PHASE, lifecycle);
692 }
693
694 request.removeAttribute(WebKeys.RENDER_PORTLET);
695 }
696 }
697
698 private void _doServeResource(
699 HttpServletRequest request, HttpServletResponse response,
700 Portlet portlet)
701 throws Exception {
702
703 WindowState windowState = (WindowState)request.getAttribute(
704 WebKeys.WINDOW_STATE);
705
706 PortletMode portletMode = PortletModeFactory.getPortletMode(
707 ParamUtil.getString(request, "p_p_mode"));
708
709 PortletPreferencesIds portletPreferencesIds =
710 PortletPreferencesFactoryUtil.getPortletPreferencesIds(
711 request, portlet.getPortletId());
712
713 PortletPreferences portletPreferences =
714 PortletPreferencesLocalServiceUtil.getStrictPreferences(
715 portletPreferencesIds);
716
717 ServletContext servletContext = (ServletContext)request.getAttribute(
718 WebKeys.CTX);
719
720 InvokerPortlet invokerPortlet = PortletInstanceFactoryUtil.create(
721 portlet, servletContext);
722
723 PortletConfig portletConfig = PortletConfigFactoryUtil.create(
724 portlet, servletContext);
725 PortletContext portletContext = portletConfig.getPortletContext();
726
727 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
728 WebKeys.THEME_DISPLAY);
729
730 PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
731
732 Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
733
734 String portletPrimaryKey = PortletPermissionUtil.getPrimaryKey(
735 layout.getPlid(), portlet.getPortletId());
736
737 portletDisplay.setControlPanelCategory(
738 portlet.getControlPanelEntryCategory());
739 portletDisplay.setId(portlet.getPortletId());
740 portletDisplay.setInstanceId(portlet.getInstanceId());
741 portletDisplay.setNamespace(
742 PortalUtil.getPortletNamespace(portlet.getPortletId()));
743 portletDisplay.setPortletName(portletConfig.getPortletName());
744 portletDisplay.setResourcePK(portletPrimaryKey);
745 portletDisplay.setRootPortletId(portlet.getRootPortletId());
746
747 WebDAVStorage webDAVStorage = portlet.getWebDAVStorageInstance();
748
749 if (webDAVStorage != null) {
750 portletDisplay.setWebDAVEnabled(true);
751 }
752 else {
753 portletDisplay.setWebDAVEnabled(false);
754 }
755
756 ResourceRequestImpl resourceRequestImpl = ResourceRequestFactory.create(
757 request, portlet, invokerPortlet, portletContext, windowState,
758 portletMode, portletPreferences, layout.getPlid());
759
760 long companyId = PortalUtil.getCompanyId(request);
761
762 ResourceResponseImpl resourceResponseImpl =
763 ResourceResponseFactory.create(
764 resourceRequestImpl, response, portlet.getPortletId(),
765 companyId);
766
767 resourceRequestImpl.defineObjects(portletConfig, resourceResponseImpl);
768
769 try {
770 ServiceContext serviceContext = ServiceContextFactory.getInstance(
771 resourceRequestImpl);
772
773 ServiceContextThreadLocal.pushServiceContext(serviceContext);
774
775 invokerPortlet.serveResource(
776 resourceRequestImpl, resourceResponseImpl);
777
778 resourceResponseImpl.transferHeaders(response);
779 }
780 finally {
781 ServiceContextThreadLocal.popServiceContext();
782 }
783 }
784
785 private static Log _log = LogFactoryUtil.getLog(PortletContainerImpl.class);
786
787 }