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