You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by se...@apache.org on 2001/09/11 06:32:44 UTC
cvs commit: jakarta-james/src/java/org/apache/james/core AvalonMailStore.java AvalonMailStore.xinfo AvalonUsersStore.xinfo
serge 01/09/10 21:32:44
Modified: src/java/org/apache/james/core AvalonMailStore.java
AvalonMailStore.xinfo AvalonUsersStore.xinfo
Log:
Adding code from userstore branch.
Revision Changes Path
1.6 +68 -5 jakarta-james/src/java/org/apache/james/core/AvalonMailStore.java
Index: AvalonMailStore.java
===================================================================
RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/core/AvalonMailStore.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- AvalonMailStore.java 2001/08/16 13:53:16 1.5
+++ AvalonMailStore.java 2001/09/11 04:32:44 1.6
@@ -19,6 +19,7 @@
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.configuration.DefaultConfiguration;
import org.apache.avalon.framework.logger.Loggable;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.james.services.MailRepository;
@@ -28,12 +29,12 @@
import org.apache.avalon.phoenix.Block;
/**
- *
- * @author <a href="mailto:fede@apache.org">Federico Barbieri</a>
- *
* Provides Registry of mail repositories. A mail repository is uniquely
- * identified
+ * identified
* by destinationURL, type and model.
+ *
+ * @author <a href="mailto:fede@apache.org">Federico Barbieri</a>
+ * @author Darrell DeBoer <dd...@bigdaz.com>
*/
public class AvalonMailStore
extends AbstractLoggable
@@ -46,6 +47,10 @@
// map of [protocol(destinationURL) + type ]->classname of repository;
private HashMap classes;
+
+ // map of [Repository Class]->default config for repository.
+ private HashMap defaultConfigs;
+
protected Configuration configuration;
protected ComponentManager componentManager;
@@ -69,6 +74,7 @@
getLogger().info("JamesMailStore init...");
repositories = new HashMap();
classes = new HashMap();
+ defaultConfigs = new HashMap();
Configuration[] registeredClasses
= configuration.getChild("repositories").getChildren("repository");
for ( int i = 0; i < registeredClasses.length; i++ )
@@ -109,6 +115,12 @@
getLogger().info("Registered class: " + key+"->"+className);
}
}
+
+ // Get the default configuration for this Repository class.
+ Configuration defConf = repConf.getChild("config");
+ if ( defConf != null ) {
+ defaultConfigs.put(className, defConf);
+ }
}
public void release(Component component)
@@ -155,6 +167,22 @@
getLogger().debug( "Need instance of " + repClass +
" to handle: " + protocol + "," + type );
+ // If default values have been set, create a new repository
+ // configuration element using the default values
+ // and the values in the selector.
+ // If no default values, just use the selector.
+ Configuration config;
+ Configuration defConf = (Configuration)defaultConfigs.get(repClass);
+ if ( defConf == null) {
+ config = repConf;
+ }
+ else {
+ config = new DefaultConfiguration(repConf.getName(),
+ repConf.getLocation());
+ copyConfig(defConf, (DefaultConfiguration)config);
+ copyConfig(repConf, (DefaultConfiguration)config);
+ }
+
try {
reply
= (MailRepository) Class.forName(repClass).newInstance();
@@ -162,7 +190,7 @@
setupLogger(reply);
}
if (reply instanceof Configurable) {
- ((Configurable) reply).configure(repConf);
+ ((Configurable) reply).configure(config);
}
if (reply instanceof Composable) {
((Composable) reply).compose( componentManager );
@@ -207,5 +235,40 @@
getLogger().error("Exception AvalonMailStore.hasComponent-"+ex.toString());
}
return (comp != null);
+ }
+
+ /**
+ * Copies values from one config into another, overwriting duplicate attributes
+ * and merging children.
+ */
+ private void copyConfig(Configuration fromConfig, DefaultConfiguration toConfig)
+ {
+ // Copy attributes
+ String[] attrs = fromConfig.getAttributeNames();
+ for ( int i = 0; i < attrs.length; i++ ) {
+ String attrName = attrs[i];
+ String attrValue = fromConfig.getAttribute(attrName, null);
+ toConfig.setAttribute(attrName, attrValue);
+ }
+
+ // Copy children
+ Configuration[] children = fromConfig.getChildren();
+ for ( int i = 0; i < children.length; i++ ) {
+ Configuration child = children[i];
+ String childName = child.getName();
+ Configuration existingChild = toConfig.getChild(childName, false);
+ if ( existingChild == null ) {
+ toConfig.addChild(child);
+ }
+ else {
+ copyConfig(child, (DefaultConfiguration)existingChild);
+ }
+ }
+
+ // Copy value
+ String val = fromConfig.getValue(null);
+ if ( val != null ) {
+ toConfig.setValue(val);
+ }
}
}
1.2 +4 -0 jakarta-james/src/java/org/apache/james/core/AvalonMailStore.xinfo
Index: AvalonMailStore.xinfo
===================================================================
RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/core/AvalonMailStore.xinfo,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AvalonMailStore.xinfo 2001/05/11 09:15:43 1.1
+++ AvalonMailStore.xinfo 2001/09/11 04:32:44 1.2
@@ -21,6 +21,10 @@
<role>org.apache.avalon.cornerstone.services.store.Store</role>
<service name="org.apache.avalon.cornerstone.services.store.Store" version="1.0"/>
</dependency>
+ <dependency>
+ <role>org.apache.avalon.cornerstone.services.datasource.DataSourceSelector</role>
+ <service name="org.apache.avalon.cornerstone.services.datasource.DataSourceSelector" version="1.0"/>
+ </dependency>
</dependencies>
</blockinfo>
1.2 +4 -0 jakarta-james/src/java/org/apache/james/core/AvalonUsersStore.xinfo
Index: AvalonUsersStore.xinfo
===================================================================
RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/core/AvalonUsersStore.xinfo,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AvalonUsersStore.xinfo 2001/05/11 09:15:43 1.1
+++ AvalonUsersStore.xinfo 2001/09/11 04:32:44 1.2
@@ -20,6 +20,10 @@
<role>org.apache.avalon.cornerstone.services.store.Store</role>
<service name="org.apache.avalon.cornerstone.services.store.Store" version="1.0"/>
</dependency>
+ <dependency>
+ <role>org.apache.avalon.cornerstone.services.datasource.DataSourceSelector</role>
+ <service name="org.apache.avalon.cornerstone.services.datasource.DataSourceSelector" version="1.0"/>
+ </dependency>
</dependencies>
</blockinfo>
---------------------------------------------------------------------
To unsubscribe, e-mail: james-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: james-dev-help@jakarta.apache.org