001
014
015 package com.liferay.portal.template;
016
017 import com.liferay.portal.kernel.audit.AuditMessageFactoryUtil;
018 import com.liferay.portal.kernel.audit.AuditRouterUtil;
019 import com.liferay.portal.kernel.json.JSONFactoryUtil;
020 import com.liferay.portal.kernel.language.LanguageUtil;
021 import com.liferay.portal.kernel.language.UnicodeLanguageUtil;
022 import com.liferay.portal.kernel.log.Log;
023 import com.liferay.portal.kernel.log.LogFactoryUtil;
024 import com.liferay.portal.kernel.portlet.PortletModeFactory_IW;
025 import com.liferay.portal.kernel.portlet.WindowStateFactory_IW;
026 import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
027 import com.liferay.portal.kernel.template.TemplateContextType;
028 import com.liferay.portal.kernel.templateparser.TemplateContext;
029 import com.liferay.portal.kernel.util.ArrayUtil_IW;
030 import com.liferay.portal.kernel.util.DateUtil_IW;
031 import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
032 import com.liferay.portal.kernel.util.GetterUtil;
033 import com.liferay.portal.kernel.util.GetterUtil_IW;
034 import com.liferay.portal.kernel.util.HtmlUtil;
035 import com.liferay.portal.kernel.util.HttpUtil;
036 import com.liferay.portal.kernel.util.JavaConstants;
037 import com.liferay.portal.kernel.util.ListMergeable;
038 import com.liferay.portal.kernel.util.LocaleUtil;
039 import com.liferay.portal.kernel.util.ParamUtil_IW;
040 import com.liferay.portal.kernel.util.PrefsPropsUtil;
041 import com.liferay.portal.kernel.util.PropsUtil;
042 import com.liferay.portal.kernel.util.Randomizer_IW;
043 import com.liferay.portal.kernel.util.StaticFieldGetter;
044 import com.liferay.portal.kernel.util.StringPool;
045 import com.liferay.portal.kernel.util.StringUtil_IW;
046 import com.liferay.portal.kernel.util.TimeZoneUtil_IW;
047 import com.liferay.portal.kernel.util.UnicodeFormatter_IW;
048 import com.liferay.portal.kernel.util.Validator_IW;
049 import com.liferay.portal.kernel.xml.SAXReader;
050 import com.liferay.portal.model.Layout;
051 import com.liferay.portal.model.Theme;
052 import com.liferay.portal.security.lang.PortalSecurityManagerThreadLocal;
053 import com.liferay.portal.security.pacl.PACLPolicy;
054 import com.liferay.portal.security.pacl.PACLPolicyManager;
055 import com.liferay.portal.service.permission.AccountPermissionUtil;
056 import com.liferay.portal.service.permission.CommonPermissionUtil;
057 import com.liferay.portal.service.permission.GroupPermissionUtil;
058 import com.liferay.portal.service.permission.LayoutPermissionUtil;
059 import com.liferay.portal.service.permission.OrganizationPermissionUtil;
060 import com.liferay.portal.service.permission.PasswordPolicyPermissionUtil;
061 import com.liferay.portal.service.permission.PortalPermissionUtil;
062 import com.liferay.portal.service.permission.PortletPermissionUtil;
063 import com.liferay.portal.service.permission.RolePermissionUtil;
064 import com.liferay.portal.service.permission.UserGroupPermissionUtil;
065 import com.liferay.portal.service.permission.UserPermissionUtil;
066 import com.liferay.portal.theme.NavItem;
067 import com.liferay.portal.theme.ThemeDisplay;
068 import com.liferay.portal.util.ClassLoaderUtil;
069 import com.liferay.portal.util.PortalUtil;
070 import com.liferay.portal.util.SessionClicks_IW;
071 import com.liferay.portal.util.WebKeys;
072 import com.liferay.portal.webserver.WebServerServletTokenUtil;
073 import com.liferay.portlet.PortletConfigImpl;
074 import com.liferay.portlet.PortletURLFactoryUtil;
075 import com.liferay.portlet.documentlibrary.util.DLUtil;
076 import com.liferay.portlet.expando.service.ExpandoColumnLocalService;
077 import com.liferay.portlet.expando.service.ExpandoRowLocalService;
078 import com.liferay.portlet.expando.service.ExpandoTableLocalService;
079 import com.liferay.portlet.expando.service.ExpandoValueLocalService;
080 import com.liferay.portlet.journalcontent.util.JournalContentUtil;
081 import com.liferay.taglib.util.VelocityTaglibImpl;
082 import com.liferay.util.portlet.PortletRequestUtil;
083
084 import java.lang.reflect.Method;
085
086 import java.util.Collections;
087 import java.util.EnumMap;
088 import java.util.HashMap;
089 import java.util.List;
090 import java.util.Map;
091 import java.util.Set;
092 import java.util.concurrent.ConcurrentHashMap;
093
094 import javax.portlet.PortletRequest;
095 import javax.portlet.PortletResponse;
096 import javax.portlet.RenderRequest;
097 import javax.portlet.RenderResponse;
098
099 import javax.servlet.http.HttpServletRequest;
100
101 import org.apache.struts.taglib.tiles.ComponentConstants;
102 import org.apache.struts.tiles.ComponentContext;
103
104
107 public class TemplateContextHelper {
108
109 public Map<String, Object> getHelperUtilities(
110 TemplateContextType templateContextType) {
111
112 ClassLoader contextClassLoader =
113 ClassLoaderUtil.getContextClassLoader();
114 ClassLoader portalClassLoader = ClassLoaderUtil.getPortalClassLoader();
115
116 if (contextClassLoader == portalClassLoader) {
117 return doGetHelperUtilities(
118 contextClassLoader, templateContextType);
119 }
120
121 PACLPolicy threadLocalPACLPolicy =
122 PortalSecurityManagerThreadLocal.getPACLPolicy();
123
124 try {
125 PACLPolicy contextClassLoaderPACLPolicy =
126 PACLPolicyManager.getPACLPolicy(contextClassLoader);
127
128 PortalSecurityManagerThreadLocal.setPACLPolicy(
129 contextClassLoaderPACLPolicy);
130
131 return doGetHelperUtilities(
132 contextClassLoader, templateContextType);
133 }
134 finally {
135 PortalSecurityManagerThreadLocal.setPACLPolicy(
136 threadLocalPACLPolicy);
137 }
138 }
139
140 public Set<String> getRestrictedVariables() {
141 return Collections.emptySet();
142 }
143
144 public void prepare(
145 TemplateContext templateContext, HttpServletRequest request) {
146
147
148
149 templateContext.put("request", request);
150
151
152
153 PortletConfigImpl portletConfigImpl =
154 (PortletConfigImpl)request.getAttribute(
155 JavaConstants.JAVAX_PORTLET_CONFIG);
156
157 if (portletConfigImpl != null) {
158 templateContext.put("portletConfig", portletConfigImpl);
159 }
160
161
162
163 final PortletRequest portletRequest =
164 (PortletRequest)request.getAttribute(
165 JavaConstants.JAVAX_PORTLET_REQUEST);
166
167 if (portletRequest != null) {
168 if (portletRequest instanceof RenderRequest) {
169 templateContext.put("renderRequest", portletRequest);
170 }
171 }
172
173
174
175 final PortletResponse portletResponse =
176 (PortletResponse)request.getAttribute(
177 JavaConstants.JAVAX_PORTLET_RESPONSE);
178
179 if (portletResponse != null) {
180 if (portletResponse instanceof RenderResponse) {
181 templateContext.put("renderResponse", portletResponse);
182 }
183 }
184
185
186
187 if ((portletRequest != null) && (portletResponse != null)) {
188 templateContext.put(
189 "xmlRequest",
190 new Object() {
191
192 @Override
193 public String toString() {
194 return PortletRequestUtil.toXML(
195 portletRequest, portletResponse);
196 }
197
198 }
199 );
200 }
201
202
203
204 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
205 WebKeys.THEME_DISPLAY);
206
207 if (themeDisplay != null) {
208 Layout layout = themeDisplay.getLayout();
209 List<Layout> layouts = themeDisplay.getLayouts();
210
211 templateContext.put("themeDisplay", themeDisplay);
212 templateContext.put("company", themeDisplay.getCompany());
213 templateContext.put("user", themeDisplay.getUser());
214 templateContext.put("realUser", themeDisplay.getRealUser());
215 templateContext.put("layout", layout);
216 templateContext.put("layouts", layouts);
217 templateContext.put("plid", String.valueOf(themeDisplay.getPlid()));
218 templateContext.put(
219 "layoutTypePortlet", themeDisplay.getLayoutTypePortlet());
220 templateContext.put(
221 "scopeGroupId", new Long(themeDisplay.getScopeGroupId()));
222 templateContext.put(
223 "permissionChecker", themeDisplay.getPermissionChecker());
224 templateContext.put("locale", themeDisplay.getLocale());
225 templateContext.put("timeZone", themeDisplay.getTimeZone());
226 templateContext.put("colorScheme", themeDisplay.getColorScheme());
227 templateContext.put(
228 "portletDisplay", themeDisplay.getPortletDisplay());
229
230
231
232 if (layout != null) {
233 List<NavItem> navItems = NavItem.fromLayouts(
234 request, layouts, templateContext);
235
236 templateContext.put("navItems", navItems);
237 }
238
239
240
241 templateContext.put(
242 "portletGroupId", new Long(themeDisplay.getScopeGroupId()));
243 }
244
245
246
247 Theme theme = (Theme)request.getAttribute(WebKeys.THEME);
248
249 if ((theme == null) && (themeDisplay != null)) {
250 theme = themeDisplay.getTheme();
251 }
252
253 if (theme != null) {
254 templateContext.put("theme", theme);
255 }
256
257
258
259 prepareTiles(templateContext, request);
260
261
262
263 ListMergeable<String> pageTitleListMergeable =
264 (ListMergeable<String>)request.getAttribute(WebKeys.PAGE_TITLE);
265
266 if (pageTitleListMergeable != null) {
267 String pageTitle = pageTitleListMergeable.mergeToString(
268 StringPool.SPACE);
269
270 templateContext.put("pageTitle", pageTitle);
271 }
272
273 ListMergeable<String> pageSubtitleListMergeable =
274 (ListMergeable<String>)request.getAttribute(WebKeys.PAGE_SUBTITLE);
275
276 if (pageSubtitleListMergeable != null) {
277 String pageSubtitle = pageSubtitleListMergeable.mergeToString(
278 StringPool.SPACE);
279
280 templateContext.put("pageSubtitle", pageSubtitle);
281 }
282 }
283
284 public void removeAllHelperUtilities() {
285 _helperUtilitiesMaps.clear();
286 }
287
288 public void removeHelperUtilities(ClassLoader classLoader) {
289 _helperUtilitiesMaps.remove(classLoader);
290 }
291
292 protected Map<String, Object> doGetHelperUtilities(
293 ClassLoader classLoader, TemplateContextType templateContextType) {
294
295 HelperUtilitiesMap helperUtilitiesMap = _helperUtilitiesMaps.get(
296 classLoader);
297
298 if (helperUtilitiesMap == null) {
299 helperUtilitiesMap = new HelperUtilitiesMap(
300 TemplateContextType.class);
301
302 _helperUtilitiesMaps.put(classLoader, helperUtilitiesMap);
303 }
304
305 Map<String, Object> helperUtilities = helperUtilitiesMap.get(
306 templateContextType);
307
308 if (helperUtilities != null) {
309 return helperUtilities;
310 }
311
312 helperUtilities = new HashMap<String, Object>();
313
314 populateCommonHelperUtilities(helperUtilities);
315 populateExtraHelperUtilities(helperUtilities);
316
317 if (templateContextType.equals(TemplateContextType.RESTRICTED)) {
318 Set<String> restrictedVariables = getRestrictedVariables();
319
320 for (String restrictedVariable : restrictedVariables) {
321 helperUtilities.remove(restrictedVariable);
322 }
323 }
324
325 helperUtilities = Collections.unmodifiableMap(helperUtilities);
326
327 helperUtilitiesMap.put(templateContextType, helperUtilities);
328
329 return helperUtilities;
330 }
331
332 protected void populateCommonHelperUtilities(
333 Map<String, Object> variables) {
334
335
336
337 variables.put("arrayUtil", ArrayUtil_IW.getInstance());
338
339
340
341 try {
342 variables.put(
343 "auditMessageFactoryUtil",
344 AuditMessageFactoryUtil.getAuditMessageFactory());
345 }
346 catch (SecurityException se) {
347 _log.error(se, se);
348 }
349
350
351
352 try {
353 variables.put("auditRouterUtil", AuditRouterUtil.getAuditRouter());
354 }
355 catch (SecurityException se) {
356 _log.error(se, se);
357 }
358
359
360
361 try {
362 variables.put(
363 "browserSniffer", BrowserSnifferUtil.getBrowserSniffer());
364 }
365 catch (SecurityException se) {
366 _log.error(se, se);
367 }
368
369
370
371 try {
372 variables.put(
373 "dateFormatFactory",
374 FastDateFormatFactoryUtil.getFastDateFormatFactory());
375 }
376 catch (SecurityException se) {
377 _log.error(se, se);
378 }
379
380
381
382 variables.put("dateUtil", DateUtil_IW.getInstance());
383
384
385
386 variables.put("dlUtil", DLUtil.getDL());
387
388
389
390 try {
391 ServiceLocator serviceLocator = ServiceLocator.getInstance();
392
393
394
395 variables.put("serviceLocator", serviceLocator);
396
397 try {
398 variables.put(
399 "expandoColumnLocalService",
400 serviceLocator.findService(
401 ExpandoColumnLocalService.class.getName()));
402 }
403 catch (SecurityException se) {
404 _log.error(se, se);
405 }
406
407
408
409 try {
410 variables.put(
411 "expandoRowLocalService",
412 serviceLocator.findService(
413 ExpandoRowLocalService.class.getName()));
414 }
415 catch (SecurityException se) {
416 _log.error(se, se);
417 }
418
419
420
421 try {
422 variables.put(
423 "expandoTableLocalService",
424 serviceLocator.findService(
425 ExpandoTableLocalService.class.getName()));
426 }
427 catch (SecurityException se) {
428 _log.error(se, se);
429 }
430
431
432
433 try {
434 variables.put(
435 "expandoValueLocalService",
436 serviceLocator.findService(
437 ExpandoValueLocalService.class.getName()));
438 }
439 catch (SecurityException se) {
440 _log.error(se, se);
441 }
442 }
443 catch (SecurityException se) {
444 _log.error(se, se);
445 }
446
447
448
449 variables.put("getterUtil", GetterUtil_IW.getInstance());
450
451
452
453 try {
454 variables.put("htmlUtil", HtmlUtil.getHtml());
455 }
456 catch (SecurityException se) {
457 _log.error(se, se);
458 }
459
460
461
462 try {
463 variables.put("httpUtil", HttpUtil.getHttp());
464 }
465 catch (SecurityException se) {
466 _log.error(se, se);
467 }
468
469
470
471 try {
472 variables.put(
473 "journalContentUtil", JournalContentUtil.getJournalContent());
474 }
475 catch (SecurityException se) {
476 _log.error(se, se);
477 }
478
479
480
481 try {
482 variables.put("jsonFactoryUtil", JSONFactoryUtil.getJSONFactory());
483 }
484 catch (SecurityException se) {
485 _log.error(se, se);
486 }
487
488
489
490 try {
491 variables.put("languageUtil", LanguageUtil.getLanguage());
492 }
493 catch (SecurityException se) {
494 _log.error(se, se);
495 }
496
497 try {
498 variables.put(
499 "unicodeLanguageUtil",
500 UnicodeLanguageUtil.getUnicodeLanguage());
501 }
502 catch (SecurityException se) {
503 _log.error(se, se);
504 }
505
506
507
508 try {
509 variables.put("localeUtil", LocaleUtil.getInstance());
510 }
511 catch (SecurityException se) {
512 _log.error(se, se);
513 }
514
515
516
517 variables.put("paramUtil", ParamUtil_IW.getInstance());
518
519
520
521 try {
522 variables.put("portalUtil", PortalUtil.getPortal());
523 }
524 catch (SecurityException se) {
525 _log.error(se, se);
526 }
527
528 try {
529 variables.put("portal", PortalUtil.getPortal());
530 }
531 catch (SecurityException se) {
532 _log.error(se, se);
533 }
534
535
536
537 try {
538 variables.put("prefsPropsUtil", PrefsPropsUtil.getPrefsProps());
539 }
540 catch (SecurityException se) {
541 _log.error(se, se);
542 }
543
544
545
546 try {
547 variables.put("propsUtil", PropsUtil.getProps());
548 }
549 catch (SecurityException se) {
550 _log.error(se, se);
551 }
552
553
554
555 variables.put(
556 "portletModeFactory", PortletModeFactory_IW.getInstance());
557
558
559
560 try {
561 variables.put(
562 "portletURLFactory",
563 PortletURLFactoryUtil.getPortletURLFactory());
564 }
565 catch (SecurityException se) {
566 _log.error(se, se);
567 }
568
569
570
571 try {
572 variables.put(
573 "randomizer", Randomizer_IW.getInstance().getWrappedInstance());
574 }
575 catch (SecurityException se) {
576 _log.error(se, se);
577 }
578
579 try {
580 UtilLocator utilLocator = UtilLocator.getInstance();
581
582
583
584 variables.put("utilLocator", utilLocator);
585
586
587
588 try {
589 variables.put(
590 "saxReaderUtil",
591 utilLocator.findUtil(SAXReader.class.getName()));
592 }
593 catch (SecurityException se) {
594 _log.error(se, se);
595 }
596 }
597 catch (SecurityException se) {
598 _log.error(se, se);
599 }
600
601
602
603 variables.put("sessionClicks", SessionClicks_IW.getInstance());
604
605
606
607 variables.put("staticFieldGetter", StaticFieldGetter.getInstance());
608
609
610
611 variables.put("stringUtil", StringUtil_IW.getInstance());
612
613
614
615 variables.put("timeZoneUtil", TimeZoneUtil_IW.getInstance());
616
617
618
619 variables.put("unicodeFormatter", UnicodeFormatter_IW.getInstance());
620
621
622
623 variables.put("validator", Validator_IW.getInstance());
624
625
626
627 try {
628 Class<?> clazz = VelocityTaglibImpl.class;
629
630 Method method = clazz.getMethod(
631 "layoutIcon", new Class[] {Layout.class});
632
633 variables.put("velocityTaglib#layoutIcon", method);
634 }
635 catch (Exception e) {
636 _log.error(e, e);
637 }
638
639
640
641 try {
642 variables.put(
643 "webServerToken",
644 WebServerServletTokenUtil.getWebServerServletToken());
645 }
646 catch (SecurityException se) {
647 _log.error(se, se);
648 }
649
650
651
652 variables.put(
653 "windowStateFactory", WindowStateFactory_IW.getInstance());
654
655
656
657 try {
658 variables.put(
659 "accountPermission",
660 AccountPermissionUtil.getAccountPermission());
661 }
662 catch (SecurityException se) {
663 _log.error(se, se);
664 }
665
666 try {
667 variables.put(
668 "commonPermission", CommonPermissionUtil.getCommonPermission());
669 }
670 catch (SecurityException se) {
671 _log.error(se, se);
672 }
673
674 try {
675 variables.put(
676 "groupPermission", GroupPermissionUtil.getGroupPermission());
677 }
678 catch (SecurityException se) {
679 _log.error(se, se);
680 }
681
682 try {
683 variables.put(
684 "layoutPermission", LayoutPermissionUtil.getLayoutPermission());
685 }
686 catch (SecurityException se) {
687 _log.error(se, se);
688 }
689
690 try {
691 variables.put(
692 "organizationPermission",
693 OrganizationPermissionUtil.getOrganizationPermission());
694 }
695 catch (SecurityException se) {
696 _log.error(se, se);
697 }
698
699 try {
700 variables.put(
701 "passwordPolicyPermission",
702 PasswordPolicyPermissionUtil.getPasswordPolicyPermission());
703 }
704 catch (SecurityException se) {
705 _log.error(se, se);
706 }
707
708 try {
709 variables.put(
710 "portalPermission", PortalPermissionUtil.getPortalPermission());
711 }
712 catch (SecurityException se) {
713 _log.error(se, se);
714 }
715
716 try {
717 variables.put(
718 "portletPermission",
719 PortletPermissionUtil.getPortletPermission());
720 }
721 catch (SecurityException se) {
722 _log.error(se, se);
723 }
724
725 try {
726 variables.put(
727 "rolePermission", RolePermissionUtil.getRolePermission());
728 }
729 catch (SecurityException se) {
730 _log.error(se, se);
731 }
732
733 try {
734 variables.put(
735 "userGroupPermission",
736 UserGroupPermissionUtil.getUserGroupPermission());
737 }
738 catch (SecurityException se) {
739 _log.error(se, se);
740 }
741
742 try {
743 variables.put(
744 "userPermission", UserPermissionUtil.getUserPermission());
745 }
746 catch (SecurityException se) {
747 _log.error(se, se);
748 }
749
750
751
752 try {
753 variables.put(
754 "dateFormats",
755 FastDateFormatFactoryUtil.getFastDateFormatFactory());
756 }
757 catch (SecurityException se) {
758 _log.error(se, se);
759 }
760
761 try {
762 variables.put(
763 "imageToken",
764 WebServerServletTokenUtil.getWebServerServletToken());
765 }
766 catch (SecurityException se) {
767 _log.error(se, se);
768 }
769
770 try {
771 variables.put(
772 "locationPermission",
773 OrganizationPermissionUtil.getOrganizationPermission());
774 }
775 catch (SecurityException se) {
776 _log.error(se, se);
777 }
778 }
779
780 protected void populateExtraHelperUtilities(Map<String, Object> variables) {
781 }
782
783 protected void prepareTiles(
784 TemplateContext templateContext, HttpServletRequest request) {
785
786 ComponentContext componentContext =
787 (ComponentContext)request.getAttribute(
788 ComponentConstants.COMPONENT_CONTEXT);
789
790 if (componentContext == null) {
791 return;
792 }
793
794 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
795 WebKeys.THEME_DISPLAY);
796
797 String tilesTitle = (String)componentContext.getAttribute("title");
798
799 themeDisplay.setTilesTitle(tilesTitle);
800
801 templateContext.put("tilesTitle", tilesTitle);
802
803 String tilesContent = (String)componentContext.getAttribute("content");
804
805 themeDisplay.setTilesContent(tilesContent);
806
807 templateContext.put("tilesContent", tilesContent);
808
809 boolean tilesSelectable = GetterUtil.getBoolean(
810 (String)componentContext.getAttribute("selectable"));
811
812 themeDisplay.setTilesSelectable(tilesSelectable);
813
814 templateContext.put("tilesSelectable", tilesSelectable);
815 }
816
817 private static Log _log = LogFactoryUtil.getLog(
818 TemplateContextHelper.class);
819
820 private Map<ClassLoader, HelperUtilitiesMap>
821 _helperUtilitiesMaps = new ConcurrentHashMap
822 <ClassLoader, HelperUtilitiesMap>();
823
824 private class HelperUtilitiesMap
825 extends EnumMap<TemplateContextType, Map<String, Object>> {
826
827 public HelperUtilitiesMap(Class<TemplateContextType> keyClazz) {
828 super(keyClazz);
829 }
830
831 }
832
833 }