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