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