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                    // Theme display
273    
274                    ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
275                            WebKeys.THEME_DISPLAY);
276    
277                    if (themeDisplay != null) {
278                            Layout layout = themeDisplay.getLayout();
279                            List<Layout> layouts = themeDisplay.getLayouts();
280    
281                            contextObjects.put("bodyCssClass", StringPool.BLANK);
282                            contextObjects.put("colorScheme", themeDisplay.getColorScheme());
283                            contextObjects.put("company", themeDisplay.getCompany());
284                            contextObjects.put("layout", layout);
285                            contextObjects.put("layouts", layouts);
286                            contextObjects.put(
287                                    "layoutTypePortlet", themeDisplay.getLayoutTypePortlet());
288                            contextObjects.put("locale", themeDisplay.getLocale());
289                            contextObjects.put(
290                                    "permissionChecker", themeDisplay.getPermissionChecker());
291                            contextObjects.put("plid", String.valueOf(themeDisplay.getPlid()));
292                            contextObjects.put(
293                                    "portletDisplay", themeDisplay.getPortletDisplay());
294                            contextObjects.put("realUser", themeDisplay.getRealUser());
295                            contextObjects.put(
296                                    "scopeGroupId", Long.valueOf(themeDisplay.getScopeGroupId()));
297                            contextObjects.put("themeDisplay", themeDisplay);
298                            contextObjects.put("timeZone", themeDisplay.getTimeZone());
299                            contextObjects.put("user", themeDisplay.getUser());
300    
301                            // Navigation items
302    
303                            if (layout != null) {
304                                    List<NavItem> navItems = NavItem.fromLayouts(
305                                            request, layouts, contextObjects);
306    
307                                    contextObjects.put("navItems", navItems);
308                            }
309    
310                            // Deprecated
311    
312                            contextObjects.put(
313                                    "portletGroupId", Long.valueOf(themeDisplay.getScopeGroupId()));
314                    }
315    
316                    // Theme
317    
318                    Theme theme = (Theme)request.getAttribute(WebKeys.THEME);
319    
320                    if ((theme == null) && (themeDisplay != null)) {
321                            theme = themeDisplay.getTheme();
322                    }
323    
324                    if (theme != null) {
325                            contextObjects.put("theme", theme);
326                    }
327    
328                    // Tiles attributes
329    
330                    prepareTiles(contextObjects, request);
331    
332                    // Page title and subtitle
333    
334                    ListMergeable<String> pageTitleListMergeable =
335                            (ListMergeable<String>)request.getAttribute(WebKeys.PAGE_TITLE);
336    
337                    if (pageTitleListMergeable != null) {
338                            String pageTitle = pageTitleListMergeable.mergeToString(
339                                    StringPool.SPACE);
340    
341                            contextObjects.put("pageTitle", pageTitle);
342                    }
343    
344                    ListMergeable<String> pageSubtitleListMergeable =
345                            (ListMergeable<String>)request.getAttribute(WebKeys.PAGE_SUBTITLE);
346    
347                    if (pageSubtitleListMergeable != null) {
348                            String pageSubtitle = pageSubtitleListMergeable.mergeToString(
349                                    StringPool.SPACE);
350    
351                            contextObjects.put("pageSubtitle", pageSubtitle);
352                    }
353            }
354    
355            public void removeAllHelperUtilities() {
356                    _helperUtilitiesMaps.clear();
357            }
358    
359            public void removeHelperUtilities(ClassLoader classLoader) {
360                    _helperUtilitiesMaps.remove(classLoader);
361            }
362    
363            public interface PACL {
364    
365                    public TemplateControlContext getTemplateControlContext();
366    
367            }
368    
369            protected void populateCommonHelperUtilities(
370                    Map<String, Object> variables) {
371    
372                    // Array util
373    
374                    variables.put("arrayUtil", ArrayUtil_IW.getInstance());
375    
376                    // Audit message factory
377    
378                    try {
379                            variables.put(
380                                    "auditMessageFactoryUtil",
381                                    AuditMessageFactoryUtil.getAuditMessageFactory());
382                    }
383                    catch (SecurityException se) {
384                            _log.error(se, se);
385                    }
386    
387                    // Audit router util
388    
389                    try {
390                            variables.put("auditRouterUtil", AuditRouterUtil.getAuditRouter());
391                    }
392                    catch (SecurityException se) {
393                            _log.error(se, se);
394                    }
395    
396                    // Browser sniffer
397    
398                    try {
399                            variables.put(
400                                    "browserSniffer", BrowserSnifferUtil.getBrowserSniffer());
401                    }
402                    catch (SecurityException se) {
403                            _log.error(se, se);
404                    }
405    
406                    // Calendar factory
407    
408                    try {
409                            variables.put(
410                                    "calendarFactory", CalendarFactoryUtil.getCalendarFactory());
411                    }
412                    catch (SecurityException se) {
413                            _log.error(se, se);
414                    }
415    
416                    // Date format
417    
418                    try {
419                            variables.put(
420                                    "dateFormatFactory",
421                                    FastDateFormatFactoryUtil.getFastDateFormatFactory());
422                    }
423                    catch (SecurityException se) {
424                            _log.error(se, se);
425                    }
426    
427                    // Date util
428    
429                    variables.put("dateUtil", DateUtil_IW.getInstance());
430    
431                    // Expando column service
432    
433                    try {
434                            ServiceLocator serviceLocator = ServiceLocator.getInstance();
435    
436                            // Service locator
437    
438                            variables.put("serviceLocator", serviceLocator);
439    
440                            try {
441                                    variables.put(
442                                            "expandoColumnLocalService",
443                                            serviceLocator.findService(
444                                                    ExpandoColumnLocalService.class.getName()));
445                            }
446                            catch (SecurityException se) {
447                                    _log.error(se, se);
448                            }
449    
450                            // Expando row service
451    
452                            try {
453                                    variables.put(
454                                            "expandoRowLocalService",
455                                            serviceLocator.findService(
456                                                    ExpandoRowLocalService.class.getName()));
457                            }
458                            catch (SecurityException se) {
459                                    _log.error(se, se);
460                            }
461    
462                            // Expando table service
463    
464                            try {
465                                    variables.put(
466                                            "expandoTableLocalService",
467                                            serviceLocator.findService(
468                                                    ExpandoTableLocalService.class.getName()));
469                            }
470                            catch (SecurityException se) {
471                                    _log.error(se, se);
472                            }
473    
474                            // Expando value service
475    
476                            try {
477                                    variables.put(
478                                            "expandoValueLocalService",
479                                            serviceLocator.findService(
480                                                    ExpandoValueLocalService.class.getName()));
481                            }
482                            catch (SecurityException se) {
483                                    _log.error(se, se);
484                            }
485                    }
486                    catch (SecurityException se) {
487                            _log.error(se, se);
488                    }
489    
490                    // Getter util
491    
492                    variables.put("getterUtil", GetterUtil_IW.getInstance());
493    
494                    // Html util
495    
496                    try {
497                            variables.put("htmlUtil", HtmlUtil.getHtml());
498                    }
499                    catch (SecurityException se) {
500                            _log.error(se, se);
501                    }
502    
503                    // Http util
504    
505                    try {
506                            variables.put("httpUtil", HttpUtil.getHttp());
507                    }
508                    catch (SecurityException se) {
509                            _log.error(se, se);
510                    }
511    
512                    // Image tool util
513    
514                    try {
515                            variables.put("imageToolUtil", ImageToolUtil.getImageTool());
516                    }
517                    catch (SecurityException se) {
518                            _log.error(se, se);
519                    }
520    
521                    // JSON factory util
522    
523                    try {
524                            variables.put("jsonFactoryUtil", JSONFactoryUtil.getJSONFactory());
525                    }
526                    catch (SecurityException se) {
527                            _log.error(se, se);
528                    }
529    
530                    // Language util
531    
532                    try {
533                            variables.put("languageUtil", LanguageUtil.getLanguage());
534                    }
535                    catch (SecurityException se) {
536                            _log.error(se, se);
537                    }
538    
539                    try {
540                            variables.put(
541                                    "unicodeLanguageUtil",
542                                    UnicodeLanguageUtil.getUnicodeLanguage());
543                    }
544                    catch (SecurityException se) {
545                            _log.error(se, se);
546                    }
547    
548                    // Locale util
549    
550                    try {
551                            variables.put("localeUtil", LocaleUtil.getInstance());
552                    }
553                    catch (SecurityException se) {
554                            _log.error(se, se);
555                    }
556    
557                    // Param util
558    
559                    variables.put("paramUtil", ParamUtil_IW.getInstance());
560    
561                    // Portal util
562    
563                    try {
564                            variables.put("portalUtil", PortalUtil.getPortal());
565                    }
566                    catch (SecurityException se) {
567                            _log.error(se, se);
568                    }
569    
570                    try {
571                            variables.put("portal", PortalUtil.getPortal());
572                    }
573                    catch (SecurityException se) {
574                            _log.error(se, se);
575                    }
576    
577                    // Prefs props util
578    
579                    try {
580                            variables.put("prefsPropsUtil", PrefsPropsUtil.getPrefsProps());
581                    }
582                    catch (SecurityException se) {
583                            _log.error(se, se);
584                    }
585    
586                    // Props util
587    
588                    try {
589                            variables.put("propsUtil", PropsUtil.getProps());
590                    }
591                    catch (SecurityException se) {
592                            _log.error(se, se);
593                    }
594    
595                    // Portlet mode factory
596    
597                    variables.put(
598                            "portletModeFactory", PortletModeFactory_IW.getInstance());
599    
600                    // Portlet URL factory
601    
602                    try {
603                            variables.put(
604                                    "portletURLFactory",
605                                    PortletURLFactoryUtil.getPortletURLFactory());
606                    }
607                    catch (SecurityException se) {
608                            _log.error(se, se);
609                    }
610    
611                    try {
612                            UtilLocator utilLocator = UtilLocator.getInstance();
613    
614                            // Util locator
615    
616                            variables.put("utilLocator", utilLocator);
617    
618                            // SAX reader util
619    
620                            try {
621                                    variables.put(
622                                            "saxReaderUtil",
623                                            utilLocator.findUtil(SAXReader.class.getName()));
624                            }
625                            catch (SecurityException se) {
626                                    _log.error(se, se);
627                            }
628                    }
629                    catch (SecurityException se) {
630                            _log.error(se, se);
631                    }
632    
633                    // Session clicks
634    
635                    variables.put("sessionClicks", SessionClicks_IW.getInstance());
636    
637                    // Static field getter
638    
639                    variables.put("staticFieldGetter", StaticFieldGetter.getInstance());
640    
641                    // String util
642    
643                    variables.put("stringUtil", StringUtil_IW.getInstance());
644    
645                    // Time zone util
646    
647                    variables.put("timeZoneUtil", TimeZoneUtil_IW.getInstance());
648    
649                    // Unicode formatter
650    
651                    variables.put("unicodeFormatter", UnicodeFormatter_IW.getInstance());
652    
653                    // Validator
654    
655                    variables.put("validator", Validator_IW.getInstance());
656    
657                    // Web server servlet token
658    
659                    try {
660                            variables.put(
661                                    "webServerToken",
662                                    WebServerServletTokenUtil.getWebServerServletToken());
663                    }
664                    catch (SecurityException se) {
665                            _log.error(se, se);
666                    }
667    
668                    // Window state factory
669    
670                    variables.put(
671                            "windowStateFactory", WindowStateFactory_IW.getInstance());
672    
673                    // Permissions
674    
675                    try {
676                            variables.put(
677                                    "accountPermission",
678                                    AccountPermissionUtil.getAccountPermission());
679                    }
680                    catch (SecurityException se) {
681                            _log.error(se, se);
682                    }
683    
684                    try {
685                            variables.put(
686                                    "commonPermission", CommonPermissionUtil.getCommonPermission());
687                    }
688                    catch (SecurityException se) {
689                            _log.error(se, se);
690                    }
691    
692                    try {
693                            variables.put(
694                                    "groupPermission", GroupPermissionUtil.getGroupPermission());
695                    }
696                    catch (SecurityException se) {
697                            _log.error(se, se);
698                    }
699    
700                    try {
701                            variables.put(
702                                    "layoutPermission", LayoutPermissionUtil.getLayoutPermission());
703                    }
704                    catch (SecurityException se) {
705                            _log.error(se, se);
706                    }
707    
708                    try {
709                            variables.put(
710                                    "organizationPermission",
711                                    OrganizationPermissionUtil.getOrganizationPermission());
712                    }
713                    catch (SecurityException se) {
714                            _log.error(se, se);
715                    }
716    
717                    try {
718                            variables.put(
719                                    "passwordPolicyPermission",
720                                    PasswordPolicyPermissionUtil.getPasswordPolicyPermission());
721                    }
722                    catch (SecurityException se) {
723                            _log.error(se, se);
724                    }
725    
726                    try {
727                            variables.put(
728                                    "portalPermission", PortalPermissionUtil.getPortalPermission());
729                    }
730                    catch (SecurityException se) {
731                            _log.error(se, se);
732                    }
733    
734                    try {
735                            variables.put(
736                                    "portletPermission",
737                                    PortletPermissionUtil.getPortletPermission());
738                    }
739                    catch (SecurityException se) {
740                            _log.error(se, se);
741                    }
742    
743                    Map<String, PortletProvider.Action> portletProviderActionMap =
744                            new HashMap<>();
745    
746                    for (PortletProvider.Action action : PortletProvider.Action.values()) {
747                            portletProviderActionMap.put(action.name(), action);
748                    }
749    
750                    try {
751                            variables.put("portletProviderAction", portletProviderActionMap);
752                    }
753                    catch (SecurityException se) {
754                            _log.error(se, se);
755                    }
756    
757                    try {
758                            variables.put(
759                                    "rolePermission", RolePermissionUtil.getRolePermission());
760                    }
761                    catch (SecurityException se) {
762                            _log.error(se, se);
763                    }
764    
765                    try {
766                            variables.put(
767                                    "userGroupPermission",
768                                    UserGroupPermissionUtil.getUserGroupPermission());
769                    }
770                    catch (SecurityException se) {
771                            _log.error(se, se);
772                    }
773    
774                    try {
775                            variables.put(
776                                    "userPermission", UserPermissionUtil.getUserPermission());
777                    }
778                    catch (SecurityException se) {
779                            _log.error(se, se);
780                    }
781    
782                    // Deprecated
783    
784                    populateDeprecatedCommonHelperUtilities(variables);
785            }
786    
787            @SuppressWarnings("deprecation")
788            protected void populateDeprecatedCommonHelperUtilities(
789                    Map<String, Object> variables) {
790    
791                    try {
792                            variables.put(
793                                    "dateFormats",
794                                    FastDateFormatFactoryUtil.getFastDateFormatFactory());
795                    }
796                    catch (SecurityException se) {
797                            _log.error(se, se);
798                    }
799    
800                    try {
801                            variables.put(
802                                    "imageToken",
803                                    WebServerServletTokenUtil.getWebServerServletToken());
804                    }
805                    catch (SecurityException se) {
806                            _log.error(se, se);
807                    }
808    
809                    try {
810                            variables.put(
811                                    "locationPermission",
812                                    OrganizationPermissionUtil.getOrganizationPermission());
813                    }
814                    catch (SecurityException se) {
815                            _log.error(se, se);
816                    }
817    
818                    try {
819                            com.liferay.portal.kernel.util.Randomizer_IW randomizer =
820                                    com.liferay.portal.kernel.util.Randomizer_IW.getInstance();
821    
822                            variables.put("randomizer", randomizer.getWrappedInstance());
823                    }
824                    catch (SecurityException se) {
825                            _log.error(se, se);
826                    }
827            }
828    
829            protected void populateExtraHelperUtilities(Map<String, Object> variables) {
830            }
831    
832            protected void prepareTiles(
833                    Map<String, Object> contextObjects, HttpServletRequest request) {
834    
835                    ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
836                            WebKeys.THEME_DISPLAY);
837    
838                    ComponentContext componentContext =
839                            (ComponentContext)request.getAttribute(
840                                    ComponentConstants.COMPONENT_CONTEXT);
841    
842                    if (componentContext == null) {
843                            themeDisplay.setTilesSelectable(true);
844    
845                            return;
846                    }
847    
848                    String tilesTitle = (String)componentContext.getAttribute("title");
849    
850                    themeDisplay.setTilesTitle(tilesTitle);
851    
852                    contextObjects.put("tilesTitle", tilesTitle);
853    
854                    String tilesContent = (String)componentContext.getAttribute("content");
855    
856                    themeDisplay.setTilesContent(tilesContent);
857    
858                    contextObjects.put("tilesContent", tilesContent);
859    
860                    boolean tilesSelectable = GetterUtil.getBoolean(
861                            (String)componentContext.getAttribute("selectable"));
862    
863                    themeDisplay.setTilesSelectable(tilesSelectable);
864    
865                    contextObjects.put("tilesSelectable", tilesSelectable);
866            }
867    
868            private static final Log _log = LogFactoryUtil.getLog(
869                    TemplateContextHelper.class);
870    
871            private static final PACL _pacl = new NoPACL();
872    
873            private final Map<ClassLoader, Map<String, Object>[]> _helperUtilitiesMaps =
874                    new ConcurrentHashMap<>();
875    
876            private static class NoPACL implements PACL {
877    
878                    @Override
879                    public TemplateControlContext getTemplateControlContext() {
880                            ClassLoader contextClassLoader =
881                                    ClassLoaderUtil.getContextClassLoader();
882    
883                            return new TemplateControlContext(null, contextClassLoader);
884                    }
885    
886            }
887    
888    }