1 /*
2 * Copyright (c) 2002-2025, 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
36 import fr.paris.lutece.portal.business.user.AdminUser;
37 import fr.paris.lutece.portal.service.spring.SpringContextService;
38
39 import java.util.List;
40 import java.util.Map;
41
42 import javax.servlet.http.HttpServletRequest;
43
44 /**
45 *
46 * PluginActionManager.
47 * <ul>
48 * <li>Use {@link #getPluginAction(HttpServletRequest, Class)} to find the invoked action
49 * <li>Use {@link #fillModel(HttpServletRequest, AdminUser, Map, Class, String)} to fill you model
50 * </ul>
51 *
52 * @see #getListPluginAction(Class)
53 * @see #getPluginAction(HttpServletRequest, Class)
54 * @see #fillModel(HttpServletRequest, AdminUser, Map, Class, String)
55 *
56 */
57 public final class PluginActionManager
58 {
59 /**
60 * Empty constructor
61 */
62 private PluginActionManager( )
63 {
64 // nothing
65 }
66
67 /**
68 * Gets the list of {@link IPluginAction}.
69 *
70 * @param <A>
71 * the generic type
72 * @param pluginActionClass
73 * the plugin action class
74 * @return the list
75 */
76 public static <A extends IPluginAction<?>> List<A> getListPluginAction( Class<A> pluginActionClass )
77 {
78 return SpringContextService.getBeansOfType( pluginActionClass );
79 }
80
81 /**
82 * Gets the {@link IPluginAction} for the request.
83 *
84 * @param <A>
85 * the generic type
86 * @param request
87 * the request
88 * @param pluginActionClass
89 * the plugin action class
90 * @return the invoked {@link IPluginAction}, <code>null</code> otherwise.
91 * @see IPluginAction#isInvoked(HttpServletRequest)
92 */
93 public static <A extends IPluginAction<?>> A getPluginAction( HttpServletRequest request, Class<A> pluginActionClass )
94 {
95 for ( A action : getListPluginAction( pluginActionClass ) )
96 {
97 if ( action.isInvoked( request ) )
98 {
99 return action;
100 }
101 }
102
103 return null;
104 }
105
106 /**
107 * Fills the model with all actions and adds the list to the given marker
108 *
109 * @param request
110 * the request
111 * @param adminUser
112 * the admin user
113 * @param model
114 * the model
115 * @param pluginActionClass
116 * the action class (usually the interface)
117 * @param strMark
118 * the marker to put for the actions list
119 * @param <A>
120 * the action type (usually the interface)
121 */
122 public static <A extends IPluginAction<?>> void fillModel( HttpServletRequest request, AdminUser adminUser, Map<String, Object> model,
123 Class<A> pluginActionClass, String strMark )
124 {
125 for ( A action : SpringContextService.getBeansOfType( pluginActionClass ) )
126 {
127 action.fillModel( request, adminUser, model );
128 }
129
130 // add the action list
131 model.put( strMark, getListPluginAction( pluginActionClass ) );
132 }
133 }