1
14
15 package com.liferay.portal.velocity;
16
17 import com.liferay.portal.kernel.log.Log;
18 import com.liferay.portal.kernel.log.LogFactoryUtil;
19 import com.liferay.portal.kernel.util.PropsKeys;
20 import com.liferay.portal.kernel.util.StringPool;
21 import com.liferay.portal.kernel.util.Validator;
22 import com.liferay.portal.kernel.velocity.VelocityContext;
23 import com.liferay.portal.kernel.velocity.VelocityEngine;
24 import com.liferay.portal.util.PropsUtil;
25 import com.liferay.portal.util.PropsValues;
26
27 import java.io.Writer;
28
29 import org.apache.commons.collections.ExtendedProperties;
30 import org.apache.velocity.runtime.resource.loader.StringResourceLoader;
31 import org.apache.velocity.runtime.resource.util.StringResourceRepository;
32
33
38 public class VelocityEngineImpl implements VelocityEngine {
39
40 public VelocityEngineImpl() {
41 }
42
43 public void flushTemplate(String resource) {
44 StringResourceRepository stringResourceRepository =
45 StringResourceLoader.getRepository();
46
47 if (stringResourceRepository != null) {
48 stringResourceRepository.removeStringResource(resource);
49 }
50 }
51
52 public VelocityContext getEmptyContext() {
53 return new VelocityContextImpl();
54 }
55
56 public VelocityContext getRestrictedToolsContext() {
57 return _restrictedToolsContext;
58 }
59
60 public VelocityContext getStandardToolsContext() {
61 return _standardToolsContext;
62 }
63
64 public VelocityContext getWrappedRestrictedToolsContext() {
65 return new VelocityContextImpl(
66 _restrictedToolsContext.getWrappedVelocityContext());
67 }
68
69 public VelocityContext getWrappedStandardToolsContext() {
70 return new VelocityContextImpl(
71 _standardToolsContext.getWrappedVelocityContext());
72 }
73
74 public void init() throws Exception {
75 _velocityEngine = new org.apache.velocity.app.VelocityEngine();
76
77 LiferayResourceLoader.setListeners(
78 PropsValues.VELOCITY_ENGINE_RESOURCE_LISTENERS);
79
80 ExtendedProperties extendedProperties = new ExtendedProperties();
81
82 extendedProperties.setProperty(_RESOURCE_LOADER, "string,servlet");
83
84 extendedProperties.setProperty(
85 "string." + _RESOURCE_LOADER + ".class",
86 StringResourceLoader.class.getName());
87
88 extendedProperties.setProperty(
89 "servlet." + _RESOURCE_LOADER + ".class",
90 LiferayResourceLoader.class.getName());
91
92 extendedProperties.setProperty(
93 org.apache.velocity.app.VelocityEngine.RESOURCE_MANAGER_CLASS,
94 PropsUtil.get(PropsKeys.VELOCITY_ENGINE_RESOURCE_MANAGER));
95
96 extendedProperties.setProperty(
97 org.apache.velocity.app.VelocityEngine.RESOURCE_MANAGER_CACHE_CLASS,
98 PropsUtil.get(PropsKeys.VELOCITY_ENGINE_RESOURCE_MANAGER_CACHE));
99
100 extendedProperties.setProperty(
101 org.apache.velocity.app.VelocityEngine.VM_LIBRARY,
102 PropsUtil.get(PropsKeys.VELOCITY_ENGINE_VELOCIMACRO_LIBRARY));
103
104 extendedProperties.setProperty(
105 org.apache.velocity.app.VelocityEngine.RUNTIME_LOG_LOGSYSTEM_CLASS,
106 PropsUtil.get(PropsKeys.VELOCITY_ENGINE_LOGGER));
107
108 extendedProperties.setProperty(
109 org.apache.velocity.app.VelocityEngine.RUNTIME_LOG_LOGSYSTEM +
110 ".log4j.category",
111 PropsUtil.get(PropsKeys.VELOCITY_ENGINE_LOGGER_CATEGORY));
112
113 _velocityEngine.setExtendedProperties(extendedProperties);
114
115 _velocityEngine.init();
116
117 _restrictedToolsContext = new VelocityContextImpl();
118
119 VelocityVariables.insertHelperUtilities(
120 _restrictedToolsContext,
121 PropsValues.JOURNAL_TEMPLATE_VELOCITY_RESTRICTED_VARIABLES);
122
123 _standardToolsContext = new VelocityContextImpl();
124
125 VelocityVariables.insertHelperUtilities(_standardToolsContext, null);
126 }
127
128 public boolean mergeTemplate(
129 String velocityTemplateId, String velocityTemplateContent,
130 VelocityContext velocityContext, Writer writer)
131 throws Exception {
132
133 if ((Validator.isNotNull(velocityTemplateContent)) &&
134 (!PropsValues.LAYOUT_TEMPLATE_CACHE_ENABLED ||
135 !resourceExists(velocityTemplateId))) {
136
137 StringResourceRepository stringResourceRepository =
138 StringResourceLoader.getRepository();
139
140 stringResourceRepository.putStringResource(
141 velocityTemplateId, velocityTemplateContent);
142
143 if (_log.isDebugEnabled()) {
144 _log.debug(
145 "Added " + velocityTemplateId +
146 " to the Velocity template repository");
147 }
148 }
149
150 VelocityContextImpl velocityContextImpl =
151 (VelocityContextImpl)velocityContext;
152
153 return _velocityEngine.mergeTemplate(
154 velocityTemplateId, StringPool.UTF8,
155 velocityContextImpl.getWrappedVelocityContext(), writer);
156 }
157
158 public boolean mergeTemplate(
159 String velocityTemplateId, VelocityContext velocityContext,
160 Writer writer)
161 throws Exception {
162
163 return mergeTemplate(velocityTemplateId, null, velocityContext, writer);
164 }
165
166 public boolean resourceExists(String resource) {
167 return _velocityEngine.resourceExists(resource);
168 }
169
170 private static final String _RESOURCE_LOADER =
171 org.apache.velocity.app.VelocityEngine.RESOURCE_LOADER;
172
173 private static Log _log = LogFactoryUtil.getLog(VelocityEngineImpl.class);
174
175 private VelocityContextImpl _restrictedToolsContext;
176 private VelocityContextImpl _standardToolsContext;
177 private org.apache.velocity.app.VelocityEngine _velocityEngine;
178
179 }