fr.paris.lutece.plugins.workflow.web.IconJspBean.java Source code

Java tutorial

Introduction

Here is the source code for fr.paris.lutece.plugins.workflow.web.IconJspBean.java

Source

/*
 * 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.workflow.web;

import fr.paris.lutece.plugins.workflow.utils.WorkflowUtils;
import fr.paris.lutece.plugins.workflowcore.business.action.Action;
import fr.paris.lutece.plugins.workflowcore.business.action.ActionFilter;
import fr.paris.lutece.plugins.workflowcore.business.icon.Icon;
import fr.paris.lutece.plugins.workflowcore.service.action.ActionService;
import fr.paris.lutece.plugins.workflowcore.service.action.IActionService;
import fr.paris.lutece.plugins.workflowcore.service.icon.IIconService;
import fr.paris.lutece.plugins.workflowcore.service.icon.IconService;
import fr.paris.lutece.portal.service.admin.AccessDeniedException;
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.spring.SpringContextService;
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.web.admin.PluginAdminPageJspBean;
import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest;
import fr.paris.lutece.portal.web.util.LocalizedPaginator;
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 java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

/**
 * JspBean to manage workflow icons
 */
public class IconJspBean extends PluginAdminPageJspBean {
    /**
     * Serial version UID
     */
    private static final long serialVersionUID = 1953322601057873584L;

    //   templates
    private static final String TEMPLATE_MANAGE_ICON = "admin/plugins/workflow/manage_icon.html";
    private static final String TEMPLATE_CREATE_ICON = "admin/plugins/workflow/create_icon.html";
    private static final String TEMPLATE_MODIFY_ICON = "admin/plugins/workflow/modify_icon.html";

    //   Markers
    private static final String MARK_ICON_LIST = "icon_list";
    private static final String MARK_ICON = "icon";
    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_ICON = "id_icon";
    private static final String PARAMETER_NAME = "name";
    private static final String PARAMETER_ID_FILE = "id_file";
    private static final String PARAMETER_PAGE_INDEX = "page_index";
    private static final String PARAMETER_WIDTH = "width";
    private static final String PARAMETER_HEIGHT = "height";
    private static final String PARAMETER_CANCEL = "cancel";

    //    other constants
    private static final String EMPTY_STRING = "";

    //   message
    private static final String MESSAGE_CONFIRM_REMOVE_ICON = "workflow.message.confirm_remove_icon";
    private static final String MESSAGE_MANDATORY_FIELD = "workflow.message.mandatory.field";
    private static final String MESSAGE_CAN_NOT_REMOVE_ICON_ACTIONS_ARE_ASSOCIATE = "workflow.message.can_not_remove_icon_actions_are_associate";
    private static final String MESSAGE_NUMERIC_FIELD = "workflow.message.numeric_field";

    //   properties
    private static final String PROPERTY_ITEM_PER_PAGE = "workflow.itemsPerPage";
    private static final String PROPERTY_MANAGE_ICON = "workflow.manage_icon.page_title";
    private static final String PROPERTY_MODIFY_ICON = "workflow.modify_icon.page_title";
    private static final String PROPERTY_CREATE_ICON = "workflow.create_icon.page_title";
    private static final String FIELD_NAME = "workflow.create_icon.label_name";
    private static final String FIELD_WIDTH = "workflow.create_icon.label_width";
    private static final String FIELD_HEIGHT = "workflow.create_icon.label_height";
    private static final String FIELD_FILE = "workflow.create_icon.label_file";

    //Jsp Definition
    private static final String JSP_MANAGE_ICON = "jsp/admin/plugins/workflow/ManageIcon.jsp";
    private static final String JSP_DO_REMOVE_ICON = "jsp/admin/plugins/workflow/DoRemoveIcon.jsp";

    //   session fields
    private int _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt(PROPERTY_ITEM_PER_PAGE, 15);
    private String _strCurrentPageIndex;
    private int _nItemsPerPage;
    private IIconService _iconService = SpringContextService.getBean(IconService.BEAN_SERVICE);
    private IActionService _actionService = SpringContextService.getBean(ActionService.BEAN_SERVICE);

    /**
     * Return management icon ( list of icon )
     * @param request The Http request
     * @return Html management icon
     */
    public String getManageIcon(HttpServletRequest request) {
        Map<String, Object> model = new HashMap<String, Object>();
        List<Icon> listDirectoryXsl = _iconService.getListIcons();
        _strCurrentPageIndex = Paginator.getPageIndex(request, Paginator.PARAMETER_PAGE_INDEX,
                _strCurrentPageIndex);
        _nItemsPerPage = Paginator.getItemsPerPage(request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage,
                _nDefaultItemsPerPage);

        LocalizedPaginator<Icon> paginator = new LocalizedPaginator<Icon>(listDirectoryXsl, _nItemsPerPage,
                getJspManageIcon(request), PARAMETER_PAGE_INDEX, _strCurrentPageIndex, getLocale());

        model.put(MARK_PAGINATOR, paginator);
        model.put(MARK_NB_ITEMS_PER_PAGE, EMPTY_STRING + _nItemsPerPage);
        model.put(MARK_ICON_LIST, paginator.getPageItems());
        setPageTitleProperty(PROPERTY_MANAGE_ICON);

        HtmlTemplate templateList = AppTemplateService.getTemplate(TEMPLATE_MANAGE_ICON, getLocale(), model);

        return getAdminPage(templateList.getHtml());
    }

    /**
    * Gets the icon creation page
    * @param request The HTTP request
    * @return The directory xsl creation page
    */
    public String getCreateIcon(HttpServletRequest request) {
        setPageTitleProperty(PROPERTY_CREATE_ICON);

        HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_CREATE_ICON, getLocale());

        return getAdminPage(template.getHtml());
    }

    /**
    * Perform the icon creation
    * @param request The HTTP request
    * @return The URL to go after performing the action
    */
    public String doCreateIcon(HttpServletRequest request) {
        if (request.getParameter(PARAMETER_CANCEL) == null) {
            Icon icon = new Icon();
            String strError = getIconData(request, icon);

            if (strError != null) {
                return strError;
            }

            _iconService.create(icon);
        }

        return getJspManageIcon(request);
    }

    /**
    * Gets the icon modification page
    * @param request The HTTP request
    * @throws AccessDeniedException the {@link AccessDeniedException}
    * @return The icon creation page
    */
    public String getModifyIcon(HttpServletRequest request) throws AccessDeniedException {
        String strIdIcon = request.getParameter(PARAMETER_ID_ICON);
        int nIdIcon = WorkflowUtils.convertStringToInt(strIdIcon);
        Icon icon = _iconService.findByPrimaryKey(nIdIcon);

        if (icon == null) {
            throw new AccessDeniedException("The icon is not found for ID " + nIdIcon);
        }

        Map<String, Object> model = new HashMap<String, Object>();

        model.put(MARK_ICON, icon);
        setPageTitleProperty(PROPERTY_MODIFY_ICON);

        HtmlTemplate template = AppTemplateService.getTemplate(TEMPLATE_MODIFY_ICON, getLocale(), model);

        return getAdminPage(template.getHtml());
    }

    /**
    * Perform the icon modification
    * @param request The HTTP request
    * @throws AccessDeniedException the {@link AccessDeniedException}
    * @return The URL to go after performing the action
    */
    public String doModifyIcon(HttpServletRequest request) throws AccessDeniedException {
        if (request.getParameter(PARAMETER_CANCEL) == null) {
            String strIdIcon = request.getParameter(PARAMETER_ID_ICON);
            int nIdIcon = WorkflowUtils.convertStringToInt(strIdIcon);
            Icon icon = _iconService.findByPrimaryKey(nIdIcon);

            if (icon == null) {
                throw new AccessDeniedException("The icon is not found for ID " + nIdIcon);
            }

            String strError = getIconData(request, icon);

            if (strError != null) {
                return strError;
            }

            if (icon.getValue() != null) {
                _iconService.update(icon);
            } else {
                _iconService.updateMetadata(icon);
            }
        }

        return getJspManageIcon(request);
    }

    /**
     * Gets the confirmation page of delete icon
     * @param request The HTTP request
     * @throws AccessDeniedException the {@link AccessDeniedException}
     * @return the confirmation page of delete directory xsl
     */
    public String getConfirmRemoveIcon(HttpServletRequest request) throws AccessDeniedException {
        String strIdIcon = request.getParameter(PARAMETER_ID_ICON);
        int nIdIcon = WorkflowUtils.convertStringToInt(strIdIcon);
        ActionFilter filter = new ActionFilter();
        filter.setIdIcon(nIdIcon);

        List<Action> listAction = _actionService.getListActionByFilter(filter);

        if (listAction.size() != 0) {
            return AdminMessageService.getMessageUrl(request, MESSAGE_CAN_NOT_REMOVE_ICON_ACTIONS_ARE_ASSOCIATE,
                    AdminMessage.TYPE_STOP);
        }

        UrlItem url = new UrlItem(JSP_DO_REMOVE_ICON);
        url.addParameter(PARAMETER_ID_ICON, strIdIcon);

        return AdminMessageService.getMessageUrl(request, MESSAGE_CONFIRM_REMOVE_ICON, url.getUrl(),
                AdminMessage.TYPE_CONFIRMATION);
    }

    /**
    * Perform the icon supression
    * @param request The HTTP request
    * @throws AccessDeniedException the {@link AccessDeniedException}
    * @return The URL to go after performing the action
    */
    public String doRemoveIcon(HttpServletRequest request) throws AccessDeniedException {
        String strIdIcon = request.getParameter(PARAMETER_ID_ICON);
        int nIdIcon = WorkflowUtils.convertStringToInt(strIdIcon);
        ActionFilter filter = new ActionFilter();
        filter.setIdIcon(nIdIcon);

        List<Action> listAction = _actionService.getListActionByFilter(filter);

        if (!listAction.isEmpty()) {
            return AdminMessageService.getMessageUrl(request, MESSAGE_CAN_NOT_REMOVE_ICON_ACTIONS_ARE_ASSOCIATE,
                    AdminMessage.TYPE_STOP);
        }

        _iconService.remove(nIdIcon);

        return getJspManageIcon(request);
    }

    /**
     * Get the request data and if there is no error insert the data in the icon object specified in parameter.
     * return null if there is no error or else return the error page url
     * @param  request the request
     * @param icon the Icon Object
     * @return null if there is no error or else return the error page url
     */
    private String getIconData(HttpServletRequest request, Icon icon) {
        String strError = WorkflowUtils.EMPTY_STRING;
        String strName = request.getParameter(PARAMETER_NAME);
        String strWidth = request.getParameter(PARAMETER_WIDTH);
        String strHeight = request.getParameter(PARAMETER_HEIGHT);

        int nWidth = WorkflowUtils.convertStringToInt(strWidth);
        int nHeight = WorkflowUtils.convertStringToInt(strHeight);

        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        FileItem fileItem = multipartRequest.getFile(PARAMETER_ID_FILE);

        if ((strName == null) || strName.trim().equals(EMPTY_STRING)) {
            strError = FIELD_NAME;
        } else if ((icon.getValue() == null) && ((fileItem == null)
                || ((fileItem.getName() == null) && WorkflowUtils.EMPTY_STRING.equals(fileItem.getName())))) {
            strError = FIELD_FILE;
        }

        //Mandatory fields
        if (!strError.equals(EMPTY_STRING)) {
            Object[] tabRequiredFields = { I18nService.getLocalizedString(strError, getLocale()) };

            return AdminMessageService.getMessageUrl(request, MESSAGE_MANDATORY_FIELD, tabRequiredFields,
                    AdminMessage.TYPE_STOP);
        }

        if ((strWidth != null) && (!strWidth.trim().equals(WorkflowUtils.EMPTY_STRING)) && (nWidth == -1)) {
            strError = FIELD_WIDTH;
        } else if ((strHeight != null) && (!strHeight.trim().equals(WorkflowUtils.EMPTY_STRING))
                && (nHeight == -1)) {
            strError = FIELD_HEIGHT;
        }

        if (!strError.equals(WorkflowUtils.EMPTY_STRING)) {
            Object[] tabRequiredFields = { I18nService.getLocalizedString(strError, getLocale()) };

            return AdminMessageService.getMessageUrl(request, MESSAGE_NUMERIC_FIELD, tabRequiredFields,
                    AdminMessage.TYPE_STOP);
        }

        icon.setName(strName);

        if ((fileItem != null) && (fileItem.getName() != null)
                && !WorkflowUtils.EMPTY_STRING.equals(fileItem.getName())) {
            icon.setValue(fileItem.get());
            icon.setMimeType(fileItem.getContentType());
        } else {
            icon.setValue(null);
        }

        icon.setWidth(nWidth);
        icon.setHeight(nHeight);

        return null;
    }

    /**
     * return the url of manage export format
     * @param request the request
     * @return the url of manage export format
     */
    private String getJspManageIcon(HttpServletRequest request) {
        return AppPathService.getBaseUrl(request) + JSP_MANAGE_ICON;
    }
}