Author: vvalchev
Date: Mon Apr  2 14:53:47 2012
New Revision: 1308371

URL: http://svn.apache.org/viewvc?rev=1308371&view=rev
Log:
Fixed FELIX-3417 Web Console Inconsistent status text
https://issues.apache.org/jira/browse/FELIX-3417

Modified:
    
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigurationAdminConfigurationPrinter.java
    
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/PreferencesConfigurationPrinter.java
    
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/WireAdminConfigurationPrinter.java
    
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesConfigurationPrinter.java
    
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
    
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ThreadPrinter.java

Modified: 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigurationAdminConfigurationPrinter.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigurationAdminConfigurationPrinter.java?rev=1308371&r1=1308370&r2=1308371&view=diff
==============================================================================
--- 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigurationAdminConfigurationPrinter.java
 (original)
+++ 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigurationAdminConfigurationPrinter.java
 Mon Apr  2 14:53:47 2012
@@ -16,11 +16,12 @@
  */
 package org.apache.felix.webconsole.internal.compendium;
 
-
 import java.io.PrintWriter;
 import java.util.Dictionary;
 import java.util.Enumeration;
+import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Set;
 import java.util.SortedMap;
 import java.util.SortedSet;
 import java.util.TreeMap;
@@ -32,7 +33,6 @@ import org.osgi.framework.ServiceReferen
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
-
 /**
  * ConfigurationAdminConfigurationPrinter uses the {@link ConfigurationAdmin} 
service
  * to print the available configurations.
@@ -42,7 +42,6 @@ public class ConfigurationAdminConfigura
 
     private static final String TITLE = "Configurations";
 
-
     /**
      * @see org.apache.felix.webconsole.ConfigurationPrinter#getTitle()
      */
@@ -51,79 +50,97 @@ public class ConfigurationAdminConfigura
         return TITLE;
     }
 
-
     /**
      * @see 
org.apache.felix.webconsole.ConfigurationPrinter#printConfiguration(java.io.PrintWriter)
      */
-    public void printConfiguration( PrintWriter pw )
+    public void printConfiguration(PrintWriter pw)
     {
-        ServiceReference sr = getBundleContext().getServiceReference( 
ConfigurationAdmin.class.getName() );
-        if ( sr == null )
+        ServiceReference sr = getBundleContext().getServiceReference(
+            ConfigurationAdmin.class.getName());
+        if (sr == null)
         {
-            pw.println( "  Configuration Admin Service not registered" );
+            pw.println("Status: Configuration Admin Service not available");
         }
         else
         {
 
-            ConfigurationAdmin ca = ( ConfigurationAdmin ) 
getBundleContext().getService( sr );
+            ConfigurationAdmin ca = (ConfigurationAdmin) 
getBundleContext().getService(sr);
             try
             {
-                Configuration[] configs = ca.listConfigurations( null );
-                if ( configs != null && configs.length > 0 )
+                Configuration[] configs = ca.listConfigurations(null);
+
+                if (configs != null && configs.length > 0)
                 {
+                    Set factories = new HashSet();
                     SortedMap sm = new TreeMap();
-                    for ( int i = 0; i < configs.length; i++ )
+                    for (int i = 0; i < configs.length; i++)
                     {
-                        sm.put( configs[i].getPid(), configs[i] );
+                        sm.put(configs[i].getPid(), configs[i]);
+                        String fpid = configs[i].getFactoryPid();
+                        if (null != fpid)
+                        {
+                            factories.add(fpid);
+                        }
                     }
+                    if (factories.isEmpty())
+                    {
+                        pw.println("Status: " + configs.length
+                            + " configurations available");
+                    }
+                    else
+                    {
+                        pw.println("Status: " + configs.length + " 
configurations and "
+                            + factories.size() + " factories available");
+                    }
+                    pw.println();
 
-                    for ( Iterator mi = sm.values().iterator(); mi.hasNext(); )
+                    for (Iterator mi = sm.values().iterator(); mi.hasNext();)
                     {
-                        this.printConfiguration( pw, ( Configuration ) 
mi.next() );
+                        this.printConfiguration(pw, (Configuration) mi.next());
                     }
                 }
                 else
                 {
-                    pw.println( "  No Configurations available" );
+                    pw.println("Status: No Configurations available");
                 }
             }
-            catch ( Exception e )
+            catch (Exception e)
             {
-                // todo or not :-)
+                pw.println("Status: Configuration Admin Service not 
accessible");
             }
             finally
             {
-                getBundleContext().ungetService( sr );
+                getBundleContext().ungetService(sr);
             }
         }
     }
 
-
-    private void printConfiguration( PrintWriter pw, Configuration config )
+    private void printConfiguration(PrintWriter pw, Configuration config)
     {
-        ConfigurationRender.infoLine( pw, "", "PID", config.getPid() );
+        ConfigurationRender.infoLine(pw, "", "PID", config.getPid());
 
-        if ( config.getFactoryPid() != null )
+        if (config.getFactoryPid() != null)
         {
-            ConfigurationRender.infoLine( pw, "  ", "Factory PID", 
config.getFactoryPid() );
+            ConfigurationRender.infoLine(pw, "  ", "Factory PID", 
config.getFactoryPid());
         }
 
-        String loc = ( config.getBundleLocation() != null ) ? 
config.getBundleLocation() : "Unbound";
-        ConfigurationRender.infoLine( pw, "  ", "BundleLocation", loc );
+        String loc = (config.getBundleLocation() != null) ? 
config.getBundleLocation()
+            : "Unbound";
+        ConfigurationRender.infoLine(pw, "  ", "BundleLocation", loc);
 
         Dictionary props = config.getProperties();
-        if ( props != null )
+        if (props != null)
         {
             SortedSet keys = new TreeSet();
-            for ( Enumeration ke = props.keys(); ke.hasMoreElements(); )
+            for (Enumeration ke = props.keys(); ke.hasMoreElements();)
             {
-                keys.add( ke.nextElement() );
+                keys.add(ke.nextElement());
             }
 
-            for ( Iterator ki = keys.iterator(); ki.hasNext(); )
+            for (Iterator ki = keys.iterator(); ki.hasNext();)
             {
-                String key = ( String ) ki.next();
-                ConfigurationRender.infoLine( pw, "  ", key, props.get( key ) 
);
+                String key = (String) ki.next();
+                ConfigurationRender.infoLine(pw, "  ", key, props.get(key));
             }
         }
 

Modified: 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/PreferencesConfigurationPrinter.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/PreferencesConfigurationPrinter.java?rev=1308371&r1=1308370&r2=1308371&view=diff
==============================================================================
--- 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/PreferencesConfigurationPrinter.java
 (original)
+++ 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/PreferencesConfigurationPrinter.java
 Mon Apr  2 14:53:47 2012
@@ -16,7 +16,6 @@
  */
 package org.apache.felix.webconsole.internal.compendium;
 
-
 import java.io.PrintWriter;
 
 import org.apache.felix.webconsole.internal.AbstractConfigurationPrinter;
@@ -26,7 +25,6 @@ import org.osgi.service.prefs.BackingSto
 import org.osgi.service.prefs.Preferences;
 import org.osgi.service.prefs.PreferencesService;
 
-
 /**
  * PreferencesConfigurationPrinter uses the {@link Preferences} service
  * to print the store bundle preferences.
@@ -36,7 +34,6 @@ public class PreferencesConfigurationPri
 
     private static final String TITLE = "Preferences";
 
-
     /**
      * @see org.apache.felix.webconsole.ConfigurationPrinter#getTitle()
      */
@@ -45,64 +42,64 @@ public class PreferencesConfigurationPri
         return TITLE;
     }
 
-
     /**
      * @see 
org.apache.felix.webconsole.ConfigurationPrinter#printConfiguration(java.io.PrintWriter)
      */
-    public void printConfiguration( PrintWriter printWriter )
+    public void printConfiguration(PrintWriter printWriter)
     {
-        ServiceReference sr = getBundleContext().getServiceReference( 
PreferencesService.class.getName() );
-        if ( sr == null )
+        ServiceReference sr = getBundleContext().getServiceReference(
+            PreferencesService.class.getName());
+        if (sr == null)
         {
-            printWriter.println( "  Preferences Service not registered" );
+            printWriter.println("Status: Preferences Service not available");
         }
         else
         {
-            PreferencesService ps = ( PreferencesService ) 
getBundleContext().getService( sr );
+            PreferencesService ps = (PreferencesService) 
getBundleContext().getService(sr);
             try
             {
-                printPreferences( printWriter, ps.getSystemPreferences() );
+                printPreferences(printWriter, ps.getSystemPreferences());
 
                 String[] users = ps.getUsers();
-                for ( int i = 0; users != null && i < users.length; i++ )
+                for (int i = 0; users != null && i < users.length; i++)
                 {
-                    printWriter.println( "*** User Preferences " + users[i] + 
":" );
-                    printPreferences( printWriter, ps.getUserPreferences( 
users[i] ) );
+                    printWriter.println("*** User Preferences " + users[i] + 
":");
+                    printPreferences(printWriter, 
ps.getUserPreferences(users[i]));
                 }
             }
-            catch ( BackingStoreException bse )
+            catch (BackingStoreException bse)
             {
                 // todo or not :-)
             }
             finally
             {
-                getBundleContext().ungetService( sr );
+                getBundleContext().ungetService(sr);
             }
         }
     }
 
-
-    private static final void printPreferences( PrintWriter pw, Preferences 
prefs ) throws BackingStoreException
+    private static final void printPreferences(PrintWriter pw, Preferences 
prefs)
+        throws BackingStoreException
     {
 
         final String[] children = prefs.childrenNames();
         final String[] keys = prefs.keys();
 
-        if ( children.length == 0 && keys.length == 0 )
+        if (children.length == 0 && keys.length == 0)
         {
-            pw.println( "No Preferences available" );
+            pw.println("Status: No Preferences available");
         }
         else
         {
-            for ( int i = 0; i < children.length; i++ )
+            for (int i = 0; i < children.length; i++)
             {
-                printPreferences( pw, prefs.node( children[i] ) );
+                printPreferences(pw, prefs.node(children[i]));
             }
 
-            for ( int i = 0; i < keys.length; i++ )
+            for (int i = 0; i < keys.length; i++)
             {
-                ConfigurationRender
-                    .infoLine( pw, null, prefs.absolutePath() + "/" + keys[i], 
prefs.get( keys[i], null ) );
+                ConfigurationRender.infoLine(pw, null, prefs.absolutePath() + 
"/"
+                    + keys[i], prefs.get(keys[i], null));
             }
         }
 

Modified: 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/WireAdminConfigurationPrinter.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/WireAdminConfigurationPrinter.java?rev=1308371&r1=1308370&r2=1308371&view=diff
==============================================================================
--- 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/WireAdminConfigurationPrinter.java
 (original)
+++ 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/WireAdminConfigurationPrinter.java
 Mon Apr  2 14:53:47 2012
@@ -64,7 +64,7 @@ public final class WireAdminConfiguratio
             final Object service = ref != null ? bc.getService(ref) : null;
             if (service == null)
             {
-                pw.println("No Wire Admin service available");
+                pw.println("Status: Wire Admin service not available");
             }
             else
             {
@@ -73,7 +73,7 @@ public final class WireAdminConfiguratio
 
                 if (null == wires || 0 == wires.length)
                 {
-                    pw.println("No wires available");
+                    pw.println("Status: No wires available");
                 }
                 else
                 {

Modified: 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesConfigurationPrinter.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesConfigurationPrinter.java?rev=1308371&r1=1308370&r2=1308371&view=diff
==============================================================================
--- 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesConfigurationPrinter.java
 (original)
+++ 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesConfigurationPrinter.java
 Mon Apr  2 14:53:47 2012
@@ -144,7 +144,7 @@ public class BundlesConfigurationPrinter
 
         }
         final StringBuffer buffer = new StringBuffer();
-        buffer.append("Bundlelist: ");
+        buffer.append("Status: ");
         appendBundleInfoCount(buffer, "in total", bundles.length);
         if ( active == bundles.length || active + fragments == bundles.length )
         {
@@ -175,7 +175,7 @@ public class BundlesConfigurationPrinter
             }
         }
         pw.println(buffer.toString());
-        
pw.println("-----------------------------------------------------------------------------");
+        pw.println();
         final Iterator i = bundlesMap.entrySet().iterator();
         while ( i.hasNext() )
         {

Modified: 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java?rev=1308371&r1=1308370&r2=1308371&view=diff
==============================================================================
--- 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
 (original)
+++ 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
 Mon Apr  2 14:53:47 2012
@@ -170,7 +170,6 @@ public class ServicesServlet extends Sim
     {
         final int count = services.length;
         final StringBuffer buffer = new StringBuffer();
-        buffer.append( "Services information: " );
         buffer.append( count );
         buffer.append( " service" );
         if ( count != 1 )

Modified: 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ThreadPrinter.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ThreadPrinter.java?rev=1308371&r1=1308370&r2=1308371&view=diff
==============================================================================
--- 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ThreadPrinter.java
 (original)
+++ 
felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ThreadPrinter.java
 Mon Apr  2 14:53:47 2012
@@ -19,6 +19,7 @@
 package org.apache.felix.webconsole.internal.misc;
 
 import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
 
@@ -30,7 +31,7 @@ public class ThreadPrinter extends Abstr
     private static final String TITLE = "Threads";
 
     private static final String LABEL = "_threads";
-
+    
     public String getTitle()
     {
         return TITLE;
@@ -45,18 +46,78 @@ public class ThreadPrinter extends Abstr
             rootGroup = rootGroup.getParent();
         }
 
-        printThreadGroup(pw, rootGroup);
-
         int numGroups = rootGroup.activeGroupCount();
         ThreadGroup[] groups = new ThreadGroup[2 * numGroups];
         rootGroup.enumerate(groups);
         Arrays.sort(groups, ThreadGroupComparator.getInstance());
+
+        printStatusLine(pw, rootGroup, groups);
+        printThreadGroup(pw, rootGroup);
+
         for (int i = 0; i < groups.length; i++)
         {
             printThreadGroup(pw, groups[i]);
         }
     }
 
+    private void printStatusLine(PrintWriter pw, ThreadGroup rootGroup,
+        ThreadGroup[] groups)
+    {
+        int alive = 0;
+        int daemon = 0;
+        int interrupted = 0;
+
+        int threadCount = 0;
+        int threadGroupCount = 0;
+        int threadGroupDestroyed = 0;
+
+        ArrayList/*<ThreadGroup>*/list = new ArrayList(groups.length + 1);
+        list.add(rootGroup);
+        list.addAll(Arrays.asList(groups));
+        for (int j = 0; j < list.size(); j++)
+        {
+            ThreadGroup group = (ThreadGroup) list.get(j);
+            if (null == group)
+            {
+                continue;
+            }
+            threadGroupCount++;
+            if (group.isDestroyed())
+            {
+                threadGroupDestroyed++;
+            }
+
+            Thread[] threads = new Thread[group.activeCount()];
+            group.enumerate(threads);
+            for (int i = 0, size = threads.length; i < size; i++)
+            {
+                Thread thread = threads[i];
+                if (null != thread)
+                {
+                    if (thread.isAlive())
+                    {
+                        alive++;
+                    }
+                    if (thread.isDaemon())
+                    {
+                        daemon++;
+                    }
+                    if (thread.isInterrupted())
+                    {
+                        interrupted++;
+                    }
+                    threadCount++;
+                }
+            }
+        }
+
+        ConfigurationRender.infoLine(pw, "", null, "Status: " + threadCount
+            + " threads (" + alive + " alive/" + daemon + " daemon/" + 
interrupted
+            + " interrupted) in " + threadGroupCount + " groups ("
+            + threadGroupDestroyed + " destroyed).");
+        pw.println();
+    }
+
     private static final void printThreadGroup(PrintWriter pw, ThreadGroup 
group)
     {
         if (group != null)
@@ -131,7 +192,8 @@ final class ThreadComparator implements 
 
     public int compare(Object thread1, Object thread2)
     {
-        if (null == thread1 || null == thread2) return -1;
+        if (null == thread1 || null == thread2)
+            return -1;
         String t1 = ((Thread) thread1).getName();
         String t2 = ((Thread) thread2).getName();
         if (null == t1)
@@ -165,7 +227,8 @@ final class ThreadGroupComparator implem
 
     public int compare(Object thread1, Object thread2)
     {
-        if (null == thread1 || null == thread2) return -1;
+        if (null == thread1 || null == thread2)
+            return -1;
         String t1 = ((ThreadGroup) thread1).getName();
         String t2 = ((ThreadGroup) thread2).getName();
         if (null == t1)
@@ -180,4 +243,4 @@ final class ThreadGroupComparator implem
         return t1.compareTo(t2);
     }
 
-}
\ No newline at end of file
+}


Reply via email to