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.updater.web;
35  
36  import fr.paris.lutece.plugins.updater.business.resource.FileSystemResource;
37  import fr.paris.lutece.plugins.updater.service.IUpdateService;
38  import fr.paris.lutece.plugins.updater.service.NewInfos;
39  import fr.paris.lutece.plugins.updater.service.PluginManagerService;
40  import fr.paris.lutece.plugins.updater.service.UpdateInfos;
41  import fr.paris.lutece.plugins.updater.service.UpdaterDownloadException;
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.plugin.PluginService;
46  import fr.paris.lutece.portal.service.spring.SpringContextService;
47  import fr.paris.lutece.portal.service.template.AppTemplateService;
48  import fr.paris.lutece.portal.service.util.AppPathService;
49  import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
50  import fr.paris.lutece.util.html.HtmlTemplate;
51  import fr.paris.lutece.util.url.UrlItem;
52  
53  import java.util.Collection;
54  import java.util.HashMap;
55  import java.util.List;
56  
57  import javax.servlet.http.HttpServletRequest;
58  
59  
60  /**
61   * Updater JSP Bean
62   */
63  public class UpdaterJspBean extends PluginAdminPageJspBean
64  {
65      public static final String RIGHT_UPDATES_MANAGEMENT = "UPDATER_MANAGEMENT";
66  
67      // Templates
68      private static final String TEMPLATE_MANAGE_UPDATES = "admin/plugins/updater/manage_updates.html";
69      private static final String TEMPLATE_MANAGE_NEW = "admin/plugins/updater/manage_new.html";
70      private static final String TEMPLATE_MANAGE_INSTALLED = "admin/plugins/updater/manage_installed.html";
71  
72      // Bookmarks
73      private static final String MARK_PLUGINS_LIST = "plugins_list";
74  
75      // Parameters
76      private static final String PARAMETER_PLUGIN_NAME = "plugin_name";
77      private static final String PARAMETER_VERSION = "version";
78      private static final String PARAMETER_VERSION_FROM = "version_from";
79  
80      // URL
81      private static final String JSP_URL_BACKUP_PLUGIN = "jsp/admin/plugins/updater/DoBackupPlugin.jsp";
82      private static final String JSP_URL_RESTORE_PLUGIN = "jsp/admin/plugins/updater/DoRestorePlugin.jsp";
83      private static final String JSP_URL_REMOVE_PLUGIN = "jsp/admin/plugins/updater/DoRemovePlugin.jsp";
84      private static final String JSP_URL_DEPLOY_PLUGIN = "jsp/admin/plugins/updater/DoDeployPlugin.jsp";
85      private static final String JSP_URL_CANCEL_INSTALL = "jsp/admin/plugins/updater/DoCancelInstall.jsp";
86      private static final String JSP_URL_MANAGE_UPDATES = "jsp/admin/plugins/updater/ManageUpdates.jsp";
87      private static final String JSP_URL_MANAGE_NEW = "jsp/admin/plugins/updater/ManageNew.jsp";
88      private static final String URL_MANAGE_UPDATES = "ManageUpdates.jsp";
89      private static final String URL_MANAGE_NEW = "ManageNew.jsp";
90      private static final String URL_MANAGE_INSTALLED = "ManageInstalled.jsp";
91  
92      // Messages
93      private static final String MESSAGE_CONFIRM_BACKUP_PLUGIN = "updater.message.confirmBackup";
94      private static final String MESSAGE_CONFIRM_RESTORE_PLUGIN = "updater.message.confirmRestore";
95      private static final String MESSAGE_CONFIRM_REMOVE_PLUGIN = "updater.message.confirmRemove";
96      private static final String MESSAGE_CONFIRM_DEPLOY_PLUGIN = "updater.message.confirmDeploy";
97      private static final String MESSAGE_CONFIRM_CANCEL_INSTALL = "updater.message.confirmCancelInstall";
98      private static final String MESSAGE_DOWNLOAD_ERROR = "updater.message.downloadError";
99      private static final String PLUGIN_NAME = "updater";
100     private static final String BEAN_UPDATE_SERVICE = "updater.updateService";
101     private static final String PROPERTY_PAGE_TITLE_MANAGE_UPDATES = "updater.pageTitle.manageUpdates";
102     private static final String PROPERTY_PAGE_TITLE_MANAGE_NEW = "updater.pageTitle.manageNew";
103     private static final String PROPERTY_PAGE_TITLE_MANAGE_INSTALLED = "updater.pageTitle.manageInstalled";
104     private static IUpdateService _updateService = (IUpdateService) SpringContextService.getPluginBean( PLUGIN_NAME,
105             BEAN_UPDATE_SERVICE );
106     private String _strManageUrl;
107 
108     /**
109      * Provides the manage updates page
110      * @param request The HTTP request
111      * @return The page
112      */
113     public String getManageUpdates( HttpServletRequest request )
114     {
115         setManageUrl( URL_MANAGE_UPDATES );
116         setPageTitleProperty( PROPERTY_PAGE_TITLE_MANAGE_UPDATES );
117 
118         // Initialize PluginManagerService Webapp Path
119         PluginManagerService.getInstance(  ).setWebAppPath( AppPathService.getWebAppPath(  ) );
120 
121         Collection<Plugin> listPlugins = PluginService.getPluginList(  );
122 
123         List<UpdateInfos> listUpdates = _updateService.getUpdateInfos( listPlugins );
124 
125         HashMap model = new HashMap(  );
126         model.put( MARK_PLUGINS_LIST, listUpdates );
127 
128         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_UPDATES, getLocale(  ), model );
129 
130         return getAdminPage( template.getHtml(  ) );
131     }
132 
133     /**
134      * Provides the manage new plugins page
135      * @param request The HTTP request
136      * @return The page
137      */
138     public String getManageNew( HttpServletRequest request )
139     {
140         setManageUrl( URL_MANAGE_NEW );
141         setPageTitleProperty( PROPERTY_PAGE_TITLE_MANAGE_NEW );
142 
143         // Initialize PluginManagerService Webapp Path
144         PluginManagerService.getInstance(  ).setWebAppPath( AppPathService.getWebAppPath(  ) );
145 
146         Collection<Plugin> listPlugins = PluginService.getPluginList(  );
147 
148         List<NewInfos> listNewPlugins = _updateService.getNewPluginsInfos( listPlugins );
149 
150         HashMap model = new HashMap(  );
151         model.put( MARK_PLUGINS_LIST, listNewPlugins );
152 
153         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_NEW, getLocale(  ), model );
154 
155         return getAdminPage( template.getHtml(  ) );
156     }
157 
158     /**
159      * Provides the manage installed plugins page
160      * @param request The HTTP request
161      * @return The page
162      */
163     public String getManageInstalled( HttpServletRequest request )
164     {
165         setManageUrl( URL_MANAGE_INSTALLED );
166         setPageTitleProperty( PROPERTY_PAGE_TITLE_MANAGE_INSTALLED );
167 
168         // Initialize PluginManagerService Webapp Path
169         PluginManagerService.getInstance(  ).setWebAppPath( AppPathService.getWebAppPath(  ) );
170 
171         Collection<Plugin> listPlugins = PluginService.getPluginList(  );
172 
173         HashMap model = new HashMap(  );
174         model.put( MARK_PLUGINS_LIST, listPlugins );
175 
176         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_INSTALLED, getLocale(  ), model );
177 
178         return getAdminPage( template.getHtml(  ) );
179     }
180 
181     /**
182      * Confirm the plugin's backup
183      * @param request The HTTP request
184      * @return The forward URL
185      */
186     public String backupPlugin( HttpServletRequest request )
187     {
188         String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
189 
190         UrlItem url = new UrlItem( JSP_URL_BACKUP_PLUGIN );
191         url.addParameter( PARAMETER_PLUGIN_NAME, strPluginName );
192 
193         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_BACKUP_PLUGIN, url.getUrl(  ),
194             AdminMessage.TYPE_CONFIRMATION );
195     }
196 
197     /**
198      * Process the plugin's backup
199      * @param request The HTTP request
200      * @return The forward URL
201      */
202     public String doBackupPlugin( HttpServletRequest request )
203     {
204         String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
205 
206         PluginManagerService.getInstance(  ).backupPlugin( strPluginName );
207 
208         return getManageUrl(  );
209     }
210 
211     /**
212      * Confirm the plugin removal
213      * @param request The HTTP request
214      * @return The forward URL
215      */
216     public String removePlugin( HttpServletRequest request )
217     {
218         String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
219 
220         UrlItem url = new UrlItem( JSP_URL_REMOVE_PLUGIN );
221         url.addParameter( PARAMETER_PLUGIN_NAME, strPluginName );
222 
223         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_PLUGIN, url.getUrl(  ),
224             AdminMessage.TYPE_CONFIRMATION );
225     }
226 
227     /**
228      * Process the plugin removal
229      * @param request The HTTP request
230      * @return The forward URL
231      */
232     public String doRemovePlugin( HttpServletRequest request )
233     {
234         String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
235 
236         PluginManagerService.getInstance(  ).removePlugin( strPluginName, FileSystemResource.DELETE_NOW );
237 
238         return getManageUrl(  );
239     }
240 
241     /**
242      * Confirm the plugin's restore
243      * @param request The HTTP request
244      * @return The forward URL
245      */
246     public String restorePlugin( HttpServletRequest request )
247     {
248         String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
249 
250         UrlItem url = new UrlItem( JSP_URL_RESTORE_PLUGIN );
251         url.addParameter( PARAMETER_PLUGIN_NAME, strPluginName );
252 
253         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_RESTORE_PLUGIN, url.getUrl(  ),
254             AdminMessage.TYPE_CONFIRMATION );
255     }
256 
257     /**
258      * Process the plugin's restore
259      * @param request The HTTP request
260      * @return The forward URL
261      */
262     public String doRestorePlugin( HttpServletRequest request )
263     {
264         String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
265 
266         PluginManagerService.getInstance(  ).restorePlugin( strPluginName );
267 
268         return getManageUrl(  );
269     }
270 
271     /**
272      * Confirm the plugin's deployment
273      * @param request The HTTP request
274      * @return The forward URL
275      */
276     public String deployPlugin( HttpServletRequest request )
277     {
278         String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
279         String strVersion = request.getParameter( PARAMETER_VERSION );
280 
281         UrlItem url = new UrlItem( JSP_URL_DEPLOY_PLUGIN );
282         url.addParameter( PARAMETER_PLUGIN_NAME, strPluginName );
283         url.addParameter( PARAMETER_VERSION, strVersion );
284 
285         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_DEPLOY_PLUGIN, url.getUrl(  ),
286             AdminMessage.TYPE_CONFIRMATION );
287     }
288 
289     /**
290      * Process the plugin's deployment
291      * @param request The HTTP request
292      * @return The forward URL
293      */
294     public String doDeployPlugin( HttpServletRequest request )
295     {
296         String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
297         String strVersion = request.getParameter( PARAMETER_VERSION );
298         _updateService.deployPlugin( strPluginName, strVersion );
299 
300         return getManageUrl(  );
301     }
302 
303     /**
304      * Confirm the installation cancelling
305      * @param request The HTTP request
306      * @return The forward URL
307      */
308     public String cancelInstall( HttpServletRequest request )
309     {
310         String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
311 
312         UrlItem url = new UrlItem( JSP_URL_CANCEL_INSTALL );
313         url.addParameter( PARAMETER_PLUGIN_NAME, strPluginName );
314 
315         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_CANCEL_INSTALL, url.getUrl(  ),
316             AdminMessage.TYPE_CONFIRMATION );
317     }
318 
319     /**
320      * Process the installation cancelling
321      * @param request The HTTP request
322      * @return The forward URL
323      */
324     public String doCancelInstall( HttpServletRequest request )
325     {
326         String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
327 
328         PluginManagerService.getInstance(  ).cancelInstallInProgress( strPluginName );
329 
330         return getManageUrl(  );
331     }
332 
333     /**
334      * Process the download
335      * @param request The HTTP request
336      * @return The forward URL
337      */
338     public String doDownload( HttpServletRequest request )
339     {
340         try
341         {
342             String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
343             String strVersion = request.getParameter( PARAMETER_VERSION );
344             _updateService.downloadPlugin( strPluginName, strVersion );
345             PluginManagerService.getInstance(  ).cancelInstallInProgress( strPluginName );
346 
347             return getManageUrl(  );
348         }
349         catch ( UpdaterDownloadException e )
350         {
351             Object[] args = { e.getCause(  ).getMessage(  ), };
352 
353             String strForwardUrl = getManageUrl(  ).equals( URL_MANAGE_UPDATES ) ? JSP_URL_MANAGE_UPDATES
354                                                                                  : JSP_URL_MANAGE_NEW;
355 
356             return AdminMessageService.getMessageUrl( request, MESSAGE_DOWNLOAD_ERROR, args, strForwardUrl,
357                 AdminMessage.TYPE_ERROR );
358         }
359     }
360 
361     /**
362      * Process the download
363      * @param request The HTTP request
364      * @return The forward URL
365      */
366     public String doDownloadUpgrade( HttpServletRequest request )
367     {
368         try
369         {
370             String strPluginName = request.getParameter( PARAMETER_PLUGIN_NAME );
371             String strVersion = request.getParameter( PARAMETER_VERSION );
372             String strVersionFrom = request.getParameter( PARAMETER_VERSION_FROM );
373             _updateService.downloadPluginUpgrade( strPluginName, strVersion, strVersionFrom );
374             PluginManagerService.getInstance(  ).cancelInstallInProgress( strPluginName );
375 
376             return getManageUrl(  );
377         }
378         catch ( UpdaterDownloadException e )
379         {
380             Object[] args = { e.getCause(  ).getMessage(  ), };
381 
382             return AdminMessageService.getMessageUrl( request, MESSAGE_DOWNLOAD_ERROR, args, JSP_URL_MANAGE_UPDATES,
383                 AdminMessage.TYPE_ERROR );
384         }
385     }
386 
387     /**
388      * Sets the ManageUrl
389      * @param strManageUrl The ManageUrl
390      */
391     private void setManageUrl( String strManageUrl )
392     {
393         _strManageUrl = strManageUrl;
394     }
395 
396     /**
397      * Returns the ManageUrl
398      * @return The ManageUrl
399      */
400     private String getManageUrl(  )
401     {
402         return _strManageUrl;
403     }
404 }