PageRenderTime 26ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/portal-impl/src/com/liferay/portal/bean/RendererImpl.java

http://github.com/liferay/liferay-portal
Java | 425 lines | 317 code | 92 blank | 16 comment | 30 complexity | 70882c2291d14fb4fcb4aab307796b78 MD5 | raw file
Possible License(s): LGPL-2.0
  1. /**
  2. * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
  3. *
  4. * This library is free software; you can redistribute it and/or modify it under
  5. * the terms of the GNU Lesser General Public License as published by the Free
  6. * Software Foundation; either version 2.1 of the License, or (at your option)
  7. * any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  11. * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
  12. * details.
  13. */
  14. package com.liferay.portal.bean;
  15. import com.liferay.portal.kernel.bean.BeanLocator;
  16. import com.liferay.portal.kernel.bean.BeanLocatorException;
  17. import com.liferay.portal.kernel.bean.PortalBeanLocatorUtil;
  18. import com.liferay.portal.kernel.bean.PortletBeanLocatorUtil;
  19. import com.liferay.portal.kernel.bean.Renderer;
  20. import com.liferay.portal.kernel.bean.RendererException;
  21. import com.liferay.portal.kernel.exception.PortalException;
  22. import com.liferay.portal.kernel.exception.SystemException;
  23. import com.liferay.portal.kernel.io.unsync.UnsyncStringWriter;
  24. import com.liferay.portal.kernel.log.Log;
  25. import com.liferay.portal.kernel.log.LogFactoryUtil;
  26. import com.liferay.portal.kernel.template.StringTemplateResource;
  27. import com.liferay.portal.kernel.template.Template;
  28. import com.liferay.portal.kernel.template.TemplateContextType;
  29. import com.liferay.portal.kernel.template.TemplateManager;
  30. import com.liferay.portal.kernel.template.TemplateManagerUtil;
  31. import com.liferay.portal.kernel.template.TemplateResource;
  32. import com.liferay.portal.kernel.template.URLTemplateResource;
  33. import com.liferay.portal.kernel.util.ParamUtil;
  34. import com.liferay.portal.kernel.util.PropsUtil;
  35. import com.liferay.portal.kernel.util.StringPool;
  36. import com.liferay.portal.kernel.util.StringUtil;
  37. import com.liferay.portal.kernel.util.Validator;
  38. import com.liferay.portal.util.PortalUtil;
  39. import com.liferay.portal.util.PrefsPropsUtil;
  40. import com.liferay.portlet.PortletPreferencesFactoryUtil;
  41. import java.lang.reflect.Method;
  42. import java.net.URL;
  43. import javax.portlet.PortletPreferences;
  44. import javax.portlet.PortletRequest;
  45. import javax.portlet.PortletResponse;
  46. import javax.servlet.http.HttpServletRequest;
  47. import javax.servlet.http.HttpServletResponse;
  48. /**
  49. * @author Raymond Aug?Š
  50. */
  51. public class RendererImpl implements Renderer {
  52. public String renderBean(
  53. HttpServletRequest request, HttpServletResponse response,
  54. Object bean)
  55. throws RendererException {
  56. return renderBean(request, response, null, bean, null);
  57. }
  58. public String renderBean(
  59. HttpServletRequest request, HttpServletResponse response,
  60. Object bean, String varientSuffix)
  61. throws RendererException {
  62. return renderBean(request, response, null, bean, varientSuffix);
  63. }
  64. public String renderBean(
  65. HttpServletRequest request, HttpServletResponse response,
  66. String servletContextName, Object bean)
  67. throws RendererException {
  68. return renderBean(request, response, servletContextName, bean, null);
  69. }
  70. public String renderBean(
  71. HttpServletRequest request, HttpServletResponse response,
  72. String servletContextName, Object bean, String varientSuffix)
  73. throws RendererException {
  74. if (bean == null) {
  75. return null;
  76. }
  77. long companyId = PortalUtil.getCompanyId(request);
  78. String className = normalizeClassName(bean.getClass().getName());
  79. if (Validator.isNotNull(varientSuffix)) {
  80. className = varientSuffix;
  81. }
  82. TemplateResource templateResource = null;
  83. PortletPreferences preferences = getPortletPreferences(request);
  84. if (preferences != null) {
  85. String velocityTemplateContent = preferences.getValue(
  86. RENDERER_TEMPLATE_PREFIX + className, StringPool.BLANK);
  87. if (Validator.isNotNull(velocityTemplateContent)) {
  88. templateResource = new StringTemplateResource(
  89. className, velocityTemplateContent);
  90. }
  91. }
  92. if ((templateResource == null) &&
  93. Validator.isNotNull(servletContextName)) {
  94. if (servletContextName.startsWith(StringPool.SLASH)) {
  95. servletContextName = servletContextName.substring(1);
  96. }
  97. try {
  98. BeanLocator beanLocator = PortletBeanLocatorUtil.getBeanLocator(
  99. servletContextName);
  100. ClassLoader classLoader = beanLocator.getClassLoader();
  101. URL url = classLoader.getResource(
  102. PropsUtil.get(RENDERER_TEMPLATE_PREFIX + className));
  103. templateResource = new URLTemplateResource(className, url);
  104. }
  105. catch (Exception e) {
  106. }
  107. }
  108. if (templateResource == null) {
  109. try {
  110. String velocityTemplateContent = PrefsPropsUtil.getContent(
  111. companyId, RENDERER_TEMPLATE_PREFIX + className);
  112. if (Validator.isNotNull(velocityTemplateContent)) {
  113. templateResource = new StringTemplateResource(
  114. className, velocityTemplateContent);
  115. }
  116. }
  117. catch (Exception e) {
  118. }
  119. }
  120. if (templateResource == null) {
  121. _log.warn("No entity renderer template found for " + className);
  122. return null;
  123. }
  124. try {
  125. Template template = TemplateManagerUtil.getTemplate(
  126. TemplateManager.VELOCITY, templateResource,
  127. TemplateContextType.STANDARD);
  128. template.prepare(request);
  129. template.put(_BEAN, bean);
  130. UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter();
  131. template.processTemplate(unsyncStringWriter);
  132. return unsyncStringWriter.toString();
  133. }
  134. catch (Exception e) {
  135. _log.error(e, e);
  136. throw new RendererException(e);
  137. }
  138. }
  139. public String renderBean(
  140. PortletRequest portletRequest, PortletResponse portletResponse,
  141. Object bean)
  142. throws RendererException {
  143. return renderBean(portletRequest, portletResponse, null, bean, null);
  144. }
  145. public String renderBean(
  146. PortletRequest portletRequest, PortletResponse portletResponse,
  147. Object bean, String varientSuffix)
  148. throws RendererException {
  149. return renderBean(
  150. portletRequest, portletResponse, null, bean, varientSuffix);
  151. }
  152. public String renderBean(
  153. PortletRequest portletRequest, PortletResponse portletResponse,
  154. String servletContextName, Object bean)
  155. throws RendererException {
  156. return renderBean(
  157. portletRequest, portletResponse, servletContextName, bean, null);
  158. }
  159. public String renderBean(
  160. PortletRequest portletRequest, PortletResponse portletResponse,
  161. String servletContextName, Object bean, String varientSuffix)
  162. throws RendererException {
  163. HttpServletRequest request = PortalUtil.getHttpServletRequest(
  164. portletRequest);
  165. HttpServletResponse response = PortalUtil.getHttpServletResponse(
  166. portletResponse);
  167. return renderBean(
  168. request, response, servletContextName, bean, varientSuffix);
  169. }
  170. public String renderEntity(
  171. HttpServletRequest request, HttpServletResponse response,
  172. String className, Object classPK)
  173. throws RendererException {
  174. return renderEntity(request, response, null, className, classPK, null);
  175. }
  176. public String renderEntity(
  177. HttpServletRequest request, HttpServletResponse response,
  178. String className, Object classPK, String varientSuffix)
  179. throws RendererException {
  180. return renderEntity(
  181. request, response, null, className, classPK, varientSuffix);
  182. }
  183. public String renderEntity(
  184. HttpServletRequest request, HttpServletResponse response,
  185. String servletContextName, String className, Object classPK)
  186. throws RendererException {
  187. return renderEntity(
  188. request, response, servletContextName, className, classPK, null);
  189. }
  190. public String renderEntity(
  191. HttpServletRequest request, HttpServletResponse response,
  192. String servletContextName, String className, Object classPK,
  193. String varientSuffix)
  194. throws RendererException {
  195. if (Validator.isNull(className)) {
  196. return null;
  197. }
  198. className = normalizeClassName(className);
  199. String[] beanNameParts = StringUtil.split(className, _MODEL);
  200. Object serviceBean = null;
  201. if (Validator.isNotNull(servletContextName)) {
  202. if (servletContextName.startsWith(StringPool.SLASH)) {
  203. servletContextName = servletContextName.substring(1);
  204. }
  205. try {
  206. serviceBean = PortletBeanLocatorUtil.locate(
  207. servletContextName,
  208. beanNameParts[0] + _SERVICE + beanNameParts[1] +
  209. _LOCAL_SERVICE_UTIL);
  210. }
  211. catch (BeanLocatorException ble) {
  212. }
  213. }
  214. else {
  215. try {
  216. serviceBean = PortalBeanLocatorUtil.locate(
  217. beanNameParts[0] + _SERVICE + beanNameParts[1] +
  218. _LOCAL_SERVICE_UTIL);
  219. }
  220. catch (BeanLocatorException ble) {
  221. }
  222. }
  223. Object bean = null;
  224. if (serviceBean != null) {
  225. Method getMethod = null;
  226. try {
  227. getMethod = serviceBean.getClass().getDeclaredMethod(
  228. "get" + beanNameParts[1], classPK.getClass());
  229. }
  230. catch (Exception e) {
  231. }
  232. if (getMethod == null) {
  233. try {
  234. getMethod = serviceBean.getClass().getDeclaredMethod(
  235. "get" + beanNameParts[1],
  236. mapToPrimitive(classPK.getClass()));
  237. }
  238. catch (Exception e) {
  239. }
  240. }
  241. if (getMethod != null) {
  242. try {
  243. bean = getMethod.invoke(null, classPK);
  244. }
  245. catch (Exception e) {
  246. _log.warn(e.getMessage());
  247. }
  248. }
  249. }
  250. return renderBean(
  251. request, response, servletContextName, bean, varientSuffix);
  252. }
  253. public String renderEntity(
  254. PortletRequest portletRequest, PortletResponse portletResponse,
  255. String className, Object classPK)
  256. throws RendererException {
  257. return renderEntity(
  258. portletRequest, portletResponse, null, className, classPK, null);
  259. }
  260. public String renderEntity(
  261. PortletRequest portletRequest, PortletResponse portletResponse,
  262. String className, Object classPK, String varientSuffix)
  263. throws RendererException {
  264. return renderEntity(
  265. portletRequest, portletResponse, null, className, classPK,
  266. varientSuffix);
  267. }
  268. public String renderEntity(
  269. PortletRequest portletRequest, PortletResponse portletResponse,
  270. String servletContextName, String className, Object classPK)
  271. throws RendererException {
  272. return renderEntity(
  273. portletRequest, portletResponse, servletContextName, className,
  274. classPK, null);
  275. }
  276. public String renderEntity(
  277. PortletRequest portletRequest, PortletResponse portletResponse,
  278. String servletContextName, String className, Object classPK,
  279. String varientSuffix)
  280. throws RendererException {
  281. HttpServletRequest request = PortalUtil.getHttpServletRequest(
  282. portletRequest);
  283. HttpServletResponse response = PortalUtil.getHttpServletResponse(
  284. portletResponse);
  285. return renderEntity(
  286. request, response, servletContextName, className, classPK,
  287. varientSuffix);
  288. }
  289. protected PortletPreferences getPortletPreferences(
  290. HttpServletRequest request) {
  291. PortletPreferences preferences = PortalUtil.getPreferences(request);
  292. String portletResource = ParamUtil.getString(
  293. request, "portletResource");
  294. if (Validator.isNotNull(portletResource)) {
  295. try {
  296. preferences = PortletPreferencesFactoryUtil.getPortletSetup(
  297. request, portletResource);
  298. }
  299. catch (PortalException pe) {
  300. }
  301. catch (SystemException se) {
  302. }
  303. }
  304. return preferences;
  305. }
  306. protected Class<?> mapToPrimitive(Class<?> clazz) {
  307. Class<?> mapping = clazz;
  308. if (clazz == Integer.class) {
  309. mapping = int.class;
  310. }
  311. else if (clazz == Long.class) {
  312. mapping = long.class;
  313. }
  314. return mapping;
  315. }
  316. protected String normalizeClassName(String className) {
  317. className = StringUtil.replace(
  318. className,
  319. new String[] {
  320. ".impl.", "Impl"
  321. },
  322. new String[] {
  323. StringPool.PERIOD, StringPool.BLANK
  324. }
  325. );
  326. return className;
  327. }
  328. private static final String _BEAN = "bean";
  329. private static final String _LOCAL_SERVICE_UTIL = "LocalServiceUtil";
  330. private static final String _MODEL = ".model.";
  331. private static final String _SERVICE = ".service.";
  332. private static Log _log = LogFactoryUtil.getLog(RendererImpl.class);
  333. }