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