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 } }