SearchIndexationJspBean.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.search;

  35. import fr.paris.lutece.portal.service.admin.AccessDeniedException;
  36. import fr.paris.lutece.portal.service.search.IndexationService;
  37. import fr.paris.lutece.portal.service.search.SearchIndexer;
  38. import fr.paris.lutece.portal.service.security.SecurityTokenService;
  39. import fr.paris.lutece.portal.service.template.AppTemplateService;
  40. import fr.paris.lutece.portal.web.admin.AdminFeaturesPageJspBean;
  41. import fr.paris.lutece.portal.web.dashboard.AdminDashboardJspBean;
  42. import fr.paris.lutece.util.html.HtmlTemplate;

  43. import java.util.Collection;
  44. import java.util.HashMap;

  45. import javax.servlet.http.HttpServletRequest;

  46. /**
  47.  * This class provides the user interface to manage the launching of the indexing of the site pages
  48.  */
  49. public class SearchIndexationJspBean extends AdminFeaturesPageJspBean
  50. {
  51.     // //////////////////////////////////////////////////////////////////////////
  52.     // Constantes
  53.     /**
  54.      * Right to manage indexation
  55.      */
  56.     public static final String RIGHT_INDEXER = "CORE_SEARCH_INDEXATION";
  57.     private static final long serialVersionUID = 2585709013740037568L;
  58.     private static final String TEMPLATE_MANAGE_INDEXER = "admin/search/manage_search_indexation.html";
  59.     private static final String TEMPLATE_INDEXER_LOGS = "admin/search/search_indexation_logs.html";
  60.     private static final String MARK_LOGS = "logs";
  61.     private static final String MARK_INDEXERS_LIST = "indexers_list";

  62.     /**
  63.      * Displays the indexing parameters
  64.      *
  65.      * @param request
  66.      *            the http request
  67.      * @return the html code which displays the parameters page
  68.      */
  69.     public String getIndexingProperties( HttpServletRequest request )
  70.     {
  71.         HashMap<String, Object> model = new HashMap<>( );
  72.         Collection<SearchIndexer> listIndexers = IndexationService.getIndexers( );
  73.         model.put( MARK_INDEXERS_LIST, listIndexers );
  74.         model.put( SecurityTokenService.MARK_TOKEN, SecurityTokenService.getInstance( ).getToken( request, TEMPLATE_MANAGE_INDEXER ) );

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

  76.         return getAdminPage( template.getHtml( ) );
  77.     }

  78.     /**
  79.      * Calls the indexing process
  80.      *
  81.      * @param request
  82.      *            the http request
  83.      * @return the result of the indexing process
  84.      * @throws AccessDeniedException
  85.      *             if the security token is invalid
  86.      */
  87.     public String doIndexing( HttpServletRequest request ) throws AccessDeniedException
  88.     {
  89.         if ( !SecurityTokenService.getInstance( ).validate( request, TEMPLATE_MANAGE_INDEXER ) )
  90.         {
  91.             throw new AccessDeniedException( ERROR_INVALID_TOKEN );
  92.         }
  93.         HashMap<String, Object> model = new HashMap<>( );
  94.         String strLogs;

  95.         if ( request.getParameter( "incremental" ) != null )
  96.         {
  97.             strLogs = IndexationService.processIndexing( false );
  98.         }
  99.         else
  100.         {
  101.             strLogs = IndexationService.processIndexing( true );
  102.         }

  103.         model.put( MARK_LOGS, strLogs );

  104.         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_INDEXER_LOGS, null, model );

  105.         return getAdminPage( template.getHtml( ) );
  106.     }
  107. }