001
014
015 package com.liferay.portlet.exportimport.action;
016
017 import com.liferay.portal.LocaleException;
018 import com.liferay.portal.NoSuchLayoutException;
019 import com.liferay.portal.PortletIdException;
020 import com.liferay.portal.kernel.log.Log;
021 import com.liferay.portal.kernel.log.LogFactoryUtil;
022 import com.liferay.portal.kernel.servlet.SessionErrors;
023 import com.liferay.portal.kernel.servlet.SessionMessages;
024 import com.liferay.portal.kernel.util.Constants;
025 import com.liferay.portal.kernel.util.ParamUtil;
026 import com.liferay.portal.kernel.util.StringPool;
027 import com.liferay.portal.kernel.util.Validator;
028 import com.liferay.portal.kernel.workflow.WorkflowConstants;
029 import com.liferay.portal.model.Portlet;
030 import com.liferay.portal.security.auth.PrincipalException;
031 import com.liferay.portal.service.ServiceContext;
032 import com.liferay.portal.theme.ThemeDisplay;
033 import com.liferay.portal.util.PortalUtil;
034 import com.liferay.portal.util.WebKeys;
035 import com.liferay.portlet.dynamicdatamapping.StructureDuplicateStructureKeyException;
036 import com.liferay.portlet.exportimport.LARFileException;
037 import com.liferay.portlet.exportimport.LARFileNameException;
038 import com.liferay.portlet.exportimport.LARFileSizeException;
039 import com.liferay.portlet.exportimport.LARTypeException;
040 import com.liferay.portlet.exportimport.configuration.ExportImportConfigurationConstants;
041 import com.liferay.portlet.exportimport.configuration.ExportImportConfigurationSettingsMapFactory;
042 import com.liferay.portlet.exportimport.lar.ExportImportHelper;
043 import com.liferay.portlet.exportimport.lar.MissingReferences;
044 import com.liferay.portlet.exportimport.model.ExportImportConfiguration;
045 import com.liferay.portlet.exportimport.service.ExportImportConfigurationLocalServiceUtil;
046 import com.liferay.portlet.exportimport.service.ExportImportServiceUtil;
047 import com.liferay.portlet.exportimport.staging.StagingUtil;
048 import com.liferay.portlet.portletconfiguration.action.ActionUtil;
049
050 import java.io.InputStream;
051 import java.io.Serializable;
052
053 import java.util.Map;
054
055 import javax.portlet.ActionRequest;
056 import javax.portlet.ActionResponse;
057 import javax.portlet.PortletConfig;
058 import javax.portlet.PortletContext;
059 import javax.portlet.PortletRequestDispatcher;
060 import javax.portlet.RenderRequest;
061 import javax.portlet.RenderResponse;
062 import javax.portlet.ResourceRequest;
063 import javax.portlet.ResourceResponse;
064
065 import org.apache.struts.action.ActionForm;
066 import org.apache.struts.action.ActionForward;
067 import org.apache.struts.action.ActionMapping;
068
069
073 public class ExportImportAction extends ImportLayoutsAction {
074
075 @Override
076 public void processAction(
077 ActionMapping actionMapping, ActionForm actionForm,
078 PortletConfig portletConfig, ActionRequest actionRequest,
079 ActionResponse actionResponse)
080 throws Exception {
081
082 Portlet portlet = null;
083
084 try {
085 portlet = ActionUtil.getPortlet(actionRequest);
086 }
087 catch (PrincipalException pe) {
088 SessionErrors.add(actionRequest, pe.getClass());
089
090 setForward(actionRequest, "portlet.export_import.error");
091
092 return;
093 }
094
095 actionRequest = ActionUtil.getWrappedActionRequest(actionRequest, null);
096
097 String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
098
099 try {
100 if (Validator.isNotNull(cmd)) {
101 String redirect = ParamUtil.getString(
102 actionRequest, "redirect");
103
104 if (cmd.equals(Constants.ADD_TEMP)) {
105 addTempFileEntry(
106 actionRequest,
107 ExportImportHelper.TEMP_FOLDER_NAME +
108 portlet.getPortletId());
109
110 validateFile(
111 actionRequest, actionResponse,
112 ExportImportHelper.TEMP_FOLDER_NAME +
113 portlet.getPortletId());
114 }
115 else if (cmd.equals("copy_from_live")) {
116 StagingUtil.copyFromLive(actionRequest, portlet);
117
118 sendRedirect(actionRequest, actionResponse);
119 }
120 else if (cmd.equals(Constants.DELETE_TEMP)) {
121 deleteTempFileEntry(
122 actionRequest, actionResponse,
123 ExportImportHelper.TEMP_FOLDER_NAME +
124 portlet.getPortletId());
125 }
126 else if (cmd.equals(Constants.EXPORT)) {
127 hideDefaultSuccessMessage(actionRequest);
128
129 exportData(actionRequest, actionResponse, portlet);
130
131 sendRedirect(actionRequest, actionResponse, redirect);
132 }
133 else if (cmd.equals(Constants.IMPORT)) {
134 hideDefaultSuccessMessage(actionRequest);
135
136 importData(
137 actionRequest, actionResponse,
138 ExportImportHelper.TEMP_FOLDER_NAME +
139 portlet.getPortletId());
140
141 SessionMessages.add(
142 actionRequest,
143 PortalUtil.getPortletId(actionRequest) +
144 SessionMessages.KEY_SUFFIX_CLOSE_REFRESH_PORTLET,
145 portlet.getPortletId());
146
147 sendRedirect(actionRequest, actionResponse, redirect);
148 }
149 else if (cmd.equals(Constants.PUBLISH_TO_LIVE)) {
150 hideDefaultSuccessMessage(actionRequest);
151
152 StagingUtil.publishToLive(actionRequest, portlet);
153
154 sendRedirect(actionRequest, actionResponse);
155 }
156 }
157 }
158 catch (Exception e) {
159 if (cmd.equals(Constants.ADD_TEMP) ||
160 cmd.equals(Constants.DELETE_TEMP)) {
161
162 handleUploadException(
163 portletConfig, actionRequest, actionResponse,
164 ExportImportHelper.TEMP_FOLDER_NAME +
165 portlet.getPortletId(),
166 e);
167 }
168 else {
169 if ((e instanceof LARFileException) ||
170 (e instanceof LARFileNameException) ||
171 (e instanceof LARFileSizeException) ||
172 (e instanceof LARTypeException) ||
173 (e instanceof LocaleException) ||
174 (e instanceof NoSuchLayoutException) ||
175 (e instanceof PortletIdException) ||
176 (e instanceof PrincipalException) ||
177 (e instanceof StructureDuplicateStructureKeyException)) {
178
179 SessionErrors.add(actionRequest, e.getClass());
180 }
181 else {
182 _log.error(e, e);
183
184 SessionErrors.add(
185 actionRequest, ExportImportAction.class.getName());
186 }
187 }
188 }
189 }
190
191 @Override
192 public ActionForward render(
193 ActionMapping actionMapping, ActionForm actionForm,
194 PortletConfig portletConfig, RenderRequest renderRequest,
195 RenderResponse renderResponse)
196 throws Exception {
197
198 Portlet portlet = null;
199
200 try {
201 portlet = ActionUtil.getPortlet(renderRequest);
202 }
203 catch (PrincipalException pe) {
204 SessionErrors.add(renderRequest, pe.getClass());
205
206 return actionMapping.findForward("portlet.export_import.error");
207 }
208
209 renderResponse.setTitle(ActionUtil.getTitle(portlet, renderRequest));
210
211 renderRequest = ActionUtil.getWrappedRenderRequest(renderRequest, null);
212
213 String cmd = ParamUtil.getString(renderRequest, Constants.CMD);
214
215 String forward = "portlet.export_import.export_import";
216
217 if (cmd.equals(Constants.PUBLISH_TO_LIVE)) {
218 forward = "portlet.export_import.staging";
219 }
220
221 return actionMapping.findForward(getForward(renderRequest, forward));
222 }
223
224 @Override
225 public void serveResource(
226 ActionMapping actionMapping, ActionForm actionForm,
227 PortletConfig portletConfig, ResourceRequest resourceRequest,
228 ResourceResponse resourceResponse)
229 throws Exception {
230
231 String cmd = ParamUtil.getString(resourceRequest, Constants.CMD);
232
233 PortletContext portletContext = portletConfig.getPortletContext();
234
235 PortletRequestDispatcher portletRequestDispatcher = null;
236
237 if (cmd.equals(Constants.EXPORT)) {
238 portletRequestDispatcher = portletContext.getRequestDispatcher(
239 "/html/portlet/export_import/export_portlet_processes.jsp");
240 }
241 else if (cmd.equals(Constants.IMPORT)) {
242 portletRequestDispatcher = portletContext.getRequestDispatcher(
243 "/html/portlet/export_import/import_portlet_processes.jsp");
244 }
245 else if (cmd.equals(Constants.PUBLISH)) {
246 portletRequestDispatcher = portletContext.getRequestDispatcher(
247 "/html/portlet/export_import/publish_portlet_processes.jsp");
248 }
249 else {
250 portletRequestDispatcher = portletContext.getRequestDispatcher(
251 "/html/portlet/export_import/import_portlet_resources.jsp");
252 }
253
254 resourceRequest = ActionUtil.getWrappedResourceRequest(
255 resourceRequest, null);
256
257 portletRequestDispatcher.include(resourceRequest, resourceResponse);
258 }
259
260 protected void exportData(
261 ActionRequest actionRequest, ActionResponse actionResponse,
262 Portlet portlet)
263 throws Exception {
264
265 try {
266 ThemeDisplay themeDisplay =
267 (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
268
269 long plid = ParamUtil.getLong(actionRequest, "plid");
270 long groupId = ParamUtil.getLong(actionRequest, "groupId");
271 String fileName = ParamUtil.getString(
272 actionRequest, "exportFileName");
273
274 Map<String, Serializable> settingsMap =
275 ExportImportConfigurationSettingsMapFactory.
276 buildExportSettingsMap(
277 themeDisplay.getUserId(), plid, groupId,
278 portlet.getPortletId(), actionRequest.getParameterMap(),
279 StringPool.BLANK, themeDisplay.getLocale(),
280 themeDisplay.getTimeZone(), fileName);
281
282 ExportImportConfiguration exportImportConfiguration =
283 ExportImportConfigurationLocalServiceUtil.
284 addExportImportConfiguration(
285 themeDisplay.getUserId(), groupId,
286 portlet.getPortletId(), StringPool.BLANK,
287 ExportImportConfigurationConstants.TYPE_EXPORT_PORTLET,
288 settingsMap, WorkflowConstants.STATUS_DRAFT,
289 new ServiceContext());
290
291 ExportImportServiceUtil.exportPortletInfoAsFileInBackground(
292 exportImportConfiguration);
293 }
294 catch (Exception e) {
295 if (e instanceof LARFileNameException) {
296 throw e;
297 }
298
299 if (_log.isDebugEnabled()) {
300 _log.debug(e, e);
301 }
302
303 SessionErrors.add(actionRequest, e.getClass(), e);
304 }
305 }
306
307 @Override
308 protected void importData(
309 ActionRequest actionRequest, String fileName,
310 InputStream inputStream)
311 throws Exception {
312
313 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
314 WebKeys.THEME_DISPLAY);
315
316 long plid = ParamUtil.getLong(actionRequest, "plid");
317 long groupId = ParamUtil.getLong(actionRequest, "groupId");
318
319 Portlet portlet = ActionUtil.getPortlet(actionRequest);
320
321 Map<String, Serializable> settingsMap =
322 ExportImportConfigurationSettingsMapFactory.buildImportSettingsMap(
323 themeDisplay.getUserId(), plid, groupId, portlet.getPortletId(),
324 actionRequest.getParameterMap(), StringPool.BLANK,
325 themeDisplay.getLocale(), themeDisplay.getTimeZone(),
326 StringPool.BLANK);
327
328 ExportImportConfiguration exportImportConfiguration =
329 ExportImportConfigurationLocalServiceUtil.
330 addExportImportConfiguration(
331 themeDisplay.getUserId(), groupId, portlet.getPortletId(),
332 StringPool.BLANK,
333 ExportImportConfigurationConstants.TYPE_IMPORT_PORTLET,
334 settingsMap, WorkflowConstants.STATUS_DRAFT,
335 new ServiceContext());
336
337 ExportImportServiceUtil.importPortletInfoInBackground(
338 exportImportConfiguration, inputStream);
339 }
340
341 @Override
342 protected MissingReferences validateFile(
343 ActionRequest actionRequest, InputStream inputStream)
344 throws Exception {
345
346 ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
347 WebKeys.THEME_DISPLAY);
348
349 long plid = ParamUtil.getLong(actionRequest, "plid");
350 long groupId = ParamUtil.getLong(actionRequest, "groupId");
351
352 Portlet portlet = ActionUtil.getPortlet(actionRequest);
353
354 Map<String, Serializable> settingsMap =
355 ExportImportConfigurationSettingsMapFactory.buildImportSettingsMap(
356 themeDisplay.getUserId(), plid, groupId, portlet.getPortletId(),
357 actionRequest.getParameterMap(), StringPool.BLANK,
358 themeDisplay.getLocale(), themeDisplay.getTimeZone(),
359 StringPool.BLANK);
360
361 ExportImportConfiguration exportImportConfiguration =
362 ExportImportConfigurationLocalServiceUtil.
363 addExportImportConfiguration(
364 themeDisplay.getUserId(), groupId, portlet.getPortletId(),
365 StringPool.BLANK,
366 ExportImportConfigurationConstants.TYPE_IMPORT_PORTLET,
367 settingsMap, WorkflowConstants.STATUS_DRAFT,
368 new ServiceContext());
369
370 return ExportImportServiceUtil.validateImportPortletInfo(
371 exportImportConfiguration, inputStream);
372 }
373
374 private static final Log _log = LogFactoryUtil.getLog(
375 ExportImportAction.class);
376
377 }