You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ma...@apache.org on 2019/02/12 09:02:18 UTC

[archiva] branch master updated: Deactivating code generation. Moving generated code to src tree. Adding licensing part to files

This is an automated email from the ASF dual-hosted git repository.

martin_s pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/archiva.git


The following commit(s) were added to refs/heads/master by this push:
     new 790e38f  Deactivating code generation. Moving generated code to src tree. Adding licensing part to files
790e38f is described below

commit 790e38f5ec27d5cd6da8502b52d9750a169b3e4d
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Mon Feb 11 17:42:11 2019 +0100

    Deactivating code generation.
    Moving generated code to src tree.
    Adding licensing part to files
---
 .../archiva-base/archiva-configuration/pom.xml     |   42 -
 .../AbstractRepositoryConfiguration.java           |  262 +++
 .../AbstractRepositoryConnectorConfiguration.java  |  359 ++++
 .../configuration/ArchivaDefaultConfiguration.java |   93 +
 .../configuration/ArchivaRuntimeConfiguration.java |  236 +++
 .../archiva/configuration/CacheConfiguration.java  |  141 ++
 .../archiva/configuration/Configuration.java       |  845 +++++++++
 .../configuration/FileLockConfiguration.java       |   91 +
 .../org/apache/archiva/configuration/FileType.java |  146 ++
 .../archiva/configuration/LdapConfiguration.java   |  384 ++++
 .../archiva/configuration/LdapGroupMapping.java    |  116 ++
 .../archiva/configuration/LegacyArtifactPath.java  |  158 ++
 .../ManagedRepositoryConfiguration.java            |  353 ++++
 .../configuration/NetworkConfiguration.java        |  119 ++
 .../configuration/NetworkProxyConfiguration.java   |  259 +++
 .../configuration/OrganisationInformation.java     |  118 ++
 .../configuration/ProxyConnectorConfiguration.java |  120 ++
 .../ProxyConnectorRuleConfiguration.java           |  147 ++
 .../configuration/RedbackRuntimeConfiguration.java |  341 ++++
 .../RemoteRepositoryConfiguration.java             |  452 +++++
 .../archiva/configuration/RepositoryCheckPath.java |   96 +
 .../RepositoryGroupConfiguration.java              |  198 ++
 .../RepositoryScanningConfiguration.java           |  191 ++
 .../configuration/SyncConnectorConfiguration.java  |   95 +
 .../configuration/UserInterfaceOptions.java        |  170 ++
 .../archiva/configuration/WebappConfiguration.java |   68 +
 .../io/registry/ConfigurationRegistryReader.java   | 1944 ++++++++++++++++++++
 .../io/registry/ConfigurationRegistryWriter.java   | 1335 ++++++++++++++
 28 files changed, 8837 insertions(+), 42 deletions(-)

diff --git a/archiva-modules/archiva-base/archiva-configuration/pom.xml b/archiva-modules/archiva-base/archiva-configuration/pom.xml
index e03bebe..7569029 100644
--- a/archiva-modules/archiva-base/archiva-configuration/pom.xml
+++ b/archiva-modules/archiva-base/archiva-configuration/pom.xml
@@ -148,48 +148,6 @@
   <build>
     <plugins>
       <plugin>
-        <groupId>org.codehaus.modello</groupId>
-        <artifactId>modello-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>java</goal>
-            </goals>
-          </execution>
-          <execution>
-            <id>archiva-registry-reader</id>
-            <goals>
-              <goal>generate</goal>
-            </goals>
-            <configuration>
-              <generatorId>registry-reader</generatorId>
-            </configuration>
-          </execution>
-          <execution>
-            <id>archiva-registry-writer</id>
-            <goals>
-              <goal>generate</goal>
-            </goals>
-            <configuration>
-              <generatorId>registry-writer</generatorId>
-            </configuration>
-          </execution>
-          <execution>
-            <id>site-docs</id>
-            <phase>pre-site</phase>
-            <goals>
-              <goal>xdoc</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <version>3.0.0</version>
-          <models>
-            <model>src/main/mdo/configuration.mdo</model>
-          </models>
-        </configuration>
-      </plugin>
-      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/AbstractRepositoryConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/AbstractRepositoryConfiguration.java
new file mode 100644
index 0000000..695f0c0
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/AbstractRepositoryConfiguration.java
@@ -0,0 +1,262 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class AbstractRepositoryConfiguration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class AbstractRepositoryConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * 
+     *             The repository identifier.
+     *           
+     */
+    private String id;
+
+    /**
+     * 
+     *             The repository type. Currently only MAVEN type
+     * is known.
+     *           
+     */
+    private String type = "MAVEN";
+
+    /**
+     * 
+     *             The descriptive name of the repository.
+     *           
+     */
+    private String name;
+
+    /**
+     * 
+     *             The layout of the repository. Valid values are
+     * "default" and "legacy".
+     *           
+     */
+    private String layout = "default";
+
+    /**
+     * 
+     *             The directory for the indexes of this
+     * repository.
+     *           
+     */
+    private String indexDir = "";
+
+    /**
+     * 
+     *             The directory for the packed indexes of this
+     * repository.
+     *           
+     */
+    private String packedIndexDir = "";
+
+    /**
+     * 
+     *             The description of this repository.
+     *           
+     */
+    private String description = "";
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get the description of this repository.
+     * 
+     * @return String
+     */
+    public String getDescription()
+    {
+        return this.description;
+    } //-- String getDescription()
+
+    /**
+     * Get the repository identifier.
+     * 
+     * @return String
+     */
+    public String getId()
+    {
+        return this.id;
+    } //-- String getId()
+
+    /**
+     * Get the directory for the indexes of this repository.
+     * 
+     * @return String
+     */
+    public String getIndexDir()
+    {
+        return this.indexDir;
+    } //-- String getIndexDir()
+
+    /**
+     * Get the layout of the repository. Valid values are "default"
+     * and "legacy".
+     * 
+     * @return String
+     */
+    public String getLayout()
+    {
+        return this.layout;
+    } //-- String getLayout()
+
+    /**
+     * Get the descriptive name of the repository.
+     * 
+     * @return String
+     */
+    public String getName()
+    {
+        return this.name;
+    } //-- String getName()
+
+    /**
+     * Get the directory for the packed indexes of this repository.
+     * 
+     * @return String
+     */
+    public String getPackedIndexDir()
+    {
+        return this.packedIndexDir;
+    } //-- String getPackedIndexDir()
+
+    /**
+     * Get the repository type. Currently only MAVEN type is known.
+     * 
+     * @return String
+     */
+    public String getType()
+    {
+        return this.type;
+    } //-- String getType()
+
+    /**
+     * Set the description of this repository.
+     * 
+     * @param description
+     */
+    public void setDescription( String description )
+    {
+        this.description = description;
+    } //-- void setDescription( String )
+
+    /**
+     * Set the repository identifier.
+     * 
+     * @param id
+     */
+    public void setId( String id )
+    {
+        this.id = id;
+    } //-- void setId( String )
+
+    /**
+     * Set the directory for the indexes of this repository.
+     * 
+     * @param indexDir
+     */
+    public void setIndexDir( String indexDir )
+    {
+        this.indexDir = indexDir;
+    } //-- void setIndexDir( String )
+
+    /**
+     * Set the layout of the repository. Valid values are "default"
+     * and "legacy".
+     * 
+     * @param layout
+     */
+    public void setLayout( String layout )
+    {
+        this.layout = layout;
+    } //-- void setLayout( String )
+
+    /**
+     * Set the descriptive name of the repository.
+     * 
+     * @param name
+     */
+    public void setName( String name )
+    {
+        this.name = name;
+    } //-- void setName( String )
+
+    /**
+     * Set the directory for the packed indexes of this repository.
+     * 
+     * @param packedIndexDir
+     */
+    public void setPackedIndexDir( String packedIndexDir )
+    {
+        this.packedIndexDir = packedIndexDir;
+    } //-- void setPackedIndexDir( String )
+
+    /**
+     * Set the repository type. Currently only MAVEN type is known.
+     * 
+     * @param type
+     */
+    public void setType( String type )
+    {
+        this.type = type;
+    } //-- void setType( String )
+
+    
+            public int hashCode()
+            {
+                int result = 17;
+                result = 37 * result + ( id != null ? id.hashCode() : 0 );
+                return result;
+            }
+
+            public boolean equals( Object other )
+            {
+                if ( this == other )
+                {
+                    return true;
+                }
+
+                if ( !( other instanceof AbstractRepositoryConfiguration ) )
+                {
+                    return false;
+                }
+
+                AbstractRepositoryConfiguration that = (AbstractRepositoryConfiguration) other;
+                boolean result = true;
+                result = result && ( getId() == null ? that.getId() == null : getId().equals( that.getId() ) );
+                return result;
+            }
+       
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/AbstractRepositoryConnectorConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/AbstractRepositoryConnectorConfiguration.java
new file mode 100644
index 0000000..22a4bc6
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/AbstractRepositoryConnectorConfiguration.java
@@ -0,0 +1,359 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class AbstractRepositoryConnectorConfiguration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class AbstractRepositoryConnectorConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * 
+     *             The Repository Source for this connector.
+     *           
+     */
+    private String sourceRepoId;
+
+    /**
+     * 
+     *             The Repository Target for this connector.
+     *           
+     */
+    private String targetRepoId;
+
+    /**
+     * 
+     *             The network proxy ID to use for this connector.
+     *           
+     */
+    private String proxyId;
+
+    /**
+     * Field blackListPatterns.
+     */
+    private java.util.List<String> blackListPatterns;
+
+    /**
+     * Field whiteListPatterns.
+     */
+    private java.util.List<String> whiteListPatterns;
+
+    /**
+     * Field policies.
+     */
+    private java.util.Map policies;
+
+    /**
+     * Field properties.
+     */
+    private java.util.Map properties;
+
+    /**
+     * 
+     *             If the the repository proxy connector is
+     * disabled or not
+     *           .
+     */
+    private boolean disabled = false;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addBlackListPattern.
+     * 
+     * @param string
+     */
+    public void addBlackListPattern( String string )
+    {
+        getBlackListPatterns().add( string );
+    } //-- void addBlackListPattern( String )
+
+    /**
+     * Method addPolicy.
+     * 
+     * @param key
+     * @param value
+     */
+    public void addPolicy( Object key, String value )
+    {
+        getPolicies().put( key, value );
+    } //-- void addPolicy( Object, String )
+
+    /**
+     * Method addProperty.
+     * 
+     * @param key
+     * @param value
+     */
+    public void addProperty( Object key, String value )
+    {
+        getProperties().put( key, value );
+    } //-- void addProperty( Object, String )
+
+    /**
+     * Method addWhiteListPattern.
+     * 
+     * @param string
+     */
+    public void addWhiteListPattern( String string )
+    {
+        getWhiteListPatterns().add( string );
+    } //-- void addWhiteListPattern( String )
+
+    /**
+     * Method getBlackListPatterns.
+     * 
+     * @return List
+     */
+    public java.util.List<String> getBlackListPatterns()
+    {
+        if ( this.blackListPatterns == null )
+        {
+            this.blackListPatterns = new java.util.ArrayList<String>();
+        }
+
+        return this.blackListPatterns;
+    } //-- java.util.List<String> getBlackListPatterns()
+
+    /**
+     * Method getPolicies.
+     * 
+     * @return Map
+     */
+    public java.util.Map getPolicies()
+    {
+        if ( this.policies == null )
+        {
+            this.policies = new java.util.HashMap();
+        }
+
+        return this.policies;
+    } //-- java.util.Map getPolicies()
+
+    /**
+     * Method getProperties.
+     * 
+     * @return Map
+     */
+    public java.util.Map getProperties()
+    {
+        if ( this.properties == null )
+        {
+            this.properties = new java.util.HashMap();
+        }
+
+        return this.properties;
+    } //-- java.util.Map getProperties()
+
+    /**
+     * Get the network proxy ID to use for this connector.
+     * 
+     * @return String
+     */
+    public String getProxyId()
+    {
+        return this.proxyId;
+    } //-- String getProxyId()
+
+    /**
+     * Get the Repository Source for this connector.
+     * 
+     * @return String
+     */
+    public String getSourceRepoId()
+    {
+        return this.sourceRepoId;
+    } //-- String getSourceRepoId()
+
+    /**
+     * Get the Repository Target for this connector.
+     * 
+     * @return String
+     */
+    public String getTargetRepoId()
+    {
+        return this.targetRepoId;
+    } //-- String getTargetRepoId()
+
+    /**
+     * Method getWhiteListPatterns.
+     * 
+     * @return List
+     */
+    public java.util.List<String> getWhiteListPatterns()
+    {
+        if ( this.whiteListPatterns == null )
+        {
+            this.whiteListPatterns = new java.util.ArrayList<String>();
+        }
+
+        return this.whiteListPatterns;
+    } //-- java.util.List<String> getWhiteListPatterns()
+
+    /**
+     * Get if the the repository proxy connector is disabled or
+     * not.
+     * 
+     * @return boolean
+     */
+    public boolean isDisabled()
+    {
+        return this.disabled;
+    } //-- boolean isDisabled()
+
+    /**
+     * Method removeBlackListPattern.
+     * 
+     * @param string
+     */
+    public void removeBlackListPattern( String string )
+    {
+        getBlackListPatterns().remove( string );
+    } //-- void removeBlackListPattern( String )
+
+    /**
+     * Method removeWhiteListPattern.
+     * 
+     * @param string
+     */
+    public void removeWhiteListPattern( String string )
+    {
+        getWhiteListPatterns().remove( string );
+    } //-- void removeWhiteListPattern( String )
+
+    /**
+     * Set the list of blacklisted patterns for this connector.
+     * 
+     * @param blackListPatterns
+     */
+    public void setBlackListPatterns( java.util.List<String> blackListPatterns )
+    {
+        this.blackListPatterns = blackListPatterns;
+    } //-- void setBlackListPatterns( java.util.List )
+
+    /**
+     * Set if the the repository proxy connector is disabled or
+     * not.
+     * 
+     * @param disabled
+     */
+    public void setDisabled( boolean disabled )
+    {
+        this.disabled = disabled;
+    } //-- void setDisabled( boolean )
+
+    /**
+     * Set policy configuration for the connector.
+     * 
+     * @param policies
+     */
+    public void setPolicies( java.util.Map policies )
+    {
+        this.policies = policies;
+    } //-- void setPolicies( java.util.Map )
+
+    /**
+     * Set configuration for the connector.
+     * 
+     * @param properties
+     */
+    public void setProperties( java.util.Map properties )
+    {
+        this.properties = properties;
+    } //-- void setProperties( java.util.Map )
+
+    /**
+     * Set the network proxy ID to use for this connector.
+     * 
+     * @param proxyId
+     */
+    public void setProxyId( String proxyId )
+    {
+        this.proxyId = proxyId;
+    } //-- void setProxyId( String )
+
+    /**
+     * Set the Repository Source for this connector.
+     * 
+     * @param sourceRepoId
+     */
+    public void setSourceRepoId( String sourceRepoId )
+    {
+        this.sourceRepoId = sourceRepoId;
+    } //-- void setSourceRepoId( String )
+
+    /**
+     * Set the Repository Target for this connector.
+     * 
+     * @param targetRepoId
+     */
+    public void setTargetRepoId( String targetRepoId )
+    {
+        this.targetRepoId = targetRepoId;
+    } //-- void setTargetRepoId( String )
+
+    /**
+     * Set the list of whitelisted patterns for this connector.
+     * 
+     * @param whiteListPatterns
+     */
+    public void setWhiteListPatterns( java.util.List<String> whiteListPatterns )
+    {
+        this.whiteListPatterns = whiteListPatterns;
+    } //-- void setWhiteListPatterns( java.util.List )
+
+    
+    /**
+     * Obtain a specific policy from the underlying connector.
+     *
+     * @param policyId the policy id to fetch.
+     * @param defaultValue the default value for the policy id.
+     * @return the configured policy value (or default value if not found).
+     */
+    public String getPolicy( String policyId, String defaultValue )
+    {
+        if ( this.getPolicies() == null )
+        {
+            return null;
+        }
+
+        Object value = this.getPolicies().get( policyId );
+
+        if ( value == null )
+        {
+            return defaultValue;
+        }
+
+        return (String) value;
+    }
+          
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaDefaultConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaDefaultConfiguration.java
new file mode 100644
index 0000000..3917cc8
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaDefaultConfiguration.java
@@ -0,0 +1,93 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * 
+ *       Archiva default settings.
+ *     
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class ArchivaDefaultConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field defaultCheckPaths.
+     */
+    private java.util.List<RepositoryCheckPath> defaultCheckPaths;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addDefaultCheckPath.
+     * 
+     * @param repositoryCheckPath
+     */
+    public void addDefaultCheckPath( RepositoryCheckPath repositoryCheckPath )
+    {
+        getDefaultCheckPaths().add( repositoryCheckPath );
+    } //-- void addDefaultCheckPath( RepositoryCheckPath )
+
+    /**
+     * Method getDefaultCheckPaths.
+     * 
+     * @return List
+     */
+    public java.util.List<RepositoryCheckPath> getDefaultCheckPaths()
+    {
+        if ( this.defaultCheckPaths == null )
+        {
+            this.defaultCheckPaths = new java.util.ArrayList<RepositoryCheckPath>();
+        }
+
+        return this.defaultCheckPaths;
+    } //-- java.util.List<RepositoryCheckPath> getDefaultCheckPaths()
+
+    /**
+     * Method removeDefaultCheckPath.
+     * 
+     * @param repositoryCheckPath
+     */
+    public void removeDefaultCheckPath( RepositoryCheckPath repositoryCheckPath )
+    {
+        getDefaultCheckPaths().remove( repositoryCheckPath );
+    } //-- void removeDefaultCheckPath( RepositoryCheckPath )
+
+    /**
+     * Set the default check paths for certain remote repositories.
+     * 
+     * @param defaultCheckPaths
+     */
+    public void setDefaultCheckPaths( java.util.List<RepositoryCheckPath> defaultCheckPaths )
+    {
+        this.defaultCheckPaths = defaultCheckPaths;
+    } //-- void setDefaultCheckPaths( java.util.List )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaRuntimeConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaRuntimeConfiguration.java
new file mode 100644
index 0000000..7d6f5d3
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaRuntimeConfiguration.java
@@ -0,0 +1,236 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * 
+ *         The runtime configuration.
+ *       
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class ArchivaRuntimeConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * the url failure cache configuration.
+     */
+    private CacheConfiguration urlFailureCacheConfiguration;
+
+    /**
+     * the FileLocking configuration.
+     */
+    private FileLockConfiguration fileLockConfiguration;
+
+    /**
+     * The base directory where the archiva data is stored. If not
+     * set, the appserver.base is used.
+     */
+    private String dataDirectory;
+
+    /**
+     * The base directory for local storage of repository data. If
+     * not set, it's ${dataDirectory}/repositories.
+     */
+    private String repositoryBaseDirectory;
+
+    /**
+     * The base directory for local storage of remote repository
+     * data. If not set, it's ${dataDirectory}/remotes.
+     */
+    private String remoteRepositoryBaseDirectory;
+
+    /**
+     * The default language used for setting internationalized
+     * strings.
+     */
+    private String defaultLanguage = "en-US";
+
+    /**
+     * Comma separated list of language patterns. Sorted by
+     * priority descending. Used for display of internationalized
+     * strings.
+     */
+    private String languageRange = "en,fr,de";
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get the base directory where the archiva data is stored. If
+     * not set, the appserver.base is used.
+     * 
+     * @return String
+     */
+    public String getDataDirectory()
+    {
+        return this.dataDirectory;
+    } //-- String getDataDirectory()
+
+    /**
+     * Get the default language used for setting internationalized
+     * strings.
+     * 
+     * @return String
+     */
+    public String getDefaultLanguage()
+    {
+        return this.defaultLanguage;
+    } //-- String getDefaultLanguage()
+
+    /**
+     * Get the FileLocking configuration.
+     * 
+     * @return FileLockConfiguration
+     */
+    public FileLockConfiguration getFileLockConfiguration()
+    {
+        return this.fileLockConfiguration;
+    } //-- FileLockConfiguration getFileLockConfiguration()
+
+    /**
+     * Get comma separated list of language patterns. Sorted by
+     * priority descending. Used for display of internationalized
+     * strings.
+     * 
+     * @return String
+     */
+    public String getLanguageRange()
+    {
+        return this.languageRange;
+    } //-- String getLanguageRange()
+
+    /**
+     * Get the base directory for local storage of remote
+     * repository data. If not set, it's ${dataDirectory}/remotes.
+     * 
+     * @return String
+     */
+    public String getRemoteRepositoryBaseDirectory()
+    {
+        return this.remoteRepositoryBaseDirectory;
+    } //-- String getRemoteRepositoryBaseDirectory()
+
+    /**
+     * Get the base directory for local storage of repository data.
+     * If not set, it's ${dataDirectory}/repositories.
+     * 
+     * @return String
+     */
+    public String getRepositoryBaseDirectory()
+    {
+        return this.repositoryBaseDirectory;
+    } //-- String getRepositoryBaseDirectory()
+
+    /**
+     * Get the url failure cache configuration.
+     * 
+     * @return CacheConfiguration
+     */
+    public CacheConfiguration getUrlFailureCacheConfiguration()
+    {
+        return this.urlFailureCacheConfiguration;
+    } //-- CacheConfiguration getUrlFailureCacheConfiguration()
+
+    /**
+     * Set the base directory where the archiva data is stored. If
+     * not set, the appserver.base is used.
+     * 
+     * @param dataDirectory
+     */
+    public void setDataDirectory( String dataDirectory )
+    {
+        this.dataDirectory = dataDirectory;
+    } //-- void setDataDirectory( String )
+
+    /**
+     * Set the default language used for setting internationalized
+     * strings.
+     * 
+     * @param defaultLanguage
+     */
+    public void setDefaultLanguage( String defaultLanguage )
+    {
+        this.defaultLanguage = defaultLanguage;
+    } //-- void setDefaultLanguage( String )
+
+    /**
+     * Set the FileLocking configuration.
+     * 
+     * @param fileLockConfiguration
+     */
+    public void setFileLockConfiguration( FileLockConfiguration fileLockConfiguration )
+    {
+        this.fileLockConfiguration = fileLockConfiguration;
+    } //-- void setFileLockConfiguration( FileLockConfiguration )
+
+    /**
+     * Set comma separated list of language patterns. Sorted by
+     * priority descending. Used for display of internationalized
+     * strings.
+     * 
+     * @param languageRange
+     */
+    public void setLanguageRange( String languageRange )
+    {
+        this.languageRange = languageRange;
+    } //-- void setLanguageRange( String )
+
+    /**
+     * Set the base directory for local storage of remote
+     * repository data. If not set, it's ${dataDirectory}/remotes.
+     * 
+     * @param remoteRepositoryBaseDirectory
+     */
+    public void setRemoteRepositoryBaseDirectory( String remoteRepositoryBaseDirectory )
+    {
+        this.remoteRepositoryBaseDirectory = remoteRepositoryBaseDirectory;
+    } //-- void setRemoteRepositoryBaseDirectory( String )
+
+    /**
+     * Set the base directory for local storage of repository data.
+     * If not set, it's ${dataDirectory}/repositories.
+     * 
+     * @param repositoryBaseDirectory
+     */
+    public void setRepositoryBaseDirectory( String repositoryBaseDirectory )
+    {
+        this.repositoryBaseDirectory = repositoryBaseDirectory;
+    } //-- void setRepositoryBaseDirectory( String )
+
+    /**
+     * Set the url failure cache configuration.
+     * 
+     * @param urlFailureCacheConfiguration
+     */
+    public void setUrlFailureCacheConfiguration( CacheConfiguration urlFailureCacheConfiguration )
+    {
+        this.urlFailureCacheConfiguration = urlFailureCacheConfiguration;
+    } //-- void setUrlFailureCacheConfiguration( CacheConfiguration )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/CacheConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/CacheConfiguration.java
new file mode 100644
index 0000000..5d765ed
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/CacheConfiguration.java
@@ -0,0 +1,141 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Cache configuration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class CacheConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * TimeToIdleSeconds.
+     */
+    private int timeToIdleSeconds = -1;
+
+    /**
+     * TimeToLiveSeconds.
+     */
+    private int timeToLiveSeconds = -1;
+
+    /**
+     * max elements in memory.
+     */
+    private int maxElementsInMemory = -1;
+
+    /**
+     * max elements on disk.
+     */
+    private int maxElementsOnDisk = -1;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get max elements in memory.
+     * 
+     * @return int
+     */
+    public int getMaxElementsInMemory()
+    {
+        return this.maxElementsInMemory;
+    } //-- int getMaxElementsInMemory()
+
+    /**
+     * Get max elements on disk.
+     * 
+     * @return int
+     */
+    public int getMaxElementsOnDisk()
+    {
+        return this.maxElementsOnDisk;
+    } //-- int getMaxElementsOnDisk()
+
+    /**
+     * Get timeToIdleSeconds.
+     * 
+     * @return int
+     */
+    public int getTimeToIdleSeconds()
+    {
+        return this.timeToIdleSeconds;
+    } //-- int getTimeToIdleSeconds()
+
+    /**
+     * Get timeToLiveSeconds.
+     * 
+     * @return int
+     */
+    public int getTimeToLiveSeconds()
+    {
+        return this.timeToLiveSeconds;
+    } //-- int getTimeToLiveSeconds()
+
+    /**
+     * Set max elements in memory.
+     * 
+     * @param maxElementsInMemory
+     */
+    public void setMaxElementsInMemory( int maxElementsInMemory )
+    {
+        this.maxElementsInMemory = maxElementsInMemory;
+    } //-- void setMaxElementsInMemory( int )
+
+    /**
+     * Set max elements on disk.
+     * 
+     * @param maxElementsOnDisk
+     */
+    public void setMaxElementsOnDisk( int maxElementsOnDisk )
+    {
+        this.maxElementsOnDisk = maxElementsOnDisk;
+    } //-- void setMaxElementsOnDisk( int )
+
+    /**
+     * Set timeToIdleSeconds.
+     * 
+     * @param timeToIdleSeconds
+     */
+    public void setTimeToIdleSeconds( int timeToIdleSeconds )
+    {
+        this.timeToIdleSeconds = timeToIdleSeconds;
+    } //-- void setTimeToIdleSeconds( int )
+
+    /**
+     * Set timeToLiveSeconds.
+     * 
+     * @param timeToLiveSeconds
+     */
+    public void setTimeToLiveSeconds( int timeToLiveSeconds )
+    {
+        this.timeToLiveSeconds = timeToLiveSeconds;
+    } //-- void setTimeToLiveSeconds( int )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/Configuration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/Configuration.java
new file mode 100644
index 0000000..4d62e81
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/Configuration.java
@@ -0,0 +1,845 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class Configuration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class Configuration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * This is the version of the configuration format.
+     */
+    private String version = "3.0.0";
+
+    /**
+     * The type of the metadata storage. Allowed values: jcr, file,
+     * cassandra.
+     */
+    private String metadataStore = "jcr";
+
+    /**
+     * Field repositoryGroups.
+     */
+    private java.util.List<RepositoryGroupConfiguration> repositoryGroups;
+
+    /**
+     * Field managedRepositories.
+     */
+    private java.util.List<ManagedRepositoryConfiguration> managedRepositories;
+
+    /**
+     * Field remoteRepositories.
+     */
+    private java.util.List<RemoteRepositoryConfiguration> remoteRepositories;
+
+    /**
+     * Field proxyConnectors.
+     */
+    private java.util.List<ProxyConnectorConfiguration> proxyConnectors;
+
+    /**
+     * Field networkProxies.
+     */
+    private java.util.List<NetworkProxyConfiguration> networkProxies;
+
+    /**
+     * Field legacyArtifactPaths.
+     */
+    private java.util.List<LegacyArtifactPath> legacyArtifactPaths;
+
+    /**
+     * 
+     *             The repository scanning configuration.
+     *           
+     */
+    private RepositoryScanningConfiguration repositoryScanning;
+
+    /**
+     * 
+     *             The webapp configuration.
+     *           
+     */
+    private WebappConfiguration webapp;
+
+    /**
+     * 
+     *             The organisation info.
+     *           
+     */
+    private OrganisationInformation organisationInfo;
+
+    /**
+     * 
+     *             The NetworkConfiguration .
+     *           
+     */
+    private NetworkConfiguration networkConfiguration;
+
+    /**
+     * The RedbackRuntimeConfiguration.
+     */
+    private RedbackRuntimeConfiguration redbackRuntimeConfiguration;
+
+    /**
+     * The ArchivaRuntimeConfiguration.
+     */
+    private ArchivaRuntimeConfiguration archivaRuntimeConfiguration;
+
+    /**
+     * Field proxyConnectorRuleConfigurations.
+     */
+    private java.util.List<ProxyConnectorRuleConfiguration> proxyConnectorRuleConfigurations;
+
+    /**
+     * Archiva default settings.
+     */
+    private ArchivaDefaultConfiguration archivaDefaultConfiguration;
+
+    /**
+     * Field modelEncoding.
+     */
+    private String modelEncoding = "UTF-8";
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addLegacyArtifactPath.
+     * 
+     * @param legacyArtifactPath
+     */
+    public void addLegacyArtifactPath( LegacyArtifactPath legacyArtifactPath )
+    {
+        getLegacyArtifactPaths().add( legacyArtifactPath );
+    } //-- void addLegacyArtifactPath( LegacyArtifactPath )
+
+    /**
+     * Method addManagedRepository.
+     * 
+     * @param managedRepositoryConfiguration
+     */
+    public void addManagedRepository( ManagedRepositoryConfiguration managedRepositoryConfiguration )
+    {
+        getManagedRepositories().add( managedRepositoryConfiguration );
+    } //-- void addManagedRepository( ManagedRepositoryConfiguration )
+
+    /**
+     * Method addNetworkProxy.
+     * 
+     * @param networkProxyConfiguration
+     */
+    public void addNetworkProxy( NetworkProxyConfiguration networkProxyConfiguration )
+    {
+        getNetworkProxies().add( networkProxyConfiguration );
+    } //-- void addNetworkProxy( NetworkProxyConfiguration )
+
+    /**
+     * Method addProxyConnector.
+     * 
+     * @param proxyConnectorConfiguration
+     */
+    public void addProxyConnector( ProxyConnectorConfiguration proxyConnectorConfiguration )
+    {
+        getProxyConnectors().add( proxyConnectorConfiguration );
+    } //-- void addProxyConnector( ProxyConnectorConfiguration )
+
+    /**
+     * Method addProxyConnectorRuleConfiguration.
+     * 
+     * @param proxyConnectorRuleConfiguration
+     */
+    public void addProxyConnectorRuleConfiguration( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration )
+    {
+        getProxyConnectorRuleConfigurations().add( proxyConnectorRuleConfiguration );
+    } //-- void addProxyConnectorRuleConfiguration( ProxyConnectorRuleConfiguration )
+
+    /**
+     * Method addRemoteRepository.
+     * 
+     * @param remoteRepositoryConfiguration
+     */
+    public void addRemoteRepository( RemoteRepositoryConfiguration remoteRepositoryConfiguration )
+    {
+        getRemoteRepositories().add( remoteRepositoryConfiguration );
+    } //-- void addRemoteRepository( RemoteRepositoryConfiguration )
+
+    /**
+     * Method addRepositoryGroup.
+     * 
+     * @param repositoryGroupConfiguration
+     */
+    public void addRepositoryGroup( RepositoryGroupConfiguration repositoryGroupConfiguration )
+    {
+        getRepositoryGroups().add( repositoryGroupConfiguration );
+    } //-- void addRepositoryGroup( RepositoryGroupConfiguration )
+
+    /**
+     * Get archiva default settings.
+     * 
+     * @return ArchivaDefaultConfiguration
+     */
+    public ArchivaDefaultConfiguration getArchivaDefaultConfiguration()
+    {
+        return this.archivaDefaultConfiguration;
+    } //-- ArchivaDefaultConfiguration getArchivaDefaultConfiguration()
+
+    /**
+     * Get the ArchivaRuntimeConfiguration.
+     * 
+     * @return ArchivaRuntimeConfiguration
+     */
+    public ArchivaRuntimeConfiguration getArchivaRuntimeConfiguration()
+    {
+        return this.archivaRuntimeConfiguration;
+    } //-- ArchivaRuntimeConfiguration getArchivaRuntimeConfiguration()
+
+    /**
+     * Method getLegacyArtifactPaths.
+     * 
+     * @return List
+     */
+    public java.util.List<LegacyArtifactPath> getLegacyArtifactPaths()
+    {
+        if ( this.legacyArtifactPaths == null )
+        {
+            this.legacyArtifactPaths = new java.util.ArrayList<LegacyArtifactPath>();
+        }
+
+        return this.legacyArtifactPaths;
+    } //-- java.util.List<LegacyArtifactPath> getLegacyArtifactPaths()
+
+    /**
+     * Method getManagedRepositories.
+     * 
+     * @return List
+     */
+    public java.util.List<ManagedRepositoryConfiguration> getManagedRepositories()
+    {
+        if ( this.managedRepositories == null )
+        {
+            this.managedRepositories = new java.util.ArrayList<ManagedRepositoryConfiguration>();
+        }
+
+        return this.managedRepositories;
+    } //-- java.util.List<ManagedRepositoryConfiguration> getManagedRepositories()
+
+    /**
+     * Get the type of the metadata storage. Allowed values: jcr,
+     * file, cassandra.
+     * 
+     * @return String
+     */
+    public String getMetadataStore()
+    {
+        return this.metadataStore;
+    } //-- String getMetadataStore()
+
+    /**
+     * Get the modelEncoding field.
+     * 
+     * @return String
+     */
+    public String getModelEncoding()
+    {
+        return this.modelEncoding;
+    } //-- String getModelEncoding()
+
+    /**
+     * Get the NetworkConfiguration .
+     * 
+     * @return NetworkConfiguration
+     */
+    public NetworkConfiguration getNetworkConfiguration()
+    {
+        return this.networkConfiguration;
+    } //-- NetworkConfiguration getNetworkConfiguration()
+
+    /**
+     * Method getNetworkProxies.
+     * 
+     * @return List
+     */
+    public java.util.List<NetworkProxyConfiguration> getNetworkProxies()
+    {
+        if ( this.networkProxies == null )
+        {
+            this.networkProxies = new java.util.ArrayList<NetworkProxyConfiguration>();
+        }
+
+        return this.networkProxies;
+    } //-- java.util.List<NetworkProxyConfiguration> getNetworkProxies()
+
+    /**
+     * Get the organisation info.
+     * 
+     * @return OrganisationInformation
+     */
+    public OrganisationInformation getOrganisationInfo()
+    {
+        return this.organisationInfo;
+    } //-- OrganisationInformation getOrganisationInfo()
+
+    /**
+     * Method getProxyConnectorRuleConfigurations.
+     * 
+     * @return List
+     */
+    public java.util.List<ProxyConnectorRuleConfiguration> getProxyConnectorRuleConfigurations()
+    {
+        if ( this.proxyConnectorRuleConfigurations == null )
+        {
+            this.proxyConnectorRuleConfigurations = new java.util.ArrayList<ProxyConnectorRuleConfiguration>();
+        }
+
+        return this.proxyConnectorRuleConfigurations;
+    } //-- java.util.List<ProxyConnectorRuleConfiguration> getProxyConnectorRuleConfigurations()
+
+    /**
+     * Method getProxyConnectors.
+     * 
+     * @return List
+     */
+    public java.util.List<ProxyConnectorConfiguration> getProxyConnectors()
+    {
+        if ( this.proxyConnectors == null )
+        {
+            this.proxyConnectors = new java.util.ArrayList<ProxyConnectorConfiguration>();
+        }
+
+        return this.proxyConnectors;
+    } //-- java.util.List<ProxyConnectorConfiguration> getProxyConnectors()
+
+    /**
+     * Get the RedbackRuntimeConfiguration.
+     * 
+     * @return RedbackRuntimeConfiguration
+     */
+    public RedbackRuntimeConfiguration getRedbackRuntimeConfiguration()
+    {
+        return this.redbackRuntimeConfiguration;
+    } //-- RedbackRuntimeConfiguration getRedbackRuntimeConfiguration()
+
+    /**
+     * Method getRemoteRepositories.
+     * 
+     * @return List
+     */
+    public java.util.List<RemoteRepositoryConfiguration> getRemoteRepositories()
+    {
+        if ( this.remoteRepositories == null )
+        {
+            this.remoteRepositories = new java.util.ArrayList<RemoteRepositoryConfiguration>();
+        }
+
+        return this.remoteRepositories;
+    } //-- java.util.List<RemoteRepositoryConfiguration> getRemoteRepositories()
+
+    /**
+     * Method getRepositoryGroups.
+     * 
+     * @return List
+     */
+    public java.util.List<RepositoryGroupConfiguration> getRepositoryGroups()
+    {
+        if ( this.repositoryGroups == null )
+        {
+            this.repositoryGroups = new java.util.ArrayList<RepositoryGroupConfiguration>();
+        }
+
+        return this.repositoryGroups;
+    } //-- java.util.List<RepositoryGroupConfiguration> getRepositoryGroups()
+
+    /**
+     * Get the repository scanning configuration.
+     * 
+     * @return RepositoryScanningConfiguration
+     */
+    public RepositoryScanningConfiguration getRepositoryScanning()
+    {
+        return this.repositoryScanning;
+    } //-- RepositoryScanningConfiguration getRepositoryScanning()
+
+    /**
+     * Get this is the version of the configuration format.
+     * 
+     * @return String
+     */
+    public String getVersion()
+    {
+        return this.version;
+    } //-- String getVersion()
+
+    /**
+     * Get the webapp configuration.
+     * 
+     * @return WebappConfiguration
+     */
+    public WebappConfiguration getWebapp()
+    {
+        return this.webapp;
+    } //-- WebappConfiguration getWebapp()
+
+    /**
+     * Method removeLegacyArtifactPath.
+     * 
+     * @param legacyArtifactPath
+     */
+    public void removeLegacyArtifactPath( LegacyArtifactPath legacyArtifactPath )
+    {
+        getLegacyArtifactPaths().remove( legacyArtifactPath );
+    } //-- void removeLegacyArtifactPath( LegacyArtifactPath )
+
+    /**
+     * Method removeManagedRepository.
+     * 
+     * @param managedRepositoryConfiguration
+     */
+    public void removeManagedRepository( ManagedRepositoryConfiguration managedRepositoryConfiguration )
+    {
+        getManagedRepositories().remove( managedRepositoryConfiguration );
+    } //-- void removeManagedRepository( ManagedRepositoryConfiguration )
+
+    /**
+     * Method removeNetworkProxy.
+     * 
+     * @param networkProxyConfiguration
+     */
+    public void removeNetworkProxy( NetworkProxyConfiguration networkProxyConfiguration )
+    {
+        getNetworkProxies().remove( networkProxyConfiguration );
+    } //-- void removeNetworkProxy( NetworkProxyConfiguration )
+
+    /**
+     * Method removeProxyConnector.
+     * 
+     * @param proxyConnectorConfiguration
+     */
+    public void removeProxyConnector( ProxyConnectorConfiguration proxyConnectorConfiguration )
+    {
+        getProxyConnectors().remove( proxyConnectorConfiguration );
+    } //-- void removeProxyConnector( ProxyConnectorConfiguration )
+
+    /**
+     * Method removeProxyConnectorRuleConfiguration.
+     * 
+     * @param proxyConnectorRuleConfiguration
+     */
+    public void removeProxyConnectorRuleConfiguration( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration )
+    {
+        getProxyConnectorRuleConfigurations().remove( proxyConnectorRuleConfiguration );
+    } //-- void removeProxyConnectorRuleConfiguration( ProxyConnectorRuleConfiguration )
+
+    /**
+     * Method removeRemoteRepository.
+     * 
+     * @param remoteRepositoryConfiguration
+     */
+    public void removeRemoteRepository( RemoteRepositoryConfiguration remoteRepositoryConfiguration )
+    {
+        getRemoteRepositories().remove( remoteRepositoryConfiguration );
+    } //-- void removeRemoteRepository( RemoteRepositoryConfiguration )
+
+    /**
+     * Method removeRepositoryGroup.
+     * 
+     * @param repositoryGroupConfiguration
+     */
+    public void removeRepositoryGroup( RepositoryGroupConfiguration repositoryGroupConfiguration )
+    {
+        getRepositoryGroups().remove( repositoryGroupConfiguration );
+    } //-- void removeRepositoryGroup( RepositoryGroupConfiguration )
+
+    /**
+     * Set archiva default settings.
+     * 
+     * @param archivaDefaultConfiguration
+     */
+    public void setArchivaDefaultConfiguration( ArchivaDefaultConfiguration archivaDefaultConfiguration )
+    {
+        this.archivaDefaultConfiguration = archivaDefaultConfiguration;
+    } //-- void setArchivaDefaultConfiguration( ArchivaDefaultConfiguration )
+
+    /**
+     * Set the ArchivaRuntimeConfiguration.
+     * 
+     * @param archivaRuntimeConfiguration
+     */
+    public void setArchivaRuntimeConfiguration( ArchivaRuntimeConfiguration archivaRuntimeConfiguration )
+    {
+        this.archivaRuntimeConfiguration = archivaRuntimeConfiguration;
+    } //-- void setArchivaRuntimeConfiguration( ArchivaRuntimeConfiguration )
+
+    /**
+     * Set the list of custom legacy path to artifact.
+     * 
+     * @param legacyArtifactPaths
+     */
+    public void setLegacyArtifactPaths( java.util.List<LegacyArtifactPath> legacyArtifactPaths )
+    {
+        this.legacyArtifactPaths = legacyArtifactPaths;
+    } //-- void setLegacyArtifactPaths( java.util.List )
+
+    /**
+     * Set the list of repositories that this archiva instance
+     * uses.
+     * 
+     * @param managedRepositories
+     */
+    public void setManagedRepositories( java.util.List<ManagedRepositoryConfiguration> managedRepositories )
+    {
+        this.managedRepositories = managedRepositories;
+    } //-- void setManagedRepositories( java.util.List )
+
+    /**
+     * Set the type of the metadata storage. Allowed values: jcr,
+     * file, cassandra.
+     * 
+     * @param metadataStore
+     */
+    public void setMetadataStore( String metadataStore )
+    {
+        this.metadataStore = metadataStore;
+    } //-- void setMetadataStore( String )
+
+    /**
+     * Set the modelEncoding field.
+     * 
+     * @param modelEncoding
+     */
+    public void setModelEncoding( String modelEncoding )
+    {
+        this.modelEncoding = modelEncoding;
+    } //-- void setModelEncoding( String )
+
+    /**
+     * Set the NetworkConfiguration .
+     * 
+     * @param networkConfiguration
+     */
+    public void setNetworkConfiguration( NetworkConfiguration networkConfiguration )
+    {
+        this.networkConfiguration = networkConfiguration;
+    } //-- void setNetworkConfiguration( NetworkConfiguration )
+
+    /**
+     * Set the list of network proxies to use for outgoing
+     * requests.
+     * 
+     * @param networkProxies
+     */
+    public void setNetworkProxies( java.util.List<NetworkProxyConfiguration> networkProxies )
+    {
+        this.networkProxies = networkProxies;
+    } //-- void setNetworkProxies( java.util.List )
+
+    /**
+     * Set the organisation info.
+     * 
+     * @param organisationInfo
+     */
+    public void setOrganisationInfo( OrganisationInformation organisationInfo )
+    {
+        this.organisationInfo = organisationInfo;
+    } //-- void setOrganisationInfo( OrganisationInformation )
+
+    /**
+     * Set the list of ProxyConnectorRuleConfigurations.
+     * 
+     * @param proxyConnectorRuleConfigurations
+     */
+    public void setProxyConnectorRuleConfigurations( java.util.List<ProxyConnectorRuleConfiguration> proxyConnectorRuleConfigurations )
+    {
+        this.proxyConnectorRuleConfigurations = proxyConnectorRuleConfigurations;
+    } //-- void setProxyConnectorRuleConfigurations( java.util.List )
+
+    /**
+     * Set the list of proxy connectors for this archiva instance.
+     * 
+     * @param proxyConnectors
+     */
+    public void setProxyConnectors( java.util.List<ProxyConnectorConfiguration> proxyConnectors )
+    {
+        this.proxyConnectors = proxyConnectors;
+    } //-- void setProxyConnectors( java.util.List )
+
+    /**
+     * Set the RedbackRuntimeConfiguration.
+     * 
+     * @param redbackRuntimeConfiguration
+     */
+    public void setRedbackRuntimeConfiguration( RedbackRuntimeConfiguration redbackRuntimeConfiguration )
+    {
+        this.redbackRuntimeConfiguration = redbackRuntimeConfiguration;
+    } //-- void setRedbackRuntimeConfiguration( RedbackRuntimeConfiguration )
+
+    /**
+     * Set the list of repositories that this archiva can retrieve
+     * from or publish to.
+     * 
+     * @param remoteRepositories
+     */
+    public void setRemoteRepositories( java.util.List<RemoteRepositoryConfiguration> remoteRepositories )
+    {
+        this.remoteRepositories = remoteRepositories;
+    } //-- void setRemoteRepositories( java.util.List )
+
+    /**
+     * Set the list of repository groups.
+     * 
+     * @param repositoryGroups
+     */
+    public void setRepositoryGroups( java.util.List<RepositoryGroupConfiguration> repositoryGroups )
+    {
+        this.repositoryGroups = repositoryGroups;
+    } //-- void setRepositoryGroups( java.util.List )
+
+    /**
+     * Set the repository scanning configuration.
+     * 
+     * @param repositoryScanning
+     */
+    public void setRepositoryScanning( RepositoryScanningConfiguration repositoryScanning )
+    {
+        this.repositoryScanning = repositoryScanning;
+    } //-- void setRepositoryScanning( RepositoryScanningConfiguration )
+
+    /**
+     * Set this is the version of the configuration format.
+     * 
+     * @param version
+     */
+    public void setVersion( String version )
+    {
+        this.version = version;
+    } //-- void setVersion( String )
+
+    /**
+     * Set the webapp configuration.
+     * 
+     * @param webapp
+     */
+    public void setWebapp( WebappConfiguration webapp )
+    {
+        this.webapp = webapp;
+    } //-- void setWebapp( WebappConfiguration )
+
+    
+    private java.util.Map<String, java.util.List<String>> repositoryToGroupMap; 
+    
+    public java.util.Map<String, java.util.List<String>> getRepositoryToGroupMap()
+    {
+        if ( repositoryGroups != null )
+        {
+            java.util.Map<String, java.util.List<String>> map = new java.util.HashMap<String, java.util.List<String>>();
+            
+            for ( RepositoryGroupConfiguration group : (java.util.List<RepositoryGroupConfiguration>) repositoryGroups )
+            {
+                for ( String repositoryId : (java.util.List<String>) group.getRepositories() )
+                {
+                    java.util.List<String> groups = map.get( repositoryId );
+                    if ( groups == null )
+                    {
+                        groups = new java.util.ArrayList<String>();
+                        map.put( repositoryId, groups );
+                    }
+                    groups.add( group.getId() );
+                }
+            }
+            
+            repositoryToGroupMap = map;
+        }
+        return repositoryToGroupMap;
+    }
+    
+    public java.util.Map<String, RepositoryGroupConfiguration> getRepositoryGroupsAsMap()
+    {
+        java.util.Map<String, RepositoryGroupConfiguration> map = new java.util.HashMap<String, RepositoryGroupConfiguration>();
+        if ( repositoryGroups != null )
+        {
+            for ( RepositoryGroupConfiguration group : (java.util.List<RepositoryGroupConfiguration>) repositoryGroups )
+            {
+                map.put( group.getId(), group );
+            }
+        }
+        return map;
+    }
+    
+    public RepositoryGroupConfiguration findRepositoryGroupById( String id )
+    {
+        if ( repositoryGroups != null )
+        {
+            for ( RepositoryGroupConfiguration group : (java.util.List<RepositoryGroupConfiguration>) repositoryGroups )
+            {
+                if ( group.getId().equals( id ) )
+                {
+                    return group;
+                }
+            }
+        }
+        return null;
+    }
+
+    private java.util.Map<String, java.util.List<String>> groupToRepositoryMap;
+
+    public java.util.Map<String, java.util.List<String>> getGroupToRepositoryMap()
+    {
+        if ( repositoryGroups != null && managedRepositories != null )
+        {
+            java.util.Map<String, java.util.List<String>> map = new java.util.HashMap<String, java.util.List<String>>();
+            
+            for ( ManagedRepositoryConfiguration repo : (java.util.List<ManagedRepositoryConfiguration>) managedRepositories )
+            {
+                for ( RepositoryGroupConfiguration group : (java.util.List<RepositoryGroupConfiguration>) repositoryGroups )
+                {
+                    if ( !group.getRepositories().contains( repo.getId() ) )
+                    {
+                        String groupId = group.getId();
+                        java.util.List<String> repos = map.get( groupId );
+                        if ( repos == null )
+                        {
+                            repos = new java.util.ArrayList<String>();
+                            map.put( groupId, repos );
+                        }
+                        repos.add( repo.getId() );
+                    }
+                }
+            }
+            groupToRepositoryMap = map;
+        }
+        return groupToRepositoryMap;
+    }
+          
+    
+    public java.util.Map<String, NetworkProxyConfiguration> getNetworkProxiesAsMap()
+    {
+        java.util.Map<String, NetworkProxyConfiguration> map = new java.util.HashMap<String, NetworkProxyConfiguration>();
+        if ( networkProxies != null )
+        {
+            for ( java.util.Iterator<NetworkProxyConfiguration> i = networkProxies.iterator(); i.hasNext(); )
+            {
+                NetworkProxyConfiguration proxy = i.next();
+                map.put( proxy.getId(), proxy );
+            }
+        }
+        return map;
+    }
+
+    public java.util.Map<String, java.util.List<ProxyConnectorConfiguration>> getProxyConnectorAsMap()
+    {
+        java.util.Map<String, java.util.List<ProxyConnectorConfiguration>> proxyConnectorMap =
+            new java.util.HashMap<String, java.util.List<ProxyConnectorConfiguration>>();
+
+        if( proxyConnectors != null )
+        {
+            java.util.Iterator<ProxyConnectorConfiguration> it = proxyConnectors.iterator();
+            while ( it.hasNext() )
+            {
+                ProxyConnectorConfiguration proxyConfig = it.next();
+                String key = proxyConfig.getSourceRepoId();
+
+                java.util.List<ProxyConnectorConfiguration> connectors = proxyConnectorMap.get( key );
+                if ( connectors == null )
+                {
+                    connectors = new java.util.ArrayList<ProxyConnectorConfiguration>();
+                    proxyConnectorMap.put( key, connectors );
+                }
+
+                connectors.add( proxyConfig );
+                java.util.Collections.sort( connectors,
+                    org.apache.archiva.configuration.functors.ProxyConnectorConfigurationOrderComparator.getInstance() );
+            }
+        }
+
+        return proxyConnectorMap;
+    }
+
+    public java.util.Map<String, RemoteRepositoryConfiguration> getRemoteRepositoriesAsMap()
+    {
+        java.util.Map<String, RemoteRepositoryConfiguration> map = new java.util.HashMap<String, RemoteRepositoryConfiguration>();
+        if ( remoteRepositories != null )
+        {
+            for ( java.util.Iterator<RemoteRepositoryConfiguration> i = remoteRepositories.iterator(); i.hasNext(); )
+            {
+                RemoteRepositoryConfiguration repo = i.next();
+                map.put( repo.getId(), repo );
+            }
+        }
+        return map;
+    }
+
+    public RemoteRepositoryConfiguration findRemoteRepositoryById( String id )
+    {
+        if ( remoteRepositories != null )
+        {
+            for ( java.util.Iterator<RemoteRepositoryConfiguration> i = remoteRepositories.iterator(); i.hasNext(); )
+            {
+                RemoteRepositoryConfiguration repo = i.next();
+                if ( repo.getId().equals( id ) )
+                {
+                    return repo;
+                }
+            }
+        }
+        return null;
+    }
+
+    public java.util.Map<String, ManagedRepositoryConfiguration> getManagedRepositoriesAsMap()
+    {
+        java.util.Map<String, ManagedRepositoryConfiguration> map = new java.util.HashMap<String, ManagedRepositoryConfiguration>();
+        if ( managedRepositories != null )
+        {
+            for ( java.util.Iterator<ManagedRepositoryConfiguration> i = managedRepositories.iterator(); i.hasNext(); )
+            {
+                ManagedRepositoryConfiguration repo = i.next();
+                map.put( repo.getId(), repo );
+            }
+        }
+        return map;
+    }
+
+    public ManagedRepositoryConfiguration findManagedRepositoryById( String id )
+    {
+        if ( managedRepositories != null )
+        {
+            for ( java.util.Iterator<ManagedRepositoryConfiguration> i = managedRepositories.iterator(); i.hasNext(); )
+            {
+                ManagedRepositoryConfiguration repo = i.next();
+                if ( repo.getId().equals( id ) )
+                {
+                    return repo;
+                }
+            }
+        }
+        return null;
+    }
+          
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/FileLockConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/FileLockConfiguration.java
new file mode 100644
index 0000000..259e3b8
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/FileLockConfiguration.java
@@ -0,0 +1,91 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * File Locking configuration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class FileLockConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * skipping the locking mechanism.
+     */
+    private boolean skipLocking = true;
+
+    /**
+     * maximum time to wait to get the file lock (0 infinite).
+     */
+    private int lockingTimeout = 0;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get maximum time to wait to get the file lock (0 infinite).
+     * 
+     * @return int
+     */
+    public int getLockingTimeout()
+    {
+        return this.lockingTimeout;
+    } //-- int getLockingTimeout()
+
+    /**
+     * Get skipping the locking mechanism.
+     * 
+     * @return boolean
+     */
+    public boolean isSkipLocking()
+    {
+        return this.skipLocking;
+    } //-- boolean isSkipLocking()
+
+    /**
+     * Set maximum time to wait to get the file lock (0 infinite).
+     * 
+     * @param lockingTimeout
+     */
+    public void setLockingTimeout( int lockingTimeout )
+    {
+        this.lockingTimeout = lockingTimeout;
+    } //-- void setLockingTimeout( int )
+
+    /**
+     * Set skipping the locking mechanism.
+     * 
+     * @param skipLocking
+     */
+    public void setSkipLocking( boolean skipLocking )
+    {
+        this.skipLocking = skipLocking;
+    } //-- void setSkipLocking( boolean )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/FileType.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/FileType.java
new file mode 100644
index 0000000..d3930c1
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/FileType.java
@@ -0,0 +1,146 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * The FileType object.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class FileType
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field id.
+     */
+    private String id;
+
+    /**
+     * Field patterns.
+     */
+    private java.util.List<String> patterns;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addPattern.
+     * 
+     * @param string
+     */
+    public void addPattern( String string )
+    {
+        getPatterns().add( string );
+    } //-- void addPattern( String )
+
+    /**
+     * Get the id field.
+     * 
+     * @return String
+     */
+    public String getId()
+    {
+        return this.id;
+    } //-- String getId()
+
+    /**
+     * Method getPatterns.
+     * 
+     * @return List
+     */
+    public java.util.List<String> getPatterns()
+    {
+        if ( this.patterns == null )
+        {
+            this.patterns = new java.util.ArrayList<String>();
+        }
+
+        return this.patterns;
+    } //-- java.util.List<String> getPatterns()
+
+    /**
+     * Method removePattern.
+     * 
+     * @param string
+     */
+    public void removePattern( String string )
+    {
+        getPatterns().remove( string );
+    } //-- void removePattern( String )
+
+    /**
+     * Set the id field.
+     * 
+     * @param id
+     */
+    public void setId( String id )
+    {
+        this.id = id;
+    } //-- void setId( String )
+
+    /**
+     * Set the patterns field.
+     * 
+     * @param patterns
+     */
+    public void setPatterns( java.util.List<String> patterns )
+    {
+        this.patterns = patterns;
+    } //-- void setPatterns( java.util.List )
+
+    
+
+            @Override
+            public boolean equals( Object o )
+            {
+                if ( this == o )
+                {
+                    return true;
+                }
+                if ( o == null || getClass() != o.getClass() )
+                {
+                    return false;
+                }
+
+                FileType fileType = (FileType) o;
+
+                if ( id != null ? !id.equals( fileType.id ) : fileType.id != null )
+                {
+                    return false;
+                }
+
+                return true;
+            }
+
+            @Override
+            public int hashCode()
+            {
+                return id != null ? 37 + id.hashCode() : 0;
+            }
+          
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/LdapConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/LdapConfiguration.java
new file mode 100644
index 0000000..5541c73
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/LdapConfiguration.java
@@ -0,0 +1,384 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * 
+ *         The LDAP configuration.
+ *       
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class LdapConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * The LDAP host.
+     */
+    private String hostName;
+
+    /**
+     * The LDAP port.
+     */
+    private int port = 0;
+
+    /**
+     * ssl LDAP connection.
+     */
+    private boolean ssl = false;
+
+    /**
+     * The LDAP base dn.
+     */
+    private String baseDn;
+
+    /**
+     * The LDAP base dn for groups (if empty baseDn is used).
+     */
+    private String baseGroupsDn;
+
+    /**
+     * contextFactory to use.
+     */
+    private String contextFactory;
+
+    /**
+     * The LDAP bind dn.
+     */
+    private String bindDn;
+
+    /**
+     * The LDAP password.
+     */
+    private String password;
+
+    /**
+     * The LDAP authenticationMethod.
+     */
+    private String authenticationMethod;
+
+    /**
+     * The LDAP authenticator enabled.
+     */
+    private boolean bindAuthenticatorEnabled = false;
+
+    /**
+     * LDAP writable.
+     */
+    private boolean writable = false;
+
+    /**
+     * Will use role name as LDAP group.
+     */
+    private boolean useRoleNameAsGroup = false;
+
+    /**
+     * Field extraProperties.
+     */
+    private java.util.Map extraProperties;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addExtraProperty.
+     * 
+     * @param key
+     * @param value
+     */
+    public void addExtraProperty( Object key, String value )
+    {
+        getExtraProperties().put( key, value );
+    } //-- void addExtraProperty( Object, String )
+
+    /**
+     * Get the LDAP authenticationMethod.
+     * 
+     * @return String
+     */
+    public String getAuthenticationMethod()
+    {
+        return this.authenticationMethod;
+    } //-- String getAuthenticationMethod()
+
+    /**
+     * Get the LDAP base dn.
+     * 
+     * @return String
+     */
+    public String getBaseDn()
+    {
+        return this.baseDn;
+    } //-- String getBaseDn()
+
+    /**
+     * Get the LDAP base dn for groups (if empty baseDn is used).
+     * 
+     * @return String
+     */
+    public String getBaseGroupsDn()
+    {
+        return this.baseGroupsDn;
+    } //-- String getBaseGroupsDn()
+
+    /**
+     * Get the LDAP bind dn.
+     * 
+     * @return String
+     */
+    public String getBindDn()
+    {
+        return this.bindDn;
+    } //-- String getBindDn()
+
+    /**
+     * Get contextFactory to use.
+     * 
+     * @return String
+     */
+    public String getContextFactory()
+    {
+        return this.contextFactory;
+    } //-- String getContextFactory()
+
+    /**
+     * Method getExtraProperties.
+     * 
+     * @return Map
+     */
+    public java.util.Map getExtraProperties()
+    {
+        if ( this.extraProperties == null )
+        {
+            this.extraProperties = new java.util.HashMap();
+        }
+
+        return this.extraProperties;
+    } //-- java.util.Map getExtraProperties()
+
+    /**
+     * Get the LDAP host.
+     * 
+     * @return String
+     */
+    public String getHostName()
+    {
+        return this.hostName;
+    } //-- String getHostName()
+
+    /**
+     * Get the LDAP password.
+     * 
+     * @return String
+     */
+    public String getPassword()
+    {
+        return this.password;
+    } //-- String getPassword()
+
+    /**
+     * Get the LDAP port.
+     * 
+     * @return int
+     */
+    public int getPort()
+    {
+        return this.port;
+    } //-- int getPort()
+
+    /**
+     * Get the LDAP authenticator enabled.
+     * 
+     * @return boolean
+     */
+    public boolean isBindAuthenticatorEnabled()
+    {
+        return this.bindAuthenticatorEnabled;
+    } //-- boolean isBindAuthenticatorEnabled()
+
+    /**
+     * Get ssl LDAP connection.
+     * 
+     * @return boolean
+     */
+    public boolean isSsl()
+    {
+        return this.ssl;
+    } //-- boolean isSsl()
+
+    /**
+     * Get will use role name as LDAP group.
+     * 
+     * @return boolean
+     */
+    public boolean isUseRoleNameAsGroup()
+    {
+        return this.useRoleNameAsGroup;
+    } //-- boolean isUseRoleNameAsGroup()
+
+    /**
+     * Get lDAP writable.
+     * 
+     * @return boolean
+     */
+    public boolean isWritable()
+    {
+        return this.writable;
+    } //-- boolean isWritable()
+
+    /**
+     * Set the LDAP authenticationMethod.
+     * 
+     * @param authenticationMethod
+     */
+    public void setAuthenticationMethod( String authenticationMethod )
+    {
+        this.authenticationMethod = authenticationMethod;
+    } //-- void setAuthenticationMethod( String )
+
+    /**
+     * Set the LDAP base dn.
+     * 
+     * @param baseDn
+     */
+    public void setBaseDn( String baseDn )
+    {
+        this.baseDn = baseDn;
+    } //-- void setBaseDn( String )
+
+    /**
+     * Set the LDAP base dn for groups (if empty baseDn is used).
+     * 
+     * @param baseGroupsDn
+     */
+    public void setBaseGroupsDn( String baseGroupsDn )
+    {
+        this.baseGroupsDn = baseGroupsDn;
+    } //-- void setBaseGroupsDn( String )
+
+    /**
+     * Set the LDAP authenticator enabled.
+     * 
+     * @param bindAuthenticatorEnabled
+     */
+    public void setBindAuthenticatorEnabled( boolean bindAuthenticatorEnabled )
+    {
+        this.bindAuthenticatorEnabled = bindAuthenticatorEnabled;
+    } //-- void setBindAuthenticatorEnabled( boolean )
+
+    /**
+     * Set the LDAP bind dn.
+     * 
+     * @param bindDn
+     */
+    public void setBindDn( String bindDn )
+    {
+        this.bindDn = bindDn;
+    } //-- void setBindDn( String )
+
+    /**
+     * Set contextFactory to use.
+     * 
+     * @param contextFactory
+     */
+    public void setContextFactory( String contextFactory )
+    {
+        this.contextFactory = contextFactory;
+    } //-- void setContextFactory( String )
+
+    /**
+     * Set additional properties to use for ldap connection.
+     * 
+     * @param extraProperties
+     */
+    public void setExtraProperties( java.util.Map extraProperties )
+    {
+        this.extraProperties = extraProperties;
+    } //-- void setExtraProperties( java.util.Map )
+
+    /**
+     * Set the LDAP host.
+     * 
+     * @param hostName
+     */
+    public void setHostName( String hostName )
+    {
+        this.hostName = hostName;
+    } //-- void setHostName( String )
+
+    /**
+     * Set the LDAP password.
+     * 
+     * @param password
+     */
+    public void setPassword( String password )
+    {
+        this.password = password;
+    } //-- void setPassword( String )
+
+    /**
+     * Set the LDAP port.
+     * 
+     * @param port
+     */
+    public void setPort( int port )
+    {
+        this.port = port;
+    } //-- void setPort( int )
+
+    /**
+     * Set ssl LDAP connection.
+     * 
+     * @param ssl
+     */
+    public void setSsl( boolean ssl )
+    {
+        this.ssl = ssl;
+    } //-- void setSsl( boolean )
+
+    /**
+     * Set will use role name as LDAP group.
+     * 
+     * @param useRoleNameAsGroup
+     */
+    public void setUseRoleNameAsGroup( boolean useRoleNameAsGroup )
+    {
+        this.useRoleNameAsGroup = useRoleNameAsGroup;
+    } //-- void setUseRoleNameAsGroup( boolean )
+
+    /**
+     * Set lDAP writable.
+     * 
+     * @param writable
+     */
+    public void setWritable( boolean writable )
+    {
+        this.writable = writable;
+    } //-- void setWritable( boolean )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/LdapGroupMapping.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/LdapGroupMapping.java
new file mode 100644
index 0000000..05288c1
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/LdapGroupMapping.java
@@ -0,0 +1,116 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * configuration of a LDAP group to Archiva roles.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class LdapGroupMapping
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * LDAP Group.
+     */
+    private String group;
+
+    /**
+     * Field roleNames.
+     */
+    private java.util.List<String> roleNames;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addRoleName.
+     * 
+     * @param string
+     */
+    public void addRoleName( String string )
+    {
+        getRoleNames().add( string );
+    } //-- void addRoleName( String )
+
+    /**
+     * Get lDAP Group.
+     * 
+     * @return String
+     */
+    public String getGroup()
+    {
+        return this.group;
+    } //-- String getGroup()
+
+    /**
+     * Method getRoleNames.
+     * 
+     * @return List
+     */
+    public java.util.List<String> getRoleNames()
+    {
+        if ( this.roleNames == null )
+        {
+            this.roleNames = new java.util.ArrayList<String>();
+        }
+
+        return this.roleNames;
+    } //-- java.util.List<String> getRoleNames()
+
+    /**
+     * Method removeRoleName.
+     * 
+     * @param string
+     */
+    public void removeRoleName( String string )
+    {
+        getRoleNames().remove( string );
+    } //-- void removeRoleName( String )
+
+    /**
+     * Set lDAP Group.
+     * 
+     * @param group
+     */
+    public void setGroup( String group )
+    {
+        this.group = group;
+    } //-- void setGroup( String )
+
+    /**
+     * Set archiva roles.
+     * 
+     * @param roleNames
+     */
+    public void setRoleNames( java.util.List<String> roleNames )
+    {
+        this.roleNames = roleNames;
+    } //-- void setRoleNames( java.util.List )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/LegacyArtifactPath.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/LegacyArtifactPath.java
new file mode 100644
index 0000000..695245f
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/LegacyArtifactPath.java
@@ -0,0 +1,158 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class LegacyArtifactPath.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class LegacyArtifactPath
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * 
+     *             The legacy path.
+     *           
+     */
+    private String path;
+
+    /**
+     * 
+     *             The artifact reference, as " [groupId] :
+     * [artifactId] : [version] : [classifier] : [type] ".
+     *           
+     */
+    private String artifact;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get the artifact reference, as " [groupId] : [artifactId] :
+     * [version] : [classifier] : [type] ".
+     * 
+     * @return String
+     */
+    public String getArtifact()
+    {
+        return this.artifact;
+    } //-- String getArtifact()
+
+    /**
+     * Get the legacy path.
+     * 
+     * @return String
+     */
+    public String getPath()
+    {
+        return this.path;
+    } //-- String getPath()
+
+    /**
+     * Set the artifact reference, as " [groupId] : [artifactId] :
+     * [version] : [classifier] : [type] ".
+     * 
+     * @param artifact
+     */
+    public void setArtifact( String artifact )
+    {
+        this.artifact = artifact;
+    } //-- void setArtifact( String )
+
+    /**
+     * Set the legacy path.
+     * 
+     * @param path
+     */
+    public void setPath( String path )
+    {
+        this.path = path;
+    } //-- void setPath( String )
+
+    
+    public boolean match( String path )
+    {
+        return path.equals( this.path );
+    }
+
+    public String getGroupId()
+    {
+        return artifact.split( ":" )[0];
+    }
+
+    public String getArtifactId()
+    {
+        return artifact.split( ":" )[1];
+    }
+        
+    public String getVersion()
+    {
+        return artifact.split( ":" )[2];
+    }
+    
+    public String getClassifier()
+    {
+        String classifier = artifact.split( ":" )[3];
+        return classifier.length() > 0 ? classifier : null;
+    }
+    
+    public String getType()
+    {
+        return artifact.split( ":" )[4];
+    }
+
+    @Override
+    public boolean equals( Object o )
+    {
+        if ( this == o )
+        {
+            return true;
+        }
+        if ( o == null || getClass() != o.getClass() )
+        {
+            return false;
+        }
+
+        LegacyArtifactPath that = (LegacyArtifactPath) o;
+
+        if ( path != null ? !path.equals( that.path ) : that.path != null )
+        {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return path != null ? 37 + path.hashCode() : 0;
+    }
+       
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ManagedRepositoryConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ManagedRepositoryConfiguration.java
new file mode 100644
index 0000000..a8da04d
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ManagedRepositoryConfiguration.java
@@ -0,0 +1,353 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class ManagedRepositoryConfiguration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class ManagedRepositoryConfiguration
+    extends AbstractRepositoryConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * 
+     *             The file system location for this repository.
+     *           
+     */
+    private String location;
+
+    /**
+     * True if this repository contains release versioned artifacts.
+     */
+    private boolean releases = true;
+
+    /**
+     * True if re-deployment of artifacts already in the repository
+     * will be blocked.
+     */
+    private boolean blockRedeployments = false;
+
+    /**
+     * True if this repository contains snapshot versioned artifacts
+     */
+    private boolean snapshots = false;
+
+    /**
+     * True if this repository should be scanned and processed.
+     */
+    private boolean scanned = true;
+
+    /**
+     * 
+     *             When to run the refresh task.
+     *             Default is every hour
+     *           .
+     */
+    private String refreshCronExpression = "0 0 * * * ?";
+
+    /**
+     * 
+     *             The total count of the artifact to be retained
+     * for each snapshot.
+     *           
+     */
+    private int retentionCount = 2;
+
+    /**
+     * 
+     *             The number of days after which snapshots will be
+     * removed.
+     *           
+     */
+    private int retentionPeriod = 100;
+
+    /**
+     * 
+     *             True if the released snapshots are to be removed
+     * from the repo during repository purge.
+     *           
+     */
+    private boolean deleteReleasedSnapshots = false;
+
+    /**
+     * 
+     *             True to not generate packed index (note you
+     * won't be able to export your index.
+     *           
+     */
+    private boolean skipPackedIndexCreation = false;
+
+    /**
+     * 
+     *             Need a staging repository
+     *           .
+     */
+    private boolean stageRepoNeeded = false;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get the file system location for this repository.
+     * 
+     * @return String
+     */
+    public String getLocation()
+    {
+        return this.location;
+    } //-- String getLocation()
+
+    /**
+     * Get when to run the refresh task.
+     *             Default is every hour.
+     * 
+     * @return String
+     */
+    public String getRefreshCronExpression()
+    {
+        return this.refreshCronExpression;
+    } //-- String getRefreshCronExpression()
+
+    /**
+     * Get the total count of the artifact to be retained for each
+     * snapshot.
+     * 
+     * @return int
+     */
+    public int getRetentionCount()
+    {
+        return this.retentionCount;
+    } //-- int getRetentionCount()
+
+    /**
+     * Get the number of days after which snapshots will be
+     * removed.
+     * 
+     * @return int
+     */
+    public int getRetentionPeriod()
+    {
+        return this.retentionPeriod;
+    } //-- int getRetentionPeriod()
+
+    /**
+     * Get true if re-deployment of artifacts already in the
+     * repository will be blocked.
+     * 
+     * @return boolean
+     */
+    public boolean isBlockRedeployments()
+    {
+        return this.blockRedeployments;
+    } //-- boolean isBlockRedeployments()
+
+    /**
+     * Get true if the released snapshots are to be removed from
+     * the repo during repository purge.
+     * 
+     * @return boolean
+     */
+    public boolean isDeleteReleasedSnapshots()
+    {
+        return this.deleteReleasedSnapshots;
+    } //-- boolean isDeleteReleasedSnapshots()
+
+    /**
+     * Get true if this repository contains release versioned
+     * artifacts.
+     * 
+     * @return boolean
+     */
+    public boolean isReleases()
+    {
+        return this.releases;
+    } //-- boolean isReleases()
+
+    /**
+     * Get true if this repository should be scanned and processed.
+     * 
+     * @return boolean
+     */
+    public boolean isScanned()
+    {
+        return this.scanned;
+    } //-- boolean isScanned()
+
+    /**
+     * Get true to not generate packed index (note you won't be
+     * able to export your index.
+     * 
+     * @return boolean
+     */
+    public boolean isSkipPackedIndexCreation()
+    {
+        return this.skipPackedIndexCreation;
+    } //-- boolean isSkipPackedIndexCreation()
+
+    /**
+     * Get true if this repository contains snapshot versioned
+     * artifacts.
+     * 
+     * @return boolean
+     */
+    public boolean isSnapshots()
+    {
+        return this.snapshots;
+    } //-- boolean isSnapshots()
+
+    /**
+     * Get need a staging repository.
+     * 
+     * @return boolean
+     */
+    public boolean isStageRepoNeeded()
+    {
+        return this.stageRepoNeeded;
+    } //-- boolean isStageRepoNeeded()
+
+    /**
+     * Set true if re-deployment of artifacts already in the
+     * repository will be blocked.
+     * 
+     * @param blockRedeployments
+     */
+    public void setBlockRedeployments( boolean blockRedeployments )
+    {
+        this.blockRedeployments = blockRedeployments;
+    } //-- void setBlockRedeployments( boolean )
+
+    /**
+     * Set true if the released snapshots are to be removed from
+     * the repo during repository purge.
+     * 
+     * @param deleteReleasedSnapshots
+     */
+    public void setDeleteReleasedSnapshots( boolean deleteReleasedSnapshots )
+    {
+        this.deleteReleasedSnapshots = deleteReleasedSnapshots;
+    } //-- void setDeleteReleasedSnapshots( boolean )
+
+    /**
+     * Set the file system location for this repository.
+     * 
+     * @param location
+     */
+    public void setLocation( String location )
+    {
+        this.location = location;
+    } //-- void setLocation( String )
+
+    /**
+     * Set when to run the refresh task.
+     *             Default is every hour.
+     * 
+     * @param refreshCronExpression
+     */
+    public void setRefreshCronExpression( String refreshCronExpression )
+    {
+        this.refreshCronExpression = refreshCronExpression;
+    } //-- void setRefreshCronExpression( String )
+
+    /**
+     * Set true if this repository contains release versioned
+     * artifacts.
+     * 
+     * @param releases
+     */
+    public void setReleases( boolean releases )
+    {
+        this.releases = releases;
+    } //-- void setReleases( boolean )
+
+    /**
+     * Set the total count of the artifact to be retained for each
+     * snapshot.
+     * 
+     * @param retentionCount
+     */
+    public void setRetentionCount( int retentionCount )
+    {
+        this.retentionCount = retentionCount;
+    } //-- void setRetentionCount( int )
+
+    /**
+     * Set the number of days after which snapshots will be
+     * removed.
+     * 
+     * @param retentionPeriod
+     */
+    public void setRetentionPeriod( int retentionPeriod )
+    {
+        this.retentionPeriod = retentionPeriod;
+    } //-- void setRetentionPeriod( int )
+
+    /**
+     * Set true if this repository should be scanned and processed.
+     * 
+     * @param scanned
+     */
+    public void setScanned( boolean scanned )
+    {
+        this.scanned = scanned;
+    } //-- void setScanned( boolean )
+
+    /**
+     * Set true to not generate packed index (note you won't be
+     * able to export your index.
+     * 
+     * @param skipPackedIndexCreation
+     */
+    public void setSkipPackedIndexCreation( boolean skipPackedIndexCreation )
+    {
+        this.skipPackedIndexCreation = skipPackedIndexCreation;
+    } //-- void setSkipPackedIndexCreation( boolean )
+
+    /**
+     * Set true if this repository contains snapshot versioned
+     * artifacts.
+     * 
+     * @param snapshots
+     */
+    public void setSnapshots( boolean snapshots )
+    {
+        this.snapshots = snapshots;
+    } //-- void setSnapshots( boolean )
+
+    /**
+     * Set need a staging repository.
+     * 
+     * @param stageRepoNeeded
+     */
+    public void setStageRepoNeeded( boolean stageRepoNeeded )
+    {
+        this.stageRepoNeeded = stageRepoNeeded;
+    } //-- void setStageRepoNeeded( boolean )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/NetworkConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/NetworkConfiguration.java
new file mode 100644
index 0000000..a7eacec
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/NetworkConfiguration.java
@@ -0,0 +1,119 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * 
+ *         The network configuration for external http request to
+ * repositories.
+ *       
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class NetworkConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * maximum total external http connections.
+     */
+    private int maxTotal = 30;
+
+    /**
+     * maximum total external http connections per host.
+     */
+    private int maxTotalPerHost = 30;
+
+    /**
+     * use or not http connection pooling default true.
+     */
+    private boolean usePooling = true;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get maximum total external http connections.
+     * 
+     * @return int
+     */
+    public int getMaxTotal()
+    {
+        return this.maxTotal;
+    } //-- int getMaxTotal()
+
+    /**
+     * Get maximum total external http connections per host.
+     * 
+     * @return int
+     */
+    public int getMaxTotalPerHost()
+    {
+        return this.maxTotalPerHost;
+    } //-- int getMaxTotalPerHost()
+
+    /**
+     * Get use or not http connection pooling default true.
+     * 
+     * @return boolean
+     */
+    public boolean isUsePooling()
+    {
+        return this.usePooling;
+    } //-- boolean isUsePooling()
+
+    /**
+     * Set maximum total external http connections.
+     * 
+     * @param maxTotal
+     */
+    public void setMaxTotal( int maxTotal )
+    {
+        this.maxTotal = maxTotal;
+    } //-- void setMaxTotal( int )
+
+    /**
+     * Set maximum total external http connections per host.
+     * 
+     * @param maxTotalPerHost
+     */
+    public void setMaxTotalPerHost( int maxTotalPerHost )
+    {
+        this.maxTotalPerHost = maxTotalPerHost;
+    } //-- void setMaxTotalPerHost( int )
+
+    /**
+     * Set use or not http connection pooling default true.
+     * 
+     * @param usePooling
+     */
+    public void setUsePooling( boolean usePooling )
+    {
+        this.usePooling = usePooling;
+    } //-- void setUsePooling( boolean )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/NetworkProxyConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/NetworkProxyConfiguration.java
new file mode 100644
index 0000000..234ef8a
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/NetworkProxyConfiguration.java
@@ -0,0 +1,259 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class NetworkProxyConfiguration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class NetworkProxyConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * 
+     *             The ID for this proxy.
+     *           
+     */
+    private String id;
+
+    /**
+     * 
+     *             The network protocol to use with this proxy:
+     * "http", "socks-4"
+     *           .
+     */
+    private String protocol = "http";
+
+    /**
+     * 
+     *             The proxy host.
+     *           
+     */
+    private String host;
+
+    /**
+     * 
+     *             The proxy port.
+     *           
+     */
+    private int port = 8080;
+
+    /**
+     * 
+     *             The proxy user.
+     *           
+     */
+    private String username;
+
+    /**
+     * 
+     *             The proxy password.
+     *           
+     */
+    private String password;
+
+    /**
+     * 
+     *             Use ntlm authentification.
+     *           
+     */
+    private boolean useNtlm = false;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get the proxy host.
+     * 
+     * @return String
+     */
+    public String getHost()
+    {
+        return this.host;
+    } //-- String getHost()
+
+    /**
+     * Get the ID for this proxy.
+     * 
+     * @return String
+     */
+    public String getId()
+    {
+        return this.id;
+    } //-- String getId()
+
+    /**
+     * Get the proxy password.
+     * 
+     * @return String
+     */
+    public String getPassword()
+    {
+        return this.password;
+    } //-- String getPassword()
+
+    /**
+     * Get the proxy port.
+     * 
+     * @return int
+     */
+    public int getPort()
+    {
+        return this.port;
+    } //-- int getPort()
+
+    /**
+     * Get the network protocol to use with this proxy: "http",
+     * "socks-4".
+     * 
+     * @return String
+     */
+    public String getProtocol()
+    {
+        return this.protocol;
+    } //-- String getProtocol()
+
+    /**
+     * Get the proxy user.
+     * 
+     * @return String
+     */
+    public String getUsername()
+    {
+        return this.username;
+    } //-- String getUsername()
+
+    /**
+     * Get use ntlm authentification.
+     * 
+     * @return boolean
+     */
+    public boolean isUseNtlm()
+    {
+        return this.useNtlm;
+    } //-- boolean isUseNtlm()
+
+    /**
+     * Set the proxy host.
+     * 
+     * @param host
+     */
+    public void setHost( String host )
+    {
+        this.host = host;
+    } //-- void setHost( String )
+
+    /**
+     * Set the ID for this proxy.
+     * 
+     * @param id
+     */
+    public void setId( String id )
+    {
+        this.id = id;
+    } //-- void setId( String )
+
+    /**
+     * Set the proxy password.
+     * 
+     * @param password
+     */
+    public void setPassword( String password )
+    {
+        this.password = password;
+    } //-- void setPassword( String )
+
+    /**
+     * Set the proxy port.
+     * 
+     * @param port
+     */
+    public void setPort( int port )
+    {
+        this.port = port;
+    } //-- void setPort( int )
+
+    /**
+     * Set the network protocol to use with this proxy: "http",
+     * "socks-4".
+     * 
+     * @param protocol
+     */
+    public void setProtocol( String protocol )
+    {
+        this.protocol = protocol;
+    } //-- void setProtocol( String )
+
+    /**
+     * Set use ntlm authentification.
+     * 
+     * @param useNtlm
+     */
+    public void setUseNtlm( boolean useNtlm )
+    {
+        this.useNtlm = useNtlm;
+    } //-- void setUseNtlm( boolean )
+
+    /**
+     * Set the proxy user.
+     * 
+     * @param username
+     */
+    public void setUsername( String username )
+    {
+        this.username = username;
+    } //-- void setUsername( String )
+
+    
+            public int hashCode()
+            {
+                int result = 17;
+                result = 37 * result + ( id != null ? id.hashCode() : 0 );
+                return result;
+            }
+
+            public boolean equals( Object other )
+            {
+                if ( this == other )
+                {
+                    return true;
+                }
+
+                if ( !( other instanceof NetworkProxyConfiguration ) )
+                {
+                    return false;
+                }
+
+                NetworkProxyConfiguration that = (NetworkProxyConfiguration) other;
+                boolean result = true;
+                result = result && ( getId() == null ? that.getId() == null : getId().equals( that.getId() ) );
+                return result;
+            }
+          
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/OrganisationInformation.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/OrganisationInformation.java
new file mode 100644
index 0000000..a7f7fb6
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/OrganisationInformation.java
@@ -0,0 +1,118 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * 
+ *         The organisation information settings.
+ *       
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class OrganisationInformation
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * name of the organisation.
+     */
+    private String name;
+
+    /**
+     * name of the organisation.
+     */
+    private String url;
+
+    /**
+     * name of the organisation.
+     */
+    private String logoLocation;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get name of the organisation.
+     * 
+     * @return String
+     */
+    public String getLogoLocation()
+    {
+        return this.logoLocation;
+    } //-- String getLogoLocation()
+
+    /**
+     * Get name of the organisation.
+     * 
+     * @return String
+     */
+    public String getName()
+    {
+        return this.name;
+    } //-- String getName()
+
+    /**
+     * Get name of the organisation.
+     * 
+     * @return String
+     */
+    public String getUrl()
+    {
+        return this.url;
+    } //-- String getUrl()
+
+    /**
+     * Set name of the organisation.
+     * 
+     * @param logoLocation
+     */
+    public void setLogoLocation( String logoLocation )
+    {
+        this.logoLocation = logoLocation;
+    } //-- void setLogoLocation( String )
+
+    /**
+     * Set name of the organisation.
+     * 
+     * @param name
+     */
+    public void setName( String name )
+    {
+        this.name = name;
+    } //-- void setName( String )
+
+    /**
+     * Set name of the organisation.
+     * 
+     * @param url
+     */
+    public void setUrl( String url )
+    {
+        this.url = url;
+    } //-- void setUrl( String )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ProxyConnectorConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ProxyConnectorConfiguration.java
new file mode 100644
index 0000000..944c8b6
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ProxyConnectorConfiguration.java
@@ -0,0 +1,120 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class ProxyConnectorConfiguration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class ProxyConnectorConfiguration
+    extends AbstractRepositoryConnectorConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * 
+     *             The order of the proxy connectors. (0 means no
+     * order specified)
+     *           .
+     */
+    private int order = 0;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get the order of the proxy connectors. (0 means no order
+     * specified).
+     * 
+     * @return int
+     */
+    public int getOrder()
+    {
+        return this.order;
+    } //-- int getOrder()
+
+    /**
+     * Set the order of the proxy connectors. (0 means no order
+     * specified).
+     * 
+     * @param order
+     */
+    public void setOrder( int order )
+    {
+        this.order = order;
+    } //-- void setOrder( int )
+
+    
+    /**
+     * The order id for UNORDERED
+     */
+    public static final int UNORDERED = 0;
+
+    /**
+     * The policy key {@link #getPolicies()} for error handling.
+     * See {@link org.apache.archiva.policies.DownloadErrorPolicy}
+     * for details on potential values to this policy key.
+     */
+    public static final String POLICY_PROPAGATE_ERRORS = "propagate-errors";
+
+    /**
+     * The policy key {@link #getPolicies()} for error handling when an artifact is present.
+     * See {@link org.apache.archiva.policies.DownloadErrorPolicy}
+     * for details on potential values to this policy key.
+     */
+    public static final String POLICY_PROPAGATE_ERRORS_ON_UPDATE = "propagate-errors-on-update";
+
+    /**
+     * The policy key {@link #getPolicies()} for snapshot handling.
+     * See {@link org.apache.archiva.policies.SnapshotsPolicy}
+     * for details on potential values to this policy key.
+     */
+    public static final String POLICY_SNAPSHOTS = "snapshots";
+
+    /**
+     * The policy key {@link #getPolicies()} for releases handling.
+     * See {@link org.apache.archiva.policies.ReleasesPolicy}
+     * for details on potential values to this policy key.
+     */
+    public static final String POLICY_RELEASES = "releases";
+
+    /**
+     * The policy key {@link #getPolicies()} for checksum handling.
+     * See {@link org.apache.archiva.policies.ChecksumPolicy}
+     * for details on potential values to this policy key.
+     */
+    public static final String POLICY_CHECKSUM = "checksum";
+
+    /**
+     * The policy key {@link #getPolicies()} for cache-failures handling.
+     * See {@link org.apache.archiva.policies.CachedFailuresPolicy}
+     * for details on potential values to this policy key.
+     */
+    public static final String POLICY_CACHE_FAILURES = "cache-failures";
+          
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ProxyConnectorRuleConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ProxyConnectorRuleConfiguration.java
new file mode 100644
index 0000000..3340e05
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ProxyConnectorRuleConfiguration.java
@@ -0,0 +1,147 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class ProxyConnectorRuleConfiguration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class ProxyConnectorRuleConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * 
+     *             The type if this rule: whiteList, blackList
+     * etc..
+     *           
+     */
+    private String ruleType;
+
+    /**
+     * 
+     *             The pattern for this rule: whiteList, blackList
+     * etc..
+     *           
+     */
+    private String pattern;
+
+    /**
+     * Field proxyConnectors.
+     */
+    private java.util.List<ProxyConnectorConfiguration> proxyConnectors;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addProxyConnector.
+     * 
+     * @param proxyConnectorConfiguration
+     */
+    public void addProxyConnector( ProxyConnectorConfiguration proxyConnectorConfiguration )
+    {
+        getProxyConnectors().add( proxyConnectorConfiguration );
+    } //-- void addProxyConnector( ProxyConnectorConfiguration )
+
+    /**
+     * Get the pattern for this rule: whiteList, blackList etc..
+     * 
+     * @return String
+     */
+    public String getPattern()
+    {
+        return this.pattern;
+    } //-- String getPattern()
+
+    /**
+     * Method getProxyConnectors.
+     * 
+     * @return List
+     */
+    public java.util.List<ProxyConnectorConfiguration> getProxyConnectors()
+    {
+        if ( this.proxyConnectors == null )
+        {
+            this.proxyConnectors = new java.util.ArrayList<ProxyConnectorConfiguration>();
+        }
+
+        return this.proxyConnectors;
+    } //-- java.util.List<ProxyConnectorConfiguration> getProxyConnectors()
+
+    /**
+     * Get the type if this rule: whiteList, blackList etc..
+     * 
+     * @return String
+     */
+    public String getRuleType()
+    {
+        return this.ruleType;
+    } //-- String getRuleType()
+
+    /**
+     * Method removeProxyConnector.
+     * 
+     * @param proxyConnectorConfiguration
+     */
+    public void removeProxyConnector( ProxyConnectorConfiguration proxyConnectorConfiguration )
+    {
+        getProxyConnectors().remove( proxyConnectorConfiguration );
+    } //-- void removeProxyConnector( ProxyConnectorConfiguration )
+
+    /**
+     * Set the pattern for this rule: whiteList, blackList etc..
+     * 
+     * @param pattern
+     */
+    public void setPattern( String pattern )
+    {
+        this.pattern = pattern;
+    } //-- void setPattern( String )
+
+    /**
+     * Set associated proxyConnectors configuration.
+     * 
+     * @param proxyConnectors
+     */
+    public void setProxyConnectors( java.util.List<ProxyConnectorConfiguration> proxyConnectors )
+    {
+        this.proxyConnectors = proxyConnectors;
+    } //-- void setProxyConnectors( java.util.List )
+
+    /**
+     * Set the type if this rule: whiteList, blackList etc..
+     * 
+     * @param ruleType
+     */
+    public void setRuleType( String ruleType )
+    {
+        this.ruleType = ruleType;
+    } //-- void setRuleType( String )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RedbackRuntimeConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RedbackRuntimeConfiguration.java
new file mode 100644
index 0000000..2c89929
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RedbackRuntimeConfiguration.java
@@ -0,0 +1,341 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * 
+ *         The redback runtime configuration.
+ *       
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class RedbackRuntimeConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * flag to know if redback configuration has been
+     * checked/migrated.
+     */
+    private boolean migratedFromRedbackConfiguration = false;
+
+    /**
+     * Field userManagerImpls.
+     */
+    private java.util.List<String> userManagerImpls;
+
+    /**
+     * Field rbacManagerImpls.
+     */
+    private java.util.List<String> rbacManagerImpls;
+
+    /**
+     * the ldap configuration.
+     */
+    private LdapConfiguration ldapConfiguration;
+
+    /**
+     * Field ldapGroupMappings.
+     */
+    private java.util.List<LdapGroupMapping> ldapGroupMappings;
+
+    /**
+     * Field configurationProperties.
+     */
+    private java.util.Map configurationProperties;
+
+    /**
+     * flag to know if redback will use a cache to prevent
+     * searching users already found.
+     */
+    private boolean useUsersCache = true;
+
+    /**
+     * the users cache configuration.
+     */
+    private CacheConfiguration usersCacheConfiguration;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addConfigurationProperty.
+     * 
+     * @param key
+     * @param value
+     */
+    public void addConfigurationProperty( Object key, String value )
+    {
+        getConfigurationProperties().put( key, value );
+    } //-- void addConfigurationProperty( Object, String )
+
+    /**
+     * Method addLdapGroupMapping.
+     * 
+     * @param ldapGroupMapping
+     */
+    public void addLdapGroupMapping( LdapGroupMapping ldapGroupMapping )
+    {
+        getLdapGroupMappings().add( ldapGroupMapping );
+    } //-- void addLdapGroupMapping( LdapGroupMapping )
+
+    /**
+     * Method addRbacManagerImpl.
+     * 
+     * @param string
+     */
+    public void addRbacManagerImpl( String string )
+    {
+        getRbacManagerImpls().add( string );
+    } //-- void addRbacManagerImpl( String )
+
+    /**
+     * Method addUserManagerImpl.
+     * 
+     * @param string
+     */
+    public void addUserManagerImpl( String string )
+    {
+        getUserManagerImpls().add( string );
+    } //-- void addUserManagerImpl( String )
+
+    /**
+     * Method getConfigurationProperties.
+     * 
+     * @return Map
+     */
+    public java.util.Map getConfigurationProperties()
+    {
+        if ( this.configurationProperties == null )
+        {
+            this.configurationProperties = new java.util.HashMap();
+        }
+
+        return this.configurationProperties;
+    } //-- java.util.Map getConfigurationProperties()
+
+    /**
+     * Get the ldap configuration.
+     * 
+     * @return LdapConfiguration
+     */
+    public LdapConfiguration getLdapConfiguration()
+    {
+        return this.ldapConfiguration;
+    } //-- LdapConfiguration getLdapConfiguration()
+
+    /**
+     * Method getLdapGroupMappings.
+     * 
+     * @return List
+     */
+    public java.util.List<LdapGroupMapping> getLdapGroupMappings()
+    {
+        if ( this.ldapGroupMappings == null )
+        {
+            this.ldapGroupMappings = new java.util.ArrayList<LdapGroupMapping>();
+        }
+
+        return this.ldapGroupMappings;
+    } //-- java.util.List<LdapGroupMapping> getLdapGroupMappings()
+
+    /**
+     * Method getRbacManagerImpls.
+     * 
+     * @return List
+     */
+    public java.util.List<String> getRbacManagerImpls()
+    {
+        if ( this.rbacManagerImpls == null )
+        {
+            this.rbacManagerImpls = new java.util.ArrayList<String>();
+        }
+
+        return this.rbacManagerImpls;
+    } //-- java.util.List<String> getRbacManagerImpls()
+
+    /**
+     * Method getUserManagerImpls.
+     * 
+     * @return List
+     */
+    public java.util.List<String> getUserManagerImpls()
+    {
+        if ( this.userManagerImpls == null )
+        {
+            this.userManagerImpls = new java.util.ArrayList<String>();
+        }
+
+        return this.userManagerImpls;
+    } //-- java.util.List<String> getUserManagerImpls()
+
+    /**
+     * Get the users cache configuration.
+     * 
+     * @return CacheConfiguration
+     */
+    public CacheConfiguration getUsersCacheConfiguration()
+    {
+        return this.usersCacheConfiguration;
+    } //-- CacheConfiguration getUsersCacheConfiguration()
+
+    /**
+     * Get flag to know if redback configuration has been
+     * checked/migrated.
+     * 
+     * @return boolean
+     */
+    public boolean isMigratedFromRedbackConfiguration()
+    {
+        return this.migratedFromRedbackConfiguration;
+    } //-- boolean isMigratedFromRedbackConfiguration()
+
+    /**
+     * Get flag to know if redback will use a cache to prevent
+     * searching users already found.
+     * 
+     * @return boolean
+     */
+    public boolean isUseUsersCache()
+    {
+        return this.useUsersCache;
+    } //-- boolean isUseUsersCache()
+
+    /**
+     * Method removeLdapGroupMapping.
+     * 
+     * @param ldapGroupMapping
+     */
+    public void removeLdapGroupMapping( LdapGroupMapping ldapGroupMapping )
+    {
+        getLdapGroupMappings().remove( ldapGroupMapping );
+    } //-- void removeLdapGroupMapping( LdapGroupMapping )
+
+    /**
+     * Method removeRbacManagerImpl.
+     * 
+     * @param string
+     */
+    public void removeRbacManagerImpl( String string )
+    {
+        getRbacManagerImpls().remove( string );
+    } //-- void removeRbacManagerImpl( String )
+
+    /**
+     * Method removeUserManagerImpl.
+     * 
+     * @param string
+     */
+    public void removeUserManagerImpl( String string )
+    {
+        getUserManagerImpls().remove( string );
+    } //-- void removeUserManagerImpl( String )
+
+    /**
+     * Set extra properties for redback configuration.
+     * String/String.
+     * 
+     * @param configurationProperties
+     */
+    public void setConfigurationProperties( java.util.Map configurationProperties )
+    {
+        this.configurationProperties = configurationProperties;
+    } //-- void setConfigurationProperties( java.util.Map )
+
+    /**
+     * Set the ldap configuration.
+     * 
+     * @param ldapConfiguration
+     */
+    public void setLdapConfiguration( LdapConfiguration ldapConfiguration )
+    {
+        this.ldapConfiguration = ldapConfiguration;
+    } //-- void setLdapConfiguration( LdapConfiguration )
+
+    /**
+     * Set ldapGroupMappings.
+     * 
+     * @param ldapGroupMappings
+     */
+    public void setLdapGroupMappings( java.util.List<LdapGroupMapping> ldapGroupMappings )
+    {
+        this.ldapGroupMappings = ldapGroupMappings;
+    } //-- void setLdapGroupMappings( java.util.List )
+
+    /**
+     * Set flag to know if redback configuration has been
+     * checked/migrated.
+     * 
+     * @param migratedFromRedbackConfiguration
+     */
+    public void setMigratedFromRedbackConfiguration( boolean migratedFromRedbackConfiguration )
+    {
+        this.migratedFromRedbackConfiguration = migratedFromRedbackConfiguration;
+    } //-- void setMigratedFromRedbackConfiguration( boolean )
+
+    /**
+     * Set the RBAC Manager impls to use.
+     * 
+     * @param rbacManagerImpls
+     */
+    public void setRbacManagerImpls( java.util.List<String> rbacManagerImpls )
+    {
+        this.rbacManagerImpls = rbacManagerImpls;
+    } //-- void setRbacManagerImpls( java.util.List )
+
+    /**
+     * Set flag to know if redback will use a cache to prevent
+     * searching users already found.
+     * 
+     * @param useUsersCache
+     */
+    public void setUseUsersCache( boolean useUsersCache )
+    {
+        this.useUsersCache = useUsersCache;
+    } //-- void setUseUsersCache( boolean )
+
+    /**
+     * Set the user manager impls to use.
+     * 
+     * @param userManagerImpls
+     */
+    public void setUserManagerImpls( java.util.List<String> userManagerImpls )
+    {
+        this.userManagerImpls = userManagerImpls;
+    } //-- void setUserManagerImpls( java.util.List )
+
+    /**
+     * Set the users cache configuration.
+     * 
+     * @param usersCacheConfiguration
+     */
+    public void setUsersCacheConfiguration( CacheConfiguration usersCacheConfiguration )
+    {
+        this.usersCacheConfiguration = usersCacheConfiguration;
+    } //-- void setUsersCacheConfiguration( CacheConfiguration )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RemoteRepositoryConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RemoteRepositoryConfiguration.java
new file mode 100644
index 0000000..ca49d31
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RemoteRepositoryConfiguration.java
@@ -0,0 +1,452 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class RemoteRepositoryConfiguration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class RemoteRepositoryConfiguration
+    extends AbstractRepositoryConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * 
+     *             The URL for this repository.
+     *           
+     */
+    private String url;
+
+    /**
+     * 
+     *             The Username for this repository.
+     *           
+     */
+    private String username;
+
+    /**
+     * 
+     *             The Password for this repository.
+     *           
+     */
+    private String password;
+
+    /**
+     * 
+     *             Timeout in seconds for connections to this
+     * repository
+     *           .
+     */
+    private int timeout = 60;
+
+    /**
+     * 
+     *             When to run the refresh task.
+     *             Default is every sunday at 8H00.
+     *           
+     */
+    private String refreshCronExpression = "0 0 08 ? * SUN";
+
+    /**
+     * 
+     *             Activate download of remote index if
+     * remoteIndexUrl is set too.
+     *           
+     */
+    private boolean downloadRemoteIndex = false;
+
+    /**
+     * 
+     *             Remote Index Url : if not starting with http
+     * will be relative to the remote repository url.
+     *           
+     */
+    private String remoteIndexUrl;
+
+    /**
+     * 
+     *             Id of the networkProxy to use when downloading
+     * remote index.
+     *           
+     */
+    private String remoteDownloadNetworkProxyId;
+
+    /**
+     * 
+     *             Timeout in seconds for download remote index.
+     * Default is more long than artifact download.
+     *           
+     */
+    private int remoteDownloadTimeout = 300;
+
+    /**
+     * 
+     *             Schedule download of remote index when archiva
+     * start
+     *           .
+     */
+    private boolean downloadRemoteIndexOnStartup = false;
+
+    /**
+     * Field extraParameters.
+     */
+    private java.util.Map extraParameters;
+
+    /**
+     * Field extraHeaders.
+     */
+    private java.util.Map extraHeaders;
+
+    /**
+     * The path to check the repository availability (relative to
+     * the repository URL). Some repositories do not allow
+     * browsing, so a certain artifact must be checked.
+     */
+    private String checkPath;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addExtraHeader.
+     * 
+     * @param key
+     * @param value
+     */
+    public void addExtraHeader( Object key, String value )
+    {
+        getExtraHeaders().put( key, value );
+    } //-- void addExtraHeader( Object, String )
+
+    /**
+     * Method addExtraParameter.
+     * 
+     * @param key
+     * @param value
+     */
+    public void addExtraParameter( Object key, String value )
+    {
+        getExtraParameters().put( key, value );
+    } //-- void addExtraParameter( Object, String )
+
+    /**
+     * Get the path to check the repository availability (relative
+     * to the repository URL). Some repositories do not allow
+     * browsing, so a certain artifact must be checked.
+     * 
+     * @return String
+     */
+    public String getCheckPath()
+    {
+        return this.checkPath;
+    } //-- String getCheckPath()
+
+    /**
+     * Method getExtraHeaders.
+     * 
+     * @return Map
+     */
+    public java.util.Map getExtraHeaders()
+    {
+        if ( this.extraHeaders == null )
+        {
+            this.extraHeaders = new java.util.HashMap();
+        }
+
+        return this.extraHeaders;
+    } //-- java.util.Map getExtraHeaders()
+
+    /**
+     * Method getExtraParameters.
+     * 
+     * @return Map
+     */
+    public java.util.Map getExtraParameters()
+    {
+        if ( this.extraParameters == null )
+        {
+            this.extraParameters = new java.util.HashMap();
+        }
+
+        return this.extraParameters;
+    } //-- java.util.Map getExtraParameters()
+
+    /**
+     * Get the Password for this repository.
+     * 
+     * @return String
+     */
+    public String getPassword()
+    {
+        return this.password;
+    } //-- String getPassword()
+
+    /**
+     * Get when to run the refresh task.
+     *             Default is every sunday at 8H00.
+     * 
+     * @return String
+     */
+    public String getRefreshCronExpression()
+    {
+        return this.refreshCronExpression;
+    } //-- String getRefreshCronExpression()
+
+    /**
+     * Get id of the networkProxy to use when downloading remote
+     * index.
+     * 
+     * @return String
+     */
+    public String getRemoteDownloadNetworkProxyId()
+    {
+        return this.remoteDownloadNetworkProxyId;
+    } //-- String getRemoteDownloadNetworkProxyId()
+
+    /**
+     * Get timeout in seconds for download remote index. Default is
+     * more long than artifact download.
+     * 
+     * @return int
+     */
+    public int getRemoteDownloadTimeout()
+    {
+        return this.remoteDownloadTimeout;
+    } //-- int getRemoteDownloadTimeout()
+
+    /**
+     * Get remote Index Url : if not starting with http will be
+     * relative to the remote repository url.
+     * 
+     * @return String
+     */
+    public String getRemoteIndexUrl()
+    {
+        return this.remoteIndexUrl;
+    } //-- String getRemoteIndexUrl()
+
+    /**
+     * Get timeout in seconds for connections to this repository.
+     * 
+     * @return int
+     */
+    public int getTimeout()
+    {
+        return this.timeout;
+    } //-- int getTimeout()
+
+    /**
+     * Get the URL for this repository.
+     * 
+     * @return String
+     */
+    public String getUrl()
+    {
+        return this.url;
+    } //-- String getUrl()
+
+    /**
+     * Get the Username for this repository.
+     * 
+     * @return String
+     */
+    public String getUsername()
+    {
+        return this.username;
+    } //-- String getUsername()
+
+    /**
+     * Get activate download of remote index if remoteIndexUrl is
+     * set too.
+     * 
+     * @return boolean
+     */
+    public boolean isDownloadRemoteIndex()
+    {
+        return this.downloadRemoteIndex;
+    } //-- boolean isDownloadRemoteIndex()
+
+    /**
+     * Get schedule download of remote index when archiva start.
+     * 
+     * @return boolean
+     */
+    public boolean isDownloadRemoteIndexOnStartup()
+    {
+        return this.downloadRemoteIndexOnStartup;
+    } //-- boolean isDownloadRemoteIndexOnStartup()
+
+    /**
+     * Set the path to check the repository availability (relative
+     * to the repository URL). Some repositories do not allow
+     * browsing, so a certain artifact must be checked.
+     * 
+     * @param checkPath
+     */
+    public void setCheckPath( String checkPath )
+    {
+        this.checkPath = checkPath;
+    } //-- void setCheckPath( String )
+
+    /**
+     * Set activate download of remote index if remoteIndexUrl is
+     * set too.
+     * 
+     * @param downloadRemoteIndex
+     */
+    public void setDownloadRemoteIndex( boolean downloadRemoteIndex )
+    {
+        this.downloadRemoteIndex = downloadRemoteIndex;
+    } //-- void setDownloadRemoteIndex( boolean )
+
+    /**
+     * Set schedule download of remote index when archiva start.
+     * 
+     * @param downloadRemoteIndexOnStartup
+     */
+    public void setDownloadRemoteIndexOnStartup( boolean downloadRemoteIndexOnStartup )
+    {
+        this.downloadRemoteIndexOnStartup = downloadRemoteIndexOnStartup;
+    } //-- void setDownloadRemoteIndexOnStartup( boolean )
+
+    /**
+     * Set additional http headers to add to url when requesting
+     * remote repositories.
+     * 
+     * @param extraHeaders
+     */
+    public void setExtraHeaders( java.util.Map extraHeaders )
+    {
+        this.extraHeaders = extraHeaders;
+    } //-- void setExtraHeaders( java.util.Map )
+
+    /**
+     * Set additionnal request parameters to add to url when
+     * requesting remote repositories.
+     * 
+     * @param extraParameters
+     */
+    public void setExtraParameters( java.util.Map extraParameters )
+    {
+        this.extraParameters = extraParameters;
+    } //-- void setExtraParameters( java.util.Map )
+
+    /**
+     * Set the Password for this repository.
+     * 
+     * @param password
+     */
+    public void setPassword( String password )
+    {
+        this.password = password;
+    } //-- void setPassword( String )
+
+    /**
+     * Set when to run the refresh task.
+     *             Default is every sunday at 8H00.
+     * 
+     * @param refreshCronExpression
+     */
+    public void setRefreshCronExpression( String refreshCronExpression )
+    {
+        this.refreshCronExpression = refreshCronExpression;
+    } //-- void setRefreshCronExpression( String )
+
+    /**
+     * Set id of the networkProxy to use when downloading remote
+     * index.
+     * 
+     * @param remoteDownloadNetworkProxyId
+     */
+    public void setRemoteDownloadNetworkProxyId( String remoteDownloadNetworkProxyId )
+    {
+        this.remoteDownloadNetworkProxyId = remoteDownloadNetworkProxyId;
+    } //-- void setRemoteDownloadNetworkProxyId( String )
+
+    /**
+     * Set timeout in seconds for download remote index. Default is
+     * more long than artifact download.
+     * 
+     * @param remoteDownloadTimeout
+     */
+    public void setRemoteDownloadTimeout( int remoteDownloadTimeout )
+    {
+        this.remoteDownloadTimeout = remoteDownloadTimeout;
+    } //-- void setRemoteDownloadTimeout( int )
+
+    /**
+     * Set remote Index Url : if not starting with http will be
+     * relative to the remote repository url.
+     * 
+     * @param remoteIndexUrl
+     */
+    public void setRemoteIndexUrl( String remoteIndexUrl )
+    {
+        this.remoteIndexUrl = remoteIndexUrl;
+    } //-- void setRemoteIndexUrl( String )
+
+    /**
+     * Set timeout in seconds for connections to this repository.
+     * 
+     * @param timeout
+     */
+    public void setTimeout( int timeout )
+    {
+        this.timeout = timeout;
+    } //-- void setTimeout( int )
+
+    /**
+     * Set the URL for this repository.
+     * 
+     * @param url
+     */
+    public void setUrl( String url )
+    {
+        this.url = url;
+    } //-- void setUrl( String )
+
+    /**
+     * Set the Username for this repository.
+     * 
+     * @param username
+     */
+    public void setUsername( String username )
+    {
+        this.username = username;
+    } //-- void setUsername( String )
+
+    
+            public String toString()
+            {
+                return "RemoteRepositoryConfiguration id:'" + getId() + "',name:'" + getName() +"'";
+            }
+
+
+       
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RepositoryCheckPath.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RepositoryCheckPath.java
new file mode 100644
index 0000000..27f7660
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RepositoryCheckPath.java
@@ -0,0 +1,96 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class RepositoryCheckPath.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class RepositoryCheckPath
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * 
+     *             The URL for which this path should be used
+     *           .
+     */
+    private String url;
+
+    /**
+     * 
+     *             The path to use for checking the repository
+     * connection.
+     *           
+     */
+    private String path;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get the path to use for checking the repository connection.
+     * 
+     * @return String
+     */
+    public String getPath()
+    {
+        return this.path;
+    } //-- String getPath()
+
+    /**
+     * Get the URL for which this path should be used.
+     * 
+     * @return String
+     */
+    public String getUrl()
+    {
+        return this.url;
+    } //-- String getUrl()
+
+    /**
+     * Set the path to use for checking the repository connection.
+     * 
+     * @param path
+     */
+    public void setPath( String path )
+    {
+        this.path = path;
+    } //-- void setPath( String )
+
+    /**
+     * Set the URL for which this path should be used.
+     * 
+     * @param url
+     */
+    public void setUrl( String url )
+    {
+        this.url = url;
+    } //-- void setUrl( String )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RepositoryGroupConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RepositoryGroupConfiguration.java
new file mode 100644
index 0000000..826fc50
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RepositoryGroupConfiguration.java
@@ -0,0 +1,198 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class RepositoryGroupConfiguration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class RepositoryGroupConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * The id of the repository group.
+     */
+    private String id;
+
+    /**
+     * The path of the merged index.
+     */
+    private String mergedIndexPath = ".indexer";
+
+    /**
+     * The time to live of the merged index of the repository group.
+     */
+    private int mergedIndexTtl = 30;
+
+    /**
+     * 
+     *           When to run the index merging for this group.
+     *           No default value.
+     *           
+     */
+    private String cronExpression = "";
+
+    /**
+     * Field repositories.
+     */
+    private java.util.List<String> repositories;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addRepository.
+     * 
+     * @param string
+     */
+    public void addRepository( String string )
+    {
+        getRepositories().add( string );
+    } //-- void addRepository( String )
+
+    /**
+     * Get when to run the index merging for this group.
+     *           No default value.
+     * 
+     * @return String
+     */
+    public String getCronExpression()
+    {
+        return this.cronExpression;
+    } //-- String getCronExpression()
+
+    /**
+     * Get the id of the repository group.
+     * 
+     * @return String
+     */
+    public String getId()
+    {
+        return this.id;
+    } //-- String getId()
+
+    /**
+     * Get the path of the merged index.
+     * 
+     * @return String
+     */
+    public String getMergedIndexPath()
+    {
+        return this.mergedIndexPath;
+    } //-- String getMergedIndexPath()
+
+    /**
+     * Get the time to live of the merged index of the repository
+     * group.
+     * 
+     * @return int
+     */
+    public int getMergedIndexTtl()
+    {
+        return this.mergedIndexTtl;
+    } //-- int getMergedIndexTtl()
+
+    /**
+     * Method getRepositories.
+     * 
+     * @return List
+     */
+    public java.util.List<String> getRepositories()
+    {
+        if ( this.repositories == null )
+        {
+            this.repositories = new java.util.ArrayList<String>();
+        }
+
+        return this.repositories;
+    } //-- java.util.List<String> getRepositories()
+
+    /**
+     * Method removeRepository.
+     * 
+     * @param string
+     */
+    public void removeRepository( String string )
+    {
+        getRepositories().remove( string );
+    } //-- void removeRepository( String )
+
+    /**
+     * Set when to run the index merging for this group.
+     *           No default value.
+     * 
+     * @param cronExpression
+     */
+    public void setCronExpression( String cronExpression )
+    {
+        this.cronExpression = cronExpression;
+    } //-- void setCronExpression( String )
+
+    /**
+     * Set the id of the repository group.
+     * 
+     * @param id
+     */
+    public void setId( String id )
+    {
+        this.id = id;
+    } //-- void setId( String )
+
+    /**
+     * Set the path of the merged index.
+     * 
+     * @param mergedIndexPath
+     */
+    public void setMergedIndexPath( String mergedIndexPath )
+    {
+        this.mergedIndexPath = mergedIndexPath;
+    } //-- void setMergedIndexPath( String )
+
+    /**
+     * Set the time to live of the merged index of the repository
+     * group.
+     * 
+     * @param mergedIndexTtl
+     */
+    public void setMergedIndexTtl( int mergedIndexTtl )
+    {
+        this.mergedIndexTtl = mergedIndexTtl;
+    } //-- void setMergedIndexTtl( int )
+
+    /**
+     * Set the list of repository ids under the group.
+     * 
+     * @param repositories
+     */
+    public void setRepositories( java.util.List<String> repositories )
+    {
+        this.repositories = repositories;
+    } //-- void setRepositories( java.util.List )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RepositoryScanningConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RepositoryScanningConfiguration.java
new file mode 100644
index 0000000..976eb34
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/RepositoryScanningConfiguration.java
@@ -0,0 +1,191 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class RepositoryScanningConfiguration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class RepositoryScanningConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * Field fileTypes.
+     */
+    private java.util.List<FileType> fileTypes;
+
+    /**
+     * Field knownContentConsumers.
+     */
+    private java.util.List<String> knownContentConsumers;
+
+    /**
+     * Field invalidContentConsumers.
+     */
+    private java.util.List<String> invalidContentConsumers;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Method addFileType.
+     * 
+     * @param fileType
+     */
+    public void addFileType( FileType fileType )
+    {
+        getFileTypes().add( fileType );
+    } //-- void addFileType( FileType )
+
+    /**
+     * Method addInvalidContentConsumer.
+     * 
+     * @param string
+     */
+    public void addInvalidContentConsumer( String string )
+    {
+        getInvalidContentConsumers().add( string );
+    } //-- void addInvalidContentConsumer( String )
+
+    /**
+     * Method addKnownContentConsumer.
+     * 
+     * @param string
+     */
+    public void addKnownContentConsumer( String string )
+    {
+        getKnownContentConsumers().add( string );
+    } //-- void addKnownContentConsumer( String )
+
+    /**
+     * Method getFileTypes.
+     * 
+     * @return List
+     */
+    public java.util.List<FileType> getFileTypes()
+    {
+        if ( this.fileTypes == null )
+        {
+            this.fileTypes = new java.util.ArrayList<FileType>();
+        }
+
+        return this.fileTypes;
+    } //-- java.util.List<FileType> getFileTypes()
+
+    /**
+     * Method getInvalidContentConsumers.
+     * 
+     * @return List
+     */
+    public java.util.List<String> getInvalidContentConsumers()
+    {
+        if ( this.invalidContentConsumers == null )
+        {
+            this.invalidContentConsumers = new java.util.ArrayList<String>();
+        }
+
+        return this.invalidContentConsumers;
+    } //-- java.util.List<String> getInvalidContentConsumers()
+
+    /**
+     * Method getKnownContentConsumers.
+     * 
+     * @return List
+     */
+    public java.util.List<String> getKnownContentConsumers()
+    {
+        if ( this.knownContentConsumers == null )
+        {
+            this.knownContentConsumers = new java.util.ArrayList<String>();
+        }
+
+        return this.knownContentConsumers;
+    } //-- java.util.List<String> getKnownContentConsumers()
+
+    /**
+     * Method removeFileType.
+     * 
+     * @param fileType
+     */
+    public void removeFileType( FileType fileType )
+    {
+        getFileTypes().remove( fileType );
+    } //-- void removeFileType( FileType )
+
+    /**
+     * Method removeInvalidContentConsumer.
+     * 
+     * @param string
+     */
+    public void removeInvalidContentConsumer( String string )
+    {
+        getInvalidContentConsumers().remove( string );
+    } //-- void removeInvalidContentConsumer( String )
+
+    /**
+     * Method removeKnownContentConsumer.
+     * 
+     * @param string
+     */
+    public void removeKnownContentConsumer( String string )
+    {
+        getKnownContentConsumers().remove( string );
+    } //-- void removeKnownContentConsumer( String )
+
+    /**
+     * Set the FileTypes for the repository scanning configuration.
+     * 
+     * @param fileTypes
+     */
+    public void setFileTypes( java.util.List<FileType> fileTypes )
+    {
+        this.fileTypes = fileTypes;
+    } //-- void setFileTypes( java.util.List )
+
+    /**
+     * Set the list of active consumer IDs for invalid content.
+     * 
+     * @param invalidContentConsumers
+     */
+    public void setInvalidContentConsumers( java.util.List<String> invalidContentConsumers )
+    {
+        this.invalidContentConsumers = invalidContentConsumers;
+    } //-- void setInvalidContentConsumers( java.util.List )
+
+    /**
+     * Set the list of active consumers IDs for known content.
+     * 
+     * @param knownContentConsumers
+     */
+    public void setKnownContentConsumers( java.util.List<String> knownContentConsumers )
+    {
+        this.knownContentConsumers = knownContentConsumers;
+    } //-- void setKnownContentConsumers( java.util.List )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/SyncConnectorConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/SyncConnectorConfiguration.java
new file mode 100644
index 0000000..a4f8ff9
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/SyncConnectorConfiguration.java
@@ -0,0 +1,95 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * Class SyncConnectorConfiguration.
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class SyncConnectorConfiguration
+    extends AbstractRepositoryConnectorConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * When to run the sync mechanism. Default is every hour on the
+     * hour.
+     */
+    private String cronExpression = "0 0 * * * ?";
+
+    /**
+     * The type of synchronization to use.
+     */
+    private String method = "rsync";
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get when to run the sync mechanism. Default is every hour on
+     * the hour.
+     * 
+     * @return String
+     */
+    public String getCronExpression()
+    {
+        return this.cronExpression;
+    } //-- String getCronExpression()
+
+    /**
+     * Get the type of synchronization to use.
+     * 
+     * @return String
+     */
+    public String getMethod()
+    {
+        return this.method;
+    } //-- String getMethod()
+
+    /**
+     * Set when to run the sync mechanism. Default is every hour on
+     * the hour.
+     * 
+     * @param cronExpression
+     */
+    public void setCronExpression( String cronExpression )
+    {
+        this.cronExpression = cronExpression;
+    } //-- void setCronExpression( String )
+
+    /**
+     * Set the type of synchronization to use.
+     * 
+     * @param method
+     */
+    public void setMethod( String method )
+    {
+        this.method = method;
+    } //-- void setMethod( String )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/UserInterfaceOptions.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/UserInterfaceOptions.java
new file mode 100644
index 0000000..8d84766
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/UserInterfaceOptions.java
@@ -0,0 +1,170 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * 
+ *         The user interface configuration settings.
+ *       
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class UserInterfaceOptions
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * true if find artifacts should be enabled.
+     */
+    private boolean showFindArtifacts = true;
+
+    /**
+     * true if applet behavior for find artifacts should be enabled.
+     */
+    private boolean appletFindEnabled = true;
+
+    /**
+     * Field disableEasterEggs.
+     */
+    private boolean disableEasterEggs = false;
+
+    /**
+     * Field applicationUrl.
+     */
+    private String applicationUrl;
+
+    /**
+     * Field disableRegistration.
+     */
+    private boolean disableRegistration = false;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get the applicationUrl field.
+     * 
+     * @return String
+     */
+    public String getApplicationUrl()
+    {
+        return this.applicationUrl;
+    } //-- String getApplicationUrl()
+
+    /**
+     * Get true if applet behavior for find artifacts should be
+     * enabled.
+     * 
+     * @return boolean
+     */
+    public boolean isAppletFindEnabled()
+    {
+        return this.appletFindEnabled;
+    } //-- boolean isAppletFindEnabled()
+
+    /**
+     * Get the disableEasterEggs field.
+     * 
+     * @return boolean
+     */
+    public boolean isDisableEasterEggs()
+    {
+        return this.disableEasterEggs;
+    } //-- boolean isDisableEasterEggs()
+
+    /**
+     * Get the disableRegistration field.
+     * 
+     * @return boolean
+     */
+    public boolean isDisableRegistration()
+    {
+        return this.disableRegistration;
+    } //-- boolean isDisableRegistration()
+
+    /**
+     * Get true if find artifacts should be enabled.
+     * 
+     * @return boolean
+     */
+    public boolean isShowFindArtifacts()
+    {
+        return this.showFindArtifacts;
+    } //-- boolean isShowFindArtifacts()
+
+    /**
+     * Set true if applet behavior for find artifacts should be
+     * enabled.
+     * 
+     * @param appletFindEnabled
+     */
+    public void setAppletFindEnabled( boolean appletFindEnabled )
+    {
+        this.appletFindEnabled = appletFindEnabled;
+    } //-- void setAppletFindEnabled( boolean )
+
+    /**
+     * Set the applicationUrl field.
+     * 
+     * @param applicationUrl
+     */
+    public void setApplicationUrl( String applicationUrl )
+    {
+        this.applicationUrl = applicationUrl;
+    } //-- void setApplicationUrl( String )
+
+    /**
+     * Set the disableEasterEggs field.
+     * 
+     * @param disableEasterEggs
+     */
+    public void setDisableEasterEggs( boolean disableEasterEggs )
+    {
+        this.disableEasterEggs = disableEasterEggs;
+    } //-- void setDisableEasterEggs( boolean )
+
+    /**
+     * Set the disableRegistration field.
+     * 
+     * @param disableRegistration
+     */
+    public void setDisableRegistration( boolean disableRegistration )
+    {
+        this.disableRegistration = disableRegistration;
+    } //-- void setDisableRegistration( boolean )
+
+    /**
+     * Set true if find artifacts should be enabled.
+     * 
+     * @param showFindArtifacts
+     */
+    public void setShowFindArtifacts( boolean showFindArtifacts )
+    {
+        this.showFindArtifacts = showFindArtifacts;
+    } //-- void setShowFindArtifacts( boolean )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/WebappConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/WebappConfiguration.java
new file mode 100644
index 0000000..aab3660
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/WebappConfiguration.java
@@ -0,0 +1,68 @@
+package org.apache.archiva.configuration;
+
+/*
+ * 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.
+ */
+
+/**
+ * 
+ *         The webapp configuration settings.
+ *       
+ * 
+ * @version $Revision$ $Date$
+ */
+@SuppressWarnings( "all" )
+public class WebappConfiguration
+    implements java.io.Serializable
+{
+
+      //--------------------------/
+     //- Class/Member Variables -/
+    //--------------------------/
+
+    /**
+     * options for altering the ui presentation.
+     */
+    private UserInterfaceOptions ui;
+
+
+      //-----------/
+     //- Methods -/
+    //-----------/
+
+    /**
+     * Get options for altering the ui presentation.
+     * 
+     * @return UserInterfaceOptions
+     */
+    public UserInterfaceOptions getUi()
+    {
+        return this.ui;
+    } //-- UserInterfaceOptions getUi()
+
+    /**
+     * Set options for altering the ui presentation.
+     * 
+     * @param ui
+     */
+    public void setUi( UserInterfaceOptions ui )
+    {
+        this.ui = ui;
+    } //-- void setUi( UserInterfaceOptions )
+
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/io/registry/ConfigurationRegistryReader.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/io/registry/ConfigurationRegistryReader.java
new file mode 100644
index 0000000..102c403
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/io/registry/ConfigurationRegistryReader.java
@@ -0,0 +1,1944 @@
+
+package org.apache.archiva.configuration.io.registry;
+
+/*
+ * 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.
+ */
+
+import org.apache.archiva.redback.components.registry.Registry;
+
+// Util imports
+import java.util.*;
+
+// Model class imports
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.AbstractRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.LegacyArtifactPath;
+import org.apache.archiva.configuration.RepositoryGroupConfiguration;
+import org.apache.archiva.configuration.RepositoryCheckPath;
+import org.apache.archiva.configuration.AbstractRepositoryConnectorConfiguration;
+import org.apache.archiva.configuration.ProxyConnectorRuleConfiguration;
+import org.apache.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.archiva.configuration.SyncConnectorConfiguration;
+import org.apache.archiva.configuration.NetworkProxyConfiguration;
+import org.apache.archiva.configuration.RepositoryScanningConfiguration;
+import org.apache.archiva.configuration.FileType;
+import org.apache.archiva.configuration.OrganisationInformation;
+import org.apache.archiva.configuration.WebappConfiguration;
+import org.apache.archiva.configuration.UserInterfaceOptions;
+import org.apache.archiva.configuration.NetworkConfiguration;
+import org.apache.archiva.configuration.ArchivaRuntimeConfiguration;
+import org.apache.archiva.configuration.RedbackRuntimeConfiguration;
+import org.apache.archiva.configuration.ArchivaDefaultConfiguration;
+import org.apache.archiva.configuration.LdapConfiguration;
+import org.apache.archiva.configuration.FileLockConfiguration;
+import org.apache.archiva.configuration.CacheConfiguration;
+import org.apache.archiva.configuration.LdapGroupMapping;
+
+
+
+
+/**
+ * Generate Redback Registry input mechanism for model 'Configuration'.
+ */
+public class ConfigurationRegistryReader
+{
+    public Configuration read( Registry registry )
+    {
+        return readConfiguration( "", registry );
+    }
+
+    private Configuration readConfiguration( String prefix, Registry registry )
+    {
+        Configuration value = new Configuration();
+
+    //String version = registry.getString( prefix + "version", value.getVersion() );
+
+    List<String> versionList = registry.getList( prefix + "version" );
+    String version = value.getVersion();
+    if (versionList != null && !versionList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = versionList.size();i<size;i++)
+        {
+            sb.append( versionList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        version = sb.toString();
+    }
+
+        value.setVersion( version );
+    //String metadataStore = registry.getString( prefix + "metadataStore", value.getMetadataStore() );
+
+    List<String> metadataStoreList = registry.getList( prefix + "metadataStore" );
+    String metadataStore = value.getMetadataStore();
+    if (metadataStoreList != null && !metadataStoreList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = metadataStoreList.size();i<size;i++)
+        {
+            sb.append( metadataStoreList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        metadataStore = sb.toString();
+    }
+
+        value.setMetadataStore( metadataStore );
+        java.util.List repositoryGroups = new java.util.ArrayList/*<RepositoryGroupConfiguration>*/();
+        List repositoryGroupsSubsets = registry.getSubsetList( prefix + "repositoryGroups.repositoryGroup" );
+        for ( Iterator i = repositoryGroupsSubsets.iterator(); i.hasNext(); )
+        {
+            RepositoryGroupConfiguration v = readRepositoryGroupConfiguration( "", (Registry) i.next() );
+            repositoryGroups.add( v );
+        }
+        value.setRepositoryGroups( repositoryGroups );
+        java.util.List managedRepositories = new java.util.ArrayList/*<ManagedRepositoryConfiguration>*/();
+        List managedRepositoriesSubsets = registry.getSubsetList( prefix + "managedRepositories.managedRepository" );
+        for ( Iterator i = managedRepositoriesSubsets.iterator(); i.hasNext(); )
+        {
+            ManagedRepositoryConfiguration v = readManagedRepositoryConfiguration( "", (Registry) i.next() );
+            managedRepositories.add( v );
+        }
+        value.setManagedRepositories( managedRepositories );
+        java.util.List remoteRepositories = new java.util.ArrayList/*<RemoteRepositoryConfiguration>*/();
+        List remoteRepositoriesSubsets = registry.getSubsetList( prefix + "remoteRepositories.remoteRepository" );
+        for ( Iterator i = remoteRepositoriesSubsets.iterator(); i.hasNext(); )
+        {
+            RemoteRepositoryConfiguration v = readRemoteRepositoryConfiguration( "", (Registry) i.next() );
+            remoteRepositories.add( v );
+        }
+        value.setRemoteRepositories( remoteRepositories );
+        java.util.List proxyConnectors = new java.util.ArrayList/*<ProxyConnectorConfiguration>*/();
+        List proxyConnectorsSubsets = registry.getSubsetList( prefix + "proxyConnectors.proxyConnector" );
+        for ( Iterator i = proxyConnectorsSubsets.iterator(); i.hasNext(); )
+        {
+            ProxyConnectorConfiguration v = readProxyConnectorConfiguration( "", (Registry) i.next() );
+            proxyConnectors.add( v );
+        }
+        value.setProxyConnectors( proxyConnectors );
+        java.util.List networkProxies = new java.util.ArrayList/*<NetworkProxyConfiguration>*/();
+        List networkProxiesSubsets = registry.getSubsetList( prefix + "networkProxies.networkProxy" );
+        for ( Iterator i = networkProxiesSubsets.iterator(); i.hasNext(); )
+        {
+            NetworkProxyConfiguration v = readNetworkProxyConfiguration( "", (Registry) i.next() );
+            networkProxies.add( v );
+        }
+        value.setNetworkProxies( networkProxies );
+        java.util.List legacyArtifactPaths = new java.util.ArrayList/*<LegacyArtifactPath>*/();
+        List legacyArtifactPathsSubsets = registry.getSubsetList( prefix + "legacyArtifactPaths.legacyArtifactPath" );
+        for ( Iterator i = legacyArtifactPathsSubsets.iterator(); i.hasNext(); )
+        {
+            LegacyArtifactPath v = readLegacyArtifactPath( "", (Registry) i.next() );
+            legacyArtifactPaths.add( v );
+        }
+        value.setLegacyArtifactPaths( legacyArtifactPaths );
+        RepositoryScanningConfiguration repositoryScanning = readRepositoryScanningConfiguration( prefix + "repositoryScanning.", registry );
+        value.setRepositoryScanning( repositoryScanning );
+        WebappConfiguration webapp = readWebappConfiguration( prefix + "webapp.", registry );
+        value.setWebapp( webapp );
+        OrganisationInformation organisationInfo = readOrganisationInformation( prefix + "organisationInfo.", registry );
+        value.setOrganisationInfo( organisationInfo );
+        NetworkConfiguration networkConfiguration = readNetworkConfiguration( prefix + "networkConfiguration.", registry );
+        value.setNetworkConfiguration( networkConfiguration );
+        RedbackRuntimeConfiguration redbackRuntimeConfiguration = readRedbackRuntimeConfiguration( prefix + "redbackRuntimeConfiguration.", registry );
+        value.setRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
+        ArchivaRuntimeConfiguration archivaRuntimeConfiguration = readArchivaRuntimeConfiguration( prefix + "archivaRuntimeConfiguration.", registry );
+        value.setArchivaRuntimeConfiguration( archivaRuntimeConfiguration );
+        java.util.List proxyConnectorRuleConfigurations = new java.util.ArrayList/*<ProxyConnectorRuleConfiguration>*/();
+        List proxyConnectorRuleConfigurationsSubsets = registry.getSubsetList( prefix + "proxyConnectorRuleConfigurations.proxyConnectorRuleConfiguration" );
+        for ( Iterator i = proxyConnectorRuleConfigurationsSubsets.iterator(); i.hasNext(); )
+        {
+            ProxyConnectorRuleConfiguration v = readProxyConnectorRuleConfiguration( "", (Registry) i.next() );
+            proxyConnectorRuleConfigurations.add( v );
+        }
+        value.setProxyConnectorRuleConfigurations( proxyConnectorRuleConfigurations );
+        ArchivaDefaultConfiguration archivaDefaultConfiguration = readArchivaDefaultConfiguration( prefix + "archivaDefaultConfiguration.", registry );
+        value.setArchivaDefaultConfiguration( archivaDefaultConfiguration );
+
+        return value;
+    }
+    
+    private AbstractRepositoryConfiguration readAbstractRepositoryConfiguration( String prefix, Registry registry )
+    {
+        AbstractRepositoryConfiguration value = new AbstractRepositoryConfiguration();
+
+    //String id = registry.getString( prefix + "id", value.getId() );
+
+    List<String> idList = registry.getList( prefix + "id" );
+    String id = value.getId();
+    if (idList != null && !idList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = idList.size();i<size;i++)
+        {
+            sb.append( idList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        id = sb.toString();
+    }
+
+        value.setId( id );
+    //String type = registry.getString( prefix + "type", value.getType() );
+
+    List<String> typeList = registry.getList( prefix + "type" );
+    String type = value.getType();
+    if (typeList != null && !typeList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = typeList.size();i<size;i++)
+        {
+            sb.append( typeList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        type = sb.toString();
+    }
+
+        value.setType( type );
+    //String name = registry.getString( prefix + "name", value.getName() );
+
+    List<String> nameList = registry.getList( prefix + "name" );
+    String name = value.getName();
+    if (nameList != null && !nameList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = nameList.size();i<size;i++)
+        {
+            sb.append( nameList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        name = sb.toString();
+    }
+
+        value.setName( name );
+    //String layout = registry.getString( prefix + "layout", value.getLayout() );
+
+    List<String> layoutList = registry.getList( prefix + "layout" );
+    String layout = value.getLayout();
+    if (layoutList != null && !layoutList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = layoutList.size();i<size;i++)
+        {
+            sb.append( layoutList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        layout = sb.toString();
+    }
+
+        value.setLayout( layout );
+    //String indexDir = registry.getString( prefix + "indexDir", value.getIndexDir() );
+
+    List<String> indexDirList = registry.getList( prefix + "indexDir" );
+    String indexDir = value.getIndexDir();
+    if (indexDirList != null && !indexDirList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = indexDirList.size();i<size;i++)
+        {
+            sb.append( indexDirList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        indexDir = sb.toString();
+    }
+
+        value.setIndexDir( indexDir );
+    //String packedIndexDir = registry.getString( prefix + "packedIndexDir", value.getPackedIndexDir() );
+
+    List<String> packedIndexDirList = registry.getList( prefix + "packedIndexDir" );
+    String packedIndexDir = value.getPackedIndexDir();
+    if (packedIndexDirList != null && !packedIndexDirList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = packedIndexDirList.size();i<size;i++)
+        {
+            sb.append( packedIndexDirList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        packedIndexDir = sb.toString();
+    }
+
+        value.setPackedIndexDir( packedIndexDir );
+    //String description = registry.getString( prefix + "description", value.getDescription() );
+
+    List<String> descriptionList = registry.getList( prefix + "description" );
+    String description = value.getDescription();
+    if (descriptionList != null && !descriptionList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = descriptionList.size();i<size;i++)
+        {
+            sb.append( descriptionList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        description = sb.toString();
+    }
+
+        value.setDescription( description );
+
+        return value;
+    }
+    
+    private RemoteRepositoryConfiguration readRemoteRepositoryConfiguration( String prefix, Registry registry )
+    {
+        RemoteRepositoryConfiguration value = new RemoteRepositoryConfiguration();
+
+    //String url = registry.getString( prefix + "url", value.getUrl() );
+
+    List<String> urlList = registry.getList( prefix + "url" );
+    String url = value.getUrl();
+    if (urlList != null && !urlList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = urlList.size();i<size;i++)
+        {
+            sb.append( urlList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        url = sb.toString();
+    }
+
+        value.setUrl( url );
+    //String username = registry.getString( prefix + "username", value.getUsername() );
+
+    List<String> usernameList = registry.getList( prefix + "username" );
+    String username = value.getUsername();
+    if (usernameList != null && !usernameList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = usernameList.size();i<size;i++)
+        {
+            sb.append( usernameList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        username = sb.toString();
+    }
+
+        value.setUsername( username );
+    //String password = registry.getString( prefix + "password", value.getPassword() );
+
+    List<String> passwordList = registry.getList( prefix + "password" );
+    String password = value.getPassword();
+    if (passwordList != null && !passwordList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = passwordList.size();i<size;i++)
+        {
+            sb.append( passwordList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        password = sb.toString();
+    }
+
+        value.setPassword( password );
+    int timeout = registry.getInt( prefix + "timeout", value.getTimeout() );
+        value.setTimeout( timeout );
+    //String refreshCronExpression = registry.getString( prefix + "refreshCronExpression", value.getRefreshCronExpression() );
+
+    List<String> refreshCronExpressionList = registry.getList( prefix + "refreshCronExpression" );
+    String refreshCronExpression = value.getRefreshCronExpression();
+    if (refreshCronExpressionList != null && !refreshCronExpressionList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = refreshCronExpressionList.size();i<size;i++)
+        {
+            sb.append( refreshCronExpressionList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        refreshCronExpression = sb.toString();
+    }
+
+        value.setRefreshCronExpression( refreshCronExpression );
+        boolean downloadRemoteIndex = registry.getBoolean( prefix + "downloadRemoteIndex", value.isDownloadRemoteIndex() );
+        value.setDownloadRemoteIndex( downloadRemoteIndex );
+    //String remoteIndexUrl = registry.getString( prefix + "remoteIndexUrl", value.getRemoteIndexUrl() );
+
+    List<String> remoteIndexUrlList = registry.getList( prefix + "remoteIndexUrl" );
+    String remoteIndexUrl = value.getRemoteIndexUrl();
+    if (remoteIndexUrlList != null && !remoteIndexUrlList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = remoteIndexUrlList.size();i<size;i++)
+        {
+            sb.append( remoteIndexUrlList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        remoteIndexUrl = sb.toString();
+    }
+
+        value.setRemoteIndexUrl( remoteIndexUrl );
+    //String remoteDownloadNetworkProxyId = registry.getString( prefix + "remoteDownloadNetworkProxyId", value.getRemoteDownloadNetworkProxyId() );
+
+    List<String> remoteDownloadNetworkProxyIdList = registry.getList( prefix + "remoteDownloadNetworkProxyId" );
+    String remoteDownloadNetworkProxyId = value.getRemoteDownloadNetworkProxyId();
+    if (remoteDownloadNetworkProxyIdList != null && !remoteDownloadNetworkProxyIdList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = remoteDownloadNetworkProxyIdList.size();i<size;i++)
+        {
+            sb.append( remoteDownloadNetworkProxyIdList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        remoteDownloadNetworkProxyId = sb.toString();
+    }
+
+        value.setRemoteDownloadNetworkProxyId( remoteDownloadNetworkProxyId );
+    int remoteDownloadTimeout = registry.getInt( prefix + "remoteDownloadTimeout", value.getRemoteDownloadTimeout() );
+        value.setRemoteDownloadTimeout( remoteDownloadTimeout );
+        boolean downloadRemoteIndexOnStartup = registry.getBoolean( prefix + "downloadRemoteIndexOnStartup", value.isDownloadRemoteIndexOnStartup() );
+        value.setDownloadRemoteIndexOnStartup( downloadRemoteIndexOnStartup );
+        java.util.Map extraParameters = registry.getProperties( prefix + "extraParameters" );
+        value.setExtraParameters( extraParameters );
+        java.util.Map extraHeaders = registry.getProperties( prefix + "extraHeaders" );
+        value.setExtraHeaders( extraHeaders );
+    //String checkPath = registry.getString( prefix + "checkPath", value.getCheckPath() );
+
+    List<String> checkPathList = registry.getList( prefix + "checkPath" );
+    String checkPath = value.getCheckPath();
+    if (checkPathList != null && !checkPathList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = checkPathList.size();i<size;i++)
+        {
+            sb.append( checkPathList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        checkPath = sb.toString();
+    }
+
+        value.setCheckPath( checkPath );
+    //String id = registry.getString( prefix + "id", value.getId() );
+
+    List<String> idList = registry.getList( prefix + "id" );
+    String id = value.getId();
+    if (idList != null && !idList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = idList.size();i<size;i++)
+        {
+            sb.append( idList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        id = sb.toString();
+    }
+
+        value.setId( id );
+    //String type = registry.getString( prefix + "type", value.getType() );
+
+    List<String> typeList = registry.getList( prefix + "type" );
+    String type = value.getType();
+    if (typeList != null && !typeList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = typeList.size();i<size;i++)
+        {
+            sb.append( typeList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        type = sb.toString();
+    }
+
+        value.setType( type );
+    //String name = registry.getString( prefix + "name", value.getName() );
+
+    List<String> nameList = registry.getList( prefix + "name" );
+    String name = value.getName();
+    if (nameList != null && !nameList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = nameList.size();i<size;i++)
+        {
+            sb.append( nameList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        name = sb.toString();
+    }
+
+        value.setName( name );
+    //String layout = registry.getString( prefix + "layout", value.getLayout() );
+
+    List<String> layoutList = registry.getList( prefix + "layout" );
+    String layout = value.getLayout();
+    if (layoutList != null && !layoutList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = layoutList.size();i<size;i++)
+        {
+            sb.append( layoutList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        layout = sb.toString();
+    }
+
+        value.setLayout( layout );
+    //String indexDir = registry.getString( prefix + "indexDir", value.getIndexDir() );
+
+    List<String> indexDirList = registry.getList( prefix + "indexDir" );
+    String indexDir = value.getIndexDir();
+    if (indexDirList != null && !indexDirList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = indexDirList.size();i<size;i++)
+        {
+            sb.append( indexDirList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        indexDir = sb.toString();
+    }
+
+        value.setIndexDir( indexDir );
+    //String packedIndexDir = registry.getString( prefix + "packedIndexDir", value.getPackedIndexDir() );
+
+    List<String> packedIndexDirList = registry.getList( prefix + "packedIndexDir" );
+    String packedIndexDir = value.getPackedIndexDir();
+    if (packedIndexDirList != null && !packedIndexDirList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = packedIndexDirList.size();i<size;i++)
+        {
+            sb.append( packedIndexDirList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        packedIndexDir = sb.toString();
+    }
+
+        value.setPackedIndexDir( packedIndexDir );
+    //String description = registry.getString( prefix + "description", value.getDescription() );
+
+    List<String> descriptionList = registry.getList( prefix + "description" );
+    String description = value.getDescription();
+    if (descriptionList != null && !descriptionList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = descriptionList.size();i<size;i++)
+        {
+            sb.append( descriptionList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        description = sb.toString();
+    }
+
+        value.setDescription( description );
+
+        return value;
+    }
+    
+    private ManagedRepositoryConfiguration readManagedRepositoryConfiguration( String prefix, Registry registry )
+    {
+        ManagedRepositoryConfiguration value = new ManagedRepositoryConfiguration();
+
+    //String location = registry.getString( prefix + "location", value.getLocation() );
+
+    List<String> locationList = registry.getList( prefix + "location" );
+    String location = value.getLocation();
+    if (locationList != null && !locationList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = locationList.size();i<size;i++)
+        {
+            sb.append( locationList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        location = sb.toString();
+    }
+
+        value.setLocation( location );
+        boolean releases = registry.getBoolean( prefix + "releases", value.isReleases() );
+        value.setReleases( releases );
+        boolean blockRedeployments = registry.getBoolean( prefix + "blockRedeployments", value.isBlockRedeployments() );
+        value.setBlockRedeployments( blockRedeployments );
+        boolean snapshots = registry.getBoolean( prefix + "snapshots", value.isSnapshots() );
+        value.setSnapshots( snapshots );
+        boolean scanned = registry.getBoolean( prefix + "scanned", value.isScanned() );
+        value.setScanned( scanned );
+    //String refreshCronExpression = registry.getString( prefix + "refreshCronExpression", value.getRefreshCronExpression() );
+
+    List<String> refreshCronExpressionList = registry.getList( prefix + "refreshCronExpression" );
+    String refreshCronExpression = value.getRefreshCronExpression();
+    if (refreshCronExpressionList != null && !refreshCronExpressionList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = refreshCronExpressionList.size();i<size;i++)
+        {
+            sb.append( refreshCronExpressionList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        refreshCronExpression = sb.toString();
+    }
+
+        value.setRefreshCronExpression( refreshCronExpression );
+    int retentionCount = registry.getInt( prefix + "retentionCount", value.getRetentionCount() );
+        value.setRetentionCount( retentionCount );
+    int retentionPeriod = registry.getInt( prefix + "retentionPeriod", value.getRetentionPeriod() );
+        value.setRetentionPeriod( retentionPeriod );
+        boolean deleteReleasedSnapshots = registry.getBoolean( prefix + "deleteReleasedSnapshots", value.isDeleteReleasedSnapshots() );
+        value.setDeleteReleasedSnapshots( deleteReleasedSnapshots );
+        boolean skipPackedIndexCreation = registry.getBoolean( prefix + "skipPackedIndexCreation", value.isSkipPackedIndexCreation() );
+        value.setSkipPackedIndexCreation( skipPackedIndexCreation );
+        boolean stageRepoNeeded = registry.getBoolean( prefix + "stageRepoNeeded", value.isStageRepoNeeded() );
+        value.setStageRepoNeeded( stageRepoNeeded );
+    //String id = registry.getString( prefix + "id", value.getId() );
+
+    List<String> idList = registry.getList( prefix + "id" );
+    String id = value.getId();
+    if (idList != null && !idList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = idList.size();i<size;i++)
+        {
+            sb.append( idList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        id = sb.toString();
+    }
+
+        value.setId( id );
+    //String type = registry.getString( prefix + "type", value.getType() );
+
+    List<String> typeList = registry.getList( prefix + "type" );
+    String type = value.getType();
+    if (typeList != null && !typeList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = typeList.size();i<size;i++)
+        {
+            sb.append( typeList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        type = sb.toString();
+    }
+
+        value.setType( type );
+    //String name = registry.getString( prefix + "name", value.getName() );
+
+    List<String> nameList = registry.getList( prefix + "name" );
+    String name = value.getName();
+    if (nameList != null && !nameList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = nameList.size();i<size;i++)
+        {
+            sb.append( nameList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        name = sb.toString();
+    }
+
+        value.setName( name );
+    //String layout = registry.getString( prefix + "layout", value.getLayout() );
+
+    List<String> layoutList = registry.getList( prefix + "layout" );
+    String layout = value.getLayout();
+    if (layoutList != null && !layoutList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = layoutList.size();i<size;i++)
+        {
+            sb.append( layoutList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        layout = sb.toString();
+    }
+
+        value.setLayout( layout );
+    //String indexDir = registry.getString( prefix + "indexDir", value.getIndexDir() );
+
+    List<String> indexDirList = registry.getList( prefix + "indexDir" );
+    String indexDir = value.getIndexDir();
+    if (indexDirList != null && !indexDirList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = indexDirList.size();i<size;i++)
+        {
+            sb.append( indexDirList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        indexDir = sb.toString();
+    }
+
+        value.setIndexDir( indexDir );
+    //String packedIndexDir = registry.getString( prefix + "packedIndexDir", value.getPackedIndexDir() );
+
+    List<String> packedIndexDirList = registry.getList( prefix + "packedIndexDir" );
+    String packedIndexDir = value.getPackedIndexDir();
+    if (packedIndexDirList != null && !packedIndexDirList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = packedIndexDirList.size();i<size;i++)
+        {
+            sb.append( packedIndexDirList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        packedIndexDir = sb.toString();
+    }
+
+        value.setPackedIndexDir( packedIndexDir );
+    //String description = registry.getString( prefix + "description", value.getDescription() );
+
+    List<String> descriptionList = registry.getList( prefix + "description" );
+    String description = value.getDescription();
+    if (descriptionList != null && !descriptionList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = descriptionList.size();i<size;i++)
+        {
+            sb.append( descriptionList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        description = sb.toString();
+    }
+
+        value.setDescription( description );
+
+        return value;
+    }
+    
+    private LegacyArtifactPath readLegacyArtifactPath( String prefix, Registry registry )
+    {
+        LegacyArtifactPath value = new LegacyArtifactPath();
+
+    //String path = registry.getString( prefix + "path", value.getPath() );
+
+    List<String> pathList = registry.getList( prefix + "path" );
+    String path = value.getPath();
+    if (pathList != null && !pathList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = pathList.size();i<size;i++)
+        {
+            sb.append( pathList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        path = sb.toString();
+    }
+
+        value.setPath( path );
+    //String artifact = registry.getString( prefix + "artifact", value.getArtifact() );
+
+    List<String> artifactList = registry.getList( prefix + "artifact" );
+    String artifact = value.getArtifact();
+    if (artifactList != null && !artifactList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = artifactList.size();i<size;i++)
+        {
+            sb.append( artifactList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        artifact = sb.toString();
+    }
+
+        value.setArtifact( artifact );
+
+        return value;
+    }
+    
+    private RepositoryGroupConfiguration readRepositoryGroupConfiguration( String prefix, Registry registry )
+    {
+        RepositoryGroupConfiguration value = new RepositoryGroupConfiguration();
+
+    //String id = registry.getString( prefix + "id", value.getId() );
+
+    List<String> idList = registry.getList( prefix + "id" );
+    String id = value.getId();
+    if (idList != null && !idList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = idList.size();i<size;i++)
+        {
+            sb.append( idList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        id = sb.toString();
+    }
+
+        value.setId( id );
+    //String mergedIndexPath = registry.getString( prefix + "mergedIndexPath", value.getMergedIndexPath() );
+
+    List<String> mergedIndexPathList = registry.getList( prefix + "mergedIndexPath" );
+    String mergedIndexPath = value.getMergedIndexPath();
+    if (mergedIndexPathList != null && !mergedIndexPathList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = mergedIndexPathList.size();i<size;i++)
+        {
+            sb.append( mergedIndexPathList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        mergedIndexPath = sb.toString();
+    }
+
+        value.setMergedIndexPath( mergedIndexPath );
+    int mergedIndexTtl = registry.getInt( prefix + "mergedIndexTtl", value.getMergedIndexTtl() );
+        value.setMergedIndexTtl( mergedIndexTtl );
+    //String cronExpression = registry.getString( prefix + "cronExpression", value.getCronExpression() );
+
+    List<String> cronExpressionList = registry.getList( prefix + "cronExpression" );
+    String cronExpression = value.getCronExpression();
+    if (cronExpressionList != null && !cronExpressionList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = cronExpressionList.size();i<size;i++)
+        {
+            sb.append( cronExpressionList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        cronExpression = sb.toString();
+    }
+
+        value.setCronExpression( cronExpression );
+        java.util.List repositories = new java.util.ArrayList/*<String>*/();
+        repositories.addAll( registry.getList( prefix + "repositories.repository" ) );
+        value.setRepositories( repositories );
+
+        return value;
+    }
+    
+    private RepositoryCheckPath readRepositoryCheckPath( String prefix, Registry registry )
+    {
+        RepositoryCheckPath value = new RepositoryCheckPath();
+
+    //String url = registry.getString( prefix + "url", value.getUrl() );
+
+    List<String> urlList = registry.getList( prefix + "url" );
+    String url = value.getUrl();
+    if (urlList != null && !urlList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = urlList.size();i<size;i++)
+        {
+            sb.append( urlList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        url = sb.toString();
+    }
+
+        value.setUrl( url );
+    //String path = registry.getString( prefix + "path", value.getPath() );
+
+    List<String> pathList = registry.getList( prefix + "path" );
+    String path = value.getPath();
+    if (pathList != null && !pathList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = pathList.size();i<size;i++)
+        {
+            sb.append( pathList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        path = sb.toString();
+    }
+
+        value.setPath( path );
+
+        return value;
+    }
+    
+    private AbstractRepositoryConnectorConfiguration readAbstractRepositoryConnectorConfiguration( String prefix, Registry registry )
+    {
+        AbstractRepositoryConnectorConfiguration value = new AbstractRepositoryConnectorConfiguration();
+
+    //String sourceRepoId = registry.getString( prefix + "sourceRepoId", value.getSourceRepoId() );
+
+    List<String> sourceRepoIdList = registry.getList( prefix + "sourceRepoId" );
+    String sourceRepoId = value.getSourceRepoId();
+    if (sourceRepoIdList != null && !sourceRepoIdList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = sourceRepoIdList.size();i<size;i++)
+        {
+            sb.append( sourceRepoIdList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        sourceRepoId = sb.toString();
+    }
+
+        value.setSourceRepoId( sourceRepoId );
+    //String targetRepoId = registry.getString( prefix + "targetRepoId", value.getTargetRepoId() );
+
+    List<String> targetRepoIdList = registry.getList( prefix + "targetRepoId" );
+    String targetRepoId = value.getTargetRepoId();
+    if (targetRepoIdList != null && !targetRepoIdList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = targetRepoIdList.size();i<size;i++)
+        {
+            sb.append( targetRepoIdList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        targetRepoId = sb.toString();
+    }
+
+        value.setTargetRepoId( targetRepoId );
+    //String proxyId = registry.getString( prefix + "proxyId", value.getProxyId() );
+
+    List<String> proxyIdList = registry.getList( prefix + "proxyId" );
+    String proxyId = value.getProxyId();
+    if (proxyIdList != null && !proxyIdList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = proxyIdList.size();i<size;i++)
+        {
+            sb.append( proxyIdList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        proxyId = sb.toString();
+    }
+
+        value.setProxyId( proxyId );
+        java.util.List blackListPatterns = new java.util.ArrayList/*<String>*/();
+        blackListPatterns.addAll( registry.getList( prefix + "blackListPatterns.blackListPattern" ) );
+        value.setBlackListPatterns( blackListPatterns );
+        java.util.List whiteListPatterns = new java.util.ArrayList/*<String>*/();
+        whiteListPatterns.addAll( registry.getList( prefix + "whiteListPatterns.whiteListPattern" ) );
+        value.setWhiteListPatterns( whiteListPatterns );
+        java.util.Map policies = registry.getProperties( prefix + "policies" );
+        value.setPolicies( policies );
+        java.util.Map properties = registry.getProperties( prefix + "properties" );
+        value.setProperties( properties );
+        boolean disabled = registry.getBoolean( prefix + "disabled", value.isDisabled() );
+        value.setDisabled( disabled );
+
+        return value;
+    }
+    
+    private ProxyConnectorRuleConfiguration readProxyConnectorRuleConfiguration( String prefix, Registry registry )
+    {
+        ProxyConnectorRuleConfiguration value = new ProxyConnectorRuleConfiguration();
+
+    //String ruleType = registry.getString( prefix + "ruleType", value.getRuleType() );
+
+    List<String> ruleTypeList = registry.getList( prefix + "ruleType" );
+    String ruleType = value.getRuleType();
+    if (ruleTypeList != null && !ruleTypeList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = ruleTypeList.size();i<size;i++)
+        {
+            sb.append( ruleTypeList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        ruleType = sb.toString();
+    }
+
+        value.setRuleType( ruleType );
+    //String pattern = registry.getString( prefix + "pattern", value.getPattern() );
+
+    List<String> patternList = registry.getList( prefix + "pattern" );
+    String pattern = value.getPattern();
+    if (patternList != null && !patternList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = patternList.size();i<size;i++)
+        {
+            sb.append( patternList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        pattern = sb.toString();
+    }
+
+        value.setPattern( pattern );
+        java.util.List proxyConnectors = new java.util.ArrayList/*<ProxyConnectorConfiguration>*/();
+        List proxyConnectorsSubsets = registry.getSubsetList( prefix + "proxyConnectors.proxyConnector" );
+        for ( Iterator i = proxyConnectorsSubsets.iterator(); i.hasNext(); )
+        {
+            ProxyConnectorConfiguration v = readProxyConnectorConfiguration( "", (Registry) i.next() );
+            proxyConnectors.add( v );
+        }
+        value.setProxyConnectors( proxyConnectors );
+
+        return value;
+    }
+    
+    private ProxyConnectorConfiguration readProxyConnectorConfiguration( String prefix, Registry registry )
+    {
+        ProxyConnectorConfiguration value = new ProxyConnectorConfiguration();
+
+    int order = registry.getInt( prefix + "order", value.getOrder() );
+        value.setOrder( order );
+    //String sourceRepoId = registry.getString( prefix + "sourceRepoId", value.getSourceRepoId() );
+
+    List<String> sourceRepoIdList = registry.getList( prefix + "sourceRepoId" );
+    String sourceRepoId = value.getSourceRepoId();
+    if (sourceRepoIdList != null && !sourceRepoIdList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = sourceRepoIdList.size();i<size;i++)
+        {
+            sb.append( sourceRepoIdList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        sourceRepoId = sb.toString();
+    }
+
+        value.setSourceRepoId( sourceRepoId );
+    //String targetRepoId = registry.getString( prefix + "targetRepoId", value.getTargetRepoId() );
+
+    List<String> targetRepoIdList = registry.getList( prefix + "targetRepoId" );
+    String targetRepoId = value.getTargetRepoId();
+    if (targetRepoIdList != null && !targetRepoIdList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = targetRepoIdList.size();i<size;i++)
+        {
+            sb.append( targetRepoIdList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        targetRepoId = sb.toString();
+    }
+
+        value.setTargetRepoId( targetRepoId );
+    //String proxyId = registry.getString( prefix + "proxyId", value.getProxyId() );
+
+    List<String> proxyIdList = registry.getList( prefix + "proxyId" );
+    String proxyId = value.getProxyId();
+    if (proxyIdList != null && !proxyIdList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = proxyIdList.size();i<size;i++)
+        {
+            sb.append( proxyIdList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        proxyId = sb.toString();
+    }
+
+        value.setProxyId( proxyId );
+        java.util.List blackListPatterns = new java.util.ArrayList/*<String>*/();
+        blackListPatterns.addAll( registry.getList( prefix + "blackListPatterns.blackListPattern" ) );
+        value.setBlackListPatterns( blackListPatterns );
+        java.util.List whiteListPatterns = new java.util.ArrayList/*<String>*/();
+        whiteListPatterns.addAll( registry.getList( prefix + "whiteListPatterns.whiteListPattern" ) );
+        value.setWhiteListPatterns( whiteListPatterns );
+        java.util.Map policies = registry.getProperties( prefix + "policies" );
+        value.setPolicies( policies );
+        java.util.Map properties = registry.getProperties( prefix + "properties" );
+        value.setProperties( properties );
+        boolean disabled = registry.getBoolean( prefix + "disabled", value.isDisabled() );
+        value.setDisabled( disabled );
+
+        return value;
+    }
+    
+    private SyncConnectorConfiguration readSyncConnectorConfiguration( String prefix, Registry registry )
+    {
+        SyncConnectorConfiguration value = new SyncConnectorConfiguration();
+
+    //String cronExpression = registry.getString( prefix + "cronExpression", value.getCronExpression() );
+
+    List<String> cronExpressionList = registry.getList( prefix + "cronExpression" );
+    String cronExpression = value.getCronExpression();
+    if (cronExpressionList != null && !cronExpressionList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = cronExpressionList.size();i<size;i++)
+        {
+            sb.append( cronExpressionList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        cronExpression = sb.toString();
+    }
+
+        value.setCronExpression( cronExpression );
+    //String method = registry.getString( prefix + "method", value.getMethod() );
+
+    List<String> methodList = registry.getList( prefix + "method" );
+    String method = value.getMethod();
+    if (methodList != null && !methodList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = methodList.size();i<size;i++)
+        {
+            sb.append( methodList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        method = sb.toString();
+    }
+
+        value.setMethod( method );
+    //String sourceRepoId = registry.getString( prefix + "sourceRepoId", value.getSourceRepoId() );
+
+    List<String> sourceRepoIdList = registry.getList( prefix + "sourceRepoId" );
+    String sourceRepoId = value.getSourceRepoId();
+    if (sourceRepoIdList != null && !sourceRepoIdList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = sourceRepoIdList.size();i<size;i++)
+        {
+            sb.append( sourceRepoIdList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        sourceRepoId = sb.toString();
+    }
+
+        value.setSourceRepoId( sourceRepoId );
+    //String targetRepoId = registry.getString( prefix + "targetRepoId", value.getTargetRepoId() );
+
+    List<String> targetRepoIdList = registry.getList( prefix + "targetRepoId" );
+    String targetRepoId = value.getTargetRepoId();
+    if (targetRepoIdList != null && !targetRepoIdList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = targetRepoIdList.size();i<size;i++)
+        {
+            sb.append( targetRepoIdList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        targetRepoId = sb.toString();
+    }
+
+        value.setTargetRepoId( targetRepoId );
+    //String proxyId = registry.getString( prefix + "proxyId", value.getProxyId() );
+
+    List<String> proxyIdList = registry.getList( prefix + "proxyId" );
+    String proxyId = value.getProxyId();
+    if (proxyIdList != null && !proxyIdList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = proxyIdList.size();i<size;i++)
+        {
+            sb.append( proxyIdList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        proxyId = sb.toString();
+    }
+
+        value.setProxyId( proxyId );
+        java.util.List blackListPatterns = new java.util.ArrayList/*<String>*/();
+        blackListPatterns.addAll( registry.getList( prefix + "blackListPatterns.blackListPattern" ) );
+        value.setBlackListPatterns( blackListPatterns );
+        java.util.List whiteListPatterns = new java.util.ArrayList/*<String>*/();
+        whiteListPatterns.addAll( registry.getList( prefix + "whiteListPatterns.whiteListPattern" ) );
+        value.setWhiteListPatterns( whiteListPatterns );
+        java.util.Map policies = registry.getProperties( prefix + "policies" );
+        value.setPolicies( policies );
+        java.util.Map properties = registry.getProperties( prefix + "properties" );
+        value.setProperties( properties );
+        boolean disabled = registry.getBoolean( prefix + "disabled", value.isDisabled() );
+        value.setDisabled( disabled );
+
+        return value;
+    }
+    
+    private NetworkProxyConfiguration readNetworkProxyConfiguration( String prefix, Registry registry )
+    {
+        NetworkProxyConfiguration value = new NetworkProxyConfiguration();
+
+    //String id = registry.getString( prefix + "id", value.getId() );
+
+    List<String> idList = registry.getList( prefix + "id" );
+    String id = value.getId();
+    if (idList != null && !idList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = idList.size();i<size;i++)
+        {
+            sb.append( idList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        id = sb.toString();
+    }
+
+        value.setId( id );
+    //String protocol = registry.getString( prefix + "protocol", value.getProtocol() );
+
+    List<String> protocolList = registry.getList( prefix + "protocol" );
+    String protocol = value.getProtocol();
+    if (protocolList != null && !protocolList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = protocolList.size();i<size;i++)
+        {
+            sb.append( protocolList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        protocol = sb.toString();
+    }
+
+        value.setProtocol( protocol );
+    //String host = registry.getString( prefix + "host", value.getHost() );
+
+    List<String> hostList = registry.getList( prefix + "host" );
+    String host = value.getHost();
+    if (hostList != null && !hostList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = hostList.size();i<size;i++)
+        {
+            sb.append( hostList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        host = sb.toString();
+    }
+
+        value.setHost( host );
+    int port = registry.getInt( prefix + "port", value.getPort() );
+        value.setPort( port );
+    //String username = registry.getString( prefix + "username", value.getUsername() );
+
+    List<String> usernameList = registry.getList( prefix + "username" );
+    String username = value.getUsername();
+    if (usernameList != null && !usernameList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = usernameList.size();i<size;i++)
+        {
+            sb.append( usernameList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        username = sb.toString();
+    }
+
+        value.setUsername( username );
+    //String password = registry.getString( prefix + "password", value.getPassword() );
+
+    List<String> passwordList = registry.getList( prefix + "password" );
+    String password = value.getPassword();
+    if (passwordList != null && !passwordList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = passwordList.size();i<size;i++)
+        {
+            sb.append( passwordList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        password = sb.toString();
+    }
+
+        value.setPassword( password );
+        boolean useNtlm = registry.getBoolean( prefix + "useNtlm", value.isUseNtlm() );
+        value.setUseNtlm( useNtlm );
+
+        return value;
+    }
+    
+    private RepositoryScanningConfiguration readRepositoryScanningConfiguration( String prefix, Registry registry )
+    {
+        RepositoryScanningConfiguration value = new RepositoryScanningConfiguration();
+
+        java.util.List fileTypes = new java.util.ArrayList/*<FileType>*/();
+        List fileTypesSubsets = registry.getSubsetList( prefix + "fileTypes.fileType" );
+        for ( Iterator i = fileTypesSubsets.iterator(); i.hasNext(); )
+        {
+            FileType v = readFileType( "", (Registry) i.next() );
+            fileTypes.add( v );
+        }
+        value.setFileTypes( fileTypes );
+        java.util.List knownContentConsumers = new java.util.ArrayList/*<String>*/();
+        knownContentConsumers.addAll( registry.getList( prefix + "knownContentConsumers.knownContentConsumer" ) );
+        value.setKnownContentConsumers( knownContentConsumers );
+        java.util.List invalidContentConsumers = new java.util.ArrayList/*<String>*/();
+        invalidContentConsumers.addAll( registry.getList( prefix + "invalidContentConsumers.invalidContentConsumer" ) );
+        value.setInvalidContentConsumers( invalidContentConsumers );
+
+        return value;
+    }
+    
+    private FileType readFileType( String prefix, Registry registry )
+    {
+        FileType value = new FileType();
+
+    //String id = registry.getString( prefix + "id", value.getId() );
+
+    List<String> idList = registry.getList( prefix + "id" );
+    String id = value.getId();
+    if (idList != null && !idList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = idList.size();i<size;i++)
+        {
+            sb.append( idList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        id = sb.toString();
+    }
+
+        value.setId( id );
+        java.util.List patterns = new java.util.ArrayList/*<String>*/();
+        patterns.addAll( registry.getList( prefix + "patterns.pattern" ) );
+        value.setPatterns( patterns );
+
+        return value;
+    }
+    
+    private OrganisationInformation readOrganisationInformation( String prefix, Registry registry )
+    {
+        OrganisationInformation value = new OrganisationInformation();
+
+    //String name = registry.getString( prefix + "name", value.getName() );
+
+    List<String> nameList = registry.getList( prefix + "name" );
+    String name = value.getName();
+    if (nameList != null && !nameList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = nameList.size();i<size;i++)
+        {
+            sb.append( nameList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        name = sb.toString();
+    }
+
+        value.setName( name );
+    //String url = registry.getString( prefix + "url", value.getUrl() );
+
+    List<String> urlList = registry.getList( prefix + "url" );
+    String url = value.getUrl();
+    if (urlList != null && !urlList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = urlList.size();i<size;i++)
+        {
+            sb.append( urlList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        url = sb.toString();
+    }
+
+        value.setUrl( url );
+    //String logoLocation = registry.getString( prefix + "logoLocation", value.getLogoLocation() );
+
+    List<String> logoLocationList = registry.getList( prefix + "logoLocation" );
+    String logoLocation = value.getLogoLocation();
+    if (logoLocationList != null && !logoLocationList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = logoLocationList.size();i<size;i++)
+        {
+            sb.append( logoLocationList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        logoLocation = sb.toString();
+    }
+
+        value.setLogoLocation( logoLocation );
+
+        return value;
+    }
+    
+    private WebappConfiguration readWebappConfiguration( String prefix, Registry registry )
+    {
+        WebappConfiguration value = new WebappConfiguration();
+
+        UserInterfaceOptions ui = readUserInterfaceOptions( prefix + "ui.", registry );
+        value.setUi( ui );
+
+        return value;
+    }
+    
+    private UserInterfaceOptions readUserInterfaceOptions( String prefix, Registry registry )
+    {
+        UserInterfaceOptions value = new UserInterfaceOptions();
+
+        boolean showFindArtifacts = registry.getBoolean( prefix + "showFindArtifacts", value.isShowFindArtifacts() );
+        value.setShowFindArtifacts( showFindArtifacts );
+        boolean appletFindEnabled = registry.getBoolean( prefix + "appletFindEnabled", value.isAppletFindEnabled() );
+        value.setAppletFindEnabled( appletFindEnabled );
+        boolean disableEasterEggs = registry.getBoolean( prefix + "disableEasterEggs", value.isDisableEasterEggs() );
+        value.setDisableEasterEggs( disableEasterEggs );
+    //String applicationUrl = registry.getString( prefix + "applicationUrl", value.getApplicationUrl() );
+
+    List<String> applicationUrlList = registry.getList( prefix + "applicationUrl" );
+    String applicationUrl = value.getApplicationUrl();
+    if (applicationUrlList != null && !applicationUrlList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = applicationUrlList.size();i<size;i++)
+        {
+            sb.append( applicationUrlList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        applicationUrl = sb.toString();
+    }
+
+        value.setApplicationUrl( applicationUrl );
+        boolean disableRegistration = registry.getBoolean( prefix + "disableRegistration", value.isDisableRegistration() );
+        value.setDisableRegistration( disableRegistration );
+
+        return value;
+    }
+    
+    private NetworkConfiguration readNetworkConfiguration( String prefix, Registry registry )
+    {
+        NetworkConfiguration value = new NetworkConfiguration();
+
+    int maxTotal = registry.getInt( prefix + "maxTotal", value.getMaxTotal() );
+        value.setMaxTotal( maxTotal );
+    int maxTotalPerHost = registry.getInt( prefix + "maxTotalPerHost", value.getMaxTotalPerHost() );
+        value.setMaxTotalPerHost( maxTotalPerHost );
+        boolean usePooling = registry.getBoolean( prefix + "usePooling", value.isUsePooling() );
+        value.setUsePooling( usePooling );
+
+        return value;
+    }
+    
+    private ArchivaRuntimeConfiguration readArchivaRuntimeConfiguration( String prefix, Registry registry )
+    {
+        ArchivaRuntimeConfiguration value = new ArchivaRuntimeConfiguration();
+
+        CacheConfiguration urlFailureCacheConfiguration = readCacheConfiguration( prefix + "urlFailureCacheConfiguration.", registry );
+        value.setUrlFailureCacheConfiguration( urlFailureCacheConfiguration );
+        FileLockConfiguration fileLockConfiguration = readFileLockConfiguration( prefix + "fileLockConfiguration.", registry );
+        value.setFileLockConfiguration( fileLockConfiguration );
+    //String dataDirectory = registry.getString( prefix + "dataDirectory", value.getDataDirectory() );
+
+    List<String> dataDirectoryList = registry.getList( prefix + "dataDirectory" );
+    String dataDirectory = value.getDataDirectory();
+    if (dataDirectoryList != null && !dataDirectoryList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = dataDirectoryList.size();i<size;i++)
+        {
+            sb.append( dataDirectoryList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        dataDirectory = sb.toString();
+    }
+
+        value.setDataDirectory( dataDirectory );
+    //String repositoryBaseDirectory = registry.getString( prefix + "repositoryBaseDirectory", value.getRepositoryBaseDirectory() );
+
+    List<String> repositoryBaseDirectoryList = registry.getList( prefix + "repositoryBaseDirectory" );
+    String repositoryBaseDirectory = value.getRepositoryBaseDirectory();
+    if (repositoryBaseDirectoryList != null && !repositoryBaseDirectoryList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = repositoryBaseDirectoryList.size();i<size;i++)
+        {
+            sb.append( repositoryBaseDirectoryList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        repositoryBaseDirectory = sb.toString();
+    }
+
+        value.setRepositoryBaseDirectory( repositoryBaseDirectory );
+    //String remoteRepositoryBaseDirectory = registry.getString( prefix + "remoteRepositoryBaseDirectory", value.getRemoteRepositoryBaseDirectory() );
+
+    List<String> remoteRepositoryBaseDirectoryList = registry.getList( prefix + "remoteRepositoryBaseDirectory" );
+    String remoteRepositoryBaseDirectory = value.getRemoteRepositoryBaseDirectory();
+    if (remoteRepositoryBaseDirectoryList != null && !remoteRepositoryBaseDirectoryList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = remoteRepositoryBaseDirectoryList.size();i<size;i++)
+        {
+            sb.append( remoteRepositoryBaseDirectoryList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        remoteRepositoryBaseDirectory = sb.toString();
+    }
+
+        value.setRemoteRepositoryBaseDirectory( remoteRepositoryBaseDirectory );
+    //String defaultLanguage = registry.getString( prefix + "defaultLanguage", value.getDefaultLanguage() );
+
+    List<String> defaultLanguageList = registry.getList( prefix + "defaultLanguage" );
+    String defaultLanguage = value.getDefaultLanguage();
+    if (defaultLanguageList != null && !defaultLanguageList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = defaultLanguageList.size();i<size;i++)
+        {
+            sb.append( defaultLanguageList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        defaultLanguage = sb.toString();
+    }
+
+        value.setDefaultLanguage( defaultLanguage );
+    //String languageRange = registry.getString( prefix + "languageRange", value.getLanguageRange() );
+
+    List<String> languageRangeList = registry.getList( prefix + "languageRange" );
+    String languageRange = value.getLanguageRange();
+    if (languageRangeList != null && !languageRangeList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = languageRangeList.size();i<size;i++)
+        {
+            sb.append( languageRangeList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        languageRange = sb.toString();
+    }
+
+        value.setLanguageRange( languageRange );
+
+        return value;
+    }
+    
+    private RedbackRuntimeConfiguration readRedbackRuntimeConfiguration( String prefix, Registry registry )
+    {
+        RedbackRuntimeConfiguration value = new RedbackRuntimeConfiguration();
+
+        boolean migratedFromRedbackConfiguration = registry.getBoolean( prefix + "migratedFromRedbackConfiguration", value.isMigratedFromRedbackConfiguration() );
+        value.setMigratedFromRedbackConfiguration( migratedFromRedbackConfiguration );
+        java.util.List userManagerImpls = new java.util.ArrayList/*<String>*/();
+        userManagerImpls.addAll( registry.getList( prefix + "userManagerImpls.userManagerImpl" ) );
+        value.setUserManagerImpls( userManagerImpls );
+        java.util.List rbacManagerImpls = new java.util.ArrayList/*<String>*/();
+        rbacManagerImpls.addAll( registry.getList( prefix + "rbacManagerImpls.rbacManagerImpl" ) );
+        value.setRbacManagerImpls( rbacManagerImpls );
+        LdapConfiguration ldapConfiguration = readLdapConfiguration( prefix + "ldapConfiguration.", registry );
+        value.setLdapConfiguration( ldapConfiguration );
+        java.util.List ldapGroupMappings = new java.util.ArrayList/*<LdapGroupMapping>*/();
+        List ldapGroupMappingsSubsets = registry.getSubsetList( prefix + "ldapGroupMappings.ldapGroupMapping" );
+        for ( Iterator i = ldapGroupMappingsSubsets.iterator(); i.hasNext(); )
+        {
+            LdapGroupMapping v = readLdapGroupMapping( "", (Registry) i.next() );
+            ldapGroupMappings.add( v );
+        }
+        value.setLdapGroupMappings( ldapGroupMappings );
+        java.util.Map configurationProperties = registry.getProperties( prefix + "configurationProperties" );
+        value.setConfigurationProperties( configurationProperties );
+        boolean useUsersCache = registry.getBoolean( prefix + "useUsersCache", value.isUseUsersCache() );
+        value.setUseUsersCache( useUsersCache );
+        CacheConfiguration usersCacheConfiguration = readCacheConfiguration( prefix + "usersCacheConfiguration.", registry );
+        value.setUsersCacheConfiguration( usersCacheConfiguration );
+
+        return value;
+    }
+    
+    private ArchivaDefaultConfiguration readArchivaDefaultConfiguration( String prefix, Registry registry )
+    {
+        ArchivaDefaultConfiguration value = new ArchivaDefaultConfiguration();
+
+        java.util.List defaultCheckPaths = new java.util.ArrayList/*<RepositoryCheckPath>*/();
+        List defaultCheckPathsSubsets = registry.getSubsetList( prefix + "defaultCheckPaths.defaultCheckPath" );
+        for ( Iterator i = defaultCheckPathsSubsets.iterator(); i.hasNext(); )
+        {
+            RepositoryCheckPath v = readRepositoryCheckPath( "", (Registry) i.next() );
+            defaultCheckPaths.add( v );
+        }
+        value.setDefaultCheckPaths( defaultCheckPaths );
+
+        return value;
+    }
+    
+    private LdapConfiguration readLdapConfiguration( String prefix, Registry registry )
+    {
+        LdapConfiguration value = new LdapConfiguration();
+
+    //String hostName = registry.getString( prefix + "hostName", value.getHostName() );
+
+    List<String> hostNameList = registry.getList( prefix + "hostName" );
+    String hostName = value.getHostName();
+    if (hostNameList != null && !hostNameList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = hostNameList.size();i<size;i++)
+        {
+            sb.append( hostNameList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        hostName = sb.toString();
+    }
+
+        value.setHostName( hostName );
+    int port = registry.getInt( prefix + "port", value.getPort() );
+        value.setPort( port );
+        boolean ssl = registry.getBoolean( prefix + "ssl", value.isSsl() );
+        value.setSsl( ssl );
+    //String baseDn = registry.getString( prefix + "baseDn", value.getBaseDn() );
+
+    List<String> baseDnList = registry.getList( prefix + "baseDn" );
+    String baseDn = value.getBaseDn();
+    if (baseDnList != null && !baseDnList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = baseDnList.size();i<size;i++)
+        {
+            sb.append( baseDnList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        baseDn = sb.toString();
+    }
+
+        value.setBaseDn( baseDn );
+    //String baseGroupsDn = registry.getString( prefix + "baseGroupsDn", value.getBaseGroupsDn() );
+
+    List<String> baseGroupsDnList = registry.getList( prefix + "baseGroupsDn" );
+    String baseGroupsDn = value.getBaseGroupsDn();
+    if (baseGroupsDnList != null && !baseGroupsDnList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = baseGroupsDnList.size();i<size;i++)
+        {
+            sb.append( baseGroupsDnList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        baseGroupsDn = sb.toString();
+    }
+
+        value.setBaseGroupsDn( baseGroupsDn );
+    //String contextFactory = registry.getString( prefix + "contextFactory", value.getContextFactory() );
+
+    List<String> contextFactoryList = registry.getList( prefix + "contextFactory" );
+    String contextFactory = value.getContextFactory();
+    if (contextFactoryList != null && !contextFactoryList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = contextFactoryList.size();i<size;i++)
+        {
+            sb.append( contextFactoryList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        contextFactory = sb.toString();
+    }
+
+        value.setContextFactory( contextFactory );
+    //String bindDn = registry.getString( prefix + "bindDn", value.getBindDn() );
+
+    List<String> bindDnList = registry.getList( prefix + "bindDn" );
+    String bindDn = value.getBindDn();
+    if (bindDnList != null && !bindDnList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = bindDnList.size();i<size;i++)
+        {
+            sb.append( bindDnList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        bindDn = sb.toString();
+    }
+
+        value.setBindDn( bindDn );
+    //String password = registry.getString( prefix + "password", value.getPassword() );
+
+    List<String> passwordList = registry.getList( prefix + "password" );
+    String password = value.getPassword();
+    if (passwordList != null && !passwordList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = passwordList.size();i<size;i++)
+        {
+            sb.append( passwordList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        password = sb.toString();
+    }
+
+        value.setPassword( password );
+    //String authenticationMethod = registry.getString( prefix + "authenticationMethod", value.getAuthenticationMethod() );
+
+    List<String> authenticationMethodList = registry.getList( prefix + "authenticationMethod" );
+    String authenticationMethod = value.getAuthenticationMethod();
+    if (authenticationMethodList != null && !authenticationMethodList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = authenticationMethodList.size();i<size;i++)
+        {
+            sb.append( authenticationMethodList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        authenticationMethod = sb.toString();
+    }
+
+        value.setAuthenticationMethod( authenticationMethod );
+        boolean bindAuthenticatorEnabled = registry.getBoolean( prefix + "bindAuthenticatorEnabled", value.isBindAuthenticatorEnabled() );
+        value.setBindAuthenticatorEnabled( bindAuthenticatorEnabled );
+        boolean writable = registry.getBoolean( prefix + "writable", value.isWritable() );
+        value.setWritable( writable );
+        boolean useRoleNameAsGroup = registry.getBoolean( prefix + "useRoleNameAsGroup", value.isUseRoleNameAsGroup() );
+        value.setUseRoleNameAsGroup( useRoleNameAsGroup );
+        java.util.Map extraProperties = registry.getProperties( prefix + "extraProperties" );
+        value.setExtraProperties( extraProperties );
+
+        return value;
+    }
+    
+    private FileLockConfiguration readFileLockConfiguration( String prefix, Registry registry )
+    {
+        FileLockConfiguration value = new FileLockConfiguration();
+
+        boolean skipLocking = registry.getBoolean( prefix + "skipLocking", value.isSkipLocking() );
+        value.setSkipLocking( skipLocking );
+    int lockingTimeout = registry.getInt( prefix + "lockingTimeout", value.getLockingTimeout() );
+        value.setLockingTimeout( lockingTimeout );
+
+        return value;
+    }
+    
+    private CacheConfiguration readCacheConfiguration( String prefix, Registry registry )
+    {
+        CacheConfiguration value = new CacheConfiguration();
+
+    int timeToIdleSeconds = registry.getInt( prefix + "timeToIdleSeconds", value.getTimeToIdleSeconds() );
+        value.setTimeToIdleSeconds( timeToIdleSeconds );
+    int timeToLiveSeconds = registry.getInt( prefix + "timeToLiveSeconds", value.getTimeToLiveSeconds() );
+        value.setTimeToLiveSeconds( timeToLiveSeconds );
+    int maxElementsInMemory = registry.getInt( prefix + "maxElementsInMemory", value.getMaxElementsInMemory() );
+        value.setMaxElementsInMemory( maxElementsInMemory );
+    int maxElementsOnDisk = registry.getInt( prefix + "maxElementsOnDisk", value.getMaxElementsOnDisk() );
+        value.setMaxElementsOnDisk( maxElementsOnDisk );
+
+        return value;
+    }
+    
+    private LdapGroupMapping readLdapGroupMapping( String prefix, Registry registry )
+    {
+        LdapGroupMapping value = new LdapGroupMapping();
+
+    //String group = registry.getString( prefix + "group", value.getGroup() );
+
+    List<String> groupList = registry.getList( prefix + "group" );
+    String group = value.getGroup();
+    if (groupList != null && !groupList.isEmpty() )
+    {
+        StringBuilder sb = new StringBuilder(  );
+        for (int i = 0,size = groupList.size();i<size;i++)
+        {
+            sb.append( groupList.get( i ) );
+            if (i<size - 1)
+            {
+                sb.append( ',' );
+            }
+        }
+        group = sb.toString();
+    }
+
+        value.setGroup( group );
+        java.util.List roleNames = new java.util.ArrayList/*<String>*/();
+        roleNames.addAll( registry.getList( prefix + "roleNames.roleName" ) );
+        value.setRoleNames( roleNames );
+
+        return value;
+    }
+    
+}
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/io/registry/ConfigurationRegistryWriter.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/io/registry/ConfigurationRegistryWriter.java
new file mode 100644
index 0000000..ce696eb
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/io/registry/ConfigurationRegistryWriter.java
@@ -0,0 +1,1335 @@
+
+package org.apache.archiva.configuration.io.registry;
+
+/*
+ * 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.
+ */
+
+import org.apache.archiva.redback.components.registry.Registry;
+
+// Util imports
+import java.util.*;
+
+// Model class imports
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.AbstractRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.LegacyArtifactPath;
+import org.apache.archiva.configuration.RepositoryGroupConfiguration;
+import org.apache.archiva.configuration.RepositoryCheckPath;
+import org.apache.archiva.configuration.AbstractRepositoryConnectorConfiguration;
+import org.apache.archiva.configuration.ProxyConnectorRuleConfiguration;
+import org.apache.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.archiva.configuration.SyncConnectorConfiguration;
+import org.apache.archiva.configuration.NetworkProxyConfiguration;
+import org.apache.archiva.configuration.RepositoryScanningConfiguration;
+import org.apache.archiva.configuration.FileType;
+import org.apache.archiva.configuration.OrganisationInformation;
+import org.apache.archiva.configuration.WebappConfiguration;
+import org.apache.archiva.configuration.UserInterfaceOptions;
+import org.apache.archiva.configuration.NetworkConfiguration;
+import org.apache.archiva.configuration.ArchivaRuntimeConfiguration;
+import org.apache.archiva.configuration.RedbackRuntimeConfiguration;
+import org.apache.archiva.configuration.ArchivaDefaultConfiguration;
+import org.apache.archiva.configuration.LdapConfiguration;
+import org.apache.archiva.configuration.FileLockConfiguration;
+import org.apache.archiva.configuration.CacheConfiguration;
+import org.apache.archiva.configuration.LdapGroupMapping;
+
+
+
+
+/**
+ * Generate Plexus Registry output mechanism for model 'Configuration'.
+ */
+public class ConfigurationRegistryWriter
+{
+    public void write( Configuration model, Registry registry )
+    {
+        writeConfiguration( "", model, registry );
+    }
+
+    private void writeConfiguration( String prefix, Configuration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getVersion() != null
+ )
+            {
+                      String version = "version";
+                registry.setString( prefix + version, value.getVersion() );
+                  }
+                        if ( value.getMetadataStore() != null && !value.getMetadataStore().equals( "jcr" )
+ )
+            {
+                      String metadataStore = "metadataStore";
+                registry.setString( prefix + metadataStore, value.getMetadataStore() );
+                  }
+                  if ( value.getRepositoryGroups() != null && value.getRepositoryGroups().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "repositoryGroups" );
+
+                int count = 0;
+                for ( Iterator iter = value.getRepositoryGroups().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "repositoryGroups.repositoryGroup(" + count + ")";
+                    RepositoryGroupConfiguration o = ( RepositoryGroupConfiguration ) iter.next();
+                    writeRepositoryGroupConfiguration( prefix + name + ".", o, registry );
+                }
+            }
+            if ( value.getManagedRepositories() != null && value.getManagedRepositories().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "managedRepositories" );
+
+                int count = 0;
+                for ( Iterator iter = value.getManagedRepositories().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "managedRepositories.managedRepository(" + count + ")";
+                    ManagedRepositoryConfiguration o = ( ManagedRepositoryConfiguration ) iter.next();
+                    writeManagedRepositoryConfiguration( prefix + name + ".", o, registry );
+                }
+            }
+            if ( value.getRemoteRepositories() != null && value.getRemoteRepositories().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "remoteRepositories" );
+
+                int count = 0;
+                for ( Iterator iter = value.getRemoteRepositories().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "remoteRepositories.remoteRepository(" + count + ")";
+                    RemoteRepositoryConfiguration o = ( RemoteRepositoryConfiguration ) iter.next();
+                    writeRemoteRepositoryConfiguration( prefix + name + ".", o, registry );
+                }
+            }
+            if ( value.getProxyConnectors() != null && value.getProxyConnectors().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "proxyConnectors" );
+
+                int count = 0;
+                for ( Iterator iter = value.getProxyConnectors().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "proxyConnectors.proxyConnector(" + count + ")";
+                    ProxyConnectorConfiguration o = ( ProxyConnectorConfiguration ) iter.next();
+                    writeProxyConnectorConfiguration( prefix + name + ".", o, registry );
+                }
+            }
+            if ( value.getNetworkProxies() != null && value.getNetworkProxies().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "networkProxies" );
+
+                int count = 0;
+                for ( Iterator iter = value.getNetworkProxies().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "networkProxies.networkProxy(" + count + ")";
+                    NetworkProxyConfiguration o = ( NetworkProxyConfiguration ) iter.next();
+                    writeNetworkProxyConfiguration( prefix + name + ".", o, registry );
+                }
+            }
+            if ( value.getLegacyArtifactPaths() != null && value.getLegacyArtifactPaths().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "legacyArtifactPaths" );
+
+                int count = 0;
+                for ( Iterator iter = value.getLegacyArtifactPaths().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "legacyArtifactPaths.legacyArtifactPath(" + count + ")";
+                    LegacyArtifactPath o = ( LegacyArtifactPath ) iter.next();
+                    writeLegacyArtifactPath( prefix + name + ".", o, registry );
+                }
+            }
+            if ( value.getRepositoryScanning() != null
+ )
+            {
+                writeRepositoryScanningConfiguration( prefix + "repositoryScanning.", value.getRepositoryScanning(), registry );
+            }
+            if ( value.getWebapp() != null
+ )
+            {
+                writeWebappConfiguration( prefix + "webapp.", value.getWebapp(), registry );
+            }
+            if ( value.getOrganisationInfo() != null
+ )
+            {
+                writeOrganisationInformation( prefix + "organisationInfo.", value.getOrganisationInfo(), registry );
+            }
+            if ( value.getNetworkConfiguration() != null
+ )
+            {
+                writeNetworkConfiguration( prefix + "networkConfiguration.", value.getNetworkConfiguration(), registry );
+            }
+            if ( value.getRedbackRuntimeConfiguration() != null
+ )
+            {
+                writeRedbackRuntimeConfiguration( prefix + "redbackRuntimeConfiguration.", value.getRedbackRuntimeConfiguration(), registry );
+            }
+            if ( value.getArchivaRuntimeConfiguration() != null
+ )
+            {
+                writeArchivaRuntimeConfiguration( prefix + "archivaRuntimeConfiguration.", value.getArchivaRuntimeConfiguration(), registry );
+            }
+            if ( value.getProxyConnectorRuleConfigurations() != null && value.getProxyConnectorRuleConfigurations().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "proxyConnectorRuleConfigurations" );
+
+                int count = 0;
+                for ( Iterator iter = value.getProxyConnectorRuleConfigurations().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "proxyConnectorRuleConfigurations.proxyConnectorRuleConfiguration(" + count + ")";
+                    ProxyConnectorRuleConfiguration o = ( ProxyConnectorRuleConfiguration ) iter.next();
+                    writeProxyConnectorRuleConfiguration( prefix + name + ".", o, registry );
+                }
+            }
+            if ( value.getArchivaDefaultConfiguration() != null
+ )
+            {
+                writeArchivaDefaultConfiguration( prefix + "archivaDefaultConfiguration.", value.getArchivaDefaultConfiguration(), registry );
+            }
+        }
+    }
+    
+    private void writeAbstractRepositoryConfiguration( String prefix, AbstractRepositoryConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getId() != null
+ )
+            {
+                      String id = "id";
+                registry.setString( prefix + id, value.getId() );
+                  }
+                        if ( value.getType() != null && !value.getType().equals( "MAVEN" )
+ )
+            {
+                      String type = "type";
+                registry.setString( prefix + type, value.getType() );
+                  }
+                        if ( value.getName() != null
+ )
+            {
+                      String name = "name";
+                registry.setString( prefix + name, value.getName() );
+                  }
+                        if ( value.getLayout() != null && !value.getLayout().equals( "default" )
+ )
+            {
+                      String layout = "layout";
+                registry.setString( prefix + layout, value.getLayout() );
+                  }
+                        if ( value.getIndexDir() != null && !value.getIndexDir().equals( "" )
+ )
+            {
+                      String indexDir = "indexDir";
+                registry.setString( prefix + indexDir, value.getIndexDir() );
+                  }
+                        if ( value.getPackedIndexDir() != null && !value.getPackedIndexDir().equals( "" )
+ )
+            {
+                      String packedIndexDir = "packedIndexDir";
+                registry.setString( prefix + packedIndexDir, value.getPackedIndexDir() );
+                  }
+                        if ( value.getDescription() != null && !value.getDescription().equals( "" )
+ )
+            {
+                      String description = "description";
+                registry.setString( prefix + description, value.getDescription() );
+                  }
+              }
+    }
+    
+    private void writeRemoteRepositoryConfiguration( String prefix, RemoteRepositoryConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getUrl() != null
+ )
+            {
+                      String url = "url";
+                registry.setString( prefix + url, value.getUrl() );
+                  }
+                        if ( value.getUsername() != null
+ )
+            {
+                      String username = "username";
+                registry.setString( prefix + username, value.getUsername() );
+                  }
+                        if ( value.getPassword() != null
+ )
+            {
+                      String password = "password";
+                registry.setString( prefix + password, value.getPassword() );
+                  }
+                        if ( value.getTimeout() != 60
+ )
+            {
+                      String timeout = "timeout";
+                registry.setInt( prefix + timeout, value.getTimeout() );
+                  }
+                        if ( value.getRefreshCronExpression() != null && !value.getRefreshCronExpression().equals( "0 0 08 ? * SUN" )
+ )
+            {
+                      String refreshCronExpression = "refreshCronExpression";
+                registry.setString( prefix + refreshCronExpression, value.getRefreshCronExpression() );
+                  }
+                            String downloadRemoteIndex = "downloadRemoteIndex";
+                registry.setBoolean( prefix + downloadRemoteIndex, value.isDownloadRemoteIndex() );
+                        if ( value.getRemoteIndexUrl() != null
+ )
+            {
+                      String remoteIndexUrl = "remoteIndexUrl";
+                registry.setString( prefix + remoteIndexUrl, value.getRemoteIndexUrl() );
+                  }
+                        if ( value.getRemoteDownloadNetworkProxyId() != null
+ )
+            {
+                      String remoteDownloadNetworkProxyId = "remoteDownloadNetworkProxyId";
+                registry.setString( prefix + remoteDownloadNetworkProxyId, value.getRemoteDownloadNetworkProxyId() );
+                  }
+                        if ( value.getRemoteDownloadTimeout() != 300
+ )
+            {
+                      String remoteDownloadTimeout = "remoteDownloadTimeout";
+                registry.setInt( prefix + remoteDownloadTimeout, value.getRemoteDownloadTimeout() );
+                  }
+                            String downloadRemoteIndexOnStartup = "downloadRemoteIndexOnStartup";
+                registry.setBoolean( prefix + downloadRemoteIndexOnStartup, value.isDownloadRemoteIndexOnStartup() );
+                  if ( value.getExtraParameters() != null && value.getExtraParameters().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "extraParameters" );
+                
+                for ( Iterator iter = value.getExtraParameters().keySet().iterator(); iter.hasNext(); )
+                {
+                    String key = (String) iter.next();
+                    String v = (String) value.getExtraParameters().get( key );
+
+                    registry.setString( prefix + "extraParameters." + key, v );
+                }
+            }
+            if ( value.getExtraHeaders() != null && value.getExtraHeaders().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "extraHeaders" );
+                
+                for ( Iterator iter = value.getExtraHeaders().keySet().iterator(); iter.hasNext(); )
+                {
+                    String key = (String) iter.next();
+                    String v = (String) value.getExtraHeaders().get( key );
+
+                    registry.setString( prefix + "extraHeaders." + key, v );
+                }
+            }
+                  if ( value.getCheckPath() != null
+ )
+            {
+                      String checkPath = "checkPath";
+                registry.setString( prefix + checkPath, value.getCheckPath() );
+                  }
+                        if ( value.getId() != null
+ )
+            {
+                      String id = "id";
+                registry.setString( prefix + id, value.getId() );
+                  }
+                        if ( value.getType() != null && !value.getType().equals( "MAVEN" )
+ )
+            {
+                      String type = "type";
+                registry.setString( prefix + type, value.getType() );
+                  }
+                        if ( value.getName() != null
+ )
+            {
+                      String name = "name";
+                registry.setString( prefix + name, value.getName() );
+                  }
+                        if ( value.getLayout() != null && !value.getLayout().equals( "default" )
+ )
+            {
+                      String layout = "layout";
+                registry.setString( prefix + layout, value.getLayout() );
+                  }
+                        if ( value.getIndexDir() != null && !value.getIndexDir().equals( "" )
+ )
+            {
+                      String indexDir = "indexDir";
+                registry.setString( prefix + indexDir, value.getIndexDir() );
+                  }
+                        if ( value.getPackedIndexDir() != null && !value.getPackedIndexDir().equals( "" )
+ )
+            {
+                      String packedIndexDir = "packedIndexDir";
+                registry.setString( prefix + packedIndexDir, value.getPackedIndexDir() );
+                  }
+                        if ( value.getDescription() != null && !value.getDescription().equals( "" )
+ )
+            {
+                      String description = "description";
+                registry.setString( prefix + description, value.getDescription() );
+                  }
+              }
+    }
+    
+    private void writeManagedRepositoryConfiguration( String prefix, ManagedRepositoryConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getLocation() != null
+ )
+            {
+                      String location = "location";
+                registry.setString( prefix + location, value.getLocation() );
+                  }
+                            String releases = "releases";
+                registry.setBoolean( prefix + releases, value.isReleases() );
+                            String blockRedeployments = "blockRedeployments";
+                registry.setBoolean( prefix + blockRedeployments, value.isBlockRedeployments() );
+                            String snapshots = "snapshots";
+                registry.setBoolean( prefix + snapshots, value.isSnapshots() );
+                            String scanned = "scanned";
+                registry.setBoolean( prefix + scanned, value.isScanned() );
+                        if ( value.getRefreshCronExpression() != null && !value.getRefreshCronExpression().equals( "0 0 * * * ?" )
+ )
+            {
+                      String refreshCronExpression = "refreshCronExpression";
+                registry.setString( prefix + refreshCronExpression, value.getRefreshCronExpression() );
+                  }
+                        if ( value.getRetentionCount() != 2
+ )
+            {
+                      String retentionCount = "retentionCount";
+                registry.setInt( prefix + retentionCount, value.getRetentionCount() );
+                  }
+                        if ( value.getRetentionPeriod() != 100
+ )
+            {
+                      String retentionPeriod = "retentionPeriod";
+                registry.setInt( prefix + retentionPeriod, value.getRetentionPeriod() );
+                  }
+                            String deleteReleasedSnapshots = "deleteReleasedSnapshots";
+                registry.setBoolean( prefix + deleteReleasedSnapshots, value.isDeleteReleasedSnapshots() );
+                            String skipPackedIndexCreation = "skipPackedIndexCreation";
+                registry.setBoolean( prefix + skipPackedIndexCreation, value.isSkipPackedIndexCreation() );
+                            String stageRepoNeeded = "stageRepoNeeded";
+                registry.setBoolean( prefix + stageRepoNeeded, value.isStageRepoNeeded() );
+                        if ( value.getId() != null
+ )
+            {
+                      String id = "id";
+                registry.setString( prefix + id, value.getId() );
+                  }
+                        if ( value.getType() != null && !value.getType().equals( "MAVEN" )
+ )
+            {
+                      String type = "type";
+                registry.setString( prefix + type, value.getType() );
+                  }
+                        if ( value.getName() != null
+ )
+            {
+                      String name = "name";
+                registry.setString( prefix + name, value.getName() );
+                  }
+                        if ( value.getLayout() != null && !value.getLayout().equals( "default" )
+ )
+            {
+                      String layout = "layout";
+                registry.setString( prefix + layout, value.getLayout() );
+                  }
+                        if ( value.getIndexDir() != null && !value.getIndexDir().equals( "" )
+ )
+            {
+                      String indexDir = "indexDir";
+                registry.setString( prefix + indexDir, value.getIndexDir() );
+                  }
+                        if ( value.getPackedIndexDir() != null && !value.getPackedIndexDir().equals( "" )
+ )
+            {
+                      String packedIndexDir = "packedIndexDir";
+                registry.setString( prefix + packedIndexDir, value.getPackedIndexDir() );
+                  }
+                        if ( value.getDescription() != null && !value.getDescription().equals( "" )
+ )
+            {
+                      String description = "description";
+                registry.setString( prefix + description, value.getDescription() );
+                  }
+              }
+    }
+    
+    private void writeLegacyArtifactPath( String prefix, LegacyArtifactPath value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getPath() != null
+ )
+            {
+                      String path = "path";
+                registry.setString( prefix + path, value.getPath() );
+                  }
+                        if ( value.getArtifact() != null
+ )
+            {
+                      String artifact = "artifact";
+                registry.setString( prefix + artifact, value.getArtifact() );
+                  }
+              }
+    }
+    
+    private void writeRepositoryGroupConfiguration( String prefix, RepositoryGroupConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getId() != null
+ )
+            {
+                      String id = "id";
+                registry.setString( prefix + id, value.getId() );
+                  }
+                        if ( value.getMergedIndexPath() != null && !value.getMergedIndexPath().equals( ".indexer" )
+ )
+            {
+                      String mergedIndexPath = "mergedIndexPath";
+                registry.setString( prefix + mergedIndexPath, value.getMergedIndexPath() );
+                  }
+                        if ( value.getMergedIndexTtl() != 30
+ )
+            {
+                      String mergedIndexTtl = "mergedIndexTtl";
+                registry.setInt( prefix + mergedIndexTtl, value.getMergedIndexTtl() );
+                  }
+                        if ( value.getCronExpression() != null && !value.getCronExpression().equals( "" )
+ )
+            {
+                      String cronExpression = "cronExpression";
+                registry.setString( prefix + cronExpression, value.getCronExpression() );
+                  }
+                  if ( value.getRepositories() != null && value.getRepositories().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "repositories" );
+
+                int count = 0;
+                for ( Iterator iter = value.getRepositories().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "repositories.repository(" + count + ")";
+                    String repository = ( String ) iter.next();
+                    registry.setString( prefix + name, repository );
+                }
+            }
+        }
+    }
+    
+    private void writeRepositoryCheckPath( String prefix, RepositoryCheckPath value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getUrl() != null
+ )
+            {
+                      String url = "url";
+                registry.setString( prefix + url, value.getUrl() );
+                  }
+                        if ( value.getPath() != null
+ )
+            {
+                      String path = "path";
+                registry.setString( prefix + path, value.getPath() );
+                  }
+              }
+    }
+    
+    private void writeAbstractRepositoryConnectorConfiguration( String prefix, AbstractRepositoryConnectorConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getSourceRepoId() != null
+ )
+            {
+                      String sourceRepoId = "sourceRepoId";
+                registry.setString( prefix + sourceRepoId, value.getSourceRepoId() );
+                  }
+                        if ( value.getTargetRepoId() != null
+ )
+            {
+                      String targetRepoId = "targetRepoId";
+                registry.setString( prefix + targetRepoId, value.getTargetRepoId() );
+                  }
+                        if ( value.getProxyId() != null
+ )
+            {
+                      String proxyId = "proxyId";
+                registry.setString( prefix + proxyId, value.getProxyId() );
+                  }
+                  if ( value.getBlackListPatterns() != null && value.getBlackListPatterns().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "blackListPatterns" );
+
+                int count = 0;
+                for ( Iterator iter = value.getBlackListPatterns().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "blackListPatterns.blackListPattern(" + count + ")";
+                    String blackListPattern = ( String ) iter.next();
+                    registry.setString( prefix + name, blackListPattern );
+                }
+            }
+            if ( value.getWhiteListPatterns() != null && value.getWhiteListPatterns().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "whiteListPatterns" );
+
+                int count = 0;
+                for ( Iterator iter = value.getWhiteListPatterns().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "whiteListPatterns.whiteListPattern(" + count + ")";
+                    String whiteListPattern = ( String ) iter.next();
+                    registry.setString( prefix + name, whiteListPattern );
+                }
+            }
+            if ( value.getPolicies() != null && value.getPolicies().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "policies" );
+                
+                for ( Iterator iter = value.getPolicies().keySet().iterator(); iter.hasNext(); )
+                {
+                    String key = (String) iter.next();
+                    String v = (String) value.getPolicies().get( key );
+
+                    registry.setString( prefix + "policies." + key, v );
+                }
+            }
+            if ( value.getProperties() != null && value.getProperties().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "properties" );
+                
+                for ( Iterator iter = value.getProperties().keySet().iterator(); iter.hasNext(); )
+                {
+                    String key = (String) iter.next();
+                    String v = (String) value.getProperties().get( key );
+
+                    registry.setString( prefix + "properties." + key, v );
+                }
+            }
+                      String disabled = "disabled";
+                registry.setBoolean( prefix + disabled, value.isDisabled() );
+              }
+    }
+    
+    private void writeProxyConnectorRuleConfiguration( String prefix, ProxyConnectorRuleConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getRuleType() != null
+ )
+            {
+                      String ruleType = "ruleType";
+                registry.setString( prefix + ruleType, value.getRuleType() );
+                  }
+                        if ( value.getPattern() != null
+ )
+            {
+                      String pattern = "pattern";
+                registry.setString( prefix + pattern, value.getPattern() );
+                  }
+                  if ( value.getProxyConnectors() != null && value.getProxyConnectors().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "proxyConnectors" );
+
+                int count = 0;
+                for ( Iterator iter = value.getProxyConnectors().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "proxyConnectors.proxyConnector(" + count + ")";
+                    ProxyConnectorConfiguration o = ( ProxyConnectorConfiguration ) iter.next();
+                    writeProxyConnectorConfiguration( prefix + name + ".", o, registry );
+                }
+            }
+        }
+    }
+    
+    private void writeProxyConnectorConfiguration( String prefix, ProxyConnectorConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getOrder() != 0
+ )
+            {
+                      String order = "order";
+                registry.setInt( prefix + order, value.getOrder() );
+                  }
+                        if ( value.getSourceRepoId() != null
+ )
+            {
+                      String sourceRepoId = "sourceRepoId";
+                registry.setString( prefix + sourceRepoId, value.getSourceRepoId() );
+                  }
+                        if ( value.getTargetRepoId() != null
+ )
+            {
+                      String targetRepoId = "targetRepoId";
+                registry.setString( prefix + targetRepoId, value.getTargetRepoId() );
+                  }
+                        if ( value.getProxyId() != null
+ )
+            {
+                      String proxyId = "proxyId";
+                registry.setString( prefix + proxyId, value.getProxyId() );
+                  }
+                  if ( value.getBlackListPatterns() != null && value.getBlackListPatterns().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "blackListPatterns" );
+
+                int count = 0;
+                for ( Iterator iter = value.getBlackListPatterns().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "blackListPatterns.blackListPattern(" + count + ")";
+                    String blackListPattern = ( String ) iter.next();
+                    registry.setString( prefix + name, blackListPattern );
+                }
+            }
+            if ( value.getWhiteListPatterns() != null && value.getWhiteListPatterns().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "whiteListPatterns" );
+
+                int count = 0;
+                for ( Iterator iter = value.getWhiteListPatterns().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "whiteListPatterns.whiteListPattern(" + count + ")";
+                    String whiteListPattern = ( String ) iter.next();
+                    registry.setString( prefix + name, whiteListPattern );
+                }
+            }
+            if ( value.getPolicies() != null && value.getPolicies().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "policies" );
+                
+                for ( Iterator iter = value.getPolicies().keySet().iterator(); iter.hasNext(); )
+                {
+                    String key = (String) iter.next();
+                    String v = (String) value.getPolicies().get( key );
+
+                    registry.setString( prefix + "policies." + key, v );
+                }
+            }
+            if ( value.getProperties() != null && value.getProperties().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "properties" );
+                
+                for ( Iterator iter = value.getProperties().keySet().iterator(); iter.hasNext(); )
+                {
+                    String key = (String) iter.next();
+                    String v = (String) value.getProperties().get( key );
+
+                    registry.setString( prefix + "properties." + key, v );
+                }
+            }
+                      String disabled = "disabled";
+                registry.setBoolean( prefix + disabled, value.isDisabled() );
+              }
+    }
+    
+    private void writeSyncConnectorConfiguration( String prefix, SyncConnectorConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getCronExpression() != null && !value.getCronExpression().equals( "0 0 * * * ?" )
+ )
+            {
+                      String cronExpression = "cronExpression";
+                registry.setString( prefix + cronExpression, value.getCronExpression() );
+                  }
+                        if ( value.getMethod() != null && !value.getMethod().equals( "rsync" )
+ )
+            {
+                      String method = "method";
+                registry.setString( prefix + method, value.getMethod() );
+                  }
+                        if ( value.getSourceRepoId() != null
+ )
+            {
+                      String sourceRepoId = "sourceRepoId";
+                registry.setString( prefix + sourceRepoId, value.getSourceRepoId() );
+                  }
+                        if ( value.getTargetRepoId() != null
+ )
+            {
+                      String targetRepoId = "targetRepoId";
+                registry.setString( prefix + targetRepoId, value.getTargetRepoId() );
+                  }
+                        if ( value.getProxyId() != null
+ )
+            {
+                      String proxyId = "proxyId";
+                registry.setString( prefix + proxyId, value.getProxyId() );
+                  }
+                  if ( value.getBlackListPatterns() != null && value.getBlackListPatterns().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "blackListPatterns" );
+
+                int count = 0;
+                for ( Iterator iter = value.getBlackListPatterns().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "blackListPatterns.blackListPattern(" + count + ")";
+                    String blackListPattern = ( String ) iter.next();
+                    registry.setString( prefix + name, blackListPattern );
+                }
+            }
+            if ( value.getWhiteListPatterns() != null && value.getWhiteListPatterns().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "whiteListPatterns" );
+
+                int count = 0;
+                for ( Iterator iter = value.getWhiteListPatterns().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "whiteListPatterns.whiteListPattern(" + count + ")";
+                    String whiteListPattern = ( String ) iter.next();
+                    registry.setString( prefix + name, whiteListPattern );
+                }
+            }
+            if ( value.getPolicies() != null && value.getPolicies().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "policies" );
+                
+                for ( Iterator iter = value.getPolicies().keySet().iterator(); iter.hasNext(); )
+                {
+                    String key = (String) iter.next();
+                    String v = (String) value.getPolicies().get( key );
+
+                    registry.setString( prefix + "policies." + key, v );
+                }
+            }
+            if ( value.getProperties() != null && value.getProperties().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "properties" );
+                
+                for ( Iterator iter = value.getProperties().keySet().iterator(); iter.hasNext(); )
+                {
+                    String key = (String) iter.next();
+                    String v = (String) value.getProperties().get( key );
+
+                    registry.setString( prefix + "properties." + key, v );
+                }
+            }
+                      String disabled = "disabled";
+                registry.setBoolean( prefix + disabled, value.isDisabled() );
+              }
+    }
+    
+    private void writeNetworkProxyConfiguration( String prefix, NetworkProxyConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getId() != null
+ )
+            {
+                      String id = "id";
+                registry.setString( prefix + id, value.getId() );
+                  }
+                        if ( value.getProtocol() != null && !value.getProtocol().equals( "http" )
+ )
+            {
+                      String protocol = "protocol";
+                registry.setString( prefix + protocol, value.getProtocol() );
+                  }
+                        if ( value.getHost() != null
+ )
+            {
+                      String host = "host";
+                registry.setString( prefix + host, value.getHost() );
+                  }
+                        if ( value.getPort() != 8080
+ )
+            {
+                      String port = "port";
+                registry.setInt( prefix + port, value.getPort() );
+                  }
+                        if ( value.getUsername() != null
+ )
+            {
+                      String username = "username";
+                registry.setString( prefix + username, value.getUsername() );
+                  }
+                        if ( value.getPassword() != null
+ )
+            {
+                      String password = "password";
+                registry.setString( prefix + password, value.getPassword() );
+                  }
+                            String useNtlm = "useNtlm";
+                registry.setBoolean( prefix + useNtlm, value.isUseNtlm() );
+              }
+    }
+    
+    private void writeRepositoryScanningConfiguration( String prefix, RepositoryScanningConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+            if ( value.getFileTypes() != null && value.getFileTypes().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "fileTypes" );
+
+                int count = 0;
+                for ( Iterator iter = value.getFileTypes().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "fileTypes.fileType(" + count + ")";
+                    FileType o = ( FileType ) iter.next();
+                    writeFileType( prefix + name + ".", o, registry );
+                }
+            }
+            if ( value.getKnownContentConsumers() != null && value.getKnownContentConsumers().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "knownContentConsumers" );
+
+                int count = 0;
+                for ( Iterator iter = value.getKnownContentConsumers().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "knownContentConsumers.knownContentConsumer(" + count + ")";
+                    String knownContentConsumer = ( String ) iter.next();
+                    registry.setString( prefix + name, knownContentConsumer );
+                }
+            }
+            if ( value.getInvalidContentConsumers() != null && value.getInvalidContentConsumers().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "invalidContentConsumers" );
+
+                int count = 0;
+                for ( Iterator iter = value.getInvalidContentConsumers().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "invalidContentConsumers.invalidContentConsumer(" + count + ")";
+                    String invalidContentConsumer = ( String ) iter.next();
+                    registry.setString( prefix + name, invalidContentConsumer );
+                }
+            }
+        }
+    }
+    
+    private void writeFileType( String prefix, FileType value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getId() != null
+ )
+            {
+                      String id = "id";
+                registry.setString( prefix + id, value.getId() );
+                  }
+                  if ( value.getPatterns() != null && value.getPatterns().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "patterns" );
+
+                int count = 0;
+                for ( Iterator iter = value.getPatterns().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "patterns.pattern(" + count + ")";
+                    String pattern = ( String ) iter.next();
+                    registry.setString( prefix + name, pattern );
+                }
+            }
+        }
+    }
+    
+    private void writeOrganisationInformation( String prefix, OrganisationInformation value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getName() != null
+ )
+            {
+                      String name = "name";
+                registry.setString( prefix + name, value.getName() );
+                  }
+                        if ( value.getUrl() != null
+ )
+            {
+                      String url = "url";
+                registry.setString( prefix + url, value.getUrl() );
+                  }
+                        if ( value.getLogoLocation() != null
+ )
+            {
+                      String logoLocation = "logoLocation";
+                registry.setString( prefix + logoLocation, value.getLogoLocation() );
+                  }
+              }
+    }
+    
+    private void writeWebappConfiguration( String prefix, WebappConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+            if ( value.getUi() != null
+ )
+            {
+                writeUserInterfaceOptions( prefix + "ui.", value.getUi(), registry );
+            }
+        }
+    }
+    
+    private void writeUserInterfaceOptions( String prefix, UserInterfaceOptions value, Registry registry )
+    {
+        if ( value != null )
+        {
+                      String showFindArtifacts = "showFindArtifacts";
+                registry.setBoolean( prefix + showFindArtifacts, value.isShowFindArtifacts() );
+                            String appletFindEnabled = "appletFindEnabled";
+                registry.setBoolean( prefix + appletFindEnabled, value.isAppletFindEnabled() );
+                            String disableEasterEggs = "disableEasterEggs";
+                registry.setBoolean( prefix + disableEasterEggs, value.isDisableEasterEggs() );
+                        if ( value.getApplicationUrl() != null
+ )
+            {
+                      String applicationUrl = "applicationUrl";
+                registry.setString( prefix + applicationUrl, value.getApplicationUrl() );
+                  }
+                            String disableRegistration = "disableRegistration";
+                registry.setBoolean( prefix + disableRegistration, value.isDisableRegistration() );
+              }
+    }
+    
+    private void writeNetworkConfiguration( String prefix, NetworkConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getMaxTotal() != 30
+ )
+            {
+                      String maxTotal = "maxTotal";
+                registry.setInt( prefix + maxTotal, value.getMaxTotal() );
+                  }
+                        if ( value.getMaxTotalPerHost() != 30
+ )
+            {
+                      String maxTotalPerHost = "maxTotalPerHost";
+                registry.setInt( prefix + maxTotalPerHost, value.getMaxTotalPerHost() );
+                  }
+                            String usePooling = "usePooling";
+                registry.setBoolean( prefix + usePooling, value.isUsePooling() );
+              }
+    }
+    
+    private void writeArchivaRuntimeConfiguration( String prefix, ArchivaRuntimeConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+            if ( value.getUrlFailureCacheConfiguration() != null
+ )
+            {
+                writeCacheConfiguration( prefix + "urlFailureCacheConfiguration.", value.getUrlFailureCacheConfiguration(), registry );
+            }
+            if ( value.getFileLockConfiguration() != null
+ )
+            {
+                writeFileLockConfiguration( prefix + "fileLockConfiguration.", value.getFileLockConfiguration(), registry );
+            }
+                  if ( value.getDataDirectory() != null
+ )
+            {
+                      String dataDirectory = "dataDirectory";
+                registry.setString( prefix + dataDirectory, value.getDataDirectory() );
+                  }
+                        if ( value.getRepositoryBaseDirectory() != null
+ )
+            {
+                      String repositoryBaseDirectory = "repositoryBaseDirectory";
+                registry.setString( prefix + repositoryBaseDirectory, value.getRepositoryBaseDirectory() );
+                  }
+                        if ( value.getRemoteRepositoryBaseDirectory() != null
+ )
+            {
+                      String remoteRepositoryBaseDirectory = "remoteRepositoryBaseDirectory";
+                registry.setString( prefix + remoteRepositoryBaseDirectory, value.getRemoteRepositoryBaseDirectory() );
+                  }
+                        if ( value.getDefaultLanguage() != null && !value.getDefaultLanguage().equals( "en-US" )
+ )
+            {
+                      String defaultLanguage = "defaultLanguage";
+                registry.setString( prefix + defaultLanguage, value.getDefaultLanguage() );
+                  }
+                        if ( value.getLanguageRange() != null && !value.getLanguageRange().equals( "en,fr,de" )
+ )
+            {
+                      String languageRange = "languageRange";
+                registry.setString( prefix + languageRange, value.getLanguageRange() );
+                  }
+              }
+    }
+    
+    private void writeRedbackRuntimeConfiguration( String prefix, RedbackRuntimeConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                      String migratedFromRedbackConfiguration = "migratedFromRedbackConfiguration";
+                registry.setBoolean( prefix + migratedFromRedbackConfiguration, value.isMigratedFromRedbackConfiguration() );
+                  if ( value.getUserManagerImpls() != null && value.getUserManagerImpls().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "userManagerImpls" );
+
+                int count = 0;
+                for ( Iterator iter = value.getUserManagerImpls().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "userManagerImpls.userManagerImpl(" + count + ")";
+                    String userManagerImpl = ( String ) iter.next();
+                    registry.setString( prefix + name, userManagerImpl );
+                }
+            }
+            if ( value.getRbacManagerImpls() != null && value.getRbacManagerImpls().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "rbacManagerImpls" );
+
+                int count = 0;
+                for ( Iterator iter = value.getRbacManagerImpls().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "rbacManagerImpls.rbacManagerImpl(" + count + ")";
+                    String rbacManagerImpl = ( String ) iter.next();
+                    registry.setString( prefix + name, rbacManagerImpl );
+                }
+            }
+            if ( value.getLdapConfiguration() != null
+ )
+            {
+                writeLdapConfiguration( prefix + "ldapConfiguration.", value.getLdapConfiguration(), registry );
+            }
+            if ( value.getLdapGroupMappings() != null && value.getLdapGroupMappings().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "ldapGroupMappings" );
+
+                int count = 0;
+                for ( Iterator iter = value.getLdapGroupMappings().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "ldapGroupMappings.ldapGroupMapping(" + count + ")";
+                    LdapGroupMapping o = ( LdapGroupMapping ) iter.next();
+                    writeLdapGroupMapping( prefix + name + ".", o, registry );
+                }
+            }
+            if ( value.getConfigurationProperties() != null && value.getConfigurationProperties().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "configurationProperties" );
+                
+                for ( Iterator iter = value.getConfigurationProperties().keySet().iterator(); iter.hasNext(); )
+                {
+                    String key = (String) iter.next();
+                    String v = (String) value.getConfigurationProperties().get( key );
+
+                    registry.setString( prefix + "configurationProperties." + key, v );
+                }
+            }
+                      String useUsersCache = "useUsersCache";
+                registry.setBoolean( prefix + useUsersCache, value.isUseUsersCache() );
+                  if ( value.getUsersCacheConfiguration() != null
+ )
+            {
+                writeCacheConfiguration( prefix + "usersCacheConfiguration.", value.getUsersCacheConfiguration(), registry );
+            }
+        }
+    }
+    
+    private void writeArchivaDefaultConfiguration( String prefix, ArchivaDefaultConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+            if ( value.getDefaultCheckPaths() != null && value.getDefaultCheckPaths().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "defaultCheckPaths" );
+
+                int count = 0;
+                for ( Iterator iter = value.getDefaultCheckPaths().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "defaultCheckPaths.defaultCheckPath(" + count + ")";
+                    RepositoryCheckPath o = ( RepositoryCheckPath ) iter.next();
+                    writeRepositoryCheckPath( prefix + name + ".", o, registry );
+                }
+            }
+        }
+    }
+    
+    private void writeLdapConfiguration( String prefix, LdapConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getHostName() != null
+ )
+            {
+                      String hostName = "hostName";
+                registry.setString( prefix + hostName, value.getHostName() );
+                  }
+                        if ( value.getPort() != 0
+ )
+            {
+                      String port = "port";
+                registry.setInt( prefix + port, value.getPort() );
+                  }
+                            String ssl = "ssl";
+                registry.setBoolean( prefix + ssl, value.isSsl() );
+                        if ( value.getBaseDn() != null
+ )
+            {
+                      String baseDn = "baseDn";
+                registry.setString( prefix + baseDn, value.getBaseDn() );
+                  }
+                        if ( value.getBaseGroupsDn() != null
+ )
+            {
+                      String baseGroupsDn = "baseGroupsDn";
+                registry.setString( prefix + baseGroupsDn, value.getBaseGroupsDn() );
+                  }
+                        if ( value.getContextFactory() != null
+ )
+            {
+                      String contextFactory = "contextFactory";
+                registry.setString( prefix + contextFactory, value.getContextFactory() );
+                  }
+                        if ( value.getBindDn() != null
+ )
+            {
+                      String bindDn = "bindDn";
+                registry.setString( prefix + bindDn, value.getBindDn() );
+                  }
+                        if ( value.getPassword() != null
+ )
+            {
+                      String password = "password";
+                registry.setString( prefix + password, value.getPassword() );
+                  }
+                        if ( value.getAuthenticationMethod() != null
+ )
+            {
+                      String authenticationMethod = "authenticationMethod";
+                registry.setString( prefix + authenticationMethod, value.getAuthenticationMethod() );
+                  }
+                            String bindAuthenticatorEnabled = "bindAuthenticatorEnabled";
+                registry.setBoolean( prefix + bindAuthenticatorEnabled, value.isBindAuthenticatorEnabled() );
+                            String writable = "writable";
+                registry.setBoolean( prefix + writable, value.isWritable() );
+                            String useRoleNameAsGroup = "useRoleNameAsGroup";
+                registry.setBoolean( prefix + useRoleNameAsGroup, value.isUseRoleNameAsGroup() );
+                  if ( value.getExtraProperties() != null && value.getExtraProperties().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "extraProperties" );
+                
+                for ( Iterator iter = value.getExtraProperties().keySet().iterator(); iter.hasNext(); )
+                {
+                    String key = (String) iter.next();
+                    String v = (String) value.getExtraProperties().get( key );
+
+                    registry.setString( prefix + "extraProperties." + key, v );
+                }
+            }
+        }
+    }
+    
+    private void writeFileLockConfiguration( String prefix, FileLockConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                      String skipLocking = "skipLocking";
+                registry.setBoolean( prefix + skipLocking, value.isSkipLocking() );
+                        if ( value.getLockingTimeout() != 0
+ )
+            {
+                      String lockingTimeout = "lockingTimeout";
+                registry.setInt( prefix + lockingTimeout, value.getLockingTimeout() );
+                  }
+              }
+    }
+    
+    private void writeCacheConfiguration( String prefix, CacheConfiguration value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getTimeToIdleSeconds() != -1
+ )
+            {
+                      String timeToIdleSeconds = "timeToIdleSeconds";
+                registry.setInt( prefix + timeToIdleSeconds, value.getTimeToIdleSeconds() );
+                  }
+                        if ( value.getTimeToLiveSeconds() != -1
+ )
+            {
+                      String timeToLiveSeconds = "timeToLiveSeconds";
+                registry.setInt( prefix + timeToLiveSeconds, value.getTimeToLiveSeconds() );
+                  }
+                        if ( value.getMaxElementsInMemory() != -1
+ )
+            {
+                      String maxElementsInMemory = "maxElementsInMemory";
+                registry.setInt( prefix + maxElementsInMemory, value.getMaxElementsInMemory() );
+                  }
+                        if ( value.getMaxElementsOnDisk() != -1
+ )
+            {
+                      String maxElementsOnDisk = "maxElementsOnDisk";
+                registry.setInt( prefix + maxElementsOnDisk, value.getMaxElementsOnDisk() );
+                  }
+              }
+    }
+    
+    private void writeLdapGroupMapping( String prefix, LdapGroupMapping value, Registry registry )
+    {
+        if ( value != null )
+        {
+                  if ( value.getGroup() != null
+ )
+            {
+                      String group = "group";
+                registry.setString( prefix + group, value.getGroup() );
+                  }
+                  if ( value.getRoleNames() != null && value.getRoleNames().size() > 0
+ )
+            {
+                registry.removeSubset( prefix + "roleNames" );
+
+                int count = 0;
+                for ( Iterator iter = value.getRoleNames().iterator(); iter.hasNext(); count++ )
+                {
+                    String name = "roleNames.roleName(" + count + ")";
+                    String roleName = ( String ) iter.next();
+                    registry.setString( prefix + name, roleName );
+                }
+            }
+        }
+    }
+    
+}
\ No newline at end of file