1
22
23 package com.liferay.portlet.journal.action;
24
25 import com.liferay.portal.kernel.language.LanguageUtil;
26 import com.liferay.portal.kernel.servlet.ImageServletTokenUtil;
27 import com.liferay.portal.kernel.upload.UploadServletRequest;
28 import com.liferay.portal.kernel.util.Constants;
29 import com.liferay.portal.kernel.util.FileUtil;
30 import com.liferay.portal.kernel.util.ParamUtil;
31 import com.liferay.portal.kernel.util.StringPool;
32 import com.liferay.portal.kernel.util.Validator;
33 import com.liferay.portal.kernel.xml.Document;
34 import com.liferay.portal.kernel.xml.Element;
35 import com.liferay.portal.kernel.xml.SAXReaderUtil;
36 import com.liferay.portal.model.User;
37 import com.liferay.portal.service.ImageLocalServiceUtil;
38 import com.liferay.portal.theme.ThemeDisplay;
39 import com.liferay.portal.util.PortalUtil;
40 import com.liferay.portal.util.WebKeys;
41 import com.liferay.portlet.journal.model.JournalArticle;
42 import com.liferay.portlet.journal.model.impl.JournalArticleImpl;
43 import com.liferay.portlet.journal.service.JournalArticleImageLocalServiceUtil;
44 import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
45 import com.liferay.portlet.journal.service.JournalArticleServiceUtil;
46 import com.liferay.portlet.journal.util.JournalUtil;
47 import com.liferay.util.PwdGenerator;
48
49 import java.io.File;
50
51 import java.util.Date;
52 import java.util.Iterator;
53 import java.util.Map;
54
55 import javax.servlet.http.HttpServletRequest;
56 import javax.servlet.http.HttpServletResponse;
57
58 import org.apache.struts.action.Action;
59 import org.apache.struts.action.ActionForm;
60 import org.apache.struts.action.ActionForward;
61 import org.apache.struts.action.ActionMapping;
62
63
70 public class ViewArticleContentAction extends Action {
71
72 public ActionForward execute(
73 ActionMapping mapping, ActionForm form, HttpServletRequest request,
74 HttpServletResponse response)
75 throws Exception {
76
77 UploadServletRequest uploadRequest = null;
78
79 try {
80 String cmd = ParamUtil.getString(request, Constants.CMD);
81
82 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
83 WebKeys.THEME_DISPLAY);
84
85 long groupId = ParamUtil.getLong(request, "groupId");
86 String articleId = ParamUtil.getString(request, "articleId");
87 double version = ParamUtil.getDouble(
88 request, "version", JournalArticleImpl.DEFAULT_VERSION);
89
90 String languageId = LanguageUtil.getLanguageId(request);
91
92 String output = null;
93
94 if (cmd.equals(Constants.PREVIEW)) {
95 uploadRequest = PortalUtil.getUploadServletRequest(request);
96
97 String title = ParamUtil.getString(uploadRequest, "title");
98 String description = ParamUtil.getString(
99 uploadRequest, "description");
100 String type = ParamUtil.getString(uploadRequest, "type");
101 String structureId = ParamUtil.getString(
102 uploadRequest, "structureId");
103 String templateId = ParamUtil.getString(
104 uploadRequest, "templateId");
105
106 Date now = new Date();
107
108 Date createDate = now;
109 Date modifiedDate = now;
110 Date displayDate = now;
111
112 User user = PortalUtil.getUser(uploadRequest);
113
114 String xml = ParamUtil.getString(uploadRequest, "xml");
115
116 Document doc = SAXReaderUtil.read(xml);
117
118 Element root = doc.getRootElement();
119
120 String previewArticleId =
121 "PREVIEW_" +
122 PwdGenerator.getPassword(PwdGenerator.KEY3, 10);
123
124 format(
125 groupId, articleId, version, previewArticleId, root,
126 uploadRequest);
127
128 Map<String, String> tokens = JournalUtil.getTokens(
129 groupId, themeDisplay);
130
131 tokens.put("article_resource_pk", "-1");
132
133 JournalArticle article = new JournalArticleImpl();
134
135 article.setGroupId(groupId);
136 article.setCompanyId(user.getCompanyId());
137 article.setUserId(user.getUserId());
138 article.setUserName(user.getFullName());
139 article.setCreateDate(createDate);
140 article.setModifiedDate(modifiedDate);
141 article.setArticleId(articleId);
142 article.setVersion(version);
143 article.setTitle(title);
144 article.setDescription(description);
145 article.setContent(xml);
146 article.setType(type);
147 article.setStructureId(structureId);
148 article.setTemplateId(templateId);
149 article.setDisplayDate(displayDate);
150
151 output = JournalArticleLocalServiceUtil.getArticleContent(
152 article, templateId, null, languageId, themeDisplay);
153 }
154 else {
155 output = JournalArticleServiceUtil.getArticleContent(
156 groupId, articleId, version, languageId, themeDisplay);
157 }
158
159 request.setAttribute(WebKeys.JOURNAL_ARTICLE_CONTENT, output);
160
161 if (output.startsWith("<?xml ")) {
162 return mapping.findForward(
163 "portlet.journal.raw_article_content");
164 }
165 else {
166 return mapping.findForward(
167 "portlet.journal.view_article_content");
168 }
169 }
170 catch (Exception e) {
171 PortalUtil.sendError(e, request, response);
172
173 return null;
174 }
175 finally {
176 if (uploadRequest != null) {
177 uploadRequest.cleanUp();
178 }
179 }
180 }
181
182 protected void format(
183 long groupId, String articleId, double version,
184 String previewArticleId, Element root,
185 UploadServletRequest uploadRequest)
186 throws Exception {
187
188 Iterator<Element> itr = root.elements().iterator();
189
190 while (itr.hasNext()) {
191 Element el = itr.next();
192
193 Element dynamicContent = el.element("dynamic-content");
194
195 String elInstanceId = el.attributeValue(
196 "instance-id", StringPool.BLANK);
197 String elName = el.attributeValue("name", StringPool.BLANK);
198 String elType = el.attributeValue("type", StringPool.BLANK);
199 String elContent = StringPool.BLANK;
200 String elLanguage = StringPool.BLANK;
201
202 if (dynamicContent != null) {
203 elContent = dynamicContent.getTextTrim();
204
205 elLanguage = dynamicContent.attributeValue(
206 "language-id", StringPool.BLANK);
207
208 if (!elLanguage.equals(StringPool.BLANK)) {
209 elLanguage = "_" + elLanguage;
210 }
211 }
212
213 if (elType.equals("image") && Validator.isNull(elContent)) {
214 File file = uploadRequest.getFile(
215 "structure_image_" + elName + elLanguage);
216 byte[] bytes = FileUtil.getBytes(file);
217
218 if ((bytes != null) && (bytes.length > 0)) {
219 long imageId =
220 JournalArticleImageLocalServiceUtil.getArticleImageId(
221 groupId, previewArticleId, version, elInstanceId,
222 elName, elLanguage, true);
223
224 String token = ImageServletTokenUtil.getToken(imageId);
225
226 dynamicContent.setText(
227 "/image/journal/article?img_id=" + imageId + "&t=" +
228 token);
229
230 ImageLocalServiceUtil.updateImage(imageId, bytes);
231 }
232 else {
233 if (Validator.isNotNull(articleId)) {
234 long imageId = JournalArticleImageLocalServiceUtil.
235 getArticleImageId(
236 groupId, articleId, version, elInstanceId,
237 elName, elLanguage);
238
239 String token = ImageServletTokenUtil.getToken(imageId);
240
241 dynamicContent.setText(
242 "/image/journal/article?img_id=" + imageId +
243 "&t=" + token);
244 }
245 }
246 }
247
248 format(
249 groupId, articleId, version, previewArticleId, el,
250 uploadRequest);
251 }
252 }
253
254 }