Author: berndf
Date: Thu Aug 23 09:39:54 2007
New Revision: 569066

URL: http://svn.apache.org/viewvc?rev=569066&view=rev
Log:
refactored out configuration data structure traversal into abstract base class
added configuration interceptor replacing parts of configuration values
now, there are no longer directories created outside the working directory, 
namely ../apps/$stuff now goes under ./var/$stuff

Added:
    
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/StringRemapperConfigurationInterceptor.java
      - copied, changed from r565286, 
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/UnprivilegedPortConfigurationInterceptor.java
    
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/TraversingConfigurationInterceptor.java
Modified:
    
james/server/sandbox/spring-integration/spring-deployment/src/main/config/beans-base-config.xml
    
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/UnprivilegedPortConfigurationInterceptor.java

Modified: 
james/server/sandbox/spring-integration/spring-deployment/src/main/config/beans-base-config.xml
URL: 
http://svn.apache.org/viewvc/james/server/sandbox/spring-integration/spring-deployment/src/main/config/beans-base-config.xml?rev=569066&r1=569065&r2=569066&view=diff
==============================================================================
--- 
james/server/sandbox/spring-integration/spring-deployment/src/main/config/beans-base-config.xml
 (original)
+++ 
james/server/sandbox/spring-integration/spring-deployment/src/main/config/beans-base-config.xml
 Thu Aug 23 09:39:54 2007
@@ -49,15 +49,29 @@
 
     <!-- 
          maps the default standard ports for SMTP, POP3, IMAP, NNTP to 
non-privileged ports in the
-         9000's range
+         9000's range (must be activated in "configurationProvider"-bean)
     -->
-    <bean id="exampleConfigurationInterceptor" 
class="org.apache.james.container.spring.examples.configuration.UnprivilegedPortConfigurationInterceptor"
 />
+    <bean id="privilegedPortsConfigurationInterceptor" 
class="org.apache.james.container.spring.examples.configuration.UnprivilegedPortConfigurationInterceptor"
 />
     
+    <!--
+         replaces strings in configuration values
+    -->
+    <bean id="stringRemapperConfigurationInterceptor" 
class="org.apache.james.container.spring.examples.configuration.StringRemapperConfigurationInterceptor">
+        <property name="mappings">
+            <map>
+                <!-- avoid having folders be generated outside the working 
directory -->
+                <entry key="../apps/" value="./var/"/>
+            </map>
+        </property>
+    </bean>
+
+
     <bean id="configurationProvider" 
class="org.apache.james.container.spring.adaptor.AvalonConfigurationFileProvider"
 >
         <property name="configurationPath" 
value="src/main/config/james-config.xml" />
         <property name="configurationInterceptors">
             <list>
-                <!--<ref bean="exampleConfigurationInterceptor" />-->
+                <ref bean="stringRemapperConfigurationInterceptor" />
+                <!--<ref bean="privilegedPortsConfigurationInterceptor" />-->
             </list>
         </property>
     </bean>

Copied: 
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/StringRemapperConfigurationInterceptor.java
 (from r565286, 
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/UnprivilegedPortConfigurationInterceptor.java)
URL: 
http://svn.apache.org/viewvc/james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/StringRemapperConfigurationInterceptor.java?p2=james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/StringRemapperConfigurationInterceptor.java&p1=james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/UnprivilegedPortConfigurationInterceptor.java&r1=565286&r2=569066&rev=569066&view=diff
==============================================================================
--- 
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/UnprivilegedPortConfigurationInterceptor.java
 (original)
+++ 
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/StringRemapperConfigurationInterceptor.java
 Thu Aug 23 09:39:54 2007
@@ -18,37 +18,70 @@
  ****************************************************************/
 package org.apache.james.container.spring.examples.configuration;
 
-import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.configuration.MutableConfiguration;
-import 
org.apache.james.container.spring.configuration.ConfigurationInterceptor;
+import org.apache.commons.lang.StringUtils;
+
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
 
 /**
- * re-maps all privileged ports into the 9000's range
+ * re-maps arbitrary string values. handles pure literal Strings, not Regular 
Expressions
  */
-public class UnprivilegedPortConfigurationInterceptor implements 
ConfigurationInterceptor {
+public class StringRemapperConfigurationInterceptor extends 
TraversingConfigurationInterceptor {
     
-    public Configuration intercept(Configuration configuration) {
-        interceptInternal(configuration);
-        return configuration;
+    private final Map mappings = new LinkedHashMap();
+
+    /**
+     * @param mappings - Map<String, String>, key being the string to be 
replaced, value being the replacement
+     */
+    public void setMappings(Map mappings) {
+        this.mappings.putAll(mappings);
+    }
+
+    protected void process(MutableConfiguration mutableConfiguration) {
+
+        processAttributes(mutableConfiguration);
+        processValue(mutableConfiguration);
     }
 
-    private void interceptInternal(Configuration configuration) {
-        String name = configuration.getName();
-        if ("port".equals(name) && configuration instanceof 
MutableConfiguration) {
-            MutableConfiguration mutableConfiguration = (MutableConfiguration) 
configuration;
-            int port = configuration.getValueAsInteger(0);
-            if (port > 0 && port < 1024) {
-                // map privileged port to unprivileged in the 9000's range
-                port += 9000;
+    private void processAttributes(MutableConfiguration mutableConfiguration) {
+        String[] attributeNames = mutableConfiguration.getAttributeNames();
+        for (int i = 0; i < attributeNames.length; i++) {
+            String attributeName = attributeNames[i];
+            String attributeValue = null;
+            try {
+                attributeValue = 
mutableConfiguration.getAttribute(attributeName);
+            } catch (ConfigurationException e) {
+                continue; // if value is not accessible, skip it
             }
-            mutableConfiguration.setValue(port);
+
+            Iterator iterator = mappings.keySet().iterator();
+            while (iterator.hasNext()) {
+                String find = (String) iterator.next();
+                String replacement = (String) mappings.get(find);
+                String replaced = StringUtils.replace(attributeValue, find, 
replacement);
+                mutableConfiguration.setAttribute(attributeName, replaced);
+            }
+        }
+    }
+
+    private void processValue(MutableConfiguration mutableConfiguration) {
+        String value = null;
+        try {
+            value = mutableConfiguration.getValue();
+        } catch (ConfigurationException e) {
+            return; // if value is inaccessible, we better skip it
         }
+        if (value == null) return;
 
-        // go deep.
-        Configuration[] children = configuration.getChildren();
-        for (int i = 0; i < children.length; i++) {
-            Configuration childConfiguration = children[i];
-            interceptInternal(childConfiguration);
+        Iterator iterator = mappings.keySet().iterator();
+        while (iterator.hasNext()) {
+            String find = (String) iterator.next();
+            String replacement = (String) mappings.get(find);
+            String replaced = StringUtils.replace(value, find, replacement);
+            mutableConfiguration.setValue(replaced);
         }
     }
-}
+}
\ No newline at end of file

Added: 
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/TraversingConfigurationInterceptor.java
URL: 
http://svn.apache.org/viewvc/james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/TraversingConfigurationInterceptor.java?rev=569066&view=auto
==============================================================================
--- 
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/TraversingConfigurationInterceptor.java
 (added)
+++ 
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/TraversingConfigurationInterceptor.java
 Thu Aug 23 09:39:54 2007
@@ -0,0 +1,31 @@
+package org.apache.james.container.spring.examples.configuration;
+
+import 
org.apache.james.container.spring.configuration.ConfigurationInterceptor;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.MutableConfiguration;
+
+/**
+ * traverses over all configurations in the configuration tree
+ */
+public abstract class TraversingConfigurationInterceptor implements 
ConfigurationInterceptor {
+    public Configuration intercept(Configuration configuration) {
+        interceptInternal(configuration);
+        return configuration;
+    }
+
+    private void interceptInternal(Configuration configuration) {
+        if (configuration instanceof MutableConfiguration) {
+            MutableConfiguration mutableConfiguration = (MutableConfiguration) 
configuration;
+            process(mutableConfiguration);
+        }
+
+        // go deep.
+        Configuration[] children = configuration.getChildren();
+        for (int i = 0; i < children.length; i++) {
+            Configuration childConfiguration = children[i];
+            interceptInternal(childConfiguration);
+        }
+    }
+
+    protected abstract void process(MutableConfiguration mutableConfiguration);
+}

Modified: 
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/UnprivilegedPortConfigurationInterceptor.java
URL: 
http://svn.apache.org/viewvc/james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/UnprivilegedPortConfigurationInterceptor.java?rev=569066&r1=569065&r2=569066&view=diff
==============================================================================
--- 
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/UnprivilegedPortConfigurationInterceptor.java
 (original)
+++ 
james/server/sandbox/spring-integration/spring-deployment/src/main/java/org/apache/james/container/spring/examples/configuration/UnprivilegedPortConfigurationInterceptor.java
 Thu Aug 23 09:39:54 2007
@@ -18,37 +18,22 @@
  ****************************************************************/
 package org.apache.james.container.spring.examples.configuration;
 
-import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.MutableConfiguration;
-import 
org.apache.james.container.spring.configuration.ConfigurationInterceptor;
 
 /**
  * re-maps all privileged ports into the 9000's range
  */
-public class UnprivilegedPortConfigurationInterceptor implements 
ConfigurationInterceptor {
-    
-    public Configuration intercept(Configuration configuration) {
-        interceptInternal(configuration);
-        return configuration;
-    }
+public class UnprivilegedPortConfigurationInterceptor extends 
TraversingConfigurationInterceptor {
 
-    private void interceptInternal(Configuration configuration) {
-        String name = configuration.getName();
-        if ("port".equals(name) && configuration instanceof 
MutableConfiguration) {
-            MutableConfiguration mutableConfiguration = (MutableConfiguration) 
configuration;
-            int port = configuration.getValueAsInteger(0);
+    protected void process(MutableConfiguration mutableConfiguration) {
+        String name = mutableConfiguration.getName();
+        if ("port".equals(name)) {
+            int port = mutableConfiguration.getValueAsInteger(0);
             if (port > 0 && port < 1024) {
                 // map privileged port to unprivileged in the 9000's range
                 port += 9000;
             }
             mutableConfiguration.setValue(port);
-        }
-
-        // go deep.
-        Configuration[] children = configuration.getChildren();
-        for (int i = 0; i < children.length; i++) {
-            Configuration childConfiguration = children[i];
-            interceptInternal(childConfiguration);
         }
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to