1
22
23 package com.liferay.portlet.wiki.action;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27 import com.liferay.portal.kernel.util.ContentTypes;
28 import com.liferay.portal.kernel.util.HttpUtil;
29 import com.liferay.portal.kernel.util.MimeTypesUtil;
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.struts.ActionConstants;
34 import com.liferay.portal.struts.PortletAction;
35 import com.liferay.portal.theme.ThemeDisplay;
36 import com.liferay.portal.util.PortalUtil;
37 import com.liferay.portal.util.WebKeys;
38 import com.liferay.portlet.ActionRequestImpl;
39 import com.liferay.portlet.PortletURLImpl;
40 import com.liferay.portlet.documentlibrary.util.DocumentConversionUtil;
41 import com.liferay.portlet.wiki.model.WikiPage;
42 import com.liferay.portlet.wiki.service.WikiPageServiceUtil;
43 import com.liferay.portlet.wiki.util.WikiUtil;
44 import com.liferay.util.servlet.ServletResponseUtil;
45
46 import java.io.ByteArrayInputStream;
47 import java.io.InputStream;
48
49 import javax.portlet.ActionRequest;
50 import javax.portlet.ActionResponse;
51 import javax.portlet.PortletConfig;
52 import javax.portlet.PortletMode;
53 import javax.portlet.PortletRequest;
54 import javax.portlet.PortletURL;
55 import javax.portlet.WindowState;
56
57 import javax.servlet.http.HttpServletRequest;
58 import javax.servlet.http.HttpServletResponse;
59
60 import org.apache.struts.action.ActionForm;
61 import org.apache.struts.action.ActionMapping;
62
63
69 public class ExportPageAction extends PortletAction {
70
71 public void processAction(
72 ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
73 ActionRequest actionRequest, ActionResponse actionResponse)
74 throws Exception {
75
76 try {
77 long nodeId = ParamUtil.getLong(actionRequest, "nodeId");
78 String nodeName = ParamUtil.getString(actionRequest, "nodeName");
79 String title = ParamUtil.getString(actionRequest, "title");
80 double version = ParamUtil.getDouble(actionRequest, "version");
81
82 String targetExtension = ParamUtil.getString(
83 actionRequest, "targetExtension");
84
85 ThemeDisplay themeDisplay =
86 (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
87
88 PortletURL viewPageURL = new PortletURLImpl(
89 (ActionRequestImpl)actionRequest,
90 portletConfig.getPortletName(), themeDisplay.getPlid(),
91 PortletRequest.RENDER_PHASE);
92
93 viewPageURL.setPortletMode(PortletMode.VIEW);
94 viewPageURL.setWindowState(WindowState.MAXIMIZED);
95 viewPageURL.setParameter("struts_action", "/wiki/view");
96 viewPageURL.setParameter("nodeName", nodeName);
97 viewPageURL.setParameter("title", title);
98
99 PortletURL editPageURL = new PortletURLImpl(
100 (ActionRequestImpl)actionRequest,
101 portletConfig.getPortletName(), themeDisplay.getPlid(),
102 PortletRequest.RENDER_PHASE);
103
104 editPageURL.setPortletMode(PortletMode.VIEW);
105 editPageURL.setWindowState(WindowState.MAXIMIZED);
106 editPageURL.setParameter("struts_action", "/wiki/edit_page");
107 editPageURL.setParameter("nodeId", String.valueOf(nodeId));
108 editPageURL.setParameter("title", title);
109
110 HttpServletRequest request = PortalUtil.getHttpServletRequest(
111 actionRequest);
112 HttpServletResponse response = PortalUtil.getHttpServletResponse(
113 actionResponse);
114
115 getFile(
116 nodeId, title, version, targetExtension, viewPageURL,
117 editPageURL, themeDisplay, request, response);
118
119 setForward(actionRequest, ActionConstants.COMMON_NULL);
120 }
121 catch (Exception e) {
122 PortalUtil.sendError(e, actionRequest, actionResponse);
123 }
124 }
125
126 protected void getFile(
127 long nodeId, String title, double version, String targetExtension,
128 PortletURL viewPageURL, PortletURL editPageURL,
129 ThemeDisplay themeDisplay, HttpServletRequest request,
130 HttpServletResponse response)
131 throws Exception {
132
133 InputStream is = null;
134
135 try {
136 WikiPage page = WikiPageServiceUtil.getPage(nodeId, title, version);
137
138 String content = page.getContent();
139
140 String attachmentURLPrefix =
141 themeDisplay.getPathMain() + "/wiki/get_page_attachment?" +
142 "p_l_id=" + themeDisplay.getPlid() + "&nodeId=" + nodeId +
143 "&title=" + HttpUtil.encodeURL(title) + "&fileName=";
144
145 try {
146 content = WikiUtil.convert(
147 page, viewPageURL, editPageURL, attachmentURLPrefix);
148 }
149 catch (Exception e) {
150 _log.error(
151 "Error formatting the wiki page " + page.getPageId() +
152 " with the format " + page.getFormat(), e);
153 }
154
155 StringBuilder sb = new StringBuilder();
156
157 sb.append("<html>");
158
159 sb.append("<head>");
160 sb.append("<meta content=\"");
161 sb.append(ContentTypes.TEXT_HTML_UTF8);
162 sb.append("\" http-equiv=\"content-type\" />");
163 sb.append("<base href=\"");
164 sb.append(themeDisplay.getPortalURL());
165 sb.append("\" />");
166 sb.append("</head>");
167
168 sb.append("<body>");
169
170 sb.append("<h1>");
171 sb.append(title);
172 sb.append("</h1>");
173 sb.append(content);
174
175 sb.append("</body>");
176 sb.append("</html>");
177
178 is = new ByteArrayInputStream(
179 sb.toString().getBytes(StringPool.UTF8));
180
181 String sourceExtension = "html";
182
183 sb = new StringBuilder();
184
185 sb.append(title);
186 sb.append(StringPool.PERIOD);
187 sb.append(sourceExtension);
188
189 String fileName = sb.toString();
190
191 if (Validator.isNotNull(targetExtension)) {
192 String id = page.getUuid();
193
194 InputStream convertedIS = DocumentConversionUtil.convert(
195 id, is, sourceExtension, targetExtension);
196
197 if ((convertedIS != null) && (convertedIS != is)) {
198 sb = new StringBuilder();
199
200 sb.append(title);
201 sb.append(StringPool.PERIOD);
202 sb.append(targetExtension);
203
204 fileName = sb.toString();
205
206 is = convertedIS;
207 }
208 }
209
210 String contentType = MimeTypesUtil.getContentType(fileName);
211
212 ServletResponseUtil.sendFile(response, fileName, is, contentType);
213 }
214 catch (Exception e) {
215 _log.error(e, e);
216 }
217 finally {
218 ServletResponseUtil.cleanUp(is);
219 }
220 }
221
222 protected boolean isCheckMethodOnProcessAction() {
223 return _CHECK_METHOD_ON_PROCESS_ACTION;
224 }
225
226 private static final boolean _CHECK_METHOD_ON_PROCESS_ACTION = false;
227
228 private static Log _log = LogFactoryUtil.getLog(ExportPageAction.class);
229
230 }