View Javadoc
1   /*
2    * Copyright (c) 2002-2017, 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.insertajax.web;
35  
36  import fr.paris.lutece.plugins.insertajax.business.InsertAjax;
37  import fr.paris.lutece.plugins.insertajax.business.InsertAjaxHome;
38  import fr.paris.lutece.portal.business.role.RoleHome;
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.AppPathService;
43  import fr.paris.lutece.portal.service.util.AppPropertiesService;
44  import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService;
45  import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
46  import fr.paris.lutece.portal.web.constants.Messages;
47  import fr.paris.lutece.util.ReferenceList;
48  import fr.paris.lutece.util.html.HtmlTemplate;
49  import fr.paris.lutece.util.html.Paginator;
50  import fr.paris.lutece.util.url.UrlItem;
51  
52  import java.util.Collection;
53  import java.util.HashMap;
54  import java.util.List;
55  import java.util.Map;
56  
57  import javax.servlet.http.HttpServletRequest;
58  
59  
60  /**
61   * adminFeature for insertAjax plugin
62   */
63  public class InsertAjaxJspBean extends PluginAdminPageJspBean
64  {
65      // Right
66      public static final String RIGHT_MANAGE = "INSERTAJAX_MANAGEMENT";
67  
68      // properties for page titles
69      private static final String PROPERTY_PAGE_TITLE_INSERTAJAX_LIST = "ajax.manage_insertajax.pageTitle";
70      private static final String PROPERTY_PAGE_TITLE_MODIFY = "insertajax.modify_insertajax.pageTitle";
71      private static final String PROPERTY_PAGE_TITLE_CREATE = "insertajax.create_insertajax.pageTitle";
72  
73      // Properties
74      private static final String PROPERTY_DEFAULT_INSERTAJAX_LIST_PER_PAGE = "insertajax.insertAjaxList.itemsPerPage";
75  
76      // Messages
77      private static final String MESSAGE_CONFIRM_REMOVE_INSERTAJAX = "insertajax.message.confirmRemoveInsertAjax";
78  
79      // Markers
80      private static final String MARK_LIST_INSERTAJAX_LIST = "insertajax_list";
81      private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";
82      private static final String MARK_WORKGROUPS_LIST = "workgroups_list";
83      private static final String MARK_WEBAPP_URL = "webapp_url";
84      private static final String MARK_LOCALE = "locale";
85      private static final String MARK_HTML_CONTENT = "html_content";
86      private static final String MARK_INSERTAJAX = "insertajax";
87      private static final String MARK_ROLES_LIST = "roles_list";
88      private static final String MARK_PAGINATOR = "paginator";
89  
90      // parameters
91      private static final String PARAMETER_INSERTAJAX_ID = "id";
92      private static final String PARAMETER_INSERTAJAX_NAME = "name";
93      private static final String PARAMETER_INSERTAJAX_HTML = "html_content";
94      private static final String PARAMETER_INSERTAJAX_SQL = "sql";
95      private static final String PARAMETER_INSERTAJAX_WORKGROUP = "workgroup";
96      private static final String PARAMETER_INSERTAJAX_ROLE = "role";
97      private static final String PARAMETER_ID_INSERTAJAX_LIST = "insertajax_list_id";
98      private static final String PARAMETER_PAGE_INDEX = "page_index";
99  
100     // templates
101     private static final String TEMPLATE_MANAGE_INSERTAJAX = "/admin/plugins/insertajax/manage.html";
102     private static final String TEMPLATE_CREATE_INSERTAJAX = "/admin/plugins/insertajax/create.html";
103     private static final String TEMPLATE_MODIFY_INSERTAJAX = "/admin/plugins/insertajax/modify.html";
104     private static final String TEMPLATE_JAVASCRIPT = "admin/plugins/insertajax/insertajax_javascript.html";
105 
106     // Jsp Definition
107     private static final String JSP_DO_REMOVE_INSERTAJAX = "jsp/admin/plugins/insertajax/DoRemove.jsp";
108     private static final String JSP_REDIRECT_TO_MANAGE_INSERTAJAX = "Manage.jsp";
109 
110     //Variables
111     private int _nDefaultItemsPerPage;
112     private String _strCurrentPageIndex;
113     private int _nItemsPerPage;
114 
115     /**
116      * @param request The HttpRequest
117      * @return template of lists management
118      */
119     public String getManage( HttpServletRequest request )
120     {
121         setPageTitleProperty( PROPERTY_PAGE_TITLE_INSERTAJAX_LIST );
122 
123         _strCurrentPageIndex = Paginator.getPageIndex( request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
124         _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_DEFAULT_INSERTAJAX_LIST_PER_PAGE, 50 );
125         _nItemsPerPage = Paginator.getItemsPerPage( request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage,
126                 _nDefaultItemsPerPage );
127 
128         Collection<InsertAjax> listInsertAjaxList = InsertAjaxHome.findAll( getPlugin(  ) );
129         listInsertAjaxList = AdminWorkgroupService.getAuthorizedCollection( listInsertAjaxList, getUser(  ) );
130 
131         Paginator paginator = new Paginator( (List<InsertAjax>) listInsertAjaxList, _nItemsPerPage,
132                 getHomeUrl( request ), PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
133 
134         Map<String, Object> model = new HashMap<String, Object>(  );
135         model.put( MARK_NB_ITEMS_PER_PAGE, "" + _nItemsPerPage );
136         model.put( MARK_PAGINATOR, paginator );
137         model.put( MARK_LIST_INSERTAJAX_LIST, paginator.getPageItems(  ) );
138 
139         HtmlTemplate templateList = AppTemplateService.getTemplate( TEMPLATE_MANAGE_INSERTAJAX, getLocale(  ), model );
140 
141         return getAdminPage( templateList.getHtml(  ) );
142     }
143 
144     /**
145       * Returns the form to create a insertajax
146       *
147       * @param request The Http request
148       * @return the html code of the insertajax form
149       */
150     public String getCreate( HttpServletRequest request )
151     {
152         setPageTitleProperty( PROPERTY_PAGE_TITLE_CREATE );
153 
154         Map<String, Object> model = new HashMap<String, Object>(  );
155         ReferenceList workgroupsList = AdminWorkgroupService.getUserWorkgroups( getUser(  ), getLocale(  ) );
156         model.put( MARK_WORKGROUPS_LIST, workgroupsList );
157         model.put( MARK_WEBAPP_URL, AppPathService.getBaseUrl( request ) );
158         model.put( MARK_LOCALE, getLocale(  ) );
159 
160         HtmlTemplate defaultHtml = AppTemplateService.getTemplate( TEMPLATE_JAVASCRIPT );
161         model.put( MARK_HTML_CONTENT, defaultHtml.getHtml(  ) );
162         model.put( MARK_ROLES_LIST, RoleHome.getRolesList(  ) );
163 
164         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_INSERTAJAX, getLocale(  ), model );
165 
166         return getAdminPage( template.getHtml(  ) );
167     }
168 
169     /**
170      * Process the data capture form of a new insertajax
171      *
172      * @param request The Http Request
173      * @return The Jsp URL of the process result
174      */
175     public String doCreate( HttpServletRequest request )
176     {
177         String strName = request.getParameter( PARAMETER_INSERTAJAX_NAME );
178         String strHtml = request.getParameter( PARAMETER_INSERTAJAX_HTML );
179         String strSql = request.getParameter( PARAMETER_INSERTAJAX_SQL );
180         String strWorkgroup = request.getParameter( PARAMETER_INSERTAJAX_WORKGROUP );
181         String strRole = request.getParameter( PARAMETER_INSERTAJAX_ROLE );
182 
183         // Mandatory fields
184         if ( ( strName == null ) || strName.trim(  ).equals( "" ) )
185         {
186             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
187         }
188 
189         InsertAjax insertajax = new InsertAjax(  );
190 
191         insertajax.setName( strName );
192         insertajax.setHtml( strHtml );
193         insertajax.setSql( strSql );
194         insertajax.setWorkgroup( strWorkgroup );
195         insertajax.setRole( strRole );
196 
197         InsertAjaxHome.create( insertajax, getPlugin(  ) );
198 
199         // if the operation occurred well, redirects towards the list of the InsertAjaxs
200         return JSP_REDIRECT_TO_MANAGE_INSERTAJAX;
201     }
202 
203     /**
204      * Process the data capture form of a new insertajax from copy of other
205      *
206      * @param request The Http Request
207      * @return The Jsp URL of the process result
208      */
209     public String doDuplicate( HttpServletRequest request )
210     {
211         int nId = Integer.parseInt( request.getParameter( PARAMETER_INSERTAJAX_ID ) );
212 
213         InsertAjax insertajax = InsertAjaxHome.findByPrimaryKey( nId, getPlugin(  ) );
214 
215         InsertAjax duplicateInsertAjax = new InsertAjax(  );
216         duplicateInsertAjax.setName( insertajax.getName(  ) );
217         duplicateInsertAjax.setHtml( insertajax.getHtml(  ) );
218         duplicateInsertAjax.setSql( insertajax.getSql(  ) );
219         duplicateInsertAjax.setWorkgroup( insertajax.getWorkgroup(  ) );
220         duplicateInsertAjax.setRole( insertajax.getRole(  ) );
221 
222         InsertAjaxHome.create( duplicateInsertAjax, getPlugin(  ) );
223 
224         // if the operation occurred well, redirects towards the list of the InsertAjaxs
225         return JSP_REDIRECT_TO_MANAGE_INSERTAJAX;
226     }
227 
228     /**
229      * Returns the form to update info about a insertPage
230      *
231      * @param request The Http request
232      * @return The HTML form to update info
233      */
234     public String getModify( HttpServletRequest request )
235     {
236         setPageTitleProperty( PROPERTY_PAGE_TITLE_MODIFY );
237 
238         int nId = Integer.parseInt( request.getParameter( PARAMETER_INSERTAJAX_ID ) );
239         InsertAjax insertPage = InsertAjaxHome.findByPrimaryKey( nId, getPlugin(  ) );
240 
241         Map<String, Object> model = new HashMap<String, Object>(  );
242         ReferenceList workgroupsList = AdminWorkgroupService.getUserWorkgroups( getUser(  ), getLocale(  ) );
243         model.put( MARK_WORKGROUPS_LIST, workgroupsList );
244         model.put( MARK_WEBAPP_URL, AppPathService.getBaseUrl( request ) );
245         model.put( MARK_LOCALE, getLocale(  ) );
246         model.put( MARK_INSERTAJAX, insertPage );
247         model.put( MARK_ROLES_LIST, RoleHome.getRolesList(  ) );
248 
249         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_INSERTAJAX, getLocale(  ), model );
250 
251         return getAdminPage( template.getHtml(  ) );
252     }
253 
254     /**
255      * Process the change form of a insertPage
256      *
257      * @param request The Http request
258      * @return The Jsp URL of the process result
259      */
260     public String doModify( HttpServletRequest request )
261     {
262         // Mandatory fields
263         if ( request.getParameter( PARAMETER_INSERTAJAX_NAME ).equals( "" ) ||
264                 request.getParameter( PARAMETER_INSERTAJAX_HTML ).equals( "" ) )
265         {
266             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
267         }
268 
269         int nId = Integer.parseInt( request.getParameter( PARAMETER_INSERTAJAX_ID ) );
270 
271         InsertAjax insertPage = InsertAjaxHome.findByPrimaryKey( nId, getPlugin(  ) );
272         insertPage.setName( request.getParameter( PARAMETER_INSERTAJAX_NAME ) );
273         insertPage.setHtml( request.getParameter( PARAMETER_INSERTAJAX_HTML ) );
274         insertPage.setSql( request.getParameter( PARAMETER_INSERTAJAX_SQL ) );
275         insertPage.setWorkgroup( request.getParameter( PARAMETER_INSERTAJAX_WORKGROUP ) );
276         insertPage.setRole( request.getParameter( PARAMETER_INSERTAJAX_ROLE ) );
277 
278         InsertAjaxHome.update( insertPage, getPlugin(  ) );
279 
280         // if the operation occurred well, redirects towards the list of the InsertAjaxs
281         return JSP_REDIRECT_TO_MANAGE_INSERTAJAX;
282     }
283 
284     /**
285      * Manages the removal form of a insertPage whose identifier is in the http request
286      *
287      * @param request The Http request
288      * @return the html code to confirm
289      */
290     public String getConfirmRemove( HttpServletRequest request )
291     {
292         int nIdInsertAjax = Integer.parseInt( request.getParameter( PARAMETER_INSERTAJAX_ID ) );
293 
294         UrlItem url = new UrlItem( JSP_DO_REMOVE_INSERTAJAX );
295         url.addParameter( PARAMETER_INSERTAJAX_ID, nIdInsertAjax );
296         url.addParameter( PARAMETER_ID_INSERTAJAX_LIST, request.getParameter( PARAMETER_ID_INSERTAJAX_LIST ) );
297 
298         Object[] args = { request.getParameter( PARAMETER_INSERTAJAX_NAME ) };
299 
300         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_INSERTAJAX, args, url.getUrl(  ),
301             AdminMessage.TYPE_CONFIRMATION );
302     }
303 
304     /**
305      * Treats the removal form of a insertPage
306      *
307      * @param request The Http request
308      * @return the jsp URL to display the form to manage insertPages
309      */
310     public String doRemove( HttpServletRequest request )
311     {
312         int nIdInsertAjax = Integer.parseInt( request.getParameter( PARAMETER_INSERTAJAX_ID ) );
313 
314         InsertAjax insertPage = InsertAjaxHome.findByPrimaryKey( nIdInsertAjax, getPlugin(  ) );
315         InsertAjaxHome.remove( insertPage, getPlugin(  ) );
316 
317         // if the operation occurred well, redirects towards the list of the InsertAjaxs
318         return JSP_REDIRECT_TO_MANAGE_INSERTAJAX;
319     }
320 }