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