FeaturesAdminDashboardComponent.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.features;

  35. import fr.paris.lutece.portal.business.right.FeatureGroup;
  36. import fr.paris.lutece.portal.business.right.FeatureGroupHome;
  37. import fr.paris.lutece.portal.business.right.RightHome;
  38. import fr.paris.lutece.portal.business.user.AdminUser;
  39. import fr.paris.lutece.portal.service.dashboard.admin.AdminDashboardComponent;
  40. import fr.paris.lutece.portal.service.i18n.I18nService;
  41. import fr.paris.lutece.portal.service.security.SecurityTokenService;
  42. import fr.paris.lutece.portal.service.template.AppTemplateService;
  43. import fr.paris.lutece.portal.web.dashboard.AdminDashboardJspBean;
  44. import fr.paris.lutece.util.ReferenceList;
  45. import fr.paris.lutece.util.html.HtmlTemplate;
  46. import java.util.ArrayList;
  47. import java.util.Collection;
  48. import java.util.HashMap;
  49. import java.util.List;
  50. import java.util.Locale;
  51. import java.util.Map;
  52. import javax.servlet.http.HttpServletRequest;

  53. /**
  54.  * FeaturesAdminDashboardComponent
  55.  */
  56. public class FeaturesAdminDashboardComponent extends AdminDashboardComponent
  57. {
  58.     private static final String TEMPLATE_FEATURES_ADMINDASHBOARD = "admin/dashboard/admin/features_admindashboard.html";
  59.     private static final String MARK_FEATURE_NO_GROUP = "no_group";
  60.     private static final String MARK_FEATURE_GROUP_LIST = "feature_group_list";
  61.     private static final String MARK_FEATURE_GROUP = "feature_group";
  62.     private static final String MARK_GROUPS_LIST = "groups_list";
  63.     private static final String MARK_ORDER_LIST = "order_list";
  64.     private static final String MARK_EXTERNAL_FEATURES_LIST = "external_features_list";
  65.     private static final String MARK_RIGHT_LIST = "feature_list";
  66.     private static final String MARK_ORDER_IS_OK = "order_list_state";

  67.     private static final String NO_GROUP_DESCRIPTION = "portal.features.nogroup.description";
  68.     private static final String NO_GROUP_LABEL = "portal.features.nogroup.label";
  69.     private static final int NO_GROUP_ORDER = 0;
  70.     private static final String NO_GROUP_ID = null;

  71.     /**
  72.      * {@inheritDoc}
  73.      */
  74.     @Override
  75.     public String getDashboardData( AdminUser user, HttpServletRequest request )
  76.     {
  77.         List<FeatureGroup> listGroups = FeatureGroupHome.getFeatureGroupsList( );
  78.         Map<String, Object> model = new HashMap<>( );
  79.         model.put( MARK_FEATURE_NO_GROUP, getNoGroup( user.getLocale( ) ) );
  80.         model.put( MARK_FEATURE_GROUP_LIST, getRefListFeatureGroups( user.getLocale( ) ) );
  81.         model.put( MARK_ORDER_LIST, getOrderRefList( ) );
  82.         model.put( MARK_GROUPS_LIST, listGroups );
  83.         model.put( MARK_EXTERNAL_FEATURES_LIST, RightHome.getExternalRightList( ) );
  84.         model.put( SecurityTokenService.MARK_TOKEN, SecurityTokenService.getInstance( ).getToken( request, AdminDashboardJspBean.TEMPLATE_MANAGE_DASHBOARDS ) );

  85.         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_FEATURES_ADMINDASHBOARD, user.getLocale( ), model );

  86.         return template.getHtml( );

  87.     }

  88.     /**
  89.      * Generate an HTML combo of available group order
  90.      *
  91.      * @return The reference list of orders
  92.      */
  93.     private ReferenceList getOrderRefList( )
  94.     {
  95.         int nGroupsCount = FeatureGroupHome.getFeatureGroupsCount( );
  96.         ReferenceList listOrders = new ReferenceList( );

  97.         for ( int i = 0; i < nGroupsCount; i++ )
  98.         {
  99.             listOrders.addItem( i + 1, Integer.toString( i + 1 ) );
  100.         }

  101.         return listOrders;
  102.     }

  103.     /**
  104.      * Generate a combo containing all available groups
  105.      *
  106.      * @param locale
  107.      *            The locale
  108.      * @return the reference list of feature groups
  109.      */
  110.     private Map<String, Object> getNoGroup( Locale locale )
  111.     {
  112.         FeatureGroup noGroup = new FeatureGroup( );
  113.         noGroup.setLocale( locale );
  114.         noGroup.setId( NO_GROUP_ID );
  115.         noGroup.setOrder( NO_GROUP_ORDER );
  116.         noGroup.setDescriptionKey( NO_GROUP_DESCRIPTION );
  117.         noGroup.setLabelKey( NO_GROUP_LABEL );

  118.         Map<String, Object> groupMap = new HashMap<>( );
  119.         groupMap.put( MARK_FEATURE_GROUP, noGroup );
  120.         groupMap.put( MARK_RIGHT_LIST, I18nService.localizeCollection( RightHome.getRightsList( noGroup.getId( ) ), locale ) );
  121.         groupMap.put( MARK_ORDER_IS_OK, RightHome.checkFeatureOrders( noGroup.getId( ) ) );

  122.         return groupMap;
  123.     }

  124.     /**
  125.      * Generate a combo containing all available groups
  126.      *
  127.      * @param locale
  128.      *            The locale
  129.      * @return the reference list of feature groups
  130.      */
  131.     private Collection<HashMap<String, Object>> getRefListFeatureGroups( Locale locale )
  132.     {
  133.         Collection<HashMap<String, Object>> colGroupMap = new ArrayList<>( );
  134.         Collection<FeatureGroup> colGroups = FeatureGroupHome.getFeatureGroupsList( );

  135.         for ( FeatureGroup fg : colGroups )
  136.         {
  137.             HashMap<String, Object> groupMap = new HashMap<>( );
  138.             groupMap.put( MARK_FEATURE_GROUP, fg );
  139.             groupMap.put( MARK_RIGHT_LIST, I18nService.localizeCollection( RightHome.getRightsList( fg.getId( ) ), locale ) );
  140.             groupMap.put( MARK_ORDER_IS_OK, RightHome.checkFeatureOrders( fg.getId( ) ) );
  141.             colGroupMap.add( groupMap );
  142.         }

  143.         return colGroupMap;
  144.     }

  145. }