You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by at...@apache.org on 2008/04/18 13:40:41 UTC

svn commit: r649469 - in /portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/util: ./ ConfigurationProperties.java

Author: ate
Date: Fri Apr 18 04:40:38 2008
New Revision: 649469

URL: http://svn.apache.org/viewvc?rev=649469&view=rev
Log:
Adding correct usage of the "override" behavior for override.properties.
Loading property files with Commons Configuration using the "include" construct does *not* provide real override behavior, but instead *appends* values of duplicate keys!!!
This bean (for usage within the Spring assembly) fixes this by loading the defined property files individually and using the Commons ConfigurationUtils to *copy* the values.
NB: the JetspeedServlet currently uses similar "incorrect" loading of the jetspeed.properties+override.properties, which I will correct as well (as well as adding many more improvements).

Added:
    portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/util/ConfigurationProperties.java   (with props)
Modified:
    portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/util/   (props changed)

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/util/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Fri Apr 18 04:40:38 2008
@@ -1,2 +1,2 @@
-target
+target
 surefire*.properties

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/util/ConfigurationProperties.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/util/ConfigurationProperties.java?rev=649469&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/util/ConfigurationProperties.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/util/ConfigurationProperties.java Fri Apr 18 04:40:38 2008
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jetspeed.components.util;
+
+import java.io.InputStream;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.commons.configuration.ConfigurationUtils;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.core.io.Resource;
+
+/**
+ * <p>
+ * ConfigurationProperties is a Spring wrapper for Commons PropertiesConfiguration
+ * allowing loading multiple properties files with overriding behavior as well as
+ * predefining local/inline properties to be loaded first.
+ * </p>
+ * <p>
+ * Multiple properties files are loaded in sequence of definition and <em>copied</em>
+ * over each other, instead of being added/appended as Commons Configuration does by default
+ * when multiple definitions of the same property key is loaded.
+ * </p>
+ * @version $Id$
+ *
+ */
+public class ConfigurationProperties extends PropertiesConfiguration implements InitializingBean
+{
+    private Resource[] locations;
+    private Properties[] localProperties;
+
+    public void setProperties(Properties properties) {
+        this.localProperties = new Properties[] {properties};
+    }
+
+    public void setLocation(Resource location) {
+        this.locations = new Resource[] {location};
+    }
+
+    public void setLocations(Resource[] locations) {
+        this.locations = locations;
+    }
+
+    public void afterPropertiesSet() throws Exception
+    {
+        if (localProperties != null)
+        {
+            for (Properties props : localProperties)
+            {
+                for (Map.Entry entry : props.entrySet())
+                {
+                    setProperty((String)entry.getKey(), entry.getValue());
+                }
+            }
+        }
+        
+        if (this.locations != null)
+        {
+            for (int i = 0; i < this.locations.length; i++)
+            {
+                Resource location = this.locations[i];
+                InputStream is = null;
+                try 
+                {
+                    is = location.getInputStream();
+                    PropertiesConfiguration config = this;
+                    if (i > 0)
+                    {
+                        config = new PropertiesConfiguration();
+                    }
+                    config.load(is);
+                    if (i > 0)
+                    {
+                        ConfigurationUtils.copy(config,this);
+                        config.clear();
+                    }
+                }
+                finally 
+                {
+                    if (is != null) 
+                    {
+                        is.close();
+                    }
+                }
+            }
+        }
+    }
+}

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/util/ConfigurationProperties.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/util/ConfigurationProperties.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/util/ConfigurationProperties.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org