View Javadoc
1   /*
2    * Copyright (c) 2002-2019, 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  
36   * Copyright (c) 2002-2019, Mairie de Paris
37   * All rights reserved.
38   *
39   * Redistribution and use in source and binary forms, with or without
40   * modification, are permitted provided that the following conditions
41   * are met:
42   *
43   *  1. Redistributions of source code must retain the above copyright notice
44   *     and the following disclaimer.
45   *
46   *  2. Redistributions in binary form must reproduce the above copyright notice
47   *     and the following disclaimer in the documentation and/or other materials
48   *     provided with the distribution.
49   *
50   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
51   *     contributors may be used to endorse or promote products derived from
52   *     this software without specific prior written permission.
53   *
54   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
55   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
56   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
57   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
58   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
59   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
60   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
61   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
62   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
63   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
64   * POSSIBILITY OF SUCH DAMAGE.
65   *
66   * License 1.0
67   */
68  package fr.paris.lutece.plugins.cgu.web;
69  
70  import fr.paris.lutece.plugins.cgu.business.Cgu;
71  import fr.paris.lutece.plugins.cgu.business.CguHome;
72  import fr.paris.lutece.plugins.cgu.business.CguVersion;
73  import fr.paris.lutece.plugins.cgu.business.CguVersionHome;
74  import fr.paris.lutece.portal.service.util.AppPathService;
75  import fr.paris.lutece.portal.util.mvc.admin.annotations.Controller;
76  import fr.paris.lutece.portal.util.mvc.commons.annotations.Action;
77  import fr.paris.lutece.portal.util.mvc.commons.annotations.View;
78  
79  import java.util.ArrayList;
80  import java.util.List;
81  import java.util.Map;
82  import javax.servlet.http.HttpServletRequest;
83  
84  /**
85   * This class provides the user interface to manage Cgu features ( manage, create, modify, remove )
86   */
87  @Controller( controllerJsp = "ManageCgus.jsp", controllerPath = "jsp/admin/plugins/cgu/", right = "CGU_MANAGEMENT" )
88  public class CguJspBean extends AbstractManageJspBean
89  {
90      /**
91  	 * 
92  	 */
93      private static final long serialVersionUID = -7746974008322818952L;
94      // Templates
95      private static final String TEMPLATE_MANAGE_CGUS = "/admin/plugins/cgu/manage_cgus.html";
96      private static final String TEMPLATE_CREATE_CGU = "/admin/plugins/cgu/create_cgu.html";
97      private static final String TEMPLATE_MODIFY_CGU = "/admin/plugins/cgu/modify_cgu.html";
98  
99      // Parameters
100     private static final String PARAMETER_ID_CGU = "id";
101     private static final String PARAMETER_ID_CGU_VERSION = "id";
102     private static final String PARAMETER_CODE = "cgu_code";
103     private static final String PARAMETER_CSS = "css";
104     private static final String PARAMETER_TEXT = "text";
105     private static final String PARAMETER_MINIMUM_AGE = "minimum_age";
106 
107     private static final int ZERO = 0;
108 
109     // Properties for page titles
110     private static final String PROPERTY_PAGE_TITLE_MANAGE_CGUS = "cgu.manage_cgus.pageTitle";
111     private static final String PROPERTY_PAGE_TITLE_MODIFY_CGU = "cgu.modify_cgu.pageTitle";
112     private static final String PROPERTY_PAGE_TITLE_CREATE_CGU = "cgu.create_cgu.pageTitle";
113 
114     // Markers
115     private static final String MARK_CGU_LIST = "cgu_list";
116     private static final String MARK_CGU = "cgu";
117     private static final String MARK_WEBAPP_URL = "webapp_url";
118 
119     private static final String JSP_MANAGE_CGUS = "jsp/admin/plugins/cgu/ManageCgus.jsp";
120 
121     // Validations
122     private static final String VALIDATION_ATTRIBUTES_PREFIX = "cgu.model.entity.cgu.attribute.";
123 
124     // Views
125     private static final String VIEW_MANAGE_CGUS = "manageCgus";
126     private static final String VIEW_CREATE_CGU = "createCgu";
127     private static final String VIEW_MODIFY_CGU = "modifyCgu";
128 
129     // Actions
130     private static final String ACTION_CREATE_CGU = "createCgu";
131     private static final String ACTION_MODIFY_CGU = "modifyCgu";
132     private static final String ACTION_PUBLISHED_CGU_VERSION = "publishedCguVersion";
133 
134     // Infos
135     private static final String INFO_CGU_CREATED = "cgu.info.cgu.created";
136     private static final String INFO_CGU_UPDATED = "cgu.info.cgu.updated";
137     private static final String INFO_PUBLISHED_CGU_SUCCESSFUL = "cgu.info.cgu.cguCreated";
138     private static final String INFO_CGU_CODE_ALREADY_USED = "cgu.info.cgu.cguCodeAlreadyUsed";
139     private static final String WARNING_EMPTY_TEXT = "cgu.info.cgu.emptyText";
140     private static final String WARNING_EMPTY_MINIMUM_AGE = "cgu.info.cgu.emptyMinimumAge";
141 
142     // Actions
143     private static final String ACTION_CREATE = "create";
144     private static final String ACTION_MODIFY = "modify";
145 
146     // Session variable to store working values
147     private Cgu _cgu;
148 
149     /**
150      * Build the Manage View
151      * 
152      * @param request
153      *            The HTTP request
154      * @return The page
155      */
156     @View( value = VIEW_MANAGE_CGUS, defaultView = true )
157     public String getManageCgus( HttpServletRequest request )
158     {
159         _cgu = null;
160         List<Cgu> listCgu = CguHome.findCguList( );
161         for ( Cgu cgu : listCgu )
162         {
163             List<CguVersion> listCguVersion = CguVersionHome.findCguVersionsByIdCguOrderedByIdCguAndVersion( cgu.getId( ) );
164             cgu.setCguVersions( listCguVersion );
165         }
166         Map<String, Object> model = getPaginatedListModel( request, MARK_CGU_LIST, listCgu, JSP_MANAGE_CGUS );
167 
168         model.put( MARK_WEBAPP_URL, AppPathService.getBaseUrl( request ) );
169         return getPage( PROPERTY_PAGE_TITLE_MANAGE_CGUS, TEMPLATE_MANAGE_CGUS, model );
170     }
171 
172     /**
173      * Returns the form to create a cgu
174      *
175      * @param request
176      *            The Http request
177      * @return the html code of the cgu form
178      */
179     @View( VIEW_CREATE_CGU )
180     public String getCreateCgu( HttpServletRequest request )
181     {
182         _cgu = ( _cgu != null ) ? _cgu : new Cgu( );
183 
184         Map<String, Object> model = getModel( );
185         model.put( MARK_CGU, _cgu );
186         model.put( MARK_WEBAPP_URL, AppPathService.getBaseUrl( request ) );
187         return getPage( PROPERTY_PAGE_TITLE_CREATE_CGU, TEMPLATE_CREATE_CGU, model );
188     }
189 
190     /**
191      * Process the data capture form of a new cgu
192      *
193      * @param request
194      *            The Http Request
195      * @return The Jsp URL of the process result
196      */
197     @Action( ACTION_CREATE_CGU )
198     public String doCreateCgu( HttpServletRequest request )
199     {
200         populate( _cgu, request, request.getLocale( ) );
201 
202         // Check constraints
203         if ( !validateBean( _cgu, VALIDATION_ATTRIBUTES_PREFIX ) )
204         {
205             return redirectView( request, VIEW_CREATE_CGU );
206         }
207 
208         if ( !validateCGU( request, ACTION_CREATE ) )
209         {
210             return redirectView( request, VIEW_CREATE_CGU );
211         }
212 
213         String cguCode = request.getParameter( PARAMETER_CODE );
214         _cgu.setCguCode( cguCode );
215         _cgu.setCss( request.getParameter( PARAMETER_CSS ) );
216 
217         CguVersion cguVersion = new CguVersion( );
218         CguHome.create( _cgu );
219         cguVersion.setCguId( _cgu.getId( ) );
220         cguVersion.setText( request.getParameter( PARAMETER_TEXT ) );
221         if ( request.getParameter( PARAMETER_MINIMUM_AGE ) != null && !request.getParameter( PARAMETER_MINIMUM_AGE ).isEmpty( )
222                 && Integer.parseInt( request.getParameter( PARAMETER_MINIMUM_AGE ) ) > ZERO )
223         {
224             cguVersion.setMinimumAge( Integer.parseInt( request.getParameter( PARAMETER_MINIMUM_AGE ) ) );
225         }
226         else
227         {
228             cguVersion.setMinimumAge( ZERO );
229         }
230         CguVersionHome.create( cguVersion );
231         addError( INFO_CGU_CREATED, getLocale( ) );
232 
233         return redirectView( request, VIEW_MANAGE_CGUS );
234     }
235 
236     /**
237      * Returns the list cgu to publish version of cgu
238      *
239      * @param request
240      *            The Http request
241      * @return The HTML list cgu
242      */
243     @Action( ACTION_PUBLISHED_CGU_VERSION )
244     public String doPublishedCguVersion( HttpServletRequest request )
245     {
246         int nIdCguVersion = Integer.parseInt( request.getParameter( PARAMETER_ID_CGU_VERSION ) );
247         CguVersion cguVersion = CguVersionHome.findByPrimaryKey( nIdCguVersion );
248         cguVersion.setPublished( true );
249         CguVersionHome.update( cguVersion );
250         doCreateNewCguVersion( cguVersion );
251         return redirectView( request, VIEW_MANAGE_CGUS );
252     }
253 
254     /**
255      * Returns the list cgu to create a new version of cgu
256      *
257      * @param cguVersionOld
258      *            the new cguVersionOld
259      */
260     private void doCreateNewCguVersion( CguVersion cguVersionOld )
261     {
262         CguVersion cguVersion = new CguVersion( );
263         cguVersion.setCguId( cguVersionOld.getCguId( ) );
264         cguVersion.setMinimumAge( cguVersionOld.getMinimumAge( ) );
265         cguVersion.setText( cguVersionOld.getText( ) );
266         cguVersion.setVersion( cguVersionOld.getVersion( ) + 1 );
267 
268         CguVersionHome.create( cguVersion );
269         addInfo( INFO_PUBLISHED_CGU_SUCCESSFUL, getLocale( ) );
270     }
271 
272     /**
273      * Process the change form of a cgu
274      *
275      * @param request
276      *            The Http request
277      * @return The Jsp URL of the process result
278      */
279     @Action( ACTION_MODIFY_CGU )
280     public String doModifyCgu( HttpServletRequest request )
281     {
282         populate( _cgu, request, request.getLocale( ) );
283 
284         // Check constraints
285         if ( !validateBean( _cgu, VALIDATION_ATTRIBUTES_PREFIX ) )
286         {
287             return redirect( request, VIEW_MODIFY_CGU, PARAMETER_ID_CGU, _cgu.getId( ) );
288         }
289 
290         if ( !validateCGU( request, ACTION_MODIFY ) )
291         {
292             return redirect( request, VIEW_MODIFY_CGU, PARAMETER_ID_CGU, _cgu.getId( ) );
293         }
294 
295         String strCguCode = request.getParameter( PARAMETER_CODE );
296         _cgu.setCguCode( strCguCode );
297         CguHome.update( _cgu );
298 
299         CguVersion cguVersion = CguVersionHome.findUnpublishedCguVersionByCode( strCguCode );
300         if ( request.getParameter( PARAMETER_MINIMUM_AGE ) != null && !request.getParameter( PARAMETER_MINIMUM_AGE ).isEmpty( )
301                 && Integer.parseInt( request.getParameter( PARAMETER_MINIMUM_AGE ) ) > ZERO )
302         {
303             cguVersion.setMinimumAge( Integer.parseInt( request.getParameter( PARAMETER_MINIMUM_AGE ) ) );
304         }
305         else
306         {
307             cguVersion.setMinimumAge( ZERO );
308         }
309         cguVersion.setText( request.getParameter( PARAMETER_TEXT ) );
310 
311         CguVersionHome.update( cguVersion );
312         addInfo( INFO_CGU_UPDATED, getLocale( ) );
313 
314         return redirectView( request, VIEW_MANAGE_CGUS );
315     }
316 
317     /**
318      * Returns the form to update info about a cgu
319      *
320      * @param request
321      *            The Http request
322      * @return The HTML form to update info
323      */
324     @View( VIEW_MODIFY_CGU )
325     public String getModifyCgu( HttpServletRequest request )
326     {
327         int nIdCgu = Integer.parseInt( request.getParameter( PARAMETER_ID_CGU ) );
328 
329         if ( _cgu == null || ( _cgu.getId( ) != nIdCgu ) )
330         {
331             _cgu = CguHome.findByPrimaryKey( nIdCgu );
332             List<CguVersion> listCguVersion = CguVersionHome.findCguVersionsByIdCgu( _cgu.getId( ) );
333             _cgu.setCguVersions( listCguVersion );
334         }
335 
336         Map<String, Object> model = getModel( );
337         model.put( MARK_CGU, _cgu );
338         model.put( MARK_WEBAPP_URL, AppPathService.getBaseUrl( request ) );
339         return getPage( PROPERTY_PAGE_TITLE_MODIFY_CGU, TEMPLATE_MODIFY_CGU, model );
340     }
341 
342     /**
343      * 
344      * check if code is not already use / text is not empty and minimum age is not empty return true if ok else adderror message corresponding to what's wrong
345      * 
346      * @param request
347      *            the HttpServletRequest request
348      * @param action
349      *            action made the get in this method
350      * @return false if cgu is not valid
351      */
352     private boolean validateCGU( HttpServletRequest request, String action )
353     {
354         boolean isValid = true;
355         _cgu.setCss( request.getParameter( PARAMETER_CSS ) );
356         Cgu cgu = CguHome.findByCode( request.getParameter( PARAMETER_CODE ) );
357         if ( ( action.equalsIgnoreCase( ACTION_CREATE ) && cgu != null )
358                 || ( action.equalsIgnoreCase( ACTION_MODIFY ) && cgu != null && cgu.getId( ) != _cgu.getId( ) ) )
359         {
360             addError( INFO_CGU_CODE_ALREADY_USED, getLocale( ) );
361             isValid = false;
362         }
363         _cgu.setCguCode( request.getParameter( PARAMETER_CODE ) );
364 
365         CguVersion cguVersion = new CguVersion( );
366         List<CguVersion> listCguVersion = new ArrayList<CguVersion>( );
367         if ( request.getParameter( PARAMETER_MINIMUM_AGE ) == null || request.getParameter( PARAMETER_MINIMUM_AGE ).isEmpty( ) )
368         {
369             addError( WARNING_EMPTY_MINIMUM_AGE, getLocale( ) );
370             isValid = false;
371         }
372         else
373         {
374             cguVersion.setMinimumAge( Integer.parseInt( request.getParameter( PARAMETER_MINIMUM_AGE ) ) );
375         }
376         if ( request.getParameter( PARAMETER_TEXT ) == null || request.getParameter( PARAMETER_TEXT ).isEmpty( ) )
377         {
378             addError( WARNING_EMPTY_TEXT, getLocale( ) );
379             isValid = false;
380         }
381         else
382         {
383             cguVersion.setText( request.getParameter( PARAMETER_TEXT ) );
384         }
385         listCguVersion.add( cguVersion );
386         _cgu.setCguVersions( listCguVersion );
387         return isValid;
388     }
389 }