View Javadoc
1   /*
2    * Copyright (c) 2002-2015, Mairie de 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  
35  package fr.paris.lutece.plugins.directory.modules.exportfile.web;
36  
37  import fr.paris.lutece.plugins.directory.modules.exportfile.business.FileName;
38  import fr.paris.lutece.plugins.directory.modules.exportfile.business.FileNameHome;
39  import fr.paris.lutece.plugins.directory.modules.exportfile.business.MappingEntry;
40  import fr.paris.lutece.plugins.directory.modules.exportfile.business.MappingEntryHome;
41  import fr.paris.lutece.plugins.directory.modules.exportfile.service.DirectoryService;
42  import fr.paris.lutece.plugins.directory.modules.exportfile.service.FileNameService;
43  import fr.paris.lutece.portal.service.message.AdminMessage;
44  import fr.paris.lutece.portal.service.message.AdminMessageService;
45  import fr.paris.lutece.portal.util.mvc.admin.annotations.Controller;
46  import fr.paris.lutece.portal.util.mvc.commons.annotations.Action;
47  import fr.paris.lutece.portal.util.mvc.commons.annotations.View;
48  import fr.paris.lutece.util.url.UrlItem;
49  
50  import java.util.Collection;
51  import java.util.List;
52  import java.util.Map;
53  import java.util.Vector;
54  import java.util.concurrent.ConcurrentHashMap;
55  
56  import javax.servlet.http.HttpServletRequest;
57  
58  import org.apache.commons.fileupload.FileItem;
59  import org.apache.commons.lang.StringUtils;
60  
61  /**
62   * This class provides the user interface to manage MappingEntry features ( manage, create, modify, remove )
63   */
64  @Controller( controllerJsp = "ManageMappingEntry.jsp", controllerPath = "jsp/admin/plugins/directory/modules/exportfile/", right = "EXPORTFILE_MANAGEMENT" )
65  public class MappingEntryJspBean extends ManageExportfileJspBean
66  {
67  
68      // //////////////////////////////////////////////////////////////////////////
69      // Constants
70  
71      // templates
72      private static final String TEMPLATE_MANAGE_MAPPINGENTRYS = "/admin/plugins/directory/modules/exportfile/manage_mappingentry.html";
73      private static final String TEMPLATE_CREATE_MAPPINGENTRY = "/admin/plugins/directory/modules/exportfile/create_mappingentry.html";
74      private static final String TEMPLATE_MODIFY_MAPPINGENTRY = "/admin/plugins/directory/modules/exportfile/modify_mappingentry.html";
75  
76      // Parameters
77      private static final String PARAMETER_ID_MAPPINGENTRY = "id";
78      private static final String PARAMETER_ID_DIRECTORY = "idDirectory";
79      private static final String PARAMETER_SAVE_FILENAME = "action_createMappingEntry";
80  
81      private static final String PARAMETER_SAVE_FILENAME_VALUE = "save_fileName";
82  
83      // Properties for page titles
84      private static final String PROPERTY_PAGE_TITLE_MANAGE_MAPPINGENTRYS = "module.directory.exportfile.manage_mappingentrys.pageTitle";
85      private static final String PROPERTY_PAGE_TITLE_MODIFY_MAPPINGENTRY = "module.directory.exportfile.modify_mappingentry.pageTitle";
86      private static final String PROPERTY_PAGE_TITLE_CREATE_MAPPINGENTRY = "module.directory.exportfile.create_mappingentry.pageTitle";
87  
88      // Markers
89      private static final String MARK_MAPPINGENTRY_LIST = "mappingentry_list";
90      private static final String MARK_MAPPINGENTRY = "mappingentry";
91      private static final String MARK_FILENAME_LIST = "fileName_list";
92  
93      private static final String JSP_MANAGE_MAPPINGENTRYS = "jsp/admin/plugins/directory/modules/exportfile/ManageMappingEntry.jsp";
94  
95      // Properties
96      private static final String MESSAGE_CONFIRM_REMOVE_MAPPINGENTRY = "module.directory.exportfile.message.confirmRemoveMappingEntry";
97      private static final String PROPERTY_DEFAULT_LIST_MAPPINGENTRY_PER_PAGE = "module.directory.exportfile.listMappingEntrys.itemsPerPage";
98  
99      private static final String VALIDATION_ATTRIBUTES_PREFIX = "module.directory.exportfile.model.entity.mappingentry.attribute.";
100     private static final String VALIDATION_ATTRIBUTES_NAME_PREFIX = "module.directory.exportfile.model.entity.filename.attribute.";
101 
102     // Views
103     private static final String VIEW_MANAGE_MAPPINGENTRYS = "manageMappingEntrys";
104     private static final String VIEW_CREATE_MAPPINGENTRY = "createMappingEntry";
105     private static final String VIEW_MODIFY_MAPPINGENTRY = "modifyMappingEntry";
106 
107     // Actions
108     private static final String ACTION_CREATE_MAPPINGENTRY = "createMappingEntry";
109     private static final String ACTION_MODIFY_MAPPINGENTRY = "modifyMappingEntry";
110     private static final String ACTION_REMOVE_FILENAME = "removeFileName";
111     private static final String ACTION_REMOVE_MAPPINGENTRY = "removeMappingEntry";
112     private static final String ACTION_CONFIRM_REMOVE_MAPPINGENTRY = "confirmRemoveMappingEntry";
113 
114     // Infos
115     private static final String INFO_MAPPINGENTRY_CREATED = "module.directory.exportfile.info.mappingentry.created";
116     private static final String INFO_MAPPINGENTRY_UPDATED = "module.directory.exportfile.info.mappingentry.updated";
117     private static final String INFO_MAPPINGENTRY_REMOVED = "module.directory.exportfile.info.mappingentry.removed";
118 
119     public static final String MARK_DIRECTORY_LIST = "list_directory";
120     public static final String MARK_LIST_ENTRIES = "list_entries";
121 
122     // Session variable to store working values
123     private MappingEntry _mappingentry;
124     private DirectoryService _directoryService = DirectoryService.getService( );
125     private FileNameService _fileNameService = FileNameService.getService( );
126 
127     @View( value = VIEW_MANAGE_MAPPINGENTRYS, defaultView = true )
128     public String getManageMappingEntrys( HttpServletRequest request )
129     {
130         _mappingentry = null;
131         List<MappingEntry> listMappingEntrys = (List<MappingEntry>) MappingEntryHome.getMappingEntrysList( );
132         Map<String, Object> model = getPaginatedListModel( request, MARK_MAPPINGENTRY_LIST, listMappingEntrys, JSP_MANAGE_MAPPINGENTRYS );
133 
134         return getPage( PROPERTY_PAGE_TITLE_MANAGE_MAPPINGENTRYS, TEMPLATE_MANAGE_MAPPINGENTRYS, model );
135     }
136 
137     /**
138      * Returns the form to create a mappingentry
139      *
140      * @param request
141      *            The Http request
142      * @return the html code of the mappingentry form
143      */
144     @View( VIEW_CREATE_MAPPINGENTRY )
145     public String getCreateMappingEntry( HttpServletRequest request )
146     {
147         _mappingentry = ( _mappingentry != null ) ? _mappingentry : new MappingEntry( );
148         String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
149         int nIdDirectory = -1;
150 
151         if ( strIdDirectory != null && StringUtils.isNotEmpty( strIdDirectory ) )
152         {
153             nIdDirectory = Integer.parseInt( strIdDirectory );
154             _mappingentry.setIdDirectory( nIdDirectory );
155         }
156 
157         Map<String, Object> model = getModel( );
158         model.put( MARK_MAPPINGENTRY, _mappingentry );
159         model.put( MARK_DIRECTORY_LIST, _directoryService.getListDirectories( ) );
160         model.put( MARK_LIST_ENTRIES, _directoryService.getListEntries( nIdDirectory, request ) );
161         model.put( MARK_FILENAME_LIST, _fileNameService.getListUploadedFiles( request.getSession( ) ) );
162 
163         return getPage( PROPERTY_PAGE_TITLE_CREATE_MAPPINGENTRY, TEMPLATE_CREATE_MAPPINGENTRY, model );
164     }
165 
166     /**
167      * Process the data capture form of a new mappingentry
168      *
169      * @param request
170      *            The Http Request
171      * @return The Jsp URL of the process result
172      */
173     @Action( ACTION_CREATE_MAPPINGENTRY )
174     public String doCreateMappingEntry( HttpServletRequest request )
175     {
176         populate( _mappingentry, request );
177         if ( request.getParameter( PARAMETER_SAVE_FILENAME ) != null
178                 && StringUtils.equals( PARAMETER_SAVE_FILENAME_VALUE, request.getParameter( PARAMETER_SAVE_FILENAME ) ) )
179         {
180             FileName _fileName = new FileName( );
181             populate( _fileName, request );
182             // Check constraints
183             if ( !validateBean( _fileName, VALIDATION_ATTRIBUTES_NAME_PREFIX ) )
184             {
185                 return redirectView( request, VIEW_CREATE_MAPPINGENTRY );
186             }
187             _fileNameService.addFileNameToUploadedList( _fileName, request );
188             String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
189             return redirect( request, VIEW_CREATE_MAPPINGENTRY, PARAMETER_ID_DIRECTORY, Integer.parseInt( strIdDirectory ) );
190 
191         }
192 
193         // Check constraints
194         if ( !validateBean( _mappingentry, VALIDATION_ATTRIBUTES_PREFIX ) )
195         {
196             return redirectView( request, VIEW_CREATE_MAPPINGENTRY );
197         }
198 
199         _fileNameService.createEntry( _mappingentry, _fileNameService.getListUploadedFiles( request.getSession( ) ) );
200         _fileNameService.removeFilesName( request.getSession( ) );
201 
202         addInfo( INFO_MAPPINGENTRY_CREATED, getLocale( ) );
203 
204         return redirectView( request, VIEW_MANAGE_MAPPINGENTRYS );
205     }
206 
207     /**
208      * Manages the removal form of a mappingentry whose identifier is in the http request
209      *
210      * @param request
211      *            The Http request
212      * @return the html code to confirm
213      */
214     @Action( ACTION_CONFIRM_REMOVE_MAPPINGENTRY )
215     public String getConfirmRemoveMappingEntry( HttpServletRequest request )
216     {
217         int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_MAPPINGENTRY ) );
218         UrlItem url = new UrlItem( getActionUrl( ACTION_REMOVE_MAPPINGENTRY ) );
219         url.addParameter( PARAMETER_ID_MAPPINGENTRY, nId );
220 
221         String strMessageUrl = AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_MAPPINGENTRY, url.getUrl( ), AdminMessage.TYPE_CONFIRMATION );
222 
223         return redirect( request, strMessageUrl );
224     }
225 
226     /**
227      * Handles the removal form of a mappingentry
228      *
229      * @param request
230      *            The Http request
231      * @return the jsp URL to display the form to manage mappingentrys
232      */
233     @Action( ACTION_REMOVE_MAPPINGENTRY )
234     public String doRemoveMappingEntry( HttpServletRequest request )
235     {
236         int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_MAPPINGENTRY ) );
237 
238         _fileNameService.removeEntry( nId );
239         _fileNameService.removeFilesName( request.getSession( ) );
240         addInfo( INFO_MAPPINGENTRY_REMOVED, getLocale( ) );
241 
242         return redirectView( request, VIEW_MANAGE_MAPPINGENTRYS );
243     }
244 
245     /**
246      * Returns the form to update info about a mappingentry
247      *
248      * @param request
249      *            The Http request
250      * @return The HTML form to update info
251      */
252     @View( VIEW_MODIFY_MAPPINGENTRY )
253     public String getModifyMappingEntry( HttpServletRequest request )
254     {
255         int nId = Integer.parseInt( request.getParameter( PARAMETER_ID_MAPPINGENTRY ) );
256         String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
257         int nIdDirectory = -1;
258 
259         if ( _mappingentry == null || ( _mappingentry.getId( ) != nId ) )
260         {
261             _mappingentry = MappingEntryHome.findByPrimaryKey( nId );
262             nIdDirectory = _mappingentry.getIdDirectory( );
263         }
264         if ( strIdDirectory != null && StringUtils.isNotEmpty( strIdDirectory ) && StringUtils.isNotBlank( strIdDirectory ) )
265         {
266 
267             nIdDirectory = Integer.parseInt( strIdDirectory );
268         }
269         if ( _fileNameService.getListUploadedFiles( request.getSession( ) ) == null
270                 || _fileNameService.getListUploadedFiles( request.getSession( ) ).size( ) == 0 )
271         {
272             Collection<FileName> fileName = FileNameHome.getFilesList( nId );
273             for ( FileName fileNam : fileName )
274             {
275                 _fileNameService.addFileNameToUploadedList( fileNam, request );
276             }
277         }
278         List<FileName> fileNameList = _fileNameService.getListUploadedFiles( request.getSession( ) );
279         Map<String, Object> model = getModel( );
280         model.put( MARK_MAPPINGENTRY, _mappingentry );
281         model.put( MARK_DIRECTORY_LIST, _directoryService.getListDirectories( ) );
282         model.put( MARK_LIST_ENTRIES, _directoryService.getListEntries( nIdDirectory, request ) );
283         model.put( MARK_FILENAME_LIST, fileNameList );
284 
285         return getPage( PROPERTY_PAGE_TITLE_MODIFY_MAPPINGENTRY, TEMPLATE_MODIFY_MAPPINGENTRY, model );
286     }
287 
288     /**
289      * Process the change form of a mappingentry
290      *
291      * @param request
292      *            The Http request
293      * @return The Jsp URL of the process result
294      */
295     @Action( ACTION_MODIFY_MAPPINGENTRY )
296     public String doModifyMappingEntry( HttpServletRequest request )
297     {
298         populate( _mappingentry, request );
299 
300         // Check constraints
301         if ( !validateBean( _mappingentry, VALIDATION_ATTRIBUTES_PREFIX ) )
302         {
303             return redirect( request, VIEW_MODIFY_MAPPINGENTRY, PARAMETER_ID_MAPPINGENTRY, _mappingentry.getId( ) );
304         }
305 
306         _fileNameService.updateEntry( _mappingentry, _fileNameService.getListUploadedFiles( request.getSession( ) ) );
307         _fileNameService.removeFilesName( request.getSession( ) );
308 
309         addInfo( INFO_MAPPINGENTRY_UPDATED, getLocale( ) );
310 
311         return redirectView( request, VIEW_MANAGE_MAPPINGENTRYS );
312     }
313 
314     /**
315      * Handles the removal form of a listeFileName
316      *
317      * @param request
318      *            The Http request
319      * @return the jsp URL to display the form to manage mappingentrys
320      */
321     @Action( ACTION_REMOVE_FILENAME )
322     public String doRemoveFileName( HttpServletRequest request )
323     {
324 
325         _fileNameService.removeFilesName( request.getSession( ) );
326         String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
327         return redirect( request, VIEW_CREATE_MAPPINGENTRY, PARAMETER_ID_DIRECTORY, Integer.parseInt( strIdDirectory ) );
328     }
329 }