1   /**
2    * Copyright (c) 2000-2007 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portal.velocity;
24  
25  import com.liferay.portal.kernel.util.JavaConstants;
26  import com.liferay.portal.language.LanguageUtil_IW;
27  import com.liferay.portal.language.UnicodeLanguageUtil_IW;
28  import com.liferay.portal.model.Layout;
29  import com.liferay.portal.model.Theme;
30  import com.liferay.portal.service.permission.AccountPermission_IW;
31  import com.liferay.portal.service.permission.CommonPermission_IW;
32  import com.liferay.portal.service.permission.GroupPermission_IW;
33  import com.liferay.portal.service.permission.LayoutPermission_IW;
34  import com.liferay.portal.service.permission.LocationPermission_IW;
35  import com.liferay.portal.service.permission.OrganizationPermission_IW;
36  import com.liferay.portal.service.permission.PasswordPolicyPermission_IW;
37  import com.liferay.portal.service.permission.PortalPermission_IW;
38  import com.liferay.portal.service.permission.PortletPermission_IW;
39  import com.liferay.portal.service.permission.RolePermission_IW;
40  import com.liferay.portal.service.permission.UserGroupPermission_IW;
41  import com.liferay.portal.service.permission.UserPermission_IW;
42  import com.liferay.portal.theme.NavItem;
43  import com.liferay.portal.theme.RequestVars;
44  import com.liferay.portal.theme.ThemeDisplay;
45  import com.liferay.portal.util.PortalUtil_IW;
46  import com.liferay.portal.util.PropsUtil_IW;
47  import com.liferay.portal.util.ServiceLocator;
48  import com.liferay.portal.util.SessionClicks_IW;
49  import com.liferay.portal.util.WebKeys;
50  import com.liferay.portlet.PortletConfigImpl;
51  import com.liferay.portlet.PortletURLFactory;
52  import com.liferay.util.ArrayUtil_IW;
53  import com.liferay.util.BrowserSniffer_IW;
54  import com.liferay.util.DateUtil_IW;
55  import com.liferay.util.GetterUtil;
56  import com.liferay.util.GetterUtil_IW;
57  import com.liferay.util.Randomizer_IW;
58  import com.liferay.util.StaticFieldGetter;
59  import com.liferay.util.StringUtil_IW;
60  import com.liferay.util.UnicodeFormatter_IW;
61  import com.liferay.util.Validator;
62  
63  import java.util.Iterator;
64  import java.util.List;
65  import java.util.Map;
66  
67  import javax.portlet.PortletRequest;
68  import javax.portlet.PortletResponse;
69  import javax.portlet.RenderRequest;
70  import javax.portlet.RenderResponse;
71  
72  import javax.servlet.http.HttpServletRequest;
73  
74  import org.apache.struts.taglib.tiles.ComponentConstants;
75  import org.apache.struts.tiles.ComponentContext;
76  import org.apache.velocity.VelocityContext;
77  
78  /**
79   * <a href="VelocityVariables.java.html"><b><i>View Source</i></b></a>
80   *
81   * @author Brian Wing Shun Chan
82   *
83   */
84  public class VelocityVariables {
85  
86      public static void insertVariables(
87          VelocityContext vc, HttpServletRequest req) {
88  
89          // Request
90  
91          vc.put("request", req);
92  
93          // Portlet config
94  
95          PortletConfigImpl portletConfig = (PortletConfigImpl)req.getAttribute(
96              JavaConstants.JAVAX_PORTLET_CONFIG);
97  
98          if (portletConfig != null) {
99              vc.put("portletConfig", portletConfig);
100         }
101 
102         // Render request
103 
104         PortletRequest portletRequest = (PortletRequest)req.getAttribute(
105             JavaConstants.JAVAX_PORTLET_REQUEST);
106 
107         if (portletRequest != null) {
108             if (portletRequest instanceof RenderRequest) {
109                 vc.put("renderRequest", portletRequest);
110             }
111         }
112 
113         // Render response
114 
115         PortletResponse portletResponse = (PortletResponse)req.getAttribute(
116             JavaConstants.JAVAX_PORTLET_RESPONSE);
117 
118         if (portletResponse != null) {
119             if (portletResponse instanceof RenderResponse) {
120                 vc.put("renderResponse", portletResponse);
121             }
122         }
123 
124         // Theme display
125 
126         ThemeDisplay themeDisplay =
127             (ThemeDisplay)req.getAttribute(WebKeys.THEME_DISPLAY);
128 
129         if (themeDisplay != null) {
130             Theme theme = themeDisplay.getTheme();
131 
132             Layout layout = themeDisplay.getLayout();
133             List layouts = themeDisplay.getLayouts();
134 
135             vc.put("themeDisplay", themeDisplay);
136             vc.put("company", themeDisplay.getCompany());
137             vc.put("user", themeDisplay.getUser());
138             vc.put("realUser", themeDisplay.getRealUser());
139             vc.put("layout", layout);
140             vc.put("layouts", layouts);
141             vc.put("plid", String.valueOf(themeDisplay.getPlid()));
142             vc.put("layoutTypePortlet", themeDisplay.getLayoutTypePortlet());
143             vc.put(
144                 "portletGroupId", new Long(themeDisplay.getPortletGroupId()));
145             vc.put("permissionChecker", themeDisplay.getPermissionChecker());
146             vc.put("locale", themeDisplay.getLocale());
147             vc.put("timeZone", themeDisplay.getTimeZone());
148             vc.put("theme", theme);
149             vc.put("colorScheme", themeDisplay.getColorScheme());
150             vc.put("portletDisplay", themeDisplay.getPortletDisplay());
151 
152             // Navigation items
153 
154             if (layout != null) {
155                 RequestVars requestVars = new RequestVars(
156                     req, themeDisplay, layout.getAncestorLayoutId());
157 
158                 List navItems = NavItem.fromLayouts(requestVars, layouts);
159 
160                 vc.put("navItems", navItems);
161             }
162 
163             // Full css and templates path
164 
165             String ctxName = GetterUtil.getString(
166                 theme.getServletContextName());
167 
168             vc.put(
169                 "fullCssPath",
170                 ctxName + theme.getVelocityResourceListener() +
171                     theme.getCssPath());
172 
173             vc.put(
174                 "fullTemplatesPath",
175                 ctxName + theme.getVelocityResourceListener() +
176                     theme.getTemplatesPath());
177 
178             // Init
179 
180             vc.put(
181                 "init",
182                 themeDisplay.getPathContext() +
183                     VelocityResourceListener.SERVLET_SEPARATOR +
184                         "/html/themes/_unstyled/templates/init.vm");
185         }
186 
187         // Tiles attributes
188 
189         String tilesTitle = _insertTilesVariables(
190             vc, req, "tilesTitle", "title");
191         String tilesContent = _insertTilesVariables(
192             vc, req, "tilesContent", "content");
193         boolean tilesSelectable = GetterUtil.getBoolean(_insertTilesVariables(
194             vc, req, "tilesSelectable", "selectable"));
195 
196         if (themeDisplay != null) {
197             themeDisplay.setTilesTitle(tilesTitle);
198             themeDisplay.setTilesContent(tilesContent);
199             themeDisplay.setTilesSelectable(tilesSelectable);
200         }
201 
202         // Helper utilities
203 
204         _insertHelperUtilities(vc);
205 
206         // Insert custom vm variables
207 
208         Map vmVariables = (Map)req.getAttribute(WebKeys.VM_VARIABLES);
209 
210         if (vmVariables != null) {
211             Iterator itr = vmVariables.entrySet().iterator();
212 
213             while (itr.hasNext()) {
214                 Map.Entry entry = (Map.Entry)itr.next();
215 
216                 String key = (String)entry.getKey();
217                 Object value = entry.getValue();
218 
219                 if (Validator.isNotNull(key)) {
220                     vc.put(key, value);
221                 }
222             }
223         }
224     }
225 
226     private static void _insertHelperUtilities(VelocityContext vc) {
227 
228         // Array util
229 
230         vc.put("arrayUtil", ArrayUtil_IW.getInstance());
231 
232         // Browser sniffer
233 
234         vc.put("browserSniffer", BrowserSniffer_IW.getInstance());
235 
236         // Date util
237 
238         vc.put("dateUtil", DateUtil_IW.getInstance());
239 
240         // Getter util
241 
242         vc.put("getterUtil", GetterUtil_IW.getInstance());
243 
244         // Language util
245 
246         vc.put("languageUtil", LanguageUtil_IW.getInstance());
247         vc.put("unicodeLanguageUtil", UnicodeLanguageUtil_IW.getInstance());
248 
249         // Portal util
250 
251         vc.put("portalUtil", PortalUtil_IW.getInstance());
252         vc.put("portal", PortalUtil_IW.getInstance());
253 
254         // Props util
255 
256         vc.put("propsUtil", PropsUtil_IW.getInstance());
257 
258         // Portlet URL factory
259 
260         vc.put("portletURLFactory", PortletURLFactory.getInstance());
261 
262         // Randomizer
263 
264         vc.put("randomizer", Randomizer_IW.getInstance().getWrappedInstance());
265 
266         // Service locator
267 
268         vc.put("serviceLocator", ServiceLocator.getInstance());
269 
270         // Session clicks
271 
272         vc.put("sessionClicks", SessionClicks_IW.getInstance());
273 
274         // Static field getter
275 
276         vc.put("staticFieldGetter", StaticFieldGetter.getInstance());
277 
278         // String util
279 
280         vc.put("stringUtil", StringUtil_IW.getInstance());
281 
282         // Unicode formatter
283 
284         vc.put("unicodeFormatter", UnicodeFormatter_IW.getInstance());
285 
286         // Permissions
287 
288         vc.put("accountPermission", AccountPermission_IW.getInstance());
289         vc.put("commonPermission", CommonPermission_IW.getInstance());
290         vc.put("groupPermission", GroupPermission_IW.getInstance());
291         vc.put("layoutPermission", LayoutPermission_IW.getInstance());
292         vc.put("locationPermission", LocationPermission_IW.getInstance());
293         vc.put(
294             "organizationPermission", OrganizationPermission_IW.getInstance());
295         vc.put(
296             "passwordPolicyPermission",
297             PasswordPolicyPermission_IW.getInstance());
298         vc.put("portalPermission", PortalPermission_IW.getInstance());
299         vc.put("portletPermission", PortletPermission_IW.getInstance());
300         vc.put("rolePermission", RolePermission_IW.getInstance());
301         vc.put("userGroupPermission", UserGroupPermission_IW.getInstance());
302         vc.put("userPermission", UserPermission_IW.getInstance());
303     }
304 
305     private static String _insertTilesVariables(
306         VelocityContext vc, HttpServletRequest req, String attributeId,
307         String attributeName) {
308 
309         ComponentContext componentContext = (ComponentContext)req.getAttribute(
310             ComponentConstants.COMPONENT_CONTEXT);
311 
312         String value = null;
313 
314         if (componentContext != null) {
315             value = (String)componentContext.getAttribute(attributeName);
316 
317             if (value != null) {
318                 vc.put(attributeId, value);
319             }
320         }
321 
322         return value;
323     }
324 
325 }