DashboardJspBean.java

  1. /*
  2.  * Copyright (c) 2002-2022, City of Paris
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  *
  9.  *  1. Redistributions of source code must retain the above copyright notice
  10.  *     and the following disclaimer.
  11.  *
  12.  *  2. Redistributions in binary form must reproduce the above copyright notice
  13.  *     and the following disclaimer in the documentation and/or other materials
  14.  *     provided with the distribution.
  15.  *
  16.  *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
  17.  *     contributors may be used to endorse or promote products derived from
  18.  *     this software without specific prior written permission.
  19.  *
  20.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23.  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
  24.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  28.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  30.  * POSSIBILITY OF SUCH DAMAGE.
  31.  *
  32.  * License 1.0
  33.  */
  34. package fr.paris.lutece.portal.web.dashboard;

  35. import javax.servlet.http.HttpServletRequest;

  36. import org.apache.commons.lang3.StringUtils;

  37. import fr.paris.lutece.portal.business.dashboard.DashboardFactory;
  38. import fr.paris.lutece.portal.business.dashboard.DashboardHome;
  39. import fr.paris.lutece.portal.service.admin.AccessDeniedException;
  40. import fr.paris.lutece.portal.service.dashboard.DashboardService;
  41. import fr.paris.lutece.portal.service.dashboard.IDashboardComponent;
  42. import fr.paris.lutece.portal.service.message.AdminMessage;
  43. import fr.paris.lutece.portal.service.message.AdminMessageService;
  44. import fr.paris.lutece.portal.service.security.SecurityTokenService;
  45. import fr.paris.lutece.portal.service.util.AppLogService;
  46. import fr.paris.lutece.portal.web.admin.AdminFeaturesPageJspBean;
  47. import fr.paris.lutece.portal.web.constants.Messages;
  48. import fr.paris.lutece.util.string.StringUtil;

  49. /**
  50.  * Provides technical admin dashboard managements and display. Display is NOT managed as an admin feature (no right required).
  51.  *
  52.  */
  53. public class DashboardJspBean extends AdminFeaturesPageJspBean
  54. {
  55.     // Right
  56.     public static final String RIGHT_MANAGE_DASHBOARD = "CORE_DASHBOARD_MANAGEMENT";

  57.     // Parameters
  58.     private static final String PARAMETER_DASHBOARD_NAME = "dashboard_name";
  59.     private static final String PARAMETER_DASHBOARD_COLUMN = "dashboard_column";
  60.     private static final String PARAMETER_DASHBOARD_ORDER = "dashboard_order";
  61.     private static final String PARAMETER_COLUMN = "column";

  62.     // Messages
  63.     private static final String MESSAGE_DASHBOARD_NOT_FOUND = "portal.dashboard.message.dashboardNotFound";

  64.     // Templates
  65.     private static final String TEMPLATE_MANAGE_DASHBOARDS = "/admin/dashboard/manage_dashboards.html";

  66.     // JSP
  67.     private static final String ANCHOR_ADMIN_DASHBOARDS = "adminHomePageManagement";
  68.     private transient DashboardService _service = DashboardService.getInstance( );

  69.     /**
  70.      * Reorders columns
  71.      *
  72.      * @param request
  73.      *            the request
  74.      * @return url
  75.      * @throws AccessDeniedException
  76.      *             if the security token is invalid
  77.      */
  78.     public String doReorderColumn( HttpServletRequest request ) throws AccessDeniedException
  79.     {
  80.         String strColumnName = request.getParameter( PARAMETER_COLUMN );

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

  85.         int nColumn;

  86.         try
  87.         {
  88.             nColumn = Integer.parseInt( strColumnName );
  89.         }
  90.         catch( NumberFormatException nfe )
  91.         {
  92.             AppLogService.error( "DashboardJspBean.doReorderColumn : {}", nfe.getMessage( ), nfe );

  93.             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
  94.         }
  95.         if ( !SecurityTokenService.getInstance( ).validate( request, TEMPLATE_MANAGE_DASHBOARDS ) )
  96.         {
  97.             throw new AccessDeniedException( ERROR_INVALID_TOKEN );
  98.         }
  99.         getDashboardService( ).doReorderColumn( nColumn );

  100.         return getAdminDashboardsUrl( request, ANCHOR_ADMIN_DASHBOARDS );
  101.     }

  102.     /**
  103.      * Moves the dashboard
  104.      *
  105.      * @param request
  106.      *            the request
  107.      * @return url
  108.      * @throws AccessDeniedException
  109.      *             if the security token is invalid
  110.      */
  111.     public String doMoveDashboard( HttpServletRequest request ) throws AccessDeniedException
  112.     {
  113.         String strDashboardName = request.getParameter( PARAMETER_DASHBOARD_NAME );

  114.         if ( StringUtils.isBlank( strDashboardName ) )
  115.         {
  116.             return AdminMessageService.getMessageUrl( request, MESSAGE_DASHBOARD_NOT_FOUND, AdminMessage.TYPE_STOP );
  117.         }

  118.         // retrieve dashboard from database. If not found, will use Spring.
  119.         IDashboardComponent dashboard = DashboardHome.findByPrimaryKey( strDashboardName );
  120.         int nOldOrder = 0;
  121.         int nOldColumn = 0;
  122.         boolean bCreate = false;

  123.         if ( dashboard == null )
  124.         {
  125.             bCreate = true;

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

  130.             dashboard = DashboardFactory.getDashboardComponent( strDashboardName );

  131.             if ( dashboard == null )
  132.             {
  133.                 return AdminMessageService.getMessageUrl( request, MESSAGE_DASHBOARD_NOT_FOUND, AdminMessage.TYPE_STOP );
  134.             }
  135.         }
  136.         else
  137.         {
  138.             nOldOrder = dashboard.getOrder( );
  139.             nOldColumn = dashboard.getZone( );
  140.         }
  141.         if ( !SecurityTokenService.getInstance( ).validate( request, TEMPLATE_MANAGE_DASHBOARDS ) )
  142.         {
  143.             throw new AccessDeniedException( ERROR_INVALID_TOKEN );
  144.         }
  145.         // set order and column
  146.         String strOrder = request.getParameter( PARAMETER_DASHBOARD_ORDER );
  147.         String strColumn = request.getParameter( PARAMETER_DASHBOARD_COLUMN );

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

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

  152.         getDashboardService( ).doMoveDashboard( dashboard, nOldColumn, nOldOrder, bCreate );

  153.         return getAdminDashboardsUrl( request, ANCHOR_ADMIN_DASHBOARDS );
  154.     }

  155.     private DashboardService getDashboardService( )
  156.     {
  157.         if ( _service == null )
  158.         {
  159.             _service = DashboardService.getInstance( );
  160.         }

  161.         return _service;
  162.     }
  163. }