You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by fm...@apache.org on 2010/03/13 12:54:04 UTC

svn commit: r922540 - in /felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole: ./ internal/ internal/core/ internal/obr/ internal/servlet/

Author: fmeschbe
Date: Sat Mar 13 11:54:03 2010
New Revision: 922540

URL: http://svn.apache.org/viewvc?rev=922540&view=rev
Log:
FELIX-2099 Cleanup loggging: All logging now goes through the GenericServlet.log methods where the AbstractWebConsolePlugin provides log methods taking a log level used to filter log messages on a log level configurable for all web console plugins. Removing the now unused Logger and BaseManagementPlugin classes. Simplifying the BasedUpdateInstallHelper and its extension classes using a SimpleWebConsolePlugin as its basis for logging and service access. Add configuration option (loglevel) to configure the loglevel message filter.

Removed:
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/BaseManagementPlugin.java
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/Logger.java
Modified:
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/SimpleWebConsolePlugin.java
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BaseUpdateInstallHelper.java
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/InstallHelper.java
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateHelper.java
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/DeployerThread.java
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener2.java
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java?rev=922540&r1=922539&r2=922540&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java Sat Mar 13 11:54:03 2010
@@ -95,6 +95,9 @@ public abstract class AbstractWebConsole
 
     private static BrandingPlugin brandingPlugin = DefaultBrandingPlugin.getInstance();
 
+    private static int logLevel;
+
+
     //---------- HttpServlet Overwrites ----------------------------------------
 
     /**
@@ -155,7 +158,6 @@ public abstract class AbstractWebConsole
         }
     }
 
-
     /**
      * Detects whether this request is intended to have the headers and
      * footers of this plugin be rendered or not. This method always returns
@@ -369,6 +371,50 @@ public abstract class AbstractWebConsole
 
 
     /**
+     * Calls the <code>GenericServlet.log(String)</code> method if the
+     * configured log level is less than or equal to the given <code>level</code>.
+     * <p>
+     * Note, that the <code>level</code> paramter is only used to decide whether
+     * the <code>GenericServlet.log(String)</code> method is called or not. The
+     * actual implementation of the <code>GenericServlet.log</code> method is
+     * outside of the control of this method.
+     *
+     * @param level The log level at which to log the message
+     * @param message The message to log
+     */
+    public void log( int level, String message )
+    {
+        if ( logLevel >= level )
+        {
+            log( message );
+        }
+    }
+
+
+    /**
+     * Calls the <code>GenericServlet.log(String, Throwable)</code> method if
+     * the configured log level is less than or equal to the given
+     * <code>level</code>.
+     * <p>
+     * Note, that the <code>level</code> paramter is only used to decide whether
+     * the <code>GenericServlet.log(String, Throwable)</code> method is called
+     * or not. The actual implementation of the <code>GenericServlet.log</code>
+     * method is outside of the control of this method.
+     *
+     * @param level The log level at which to log the message
+     * @param message The message to log
+     * @param t The <code>Throwable</code> to log with the message
+     */
+    public void log( int level, String message, Throwable t )
+    {
+        if ( logLevel >= level )
+        {
+            log( message, t );
+        }
+    }
+
+
+    /**
      * If the request addresses a resource which may be served by the
      * <code>getResource</code> method of the
      * {@link #getResourceProvider() resource provider}, this method serves it
@@ -546,13 +592,13 @@ public abstract class AbstractWebConsole
                     }
                     else
                     {
-                        map.put( labelMapEntry.getValue(), "<div class='ui-state-active'><span>" + labelMapEntry.getValue() 
+                        map.put( labelMapEntry.getValue(), "<div class='ui-state-active'><span>" + labelMapEntry.getValue()
                             + "</span></div>");
                     }
                 }
                 else
                 {
-                    map.put( labelMapEntry.getValue(), "<div class='ui-state-default'><a href='" + appRoot + "/" + labelMapEntry.getKey() + "'>" 
+                    map.put( labelMapEntry.getValue(), "<div class='ui-state-default'><a href='" + appRoot + "/" + labelMapEntry.getKey() + "'>"
                         + labelMapEntry.getValue() + "</a></div>");
                 }
             }
@@ -622,6 +668,9 @@ public abstract class AbstractWebConsole
     }
 
     /**
+     * Returns the {@link BrandingPlugin} currently used for web console
+     * branding.
+     *
      * @return the brandingPlugin
      */
     public static BrandingPlugin getBrandingPlugin() {
@@ -629,6 +678,12 @@ public abstract class AbstractWebConsole
     }
 
     /**
+     * Sets the {@link BrandingPlugin} to use globally by all extensions of
+     * this class for branding.
+     * <p>
+     * Note: This method is intended to be used internally by the Web Console
+     * to update the branding plugin to use.
+     *
      * @param brandingPlugin the brandingPlugin to set
      */
     public static final void setBrandingPlugin(BrandingPlugin brandingPlugin) {
@@ -640,6 +695,21 @@ public abstract class AbstractWebConsole
     }
 
 
+    /**
+     * Sets the log level to be applied for calls to the {@link #log(int, String)}
+     * and {@link #log(int, String, Throwable)} methods.
+     * <p>
+     * Note: This method is intended to be used internally by the Web Console
+     * to update the log level according to the Web Console configuration.
+     *
+     * @param logLevel
+     */
+    public static final void setLogLevel( int logLevel )
+    {
+        AbstractWebConsolePlugin.logLevel = logLevel;
+    }
+
+
     private final String getHeader()
     {
         // MessageFormat pattern place holder

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/SimpleWebConsolePlugin.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/SimpleWebConsolePlugin.java?rev=922540&r1=922539&r2=922540&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/SimpleWebConsolePlugin.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/SimpleWebConsolePlugin.java Sat Mar 13 11:54:03 2010
@@ -188,7 +188,7 @@ public abstract class SimpleWebConsolePl
      * @param serviceName the service name to obtain
      * @return the service or <code>null</code> if missing.
      */
-    protected final Object getService( String serviceName )
+    public final Object getService( String serviceName )
     {
         ServiceTracker serviceTracker = ( ServiceTracker ) services.get( serviceName );
         if ( serviceTracker == null )

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BaseUpdateInstallHelper.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BaseUpdateInstallHelper.java?rev=922540&r1=922539&r2=922540&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BaseUpdateInstallHelper.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BaseUpdateInstallHelper.java Sat Mar 13 11:54:03 2010
@@ -21,11 +21,10 @@ package org.apache.felix.webconsole.inte
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.felix.webconsole.internal.Logger;
+import org.apache.felix.webconsole.SimpleWebConsolePlugin;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleException;
 import org.osgi.service.log.LogService;
@@ -35,6 +34,8 @@ import org.osgi.service.packageadmin.Pac
 abstract class BaseUpdateInstallHelper implements Runnable
 {
 
+    private final SimpleWebConsolePlugin plugin;
+
     private final File bundleFile;
 
     private final boolean refreshPackages;
@@ -42,8 +43,9 @@ abstract class BaseUpdateInstallHelper i
     private Thread updateThread;
 
 
-    BaseUpdateInstallHelper( String name, File bundleFile, boolean refreshPackages )
+    BaseUpdateInstallHelper( SimpleWebConsolePlugin plugin, String name, File bundleFile, boolean refreshPackages )
     {
+        this.plugin = plugin;
         this.bundleFile = bundleFile;
         this.refreshPackages = refreshPackages;
         this.updateThread = new Thread( this, name );
@@ -60,10 +62,16 @@ abstract class BaseUpdateInstallHelper i
     protected abstract Bundle doRun( InputStream bundleStream ) throws BundleException;
 
 
-    protected abstract Logger getLog();
+    protected final Object getService( String serviceName )
+    {
+        return plugin.getService( serviceName );
+    }
 
 
-    protected abstract Object getService( String serviceName );
+    protected final SimpleWebConsolePlugin getLog()
+    {
+        return plugin;
+    }
 
 
     /**

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java?rev=922540&r1=922539&r2=922540&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java Sat Mar 13 11:54:03 2010
@@ -54,7 +54,6 @@ import org.apache.felix.webconsole.Defau
 import org.apache.felix.webconsole.SimpleWebConsolePlugin;
 import org.apache.felix.webconsole.WebConsoleConstants;
 import org.apache.felix.webconsole.WebConsoleUtil;
-import org.apache.felix.webconsole.internal.Logger;
 import org.apache.felix.webconsole.internal.OsgiManagerPlugin;
 import org.apache.felix.webconsole.internal.Util;
 import org.json.JSONArray;
@@ -1307,20 +1306,7 @@ public class BundlesServlet extends Simp
 
     private void update( final Bundle bundle )
     {
-        UpdateHelper t = new UpdateHelper( bundle, false )
-        {
-            protected Logger getLog()
-            {
-                return BundlesServlet.this.getLog();
-            }
-
-
-            protected Object getService( String serviceName )
-            {
-                return BundlesServlet.this.getService( serviceName );
-            }
-        };
-
+        UpdateHelper t = new UpdateHelper( this, bundle, false );
         t.start();
     }
 
@@ -1386,18 +1372,6 @@ public class BundlesServlet extends Simp
         return ( StartLevel ) getService( StartLevel.class.getName() );
     }
 
-    // TODO: may remove later, when BaseWebConsolePlugin is made to extend SimpleWebConsolePlugin
-    private Logger log;
-    Logger getLog()
-    {
-        if ( log == null )
-        {
-            log = new Logger( getBundleContext() );
-        }
-
-        return log;
-    }
-
 
     //---------- Bundle Installation handler (former InstallAction)
 
@@ -1436,8 +1410,8 @@ public class BundlesServlet extends Simp
             }
             catch ( NumberFormatException nfe )
             {
-                getLog().log( LogService.LOG_INFO,
-                    "Cannot parse start level parameter " + startLevelItem + " to a number, not setting start level" );
+                log( LogService.LOG_INFO, "Cannot parse start level parameter " + startLevelItem
+                    + " to a number, not setting start level" );
             }
         }
 
@@ -1454,8 +1428,7 @@ public class BundlesServlet extends Simp
             }
             catch ( Exception e )
             {
-                getLog().log( LogService.LOG_ERROR, "Problem accessing uploaded bundle file: " + bundleItem.getName(),
-                    e );
+                log( LogService.LOG_ERROR, "Problem accessing uploaded bundle file: " + bundleItem.getName(), e );
 
                 // remove the tmporary file
                 if ( tmpFile != null )
@@ -1581,7 +1554,7 @@ public class BundlesServlet extends Simp
         }
         catch ( IOException ioe )
         {
-            getLog().log( LogService.LOG_WARNING, "Cannot extract symbolic name of bundle file " + bundleFile, ioe );
+            log( LogService.LOG_WARNING, "Cannot extract symbolic name of bundle file " + bundleFile, ioe );
         }
         finally
         {
@@ -1607,55 +1580,15 @@ public class BundlesServlet extends Simp
         final boolean doStart, final boolean refreshPackages )
     {
 
-        InstallHelper t = new InstallHelper( getBundleContext(), bundleFile, location, startlevel, doStart,
-            refreshPackages )
-        {
-            protected Logger getLog()
-            {
-                return BundlesServlet.this.getLog();
-            }
-
-
-            protected Object getService( String serviceName )
-            {
-                if ( serviceName.equals( PackageAdmin.class.getName() ) )
-                {
-                    return BundlesServlet.this.getPackageAdmin();
-                }
-                else if ( serviceName.equals( StartLevel.class.getName() ) )
-                {
-                    return BundlesServlet.this.getStartLevel();
-                }
-
-                return null;
-            }
-        };
-
+        InstallHelper t = new InstallHelper( this, getBundleContext(), bundleFile, location, startlevel, doStart,
+            refreshPackages );
         t.start();
     }
 
 
     private void updateBackground( final Bundle bundle, final File bundleFile, final boolean refreshPackages )
     {
-        UpdateHelper t = new UpdateHelper( bundle, bundleFile, refreshPackages )
-        {
-            protected Logger getLog()
-            {
-                return BundlesServlet.this.getLog();
-            }
-
-
-            protected Object getService( String serviceName )
-            {
-                if ( serviceName.equals( PackageAdmin.class.getName() ) )
-                {
-                    return BundlesServlet.this.getPackageAdmin();
-                }
-
-                return null;
-            }
-        };
-
+        UpdateHelper t = new UpdateHelper( this, bundle, bundleFile, refreshPackages );
         t.start();
     }
 }

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/InstallHelper.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/InstallHelper.java?rev=922540&r1=922539&r2=922540&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/InstallHelper.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/InstallHelper.java Sat Mar 13 11:54:03 2010
@@ -22,23 +22,25 @@ package org.apache.felix.webconsole.inte
 import java.io.File;
 import java.io.InputStream;
 
+import org.apache.felix.webconsole.SimpleWebConsolePlugin;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleException;
 import org.osgi.service.startlevel.StartLevel;
 
 
-abstract class InstallHelper extends BaseUpdateInstallHelper
+class InstallHelper extends BaseUpdateInstallHelper
 {
     private final BundleContext bundleContext;
     private final String location;
     private final int startlevel;
     private final boolean doStart;
 
-    InstallHelper( final BundleContext bundleContext, final File bundleFile, final String location, final int startlevel,
-        final boolean doStart, final boolean refreshPackages )
+
+    InstallHelper( final SimpleWebConsolePlugin plugin, final BundleContext bundleContext, final File bundleFile,
+        final String location, final int startlevel, final boolean doStart, final boolean refreshPackages )
     {
-        super( "Background Install " + bundleFile, bundleFile, refreshPackages );
+        super( plugin, "Background Install " + bundleFile, bundleFile, refreshPackages );
 
         this.bundleContext = bundleContext;
         this.location = location;

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateHelper.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateHelper.java?rev=922540&r1=922539&r2=922540&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateHelper.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateHelper.java Sat Mar 13 11:54:03 2010
@@ -20,14 +20,12 @@ package org.apache.felix.webconsole.inte
 
 
 import java.io.File;
-import java.io.IOException;
 import java.io.InputStream;
-import java.net.URL;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.felix.bundlerepository.RepositoryAdmin;
 import org.apache.felix.bundlerepository.Resolver;
 import org.apache.felix.bundlerepository.Resource;
+import org.apache.felix.webconsole.SimpleWebConsolePlugin;
 import org.apache.felix.webconsole.internal.obr.DeployerThread;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleException;
@@ -36,22 +34,23 @@ import org.osgi.framework.InvalidSyntaxE
 import org.osgi.service.log.LogService;
 
 
-abstract class UpdateHelper extends BaseUpdateInstallHelper
+class UpdateHelper extends BaseUpdateInstallHelper
 {
 
     private final Bundle bundle;
 
 
-    UpdateHelper( final Bundle bundle, boolean refreshPackages )
+    UpdateHelper( final SimpleWebConsolePlugin plugin, final Bundle bundle, boolean refreshPackages )
     {
-        this( bundle, null, refreshPackages );
+        this( plugin, bundle, null, refreshPackages );
     }
 
 
-    UpdateHelper( final Bundle bundle, final File bundleFile, boolean refreshPackages )
+    UpdateHelper( final SimpleWebConsolePlugin plugin, final Bundle bundle, final File bundleFile,
+        boolean refreshPackages )
     {
-        super( "Background Update " + bundle.getSymbolicName() + " (" + bundle.getBundleId() + ")", bundleFile,
-            refreshPackages );
+        super( plugin, "Background Update " + bundle.getSymbolicName() + " (" + bundle.getBundleId() + ")",
+            bundleFile, refreshPackages );
         this.bundle = bundle;
     }
 

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java?rev=922540&r1=922539&r2=922540&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/BundleRepositoryRender.java Sat Mar 13 11:54:03 2010
@@ -19,11 +19,7 @@
 package org.apache.felix.webconsole.internal.obr;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Enumeration;
-import java.util.List;
-
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -34,7 +30,6 @@ import org.apache.felix.bundlerepository
 import org.apache.felix.webconsole.DefaultVariableResolver;
 import org.apache.felix.webconsole.SimpleWebConsolePlugin;
 import org.apache.felix.webconsole.WebConsoleUtil;
-import org.apache.felix.webconsole.internal.Logger;
 import org.apache.felix.webconsole.internal.OsgiManagerPlugin;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -324,12 +319,12 @@ public class BundleRepositoryRender exte
                 }
             }
 
-            DeployerThread dt = new DeployerThread(resolver, new Logger(getBundleContext()), start, optional);
+            DeployerThread dt = new DeployerThread( resolver, this, start, optional );
             dt.start();
         }
         catch (InvalidSyntaxException e)
         {
-            throw new IllegalStateException(e); 
+            throw new IllegalStateException(e);
         }
     }
 

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/DeployerThread.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/DeployerThread.java?rev=922540&r1=922539&r2=922540&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/DeployerThread.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/DeployerThread.java Sat Mar 13 11:54:03 2010
@@ -22,7 +22,7 @@ package org.apache.felix.webconsole.inte
 import org.apache.felix.bundlerepository.Reason;
 import org.apache.felix.bundlerepository.Resolver;
 import org.apache.felix.bundlerepository.Resource;
-import org.apache.felix.webconsole.internal.Logger;
+import org.apache.felix.webconsole.AbstractWebConsolePlugin;
 import org.osgi.service.log.LogService;
 
 
@@ -31,20 +31,22 @@ public class DeployerThread extends Thre
 
     private final Resolver obrResolver;
 
-    private final Logger logger;
+    private final AbstractWebConsolePlugin logger;
 
     private final boolean startBundles;
 
     private final boolean optionalDependencies;
 
 
-    public DeployerThread( Resolver obrResolver, Logger logger, boolean startBundles, boolean optionalDependencies )
+    public DeployerThread( Resolver obrResolver, AbstractWebConsolePlugin logger, boolean startBundles,
+        boolean optionalDependencies )
     {
         this( obrResolver, logger, startBundles, optionalDependencies, "OBR Bundle Deployer" );
     }
 
 
-    public DeployerThread( Resolver obrResolver, Logger logger, boolean startBundles, boolean optionalDependencies, String name )
+    public DeployerThread( Resolver obrResolver, AbstractWebConsolePlugin logger, boolean startBundles,
+        boolean optionalDependencies, String name )
     {
         super( name );
         this.obrResolver = obrResolver;
@@ -83,7 +85,7 @@ public class DeployerThread extends Thre
     }
 
 
-    public static void logResource( Logger logger, String message, Resource[] res )
+    public static void logResource( AbstractWebConsolePlugin logger, String message, Resource[] res )
     {
         if ( res != null && res.length > 0 )
         {
@@ -97,7 +99,7 @@ public class DeployerThread extends Thre
     }
 
 
-    public static void logRequirements( Logger logger, String message, Reason[] reasons )
+    public static void logRequirements( AbstractWebConsolePlugin logger, String message, Reason[] reasons )
     {
         logger.log( LogService.LOG_ERROR, message );
         for ( int i = 0; reasons != null && i < reasons.length; i++ )

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener2.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener2.java?rev=922540&r1=922539&r2=922540&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener2.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener2.java Sat Mar 13 11:54:03 2010
@@ -90,6 +90,11 @@ class ConfigurationListener2 extends Con
             adList.add( new AttributeDefinitionImpl( OsgiManager.PROP_PASSWORD, "Password",
                 "The password for the user allowed to access the OSGi Management Console.",
                 OsgiManager.DEFAULT_PASSWORD ) );
+            adList.add( new AttributeDefinitionImpl( OsgiManager.PROP_LOG_LEVEL, "Log Level", "Logging Level",
+                AttributeDefinition.INTEGER, new String[]
+                    { String.valueOf( OsgiManager.DEFAULT_LOG_LEVEL ) }, 0, new String[]
+                    { "Debug", "Information", "Warn", "Error" }, new String[]
+                    { "4", "3", "2", "1" } ) );
 
             final TreeMap namesByClassName = new TreeMap();
             final ClassLoader loader = getClass().getClassLoader();

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java?rev=922540&r1=922539&r2=922540&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java Sat Mar 13 11:54:03 2010
@@ -40,7 +40,6 @@ import javax.servlet.http.HttpServletRes
 import org.apache.felix.webconsole.AbstractWebConsolePlugin;
 import org.apache.felix.webconsole.BrandingPlugin;
 import org.apache.felix.webconsole.WebConsoleConstants;
-import org.apache.felix.webconsole.internal.Logger;
 import org.apache.felix.webconsole.internal.OsgiManagerPlugin;
 import org.apache.felix.webconsole.internal.WebConsolePluginAdapter;
 import org.apache.felix.webconsole.internal.core.BundlesServlet;
@@ -104,6 +103,10 @@ public class OsgiManager extends Generic
 
     static final String PROP_ENABLED_PLUGINS = "plugins";
 
+    static final String PROP_LOG_LEVEL = "loglevel";
+
+    public static final int DEFAULT_LOG_LEVEL = LogService.LOG_WARNING;
+
     static final String DEFAULT_PAGE = BundlesServlet.NAME;
 
     static final String DEFAULT_REALM = "OSGi Management Console";
@@ -138,8 +141,6 @@ public class OsgiManager extends Generic
 
     private BundleContext bundleContext;
 
-    private Logger log;
-
     private ServiceTracker httpServiceTracker;
 
     private HttpService httpService;
@@ -176,11 +177,11 @@ public class OsgiManager extends Generic
 
     private ResourceBundleManager resourceBundleManager;
 
+    private int logLevel = DEFAULT_LOG_LEVEL;
+
     public OsgiManager( BundleContext bundleContext )
     {
-
         this.bundleContext = bundleContext;
-        this.log = new Logger( bundleContext );
 
         updateConfiguration( null );
 
@@ -225,11 +226,6 @@ public class OsgiManager extends Generic
             configurationListener = null;
         }
 
-        if ( log != null )
-        {
-            log.dispose();
-        }
-
         this.defaultPlugin = null;
         this.bundleContext = null;
     }
@@ -256,7 +252,7 @@ public class OsgiManager extends Generic
                 // check whether enabled by configuration
                 if ( isPluginDisabled( pluginClassName, plugin ) )
                 {
-                    log.log( LogService.LOG_INFO, "Ignoring plugin " + pluginClassName + ": Disabled by configuration" );
+                    log( LogService.LOG_INFO, "Ignoring plugin " + pluginClassName + ": Disabled by configuration" );
                     continue;
                 }
 
@@ -286,11 +282,11 @@ public class OsgiManager extends Generic
                     // message is just a class name, try to be more descriptive
                     message = "Class " + message + " missing";
                 }
-                log.log( LogService.LOG_INFO, pluginClassName + " not enabled. Reason: " + message );
+                log( LogService.LOG_INFO, pluginClassName + " not enabled. Reason: " + message );
             }
             catch ( Throwable t )
             {
-                log.log( LogService.LOG_INFO, "Failed to instantiate plugin " + pluginClassName + ". Reason: " + t );
+                log( LogService.LOG_INFO, "Failed to instantiate plugin " + pluginClassName + ". Reason: " + t );
             }
         }
 
@@ -404,6 +400,7 @@ public class OsgiManager extends Generic
         this.labelMap.clear();
     }
 
+
     //---------- internal
 
     BundleContext getBundleContext()
@@ -422,6 +419,50 @@ public class OsgiManager extends Generic
     }
 
 
+    /**
+     * Calls the <code>GenericServlet.log(String)</code> method if the
+     * configured log level is less than or equal to the given <code>level</code>.
+     * <p>
+     * Note, that the <code>level</code> paramter is only used to decide whether
+     * the <code>GenericServlet.log(String)</code> method is called or not. The
+     * actual implementation of the <code>GenericServlet.log</code> method is
+     * outside of the control of this method.
+     *
+     * @param level The log level at which to log the message
+     * @param message The message to log
+     */
+    private void log( int level, String message )
+    {
+        if ( logLevel >= level )
+        {
+            log( message );
+        }
+    }
+
+
+    /**
+     * Calls the <code>GenericServlet.log(String, Throwable)</code> method if
+     * the configured log level is less than or equal to the given
+     * <code>level</code>.
+     * <p>
+     * Note, that the <code>level</code> paramter is only used to decide whether
+     * the <code>GenericServlet.log(String, Throwable)</code> method is called
+     * or not. The actual implementation of the <code>GenericServlet.log</code>
+     * method is outside of the control of this method.
+     *
+     * @param level The log level at which to log the message
+     * @param message The message to log
+     * @param t The <code>Throwable</code> to log with the message
+     */
+    private void log( int level, String message, Throwable t )
+    {
+        if ( logLevel >= level )
+        {
+            log( message, t );
+        }
+    }
+
+
     private HttpServletResponse wrapResponse( final HttpServletRequest request, final HttpServletResponse response,
         final AbstractWebConsolePlugin plugin )
     {
@@ -584,7 +625,7 @@ public class OsgiManager extends Generic
         // do not bind service, when we are already bound
         if ( this.httpService != null )
         {
-            log.log( LogService.LOG_DEBUG,
+            log( LogService.LOG_DEBUG,
                 "bindHttpService: Already bound to an HTTP Service, ignoring further services" );
             return;
         }
@@ -614,7 +655,7 @@ public class OsgiManager extends Generic
         }
         catch ( Exception e )
         {
-            log.log( LogService.LOG_ERROR, "bindHttpService: Problem setting up", e );
+            log( LogService.LOG_ERROR, "bindHttpService: Problem setting up", e );
         }
 
         this.httpService = httpService;
@@ -625,7 +666,7 @@ public class OsgiManager extends Generic
     {
         if ( this.httpService != httpService )
         {
-            log.log( LogService.LOG_DEBUG,
+            log( LogService.LOG_DEBUG,
                 "unbindHttpService: Ignoring unbind of an HttpService to which we are not registered" );
             return;
         }
@@ -641,7 +682,7 @@ public class OsgiManager extends Generic
             }
             catch ( Throwable t )
             {
-                log.log( LogService.LOG_WARNING, "unbindHttpService: Failed unregistering Resources", t );
+                log( LogService.LOG_WARNING, "unbindHttpService: Failed unregistering Resources", t );
             }
             httpResourcesRegistered = false;
         }
@@ -654,7 +695,7 @@ public class OsgiManager extends Generic
             }
             catch ( Throwable t )
             {
-                log.log( LogService.LOG_WARNING, "unbindHttpService: Failed unregistering Servlet", t );
+                log( LogService.LOG_WARNING, "unbindHttpService: Failed unregistering Servlet", t );
             }
             httpServletRegistered = false;
         }
@@ -682,7 +723,7 @@ public class OsgiManager extends Generic
         }
         catch ( ServletException se )
         {
-            log.log( LogService.LOG_WARNING, "Initialization of plugin '" + title + "' (" + label
+            log( LogService.LOG_WARNING, "Initialization of plugin '" + title + "' (" + label
                 + ") failed; not using this plugin", se );
         }
     }
@@ -727,6 +768,9 @@ public class OsgiManager extends Generic
 
         configuration = config;
 
+        logLevel = getProperty( config, PROP_LOG_LEVEL, DEFAULT_LOG_LEVEL );
+        AbstractWebConsolePlugin.setLogLevel( logLevel );
+
         defaultRenderName = getProperty( config, PROP_DEFAULT_RENDER, DEFAULT_PAGE );
         if ( defaultRenderName != null && plugins.get( defaultRenderName ) != null )
         {
@@ -810,6 +854,42 @@ public class OsgiManager extends Generic
 
 
     /**
+     * Returns the named property from the configuration. If the property does
+     * not exist, the default value <code>def</code> is returned.
+     *
+     * @param config The properties from which to returned the named one
+     * @param name The name of the property to return
+     * @param def The default value if the named property does not exist
+     * @return The value of the named property as a string or <code>def</code>
+     *         if the property does not exist
+     */
+    private int getProperty( Dictionary config, String name, int def )
+    {
+        Object value = config.get( name );
+        if ( value instanceof Number )
+        {
+            return ( ( Number ) value ).intValue();
+        }
+
+        // try to convert the value to a number
+        if ( value != null )
+        {
+            try
+            {
+                return Integer.parseInt( value.toString() );
+            }
+            catch ( NumberFormatException nfe )
+            {
+                // don't care
+            }
+        }
+
+        // not a number, not convertible, not set, use default
+        return def;
+    }
+
+
+    /**
      * Returns <code>true</code> if the plugin is an
      * {@link AbstractWebConsolePlugin} and a list of enabled plugins is
      * configured but the plugin is not contained in that list.