Java tutorial
/** * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.portlet.wiki.action; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.servlet.SessionErrors; import com.liferay.portal.kernel.upload.UploadException; import com.liferay.portal.kernel.upload.UploadPortletRequest; import com.liferay.portal.kernel.util.Constants; import com.liferay.portal.kernel.util.FileUtil; import com.liferay.portal.kernel.util.KeyValuePair; import com.liferay.portal.kernel.util.ObjectValuePair; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.StreamUtil; import com.liferay.portal.kernel.util.TempFileUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.security.auth.PrincipalException; import com.liferay.portal.struts.ActionConstants; import com.liferay.portal.theme.ThemeDisplay; import com.liferay.portal.util.PortalUtil; import com.liferay.portal.util.WebKeys; import com.liferay.portlet.documentlibrary.DuplicateFileException; import com.liferay.portlet.documentlibrary.FileSizeException; import com.liferay.portlet.documentlibrary.action.EditFileEntryAction; import com.liferay.portlet.wiki.NoSuchNodeException; import com.liferay.portlet.wiki.NoSuchPageException; import com.liferay.portlet.wiki.service.WikiPageServiceUtil; import java.io.File; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletConfig; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * @author Jorge Ferrer */ public class EditPageAttachmentAction extends EditFileEntryAction { @Override public void processAction(ActionMapping mapping, ActionForm form, PortletConfig portletConfig, ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { String cmd = ParamUtil.getString(actionRequest, Constants.CMD); try { if (Validator.isNull(cmd)) { UploadException uploadException = (UploadException) actionRequest .getAttribute(WebKeys.UPLOAD_EXCEPTION); if (uploadException != null) { if (uploadException.isExceededSizeLimit()) { throw new FileSizeException(uploadException.getCause()); } throw new PortalException(uploadException.getCause()); } } else if (cmd.equals(Constants.ADD)) { addAttachment(actionRequest); } else if (cmd.equals(Constants.ADD_MULTIPLE)) { addMultipleFileEntries(actionRequest, actionResponse); } else if (cmd.equals(Constants.ADD_TEMP)) { addTempAttachment(actionRequest); } else if (cmd.equals(Constants.DELETE)) { deleteAttachment(actionRequest); } else if (cmd.equals(Constants.DELETE_TEMP)) { deleteTempAttachment(actionRequest, actionResponse); } if (cmd.equals(Constants.ADD_TEMP) || cmd.equals(Constants.DELETE_TEMP)) { setForward(actionRequest, ActionConstants.COMMON_NULL); } else { sendRedirect(actionRequest, actionResponse); } } catch (Exception e) { if (e instanceof DuplicateFileException || e instanceof NoSuchNodeException || e instanceof NoSuchPageException || e instanceof PrincipalException) { SessionErrors.add(actionRequest, e.getClass().getName()); setForward(actionRequest, "portlet.wiki.error"); } else if (e instanceof FileSizeException) { SessionErrors.add(actionRequest, e.getClass().getName()); } else { throw e; } } } @Override public ActionForward render(ActionMapping mapping, ActionForm form, PortletConfig portletConfig, RenderRequest renderRequest, RenderResponse renderResponse) throws Exception { try { ActionUtil.getNode(renderRequest); ActionUtil.getPage(renderRequest); } catch (Exception e) { if (e instanceof NoSuchNodeException || e instanceof NoSuchPageException || e instanceof PrincipalException) { SessionErrors.add(renderRequest, e.getClass().getName()); return mapping.findForward("portlet.wiki.error"); } else { throw e; } } return mapping.findForward(getForward(renderRequest, "portlet.wiki.edit_page_attachment")); } protected void addAttachment(ActionRequest actionRequest) throws Exception { UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest); long nodeId = ParamUtil.getLong(actionRequest, "nodeId"); String title = ParamUtil.getString(actionRequest, "title"); int numOfFiles = ParamUtil.getInteger(actionRequest, "numOfFiles"); List<ObjectValuePair<String, InputStream>> inputStreamOVPs = new ArrayList<ObjectValuePair<String, InputStream>>(); try { if (numOfFiles == 0) { String fileName = uploadPortletRequest.getFileName("file"); InputStream inputStream = uploadPortletRequest.getFileAsStream("file"); if (inputStream != null) { ObjectValuePair<String, InputStream> inputStreamOVP = new ObjectValuePair<String, InputStream>( fileName, inputStream); inputStreamOVPs.add(inputStreamOVP); } } else { for (int i = 1; i <= numOfFiles; i++) { String fileName = uploadPortletRequest.getFileName("file" + i); InputStream inputStream = uploadPortletRequest.getFileAsStream("file" + i); if (inputStream == null) { continue; } ObjectValuePair<String, InputStream> inputStreamOVP = new ObjectValuePair<String, InputStream>( fileName, inputStream); inputStreamOVPs.add(inputStreamOVP); } } WikiPageServiceUtil.addPageAttachments(nodeId, title, inputStreamOVPs); } finally { for (ObjectValuePair<String, InputStream> inputStreamOVP : inputStreamOVPs) { InputStream inputStream = inputStreamOVP.getValue(); StreamUtil.cleanUp(inputStream); } } } @Override protected void addMultipleFileEntries(ActionRequest actionRequest, ActionResponse actionResponse, String selectedFileName, List<String> validFileNames, List<KeyValuePair> invalidFileNameKVPs) throws Exception { ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); long nodeId = ParamUtil.getLong(actionRequest, "nodeId"); String title = ParamUtil.getString(actionRequest, "title"); File file = null; try { file = TempFileUtil.getTempFile(themeDisplay.getUserId(), selectedFileName, _TEMP_FOLDER_NAME); if ((file != null) && file.exists()) { WikiPageServiceUtil.addPageAttachment(nodeId, title, selectedFileName, file); validFileNames.add(selectedFileName); } } catch (Exception e) { String errorMessage = getAddMultipleFileEntriesErrorMessage(themeDisplay, e); KeyValuePair invalidFileNameKVP = new KeyValuePair(selectedFileName, errorMessage); invalidFileNameKVPs.add(invalidFileNameKVP); } finally { FileUtil.delete(file); } } protected void addTempAttachment(ActionRequest actionRequest) throws Exception { UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest); long nodeId = ParamUtil.getLong(actionRequest, "nodeId"); String sourceFileName = uploadPortletRequest.getFileName("file"); InputStream inputStream = null; try { inputStream = uploadPortletRequest.getFileAsStream("file"); WikiPageServiceUtil.addTempPageAttachment(nodeId, sourceFileName, _TEMP_FOLDER_NAME, inputStream); } finally { StreamUtil.cleanUp(inputStream); } } protected void deleteAttachment(ActionRequest actionRequest) throws Exception { long nodeId = ParamUtil.getLong(actionRequest, "nodeId"); String title = ParamUtil.getString(actionRequest, "title"); String attachment = ParamUtil.getString(actionRequest, "fileName"); WikiPageServiceUtil.deletePageAttachment(nodeId, title, attachment); } protected void deleteTempAttachment(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception { ThemeDisplay themeDisplay = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); long nodeId = ParamUtil.getLong(actionRequest, "nodeId"); String fileName = ParamUtil.getString(actionRequest, "fileName"); JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); try { WikiPageServiceUtil.deleteTempPageAttachment(nodeId, fileName, _TEMP_FOLDER_NAME); jsonObject.put("deleted", Boolean.TRUE); } catch (Exception e) { String errorMessage = LanguageUtil.get(themeDisplay.getLocale(), "an-unexpected-error-occurred-while-deleting-the-file"); jsonObject.put("deleted", Boolean.FALSE); jsonObject.put("errorMessage", errorMessage); } writeJSON(actionRequest, actionResponse, jsonObject); } private static final String _TEMP_FOLDER_NAME = EditPageAttachmentAction.class.getName(); }