Java tutorial
/* * Copyright (c) 2002-2014, Mairie de Paris * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright notice * and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice * and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * License 1.0 */ package fr.paris.lutece.plugins.form.web; import fr.paris.lutece.plugins.form.business.ExportFormat; import fr.paris.lutece.plugins.form.business.ExportFormatHome; import fr.paris.lutece.plugins.form.service.ExportFormatResourceIdService; import fr.paris.lutece.portal.business.rbac.RBAC; import fr.paris.lutece.portal.service.fileupload.FileUploadService; import fr.paris.lutece.portal.service.i18n.I18nService; import fr.paris.lutece.portal.service.message.AdminMessage; import fr.paris.lutece.portal.service.message.AdminMessageService; import fr.paris.lutece.portal.service.plugin.Plugin; import fr.paris.lutece.portal.service.rbac.RBACService; import fr.paris.lutece.portal.service.template.AppTemplateService; import fr.paris.lutece.portal.service.util.AppLogService; import fr.paris.lutece.portal.service.util.AppPathService; import fr.paris.lutece.portal.service.util.AppPropertiesService; import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean; import fr.paris.lutece.portal.web.constants.Parameters; import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest; import fr.paris.lutece.util.html.HtmlTemplate; import fr.paris.lutece.util.html.Paginator; import fr.paris.lutece.util.url.UrlItem; import org.apache.commons.fileupload.FileItem; import org.xml.sax.InputSource; import java.io.ByteArrayInputStream; import java.util.HashMap; import java.util.List; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; /** * * class ExportFormatJspBean * */ public class ExportFormatJspBean extends PluginAdminPageJspBean { public static final String RIGHT_MANAGE_FORM = "FORM_MANAGEMENT"; // templates private static final String TEMPLATE_MANAGE_EXPORT = "admin/plugins/form/manage_export_format.html"; private static final String TEMPLATE_CREATE_EXPORT = "admin/plugins/form/create_export_format.html"; private static final String TEMPLATE_MODIFY_EXPORT = "admin/plugins/form/modify_export_format.html"; // Markers private static final String MARK_EXPORT_LIST = "export_list"; private static final String MARK_EXPORT = "export"; private static final String MARK_PAGINATOR = "paginator"; private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page"; // parameters form private static final String PARAMETER_ID_EXPORT = "id_export"; private static final String PARAMETER_TITLE = "title"; private static final String PARAMETER_DESCRIPTION = "description"; private static final String PARAMETER_EXTENSION = "extension"; private static final String PARAMETER_PAGE_INDEX = "page_index"; // other constants private static final String EMPTY_STRING = ""; // message private static final String MESSAGE_CONFIRM_REMOVE_EXPORT = "form.message.confirmRemoveExportFormat"; private static final String MESSAGE_MANDATORY_FIELD = "form.message.mandatory.field"; private static final String FIELD_TITLE = "form.createExportFormat.labelTitle"; private static final String FIELD_DESCRIPTION = "form.createExportFormat.labelDescription"; private static final String FIELD_EXTENSION = "form.createExportFormat.labelExtension"; private static final String FIELD_XSL = "form.createExportFormat.labelXsl"; private static final String MESSAGE_STYLESHEET_NOT_VALID = "form.message.stylesheetNotValid"; // properties private static final String PROPERTY_ITEM_PER_PAGE = "form.itemsPerPage"; private static final String PROPERTY_MANAGE_EXPORT_FORMAT_TITLE = "form.manageExportFormat.pageTitle"; private static final String PROPERTY_MODIFY_EXPORT_FORMAT_TITLE = "form.modifyExportFormat.title"; private static final String PROPERTY_CREATE_EXPORT_FORMAT_TITLE = "form.createExportFormat.title"; //Jsp Definition private static final String JSP_MANAGE_EXPORT_FORMAT = "jsp/admin/plugins/form/ManageExportFormat.jsp"; private static final String JSP_DO_REMOVE_EXPORT_FORMAT = "jsp/admin/plugins/form/DoRemoveExportFormat.jsp"; // session fields private int _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt(PROPERTY_ITEM_PER_PAGE, 15); private String _strCurrentPageIndexExport; private int _nItemsPerPageForm; /** * Return management export format ( list of export format ) * @param request The Http request * @return Html form */ public String getManageExportFormat(HttpServletRequest request) { Plugin plugin = getPlugin(); Locale locale = getLocale(); HashMap model = new HashMap(); List<ExportFormat> listExportFormat = ExportFormatHome.getList(plugin); listExportFormat = (List) RBACService.getAuthorizedCollection(listExportFormat, ExportFormatResourceIdService.PERMISSION_MANAGE, getUser()); _strCurrentPageIndexExport = Paginator.getPageIndex(request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndexExport); _nItemsPerPageForm = Paginator.getItemsPerPage(request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPageForm, _nDefaultItemsPerPage); Paginator paginator = new Paginator(listExportFormat, _nItemsPerPageForm, getJspManageExportFormat(request), PARAMETER_PAGE_INDEX, _strCurrentPageIndexExport); model.put(MARK_PAGINATOR, paginator); model.put(MARK_NB_ITEMS_PER_PAGE, EMPTY_STRING + _nItemsPerPageForm); model.put(MARK_EXPORT_LIST, paginator.getPageItems()); setPageTitleProperty(PROPERTY_MANAGE_EXPORT_FORMAT_TITLE); HtmlTemplate templateList = AppTemplateService.getTemplate(TEMPLATE_MANAGE_EXPORT, locale, model); //ReferenceList refMailingList; //refMailingList=AdminMailingListService.getMailingLists(adminUser); return getAdminPage(templateList.getHtml()); } /** * Gets the export format creation page * @param request The HTTP request * @return The export format creation page */ public String getCreateExportFormat(HttpServletRequest request) { if (!RBACService.isAuthorized(ExportFormat.RESOURCE_TYPE, RBAC.WILDCARD_RESOURCES_ID, ExportFormatResourceIdService.PERMISSION_MANAGE, getUser())) { return getManageExportFormat(request); } Locale locale = getLocale(); HashMap model = new HashMap(); setPageTitleProperty(PROPERTY_CREATE_EXPORT_FORMAT_TITLE); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_CREATE_EXPORT, locale, model); return getAdminPage(template.getHtml()); } /** * Perform the export format creation * @param request The HTTP request * @return The URL to go after performing the action */ public String doCreateExportFormat(HttpServletRequest request) { if (!RBACService.isAuthorized(ExportFormat.RESOURCE_TYPE, RBAC.WILDCARD_RESOURCES_ID, ExportFormatResourceIdService.PERMISSION_MANAGE, getUser())) { return getJspManageExportFormat(request); } MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; ExportFormat exportFormat = new ExportFormat(); String strError = getExportFormatData(multipartRequest, exportFormat); if (strError != null) { return strError; } ExportFormatHome.create(exportFormat, getPlugin()); return getJspManageExportFormat(request); } /** * Gets the export format modification page * @param request The HTTP request * @return The export format creation page */ public String getModifyExportFormat(HttpServletRequest request) { Plugin plugin = getPlugin(); Locale locale = getLocale(); ExportFormat exportFormat; String strIdExport = request.getParameter(PARAMETER_ID_EXPORT); HashMap model = new HashMap(); int nIdExport = -1; if ((strIdExport != null) && !strIdExport.equals(EMPTY_STRING) && RBACService.isAuthorized(ExportFormat.RESOURCE_TYPE, strIdExport, ExportFormatResourceIdService.PERMISSION_MANAGE, getUser())) { try { nIdExport = Integer.parseInt(strIdExport); } catch (NumberFormatException ne) { AppLogService.error(ne); return getManageExportFormat(request); } } else { return getManageExportFormat(request); } exportFormat = ExportFormatHome.findByPrimaryKey(nIdExport, plugin); model.put(MARK_EXPORT, exportFormat); setPageTitleProperty(PROPERTY_MODIFY_EXPORT_FORMAT_TITLE); HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_MODIFY_EXPORT, locale, model); return getAdminPage(template.getHtml()); } /** * Perform the export format modification * @param request The HTTP request * @return The URL to go after performing the action */ public String doModifyExportFormat(HttpServletRequest request) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Plugin plugin = getPlugin(); ExportFormat exportFormat; String strIdExport = multipartRequest.getParameter(PARAMETER_ID_EXPORT); int nIdExport = -1; if ((strIdExport != null) && !strIdExport.equals(EMPTY_STRING) && RBACService.isAuthorized(ExportFormat.RESOURCE_TYPE, strIdExport, ExportFormatResourceIdService.PERMISSION_MANAGE, getUser())) { try { nIdExport = Integer.parseInt(strIdExport); } catch (NumberFormatException ne) { AppLogService.error(ne); return getHomeUrl(request); } } else { return getHomeUrl(request); } exportFormat = ExportFormatHome.findByPrimaryKey(nIdExport, plugin); String strError = getExportFormatData(multipartRequest, exportFormat); if (strError != null) { return strError; } ExportFormatHome.update(exportFormat, getPlugin()); return getJspManageExportFormat(request); } /** * Gets the confirmation page of delete export format * @param request The HTTP request * @return the confirmation page of delete export format */ public String getConfirmRemoveExportFormat(HttpServletRequest request) { if (request.getParameter(PARAMETER_ID_EXPORT) == null) { return getHomeUrl(request); } String strIdExport = request.getParameter(PARAMETER_ID_EXPORT); UrlItem url = new UrlItem(JSP_DO_REMOVE_EXPORT_FORMAT); url.addParameter(PARAMETER_ID_EXPORT, strIdExport); return AdminMessageService.getMessageUrl(request, MESSAGE_CONFIRM_REMOVE_EXPORT, url.getUrl(), AdminMessage.TYPE_CONFIRMATION); } /** * Perform the export format supression * @param request The HTTP request * @return The URL to go after performing the action */ public String doRemoveExportFormat(HttpServletRequest request) { String strIdExport = request.getParameter(PARAMETER_ID_EXPORT); int nIdExport = -1; if ((request.getParameter(PARAMETER_ID_EXPORT) == null) || !RBACService.isAuthorized(ExportFormat.RESOURCE_TYPE, strIdExport, ExportFormatResourceIdService.PERMISSION_MANAGE, getUser())) { return getJspManageExportFormat(request); } try { nIdExport = Integer.parseInt(strIdExport); } catch (NumberFormatException ne) { AppLogService.error(ne); return getHomeUrl(request); } if (nIdExport != -1) { ExportFormatHome.remove(nIdExport, getPlugin()); } return getJspManageExportFormat(request); } /** * Get the request data and if there is no error insert the data in the exportFormat object specified in parameter. * return null if there is no error or else return the error page url * @param multipartRequest the request * @param exportFormat the exportFormat Object * @return null if there is no error or else return the error page url */ private String getExportFormatData(MultipartHttpServletRequest multipartRequest, ExportFormat exportFormat) { String strTitle = multipartRequest.getParameter(PARAMETER_TITLE); String strDescription = multipartRequest.getParameter(PARAMETER_DESCRIPTION); String strExtension = multipartRequest.getParameter(PARAMETER_EXTENSION); String strFieldError = EMPTY_STRING; FileItem fileSource = multipartRequest.getFile(Parameters.STYLESHEET_SOURCE); String strFilename = FileUploadService.getFileNameOnly(fileSource); if ((strTitle == null) || strTitle.trim().equals(EMPTY_STRING)) { strFieldError = FIELD_TITLE; } else if ((strDescription == null) || strDescription.trim().equals(EMPTY_STRING)) { strFieldError = FIELD_DESCRIPTION; } else if ((strExtension == null) || strExtension.trim().equals(EMPTY_STRING)) { strFieldError = FIELD_EXTENSION; } else if ((strFilename == null) || (strFilename.equals("") && (exportFormat.getXsl() == null))) { strFieldError = FIELD_XSL; } //Mandatory fields if (!strFieldError.equals(EMPTY_STRING)) { Object[] tabRequiredFields = { I18nService.getLocalizedString(strFieldError, getLocale()) }; return AdminMessageService.getMessageUrl(multipartRequest, MESSAGE_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP); } byte[] baXslSource = fileSource.get(); //Check the XML validity of the XSL stylesheet if ((strFilename != null) && !strFilename.equals("") && (isValid(baXslSource) != null)) { Object[] args = { isValid(baXslSource) }; return AdminMessageService.getMessageUrl(multipartRequest, MESSAGE_STYLESHEET_NOT_VALID, args, AdminMessage.TYPE_STOP); } exportFormat.setTitle(strTitle); exportFormat.setDescription(strDescription); exportFormat.setExtension(strExtension); if ((strFilename != null) && !strFilename.equals("")) { exportFormat.setXsl(baXslSource); } return null; } /** * Use parsing for validate the modify xsl file * @param baXslSource the xsl source * @return the message exception when the validation is false */ private String isValid(byte[] baXslSource) { String strError = null; try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser analyzer = factory.newSAXParser(); InputSource is = new InputSource(new ByteArrayInputStream(baXslSource)); analyzer.getXMLReader().parse(is); } catch (Exception e) { strError = e.getMessage(); } return strError; } /** * return the url of manage export format * @param request the request * @return the url of manage export format */ private String getJspManageExportFormat(HttpServletRequest request) { return AppPathService.getBaseUrl(request) + JSP_MANAGE_EXPORT_FORMAT; } }