Author: cziegeler
Date: Tue Feb  1 09:01:45 2005
New Revision: 149417

URL: http://svn.apache.org/viewcvs?view=rev&rev=149417
Log:
Finish properties handling

Modified:
    
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portlet/CocoonPortlet.java
    
cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java
    cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java
    cocoon/trunk/src/core/java/org/apache/cocoon/core/Core.java
    
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ComponentEnvironment.java
    
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CoreServiceManager.java
    
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/util/PropertyHelper.java
    
cocoon/trunk/src/core/test/org/apache/cocoon/core/container/util/PropertyHelperTestCase.java
    cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java
    cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java
    cocoon/trunk/src/java/org/apache/cocoon/components/ContextHelper.java
    
cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java
    cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java

Modified: 
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portlet/CocoonPortlet.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portlet/CocoonPortlet.java?view=diff&r1=149416&r2=149417
==============================================================================
--- 
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portlet/CocoonPortlet.java
 (original)
+++ 
cocoon/trunk/src/blocks/portal/java/org/apache/cocoon/portlet/CocoonPortlet.java
 Tue Feb  1 09:01:45 2005
@@ -35,6 +35,8 @@
 import org.apache.cocoon.components.notification.DefaultNotifyingBuilder;
 import org.apache.cocoon.components.notification.Notifier;
 import org.apache.cocoon.components.notification.Notifying;
+import org.apache.cocoon.configuration.Settings;
+import org.apache.cocoon.core.Core;
 import org.apache.cocoon.environment.Environment;
 import org.apache.cocoon.environment.portlet.PortletContext;
 import org.apache.cocoon.environment.portlet.PortletEnvironment;
@@ -287,6 +289,8 @@
 
         this.portletContext = conf.getPortletContext();
         this.appContext.put(Constants.CONTEXT_ENVIRONMENT_CONTEXT, new 
PortletContext(this.portletContext));
+        // FIXME - add settings
+        appContext.put(Core.CONTEXT_SETTINGS, new Settings());
         this.portletContextPath = this.portletContext.getRealPath("/");
 
         // first init the work-directory for the logger.

Modified: 
cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java?view=diff&r1=149416&r2=149417
==============================================================================
--- 
cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java
 (original)
+++ 
cocoon/trunk/src/core/java/org/apache/cocoon/configuration/ConfigurationBuilder.java
 Tue Feb  1 09:01:45 2005
@@ -94,11 +94,13 @@
     private Configuration configuration;
     private Locator locator;
     private final NamespaceSupport namespaceSupport = new NamespaceSupport();
-
+    private final Settings settings;
+    
     /**
      * Create a Configuration Builder
      */
-    public ConfigurationBuilder() {
+    public ConfigurationBuilder(Settings s) {
+        this.settings = s;
         try {
             final SAXParserFactory saxParserFactory = 
SAXParserFactory.newInstance();
 
@@ -272,7 +274,7 @@
             } else {
                 finishedValue = accumulatedValue.trim();
             }
-            finishedConfiguration.setValue( 
PropertyHelper.replace(finishedValue) );
+            finishedConfiguration.setValue( 
PropertyHelper.replace(finishedValue, this.settings) );
         } else {
             final String trimmedValue = accumulatedValue.trim();
             if( trimmedValue.length() > 0 ) {
@@ -367,7 +369,7 @@
         for( int i = 0; i < attributesSize; i++ ) {
             final String name = componentAttr.getQName( i );
             final String value = componentAttr.getValue( i );
-            configuration.setAttribute( name, PropertyHelper.replace(value) );
+            configuration.setAttribute( name, PropertyHelper.replace(value, 
this.settings) );
         }
     }
 

Modified: 
cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java?view=diff&r1=149416&r2=149417
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java 
(original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/configuration/Settings.java 
Tue Feb  1 09:01:45 2005
@@ -57,6 +57,11 @@
     public static final boolean MANAGE_EXCEPTIONS = true;
 
     /**
+     * The list of properties used to configure Cocoon
+     */
+    protected List properties = new ArrayList();
+
+    /**
      * This parameter tells Cocoon to set the thread's context classloader to
      * its own classloader. If you experience strange classloader issues,
      * try setting this parameter to "true".
@@ -252,7 +257,7 @@
                     key = key.substring("org.apache.cocoon.".length());
                     final String value = current.getValue().toString();
 
-                    if ( key.equals("init.classloader") ) { 
+                    if ( key.equals("init.classloader") ) {
                         this.initClassloader = BooleanUtils.toBoolean(value);
                     } else if ( key.equals("configuration") ) {
                         this.configuration = value;
@@ -300,6 +305,7 @@
                     // TODO - force property, load classes, extra class path
                 }
             }
+            this.properties.add(props);
         }
     }
     
@@ -673,5 +679,75 @@
                "- Log4J Configuration: " + this.log4jConfiguration + "\n" +
                "- Override Loglevel: " + this.overrideLogLevel + "\n";
 
+    }
+
+    public String getProperty(String name) {
+        return this.getProperty(name, null);
+    }
+
+    public String getProperty(String key, String defaultValue) {
+        if ( key == null ) {
+            return defaultValue;
+        }
+        String value = null;
+        if ( key.startsWith("org.apache.cocoon.") ) {
+            final String sKey = key.substring("org.apache.cocoon.".length());
+            if ( sKey.equals("init.classloader") ) {
+                value = String.valueOf(this.initClassloader);
+            } else if ( sKey.equals("configuration") ) {
+                value = this.configuration;
+            } else if ( sKey.equals("logging.configuration") ) {
+                value = this.loggingConfiguration;
+            } else if ( sKey.equals("logging.logger.access") ) {
+                value = this.accessLogger;
+            } else if ( sKey.equals("logging.logger.cocoon") ) {
+                value = this.cocoonLogger;
+            } else if ( sKey.equals("logging.bootstrap.level") ) {
+                value = this.bootstrapLogLevel;
+            } else if ( sKey.equals("logging.manager.class") ) {
+                value = this.loggerClassName;
+            } else if ( sKey.equals("logging.log4j.configuration") ) {
+                value = this.log4jConfiguration;
+            } else if ( sKey.equals("allow.reload") ) {
+                value = String.valueOf(this.allowReload);
+            } else if ( sKey.equals("uploads.enable") ) {
+                value = String.valueOf(this.enableUploads);
+            } else if ( sKey.equals("uploads.directory") ) {
+                value = this.uploadDirectory = value;
+            } else if ( sKey.equals("uploads.autosave") ) {
+                value = String.valueOf(this.autosaveUploads);
+            } else if ( sKey.equals("uploads.overwrite") ) {
+                value = this.overwriteUploads;
+            } else if ( sKey.equals("uploads.maxsize") ) {
+                value = String.valueOf(this.maxUploadSize);
+            } else if ( sKey.equals("cache.directory") ) {
+                value = this.cacheDirectory;
+            } else if ( sKey.equals("work.directory") ) {
+                value = this.workDirectory;
+            } else if ( sKey.equals("parentservicemanager") ) {
+                value = this.parentServiceManagerClassName;
+            } else if ( sKey.equals("showtime") ) {
+                value = String.valueOf(this.showTime);
+            } else if ( sKey.equals("hideshowtime") ) {
+                value = String.valueOf(this.hideShowTime);
+            } else if ( sKey.equals("manageexceptions") ) {
+                value = String.valueOf(this.manageExceptions);
+            } else if ( sKey.equals("formencoding") ) {
+                value = this.formEncoding;
+            } else if ( sKey.equals("override.loglevel") ) {
+                value = this.overrideLogLevel;
+            }
+        }
+
+        int i = 0;
+        while ( i < this.properties.size() && value == null ) {
+            final Properties p = (Properties)this.properties.get(i);
+            value = p.getProperty(key);
+            i++;
+        }
+        if ( value == null ) {
+            value = defaultValue;
+        }
+        return value;
     }
 }

Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/Core.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/core/Core.java?view=diff&r1=149416&r2=149417
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/core/Core.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/Core.java Tue Feb  1 
09:01:45 2005
@@ -20,13 +20,21 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.avalon.framework.CascadingRuntimeException;
+import org.apache.avalon.framework.context.Context;
+import org.apache.avalon.framework.context.ContextException;
+import org.apache.cocoon.configuration.Settings;
+
 /**
  * The Core
  * 
- * @version SVN $Id:$
+ * @version SVN $Id$
  */
 public class Core {
 
+    /** Application <code>Context</code> Key for the settings @since 2.2 */
+    public static final String CONTEXT_SETTINGS = "settings";
+
     private static final ThreadLocal cleanup = new InheritableThreadLocal();
     
     public static void addCleanupTask(CleanupTask task) {
@@ -49,8 +57,25 @@
             l.clear();
         }
     }
+    
     public static interface CleanupTask {
         
         void invoke();
     }
+    
+    /**
+     * Return the current response
+     * @param context The component context
+     * @return The response
+     * @since 2.2
+     */
+    public static final Settings getSettings(Context context) {
+        // the settings object is always present
+        try {
+            return (Settings)context.get(CONTEXT_SETTINGS);
+        } catch (ContextException ce) {
+            throw new CascadingRuntimeException("Unable to get the settings 
object from the context.", ce);
+        }
+    }
+    
 }

Modified: 
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ComponentEnvironment.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ComponentEnvironment.java?view=diff&r1=149416&r2=149417
==============================================================================
--- 
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ComponentEnvironment.java
 (original)
+++ 
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/ComponentEnvironment.java
 Tue Feb  1 09:01:45 2005
@@ -25,6 +25,8 @@
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.cocoon.components.ComponentInfo;
 import org.apache.cocoon.configuration.ConfigurationBuilder;
+import org.apache.cocoon.configuration.Settings;
+import org.apache.cocoon.core.Core;
 
 /**
  * The component enviromnent contains all objects necessary to create
@@ -71,7 +73,8 @@
         ComponentInfo ci = null;
         final InputStream is = 
this.classLoader.getResourceAsStream(bu.toString());
         if ( is != null ) {
-            final ConfigurationBuilder cb = new ConfigurationBuilder();
+            final Settings settings = Core.getSettings(this.context);
+            final ConfigurationBuilder cb = new ConfigurationBuilder(settings);
             final Configuration conf = cb.build(is);
             ci = new ComponentInfo();
             ci.fill(conf);

Modified: 
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CoreServiceManager.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CoreServiceManager.java?view=diff&r1=149416&r2=149417
==============================================================================
--- 
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CoreServiceManager.java
 (original)
+++ 
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/CoreServiceManager.java
 Tue Feb  1 09:01:45 2005
@@ -44,6 +44,8 @@
 import org.apache.avalon.framework.thread.ThreadSafe;
 import org.apache.cocoon.components.ComponentInfo;
 import org.apache.cocoon.configuration.ConfigurationBuilder;
+import org.apache.cocoon.configuration.Settings;
+import org.apache.cocoon.core.Core;
 import org.apache.cocoon.core.container.handler.AbstractComponentHandler;
 import org.apache.cocoon.core.container.handler.AliasComponentHandler;
 import org.apache.cocoon.core.container.handler.ComponentHandler;
@@ -715,7 +717,8 @@
                 // load it and store it in the read set
                 Configuration includeConfig = null;
                 try {
-                    ConfigurationBuilder builder = new ConfigurationBuilder();
+                    final Settings settings = Core.getSettings(context);
+                    ConfigurationBuilder builder = new 
ConfigurationBuilder(settings);
                     includeConfig = builder.build(src.getInputStream(), uri);
                 } catch (ConfigurationException ce) {
                     throw ce;

Modified: 
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/util/PropertyHelper.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/core/container/util/PropertyHelper.java?view=diff&r1=149416&r2=149417
==============================================================================
--- 
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/util/PropertyHelper.java
 (original)
+++ 
cocoon/trunk/src/core/java/org/apache/cocoon/core/container/util/PropertyHelper.java
 Tue Feb  1 09:01:45 2005
@@ -16,6 +16,8 @@
  */
 package org.apache.cocoon.core.container.util;
 
+import org.apache.cocoon.configuration.Settings;
+
 /**
  * Helper class for replacing property references with the value of the
  * property
@@ -24,11 +26,11 @@
  */
 public class PropertyHelper {
 
-    /**
+        /**
      * Replace all property references in the string with the current value
      * and return it.
      */
-    public static String replace(String value) {
+    public static String replace(String value, Settings settings) {
         // quick test for null or no references
         if ( value == null || value.indexOf("${") == -1 ) {
             return value;
@@ -64,7 +66,7 @@
                     prev = value.length();
                 } else {
                     final String propertyName = value.substring(pos + 2, 
endName);
-                    String propertyValue = getProperty(propertyName);
+                    String propertyValue = getProperty(propertyName, settings);
                     // compatibility fallback - if the value is null, just 
readd token
                     if (propertyValue == null) {
                         buffer.append("${");
@@ -85,7 +87,14 @@
         return buffer.toString();
     }
 
-    static String getProperty(String name) {
-        return System.getProperty(name);    
+    static String getProperty(String name, Settings settings) {
+        String value = null;
+        if ( settings != null ) {
+            value = settings.getProperty(name);
+        }
+        if ( value == null ) {
+            value = System.getProperty(name);
+        }
+        return value;
     }
 }

Modified: 
cocoon/trunk/src/core/test/org/apache/cocoon/core/container/util/PropertyHelperTestCase.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/core/test/org/apache/cocoon/core/container/util/PropertyHelperTestCase.java?view=diff&r1=149416&r2=149417
==============================================================================
--- 
cocoon/trunk/src/core/test/org/apache/cocoon/core/container/util/PropertyHelperTestCase.java
 (original)
+++ 
cocoon/trunk/src/core/test/org/apache/cocoon/core/container/util/PropertyHelperTestCase.java
 Tue Feb  1 09:01:45 2005
@@ -31,11 +31,11 @@
         final String testC = "and this is the } end token";
         final String testD = "${this.does.not.exists}";
         // some tests for not! replacing
-        assertEquals(PropertyHelper.replace(testA), testA);
-        assertEquals(PropertyHelper.replace(testB), testB);
-        assertEquals(PropertyHelper.replace(testC), testC);
-        assertEquals(PropertyHelper.replace(testD), testD);
+        assertEquals(PropertyHelper.replace(testA, null), testA);
+        assertEquals(PropertyHelper.replace(testB, null), testB);
+        assertEquals(PropertyHelper.replace(testC, null), testC);
+        assertEquals(PropertyHelper.replace(testD, null), testD);
         // and finally we have something to replace
-        assertEquals(PropertyHelper.replace("${java.home}"), 
System.getProperty("java.home"));
+        assertEquals(PropertyHelper.replace("${java.home}", null), 
System.getProperty("java.home"));
     }
 }

Modified: cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java?view=diff&r1=149416&r2=149417
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/Cocoon.java Tue Feb  1 09:01:45 2005
@@ -42,6 +42,8 @@
 import org.apache.cocoon.components.source.SourceUtil;
 import org.apache.cocoon.components.source.impl.DelayedRefreshSourceWrapper;
 import org.apache.cocoon.configuration.ConfigurationBuilder;
+import org.apache.cocoon.configuration.Settings;
+import org.apache.cocoon.core.Core;
 import org.apache.cocoon.core.container.RoleManager;
 import org.apache.cocoon.environment.Environment;
 import org.apache.cocoon.environment.ObjectModelHelper;
@@ -251,7 +253,8 @@
     private void configure() throws Exception {
         InputSource is = SourceUtil.getInputSource(this.configurationFile);
 
-        ConfigurationBuilder builder = new ConfigurationBuilder();
+        final Settings settings = Core.getSettings(context);
+        ConfigurationBuilder builder = new ConfigurationBuilder(settings);
         Configuration conf = builder.build(is);
 
         if (getLogger().isDebugEnabled()) {

Modified: cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java?view=diff&r1=149416&r2=149417
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java Tue Feb  1 
09:01:45 2005
@@ -43,6 +43,8 @@
 import org.apache.cocoon.Constants;
 import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.components.ContextHelper;
+import org.apache.cocoon.configuration.Settings;
+import org.apache.cocoon.core.Core;
 import org.apache.cocoon.environment.Environment;
 import org.apache.cocoon.environment.commandline.CommandLineContext;
 import org.apache.cocoon.environment.commandline.FileSavingEnvironment;
@@ -158,6 +160,8 @@
             appContext.put(Constants.CONTEXT_CONFIG_URL, conf.toURL());
             appContext.put(Constants.CONTEXT_DEFAULT_ENCODING, "ISO-8859-1");
             appContext.put(ContextHelper.CONTEXT_ROOT_URL, 
this.context.toURL().toExternalForm());
+            // FIXME - add settings
+            appContext.put(Core.CONTEXT_SETTINGS, new Settings());
 
             loadClasses(classList);
 

Modified: cocoon/trunk/src/java/org/apache/cocoon/components/ContextHelper.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/ContextHelper.java?view=diff&r1=149416&r2=149417
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/components/ContextHelper.java 
(original)
+++ cocoon/trunk/src/java/org/apache/cocoon/components/ContextHelper.java Tue 
Feb  1 09:01:45 2005
@@ -112,4 +112,5 @@
             throw new CascadingRuntimeException("Unable to get the service 
manager from the context.", ce);
         }        
     }
+
 }

Modified: 
cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java?view=diff&r1=149416&r2=149417
==============================================================================
--- 
cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java 
(original)
+++ 
cocoon/trunk/src/java/org/apache/cocoon/components/container/LoggingHelper.java 
Tue Feb  1 09:01:45 2005
@@ -114,7 +114,7 @@
                 Source source = null;
                 try {
                     source = resolver.resolveURI(logkitConfig);
-                    final ConfigurationBuilder builder = new 
ConfigurationBuilder();
+                    final ConfigurationBuilder builder = new 
ConfigurationBuilder(settings);
                     final Configuration conf = 
builder.build(source.getInputStream());
                     final DefaultConfiguration categories = 
(DefaultConfiguration)conf.getChild("categories");
                     final DefaultConfiguration targets = 
(DefaultConfiguration)conf.getChild("targets");

Modified: cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java?view=diff&r1=149416&r2=149417
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java 
(original)
+++ cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java Tue Feb  
1 09:01:45 2005
@@ -59,6 +59,7 @@
 import org.apache.cocoon.components.notification.Notifier;
 import org.apache.cocoon.components.notification.Notifying;
 import org.apache.cocoon.configuration.Settings;
+import org.apache.cocoon.core.Core;
 import org.apache.cocoon.environment.Environment;
 import org.apache.cocoon.environment.http.HttpContext;
 import org.apache.cocoon.environment.http.HttpEnvironment;
@@ -230,6 +231,7 @@
 
         // initialize settings
         this.settings = this.getSettings();
+        this.appContext.put(Core.CONTEXT_SETTINGS, this.settings);
         
         if (this.settings.isInitClassloader()) {
             // Force context classloader so that JAXP can work correctly
@@ -427,6 +429,7 @@
             try {
                 Thread.currentThread().setContextClassLoader(this.classLoader);
             } catch (Exception e) {
+                // ignore this
             }
         }
 


Reply via email to