ExportFormatJspBean.java
/*
* 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;
}
}