PluginActionManager.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.pluginaction;

  35. import fr.paris.lutece.portal.business.user.AdminUser;
  36. import fr.paris.lutece.portal.service.spring.SpringContextService;

  37. import java.util.List;
  38. import java.util.Map;

  39. import javax.servlet.http.HttpServletRequest;

  40. /**
  41.  *
  42.  * PluginActionManager.
  43.  * <ul>
  44.  * <li>Use {@link #getPluginAction(HttpServletRequest, Class)} to find the invoked action
  45.  * <li>Use {@link #fillModel(HttpServletRequest, AdminUser, Map, Class, String)} to fill you model
  46.  * </ul>
  47.  *
  48.  * @see #getListPluginAction(Class)
  49.  * @see #getPluginAction(HttpServletRequest, Class)
  50.  * @see #fillModel(HttpServletRequest, AdminUser, Map, Class, String)
  51.  *
  52.  */
  53. public final class PluginActionManager
  54. {
  55.     /**
  56.      * Empty constructor
  57.      */
  58.     private PluginActionManager( )
  59.     {
  60.         // nothing
  61.     }

  62.     /**
  63.      * Gets the list of {@link IPluginAction}.
  64.      *
  65.      * @param <A>
  66.      *            the generic type
  67.      * @param pluginActionClass
  68.      *            the plugin action class
  69.      * @return the list
  70.      */
  71.     public static <A extends IPluginAction<?>> List<A> getListPluginAction( Class<A> pluginActionClass )
  72.     {
  73.         return SpringContextService.getBeansOfType( pluginActionClass );
  74.     }

  75.     /**
  76.      * Gets the {@link IPluginAction} for the request.
  77.      *
  78.      * @param <A>
  79.      *            the generic type
  80.      * @param request
  81.      *            the request
  82.      * @param pluginActionClass
  83.      *            the plugin action class
  84.      * @return the invoked {@link IPluginAction}, <code>null</code> otherwise.
  85.      * @see IPluginAction#isInvoked(HttpServletRequest)
  86.      */
  87.     public static <A extends IPluginAction<?>> A getPluginAction( HttpServletRequest request, Class<A> pluginActionClass )
  88.     {
  89.         for ( A action : getListPluginAction( pluginActionClass ) )
  90.         {
  91.             if ( action.isInvoked( request ) )
  92.             {
  93.                 return action;
  94.             }
  95.         }

  96.         return null;
  97.     }

  98.     /**
  99.      * Fills the model with all actions and adds the list to the given marker
  100.      *
  101.      * @param request
  102.      *            the request
  103.      * @param adminUser
  104.      *            the admin user
  105.      * @param model
  106.      *            the model
  107.      * @param pluginActionClass
  108.      *            the action class (usually the interface)
  109.      * @param strMark
  110.      *            the marker to put for the actions list
  111.      * @param <A>
  112.      *            the action type (usually the interface)
  113.      */
  114.     public static <A extends IPluginAction<?>> void fillModel( HttpServletRequest request, AdminUser adminUser, Map<String, Object> model,
  115.             Class<A> pluginActionClass, String strMark )
  116.     {
  117.         for ( A action : SpringContextService.getBeansOfType( pluginActionClass ) )
  118.         {
  119.             action.fillModel( request, adminUser, model );
  120.         }

  121.         // add the action list
  122.         model.put( strMark, getListPluginAction( pluginActionClass ) );
  123.     }
  124. }