1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 package fr.paris.lutece.plugins.termofservice.web;
37
38 import fr.paris.lutece.portal.service.message.AdminMessage;
39 import fr.paris.lutece.portal.service.message.AdminMessageService;
40 import fr.paris.lutece.portal.service.security.SecurityTokenService;
41 import fr.paris.lutece.portal.service.admin.AccessDeniedException;
42 import fr.paris.lutece.portal.service.util.AppException;
43 import fr.paris.lutece.portal.util.mvc.admin.annotations.Controller;
44 import fr.paris.lutece.portal.util.mvc.commons.annotations.Action;
45 import fr.paris.lutece.portal.util.mvc.commons.annotations.View;
46 import fr.paris.lutece.util.url.UrlItem;
47 import fr.paris.lutece.util.html.AbstractPaginator;
48
49 import java.util.Comparator;
50 import java.util.ArrayList;
51 import java.util.List;
52 import java.util.Map;
53 import java.util.Optional;
54 import java.util.stream.Collectors;
55 import javax.servlet.http.HttpServletRequest;
56
57 import org.apache.commons.lang3.StringUtils;
58
59 import fr.paris.lutece.plugins.termofservice.business.Entry;
60 import fr.paris.lutece.plugins.termofservice.business.EntryHome;
61 import fr.paris.lutece.plugins.termofservice.util.TOSConstants;
62
63
64
65
66 @Controller( controllerJsp = "ManageEntrys.jsp", controllerPath = "jsp/admin/plugins/termofservice/", right = "TERMOFSERVICE_MANAGEMENT" )
67 public class EntryJspBean extends AbstractManageTOSJspBean <Integer, Entry>
68 {
69
70 private static final String TEMPLATE_MANAGE_ENTRYS = "/admin/plugins/termofservice/manage_entrys.html";
71 private static final String TEMPLATE_CREATE_ENTRY = "/admin/plugins/termofservice/create_entry.html";
72 private static final String TEMPLATE_MODIFY_ENTRY = "/admin/plugins/termofservice/modify_entry.html";
73
74
75 private static final String PARAMETER_ID_ENTRY = "id";
76
77
78 private static final String PROPERTY_PAGE_TITLE_MANAGE_ENTRYS = "termofservice.manage_entrys.pageTitle";
79 private static final String PROPERTY_PAGE_TITLE_MODIFY_ENTRY = "termofservice.modify_entry.pageTitle";
80 private static final String PROPERTY_PAGE_TITLE_CREATE_ENTRY = "termofservice.create_entry.pageTitle";
81
82
83 private static final String MARK_ENTRY_LIST = "entry_list";
84 private static final String MARK_ENTRY = "entry";
85 private static final String MARK_FEATURE_TOS_PUBLICATION = "featureTOSPublication";
86
87 private static final String JSP_MANAGE_ENTRYS = "jsp/admin/plugins/termofservice/ManageEntrys.jsp";
88
89
90 private static final String MESSAGE_CONFIRM_REMOVE_ENTRY = "termofservice.message.confirmRemoveEntry";
91
92
93 private static final String VALIDATION_ATTRIBUTES_PREFIX = "termofservice.model.entity.entry.attribute.";
94
95
96 private static final String VIEW_MANAGE_ENTRYS = "manageEntrys";
97 private static final String VIEW_CREATE_ENTRY = "createEntry";
98 private static final String VIEW_MODIFY_ENTRY = "modifyEntry";
99
100
101 private static final String ACTION_CREATE_ENTRY = "createEntry";
102 private static final String ACTION_MODIFY_ENTRY = "modifyEntry";
103 private static final String ACTION_REMOVE_ENTRY = "removeEntry";
104 private static final String ACTION_CONFIRM_REMOVE_ENTRY = "confirmRemoveEntry";
105 private static final String ACTION_PUBLISH_ENTRY = "publishEntry";
106
107
108 private static final String INFO_ENTRY_CREATED = "termofservice.info.entry.created";
109 private static final String INFO_ENTRY_UPDATED = "termofservice.info.entry.updated";
110 private static final String INFO_ENTRY_REMOVED = "termofservice.info.entry.removed";
111 private static final String INFO_ENTRY_PUBLISHED = "termofservice.info.entry.published";
112
113
114
115 private static final String ERROR_RESOURCE_NOT_FOUND = "Resource not found";
116
117
118 private Entry _entry;
119 private List<Integer> _listIdEntrys;
120
121
122
123
124
125
126 @View( value = VIEW_MANAGE_ENTRYS, defaultView = true )
127 public String getManageEntrys( HttpServletRequest request )
128 {
129 _entry = null;
130
131 if ( request.getParameter( AbstractPaginator.PARAMETER_PAGE_INDEX) == null || _listIdEntrys.isEmpty( ) )
132 {
133 _listIdEntrys = EntryHome.getIdEntrysList( );
134 }
135
136 Map<String, Object> model = getPaginatedListModel( request, MARK_ENTRY_LIST, _listIdEntrys, JSP_MANAGE_ENTRYS );
137 model.put( MARK_FEATURE_TOS_PUBLICATION, TOSConstants.PROPERTY_FEATURE_TOS_PUBLICATION_ENABLED );
138
139 return getPage( PROPERTY_PAGE_TITLE_MANAGE_ENTRYS, TEMPLATE_MANAGE_ENTRYS, model );
140 }
141
142
143
144
145
146
147 @Override
148 List<Entry> getItemsFromIds( List<Integer> listIds )
149 {
150 List<Entry> listEntry = EntryHome.getEntrysListByIds( listIds );
151
152
153 return listEntry.stream()
154 .sorted(Comparator.comparingInt( notif -> listIds.indexOf( notif.getId())))
155 .collect(Collectors.toList());
156 }
157
158
159
160
161 public void resetListId( )
162 {
163 _listIdEntrys = new ArrayList<>( );
164 }
165
166
167
168
169
170
171
172 @View( VIEW_CREATE_ENTRY )
173 public String getCreateEntry( HttpServletRequest request )
174 {
175 _entry = ( _entry != null ) ? _entry : new Entry( );
176
177 Map<String, Object> model = getModel( );
178 model.put( MARK_ENTRY, _entry );
179 model.put( SecurityTokenService.MARK_TOKEN, SecurityTokenService.getInstance( ).getToken( request, ACTION_CREATE_ENTRY ) );
180
181 return getPage( PROPERTY_PAGE_TITLE_CREATE_ENTRY, TEMPLATE_CREATE_ENTRY, model );
182 }
183
184
185
186
187
188
189
190
191 @Action( ACTION_CREATE_ENTRY )
192 public String doCreateEntry( HttpServletRequest request ) throws AccessDeniedException
193 {
194 populate( _entry, request, getLocale( ) );
195
196
197 if ( !SecurityTokenService.getInstance( ).validate( request, ACTION_CREATE_ENTRY ) )
198 {
199 throw new AccessDeniedException ( "Invalid security token" );
200 }
201
202
203 if ( !validateBean( _entry, VALIDATION_ATTRIBUTES_PREFIX ) )
204 {
205 return redirectView( request, VIEW_CREATE_ENTRY );
206 }
207
208 EntryHome.create( _entry );
209 addInfo( INFO_ENTRY_CREATED, getLocale( ) );
210 resetListId( );
211
212 return redirectView( request, VIEW_MANAGE_ENTRYS );
213 }
214
215
216
217
218
219
220
221
222 @Action( ACTION_CONFIRM_REMOVE_ENTRY )
223 public String getConfirmRemoveEntry( HttpServletRequest request )
224 {
225 int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_ENTRY ) );
226 UrlItem url = new UrlItem( getActionUrl( ACTION_REMOVE_ENTRY ) );
227 url.addParameter( PARAMETER_ID_ENTRY, nId );
228
229 String strMessageUrl = AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_ENTRY, url.getUrl( ), AdminMessage.TYPE_CONFIRMATION );
230
231 return redirect( request, strMessageUrl );
232 }
233
234
235
236
237
238
239
240 @Action( ACTION_REMOVE_ENTRY )
241 public String doRemoveEntry( HttpServletRequest request )
242 {
243 int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_ENTRY ) );
244
245
246 EntryHome.remove( nId );
247 addInfo( INFO_ENTRY_REMOVED, getLocale( ) );
248 resetListId( );
249
250 return redirectView( request, VIEW_MANAGE_ENTRYS );
251 }
252
253
254
255
256
257
258
259 @View( VIEW_MODIFY_ENTRY )
260 public String getModifyEntry( HttpServletRequest request )
261 {
262 int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_ENTRY ) );
263
264 if ( _entry == null || ( _entry.getId( ) != nId ) )
265 {
266 Optional<Entry> optEntry = EntryHome.findByPrimaryKey( nId );
267 _entry = optEntry.orElseThrow( ( ) -> new AppException(ERROR_RESOURCE_NOT_FOUND ) );
268 }
269
270
271 Map<String, Object> model = getModel( );
272 model.put( MARK_ENTRY, _entry );
273 model.put( SecurityTokenService.MARK_TOKEN, SecurityTokenService.getInstance( ).getToken( request, ACTION_MODIFY_ENTRY ) );
274
275 return getPage( PROPERTY_PAGE_TITLE_MODIFY_ENTRY, TEMPLATE_MODIFY_ENTRY, model );
276 }
277
278
279
280
281
282
283
284
285 @Action( ACTION_MODIFY_ENTRY )
286 public String doModifyEntry( HttpServletRequest request ) throws AccessDeniedException
287 {
288 populate( _entry, request, getLocale( ) );
289
290
291 if ( !SecurityTokenService.getInstance( ).validate( request, ACTION_MODIFY_ENTRY ) )
292 {
293 throw new AccessDeniedException ( "Invalid security token" );
294 }
295
296
297 if ( !validateBean( _entry, VALIDATION_ATTRIBUTES_PREFIX ) )
298 {
299 return redirect( request, VIEW_MODIFY_ENTRY, PARAMETER_ID_ENTRY, _entry.getId( ) );
300 }
301
302 EntryHome.update( _entry );
303 addInfo( INFO_ENTRY_UPDATED, getLocale( ) );
304 resetListId( );
305
306 return redirectView( request, VIEW_MANAGE_ENTRYS );
307 }
308
309
310 @Action( ACTION_PUBLISH_ENTRY )
311 public String doPublishEntry( HttpServletRequest request )
312 {
313 if( TOSConstants.PROPERTY_FEATURE_TOS_PUBLICATION_ENABLED )
314 {
315 String strIdEntry = request.getParameter( PARAMETER_ID_ENTRY );
316
317 if( StringUtils.isNumeric( strIdEntry ) )
318 {
319 EntryHome.unpublishAllEntries( );
320 EntryHome.publishEntry( Integer.parseInt( strIdEntry ) );
321 }
322
323 addInfo( INFO_ENTRY_PUBLISHED, getLocale( ) );
324 resetListId( );
325 }
326 return redirectView( request, VIEW_MANAGE_ENTRYS );
327 }
328 }