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