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