1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portal.velocity;
16  
17  import com.liferay.portal.kernel.audit.AuditMessageFactoryUtil;
18  import com.liferay.portal.kernel.audit.AuditRouterUtil;
19  import com.liferay.portal.kernel.language.LanguageUtil;
20  import com.liferay.portal.kernel.language.UnicodeLanguageUtil;
21  import com.liferay.portal.kernel.servlet.BrowserSnifferUtil;
22  import com.liferay.portal.kernel.servlet.ImageServletTokenUtil;
23  import com.liferay.portal.kernel.util.ArrayUtil;
24  import com.liferay.portal.kernel.util.ArrayUtil_IW;
25  import com.liferay.portal.kernel.util.DateUtil_IW;
26  import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
27  import com.liferay.portal.kernel.util.GetterUtil;
28  import com.liferay.portal.kernel.util.GetterUtil_IW;
29  import com.liferay.portal.kernel.util.HtmlUtil;
30  import com.liferay.portal.kernel.util.HttpUtil;
31  import com.liferay.portal.kernel.util.JavaConstants;
32  import com.liferay.portal.kernel.util.LocaleUtil;
33  import com.liferay.portal.kernel.util.ParamUtil_IW;
34  import com.liferay.portal.kernel.util.Randomizer_IW;
35  import com.liferay.portal.kernel.util.StaticFieldGetter;
36  import com.liferay.portal.kernel.util.StringUtil_IW;
37  import com.liferay.portal.kernel.util.TimeZoneUtil_IW;
38  import com.liferay.portal.kernel.util.UnicodeFormatter_IW;
39  import com.liferay.portal.kernel.util.Validator;
40  import com.liferay.portal.kernel.util.Validator_IW;
41  import com.liferay.portal.kernel.velocity.VelocityContext;
42  import com.liferay.portal.kernel.xml.SAXReader;
43  import com.liferay.portal.model.Layout;
44  import com.liferay.portal.model.Theme;
45  import com.liferay.portal.service.permission.AccountPermissionUtil;
46  import com.liferay.portal.service.permission.CommonPermissionUtil;
47  import com.liferay.portal.service.permission.GroupPermissionUtil;
48  import com.liferay.portal.service.permission.LayoutPermissionUtil;
49  import com.liferay.portal.service.permission.OrganizationPermissionUtil;
50  import com.liferay.portal.service.permission.PasswordPolicyPermissionUtil;
51  import com.liferay.portal.service.permission.PortalPermissionUtil;
52  import com.liferay.portal.service.permission.PortletPermissionUtil;
53  import com.liferay.portal.service.permission.RolePermissionUtil;
54  import com.liferay.portal.service.permission.UserGroupPermissionUtil;
55  import com.liferay.portal.service.permission.UserPermissionUtil;
56  import com.liferay.portal.theme.NavItem;
57  import com.liferay.portal.theme.RequestVars;
58  import com.liferay.portal.theme.ThemeDisplay;
59  import com.liferay.portal.util.PortalUtil;
60  import com.liferay.portal.util.PrefsPropsUtil_IW;
61  import com.liferay.portal.util.PropsUtil_IW;
62  import com.liferay.portal.util.SessionClicks_IW;
63  import com.liferay.portal.util.WebKeys;
64  import com.liferay.portlet.PortletConfigImpl;
65  import com.liferay.portlet.PortletURLFactoryUtil;
66  import com.liferay.portlet.expando.service.ExpandoColumnLocalService;
67  import com.liferay.portlet.expando.service.ExpandoRowLocalService;
68  import com.liferay.portlet.expando.service.ExpandoTableLocalService;
69  import com.liferay.portlet.expando.service.ExpandoValueLocalService;
70  import com.liferay.portlet.journalcontent.util.JournalContentUtil;
71  import com.liferay.util.portlet.PortletRequestUtil;
72  
73  import java.util.List;
74  import java.util.Map;
75  
76  import javax.portlet.PortletRequest;
77  import javax.portlet.PortletResponse;
78  import javax.portlet.RenderRequest;
79  import javax.portlet.RenderResponse;
80  
81  import javax.servlet.http.HttpServletRequest;
82  
83  import org.apache.struts.taglib.tiles.ComponentConstants;
84  import org.apache.struts.tiles.ComponentContext;
85  import org.apache.velocity.tools.generic.DateTool;
86  import org.apache.velocity.tools.generic.EscapeTool;
87  import org.apache.velocity.tools.generic.IteratorTool;
88  import org.apache.velocity.tools.generic.ListTool;
89  import org.apache.velocity.tools.generic.MathTool;
90  import org.apache.velocity.tools.generic.NumberTool;
91  import org.apache.velocity.tools.generic.SortTool;
92  
93  /**
94   * <a href="VelocityVariables.java.html"><b><i>View Source</i></b></a>
95   *
96   * @author Brian Wing Shun Chan
97   * @author Raymond Augé
98   */
99  public class VelocityVariables {
100 
101     public static void insertHelperUtilities(
102         VelocityContext velocityContext, String[] restrictedVariables) {
103 
104         // Array util
105 
106         velocityContext.put("arrayUtil", ArrayUtil_IW.getInstance());
107 
108         // Audit message factory
109 
110         velocityContext.put(
111             "auditMessageFactoryUtil",
112             AuditMessageFactoryUtil.getAuditMessageFactory());
113 
114         // Audit router util
115 
116         velocityContext.put(
117             "auditRouterUtil", AuditRouterUtil.getAuditRouter());
118 
119         // Browser sniffer
120 
121         velocityContext.put(
122             "browserSniffer", BrowserSnifferUtil.getBrowserSniffer());
123 
124         // Date format
125 
126         velocityContext.put(
127             "dateFormatFactory",
128             FastDateFormatFactoryUtil.getFastDateFormatFactory());
129 
130         // Date tool
131 
132         velocityContext.put("dateTool", new DateTool());
133 
134         // Date util
135 
136         velocityContext.put("dateUtil", DateUtil_IW.getInstance());
137 
138         // Escape tool
139 
140         velocityContext.put("escapeTool", new EscapeTool());
141 
142         // Expando column service
143 
144         ServiceLocator serviceLocator = ServiceLocator.getInstance();
145 
146         velocityContext.put(
147             "expandoColumnLocalService",
148             serviceLocator.findService(
149                 ExpandoColumnLocalService.class.getName()));
150 
151         // Expando row service
152 
153         velocityContext.put(
154             "expandoRowLocalService",
155             serviceLocator.findService(ExpandoRowLocalService.class.getName()));
156 
157         // Expando table service
158 
159         velocityContext.put(
160             "expandoTableLocalService",
161             serviceLocator.findService(
162                 ExpandoTableLocalService.class.getName()));
163 
164         // Expando value service
165 
166         velocityContext.put(
167             "expandoValueLocalService",
168             serviceLocator.findService(
169                 ExpandoValueLocalService.class.getName()));
170 
171         // Getter util
172 
173         velocityContext.put("getterUtil", GetterUtil_IW.getInstance());
174 
175         // Html util
176 
177         velocityContext.put("htmlUtil", HtmlUtil.getHtml());
178 
179         // Http util
180 
181         velocityContext.put("httpUtil", HttpUtil.getHttp());
182 
183         // Image servlet token
184 
185         velocityContext.put(
186             "imageToken", ImageServletTokenUtil.getImageServletToken());
187 
188         // Iterator tool
189 
190         velocityContext.put("iteratorTool", new IteratorTool());
191 
192         // Journal content util
193 
194         velocityContext.put(
195             "journalContentUtil", JournalContentUtil.getJournalContent());
196 
197         // Language util
198 
199         velocityContext.put("languageUtil", LanguageUtil.getLanguage());
200         velocityContext.put(
201             "unicodeLanguageUtil", UnicodeLanguageUtil.getUnicodeLanguage());
202 
203         // List tool
204 
205         velocityContext.put("listTool", new ListTool());
206 
207         // Locale util
208 
209         velocityContext.put("localeUtil", LocaleUtil.getInstance());
210 
211         // Math tool
212 
213         velocityContext.put("mathTool", new MathTool());
214 
215         // Number tool
216 
217         velocityContext.put("numberTool", new NumberTool());
218 
219         // Param util
220 
221         velocityContext.put("paramUtil", ParamUtil_IW.getInstance());
222 
223         // Portal util
224 
225         _insertHelperUtility(
226             velocityContext, restrictedVariables, "portalUtil",
227             PortalUtil.getPortal());
228         _insertHelperUtility(
229             velocityContext, restrictedVariables, "portal",
230             PortalUtil.getPortal());
231 
232         // Prefs props util
233 
234         _insertHelperUtility(
235             velocityContext, restrictedVariables, "prefsPropsUtil",
236             PrefsPropsUtil_IW.getInstance());
237 
238         // Props util
239 
240         _insertHelperUtility(
241             velocityContext, restrictedVariables, "propsUtil",
242             PropsUtil_IW.getInstance());
243 
244         // Portlet URL factory
245 
246         velocityContext.put(
247             "portletURLFactory", PortletURLFactoryUtil.getPortletURLFactory());
248 
249         // Portlet preferences
250 
251         _insertHelperUtility(
252             velocityContext, restrictedVariables, "velocityPortletPreferences",
253             new VelocityPortletPreferences());
254 
255         // Randomizer
256 
257         velocityContext.put(
258             "randomizer", Randomizer_IW.getInstance().getWrappedInstance());
259 
260         // SAX reader util
261 
262         UtilLocator utilLocator = UtilLocator.getInstance();
263 
264         velocityContext.put(
265             "saxReaderUtil", utilLocator.findUtil(SAXReader.class.getName()));
266 
267         // Service locator
268 
269         _insertHelperUtility(
270             velocityContext, restrictedVariables, "serviceLocator",
271             serviceLocator);
272 
273         // Session clicks
274 
275         _insertHelperUtility(
276             velocityContext, restrictedVariables, "sessionClicks",
277             SessionClicks_IW.getInstance());
278 
279         // Sort tool
280 
281         velocityContext.put("sortTool", new SortTool());
282 
283         // Static field getter
284 
285         velocityContext.put(
286             "staticFieldGetter", StaticFieldGetter.getInstance());
287 
288         // String util
289 
290         velocityContext.put("stringUtil", StringUtil_IW.getInstance());
291 
292         // Time zone util
293 
294         velocityContext.put("timeZoneUtil", TimeZoneUtil_IW.getInstance());
295 
296         // Util locator
297 
298         _insertHelperUtility(
299             velocityContext, restrictedVariables, "utilLocator", utilLocator);
300 
301         // Unicode formatter
302 
303         velocityContext.put(
304             "unicodeFormatter", UnicodeFormatter_IW.getInstance());
305 
306         // Validator
307 
308         velocityContext.put("validator", Validator_IW.getInstance());
309 
310         // Permissions
311 
312         velocityContext.put(
313             "accountPermission", AccountPermissionUtil.getAccountPermission());
314         velocityContext.put(
315             "commonPermission", CommonPermissionUtil.getCommonPermission());
316         velocityContext.put(
317             "groupPermission", GroupPermissionUtil.getGroupPermission());
318         velocityContext.put(
319             "layoutPermission", LayoutPermissionUtil.getLayoutPermission());
320         velocityContext.put(
321             "organizationPermission",
322             OrganizationPermissionUtil.getOrganizationPermission());
323         velocityContext.put(
324             "passwordPolicyPermission",
325             PasswordPolicyPermissionUtil.getPasswordPolicyPermission());
326         velocityContext.put(
327             "portalPermission", PortalPermissionUtil.getPortalPermission());
328         velocityContext.put(
329             "portletPermission", PortletPermissionUtil.getPortletPermission());
330         velocityContext.put(
331             "rolePermission", RolePermissionUtil.getRolePermission());
332         velocityContext.put(
333             "userGroupPermission",
334             UserGroupPermissionUtil.getUserGroupPermission());
335         velocityContext.put(
336             "userPermission", UserPermissionUtil.getUserPermission());
337 
338         // Deprecated
339 
340         velocityContext.put(
341             "dateFormats",
342             FastDateFormatFactoryUtil.getFastDateFormatFactory());
343         velocityContext.put(
344             "locationPermission",
345             OrganizationPermissionUtil.getOrganizationPermission());
346     }
347 
348     public static void insertVariables(
349         VelocityContext velocityContext, HttpServletRequest request) {
350 
351         // Request
352 
353         velocityContext.put("request", request);
354 
355         // Portlet config
356 
357         PortletConfigImpl portletConfigImpl =
358             (PortletConfigImpl)request.getAttribute(
359                 JavaConstants.JAVAX_PORTLET_CONFIG);
360 
361         if (portletConfigImpl != null) {
362             velocityContext.put("portletConfig", portletConfigImpl);
363         }
364 
365         // Render request
366 
367         final PortletRequest portletRequest =
368             (PortletRequest)request.getAttribute(
369                 JavaConstants.JAVAX_PORTLET_REQUEST);
370 
371         if (portletRequest != null) {
372             if (portletRequest instanceof RenderRequest) {
373                 velocityContext.put("renderRequest", portletRequest);
374             }
375         }
376 
377         // Render response
378 
379         final PortletResponse portletResponse =
380             (PortletResponse)request.getAttribute(
381                 JavaConstants.JAVAX_PORTLET_RESPONSE);
382 
383         if (portletResponse != null) {
384             if (portletResponse instanceof RenderResponse) {
385                 velocityContext.put("renderResponse", portletResponse);
386             }
387         }
388 
389         // XML request
390 
391         if ((portletRequest != null) && (portletResponse != null)) {
392             velocityContext.put(
393                 "xmlRequest",
394                 new Object() {
395 
396                     public String toString() {
397                         return PortletRequestUtil.toXML(
398                             portletRequest, portletResponse);
399                     }
400 
401                 }
402             );
403         }
404 
405         // Theme display
406 
407         ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
408             WebKeys.THEME_DISPLAY);
409 
410         if (themeDisplay != null) {
411             Theme theme = themeDisplay.getTheme();
412 
413             Layout layout = themeDisplay.getLayout();
414             List<Layout> layouts = themeDisplay.getLayouts();
415 
416             velocityContext.put("themeDisplay", themeDisplay);
417             velocityContext.put("company", themeDisplay.getCompany());
418             velocityContext.put("user", themeDisplay.getUser());
419             velocityContext.put("realUser", themeDisplay.getRealUser());
420             velocityContext.put("layout", layout);
421             velocityContext.put("layouts", layouts);
422             velocityContext.put("plid", String.valueOf(themeDisplay.getPlid()));
423             velocityContext.put(
424                 "layoutTypePortlet", themeDisplay.getLayoutTypePortlet());
425             velocityContext.put(
426                 "scopeGroupId", new Long(themeDisplay.getScopeGroupId()));
427             velocityContext.put(
428                 "permissionChecker", themeDisplay.getPermissionChecker());
429             velocityContext.put("locale", themeDisplay.getLocale());
430             velocityContext.put("timeZone", themeDisplay.getTimeZone());
431             velocityContext.put("theme", theme);
432             velocityContext.put("colorScheme", themeDisplay.getColorScheme());
433             velocityContext.put(
434                 "portletDisplay", themeDisplay.getPortletDisplay());
435 
436             // Navigation items
437 
438             if (layout != null) {
439                 RequestVars requestVars = new RequestVars(
440                     request, themeDisplay, layout.getAncestorPlid(),
441                     layout.getAncestorLayoutId());
442 
443                 List<NavItem> navItems = NavItem.fromLayouts(
444                     requestVars, layouts);
445 
446                 velocityContext.put("navItems", navItems);
447             }
448 
449             // Full css and templates path
450 
451             String servletContextName = GetterUtil.getString(
452                 theme.getServletContextName());
453 
454             velocityContext.put(
455                 "fullCssPath",
456                 servletContextName + theme.getVelocityResourceListener() +
457                     theme.getCssPath());
458 
459             velocityContext.put(
460                 "fullTemplatesPath",
461                 servletContextName + theme.getVelocityResourceListener() +
462                     theme.getTemplatesPath());
463 
464             // Init
465 
466             velocityContext.put(
467                 "init",
468                 themeDisplay.getPathContext() +
469                     VelocityResourceListener.SERVLET_SEPARATOR +
470                         "/html/themes/_unstyled/templates/init.vm");
471 
472             // Deprecated
473 
474             velocityContext.put(
475                 "portletGroupId", new Long(themeDisplay.getScopeGroupId()));
476         }
477 
478         // Tiles attributes
479 
480         _insertTilesVariables(velocityContext, request, "tilesTitle", "title");
481         _insertTilesVariables(
482             velocityContext, request, "tilesContent", "content");
483         _insertTilesVariables(
484             velocityContext, request, "tilesSelectable", "selectable");
485 
486         // Page title and subtitle
487 
488         velocityContext.put(
489             "pageTitle", request.getAttribute(WebKeys.PAGE_TITLE));
490         velocityContext.put(
491             "pageSubtitle", request.getAttribute(WebKeys.PAGE_SUBTITLE));
492 
493         // Insert custom vm variables
494 
495         Map<String, Object> vmVariables =
496             (Map<String, Object>)request.getAttribute(WebKeys.VM_VARIABLES);
497 
498         if (vmVariables != null) {
499             for (Map.Entry<String, Object> entry : vmVariables.entrySet()) {
500                 String key = entry.getKey();
501                 Object value = entry.getValue();
502 
503                 if (Validator.isNotNull(key)) {
504                     velocityContext.put(key, value);
505                 }
506             }
507         }
508     }
509 
510     private static void _insertHelperUtility(
511         VelocityContext velocityContext, String[] restrictedVariables,
512         String key, Object value) {
513 
514         if (!ArrayUtil.contains(restrictedVariables, key)) {
515             velocityContext.put(key, value);
516         }
517     }
518 
519     private static void _insertTilesVariables(
520         VelocityContext velocityContext, HttpServletRequest request,
521         String attributeId, String attributeName) {
522 
523         ComponentContext componentContext =
524             (ComponentContext)request.getAttribute(
525                 ComponentConstants.COMPONENT_CONTEXT);
526 
527         if (componentContext != null) {
528             String value = (String)componentContext.getAttribute(attributeName);
529 
530             if (value != null) {
531                 velocityContext.put(attributeId, value);
532             }
533         }
534     }
535 
536 }