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 2011/12/19 09:36:41 UTC

svn commit: r1220651 - in /felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet: ConfigurationListener2.java ConfigurationUtil.java OsgiManager.java

Author: fmeschbe
Date: Mon Dec 19 08:36:40 2011
New Revision: 1220651

URL: http://svn.apache.org/viewvc?rev=1220651&view=rev
Log:
FELIX-2709 Support some configuration from bundle context properties:
  - felix.webconsole.manager.root -- root URL of the console
  - felix.webconsole.realm -- HTTP Basic realm
  - felix.webconsole.username -- HTTP Basic user name
  - felix.webconsole.password -- HTTP Basic password
  - such framework property configuration will also be assumed
    as default configuration in the generated Metatype descriptor

Modified:
    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/ConfigurationUtil.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/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=1220651&r1=1220650&r2=1220651&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 Mon Dec 19 08:36:40 2011
@@ -22,6 +22,7 @@ package org.apache.felix.webconsole.inte
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Locale;
+import java.util.Map;
 import java.util.ResourceBundle;
 import java.util.TreeMap;
 
@@ -113,13 +114,14 @@ class ConfigurationListener2 extends Con
         ObjectClassDefinition xocd = null;
         final Locale localeObj = Util.parseLocaleString(locale);
         final ResourceBundle rb = osgiManager.resourceBundleManager.getResourceBundle(osgiManager.getBundleContext().getBundle(), localeObj);
+        final Map<String, String> defaultConfig = osgiManager.getDefaultConfiguration();
 
         // simple configuration properties
         final ArrayList<AttributeDefinition> adList = new ArrayList<AttributeDefinition>();
         for (int i = 0; i < CONF_PROPS.length; i++)
         {
             final String key = CONF_PROPS[i++];
-            final String defaultValue = CONF_PROPS[i];
+            final String defaultValue = ConfigurationUtil.getProperty( defaultConfig, key, CONF_PROPS[i] );
             final String name = getString(rb, "metadata." + key + ".name", key); //$NON-NLS-1$ //$NON-NLS-2$
             final String descr = getString(rb, "metadata." + key + ".description", key); //$NON-NLS-1$ //$NON-NLS-2$
             adList.add( new AttributeDefinitionImpl(key, name, descr, defaultValue) );

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationUtil.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationUtil.java?rev=1220651&r1=1220650&r2=1220651&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationUtil.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationUtil.java Mon Dec 19 08:36:40 2011
@@ -17,10 +17,12 @@
 package org.apache.felix.webconsole.internal.servlet;
 
 import java.util.Collection;
-import java.util.Dictionary;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.StringTokenizer;
 
+import org.osgi.framework.BundleContext;
+
 /**
  * A helper class to get configuration properties.
  */
@@ -32,6 +34,24 @@ public class ConfigurationUtil
         // prevent instantiation
     }
 
+
+    /**
+     * Returns the named property from the framework. If the property does
+     * not exist, the default value <code>def</code> is returned.
+     *
+     * @param context The BundleContext providing framework properties
+     * @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 or <code>def</code>
+     *         if the property does not exist
+     */
+    public static final String getProperty( BundleContext context, String name, String def )
+    {
+        String value = context.getProperty( name );
+        return ( value == null ) ? def : value;
+    }
+
+
     /**
      * Returns the named property from the configuration. If the property does
      * not exist, the default value <code>def</code> is returned.
@@ -42,7 +62,7 @@ public class ConfigurationUtil
      * @return The value of the named property as a string or <code>def</code>
      *         if the property does not exist
      */
-    public static final String getProperty(Dictionary<String, ?> config, String name, String def)
+    public static final String getProperty(Map<String, ?> config, String name, String def)
     {
         Object value = config.get(name);
         if (value instanceof String)
@@ -68,7 +88,7 @@ public class ConfigurationUtil
      * @return The value of the named property as a string or <code>def</code>
      *         if the property does not exist
      */
-    public static final int getProperty(Dictionary<String, ?> config, String name, int def)
+    public static final int getProperty(Map<String, ?> config, String name, int def)
     {
         Object value = config.get(name);
         if (value instanceof Number)
@@ -100,7 +120,7 @@ public class ConfigurationUtil
      * @param name The name of the property to return
      * @return the property value as string array - no matter if originally it was other kind of array, collection or comma-separated string. Returns <code>null</code> if the property is not set.
      */
-    public static final String[] getStringArrayProperty(Dictionary<String, ?> config, String name)
+    public static final String[] getStringArrayProperty(Map<String, ?> config, String name)
     {
         Object value = config.get(name);
         if (value == null)

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=1220651&r1=1220650&r2=1220651&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 Mon Dec 19 08:36:40 2011
@@ -30,6 +30,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.ResourceBundle;
 import java.util.Set;
 
@@ -109,6 +110,14 @@ public class OsgiManager extends Generic
      */
     private static final String COOKIE_LOCALE = "felix.webconsole.locale"; //$NON-NLS-1$
 
+    private final String FRAMEWORK_PROP_MANAGER_ROOT = "felix.webconsole.manager.root"; //$NON-NLS-1$
+
+    private static final String FRAMEWORK_PROP_REALM = "felix.webconsole.realm"; //$NON-NLS-1$
+
+    private static final String FRAMEWORK_PROP_USER_NAME = "felix.webconsole.username"; //$NON-NLS-1$
+
+    private static final String FRAMEWORK_PROP_PASSWORD = "felix.webconsole.password"; //$NON-NLS-1$
+
     static final String PROP_MANAGER_ROOT = "manager.root"; //$NON-NLS-1$
 
     static final String PROP_DEFAULT_RENDER = "default.render"; //$NON-NLS-1$
@@ -190,7 +199,11 @@ public class OsgiManager extends Generic
     // true if the resources have been registered with the HttpService
     private boolean httpResourcesRegistered;
 
-    private Dictionary<String, ?> configuration;
+    // default configuration from framework properties
+    private HashMap<String, String> defaultConfiguration;
+
+    // configuration from Configuration Admin
+    private HashMap<String, ?> configuration;
 
     // See https://issues.apache.org/jira/browse/FELIX-2267
     private Locale configuredLocale;
@@ -279,6 +292,17 @@ public class OsgiManager extends Generic
             WebConsoleSecurityProvider.class.getName(), null);
         securityProviderTracker.open();
 
+        // load the default configuration from the framework
+        this.defaultConfiguration = new HashMap<String, String>();
+        this.defaultConfiguration.put( PROP_MANAGER_ROOT,
+            ConfigurationUtil.getProperty( bundleContext, FRAMEWORK_PROP_MANAGER_ROOT, DEFAULT_MANAGER_ROOT ) );
+        this.defaultConfiguration.put( PROP_REALM,
+            ConfigurationUtil.getProperty( bundleContext, FRAMEWORK_PROP_REALM, DEFAULT_REALM ) );
+        this.defaultConfiguration.put( PROP_USER_NAME,
+            ConfigurationUtil.getProperty( bundleContext, FRAMEWORK_PROP_USER_NAME, DEFAULT_USER_NAME ) );
+        this.defaultConfiguration.put( PROP_PASSWORD,
+            ConfigurationUtil.getProperty( bundleContext, FRAMEWORK_PROP_PASSWORD, DEFAULT_PASSWORD ) );
+
         // configure and start listening for configuration
         updateConfiguration(null);
 
@@ -701,7 +725,7 @@ public class OsgiManager extends Generic
             return;
         }
 
-        Dictionary<String, ?> config = getConfiguration();
+        Map<String, ?> config = getConfiguration();
 
         // get authentication details
         String realm = ConfigurationUtil.getProperty(config, PROP_REALM, DEFAULT_REALM);
@@ -776,16 +800,29 @@ public class OsgiManager extends Generic
         }
     }
 
-    private Dictionary<String, ?> getConfiguration()
+    private Map<String, ?> getConfiguration()
     {
         return configuration;
     }
 
-    synchronized void updateConfiguration(Dictionary<String, ?> config)
+
+    Map<String, String> getDefaultConfiguration()
     {
-        if (config == null)
+        return defaultConfiguration;
+    }
+
+
+    synchronized void updateConfiguration(Dictionary<String, ?> osgiConfig)
+    {
+        HashMap<String, Object> config = new HashMap<String, Object>(this.defaultConfiguration);
+
+        if ( osgiConfig != null )
         {
-            config = new Hashtable<String, Object>();
+            for ( Enumeration<String> keys = osgiConfig.keys(); keys.hasMoreElements(); )
+            {
+                final String key = keys.nextElement();
+                config.put( key, osgiConfig.get( key ) );
+            }
         }
 
         configuration = config;
@@ -886,13 +923,13 @@ public class OsgiManager extends Generic
         return enabledPlugins != null && !enabledPlugins.contains(pluginClass);
     }
 
-    private Dictionary<String, String> toStringConfig(Dictionary<String, ?> config)
+
+    private Dictionary<String, String> toStringConfig( Map<String, ?> config )
     {
         Dictionary<String, String> stringConfig = new Hashtable<String, String>();
-        for (Enumeration<String> ke = config.keys(); ke.hasMoreElements();)
+        for ( Entry<String, ?> entry : config.entrySet() )
         {
-            String key = ke.nextElement();
-            stringConfig.put(key, String.valueOf(config.get(key)));
+            stringConfig.put( entry.getKey(), String.valueOf( entry.getValue() ) );
         }
         return stringConfig;
     }