fr.paris.lutece.plugins.profiles.web.views.ViewsJspBean.java Source code

Java tutorial

Introduction

Here is the source code for fr.paris.lutece.plugins.profiles.web.views.ViewsJspBean.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.profiles.web.views;

import fr.paris.lutece.plugins.profiles.business.Profile;
import fr.paris.lutece.plugins.profiles.business.ProfileFilter;
import fr.paris.lutece.plugins.profiles.business.views.View;
import fr.paris.lutece.plugins.profiles.business.views.ViewAction;
import fr.paris.lutece.plugins.profiles.business.views.ViewFilter;
import fr.paris.lutece.plugins.profiles.service.IProfilesService;
import fr.paris.lutece.plugins.profiles.service.action.IViewActionService;
import fr.paris.lutece.plugins.profiles.service.views.IViewsService;
import fr.paris.lutece.plugins.profiles.service.views.ViewsResourceIdService;
import fr.paris.lutece.plugins.profiles.utils.constants.ProfilesConstants;
import fr.paris.lutece.portal.business.dashboard.DashboardFactory;
import fr.paris.lutece.portal.business.rbac.RBAC;
import fr.paris.lutece.portal.service.dashboard.DashboardService;
import fr.paris.lutece.portal.service.dashboard.IDashboardComponent;
import fr.paris.lutece.portal.service.message.AdminMessage;
import fr.paris.lutece.portal.service.message.AdminMessageService;
import fr.paris.lutece.portal.service.rbac.RBACService;
import fr.paris.lutece.portal.service.spring.SpringContextService;
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.Messages;
import fr.paris.lutece.portal.web.constants.Parameters;
import fr.paris.lutece.portal.web.util.LocalizedPaginator;
import fr.paris.lutece.util.ReferenceItem;
import fr.paris.lutece.util.ReferenceList;
import fr.paris.lutece.util.html.HtmlTemplate;
import fr.paris.lutece.util.html.ItemNavigator;
import fr.paris.lutece.util.html.Paginator;
import fr.paris.lutece.util.sort.AttributeComparator;
import fr.paris.lutece.util.string.StringUtil;
import fr.paris.lutece.util.url.UrlItem;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;

/**
 * 
 * class ViewsJspBean
 * 
 */
public class ViewsJspBean extends PluginAdminPageJspBean {

    public static final String RIGHT_MANAGE_VIEWS = "PROFILES_VIEWS_MANAGEMENT";

    private static final long serialVersionUID = -17732197055870793L;

    // TEMPLATES
    private static final String TEMPLATE_MANAGE_VIEWS = "admin/plugins/profiles/views/manage_views.html";
    private static final String TEMPLATE_CREATE_VIEW = "admin/plugins/profiles/views/create_view.html";
    private static final String TEMPLATE_MODIFY_VIEW = "admin/plugins/profiles/views/modify_view.html";
    private static final String TEMPLATE_ASSIGN_PROFILES_VIEW = "admin/plugins/profiles/views/assign_profiles_view.html";
    private static final String TEMPLATE_MANAGE_DASHBOARDS = "admin/plugins/profiles/views/manage_dashboards.html";

    // JSP
    private static final String JSP_MANAGE_VIEWS = "ManageViews.jsp";
    private static final String JSP_URL_DO_REMOVE_VIEW = "jsp/admin/plugins/profiles/DoRemoveView.jsp";
    private static final String JSP_URL_MODIFY_VIEW = "jsp/admin/plugins/profiles/ModifyView.jsp";
    private static final String JSP_URL_ASSIGN_PROFILES_VIEW = "jsp/admin/plugins/profiles/AssignProfilesView.jsp";
    private static final String JSP_ASSIGN_PROFILES_VIEW = "AssignProfilesView.jsp";
    private static final String JSP_URL_MANAGE_DASHBOARDS = "jsp/admin/plugins/profiles/ManageDashboards.jsp";
    private static final String JSP_MANAGE_DASHBOARDS = "ManageDashboards.jsp";

    // VARIABLES
    private int _nItemsPerPage;
    private int _nDefaultItemsPerPage;
    private String _strCurrentPageIndex;
    private Map<String, ItemNavigator> _itemNavigators = new HashMap<String, ItemNavigator>();
    private IViewsService _viewsService = (IViewsService) SpringContextService
            .getBean(ProfilesConstants.BEAN_VIEWS_SERVICE);
    private IViewActionService _viewActionService = (IViewActionService) SpringContextService
            .getBean(ProfilesConstants.BEAN_VIEW_ACTION_SERVICE);
    private IProfilesService _profilesService = (IProfilesService) SpringContextService
            .getBean(ProfilesConstants.BEAN_PROFILES_SERVICE);
    private ViewFilter _vFilter;

    /**
     * Return views management
     * @param request The Http request
     * @return Html views management page
     */
    public String getManageViews(HttpServletRequest request) {
        setPageTitleProperty(ProfilesConstants.PROPERTY_MANAGE_VIEWS_PAGETITLE);

        // Reinit session
        reinitItemNavigators();

        // FILTER
        _vFilter = new ViewFilter();

        boolean bIsSearch = _vFilter.setFilter(request);

        List<View> filteredViews = _viewsService.findViewsByFilter(_vFilter, getPlugin());

        // SORT
        String strSortedAttributeName = request.getParameter(Parameters.SORTED_ATTRIBUTE_NAME);
        String strAscSort = null;

        if (strSortedAttributeName != null) {
            strAscSort = request.getParameter(Parameters.SORTED_ASC);

            boolean bIsAscSort = Boolean.parseBoolean(strAscSort);

            Collections.sort(filteredViews, new AttributeComparator(strSortedAttributeName, bIsAscSort));
        }

        _strCurrentPageIndex = Paginator.getPageIndex(request, Paginator.PARAMETER_PAGE_INDEX,
                _strCurrentPageIndex);
        _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt(ProfilesConstants.PROPERTY_ITEM_PER_PAGE, 50);
        _nItemsPerPage = Paginator.getItemsPerPage(request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage,
                _nDefaultItemsPerPage);

        String strURL = getHomeUrl(request);
        UrlItem url = new UrlItem(strURL);

        if (strSortedAttributeName != null) {
            url.addParameter(Parameters.SORTED_ATTRIBUTE_NAME, strSortedAttributeName);
        }

        if (strAscSort != null) {
            url.addParameter(Parameters.SORTED_ASC, strAscSort);
        }

        String strSortSearchAttribute = StringUtils.EMPTY;

        if (bIsSearch) {
            _vFilter.setUrlAttributes(url);
            strSortSearchAttribute = ProfilesConstants.AMPERSAND + _vFilter.getUrlAttributes();
        }

        // PAGINATOR
        LocalizedPaginator<View> paginator = new LocalizedPaginator<View>(filteredViews, _nItemsPerPage,
                url.getUrl(), Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex, getLocale());

        // PERMISSIONS
        for (View view : filteredViews) {
            List<ViewAction> listActions = _viewActionService.selectActionsList(getLocale(), getPlugin());
            listActions = (List<ViewAction>) RBACService.getAuthorizedActionsCollection(listActions, view,
                    getUser());
            view.setActions(listActions);
        }

        boolean bPermission = RBACService.isAuthorized(View.RESOURCE_TYPE, RBAC.WILDCARD_RESOURCES_ID,
                ViewsResourceIdService.PERMISSION_CREATE_VIEW, getUser());

        Map<String, Object> model = new HashMap<String, Object>();
        model.put(ProfilesConstants.MARK_NB_ITEMS_PER_PAGE, StringUtils.EMPTY + _nItemsPerPage);
        model.put(ProfilesConstants.MARK_PAGINATOR, paginator);
        model.put(ProfilesConstants.MARK_LIST_VIEWS, paginator.getPageItems());
        model.put(ProfilesConstants.MARK_SEARCH_FILTER, _vFilter);
        model.put(ProfilesConstants.MARK_SEARCH_IS_SEARCH, bIsSearch);
        model.put(ProfilesConstants.MARK_SORT_SEARCH_ATTRIBUTE, strSortSearchAttribute);
        model.put(ProfilesConstants.MARK_PERMISSION, bPermission);

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

        return getAdminPage(templateList.getHtml());
    }

    /* CREATE VIEW */

    /**
     * Returns the view creation form
     * 
     * @param request The Http request
     * @return Html creation form
     */
    public String getCreateView(HttpServletRequest request) {
        setPageTitleProperty(ProfilesConstants.PROPERTY_CREATE_VIEW_PAGETITLE);

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

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

        return getAdminPage(template.getHtml());
    }

    /**
     * Process the data capture form of a new view
     * 
     * @param request The HTTP Request
     * @return The Jsp URL of the process result
     */
    public String doCreateView(HttpServletRequest request) {
        if (!RBACService.isAuthorized(View.RESOURCE_TYPE, RBAC.WILDCARD_RESOURCES_ID,
                ViewsResourceIdService.PERMISSION_CREATE_VIEW, getUser())) {
            return AdminMessageService.getMessageUrl(request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_STOP);
        }

        String strKey = request.getParameter(ProfilesConstants.PARAMETER_VIEW_KEY);
        String strDescription = request.getParameter(ProfilesConstants.PARAMETER_VIEW_DESCRIPTION);

        if (StringUtils.isBlank(strKey)) {
            return AdminMessageService.getMessageUrl(request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP);
        }

        if (StringUtils.isBlank(strDescription)) {
            return AdminMessageService.getMessageUrl(request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP);
        }

        // Check if the view already exists
        if (_viewsService.checkExistView(strKey, getPlugin())) {
            return AdminMessageService.getMessageUrl(request, ProfilesConstants.MESSAGE_VIEW_ALREADY_EXISTS,
                    AdminMessage.TYPE_STOP);
        }

        // Check if strKey contains accentuated characters
        if (!StringUtil.checkCodeKey(strKey)) {
            return AdminMessageService.getMessageUrl(request, ProfilesConstants.MESSAGE_ACCENTUATED_CHARACTER,
                    AdminMessage.TYPE_STOP);
        }

        View view = new View();
        view.setKey(strKey.trim());
        view.setDescription(strDescription);
        _viewsService.create(view, getPlugin());

        return JSP_MANAGE_VIEWS;
    }

    /* REMOVE VIEW */

    /**
     * Returns the confirmation to remove the view
     * 
     * @param request The Http request
     * @return the confirmation page
     */
    public String getConfirmRemoveView(HttpServletRequest request) {
        String strViewKey = request.getParameter(ProfilesConstants.PARAMETER_VIEW_KEY);

        UrlItem url = new UrlItem(JSP_URL_DO_REMOVE_VIEW);
        url.addParameter(ProfilesConstants.PARAMETER_VIEW_KEY, strViewKey);

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

    /**
     * Remove a view
     * 
     * @param request The Http request
     * @return Html form
     */
    public String doRemoveView(HttpServletRequest request) {
        String strViewKey = request.getParameter(ProfilesConstants.PARAMETER_VIEW_KEY);

        if (!RBACService.isAuthorized(View.RESOURCE_TYPE, strViewKey, ViewsResourceIdService.PERMISSION_DELETE_VIEW,
                getUser())) {
            return AdminMessageService.getMessageUrl(request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_STOP);
        }

        _viewsService.removeProfiles(strViewKey, getPlugin());
        _viewsService.removeDashboards(strViewKey, getPlugin());
        _viewsService.remove(strViewKey, getPlugin());

        return JSP_MANAGE_VIEWS;
    }

    /* MODIFY VIEW */

    /**
     * Returns the form for view modification
     * 
     * @param request The Http request
     * @return Html form
     */
    public String getModifyView(HttpServletRequest request) {
        setPageTitleProperty(ProfilesConstants.PROPERTY_MODIFY_PROFILE_PAGETITLE);

        String strViewKey = request.getParameter(ProfilesConstants.PARAMETER_VIEW_KEY);
        View view = _viewsService.findByPrimaryKey(strViewKey, getPlugin());

        String strPermission = ViewsResourceIdService.PERMISSION_MODIFY_VIEW;
        boolean bPermission = RBACService.isAuthorized(View.RESOURCE_TYPE, strViewKey, strPermission, getUser());
        String strBaseUrl = AppPathService.getBaseUrl(request) + JSP_URL_MODIFY_VIEW;
        UrlItem url = new UrlItem(strBaseUrl);

        // ITEM NAVIGATION
        setItemNavigator(ProfilesConstants.PARAMETER_MODIFY_VIEW, view, url);

        // PERMISSIONS
        List<ViewAction> listActions = _viewsService.getListActions(getUser(), view, strPermission, getLocale(),
                getPlugin());
        view.setActions(listActions);

        Map<String, Object> model = new HashMap<String, Object>();
        model.put(ProfilesConstants.MARK_VIEW, view);
        model.put(ProfilesConstants.MARK_ITEM_NAVIGATOR,
                _itemNavigators.get(ProfilesConstants.PARAMETER_MODIFY_VIEW));
        model.put(ProfilesConstants.MARK_PERMISSION, bPermission);

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

        return getAdminPage(template.getHtml());
    }

    /**
     * Update a view
     * 
     * @param request The Http request
     * @return Html form
     */
    public String doModifyView(HttpServletRequest request) {
        String strViewKey = request.getParameter(ProfilesConstants.PARAMETER_VIEW_KEY);

        if (!RBACService.isAuthorized(View.RESOURCE_TYPE, strViewKey, ViewsResourceIdService.PERMISSION_MODIFY_VIEW,
                getUser())) {
            return AdminMessageService.getMessageUrl(request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_STOP);
        }

        String strDescription = request.getParameter(ProfilesConstants.PARAMETER_VIEW_DESCRIPTION);

        if (StringUtils.isBlank(strDescription)) {
            return AdminMessageService.getMessageUrl(request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP);
        }

        View view = new View();
        view.setKey(strViewKey.trim());
        view.setDescription(strDescription);
        _viewsService.update(view, getPlugin());

        return JSP_MANAGE_VIEWS;
    }

    /* ASSIGN PROFILES */

    /**
     * Returns the user assignation form
     * 
     * @param request The Http request
     * @return the html code for display the modes list
     */
    public String getAssignProfilesView(HttpServletRequest request) {
        Map<String, Object> model = new HashMap<String, Object>();
        setPageTitleProperty(ProfilesConstants.PROPERTY_ASSIGN_PROFILES_VIEW_PAGETITLE);

        String strBaseUrl = AppPathService.getBaseUrl(request) + JSP_URL_ASSIGN_PROFILES_VIEW;
        UrlItem url = new UrlItem(strBaseUrl);

        // VIEW
        String strViewKey = request.getParameter(ProfilesConstants.PARAMETER_VIEW_KEY);
        View view = _viewsService.findByPrimaryKey(strViewKey, getPlugin());

        // ASSIGNED PROFILES
        List<Profile> listAssignedProfiles = new ArrayList<Profile>();

        for (Profile profile : _viewsService.getProfilesListForView(strViewKey, getPlugin())) {
            profile = _profilesService.findByPrimaryKey(profile.getKey(), getPlugin());
            listAssignedProfiles.add(profile);
        }

        // FILTERED PROFILES
        ProfileFilter pFilter = new ProfileFilter();
        List<Profile> listFilteredProfiles = new ArrayList<Profile>();
        boolean bIsSearch = pFilter.setFilter(request);

        for (Profile filteredProfile : _profilesService.findProfilesByFilter(pFilter, getPlugin())) {
            for (Profile profile : listAssignedProfiles) {
                if (filteredProfile.getKey().equals(profile.getKey())) {
                    listFilteredProfiles.add(profile);
                }
            }
        }

        String strSortSearchAttribute = StringUtils.EMPTY;

        if (bIsSearch) {
            pFilter.setUrlAttributes(url);
            strSortSearchAttribute = ProfilesConstants.AMPERSAND + pFilter.getUrlAttributes();
        }

        // AVAILABLE PROFILES
        ReferenceList listAvailableProfiles = new ReferenceList();
        ReferenceItem itemProfile = null;
        boolean bAssigned;

        for (Profile profile : _profilesService.findAll(getPlugin())) {
            itemProfile = new ReferenceItem();
            itemProfile.setCode(profile.getKey());
            itemProfile.setName(profile.getKey());
            bAssigned = false;

            for (Profile assignedProfile : listAssignedProfiles) {
                if (assignedProfile.getKey().equals(itemProfile.getCode())) {
                    bAssigned = true;

                    break;
                }
            }

            if (!bAssigned) {
                listAvailableProfiles.add(itemProfile);
            }
        }

        // SORT
        String strSortedAttributeName = request.getParameter(Parameters.SORTED_ATTRIBUTE_NAME);
        String strAscSort = null;

        if (strSortedAttributeName != null) {
            strAscSort = request.getParameter(Parameters.SORTED_ASC);

            boolean bIsAscSort = Boolean.parseBoolean(strAscSort);

            Collections.sort(listFilteredProfiles, new AttributeComparator(strSortedAttributeName, bIsAscSort));
        }

        _strCurrentPageIndex = Paginator.getPageIndex(request, Paginator.PARAMETER_PAGE_INDEX,
                _strCurrentPageIndex);
        _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt(ProfilesConstants.PROPERTY_ITEM_PER_PAGE, 50);
        _nItemsPerPage = Paginator.getItemsPerPage(request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage,
                _nDefaultItemsPerPage);

        if (strSortedAttributeName != null) {
            url.addParameter(Parameters.SORTED_ATTRIBUTE_NAME, strSortedAttributeName);
        }

        if (strAscSort != null) {
            url.addParameter(Parameters.SORTED_ASC, strAscSort);
        }

        String strPermission = ViewsResourceIdService.PERMISSION_MANAGE_PROFILES_ASSIGNMENT;
        boolean bPermission = RBACService.isAuthorized(View.RESOURCE_TYPE, strViewKey, strPermission, getUser());

        // ITEM NAVIGATION
        setItemNavigator(ProfilesConstants.PARAMETER_ASSIGN_PROFILE, view, url);

        // PAGINATOR
        url.addParameter(ProfilesConstants.PARAMETER_PROFILE_KEY, view.getKey());

        LocalizedPaginator<Profile> paginator = new LocalizedPaginator<Profile>(listFilteredProfiles,
                _nItemsPerPage, url.getUrl(), Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex, getLocale());

        // PERMISSIONS
        List<ViewAction> listActions = _viewsService.getListActions(getUser(), view, strPermission, getLocale(),
                getPlugin());
        view.setActions(listActions);

        model.put(ProfilesConstants.MARK_VIEW, view);
        model.put(ProfilesConstants.MARK_AVAILABLE_LIST, listAvailableProfiles);
        model.put(ProfilesConstants.MARK_ASSIGNED_LIST, paginator.getPageItems());
        model.put(ProfilesConstants.MARK_ASSIGNED_NUMBER, listAssignedProfiles.size());
        model.put(ProfilesConstants.MARK_ITEM_NAVIGATOR,
                _itemNavigators.get(ProfilesConstants.PARAMETER_ASSIGN_PROFILE));
        model.put(ProfilesConstants.MARK_NB_ITEMS_PER_PAGE, StringUtils.EMPTY + _nItemsPerPage);
        model.put(ProfilesConstants.MARK_PAGINATOR, paginator);
        model.put(ProfilesConstants.MARK_PERMISSION, bPermission);
        model.put(ProfilesConstants.MARK_SEARCH_FILTER, pFilter);
        model.put(ProfilesConstants.MARK_SEARCH_IS_SEARCH, bIsSearch);
        model.put(ProfilesConstants.MARK_LOCALE, getUser().getLocale());
        model.put(ProfilesConstants.MARK_SORT_SEARCH_ATTRIBUTE, strSortSearchAttribute);

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

        return getAdminPage(template.getHtml());
    }

    /**
     * Process the data capture form for assign users to a profile
     * 
     * @param request The HTTP Request
     * @return The Jsp URL of the process result
     */
    public String doAssignProfilesView(HttpServletRequest request) {
        String strReturn;

        String strActionCancel = request.getParameter(ProfilesConstants.PARAMETER_CANCEL);

        if (strActionCancel != null) {
            strReturn = JSP_MANAGE_VIEWS;
        } else {
            String strViewKey = request.getParameter(ProfilesConstants.PARAMETER_VIEW_KEY);

            if (!RBACService.isAuthorized(View.RESOURCE_TYPE, strViewKey,
                    ViewsResourceIdService.PERMISSION_MANAGE_PROFILES_ASSIGNMENT, getUser())) {
                return AdminMessageService.getMessageUrl(request, Messages.USER_ACCESS_DENIED,
                        AdminMessage.TYPE_STOP);
            }

            //retrieve the selected portlets ids
            String[] arrayProfileKeys = request.getParameterValues(ProfilesConstants.PARAMETER_PROFILES_LIST);

            if (arrayProfileKeys != null) {
                for (int i = 0; i < arrayProfileKeys.length; i++) {
                    String strProfileKey = arrayProfileKeys[i];
                    Profile profile = _profilesService.findByPrimaryKey(strProfileKey, getPlugin());

                    if (!_viewsService.hasView(strProfileKey, getPlugin())) {
                        _viewsService.addProfileForView(strViewKey, strProfileKey, getPlugin());
                    } else {
                        Object[] args = { profile.getKey() };

                        return AdminMessageService.getMessageUrl(request,
                                ProfilesConstants.PROPERTY_NO_MULTIPLE_VIEWS, args, AdminMessage.TYPE_STOP);
                    }
                }
            }

            strReturn = JSP_ASSIGN_PROFILES_VIEW + ProfilesConstants.INTERROGATION_MARK
                    + ProfilesConstants.PARAMETER_VIEW_KEY + ProfilesConstants.EQUAL + strViewKey;
        }

        return strReturn;
    }

    /**
     * unassigns users from profile
     * @param request The HttpRequest
     * @return the HTML code of list assignations
     */
    public String doUnassignProfileView(HttpServletRequest request) {
        String strViewKey = request.getParameter(ProfilesConstants.PARAMETER_VIEW_KEY);

        if (!RBACService.isAuthorized(View.RESOURCE_TYPE, strViewKey,
                ViewsResourceIdService.PERMISSION_MANAGE_PROFILES_ASSIGNMENT, getUser())) {
            return AdminMessageService.getMessageUrl(request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_STOP);
        }

        String strProfileKey = request.getParameter(ProfilesConstants.PARAMETER_PROFILE_KEY);
        String strAnchor = request.getParameter(ProfilesConstants.PARAMETER_ANCHOR);

        // Remove profile
        _viewsService.removeProfileFromView(strViewKey, strProfileKey, getPlugin());

        return JSP_ASSIGN_PROFILES_VIEW + ProfilesConstants.INTERROGATION_MARK
                + ProfilesConstants.PARAMETER_VIEW_KEY + ProfilesConstants.EQUAL + strViewKey
                + ProfilesConstants.SHARP + strAnchor;
    }

    /* DASHBOARD POSITIONS */

    /**
     * Get the dashboard positions management interface
     * @param request HttpServletRequest
     * @return the html form
     */
    public String getManageDashboards(HttpServletRequest request) {
        String strViewKey = request.getParameter(ProfilesConstants.PARAMETER_VIEW_KEY);
        View view = _viewsService.findByPrimaryKey(strViewKey, getPlugin());

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

        String strPermission = ViewsResourceIdService.PERMISSION_MANAGE_DASHBOARDS;
        boolean bPermission = RBACService.isAuthorized(View.RESOURCE_TYPE, strViewKey, strPermission, getUser());

        String strBaseUrl = AppPathService.getBaseUrl(request) + JSP_URL_MANAGE_DASHBOARDS;
        UrlItem url = new UrlItem(strBaseUrl);

        // ITEM NAVIGATION
        setItemNavigator(ProfilesConstants.PARAMETER_ASSIGN_DASHBOARD, view, url);

        // PERMISSIONS
        List<ViewAction> listActions = _viewsService.getListActions(getUser(), view, strPermission, getLocale(),
                getPlugin());
        view.setActions(listActions);

        Map<String, List<IDashboardComponent>> mapDashboards = _viewsService.getAllSetDashboards(strViewKey,
                getUser(), getPlugin());
        model.put(ProfilesConstants.MARK_MAP_DASHBOARDS, mapDashboards);

        List<IDashboardComponent> listNotSetDashboards = _viewsService.getNotSetDashboards(strViewKey, getUser(),
                getPlugin());
        model.put(ProfilesConstants.MARK_NOT_SET_DASHBOARDS, listNotSetDashboards);

        model.put(ProfilesConstants.MARK_COLUMN_COUNT, DashboardService.getInstance().getColumnCount());
        model.put(ProfilesConstants.MARK_MAP_AVAILABLE_ORDERS, _viewsService.getMapAvailableOrders(getPlugin()));
        model.put(ProfilesConstants.MARK_LIST_AVAILABLE_COLUMNS, _viewsService.getListAvailableColumns());
        model.put(ProfilesConstants.MARK_MAP_COLUMN_ORDER_STATUS,
                _viewsService.getOrderedColumnsStatus(strViewKey, getPlugin()));

        model.put(ProfilesConstants.MARK_VIEW, view);
        model.put(ProfilesConstants.MARK_PERMISSION, bPermission);
        model.put(ProfilesConstants.MARK_ITEM_NAVIGATOR,
                _itemNavigators.get(ProfilesConstants.PARAMETER_ASSIGN_DASHBOARD));

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

        return getAdminPage(template.getHtml());
    }

    /**
     * Reorders columns
     * @param request the request
     * @return url
     */
    public String doReorderColumn(HttpServletRequest request) {
        String strViewKey = request.getParameter(ProfilesConstants.PARAMETER_VIEW_KEY);

        if (!RBACService.isAuthorized(View.RESOURCE_TYPE, strViewKey,
                ViewsResourceIdService.PERMISSION_MANAGE_DASHBOARDS, getUser())) {
            return AdminMessageService.getMessageUrl(request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_STOP);
        }

        String strColumnName = request.getParameter(ProfilesConstants.PARAMETER_COLUMN);

        if (StringUtils.isBlank(strColumnName)) {
            return AdminMessageService.getMessageUrl(request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP);
        }

        int nColumn = 0;

        try {
            nColumn = Integer.parseInt(strColumnName);
        } catch (NumberFormatException nfe) {
            AppLogService.error("ViewJspBean.doReorderColumn : " + nfe.getMessage(), nfe);

            return AdminMessageService.getMessageUrl(request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP);
        }

        _viewsService.doReorderColumn(strViewKey, nColumn, getPlugin());

        return JSP_MANAGE_DASHBOARDS + ProfilesConstants.INTERROGATION_MARK + ProfilesConstants.PARAMETER_VIEW_KEY
                + ProfilesConstants.EQUAL + strViewKey;
    }

    /**
     * Moves the dashboard
     * @param request the request
     * @return url
     */
    public String doMoveDashboard(HttpServletRequest request) {
        String strViewKey = request.getParameter(ProfilesConstants.PARAMETER_VIEW_KEY);

        if (!RBACService.isAuthorized(View.RESOURCE_TYPE, strViewKey,
                ViewsResourceIdService.PERMISSION_MANAGE_DASHBOARDS, getUser())) {
            return AdminMessageService.getMessageUrl(request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_STOP);
        }

        String strDashboardName = request.getParameter(ProfilesConstants.PARAMETER_DASHBOARD_NAME);

        if (StringUtils.isBlank(strDashboardName)) {
            return AdminMessageService.getMessageUrl(request, ProfilesConstants.MESSAGE_DASHBOARD_NOT_FOUND,
                    AdminMessage.TYPE_STOP);
        }

        // retrieve dashboard from database. If not found, will use Spring.
        IDashboardComponent dashboard = _viewsService.findDashboard(strDashboardName, strViewKey, getPlugin());
        int nOldOrder = 0;
        int nOldColumn = 0;
        boolean bCreate = false;

        if (dashboard == null) {
            bCreate = true;

            if (AppLogService.isDebugEnabled()) {
                AppLogService.debug(
                        "Dashboard " + strDashboardName + " has no property set. Retrieving from SpringContext");
            }

            dashboard = DashboardFactory.getDashboardComponent(strDashboardName);

            if (dashboard == null) {
                return AdminMessageService.getMessageUrl(request, ProfilesConstants.MESSAGE_DASHBOARD_NOT_FOUND,
                        AdminMessage.TYPE_STOP);
            }
        } else {
            nOldOrder = dashboard.getOrder();
            nOldColumn = dashboard.getZone();
        }

        // set order and column
        String strOrder = request.getParameter(ProfilesConstants.PARAMETER_DASHBOARD_ORDER);
        String strColumn = request.getParameter(ProfilesConstants.PARAMETER_DASHBOARD_COLUMN);

        if (StringUtils.isBlank(strOrder) && StringUtils.isBlank(strColumn)) {
            return AdminMessageService.getMessageUrl(request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP);
        }

        int nOrder = StringUtil.getIntValue(strOrder, -1);
        int nColumn = StringUtil.getIntValue(strColumn, -1);

        if ((nOrder == -1) || (nColumn == -1)) {
            return AdminMessageService.getMessageUrl(request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP);
        }

        dashboard.setOrder(nOrder);
        dashboard.setZone(nColumn);

        _viewsService.doMoveDashboard(dashboard, nOldColumn, nOldOrder, bCreate, strViewKey, getPlugin());

        return JSP_MANAGE_DASHBOARDS + ProfilesConstants.INTERROGATION_MARK + ProfilesConstants.PARAMETER_VIEW_KEY
                + ProfilesConstants.EQUAL + strViewKey;
    }

    /**
     * Unset the column
     * @param request the request
     * @return url
     */
    public String doUnsetColumn(HttpServletRequest request) {
        String strViewKey = request.getParameter(ProfilesConstants.PARAMETER_VIEW_KEY);

        if (!RBACService.isAuthorized(View.RESOURCE_TYPE, strViewKey, ViewsResourceIdService.PERMISSION_DELETE_VIEW,
                getUser())) {
            return AdminMessageService.getMessageUrl(request, Messages.USER_ACCESS_DENIED, AdminMessage.TYPE_STOP);
        }

        String strDashboardName = request.getParameter(ProfilesConstants.PARAMETER_DASHBOARD_NAME);

        _viewsService.removeDashboard(strViewKey, strDashboardName, getPlugin());

        return JSP_MANAGE_DASHBOARDS + ProfilesConstants.INTERROGATION_MARK + ProfilesConstants.PARAMETER_VIEW_KEY
                + ProfilesConstants.EQUAL + strViewKey;
    }

    /**
     * Get the item navigator
     * @param strItemNavigatorKey the item navigator key
     * @param view the view
     * @param url the url
     */
    private void setItemNavigator(String strItemNavigatorKey, View view, UrlItem url) {
        ItemNavigator itemNavigator = _itemNavigators.get(strItemNavigatorKey);

        if (itemNavigator == null) {
            if (_vFilter == null) {
                _vFilter = new ViewFilter();
            }

            itemNavigator = _viewsService.getItemNavigator(_vFilter, view, url);
        } else {
            itemNavigator.setCurrentItemId(view.getKey());
        }

        _itemNavigators.put(strItemNavigatorKey, itemNavigator);
    }

    /**
     * Reinit the item navigator
     */
    private void reinitItemNavigators() {
        _itemNavigators = new HashMap<String, ItemNavigator>();
    }
}