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