View Javadoc

1   /*
2    * Copyright (c) 2002-2014, 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  package fr.paris.lutece.plugins.digglike.web;
35  
36  import fr.paris.lutece.plugins.digglike.business.DiggSubmitType;
37  import fr.paris.lutece.plugins.digglike.business.DiggSubmitTypeHome;
38  import fr.paris.lutece.plugins.digglike.utils.DiggUtils;
39  import fr.paris.lutece.portal.service.fileupload.FileUploadService;
40  import fr.paris.lutece.portal.service.i18n.I18nService;
41  import fr.paris.lutece.portal.service.image.ImageResource;
42  import fr.paris.lutece.portal.service.message.AdminMessage;
43  import fr.paris.lutece.portal.service.message.AdminMessageService;
44  import fr.paris.lutece.portal.service.plugin.Plugin;
45  import fr.paris.lutece.portal.service.template.AppTemplateService;
46  import fr.paris.lutece.portal.service.util.AppLogService;
47  import fr.paris.lutece.portal.service.util.AppPathService;
48  import fr.paris.lutece.portal.service.util.AppPropertiesService;
49  import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
50  import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest;
51  import fr.paris.lutece.util.html.HtmlTemplate;
52  import fr.paris.lutece.util.html.Paginator;
53  import fr.paris.lutece.util.url.UrlItem;
54  
55  import org.apache.commons.fileupload.FileItem;
56  
57  import java.util.HashMap;
58  import java.util.List;
59  import java.util.Locale;
60  import java.util.Map;
61  
62  import javax.servlet.http.HttpServletRequest;
63  
64  
65  /**
66   *
67   * class DiggSubmitTypeJspBean
68   *
69   */
70  public class DiggSubmitTypeJspBean extends PluginAdminPageJspBean
71  {
72      private static final long serialVersionUID = 2466547668533718657L;
73  
74      //	templates
75      private static final String TEMPLATE_MANAGE_DIGG_SUBMIT_TYPE = "admin/plugins/digglike/manage_digg_submit_type.html";
76      private static final String TEMPLATE_CREATE_DIGG_SUBMIT_TYPE = "admin/plugins/digglike/create_digg_submit_type.html";
77      private static final String TEMPLATE_MODIFY_DIGG_SUBMIT_TYPE = "admin/plugins/digglike/modify_digg_submit_type.html";
78  
79      //	Markers
80      private static final String MARK_DIGG_SUBMIT_TYPE_LIST = "type_list";
81      private static final String MARK_DIGG_SUBMIT_TYPE = "type";
82      private static final String MARK_PAGINATOR = "paginator";
83      private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";
84  
85      //	parameters form
86      private static final String PARAMETER_PAGE_INDEX = "page_index";
87      private static final String PARAMETER_ID_DIGG_SUBMIT_TYPE = "id_type";
88      private static final String PARAMETER_NAME = "name";
89      private static final String PARAMETER_COLOR = "color";
90      private static final String PARAMETER_PARAMETERIZABLE = "parameterizable";
91      private static final String PARAMETER_IMAGE_SOURCE = "image_source";
92      private static final String PARAMETER_UPDATE_FILE = "update_file";
93  
94      //	 other constants
95      private static final String EMPTY_STRING = "";
96  
97      //	message
98      private static final String MESSAGE_MANDATORY_FIELD = "digglike.message.mandatory.field";
99      private static final String FIELD_NAME = "digglike.createDiggSubmitType.labelName";
100     private static final String MESSAGE_CONFIRM_REMOVE_DIGG_SUBMIT_TYPE = "digglike.message.confirmRemoveDiggSubmitType";
101     private static final String MESSAGE_DIGG_SUBMIT_TYPE_ASSOCIATE_TO_DIGG = "digglike.message.diggSubmitTypeAssociateToDigg";
102 
103     //	properties
104     private static final String PROPERTY_ITEM_PER_PAGE = "digglike.itemsPerPage";
105     private static final String PROPERTY_MANAGE_DIGG_SUBMIT_TYPE_TITLE = "digglike.manageDiggSubmitType.pageTitle";
106     private static final String PROPERTY_MODIFY_DIGG_SUBMIT_TYPE_TITLE = "digglike.modifyDiggSubmitType.title";
107     private static final String PROPERTY_CREATE_DIGG_SUBMIT_TYPE_TITLE = "digglike.createDiggSubmitType.title";
108 
109     //Jsp Definition
110     private static final String JSP_MANAGE_DIGG_SUBMIT_TYPE = "jsp/admin/plugins/digglike/ManageDiggSubmitType.jsp";
111     private static final String JSP_DO_REMOVE_DIGG_SUBMIT_TYPE = "jsp/admin/plugins/digglike/DoRemoveDiggSubmitType.jsp";
112 
113     //	session fields
114     private int _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_ITEM_PER_PAGE, 15 );
115     private String _strCurrentPageIndex;
116     private int _nItemsPerPage;
117 
118     /**
119      * Return management digg submit type
120      * @param request The Http request
121      * @return Html ExportFormat
122      */
123     public String getManageDiggSubmitType( HttpServletRequest request )
124     {
125         Plugin plugin = getPlugin(  );
126         Locale locale = getLocale(  );
127         Map<String, Object> model = new HashMap<String, Object>(  );
128         List<DiggSubmitType> listDiggSubmitType = DiggSubmitTypeHome.getList( plugin );
129         _strCurrentPageIndex = Paginator.getPageIndex( request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
130         _nItemsPerPage = Paginator.getItemsPerPage( request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage,
131                 _nDefaultItemsPerPage );
132 
133         Paginator<DiggSubmitType> paginator = new Paginator<DiggSubmitType>( listDiggSubmitType, _nItemsPerPage,
134                 getJspManageDiggSubmitType( request ), PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
135 
136         model.put( MARK_PAGINATOR, paginator );
137         model.put( MARK_NB_ITEMS_PER_PAGE, EMPTY_STRING + _nItemsPerPage );
138         model.put( MARK_DIGG_SUBMIT_TYPE_LIST, paginator.getPageItems(  ) );
139         setPageTitleProperty( PROPERTY_MANAGE_DIGG_SUBMIT_TYPE_TITLE );
140 
141         HtmlTemplate templateList = AppTemplateService.getTemplate( TEMPLATE_MANAGE_DIGG_SUBMIT_TYPE, locale, model );
142 
143         return getAdminPage( templateList.getHtml(  ) );
144     }
145 
146     /**
147      * Gets the diggsubmit type creation page
148      * @param request The HTTP request
149      * @return The export format creation page
150      */
151     public String getCreateDiggSubmitType( HttpServletRequest request )
152     {
153         Locale locale = getLocale(  );
154         Map<String, Object> model = new HashMap<String, Object>(  );
155         setPageTitleProperty( PROPERTY_CREATE_DIGG_SUBMIT_TYPE_TITLE );
156 
157         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_DIGG_SUBMIT_TYPE, locale, model );
158 
159         return getAdminPage( template.getHtml(  ) );
160     }
161 
162     /**
163      * Perform the diggsubmit type creation
164      * @param request The HTTP request
165      * @return The URL to go after performing the action
166      */
167     public String doCreateDiggSubmitType( HttpServletRequest request )
168     {
169         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
170         DiggSubmitType diggSubmitType = new DiggSubmitType(  );
171         String strError = getDiggSubmitTypeData( multipartRequest, diggSubmitType );
172 
173         if ( strError != null )
174         {
175             return strError;
176         }
177 
178         DiggSubmitTypeHome.create( diggSubmitType, getPlugin(  ) );
179 
180         return getJspManageDiggSubmitType( request );
181     }
182 
183     /**
184      * Gets the diggSubmitType modification page
185      * @param request The HTTP request
186      * @return The export format creation page
187      */
188     public String getModifyDiggSubmitType( HttpServletRequest request )
189     {
190         Plugin plugin = getPlugin(  );
191         Locale locale = getLocale(  );
192         DiggSubmitType diggSubmitType;
193         String strIdDiggSubmitType = request.getParameter( PARAMETER_ID_DIGG_SUBMIT_TYPE );
194         Map<String, Object> model = new HashMap<String, Object>(  );
195         int nIdDiggSubmitType = -1;
196 
197         if ( ( strIdDiggSubmitType != null ) && !strIdDiggSubmitType.equals( EMPTY_STRING ) )
198         {
199             try
200             {
201                 nIdDiggSubmitType = Integer.parseInt( strIdDiggSubmitType );
202             }
203             catch ( NumberFormatException ne )
204             {
205                 AppLogService.error( ne );
206 
207                 return getManageDiggSubmitType( request );
208             }
209         }
210         else
211         {
212             return getManageDiggSubmitType( request );
213         }
214 
215         diggSubmitType = DiggSubmitTypeHome.findByPrimaryKey( nIdDiggSubmitType, plugin );
216         model.put( MARK_DIGG_SUBMIT_TYPE, diggSubmitType );
217         setPageTitleProperty( PROPERTY_MODIFY_DIGG_SUBMIT_TYPE_TITLE );
218 
219         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_DIGG_SUBMIT_TYPE, locale, model );
220 
221         return getAdminPage( template.getHtml(  ) );
222     }
223 
224     /**
225      * Perform the diggSubmitType modification
226      * @param request The HTTP request
227      * @return The URL to go after performing the action
228      */
229     public String doModifyDiggSubmitType( HttpServletRequest request )
230     {
231         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
232         Plugin plugin = getPlugin(  );
233         DiggSubmitType diggSubmitType;
234         String strIdDiggSubmitType = multipartRequest.getParameter( PARAMETER_ID_DIGG_SUBMIT_TYPE );
235         int nIdDiggSubmitType = -1;
236 
237         if ( ( strIdDiggSubmitType != null ) && !strIdDiggSubmitType.equals( EMPTY_STRING ) )
238         {
239             try
240             {
241                 nIdDiggSubmitType = Integer.parseInt( strIdDiggSubmitType );
242             }
243             catch ( NumberFormatException ne )
244             {
245                 AppLogService.error( ne );
246 
247                 return getHomeUrl( request );
248             }
249         }
250         else
251         {
252             return getHomeUrl( request );
253         }
254 
255         diggSubmitType = DiggSubmitTypeHome.findByPrimaryKey( nIdDiggSubmitType, plugin );
256 
257         String strError = getDiggSubmitTypeData( multipartRequest, diggSubmitType );
258 
259         if ( strError != null )
260         {
261             return strError;
262         }
263 
264         DiggSubmitTypeHome.update( diggSubmitType, getPlugin(  ) );
265 
266         return getJspManageDiggSubmitType( request );
267     }
268 
269     /**
270      * Confirm the diggsubmittype removal
271      * @param request The HTTP request
272      * @return The forward URL
273      */
274     public String removeDiggSubmitType( HttpServletRequest request )
275     {
276         if ( request.getParameter( PARAMETER_ID_DIGG_SUBMIT_TYPE ) == null )
277         {
278             return getHomeUrl( request );
279         }
280 
281         String strIdDiggSubmitType = request.getParameter( PARAMETER_ID_DIGG_SUBMIT_TYPE );
282 
283         UrlItem url = new UrlItem( JSP_DO_REMOVE_DIGG_SUBMIT_TYPE );
284         url.addParameter( PARAMETER_ID_DIGG_SUBMIT_TYPE, strIdDiggSubmitType );
285 
286         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_DIGG_SUBMIT_TYPE, url.getUrl(  ),
287             AdminMessage.TYPE_CONFIRMATION );
288     }
289 
290     /**
291      * Perform the diggSubmitType suppression
292      * @param request The HTTP request
293      * @return The URL to go after performing the action
294      */
295     public String doRemoveDiggSubmitType( HttpServletRequest request )
296     {
297         String strIdDiggSubmitType = request.getParameter( PARAMETER_ID_DIGG_SUBMIT_TYPE );
298         Plugin plugin = getPlugin(  );
299         int nIdDiggSubmitType = DiggUtils.getIntegerParameter( strIdDiggSubmitType );
300 
301         if ( DiggSubmitTypeHome.isAssociateToDigg( nIdDiggSubmitType, plugin ) )
302         {
303             return AdminMessageService.getMessageUrl( request, MESSAGE_DIGG_SUBMIT_TYPE_ASSOCIATE_TO_DIGG,
304                 AdminMessage.TYPE_STOP );
305         }
306 
307         if ( nIdDiggSubmitType != -1 )
308         {
309             DiggSubmitTypeHome.remove( nIdDiggSubmitType, plugin );
310         }
311 
312         return getJspManageDiggSubmitType( request );
313     }
314 
315     /**
316      * Get the request data and if there is no error insert the data in the
317      * diggSubmitType object specified in parameter.
318      * return null if there is no error or else return the error page url
319      * @param multipartRequest the request
320      * @param diggSubmitType the diggSubmitType Object
321      * @return null if there is no error or else return the error page url
322      */
323     private String getDiggSubmitTypeData( MultipartHttpServletRequest multipartRequest, DiggSubmitType diggSubmitType )
324     {
325         String strName = multipartRequest.getParameter( PARAMETER_NAME );
326         String strColor = multipartRequest.getParameter( PARAMETER_COLOR );
327         String strParameterizable = multipartRequest.getParameter( PARAMETER_PARAMETERIZABLE );
328         Boolean bParameterizable = true;
329         String strFieldError = EMPTY_STRING;
330         FileItem imageSource = multipartRequest.getFile( PARAMETER_IMAGE_SOURCE );
331         String strImageName = FileUploadService.getFileNameOnly( imageSource );
332         String strUpdateFile = multipartRequest.getParameter( PARAMETER_UPDATE_FILE );
333 
334         if ( ( strName == null ) || strName.trim(  ).equals( EMPTY_STRING ) )
335         {
336             strFieldError = FIELD_NAME;
337         }
338 
339         else if ( ( strParameterizable == null ) || strParameterizable.trim(  ).equals( EMPTY_STRING ) )
340         {
341             bParameterizable = false;
342         }
343 
344         //Mandatory fields
345         if ( !strFieldError.equals( EMPTY_STRING ) )
346         {
347             Object[] tabRequiredFields = { I18nService.getLocalizedString( strFieldError, getLocale(  ) ) };
348 
349             return AdminMessageService.getMessageUrl( multipartRequest, MESSAGE_MANDATORY_FIELD, tabRequiredFields,
350                 AdminMessage.TYPE_STOP );
351         }
352 
353         if ( ( diggSubmitType.getIdType(  ) == DiggUtils.CONSTANT_ID_NULL ) || ( strUpdateFile != null ) )
354         {
355             ImageResource image = new ImageResource(  );
356             byte[] baImageSource = imageSource.get(  );
357 
358             if ( ( strImageName != null ) && !strImageName.equals( "" ) )
359             {
360                 image.setImage( baImageSource );
361                 image.setMimeType( imageSource.getContentType(  ) );
362             }
363 
364             diggSubmitType.setPictogram( image );
365         }
366 
367         diggSubmitType.setColor( strColor );
368         diggSubmitType.setName( strName );
369         diggSubmitType.setParameterizableInFO( bParameterizable );
370 
371         return null;
372     }
373 
374     /**
375      * return the url of manage export format
376      * @param request the request
377      * @return the url of manage export format
378      */
379     private String getJspManageDiggSubmitType( HttpServletRequest request )
380     {
381         return AppPathService.getBaseUrl( request ) + JSP_MANAGE_DIGG_SUBMIT_TYPE;
382     }
383 }