From a6a7d75328edada5861f1290fa67d3309db3e5af Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sat, 18 Dec 2010 18:21:21 +0100 Subject: [PATCH] implement plugin update method --- .../sonia/scm/plugin/AetherPluginHandler.java | 4 +- .../scm/plugin/DefaultPluginManager.java | 41 +++++++++++++++++-- .../main/webapp/resources/js/sonia.plugin.js | 33 ++++++++++++++- 3 files changed, 71 insertions(+), 7 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/AetherPluginHandler.java b/scm-webapp/src/main/java/sonia/scm/plugin/AetherPluginHandler.java index c8d05f8cf4..d5fd5a6e49 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/AetherPluginHandler.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/AetherPluginHandler.java @@ -199,7 +199,7 @@ public class AetherPluginHandler } catch (Exception ex) { - throw new PluginLoadException(ex); + throw new PluginException(ex); } } @@ -245,7 +245,7 @@ public class AetherPluginHandler } catch (JAXBException ex) { - throw new PluginLoadException(ex); + throw new PluginException(ex); } } } diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java index e81c316871..44756baec4 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java @@ -177,7 +177,7 @@ public class DefaultPluginManager implements PluginManager if (plugin == null) { - throw new PluginLoadException(id.concat(" is not install")); + throw new PluginNotInstalledException(id.concat(" is not install")); } if (pluginHandler == null) @@ -199,7 +199,38 @@ public class DefaultPluginManager implements PluginManager { SecurityUtil.assertIsAdmin(securityContextProvicer); - throw new UnsupportedOperationException("Not supported yet."); + String[] idParts = id.split(":"); + String groupId = idParts[0]; + String artefactId = idParts[1]; + PluginInformation installed = null; + + for (PluginInformation info : getInstalled()) + { + if (groupId.equals(info.getGroupId()) + && artefactId.equals(info.getArtifactId())) + { + installed = info; + + break; + } + } + + if (installed == null) + { + StringBuilder msg = new StringBuilder(groupId); + + msg.append(":").append(groupId).append(" is not install"); + + throw new PluginNotInstalledException(msg.toString()); + } + + if (pluginHandler == null) + { + getPluginCenter(); + } + + pluginHandler.uninstall(installed.getId()); + pluginHandler.install(id); } //~--- get methods ---------------------------------------------------------- @@ -370,12 +401,14 @@ public class DefaultPluginManager implements PluginManager { if (installed.getVersion().equals(available.getVersion())) { - available.setState(PluginState.INSTALLED); + state = PluginState.INSTALLED; } else { - available.setState(PluginState.UPDATE_AVAILABLE); + state = PluginState.UPDATE_AVAILABLE; } + + break; } } diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.plugin.js b/scm-webapp/src/main/webapp/resources/js/sonia.plugin.js index 24fbac5de3..c6a60bb73d 100644 --- a/scm-webapp/src/main/webapp/resources/js/sonia.plugin.js +++ b/scm-webapp/src/main/webapp/resources/js/sonia.plugin.js @@ -135,8 +135,39 @@ Sonia.plugin.uninstallPlugin = function(pluginId){ Sonia.plugin.updatePlugin = function(pluginId){ if ( debug ){ - console.debug('not implemented'); + console.debug( 'update plugin to ' + pluginId ); } + + var loadingBox = Ext.MessageBox.show({ + title: 'Please wait', + msg: 'Update Plugin.', + width: 300, + wait: true, + animate: true, + progress: true, + closable: false + }); + + Ext.Ajax.request({ + url: restUrl + 'plugins/update/' + pluginId + '.json', + method: 'POST', + scope: this, + success: function(){ + if ( debug ){ + console.debug('plugin successfully updated'); + } + loadingBox.hide(); + Ext.MessageBox.alert('Plugin successfully updated', + 'Restart the applicationserver to activate the changes.'); + }, + failure: function(){ + if ( debug ){ + console.debug('plugin updated failed'); + } + alert( 'failure' ); + loadingBox.hide(); + } + }); } // plugin grid