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.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    /**
117     * @author Tina Tian
118     * @author Jorge Ferrer
119     */
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                    // Request
183    
184                    template.put("request", request);
185    
186                    // Portlet config
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                    // Render request
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                    // Render response
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                    // XML request
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                    // Theme display
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                            // Navigation items
264    
265                            if (layout != null) {
266                                    List<NavItem> navItems = NavItem.fromLayouts(
267                                            request, layouts, template);
268    
269                                    template.put("navItems", navItems);
270                            }
271    
272                            // Deprecated
273    
274                            template.put(
275                                    "portletGroupId", new Long(themeDisplay.getScopeGroupId()));
276                    }
277    
278                    // Theme
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                    // Tiles attributes
291    
292                    prepareTiles(template, request);
293    
294                    // Page title and subtitle
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                    // Array util
376    
377                    variables.put("arrayUtil", ArrayUtil_IW.getInstance());
378    
379                    // Audit message factory
380    
381                    try {
382                            variables.put(
383                                    "auditMessageFactoryUtil",
384                                    AuditMessageFactoryUtil.getAuditMessageFactory());
385                    }
386                    catch (SecurityException se) {
387                            _log.error(se, se);
388                    }
389    
390                    // Audit router util
391    
392                    try {
393                            variables.put("auditRouterUtil", AuditRouterUtil.getAuditRouter());
394                    }
395                    catch (SecurityException se) {
396                            _log.error(se, se);
397                    }
398    
399                    // Browser sniffer
400    
401                    try {
402                            variables.put(
403                                    "browserSniffer", BrowserSnifferUtil.getBrowserSniffer());
404                    }
405                    catch (SecurityException se) {
406                            _log.error(se, se);
407                    }
408    
409                    // Date format
410    
411                    try {
412                            variables.put(
413                                    "dateFormatFactory",
414                                    FastDateFormatFactoryUtil.getFastDateFormatFactory());
415                    }
416                    catch (SecurityException se) {
417                            _log.error(se, se);
418                    }
419    
420                    // Date util
421    
422                    variables.put("dateUtil", DateUtil_IW.getInstance());
423    
424                    // Dynamic data mapping util
425    
426                    try {
427                            variables.put("ddmUtil", DDMUtil.getDDM());
428                    }
429                    catch (SecurityException se) {
430                            _log.error(se, se);
431                    }
432    
433                    // Document library util
434    
435                    try {
436                            variables.put("dlUtil", DLUtil.getDL());
437                    }
438                    catch (SecurityException se) {
439                            _log.error(se, se);
440                    }
441    
442                    // Expando column service
443    
444                    try {
445                            ServiceLocator serviceLocator = ServiceLocator.getInstance();
446    
447                            // Service locator
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                            // Expando row service
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                            // Expando table service
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                            // Expando value service
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                    // Getter util
502    
503                    variables.put("getterUtil", GetterUtil_IW.getInstance());
504    
505                    // Html util
506    
507                    try {
508                            variables.put("htmlUtil", HtmlUtil.getHtml());
509                    }
510                    catch (SecurityException se) {
511                            _log.error(se, se);
512                    }
513    
514                    // Http util
515    
516                    try {
517                            variables.put("httpUtil", HttpUtil.getHttp());
518                    }
519                    catch (SecurityException se) {
520                            _log.error(se, se);
521                    }
522    
523                    // Journal content util
524    
525                    try {
526                            variables.put(
527                                    "journalContentUtil", JournalContentUtil.getJournalContent());
528                    }
529                    catch (SecurityException se) {
530                            _log.error(se, se);
531                    }
532    
533                    // JSON factory util
534    
535                    try {
536                            variables.put("jsonFactoryUtil", JSONFactoryUtil.getJSONFactory());
537                    }
538                    catch (SecurityException se) {
539                            _log.error(se, se);
540                    }
541    
542                    // Language util
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                    // Locale util
561    
562                    try {
563                            variables.put("localeUtil", LocaleUtil.getInstance());
564                    }
565                    catch (SecurityException se) {
566                            _log.error(se, se);
567                    }
568    
569                    // Param util
570    
571                    variables.put("paramUtil", ParamUtil_IW.getInstance());
572    
573                    // Portal util
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                    // Prefs props util
590    
591                    try {
592                            variables.put("prefsPropsUtil", PrefsPropsUtil.getPrefsProps());
593                    }
594                    catch (SecurityException se) {
595                            _log.error(se, se);
596                    }
597    
598                    // Props util
599    
600                    try {
601                            variables.put("propsUtil", PropsUtil.getProps());
602                    }
603                    catch (SecurityException se) {
604                            _log.error(se, se);
605                    }
606    
607                    // Portlet mode factory
608    
609                    variables.put(
610                            "portletModeFactory", PortletModeFactory_IW.getInstance());
611    
612                    // Portlet URL factory
613    
614                    try {
615                            variables.put(
616                                    "portletURLFactory",
617                                    PortletURLFactoryUtil.getPortletURLFactory());
618                    }
619                    catch (SecurityException se) {
620                            _log.error(se, se);
621                    }
622    
623                    // Randomizer
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                            // Util locator
637    
638                            variables.put("utilLocator", utilLocator);
639    
640                            // SAX reader util
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                    // Session clicks
656    
657                    variables.put("sessionClicks", SessionClicks_IW.getInstance());
658    
659                    // Static field getter
660    
661                    variables.put("staticFieldGetter", StaticFieldGetter.getInstance());
662    
663                    // String util
664    
665                    variables.put("stringUtil", StringUtil_IW.getInstance());
666    
667                    // Time zone util
668    
669                    variables.put("timeZoneUtil", TimeZoneUtil_IW.getInstance());
670    
671                    // Unicode formatter
672    
673                    variables.put("unicodeFormatter", UnicodeFormatter_IW.getInstance());
674    
675                    // Validator
676    
677                    variables.put("validator", Validator_IW.getInstance());
678    
679                    // VelocityTaglib methods
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                    // Web server servlet token
694    
695                    try {
696                            variables.put(
697                                    "webServerToken",
698                                    WebServerServletTokenUtil.getWebServerServletToken());
699                    }
700                    catch (SecurityException se) {
701                            _log.error(se, se);
702                    }
703    
704                    // Window state factory
705    
706                    variables.put(
707                            "windowStateFactory", WindowStateFactory_IW.getInstance());
708    
709                    // Permissions
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                    // Deprecated
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    }