001
014
015 package com.liferay.portlet.journal.action;
016
017 import com.liferay.portal.kernel.language.LanguageUtil;
018 import com.liferay.portal.kernel.upload.UploadServletRequest;
019 import com.liferay.portal.kernel.util.ArrayUtil;
020 import com.liferay.portal.kernel.util.Constants;
021 import com.liferay.portal.kernel.util.FileUtil;
022 import com.liferay.portal.kernel.util.ParamUtil;
023 import com.liferay.portal.kernel.util.StringPool;
024 import com.liferay.portal.kernel.util.StringUtil;
025 import com.liferay.portal.kernel.util.Validator;
026 import com.liferay.portal.kernel.xml.Document;
027 import com.liferay.portal.kernel.xml.Element;
028 import com.liferay.portal.kernel.xml.SAXReaderUtil;
029 import com.liferay.portal.model.User;
030 import com.liferay.portal.service.ImageLocalServiceUtil;
031 import com.liferay.portal.theme.ThemeDisplay;
032 import com.liferay.portal.util.PortalUtil;
033 import com.liferay.portal.util.WebKeys;
034 import com.liferay.portal.webserver.WebServerServletTokenUtil;
035 import com.liferay.portlet.journal.model.JournalArticle;
036 import com.liferay.portlet.journal.model.JournalArticleConstants;
037 import com.liferay.portlet.journal.model.impl.JournalArticleImpl;
038 import com.liferay.portlet.journal.service.JournalArticleImageLocalServiceUtil;
039 import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
040 import com.liferay.portlet.journal.service.JournalArticleServiceUtil;
041 import com.liferay.portlet.journal.util.JournalUtil;
042
043 import java.io.File;
044
045 import java.util.Date;
046 import java.util.List;
047 import java.util.Map;
048
049 import javax.servlet.http.HttpServletRequest;
050 import javax.servlet.http.HttpServletResponse;
051
052 import org.apache.struts.action.Action;
053 import org.apache.struts.action.ActionForm;
054 import org.apache.struts.action.ActionForward;
055 import org.apache.struts.action.ActionMapping;
056
057
062 public class ViewArticleContentAction extends Action {
063
064 @Override
065 public ActionForward execute(
066 ActionMapping actionMapping, ActionForm actionForm,
067 HttpServletRequest request, HttpServletResponse response)
068 throws Exception {
069
070 UploadServletRequest uploadServletRequest = null;
071
072 try {
073 String cmd = ParamUtil.getString(request, Constants.CMD);
074
075 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
076 WebKeys.THEME_DISPLAY);
077
078 long groupId = ParamUtil.getLong(request, "groupId");
079 String articleId = ParamUtil.getString(request, "articleId");
080 double version = ParamUtil.getDouble(
081 request, "version", JournalArticleConstants.VERSION_DEFAULT);
082
083 String languageId = LanguageUtil.getLanguageId(request);
084
085 String output = null;
086
087 if (cmd.equals(Constants.PREVIEW)) {
088 uploadServletRequest = PortalUtil.getUploadServletRequest(
089 request);
090
091 String title = ParamUtil.getString(
092 uploadServletRequest, "title");
093 String description = ParamUtil.getString(
094 uploadServletRequest, "description");
095 String type = ParamUtil.getString(uploadServletRequest, "type");
096 String structureId = ParamUtil.getString(
097 uploadServletRequest, "structureId");
098 String templateId = ParamUtil.getString(
099 uploadServletRequest, "templateId");
100
101 Date now = new Date();
102
103 Date createDate = now;
104 Date modifiedDate = now;
105 Date displayDate = now;
106
107 User user = PortalUtil.getUser(uploadServletRequest);
108
109 String xml = ParamUtil.getString(uploadServletRequest, "xml");
110
111 Document doc = SAXReaderUtil.read(xml);
112
113 Element root = doc.getRootElement();
114
115 String previewArticleId =
116 "PREVIEW_" + StringUtil.randomString(10);
117
118 format(
119 groupId, articleId, version, previewArticleId, root,
120 uploadServletRequest);
121
122 Map<String, String> tokens = JournalUtil.getTokens(
123 groupId, themeDisplay);
124
125 tokens.put("article_resource_pk", "-1");
126
127 JournalArticle article = new JournalArticleImpl();
128
129 article.setGroupId(groupId);
130 article.setCompanyId(user.getCompanyId());
131 article.setUserId(user.getUserId());
132 article.setUserName(user.getFullName());
133 article.setCreateDate(createDate);
134 article.setModifiedDate(modifiedDate);
135 article.setArticleId(articleId);
136 article.setVersion(version);
137 article.setTitle(title);
138 article.setDescription(description);
139 article.setContent(xml);
140 article.setType(type);
141 article.setStructureId(structureId);
142 article.setTemplateId(templateId);
143 article.setDisplayDate(displayDate);
144
145 output = JournalArticleLocalServiceUtil.getArticleContent(
146 article, templateId, null, languageId, themeDisplay);
147 }
148 else if (cmd.equals(Constants.VIEW)) {
149 JournalArticle article = JournalArticleServiceUtil.getArticle(
150 groupId, articleId, version);
151
152 output = JournalArticleLocalServiceUtil.getArticleContent(
153 article, article.getTemplateId(), null, languageId,
154 themeDisplay);
155 }
156 else {
157 output = JournalArticleServiceUtil.getArticleContent(
158 groupId, articleId, version, languageId, themeDisplay);
159 }
160
161 request.setAttribute(WebKeys.JOURNAL_ARTICLE_CONTENT, output);
162
163 if (output.startsWith("<?xml ")) {
164 return actionMapping.findForward(
165 "portlet.journal.raw_article_content");
166 }
167 else {
168 return actionMapping.findForward(
169 "portlet.journal.view_article_content");
170 }
171 }
172 catch (Exception e) {
173 PortalUtil.sendError(e, request, response);
174
175 return null;
176 }
177 finally {
178 if (uploadServletRequest != null) {
179 uploadServletRequest.cleanUp();
180 }
181 }
182 }
183
184 protected void format(
185 long groupId, String articleId, double version,
186 String previewArticleId, Element root,
187 UploadServletRequest uploadServletRequest)
188 throws Exception {
189
190 List<Element> elements = root.elements();
191
192 for (Element element : elements) {
193 Element dynamicContent = element.element("dynamic-content");
194
195 String elInstanceId = element.attributeValue(
196 "instance-id", StringPool.BLANK);
197 String elName = element.attributeValue("name", StringPool.BLANK);
198 String elType = element.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 = uploadServletRequest.getFile(
215 "structure_image_" + elName + elLanguage);
216 byte[] bytes = FileUtil.getBytes(file);
217
218 if (ArrayUtil.isNotEmpty(bytes)) {
219 long imageId =
220 JournalArticleImageLocalServiceUtil.getArticleImageId(
221 groupId, previewArticleId, version, elInstanceId,
222 elName, elLanguage, true);
223
224 String token = WebServerServletTokenUtil.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 =
235 JournalArticleImageLocalServiceUtil.
236 getArticleImageId(
237 groupId, articleId, version, elInstanceId,
238 elName, elLanguage);
239
240 String token = WebServerServletTokenUtil.getToken(
241 imageId);
242
243 dynamicContent.setText(
244 "/image/journal/article?img_id=" + imageId +
245 "&t=" + token);
246 }
247 }
248 }
249
250 format(
251 groupId, articleId, version, previewArticleId, element,
252 uploadServletRequest);
253 }
254 }
255
256 }