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