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