FolderListingDatabaseJspBean.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.folderlisting.web;
import fr.paris.lutece.plugins.folderlisting.business.FolderListingDatabase;
import fr.paris.lutece.plugins.folderlisting.business.FolderListingDatabaseHome;
import fr.paris.lutece.plugins.folderlisting.business.portlet.FolderListingPortletHome;
import fr.paris.lutece.portal.service.message.AdminMessage;
import fr.paris.lutece.portal.service.message.AdminMessageService;
import fr.paris.lutece.portal.service.template.AppTemplateService;
import fr.paris.lutece.portal.service.util.AppPathService;
import fr.paris.lutece.portal.service.util.AppPropertiesService;
import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService;
import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
import fr.paris.lutece.portal.web.constants.Messages;
import fr.paris.lutece.util.ReferenceList;
import fr.paris.lutece.util.html.HtmlTemplate;
import fr.paris.lutece.util.html.Paginator;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
/**
* Creates a new FolderListingDatabaseJspBean object.
*/
public class FolderListingDatabaseJspBean extends PluginAdminPageJspBean
{
//////////////////////////////////////////////////////////////////////////////////////////
// Constants
public static final String RIGHT_FOLDERLISTING_MANAGEMENT = "FOLDERLISTING_MANAGEMENT";
// Markers
private static final String MARK_FOLDER_LIST = "folder_list";
private static final String MARK_FOLDER = "folder";
private static final String MARK_PAGINATOR = "paginator";
private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";
private static final String MARK_WORKGROUP_LIST = "workgroup_list";
// Parameters
private static final String PARAMETER_FOLDER_NAME = "folder_name";
private static final String PARAMETER_FOLDER_PATH = "folder_path";
private static final String PARAMETER_FOLDER_WORKGROUP = "folder_workgroup";
private static final String PARAMETER_ID_FOLDER = "id_folder";
private static final String PARAMETER_PAGE_INDEX = "page_index";
// properties for page titles
private static final String PROPERTY_PAGE_TITLE_FOLDERS = "folderlisting.folders.pageTitle";
private static final String PROPERTY_PAGE_TITLE_CREATE = "folderlisting.create_folder.pageTitle";
private static final String PROPERTY_PAGE_TITLE_MODIFY = "folderlisting.modify_folder.pageTitle";
private static final String PROPERTY_FOLDER_PER_PAGE = "folderlisting.folderPerPage";
// Messages
private static final String MESSAGE_FOLDER_INVALID = "folderlisting.message.folderInvalid";
private static final String MESSAGE_CONFIRM_DELETE_FOLDER = "folderlisting.message.confirmDeleteFolder";
private static final String MESSAGE_FOLDER_LINKED_PORTLET = "folderlisting.message.folderLinkedPortlet";
// Templates
private static final String TEMPLATE_FOLDERS = "/admin/plugins/folderlisting/folders.html";
private static final String TEMPLATE_CREATE_FOLDER = "/admin/plugins/folderlisting/create_folder.html";
private static final String TEMPLATE_MODIFY_FOLDER = "/admin/plugins/folderlisting/modify_folder.html";
//Jsp
private static final String JSP_DELETE_FOLDER = "jsp/admin/plugins/folderlisting/DoDeleteFolder.jsp";
private String _strCurrentPageIndex;
private int _nItemsPerPage;
private int _nDefaultItemsPerPage;
public FolderListingDatabaseJspBean( )
{
_nDefaultItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_FOLDER_PER_PAGE, 10 );
}
/**
* Returns the creation form of a folder
*
* @param request The Http request
*
* @return Html form
*/
public String getCreateFolder( HttpServletRequest request )
{
HashMap<String, ReferenceList> model = new HashMap<String, ReferenceList>( );
setPageTitleProperty( PROPERTY_PAGE_TITLE_CREATE );
model.put( MARK_WORKGROUP_LIST, AdminWorkgroupService.getUserWorkgroups( getUser( ), getLocale( ) ) );
HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_FOLDER, getLocale( ), model );
return getAdminPage( template.getHtml( ) );
}
/**
* Returns folders management form
*
* @param request The Http request
*
* @return Html form
*/
public String getManageFolders( HttpServletRequest request )
{
setPageTitleProperty( PROPERTY_PAGE_TITLE_FOLDERS );
//_nItemsPerPage = getItemsPerPage( request );
_nItemsPerPage = Paginator.getItemsPerPage( request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage,
_nDefaultItemsPerPage );
//_strCurrentPageIndex = getPageIndex( request );
_strCurrentPageIndex = Paginator.getPageIndex( request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
List<FolderListingDatabase> listFolderList = FolderListingDatabaseHome.findFolderListingDatabasesList( getPlugin( ) );
listFolderList = (List<FolderListingDatabase>) AdminWorkgroupService.getAuthorizedCollection( listFolderList,
getUser( ) );
Paginator paginator = new Paginator( listFolderList, _nItemsPerPage, getHomeUrl( request ),
PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
HashMap model = new HashMap( );
model.put( MARK_PAGINATOR, paginator );
model.put( MARK_NB_ITEMS_PER_PAGE, "" + _nItemsPerPage );
model.put( MARK_FOLDER_LIST, paginator.getPageItems( ) );
HtmlTemplate templateList = AppTemplateService.getTemplate( TEMPLATE_FOLDERS, getLocale( ), model );
return getAdminPage( templateList.getHtml( ) );
}
/**
* Returns the form to update info about a folder
*
* @param request The Http request
*
* @return The HTML form to update info
*/
public String getModifyFolder( HttpServletRequest request )
{
HashMap model = new HashMap( );
setPageTitleProperty( PROPERTY_PAGE_TITLE_MODIFY );
int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_FOLDER ) );
FolderListingDatabase folder = FolderListingDatabaseHome.findByPrimaryKey( nId, getPlugin( ) );
model.put( MARK_FOLDER, folder );
model.put( MARK_WORKGROUP_LIST, AdminWorkgroupService.getUserWorkgroups( getUser( ), getLocale( ) ) );
HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_FOLDER, getLocale( ), model );
return getAdminPage( template.getHtml( ) );
}
/**
* Process the confirmation of a removal of a folder
*
* @param request The Http Request
*
* @return A dynamic url
*/
public String doConfirmDelete( HttpServletRequest request )
{
String strIdFolder = request.getParameter( PARAMETER_ID_FOLDER );
int nIdFolder = Integer.parseInt( strIdFolder );
String strDeleteUrl = JSP_DELETE_FOLDER + "?" + PARAMETER_ID_FOLDER + "=" + strIdFolder;
String strUrl = AdminMessageService.getMessageUrl( request, MESSAGE_FOLDER_LINKED_PORTLET,
AdminMessage.TYPE_STOP );
// Check whether a folder is linked to a portlet
if ( FolderListingPortletHome.checkNoFolderInPortlet( nIdFolder ) )
{
FolderListingDatabase folder = FolderListingDatabaseHome.findByPrimaryKey( nIdFolder, getPlugin( ) );
Object[] messageArgs = { folder.getFolderName( ) };
strUrl = AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_DELETE_FOLDER, messageArgs,
strDeleteUrl, AdminMessage.TYPE_CONFIRMATION );
}
return strUrl;
}
/**
* Process the data capture form of a new Folder
*
* @param request The Http Request
*
* @return The Jsp URL of the process result
*/
public String doCreateFolder( HttpServletRequest request )
{
FolderListingDatabase folder = new FolderListingDatabase( );
String strFolderPath = request.getParameter( PARAMETER_FOLDER_PATH );
strFolderPath = cleanPath( strFolderPath );
folder.setFolderName( request.getParameter( PARAMETER_FOLDER_NAME ) );
folder.setFolderPath( strFolderPath );
folder.setWorkgroup( request.getParameter( PARAMETER_FOLDER_WORKGROUP ) );
// Mandatory fields
if ( request.getParameter( PARAMETER_FOLDER_NAME ).equals( "" ) ||
request.getParameter( PARAMETER_FOLDER_PATH ).equals( "" ) )
{
return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
}
String strUrl = AdminMessageService.getMessageUrl( request, MESSAGE_FOLDER_INVALID, AdminMessage.TYPE_STOP );
if ( isValidFolder( folder.getFolderPath( ) ) )
{
FolderListingDatabaseHome.create( folder, getPlugin( ) );
strUrl = getHomeUrl( request );
}
return strUrl;
}
/**
* Process folder removal
*
* @param request The Http request
*
* @return String The url of the administration console
*/
public String doDeleteFolder( HttpServletRequest request )
{
int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_FOLDER ) );
FolderListingDatabaseHome.remove( nId, getPlugin( ) );
return getHomeUrl( request );
}
/**
* Process folder modification
*
* @param request The Http request
*
* @return String The url of the administration console
*/
public String doModifyFolder( HttpServletRequest request )
{
int nIdFolder = Integer.parseInt( request.getParameter( PARAMETER_ID_FOLDER ) );
String strFolderPath = request.getParameter( PARAMETER_FOLDER_PATH );
String strFolderName = request.getParameter( PARAMETER_FOLDER_NAME );
strFolderPath = cleanPath( strFolderPath );
// Mandatory fields
if ( request.getParameter( PARAMETER_FOLDER_PATH ).equals( "" ) ||
request.getParameter( PARAMETER_FOLDER_NAME ).equals( "" ) )
{
return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
}
FolderListingDatabase folder = FolderListingDatabaseHome.findByPrimaryKey( nIdFolder, getPlugin( ) );
folder.setFolderName( strFolderName );
folder.setFolderPath( strFolderPath );
folder.setWorkgroup( request.getParameter( PARAMETER_FOLDER_WORKGROUP ) );
String strUrl = AdminMessageService.getMessageUrl( request, MESSAGE_FOLDER_INVALID, AdminMessage.TYPE_STOP );
if ( isValidFolder( folder.getFolderPath( ) ) )
{
FolderListingDatabaseHome.update( folder, getPlugin( ) );
strUrl = getHomeUrl( request );
}
return strUrl;
}
/**
* Verifies whether the folder is valid
* @param strFolderPath The Path of the folder
* @return true if the folder is a valid folder
*/
private boolean isValidFolder( String strFolderPath )
{
strFolderPath = "/" + strFolderPath;
String strAbsolutePath = AppPathService.getAbsolutePathFromRelativePath( strFolderPath );
boolean bValue = false;
if ( new File( strAbsolutePath ).exists( ) )
{
bValue = true;
}
return bValue;
}
/**
* Cleans the path of the folder path
* @param strPath
* @return
*/
private String cleanPath( String strPath )
{
if ( !strPath.startsWith( "/" ) )
{
strPath = "/" + strPath;
}
return strPath;
}
}