FELIX-2199 Register newly extracted built-in ConfigurationPrinters with service registry and OsgiManager
FELIX-2147 Ensure all OsgiManagerPlugin implementations are deactivated when the OsgiManager servlet is destroyed

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@922607 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
index c9f9d7e..fd4213e 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
@@ -18,6 +18,7 @@
 
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Dictionary;
 import java.util.Enumeration;
@@ -25,6 +26,7 @@
 import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.ResourceBundle;
@@ -135,6 +137,8 @@
             "org.apache.felix.webconsole.internal.misc.LicenseServlet",
             "org.apache.felix.webconsole.internal.misc.ConfigurationRender",
             "org.apache.felix.webconsole.internal.misc.ShellServlet",
+            "org.apache.felix.webconsole.internal.misc.SystemPropertiesPrinter",
+            "org.apache.felix.webconsole.internal.misc.ThreadPrinter",
             "org.apache.felix.webconsole.internal.obr.BundleRepositoryRender",
             "org.apache.felix.webconsole.internal.system.VMStatPlugin"
         };
@@ -155,6 +159,10 @@
     // AbstractWebConsolePlugin instances
     private Map plugins = new HashMap();
 
+    // list of OsgiManagerPlugin instances activated during init. All these
+    // instances will have to be deactivated during destroy
+    private List osgiManagerPlugins = new ArrayList();
+
     private AbstractWebConsolePlugin defaultPlugin;
 
     private String defaultRenderName;
@@ -255,6 +263,7 @@
                 if ( plugin instanceof OsgiManagerPlugin )
                 {
                     ( ( OsgiManagerPlugin ) plugin ).activate( bundleContext );
+                    osgiManagerPlugins.add( plugin );
                 }
                 if ( plugin instanceof AbstractWebConsolePlugin )
                 {
@@ -384,7 +393,7 @@
         }
 
         // deactivate any remaining plugins
-        for ( Iterator pi = plugins.values().iterator(); pi.hasNext(); )
+        for ( Iterator pi = osgiManagerPlugins.iterator(); pi.hasNext(); )
         {
             Object plugin = pi.next();
             if ( plugin instanceof OsgiManagerPlugin )
@@ -395,6 +404,7 @@
 
         // simply remove all operations, we should not be used anymore
         this.plugins.clear();
+        this.osgiManagerPlugins.clear();
     }