Refresh only one plugin after install/upgrade

When installing or upgrading a single plugin, there is no need to
refresh the entire list. 

Change-Id: Ib2d7026b786e6f8628c7294f93596025228d8365
diff --git a/src/main/resources/static/js/plugin-manager.js b/src/main/resources/static/js/plugin-manager.js
index b458bc2..5862fe4 100644
--- a/src/main/resources/static/js/plugin-manager.js
+++ b/src/main/resources/static/js/plugin-manager.js
@@ -35,67 +35,73 @@
         return pluginIndex;
       }
 
-      $scope.refreshInstalled = function() {
+      $scope.refreshInstalled = function(refreshPluginId) {
         $http.get('/plugins/?all', plugins.httpConfig).then(
             function successCallback(response) {
 
               angular.forEach(response.data, function(plugin) {
-                var currPluginIdx = $scope.pluginIndexOf(plugin.id);
+                if (refreshPluginId == undefined
+                    || refreshPluginId == plugin.id) {
+                  var currPluginIdx = $scope.pluginIndexOf(plugin.id);
 
-                if (currPluginIdx < 0) {
-                  plugins.list.push({
-                    id : plugin.id,
-                    index_url : plugin.index_url,
-                    version : plugin.version,
-                    sha1 : '',
-                    url : plugin.url,
-                    update_version : ''
-                  });
-                } else {
-                  plugins.list[currPluginIdx] = {
-                    id : plugin.id,
-                    index_url : plugin.index_url,
-                    version : plugin.version,
-                    sha1 : '',
-                    url : plugin.url,
-                    update_version : ''
+                  if (currPluginIdx < 0) {
+                    plugins.list.push({
+                      id : plugin.id,
+                      index_url : plugin.index_url,
+                      version : plugin.version,
+                      sha1 : '',
+                      url : plugin.url,
+                      update_version : ''
+                    });
+                  } else {
+                    plugins.list[currPluginIdx] = {
+                      id : plugin.id,
+                      index_url : plugin.index_url,
+                      version : plugin.version,
+                      sha1 : '',
+                      url : plugin.url,
+                      update_version : ''
+                    }
                   }
                 }
               });
 
-              $scope.refreshAvailable();
+              $scope.refreshAvailable(refreshPluginId);
             }, function errorCallback(response) {
             });
       }
 
-      $scope.refreshAvailable = function() {
+      $scope.refreshAvailable = function(refreshPluginId) {
         $http.get('/plugins/plugin-manager/available', plugins.httpConfig)
             .then(
                 function successCallback(response) {
 
                   angular.forEach(response.data, function(plugin) {
-                    var currRow = $scope.pluginIndexOf(plugin.id);
-                    var currPlugin = currRow < 0 ? undefined
-                        : plugins.list[currRow];
+                    if (refreshPluginId == undefined
+                        || refreshPluginId == plugin.id) {
+                      var currRow = $scope.pluginIndexOf(plugin.id);
+                      var currPlugin = currRow < 0 ? undefined
+                          : plugins.list[currRow];
 
-                    if (currPlugin === undefined) {
-                      currPlugin = {
-                        id : plugin.id,
-                        index_url : '',
-                        version : ''
+                      if (currPlugin === undefined) {
+                        currPlugin = {
+                          id : plugin.id,
+                          index_url : '',
+                          version : ''
+                        }
                       }
-                    }
 
-                    if (plugin.version != currPlugin.version) {
-                      currPlugin.update_version = plugin.version;
-                    }
-                    currPlugin.sha1 = plugin.sha1;
-                    currPlugin.url = plugin.url;
+                      if (plugin.version != currPlugin.version) {
+                        currPlugin.update_version = plugin.version;
+                      }
+                      currPlugin.sha1 = plugin.sha1;
+                      currPlugin.url = plugin.url;
 
-                    if (currRow < 0) {
-                      plugins.list.push(currPlugin);
-                    } else {
-                      plugins.list[currRow] = currPlugin;
+                      if (currRow < 0) {
+                        plugins.list.push(currPlugin);
+                      } else {
+                        plugins.list[currRow] = currPlugin;
+                      }
                     }
                   });
                   plugins.available = response.data;
@@ -113,7 +119,7 @@
             function successCallback(response) {
               $("span#installing-" + id).addClass("hidden");
               $("span#installed-" + id).removeClass("hidden");
-              $scope.refreshInstalled();
+              $scope.refreshInstalled(id);
             }, function errorCallback(response) {
               $("span#installing-" + id).addClass("hidden");
               $("span#failed-" + id).removeClass("hidden");