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