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