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 package fr.paris.lutece.plugins.directories.web;
35
36 import java.util.ArrayList;
37 import java.util.HashMap;
38 import java.util.List;
39 import java.util.Map;
40 import javax.servlet.http.HttpServletRequest;
41 import org.apache.commons.lang.StringUtils;
42 import fr.paris.lutece.plugins.directories.service.DirectoriesPlugin;
43 import fr.paris.lutece.plugins.directories.service.EntryService;
44 import fr.paris.lutece.plugins.directories.service.EntryTypeService;
45 import fr.paris.lutece.plugins.directories.util.DirectoriesConstants;
46 import fr.paris.lutece.plugins.genericattributes.business.Entry;
47 import fr.paris.lutece.plugins.genericattributes.business.EntryFilter;
48 import fr.paris.lutece.plugins.genericattributes.business.EntryHome;
49 import fr.paris.lutece.plugins.genericattributes.business.EntryType;
50 import fr.paris.lutece.plugins.genericattributes.business.EntryTypeHome;
51 import fr.paris.lutece.plugins.genericattributes.business.Field;
52 import fr.paris.lutece.plugins.genericattributes.business.FieldHome;
53 import fr.paris.lutece.plugins.genericattributes.business.ResponseFilter;
54 import fr.paris.lutece.plugins.genericattributes.business.ResponseHome;
55 import fr.paris.lutece.plugins.genericattributes.service.entrytype.EntryTypeServiceManager;
56 import fr.paris.lutece.plugins.genericattributes.service.entrytype.IEntryTypeService;
57 import fr.paris.lutece.portal.service.admin.AccessDeniedException;
58 import fr.paris.lutece.portal.service.admin.AdminUserService;
59 import fr.paris.lutece.portal.service.message.AdminMessage;
60 import fr.paris.lutece.portal.service.message.AdminMessageService;
61 import fr.paris.lutece.portal.service.template.AppTemplateService;
62 import fr.paris.lutece.portal.service.util.AppPathService;
63 import fr.paris.lutece.portal.util.mvc.admin.MVCAdminJspBean;
64 import fr.paris.lutece.portal.util.mvc.admin.annotations.Controller;
65 import fr.paris.lutece.portal.util.mvc.commons.annotations.Action;
66 import fr.paris.lutece.portal.util.mvc.commons.annotations.View;
67 import fr.paris.lutece.portal.util.mvc.utils.MVCUtils;
68 import fr.paris.lutece.util.html.HtmlTemplate;
69 import fr.paris.lutece.util.url.UrlItem;
70
71
72
73
74
75
76
77 @Controller( controllerJsp = "ManageDirectoryEntries.jsp", controllerPath = "jsp/admin/plugins/directories/", right = "DIRECTORIES_MANAGEMENT" )
78 public class DirectoryEntriesJspBean extends MVCAdminJspBean
79 {
80 private static final long serialVersionUID = -6682482064278399335L;
81
82 private static final String MESSAGE_CONFIRM_REMOVE_ENTRY = "directories.message.confirmRemoveEntry";
83 private static final String MESSAGE_CANT_REMOVE_ENTRY = "advert.message.cantRemoveEntry";
84 private static final String MESSAGE_CANT_REMOVE_ENTRY_RESOURCES_ATTACHED = "directories.message.cantRemoveEntry.resourceAttached";
85 private static final String PROPERTY_CREATE_ENTRY_TITLE = "directories.createEntry.titleQuestion";
86 private static final String PROPERTY_MANAGE_DIRECTORY_ENTRIES = "directories.manage_directory_entries.lightTitle";
87 private static final String PROPERTY_CREATE_ENTITY = "directories.entity.create.title";
88
89
90 private static final String VIEW_GET_CREATE_ENTRY = "getCreateEntry";
91 private static final String VIEW_GET_MODIFY_ENTRY = "getModifyEntry";
92 private static final String VIEW_CONFIRM_REMOVE_ENTRY = "confirmRemoveEntry";
93 private static final String VIEW_MANAGE_DIRECTORY_ENTRIES = "manageDirectoryEntries";
94 private static final String VIEW_CREATE_DIRECTORY_ENTRIES_RESPONSE = "createDirectoryResponse";
95
96 private static final String ACTION_DO_CREATE_ENTRY = "doCreateEntry";
97 private static final String ACTION_DO_MODIFY_ENTRY = "doModifyEntry";
98 private static final String ACTION_DO_REMOVE_ENTRY = "doRemoveEntry";
99 private static final String ACTION_DO_CHANGE_ORDER_ENTRY = "doChangeOrderEntry";
100
101 private static final String TEMPLATE_MANAGE_DIRECTORY = "/admin/plugins/directories/manage_directory_entries.html";
102 private static final String TEMPLATE_CREATE_DIRECTORY_ENTRIES_RESPONSE = "/admin/plugins/directories/create_directory_response.html";
103 private static final String TEMPLATE_HTML_CODE_FORM_ADMIN = "admin/plugins/directories/html_code_form.html";
104
105 private EntryService _entryService = EntryService.getService( );
106
107
108
109
110
111
112
113
114 @View( value = VIEW_MANAGE_DIRECTORY_ENTRIES )
115 public String getManageDirectoryEntries( HttpServletRequest request )
116 {
117 String strIdDirectory = request.getParameter( DirectoriesConstants.PARAMETER_ID_DIRECTORY );
118 int nIdDirectory = Integer.parseInt( strIdDirectory );
119 Map<String, Object> model = getModel( );
120 model.put( DirectoriesConstants.PARAMETER_ID_DIRECTORY, nIdDirectory );
121 EntryService.addListEntryToModel( model, nIdDirectory );
122 return getPage( PROPERTY_MANAGE_DIRECTORY_ENTRIES, TEMPLATE_MANAGE_DIRECTORY, model );
123 }
124
125
126
127
128
129
130
131
132
133
134 @View( VIEW_CREATE_DIRECTORY_ENTRIES_RESPONSE )
135 public synchronized String getViewCreateDirectory( HttpServletRequest request ) throws AccessDeniedException
136 {
137 String strIdDirectory = request.getParameter( DirectoriesConstants.PARAMETER_ID_DIRECTORY );
138 int nIdDirectory = Integer.parseInt( strIdDirectory );
139 Map<String, Object> model = getModel( );
140 List<Entry> listEntryFirstLevel = EntryService.getDirectoryEntryList( nIdDirectory, true );
141 StringBuilder strBuilder = new StringBuilder( );
142 for ( Entry entry : listEntryFirstLevel )
143 {
144 EntryService.getHtmlEntry( model, entry.getIdEntry( ), strBuilder, getLocale( ), false );
145 }
146 model.put( DirectoriesConstants.MARK_STR_ENTRY, strBuilder.toString( ) );
147 HtmlTemplate templateForm = AppTemplateService.getTemplate( TEMPLATE_HTML_CODE_FORM_ADMIN, getLocale( ), model );
148 model.put( DirectoriesConstants.MARK_FORM_HTML, templateForm.getHtml( ) );
149 return getPage( PROPERTY_CREATE_ENTITY, TEMPLATE_CREATE_DIRECTORY_ENTRIES_RESPONSE, model );
150 }
151
152
153
154
155
156
157
158
159 @View( value = VIEW_GET_CREATE_ENTRY )
160 public String getCreateEntry( HttpServletRequest request )
161 {
162 String strIdDirectory = request.getParameter( DirectoriesConstants.PARAMETER_ID_DIRECTORY );
163 String strIdType = request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY_TYPE );
164 int nIdDirectory = Integer.parseInt( strIdDirectory );
165 int nIdType = Integer.parseInt( strIdType );
166 Entry entry = new Entry( );
167 entry.setEntryType( EntryTypeHome.findByPrimaryKey( nIdType ) );
168 String strIdField = request.getParameter( DirectoriesConstants.PARAMETER_ID_FIELD );
169 int nIdField = -1;
170 if ( StringUtils.isNotEmpty( strIdField ) && StringUtils.isNumeric( strIdField ) )
171 {
172 nIdField = Integer.parseInt( strIdField );
173 Field field = new Field( );
174 field.setIdField( nIdField );
175 entry.setFieldDepend( field );
176 }
177 entry.setIdResource( nIdDirectory );
178 entry.setResourceType( DirectoriesPlugin.RESOURCE_TYPE );
179 Map<String, Object> model = new HashMap<>( );
180 model.put( DirectoriesConstants.MARK_ENTRY, entry );
181 model.put( DirectoriesConstants.MARK_WEBAPP_URL, AppPathService.getBaseUrl( request ) );
182 model.put( DirectoriesConstants.MARK_LOCALE, AdminUserService.getLocale( request ).getLanguage( ) );
183 model.put( DirectoriesConstants.MARK_ENTRY_TYPE_SERVICE, EntryTypeServiceManager.getEntryTypeService( entry ) );
184 String strTemplate = EntryTypeServiceManager.getEntryTypeService( entry ).getTemplateCreate( entry, false );
185 if ( strTemplate == null )
186 {
187 return doCreateEntry( request );
188 }
189 model.put( DirectoriesConstants.PARAMETER_ID_DIRECTORY, nIdDirectory );
190 return getPage( PROPERTY_CREATE_ENTRY_TITLE, strTemplate, model );
191 }
192
193
194
195
196
197
198
199
200 @Action( ACTION_DO_CREATE_ENTRY )
201 public String doCreateEntry( HttpServletRequest request )
202 {
203 String strIdDirectory = request.getParameter( DirectoriesConstants.PARAMETER_ID_DIRECTORY );
204 String strIdType = request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY_TYPE );
205 int nIdDirectory = Integer.parseInt( strIdDirectory );
206 Field fieldDepend = null;
207 if ( ( request.getParameter( DirectoriesConstants.PARAMETER_CANCEL ) == null ) && StringUtils.isNotEmpty( strIdType )
208 && StringUtils.isNumeric( strIdType ) )
209 {
210 int nIdType = Integer.parseInt( strIdType );
211 EntryType entryType = new EntryType( );
212 entryType.setIdType( nIdType );
213 Entry entry = new Entry( );
214 entry.setEntryType( EntryTypeService.getInstance( ).getEntryType( nIdType ) );
215 String strIdField = request.getParameter( DirectoriesConstants.PARAMETER_ID_FIELD );
216 int nIdField = -1;
217 if ( StringUtils.isNotEmpty( strIdField ) && StringUtils.isNumeric( strIdField ) )
218 {
219 nIdField = Integer.parseInt( strIdField );
220 fieldDepend = new Field( );
221 fieldDepend.setIdField( nIdField );
222 entry.setFieldDepend( fieldDepend );
223 }
224 String strError = EntryService.doCreateOrModifyEntry( entry, request );
225 if ( strError != null )
226 {
227 return redirect( request, strError );
228 }
229 entry.setIdResource( nIdDirectory );
230 entry.setResourceType( DirectoriesPlugin.RESOURCE_TYPE );
231 entry.setIdEntry( EntryHome.create( entry ) );
232 if ( entry.getFields( ) != null )
233 {
234 for ( Field field : entry.getFields( ) )
235 {
236 field.setParentEntry( entry );
237 FieldHome.create( field );
238 }
239 }
240 if ( request.getParameter( DirectoriesConstants.PARAMETER_APPLY ) != null )
241 {
242 return redirect( request, VIEW_GET_MODIFY_ENTRY, DirectoriesConstants.PARAMETER_ID_ENTRY, entry.getIdEntry( ) );
243 }
244 }
245 if ( fieldDepend != null )
246 {
247 return redirect( request, DirectoryFieldsJspBean.getUrlModifyField( request, fieldDepend.getIdField( ) ) );
248 }
249 return redirect( request, getURLModify( request, strIdDirectory ) );
250 }
251
252
253
254
255
256
257
258
259 @View( VIEW_GET_MODIFY_ENTRY )
260 public String getModifyEntry( HttpServletRequest request )
261 {
262 String strIdEntry = request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY );
263 int nIdEntry = Integer.parseInt( strIdEntry );
264 Entry entry = EntryHome.findByPrimaryKey( nIdEntry );
265 int nIdDirectory = entry.getIdResource( );
266 IEntryTypeService entryTypeService = EntryTypeServiceManager.getEntryTypeService( entry );
267 Map<String, Object> model = new HashMap<String, Object>( );
268 UrlItem urlItem = new UrlItem( AppPathService.getBaseUrl( request ) + getViewUrl( VIEW_GET_MODIFY_ENTRY ) );
269 urlItem.addParameter( DirectoriesConstants.PARAMETER_ID_ENTRY, strIdEntry );
270 model.put( DirectoriesConstants.MARK_ENTRY, entry );
271 model.put( DirectoriesConstants.MARK_LIST, entry.getFields( ) );
272 model.put( DirectoriesConstants.MARK_WEBAPP_URL, AppPathService.getBaseUrl( request ) );
273 model.put( DirectoriesConstants.MARK_LOCALE, AdminUserService.getLocale( request ).getLanguage( ) );
274 model.put( DirectoriesConstants.MARK_ENTRY_TYPE_SERVICE, EntryTypeServiceManager.getEntryTypeService( entry ) );
275 model.put( DirectoriesConstants.PARAMETER_ID_DIRECTORY, nIdDirectory );
276 return getPage( "modify", entryTypeService.getTemplateModify( entry, false ), model );
277 }
278
279
280
281
282
283
284
285
286 @Action( ACTION_DO_MODIFY_ENTRY )
287 public String doModifyEntry( HttpServletRequest request )
288 {
289 String strIdDirectory = request.getParameter( DirectoriesConstants.PARAMETER_ID_DIRECTORY );
290 String strIdEntry = request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY );
291 if ( StringUtils.isNotEmpty( strIdEntry ) && StringUtils.isNumeric( strIdEntry ) )
292 {
293 int nIdEntry = Integer.parseInt( strIdEntry );
294 Entry entry = EntryHome.findByPrimaryKey( nIdEntry );
295 if ( request.getParameter( DirectoriesConstants.PARAMETER_CANCEL ) == null )
296 {
297 String strError = EntryService.doCreateOrModifyEntry( entry, request );
298 if ( strError != null )
299 {
300 return redirect( request, strError );
301 }
302 EntryHome.update( entry );
303 if ( entry.getFields( ) != null )
304 {
305 for ( Field field : entry.getFields( ) )
306 {
307 Field fieldStored = FieldHome.findByPrimaryKey( field.getIdField( ) );
308 if ( fieldStored != null )
309 {
310 FieldHome.update( field );
311 }
312 else
313 {
314 FieldHome.create( field );
315 }
316 }
317 }
318 }
319 if ( request.getParameter( DirectoriesConstants.PARAMETER_APPLY ) != null )
320 {
321 return redirect( request, VIEW_GET_MODIFY_ENTRY, DirectoriesConstants.PARAMETER_ID_ENTRY, nIdEntry );
322 }
323 }
324 return redirect( request, getURLModify( request, strIdDirectory ) );
325 }
326
327
328
329
330
331
332
333
334
335
336 public static String getURLModifyEntry( HttpServletRequest request, int nIdEntry )
337 {
338 UrlItem urlItem = new UrlItem( AppPathService.getBaseUrl( request ) + DirectoriesConstants.JSP_MANAGE_DIRECTORY_ENTRIES );
339 urlItem.addParameter( MVCUtils.PARAMETER_VIEW, VIEW_GET_MODIFY_ENTRY );
340 urlItem.addParameter( DirectoriesConstants.PARAMETER_ID_ENTRY, nIdEntry );
341 return urlItem.getUrl( );
342 }
343
344
345
346
347
348
349
350
351
352
353 public static String getURLModify( HttpServletRequest request, int nIdDirectory )
354 {
355 return getURLModify( request, Integer.toString( nIdDirectory ) );
356 }
357
358
359
360
361
362
363
364
365
366
367 public static String getURLModify( HttpServletRequest request, String strIdDirectory )
368 {
369 UrlItem urlItem = new UrlItem( AppPathService.getBaseUrl( request ) + DirectoriesConstants.JSP_MANAGE_DIRECTORY_ENTRIES );
370 urlItem.addParameter( MVCUtils.PARAMETER_VIEW, VIEW_MANAGE_DIRECTORY_ENTRIES );
371 urlItem.addParameter( DirectoriesConstants.PARAMETER_ID_DIRECTORY, strIdDirectory );
372 return urlItem.getUrl( );
373 }
374
375
376
377
378
379
380
381
382 @View( VIEW_CONFIRM_REMOVE_ENTRY )
383 public String getConfirmRemoveEntry( HttpServletRequest request )
384 {
385 String strIdEntry = request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY );
386 int nIdEntry = Integer.parseInt( strIdEntry );
387 ResponseFilter responsefilter = new ResponseFilter( );
388 responsefilter.setIdEntry( nIdEntry );
389 if ( !ResponseHome.getResponseList( responsefilter ).isEmpty( ) )
390 {
391 return redirect( request, AdminMessageService.getMessageUrl( request, MESSAGE_CANT_REMOVE_ENTRY_RESOURCES_ATTACHED, AdminMessage.TYPE_STOP ) );
392 }
393 UrlItem url = new UrlItem( getActionUrl( ACTION_DO_REMOVE_ENTRY ) );
394 url.addParameter( DirectoriesConstants.PARAMETER_ID_ENTRY, strIdEntry );
395 return redirect( request, AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_ENTRY, url.getUrl( ), AdminMessage.TYPE_CONFIRMATION ) );
396 }
397
398
399
400
401
402
403
404
405 @Action( ACTION_DO_REMOVE_ENTRY )
406 public String doRemoveEntry( HttpServletRequest request )
407 {
408 String strIdEntry = request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY );
409 int nIdEntry = Integer.parseInt( strIdEntry );
410 Entry entry = EntryHome.findByPrimaryKey( nIdEntry );
411 List<String> listErrors = new ArrayList<>( );
412 if ( !_entryService.checkForRemoval( strIdEntry, listErrors, getLocale( ) ) )
413 {
414 String strCause = AdminMessageService.getFormattedList( listErrors, getLocale( ) );
415 Object [ ] args = {
416 strCause
417 };
418 return AdminMessageService.getMessageUrl( request, MESSAGE_CANT_REMOVE_ENTRY, args, AdminMessage.TYPE_STOP );
419 }
420
421 List<Entry> listEntry;
422 EntryFilter filter = new EntryFilter( );
423 filter.setIdResource( entry.getIdResource( ) );
424 filter.setResourceType( DirectoriesPlugin.PLUGIN_NAME );
425 listEntry = EntryHome.getEntryList( filter );
426 if ( entry.getFieldDepend( ) == null )
427 {
428 _entryService.moveDownEntryOrder( listEntry.size( ), entry );
429 }
430 else
431 {
432
433 EntryHome.decrementOrderByOne( entry.getPosition( ), entry.getFieldDepend( ).getIdField( ), entry.getIdResource( ), entry.getResourceType( ) );
434 }
435 EntryHome.remove( nIdEntry );
436 return redirect( request, getURLModify( request, entry.getIdResource( ) ) );
437 }
438
439
440
441
442
443
444
445
446 @Action( ACTION_DO_CHANGE_ORDER_ENTRY )
447 public String doChangeOrderEntry( HttpServletRequest request )
448 {
449 String strIdDirectory = request.getParameter( DirectoriesConstants.PARAMETER_ID_DIRECTORY );
450 int nIdDirectory = Integer.parseInt( strIdDirectory );
451 Integer nEntryId = Integer.parseInt( request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY ) );
452 Integer nOrderToSet = Integer
453 .parseInt( request.getParameter( DirectoriesConstants.PARAMETER_ORDER_ID + request.getParameter( DirectoriesConstants.PARAMETER_ID_ENTRY ) ) );
454 Entry entryToChangeOrder = EntryHome.findByPrimaryKey( nEntryId );
455 int nActualOrder = entryToChangeOrder.getPosition( );
456 if ( nOrderToSet != nActualOrder )
457 {
458 if ( nOrderToSet < entryToChangeOrder.getPosition( ) )
459 {
460 _entryService.moveUpEntryOrder( nOrderToSet, entryToChangeOrder );
461 }
462 else
463 {
464 _entryService.moveDownEntryOrder( nOrderToSet, entryToChangeOrder );
465 }
466 }
467 return redirect( request, getURLModify( request, nIdDirectory ) );
468 }
469
470 }