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.tagcloud.web;
35  
36  import fr.paris.lutece.plugins.tagcloud.business.Tag;
37  import fr.paris.lutece.plugins.tagcloud.business.TagCloud;
38  import fr.paris.lutece.plugins.tagcloud.business.TagHome;
39  import fr.paris.lutece.portal.service.message.AdminMessage;
40  import fr.paris.lutece.portal.service.message.AdminMessageService;
41  import fr.paris.lutece.portal.service.template.AppTemplateService;
42  import fr.paris.lutece.portal.service.util.AppPropertiesService;
43  import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
44  import fr.paris.lutece.portal.web.constants.Messages;
45  import fr.paris.lutece.portal.web.util.LocalizedPaginator;
46  import fr.paris.lutece.util.ReferenceList;
47  import fr.paris.lutece.util.html.HtmlTemplate;
48  import fr.paris.lutece.util.html.Paginator;
49  import fr.paris.lutece.util.url.UrlItem;
50  
51  import java.util.HashMap;
52  import java.util.List;
53  
54  import javax.servlet.http.HttpServletRequest;
55  
56  
57  /**
58   * This class provides the user interface to manage tagcloud features ( manage, create, modify, remove )
59   */
60  public class TagCloudJspBean extends PluginAdminPageJspBean
61  {
62      ////////////////////////////////////////////////////////////////////////////
63      // Constants
64  
65      // Right
66      public static final String RIGHT_MANAGE_TAGCLOUD = "TAGCLOUD_MANAGEMENT";
67  
68      // parameters
69  
70      // templates
71      private static final String TEMPLATE_MANAGE_TAGCLOUD = "/admin/plugins/tagcloud/manage_tagcloud.html";
72      private static final String TEMPLATE_MODIFY_TAGCLOUD = "/admin/plugins/tagcloud/modify_tagcloud.html";
73      private static final String TEMPLATE_CREATE_TAGCLOUD = "/admin/plugins/tagcloud/create_tagcloud.html";
74      private static final String TEMPLATE_CREATE_TAG = "/admin/plugins/tagcloud/create_tag.html";
75      private static final String TEMPLATE_MODIFY_TAG = "/admin/plugins/tagcloud/modify_tag.html";
76  
77      // properties for page titles
78      private static final String PROPERTY_PAGE_TITLE_MANAGE_TAGCLOUD = "tagcloud.manage_tagcloud.pageTitle";
79      private static final String PROPERTY_PAGE_TITLE_MODIFY_TAGCLOUD = "tagcloud.modify_tagcloud.pageTitle";
80      private static final String PROPERTY_PAGE_TITLE_CREATE_TAGCLOUD = "tagcloud.create_tagcloud.pageTitle";
81      private static final String PROPERTY_PAGE_TITLE_CREATE_TAG = "tagcloud.create_tag.pageTitle";
82      private static final String PROPERTY_PAGE_TITLE_MODIFY_TAG = "tagcloud.modify_tag.pageTitle";
83      private static final String PROPERTY_PLUGIN_NAME = "tagcloud";
84  
85      // Markers
86      private static final String JSP_DO_REMOVE_TAGCLOUD = "jsp/admin/plugins/tagcloud/DoRemoveTagCloud.jsp";
87      private static final String JSP_DO_REMOVE_TAG = "jsp/admin/plugins/tagcloud/DoRemoveTag.jsp";
88      private static final String MARK_TAG_CLOUD_LIST = "tagcloud_list";
89      private static final String MARK_TAGCLOUD_ID = "tagcloud_id";
90      private static final String MARK_TAGCLOUD = "tagcloud";
91      private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";
92      private static final String MARK_PAGINATOR = "paginator";
93      private static final String MARK_LIST_WEIGHT = "list_weight";
94      private static final String JSP_MODIFY_TAG_CLOUD = "jsp/admin/plugins/tagcloud/ModifyTagCloud.jsp";
95      private static final String JSP_MODIFY_HOME = "ModifyTagCloud.jsp";
96      private static final String MARK_TAG_LIST = "tag_list";
97      private static final String MARK_TAG = "tagObject";
98      private static final String PROPERTY_TAGS_PER_PAGE = "tagcloud.eventsPerPage";
99      private static final String PARAMETER_PLUGIN_NAME = "plugin_name";
100     private static final String PARAMETER_TAG_CLOUD_NAME = "tagcloud_name";
101     private static final String PARAMETER_TAG_CLOUD_ID = "tagcloud_id";
102     private static final String PARAMETER_TAG_NAME = "tag_name";
103     private static final String PARAMETER_TAG_URL = "tag_url";
104     private static final String PARAMETER_TAG_WEIGHT = "tag_weight";
105     private static final String PARAMETER_TAG_ID = "tag_id";
106 
107     // Message keys
108     private static final String MESSAGE_CONFIRM_REMOVE_TAGCLOUD = "tagcloud.message.confirmRemoveTagCloud";
109     private static final String MESSAGE_CONFIRM_REMOVE_TAG = "tagcloud.message.confirmRemoveTag";
110     private String _strCurrentPageIndex;
111     private int _nItemsPerPage;
112     private int _nDefaultItemsPerPage;
113 
114     // Jsp Definition
115 
116     // Messages
117 
118     /**
119      * This class is used to manage tag clouds
120      */
121     public TagCloudJspBean(  )
122     {
123         _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_TAGS_PER_PAGE, 5 );
124     }
125 
126     /**
127      * Returns the list of tagclouds
128      *
129      * @param request The Http request
130      * @return the tagclouds list
131      */
132     public String getManageTagClouds( HttpServletRequest request )
133     {
134         setPageTitleProperty( PROPERTY_PAGE_TITLE_MANAGE_TAGCLOUD );
135         _strCurrentPageIndex = Paginator.getPageIndex( request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
136         _nItemsPerPage = Paginator.getItemsPerPage( request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage,
137                 _nDefaultItemsPerPage );
138 
139         HashMap model = new HashMap(  );
140         List listClouds = (List) TagHome.getTagClouds( getPlugin(  ) );
141         LocalizedPaginator paginator = new LocalizedPaginator( listClouds, _nItemsPerPage, getHomeUrl( request ),
142                 Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex , getLocale() );
143 
144         model.put( MARK_TAG_CLOUD_LIST, listClouds );
145         model.put( MARK_PAGINATOR, paginator );
146         model.put( MARK_NB_ITEMS_PER_PAGE, "" + _nItemsPerPage );
147 
148         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_TAGCLOUD, getLocale(  ), model );
149 
150         return getAdminPage( template.getHtml(  ) );
151     }
152 
153     /**
154      * Returns the form for tag cloud modification
155      *
156      * @param request The Http request
157      * @return Html form
158      */
159     public String getModifyTagCloud( HttpServletRequest request )
160     {
161         setPageTitleProperty( PROPERTY_PAGE_TITLE_MODIFY_TAGCLOUD );
162 
163         int nCloudId = Integer.parseInt( request.getParameter( PARAMETER_TAG_CLOUD_ID ) );
164         TagCloud tagCloud = TagHome.findCloudById( nCloudId, getPlugin(  ) );
165         HashMap model = new HashMap(  );
166         List listTags = TagHome.findTagsByCloud( nCloudId, getPlugin(  ) );
167 
168         //paginator parameters
169         _strCurrentPageIndex = Paginator.getPageIndex( request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
170         _nItemsPerPage = Paginator.getItemsPerPage( request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage,
171                 _nDefaultItemsPerPage );
172 
173         UrlItem url = new UrlItem( JSP_MODIFY_TAG_CLOUD );
174         url.addParameter( PARAMETER_PLUGIN_NAME, PROPERTY_PLUGIN_NAME );
175         url.addParameter( PARAMETER_TAG_CLOUD_ID, nCloudId );
176 
177         LocalizedPaginator paginator = new LocalizedPaginator( listTags, _nItemsPerPage, url.getUrl(  ), Paginator.PARAMETER_PAGE_INDEX,
178                 _strCurrentPageIndex , getLocale() );
179         model.put( MARK_TAGCLOUD, tagCloud );
180         model.put( MARK_PAGINATOR, paginator );
181         model.put( MARK_NB_ITEMS_PER_PAGE, "" + _nItemsPerPage );
182         model.put( MARK_TAG_LIST, paginator.getPageItems(  ) );
183 
184         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_TAGCLOUD, getLocale(  ), model );
185 
186         return getAdminPage( template.getHtml(  ) );
187     }
188 
189     /**
190      * Returns the tagcloud creation form
191      *
192      * @param request The Http request
193      * @return Html creation form
194      */
195     public String getCreateTagCloud( HttpServletRequest request )
196     {
197         setPageTitleProperty( PROPERTY_PAGE_TITLE_CREATE_TAGCLOUD );
198 
199         HashMap model = new HashMap(  );
200 
201         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_TAGCLOUD, getLocale(  ), model );
202 
203         return getAdminPage( template.getHtml(  ) );
204     }
205 
206     /**
207      * Process Tagcloud creation
208      *
209      * @param request The Http request
210      * @return URL
211      */
212     public String doCreateTagCloud( HttpServletRequest request )
213     {
214         String strName = request.getParameter( PARAMETER_TAG_CLOUD_NAME );
215 
216         // Mandatory field
217         if ( strName.equals( "" ) )
218         {
219             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
220         }
221 
222         TagCloudgcloud/business/TagCloud.html#TagCloud">TagCloud tagcloud = new TagCloud(  );
223         tagcloud.setTagCloudDescription( strName );
224         TagHome.create( tagcloud, getPlugin(  ) );
225 
226         return getHomeUrl( request );
227     }
228 
229     /**
230      * Process the tagcloud modifications
231      *
232      * @param request The Http request
233      * @return Html form
234      */
235     public String doModifyTagCloud( HttpServletRequest request )
236     {
237         String strName = request.getParameter( PARAMETER_TAG_CLOUD_NAME );
238 
239         // Mandatory field
240         int nCloudId = Integer.parseInt( request.getParameter( PARAMETER_TAG_CLOUD_ID ) );
241 
242         if ( strName.equals( "" ) )
243         {
244             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
245         }
246 
247         TagCloud tagcloud = TagHome.findCloudById( nCloudId, getPlugin(  ) );
248         tagcloud.setTagCloudDescription( strName );
249         TagHome.update( tagcloud, getPlugin(  ) );
250 
251         return getHomeUrl( request );
252     }
253 
254     /**
255      * Returns the confirmation to remove the tagcloud
256      *
257      * @param request The Http request
258      * @return the confirmation page
259      */
260     public String getConfirmRemoveTagCloud( HttpServletRequest request )
261     {
262         UrlItem url = new UrlItem( JSP_DO_REMOVE_TAGCLOUD );
263         url.addParameter( PARAMETER_TAG_CLOUD_ID, Integer.parseInt( request.getParameter( PARAMETER_TAG_CLOUD_ID ) ) );
264 
265         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_TAGCLOUD, url.getUrl(  ),
266             AdminMessage.TYPE_CONFIRMATION );
267     }
268 
269     /**
270      * Returns the confirmation to remove the tag
271      *
272      * @param request The Http request
273      * @return the confirmation page
274      */
275     public String getConfirmRemoveTag( HttpServletRequest request )
276     {
277         UrlItem url = new UrlItem( JSP_DO_REMOVE_TAG );
278         url.addParameter( PARAMETER_TAG_CLOUD_ID, Integer.parseInt( request.getParameter( PARAMETER_TAG_CLOUD_ID ) ) );
279         url.addParameter( PARAMETER_TAG_ID, Integer.parseInt( request.getParameter( PARAMETER_TAG_ID ) ) );
280 
281         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_TAG, url.getUrl(  ),
282             AdminMessage.TYPE_CONFIRMATION );
283     }
284 
285     /**
286      * Remove a tagcloud
287      *
288      * @param request The Http request
289      * @return Html form
290      */
291     public String doRemoveTagCloud( HttpServletRequest request )
292     {
293         int nCloudId = Integer.parseInt( request.getParameter( PARAMETER_TAG_CLOUD_ID ) );
294         List<Tag> listTags = TagHome.findTagsByCloud( nCloudId, getPlugin(  ) );
295 
296         for ( Tag tag : listTags )
297         {
298             TagHome.removeTag( tag.getIdTag(  ), tag.getIdTagCloud(  ), getPlugin(  ) );
299         }
300 
301         TagHome.removeCloud( nCloudId, getPlugin(  ) );
302 
303         // Go to the parent page
304         return getHomeUrl( request );
305     }
306 
307     /**
308      * Remove a tag
309      *
310      * @param request The Http request
311      * @return Html form
312      */
313     public String doRemoveTag( HttpServletRequest request )
314     {
315         int nCloudId = Integer.parseInt( request.getParameter( PARAMETER_TAG_CLOUD_ID ) );
316         int nTagId = Integer.parseInt( request.getParameter( PARAMETER_TAG_ID ) );
317 
318         TagHome.removeTag( nTagId, nCloudId, getPlugin(  ) );
319 
320         UrlItem url = new UrlItem( JSP_MODIFY_HOME );
321         url.addParameter( PARAMETER_TAG_CLOUD_ID, nCloudId );
322 
323         return url.getUrl(  );
324     }
325 
326     /**
327      * Returns the Tag creation form
328      *
329      * @param request The Http request
330      * @return Html creation form
331      */
332     public String getCreateTag( HttpServletRequest request )
333     {
334         setPageTitleProperty( PROPERTY_PAGE_TITLE_CREATE_TAG );
335 
336         HashMap model = new HashMap(  );
337         model.put( MARK_TAGCLOUD_ID, Integer.parseInt( request.getParameter( PARAMETER_TAG_CLOUD_ID ) ) );
338         model.put( MARK_LIST_WEIGHT, getListWeight(  ) );
339 
340         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_TAG, getLocale(  ), model );
341 
342         return getAdminPage( template.getHtml(  ) );
343     }
344 
345     /**
346      * Process Tag creation
347      *
348      * @param request The Http request
349      * @return URL
350      */
351     public String doCreateTag( HttpServletRequest request )
352     {
353         int nCloudId = Integer.parseInt( request.getParameter( PARAMETER_TAG_CLOUD_ID ) );
354         String strTagName = request.getParameter( PARAMETER_TAG_NAME );
355         String strTagUrl = request.getParameter( PARAMETER_TAG_URL );
356         String strTagWeight = request.getParameter( PARAMETER_TAG_WEIGHT );
357 
358         // Mandatory field
359         if ( ( strTagName == null ) || strTagName.equals( "" ) )
360         {
361             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
362         }
363 
364         Tagplugins/tagcloud/business/Tag.html#Tag">Tag tag = new Tag(  );
365         tag.setIdTagCloud( nCloudId );
366         tag.setTagName( strTagName );
367         tag.setTagUrl( strTagUrl.replaceAll( "&", "&amp;" ) );
368         tag.setTagWeight( strTagWeight );
369         TagHome.create( tag, getPlugin(  ) );
370 
371         UrlItem url = new UrlItem( JSP_MODIFY_HOME );
372         url.addParameter( PARAMETER_TAG_CLOUD_ID, nCloudId );
373 
374         return url.getUrl(  );
375     }
376 
377     /**
378      * Process the Tag modifications
379      *
380      * @param request The Http request
381      * @return Html form
382      */
383     public String doModifyTag( HttpServletRequest request )
384     {
385         int nCloudId = Integer.parseInt( request.getParameter( PARAMETER_TAG_CLOUD_ID ) );
386         int nTagId = Integer.parseInt( request.getParameter( PARAMETER_TAG_ID ) );
387         String strTagName = request.getParameter( PARAMETER_TAG_NAME );
388 
389         // Mandatory field
390         if ( ( strTagName == null ) || strTagName.equals( "" ) )
391         {
392             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
393         }
394 
395         Tag tag = TagHome.findByPrimaryKey( nCloudId, nTagId, getPlugin(  ) );
396 
397         String strTagUrl = request.getParameter( PARAMETER_TAG_URL );
398         String strTagWeight = request.getParameter( PARAMETER_TAG_WEIGHT );
399         tag.setTagName( strTagName );
400         tag.setTagUrl( strTagUrl.replaceAll( "&", "&amp;" ) );
401         tag.setTagWeight( strTagWeight );
402         TagHome.update( tag, getPlugin(  ) );
403 
404         UrlItem url = new UrlItem( JSP_MODIFY_HOME );
405         url.addParameter( PARAMETER_TAG_CLOUD_ID, nCloudId );
406 
407         return url.getUrl(  );
408     }
409 
410     /**
411      * Returns the form for tag modification
412      *
413      * @param request The Http request
414      * @return Html form
415      */
416     public String getModifyTag( HttpServletRequest request )
417     {
418         setPageTitleProperty( PROPERTY_PAGE_TITLE_MODIFY_TAG );
419 
420         int nCloudId = Integer.parseInt( request.getParameter( PARAMETER_TAG_CLOUD_ID ) );
421         int nTagId = Integer.parseInt( request.getParameter( PARAMETER_TAG_ID ) );
422         Tag tag = TagHome.findByPrimaryKey( nCloudId, nTagId, getPlugin(  ) );
423 
424         HashMap model = new HashMap(  );
425         model.put( MARK_TAG, tag );
426         model.put( MARK_LIST_WEIGHT, getListWeight(  ) );
427 
428         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_TAG, getLocale(  ), model );
429 
430         return getAdminPage( template.getHtml(  ) );
431     }
432 
433     /**
434      * Creates a list from 1 to 10 corresponding to weight of tags
435      * @return a reference list
436      */
437     private ReferenceList getListWeight(  )
438     {
439         ReferenceList listWeight = new ReferenceList(  );
440 
441         for ( int i = 1; i < 11; i++ )
442         {
443             listWeight.addItem( "" + i, "" + i );
444         }
445 
446         return listWeight;
447     }
448 }