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 2017/11/01 14:40:47 UTC

[01/21] archiva git commit: Adding data path to configuration

Repository: archiva
Updated Branches:
  refs/heads/master cb38dbbbc -> 17f2989fe


Adding data path to configuration


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/acbcb487
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/acbcb487
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/acbcb487

Branch: refs/heads/master
Commit: acbcb48747ed6bd94249c2494b4953eea27f9d93
Parents: cb38dbb
Author: Martin Stockhammer <ma...@apache.org>
Authored: Sun Oct 22 17:01:27 2017 +0200
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Sun Oct 22 17:01:27 2017 +0200

----------------------------------------------------------------------
 .../DefaultArchivaConfiguration.java            | 15 ++++++--
 .../src/main/mdo/configuration.mdo              | 38 ++++++++------------
 .../configuration/test-default-archiva.xml      |  2 +-
 .../src/test/resources/scanner-archiva.xml      |  2 +-
 .../src/test/resources/archiva-test.xml         |  1 +
 .../src/test/resources/scanner-archiva.xml      |  2 +-
 6 files changed, 31 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/acbcb487/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
index d31287d..1dd0bae 100644
--- a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
@@ -202,16 +202,25 @@ public class DefaultArchivaConfiguration
         Registry subset = registry.getSubset( KEY );
         if ( subset.getString( "version" ) == null )
         {
-            // a little autodetection of v1, even if version is omitted (this was previously allowed)
             if ( subset.getSubset( "repositoryScanning" ).isEmpty() )
             {
-                // only for empty, or v < 1
+                // only for empty
                 subset = readDefaultConfiguration();
+            } else
+            {
+                throw new RuntimeException( "No version tag found in configuration. Archiva configuration version 1.x is not longer supported." );
             }
         }
 
         Configuration config = new ConfigurationRegistryReader().read( subset );
-
+        if (StringUtils.isEmpty( config.getArchivaRuntimeConfiguration().getDataDirectory() )) {
+            Path appserverBaseDir = Paths.get(registry.getString("appserver.base", ""));
+            config.getArchivaRuntimeConfiguration().setDataDirectory( appserverBaseDir.normalize().toString() );
+        }
+        if (StringUtils.isEmpty( config.getArchivaRuntimeConfiguration().getRepositoryBaseDirectory())) {
+            Path baseDir = Paths.get(config.getArchivaRuntimeConfiguration().getDataDirectory());
+            config.getArchivaRuntimeConfiguration().setRepositoryBaseDirectory( baseDir.resolve("repositories").toString() );
+        }
 
         config.getRepositoryGroups();
         config.getRepositoryGroupsAsMap();

http://git-wip-us.apache.org/repos/asf/archiva/blob/acbcb487/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo b/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
index 971a830..d5d96cd 100644
--- a/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
@@ -742,28 +742,6 @@
         </field>
       </fields>
     </class>
-    <class>
-      <name>V1RepositoryConfiguration</name>
-      <version>1.0.0+</version>
-      <superClass>ManagedRepositoryConfiguration</superClass>
-      <fields>
-        <field>
-          <name>url</name>
-          <version>1.0.0+</version>
-          <type>String</type>
-          <required>true</required>
-          <description>
-            The URL for this repository.
-          </description>
-        </field>
-        <field>
-          <name>indexed</name>
-          <version>1.0.0+</version>
-          <type>boolean</type>
-          <required>true</required>
-        </field>
-      </fields>
-    </class>
 
     <class>
       <name>LegacyArtifactPath</name>
@@ -1552,6 +1530,20 @@
             <type>FileLockConfiguration</type>
           </association>
         </field>
+        <field>
+          <name>dataDirectory</name>
+          <version>3.0.0+</version>
+          <description>The base directory where the archiva data is stored. If not set, the appserver.base is used.</description>
+          <type>String</type>
+          <required>false</required>
+        </field>
+        <field>
+          <name>repositoryBaseDirectory</name>
+          <version>3.0.0+</version>
+          <description>The base directory for local storage of repository data. If not set, it's ${dataDirectory}/repositories.</description>
+          <type>String</type>
+          <required>false</required>
+        </field>
       </fields>
     </class>
 
@@ -1559,7 +1551,7 @@
       <name>RedbackRuntimeConfiguration</name>
       <version>1.4.0+</version>
       <description>
-        The runtime configuration.
+        The redback runtime configuration.
       </description>
       <fields>
         <field>

http://git-wip-us.apache.org/repos/asf/archiva/blob/acbcb487/archiva-modules/archiva-base/archiva-configuration/src/test/resources/org/apache/archiva/configuration/test-default-archiva.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/test/resources/org/apache/archiva/configuration/test-default-archiva.xml b/archiva-modules/archiva-base/archiva-configuration/src/test/resources/org/apache/archiva/configuration/test-default-archiva.xml
index ab0f50d..bb3d803 100755
--- a/archiva-modules/archiva-base/archiva-configuration/src/test/resources/org/apache/archiva/configuration/test-default-archiva.xml
+++ b/archiva-modules/archiva-base/archiva-configuration/src/test/resources/org/apache/archiva/configuration/test-default-archiva.xml
@@ -1,5 +1,5 @@
 <configuration>
-  <version>2</version>
+  <version>3.0.0</version>
   <managedRepositories>
     <managedRepository>
       <id>internal</id>

http://git-wip-us.apache.org/repos/asf/archiva/blob/acbcb487/archiva-modules/archiva-base/archiva-repository-scanner/src/test/resources/scanner-archiva.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/resources/scanner-archiva.xml b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/resources/scanner-archiva.xml
index 13a884e..de6b2b6 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/resources/scanner-archiva.xml
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/resources/scanner-archiva.xml
@@ -19,7 +19,7 @@
   -->
 
 <configuration>
-
+  <version>3.0.0</version>
   <repositoryScanning>
     <fileTypes>
       <fileType>

http://git-wip-us.apache.org/repos/asf/archiva/blob/acbcb487/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/archiva-test.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/archiva-test.xml b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/archiva-test.xml
index 0c1f93c..277e287 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/archiva-test.xml
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/archiva-test.xml
@@ -19,6 +19,7 @@
   -->
 
 <configuration>
+  <version>3.0.0</version>
   <managedRepositories>
     <managedRepository>
       <id>testRepo</id>

http://git-wip-us.apache.org/repos/asf/archiva/blob/acbcb487/archiva-modules/plugins/maven2-repository/src/test/resources/scanner-archiva.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/resources/scanner-archiva.xml b/archiva-modules/plugins/maven2-repository/src/test/resources/scanner-archiva.xml
index 13a884e..de6b2b6 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/resources/scanner-archiva.xml
+++ b/archiva-modules/plugins/maven2-repository/src/test/resources/scanner-archiva.xml
@@ -19,7 +19,7 @@
   -->
 
 <configuration>
-
+  <version>3.0.0</version>
   <repositoryScanning>
     <fileTypes>
       <fileType>


[03/21] archiva git commit: Adding language settings to configuration

Posted by ma...@apache.org.
Adding language settings to configuration


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/89f7aa34
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/89f7aa34
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/89f7aa34

Branch: refs/heads/master
Commit: 89f7aa34163023e5d2c2f388baabc3683268418f
Parents: 1026c8e
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Oct 25 22:59:26 2017 +0200
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Oct 25 22:59:26 2017 +0200

----------------------------------------------------------------------
 .../configuration/ArchivaConfiguration.java     |  7 ++++++
 .../DefaultArchivaConfiguration.java            | 26 ++++++++++++++++++--
 .../src/main/mdo/configuration.mdo              | 14 +++++++++++
 3 files changed, 45 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/89f7aa34/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaConfiguration.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaConfiguration.java
index 4f6798c..02d2b13 100644
--- a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaConfiguration.java
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaConfiguration.java
@@ -22,6 +22,9 @@ package org.apache.archiva.configuration;
 import org.apache.archiva.redback.components.registry.RegistryException;
 import org.apache.archiva.redback.components.registry.RegistryListener;
 
+import java.util.List;
+import java.util.Locale;
+
 /**
  * Configuration holder for the model read from the registry.
  */
@@ -85,5 +88,9 @@ public interface ArchivaConfiguration
      * @since 1.4-M1
      */
     void reload();
+
+    public Locale getDefaultLocale();
+
+    public List<Locale.LanguageRange> getLanguagePriorities();
 }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/89f7aa34/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
index 1dd0bae..6983be0 100644
--- a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
@@ -63,6 +63,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -169,6 +170,15 @@ public class DefaultArchivaConfiguration
     // Section used for default only configuration
     private static final String KEY_DEFAULT_ONLY = "org.apache.archiva_default";
 
+    private Locale defaultLocale = Locale.getDefault();
+
+    private List<Locale.LanguageRange> languagePriorities = new ArrayList<>(  );
+
+    @PostConstruct
+    private void init() {
+        languagePriorities = Locale.LanguageRange.parse( "en,fr,de" );
+    }
+
     @Override
     public Configuration getConfiguration()
     {
@@ -341,8 +351,8 @@ public class DefaultArchivaConfiguration
             }
         }
 
-
-
+        this.defaultLocale = Locale.forLanguageTag( config.getArchivaRuntimeConfiguration().getDefaultLanguage() );
+        this.languagePriorities = Locale.LanguageRange.parse(config.getArchivaRuntimeConfiguration().getLanguageRange());
         return config;
     }
 
@@ -870,6 +880,18 @@ public class DefaultArchivaConfiguration
     }
 
     @Override
+    public Locale getDefaultLocale( )
+    {
+        return defaultLocale;
+    }
+
+    @Override
+    public List<Locale.LanguageRange> getLanguagePriorities( )
+    {
+        return languagePriorities;
+    }
+
+    @Override
     public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
     {
         // nothing to do here

http://git-wip-us.apache.org/repos/asf/archiva/blob/89f7aa34/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo b/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
index d5d96cd..b6acf53 100644
--- a/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
@@ -465,6 +465,7 @@
           <name>indexDir</name>
           <version>1.0.0+</version>
           <type>String</type>
+          <defaultValue></defaultValue>
           <description>
             The directory for the indexes of this repository.
           </description>
@@ -473,6 +474,7 @@
           <name>description</name>
           <version>1.0.0+</version>
           <type>String</type>
+          <defaultValue></defaultValue>
           <description>
             The description of this repository.
           </description>
@@ -1544,6 +1546,18 @@
           <type>String</type>
           <required>false</required>
         </field>
+        <field>
+          <name>defaultLanguage</name>
+          <type>String</type>
+          <version>3.0.0+</version>
+          <description>The default language used for setting internationalized strings.</description>
+        </field>
+        <field>
+          <name>languageRange</name>
+          <type>String</type>
+          <version>3.0.0+</version>
+          <description>Comma separated list of language patterns. Sorted by priority descending. Used for display of internationalized strings.</description>
+        </field>
       </fields>
     </class>
 


[21/21] archiva git commit: Adapting some plugins to the new repository api

Posted by ma...@apache.org.
Adapting some plugins to the new repository api


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/17f2989f
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/17f2989f
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/17f2989f

Branch: refs/heads/master
Commit: 17f2989fe13244ad4bb047e4764d4aecda40560a
Parents: e4941b4
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:40:05 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:40:05 2017 +0100

----------------------------------------------------------------------
 .../repository/cassandra/MockRepositoryStorage.java  |  2 +-
 .../consumers/DuplicateArtifactsConsumer.java        |  2 +-
 .../consumers/DuplicateArtifactsConsumerTest.java    | 11 ++++++-----
 .../archiva/configuration/StubConfiguration.java     | 15 +++++++++++++++
 4 files changed, 23 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/17f2989f/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/MockRepositoryStorage.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/MockRepositoryStorage.java b/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/MockRepositoryStorage.java
index e96be30..c09221f 100644
--- a/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/MockRepositoryStorage.java
+++ b/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/MockRepositoryStorage.java
@@ -112,7 +112,7 @@ public class MockRepositoryStorage
     }
 
     @Override
-    public String getFilePath( String requestPath, ManagedRepository managedRepository )
+    public String getFilePath( String requestPath, org.apache.archiva.repository.ManagedRepository managedRepository )
     {
         return null;
     }

http://git-wip-us.apache.org/repos/asf/archiva/blob/17f2989f/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java b/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java
index 0006f37..ae684b6 100644
--- a/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java
+++ b/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java
@@ -19,7 +19,6 @@ package org.apache.archiva.reports.consumers;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.checksum.ChecksumAlgorithm;
 import org.apache.archiva.checksum.ChecksummedFile;
 import org.apache.archiva.configuration.ArchivaConfiguration;
@@ -37,6 +36,7 @@ import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
 import org.apache.archiva.redback.components.registry.Registry;
 import org.apache.archiva.redback.components.registry.RegistryListener;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

http://git-wip-us.apache.org/repos/asf/archiva/blob/17f2989f/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java b/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java
index 7849536..49cc241 100644
--- a/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java
+++ b/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java
@@ -20,7 +20,6 @@ package org.apache.archiva.reports.consumers;
  */
 
 import junit.framework.TestCase;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.model.MetadataFacet;
@@ -29,6 +28,8 @@ import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
 import org.apache.archiva.metadata.model.facets.RepositoryProblemFacet;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.junit.Before;
 import org.junit.Test;
@@ -45,6 +46,7 @@ import java.nio.file.NoSuchFileException;
 import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.Date;
+import java.util.Locale;
 
 import static org.mockito.Mockito.*;
 
@@ -59,7 +61,7 @@ public class DuplicateArtifactsConsumerTest
     @Named( value = "knownRepositoryContentConsumer#duplicate-artifacts" )
     private DuplicateArtifactsConsumer consumer;
 
-    private ManagedRepository config;
+    private BasicManagedRepository config;
 
     private MetadataRepository metadataRepository;
 
@@ -95,9 +97,8 @@ public class DuplicateArtifactsConsumerTest
 
         assertNotNull( consumer );
 
-        config = new ManagedRepository();
-        config.setId( TEST_REPO );
-        config.setLocation( Paths.get( "target/test-repository" ).toAbsolutePath().toString() );
+        config = new BasicManagedRepository(TEST_REPO, TEST_REPO);
+        config.setLocation( Paths.get( "target/test-repository" ).toAbsolutePath().toUri() );
 
         metadataRepository = mock( MetadataRepository.class );
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/17f2989f/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java b/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java
index b4659ac..1709f19 100644
--- a/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java
+++ b/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java
@@ -23,6 +23,9 @@ import org.apache.archiva.redback.components.registry.RegistryException;
 import org.apache.archiva.redback.components.registry.RegistryListener;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Locale;
+
 @Service("archivaConfiguration#mocked")
 public class StubConfiguration
     implements ArchivaConfiguration
@@ -77,4 +80,16 @@ public class StubConfiguration
     {
         // no op
     }
+
+    @Override
+    public Locale getDefaultLocale( )
+    {
+        return Locale.getDefault();
+    }
+
+    @Override
+    public List<Locale.LanguageRange> getLanguagePriorities( )
+    {
+        return Locale.LanguageRange.parse( "en,fr,de" );
+    }
 }


[10/21] archiva git commit: Adapting consumers to new repository api interfaces.

Posted by ma...@apache.org.
Adapting consumers to new repository api interfaces.

Using the repository api where necessary.


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/4bcf4c0c
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/4bcf4c0c
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/4bcf4c0c

Branch: refs/heads/master
Commit: 4bcf4c0cd05220156cbba00be5408985f182805c
Parents: fd51964
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:33:06 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:33:06 2017 +0100

----------------------------------------------------------------------
 .../archiva-consumer-api/pom.xml                |   4 +
 .../consumers/RepositoryContentConsumer.java    |   4 +-
 .../functors/ConsumerWantsFilePredicate.java    |  20 +-
 .../src/main/java/SimpleArtifactConsumer.java   |   6 +-
 .../src/test/java/RepositoryProviderMock.java   | 231 +++++++++++++++++++
 .../test/java/SimpleArtifactConsumerTest.java   |  22 +-
 .../src/test/resources/spring-context.xml       |   9 +
 .../resourcesstatic/archetype-resources/pom.xml |   6 +
 .../core/ArtifactMissingChecksumsConsumer.java  |   2 +-
 .../consumers/core/AutoRemoveConsumer.java      |   2 +-
 .../consumers/core/AutoRenameConsumer.java      |   3 +-
 .../consumers/core/MetadataUpdaterConsumer.java |   2 +-
 .../core/ValidateChecksumConsumer.java          |   2 +-
 ...CleanupReleasedSnapshotsRepositoryPurge.java |  32 +--
 .../core/repository/DaysOldRepositoryPurge.java |   8 +-
 .../repository/RepositoryPurgeConsumer.java     |  53 +++--
 .../test/conf/repository-manager-daysOld.xml    |   2 +-
 .../ArtifactMissingChecksumsConsumerTest.java   |  26 ++-
 .../repository/AbstractRepositoryPurgeTest.java |  28 ++-
 ...nupReleasedSnapshotsRepositoryPurgeTest.java |  42 ++--
 .../repository/DaysOldRepositoryPurgeTest.java  |  23 +-
 .../repository/RepositoryPurgeConsumerTest.java |  61 ++---
 .../RetentionCountRepositoryPurgeTest.java      |   6 +-
 .../mock/ManagedRepositoryContentMock.java      | 181 +++++++++++++++
 .../mock/RemoteRepositoryContentMock.java       |  78 +++++++
 .../repository/mock/RepositoryProviderMock.java | 231 +++++++++++++++++++
 ...pring-context-cleanup-released-snapshots.xml |   5 +
 .../src/test/resources/spring-context.xml       |   1 +
 .../consumers/lucene/NexusIndexerConsumer.java  |  10 +-
 .../src/test/conf/repository-manager.xml        |   2 +-
 .../lucene/NexusIndexerConsumerTest.java        |  37 +--
 .../ArchivaMetadataCreationConsumer.java        |   2 +-
 32 files changed, 964 insertions(+), 177 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
index 598ffa1..4824291 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
@@ -38,6 +38,10 @@
       <artifactId>archiva-common</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-repository-layer</artifactId>
+    </dependency>
+    <dependency>
       <groupId>commons-collections</groupId>
       <artifactId>commons-collections</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/RepositoryContentConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/RepositoryContentConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/RepositoryContentConsumer.java
index c923f24..cfe937b 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/RepositoryContentConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/RepositoryContentConsumer.java
@@ -19,7 +19,7 @@ package org.apache.archiva.consumers;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.archiva.repository.ManagedRepository;
 
 import java.util.Date;
 import java.util.List;
@@ -60,7 +60,7 @@ public interface RepositoryContentConsumer
      * @param whenGathered the start of the repository scan
      * @throws ConsumerException if there was a problem with using the provided repository with the consumer.
      */
-    void beginScan( ManagedRepository repository, Date whenGathered )
+    void beginScan( org.apache.archiva.repository.ManagedRepository repository, Date whenGathered )
         throws ConsumerException;
 
     /**

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/functors/ConsumerWantsFilePredicate.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/functors/ConsumerWantsFilePredicate.java b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/functors/ConsumerWantsFilePredicate.java
index 07dc527..91f58ac 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/functors/ConsumerWantsFilePredicate.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/functors/ConsumerWantsFilePredicate.java
@@ -19,9 +19,11 @@ package org.apache.archiva.consumers.functors;
  * under the License.
  */
 
+import java.nio.file.Paths;
 import java.util.List;
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.commons.collections.Predicate;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.archiva.common.utils.BaseFile;
@@ -136,7 +138,21 @@ public class ConsumerWantsFilePredicate
 
         if ( managedRepository != null )
         {
-            String indexDirectory = managedRepository.getIndexDirectory();
+            String indexDirectory;
+            if (managedRepository.supportsFeature( IndexCreationFeature.class )) {
+                IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get();
+                if (icf.getIndexPath()==null) {
+                    indexDirectory=".index";
+                } else
+                {
+                    indexDirectory = ( icf.getIndexPath( ).getScheme( ) == null ? Paths.get( icf.getIndexPath( ).getPath( ) ) : Paths.get( icf.getIndexPath( ) ) ).toString( );
+                }
+            } else {
+                indexDirectory = ".index";
+            }
+            if (StringUtils.isEmpty( indexDirectory )) {
+                indexDirectory = ".index";
+            }
             if ( StringUtils.startsWith( relativePath, indexDirectory ) )
             {
                 logger.debug( "ignore file {} part of the index directory {}", relativePath, indexDirectory );

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/main/java/SimpleArtifactConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/main/java/SimpleArtifactConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/main/java/SimpleArtifactConsumer.java
index 9c9a41e..59ca6b0 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/main/java/SimpleArtifactConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/main/java/SimpleArtifactConsumer.java
@@ -47,7 +47,7 @@ import javax.inject.Named;
 
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Service;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.archiva.repository.ManagedRepository;
 
 /**
  * <code>SimpleArtifactConsumer</code>
@@ -119,13 +119,13 @@ public class SimpleArtifactConsumer
 
         try
         {
-            ManagedRepositoryContent repositoryContent = repositoryContentFactory.getManagedRepositoryContent( repository.getId() );
+            ManagedRepositoryContent repositoryContent = repository.getContent();
             ArtifactReference artifact = repositoryContent.toArtifactReference( path );
 
             repositorySession.getRepository().getArtifacts( repository.getId(), artifact.getGroupId(),
                                                             artifact.getArtifactId(), artifact.getVersion() );
         }
-        catch ( RepositoryException | LayoutException | MetadataResolutionException e )
+        catch ( LayoutException | MetadataResolutionException e )
         {
             throw new ConsumerException( e.getLocalizedMessage(), e );
         }

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/RepositoryProviderMock.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/RepositoryProviderMock.java b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/RepositoryProviderMock.java
new file mode 100644
index 0000000..55151f3
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/RepositoryProviderMock.java
@@ -0,0 +1,231 @@
+package $package;
+
+/*
+ * 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.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.BasicRemoteRepository;
+import org.apache.archiva.repository.EditableManagedRepository;
+import org.apache.archiva.repository.EditableRemoteRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryCredentials;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryProvider;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
+import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import org.springframework.stereotype.Service;
+
+import java.net.URI;
+import java.time.Duration;
+import java.time.Period;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Just a simple mock class for the repository provider
+ */
+@Service("mockRepositoryProvider")
+public class RepositoryProviderMock implements RepositoryProvider
+{
+
+    private static final Set<RepositoryType> TYPES = new HashSet<>( );
+
+    static
+    {
+        TYPES.add( RepositoryType.MAVEN );
+        TYPES.add( RepositoryType.NPM );
+    }
+
+    @Override
+    public Set<RepositoryType> provides( )
+    {
+        return TYPES;
+    }
+
+    @Override
+    public EditableManagedRepository createManagedInstance( String id, String name )
+    {
+        return new BasicManagedRepository( id, name );
+    }
+
+    @Override
+    public EditableRemoteRepository createRemoteInstance( String id, String name )
+    {
+        return new BasicRemoteRepository( id, name );
+    }
+
+    @Override
+    public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        BasicManagedRepository managedRepository = new BasicManagedRepository( configuration.getId( ), configuration.getName( ) );
+        updateManagedInstance( managedRepository, configuration );
+        return managedRepository;
+    }
+
+
+    @Override
+    public void updateManagedInstance( EditableManagedRepository managedRepository, ManagedRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        try
+        {
+            managedRepository.setName( managedRepository.getPrimaryLocale(), configuration.getName( ) );
+            managedRepository.setLocation( new URI( configuration.getLocation( )==null ?"" : configuration.getLocation() ) );
+            managedRepository.setBaseUri( new URI( "" ) );
+            managedRepository.setBlocksRedeployment( configuration.isBlockRedeployments( ) );
+            managedRepository.setDescription( managedRepository.getPrimaryLocale(), configuration.getDescription( ) );
+            managedRepository.setLayout( configuration.getLayout( ) );
+            managedRepository.setScanned( configuration.isScanned( ) );
+            managedRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
+            if (configuration.isReleases()) {
+                managedRepository.addActiveReleaseScheme( ReleaseScheme.RELEASE );
+            }
+            if (configuration.isSnapshots()) {
+                managedRepository.addActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
+            }
+            ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
+            acf.setRetentionPeriod( Period.ofDays( configuration.getRetentionPeriod( ) ) );
+            acf.setDeleteReleasedSnapshots( configuration.isDeleteReleasedSnapshots( ) );
+            acf.setRetentionCount( configuration.getRetentionCount( ) );
+            IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
+            icf.setIndexPath( new URI( configuration.getIndexDir( ) ) );
+            icf.setSkipPackedIndexCreation( configuration.isSkipPackedIndexCreation( ) );
+            StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
+            srf.setStageRepoNeeded( configuration.isStageRepoNeeded( ) );
+        }
+        catch ( Exception e )
+        {
+            throw new RepositoryException( "Error", e );
+        }
+
+    }
+
+
+    @Override
+    public ManagedRepository createStagingInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        String id = configuration.getId( ) + StagingRepositoryFeature.STAGING_REPO_POSTFIX;
+        BasicManagedRepository managedRepository = new BasicManagedRepository( id, configuration.getName( ) );
+        updateManagedInstance( managedRepository, configuration );
+        return managedRepository;
+    }
+
+    @Override
+    public RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        BasicRemoteRepository remoteRepository = new BasicRemoteRepository( configuration.getId( ), configuration.getName( ) );
+        updateRemoteInstance( remoteRepository, configuration );
+        return remoteRepository;
+    }
+
+    @Override
+    public void updateRemoteInstance( EditableRemoteRepository remoteRepository, RemoteRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        try
+        {
+            remoteRepository.setName( remoteRepository.getPrimaryLocale(), configuration.getName( ) );
+            remoteRepository.setBaseUri( new URI( "" ) );
+            remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), configuration.getDescription( ) );
+            remoteRepository.setLayout( configuration.getLayout( ) );
+            remoteRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
+            remoteRepository.setCheckPath( configuration.getCheckPath( ) );
+            remoteRepository.setExtraHeaders( configuration.getExtraHeaders( ) );
+            remoteRepository.setExtraParameters( configuration.getExtraParameters( ) );
+            remoteRepository.setTimeout( Duration.ofSeconds( configuration.getTimeout( ) ) );
+            char[] pwd = configuration.getPassword()==null ? "".toCharArray() : configuration.getPassword().toCharArray();
+            remoteRepository.setCredentials( new PasswordCredentials( configuration.getUsername( ), pwd ) );
+            remoteRepository.setLocation( new URI( configuration.getUrl( )==null ? "" : configuration.getUrl() ) );
+            RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
+            rif.setDownloadRemoteIndexOnStartup( configuration.isDownloadRemoteIndexOnStartup( ) );
+            rif.setDownloadRemoteIndex( configuration.isDownloadRemoteIndex( ) );
+            rif.setIndexUri( new URI( configuration.getIndexDir( ) ) );
+            rif.setDownloadTimeout( Duration.ofSeconds( configuration.getRemoteDownloadTimeout( ) ) );
+            rif.setProxyId( configuration.getRemoteDownloadNetworkProxyId( ) );
+        }
+        catch ( Exception e )
+        {
+            throw new RepositoryException( "Error", e );
+        }
+
+    }
+
+    @Override
+    public ManagedRepositoryConfiguration getManagedConfiguration( ManagedRepository managedRepository ) throws RepositoryException
+    {
+        ManagedRepositoryConfiguration configuration = new ManagedRepositoryConfiguration( );
+        configuration.setId( managedRepository.getId( ) );
+        configuration.setName(managedRepository.getName());
+        configuration.setLocation( managedRepository.getLocation( ) == null ? "" : managedRepository.getLocation().toString( ) );
+        configuration.setBlockRedeployments( managedRepository.blocksRedeployments( ) );
+        configuration.setDescription( managedRepository.getDescription( ) );
+        configuration.setLayout( managedRepository.getLayout( ) );
+        configuration.setScanned( managedRepository.isScanned( ) );
+        configuration.setRefreshCronExpression( managedRepository.getSchedulingDefinition( ) );
+        configuration.setReleases( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE) );
+        configuration.setSnapshots( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT) );
+        ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
+        configuration.setRetentionPeriod( acf.getRetentionPeriod( ).getDays( ) );
+        configuration.setDeleteReleasedSnapshots( acf.isDeleteReleasedSnapshots( ) );
+        configuration.setRetentionCount( acf.getRetentionCount( ) );
+        IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
+        configuration.setSkipPackedIndexCreation( icf.isSkipPackedIndexCreation( ) );
+        configuration.setIndexDir( icf.getIndexPath( ) == null ? "" : icf.getIndexPath().toString( ) );
+        StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
+        configuration.setStageRepoNeeded( srf.isStageRepoNeeded( ) );
+        return configuration;
+    }
+
+
+    @Override
+    public RemoteRepositoryConfiguration getRemoteConfiguration( RemoteRepository remoteRepository ) throws RepositoryException
+    {
+        RemoteRepositoryConfiguration configuration = new RemoteRepositoryConfiguration( );
+        configuration.setId( remoteRepository.getId( ) );
+        configuration.setName( remoteRepository.getName( ) );
+        configuration.setDescription( remoteRepository.getDescription( ) );
+        configuration.setLayout( remoteRepository.getLayout( ) );
+        configuration.setRefreshCronExpression( remoteRepository.getSchedulingDefinition( ) );
+        configuration.setCheckPath( remoteRepository.getCheckPath( ) );
+        configuration.setExtraHeaders( remoteRepository.getExtraHeaders( ) );
+        configuration.setExtraParameters( remoteRepository.getExtraParameters( ) );
+        configuration.setTimeout( (int) remoteRepository.getTimeout( ).getSeconds( ) );
+        RepositoryCredentials creds = remoteRepository.getLoginCredentials( );
+        if (creds!=null)
+        {
+            PasswordCredentials pwdCreds = (PasswordCredentials) creds;
+            configuration.setUsername( pwdCreds.getUsername( ) );
+            configuration.setPassword( new String( pwdCreds.getPassword( ) ) );
+        }
+        configuration.setUrl( remoteRepository.getLocation( ) == null ? "" : remoteRepository.getLocation().toString( ) );
+        RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
+        configuration.setDownloadRemoteIndex( rif.isDownloadRemoteIndex( ) );
+        configuration.setDownloadRemoteIndexOnStartup( rif.isDownloadRemoteIndexOnStartup( ) );
+        configuration.setIndexDir( rif.getIndexUri( )==null ? "" : rif.getIndexUri().toString( ) );
+        configuration.setRemoteDownloadNetworkProxyId( rif.getProxyId( ) );
+        return configuration;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/SimpleArtifactConsumerTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/SimpleArtifactConsumerTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/SimpleArtifactConsumerTest.java
index b3150df..68d03a8 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/SimpleArtifactConsumerTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/java/SimpleArtifactConsumerTest.java
@@ -20,7 +20,10 @@ package $package;
  */
 
 import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.RepositoryException;
 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.RepositorySession;
@@ -56,9 +59,12 @@ public class SimpleArtifactConsumerTest
     private ManagedRepositoryAdmin managedRepositoryAdmin;
 
     @Inject
+    private RepositoryRegistry repositoryRegistry;
+
+    @Inject
     private RepositorySessionFactory repositorySessionFactory;
 
-    private ManagedRepository testRepository;
+    private BasicManagedRepository testRepository;
 
     private Logger log = LoggerFactory.getLogger( SimpleArtifactConsumer.class );
 
@@ -72,18 +78,18 @@ public class SimpleArtifactConsumerTest
     }
 
     private void setUpMockRepository()
-        throws RepositoryAdminException, IOException
+        throws RepositoryAdminException, IOException, RepositoryException
     {
         Path repoDir = Paths.get( "target/test-consumer-repo" );
         Files.createDirectories( repoDir );
         repoDir.toFile().deleteOnExit();
 
-        testRepository = new ManagedRepository();
-        testRepository.setName( "Test-Consumer-Repository" );
-        testRepository.setId( "test-consumer-repository" );
-        testRepository.setLocation( repoDir.toAbsolutePath().toString() );
+        testRepository = new BasicManagedRepository("test-consumer-repository","Test-Consumer-Repository" );
+        testRepository.setLocation( repoDir.toAbsolutePath().toUri() );
+
+        repositoryRegistry.putRepository(testRepository);
 
-        when( managedRepositoryAdmin.getManagedRepository( testRepository.getId() ) ).thenReturn( testRepository );
+        // when( repositoryRegistry.getManagedRepository( testRepository.getId() ) ).thenReturn( testRepository );
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/resources/spring-context.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/resources/spring-context.xml
index cd75577..b5ff215 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/resources/spring-context.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/test/resources/spring-context.xml
@@ -20,15 +20,24 @@
   -->
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:mockito="http://www.mockito.org/spring/mockito"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+           http://www.springframework.org/schema/context
+           http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.mockito.org/spring/mockito http://www.mockito.org/spring/mockito.xsd"
        default-lazy-init="true">
 
   <mockito:mock id="mockManagedRepositoryAdmin" class="org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin" />
   <mockito:mock id="mockRemoteRepositoryAdmin" class="org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin" />
 
+  <context:component-scan base-package="org.apache.archiva.repository.mock,org.apache.archiva.repository.content.maven2,$package"/>
+
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
+  <alias name="mockRepositoryProvider" alias="mavenRepositoryProvider" />
+
   <alias alias="repositorySessionFactory#jcr" name="repositorySessionFactory#file" />
 
   <bean name="proxyConnectorAdmin#mock" class="org.apache.archiva.mock.MockProxyConnectorAdmin"/>

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resourcesstatic/archetype-resources/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resourcesstatic/archetype-resources/pom.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resourcesstatic/archetype-resources/pom.xml
index c66cdab..56016ea 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resourcesstatic/archetype-resources/pom.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resourcesstatic/archetype-resources/pom.xml
@@ -251,6 +251,12 @@
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
           <version>2.20</version>
+          <configuration>
+          <systemPropertyVariables>
+          <appserver.base>${project.build.directory}/appserver-base</appserver.base>
+          </systemPropertyVariables>
+          </configuration>
+
         </plugin>
       </plugins>
     </pluginManagement>

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
index c99ab4b..0cc3aa5 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
@@ -19,7 +19,6 @@ package org.apache.archiva.consumers.core;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.checksum.ChecksumAlgorithm;
 import org.apache.archiva.checksum.ChecksummedFile;
 import org.apache.archiva.configuration.ArchivaConfiguration;
@@ -27,6 +26,7 @@ import org.apache.archiva.configuration.FileTypes;
 import org.apache.archiva.consumers.AbstractMonitoredConsumer;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
+import org.apache.archiva.repository.ManagedRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Scope;

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/AutoRemoveConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/AutoRemoveConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/AutoRemoveConsumer.java
index e7aa8cb..15013c6 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/AutoRemoveConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/AutoRemoveConsumer.java
@@ -19,7 +19,6 @@ package org.apache.archiva.consumers.core;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.ConfigurationNames;
 import org.apache.archiva.configuration.FileTypes;
@@ -28,6 +27,7 @@ import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.archiva.redback.components.registry.Registry;
 import org.apache.archiva.redback.components.registry.RegistryListener;
+import org.apache.archiva.repository.ManagedRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Scope;

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/AutoRenameConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/AutoRenameConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/AutoRenameConsumer.java
index 1317682..3f064ed 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/AutoRenameConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/AutoRenameConsumer.java
@@ -19,11 +19,10 @@ package org.apache.archiva.consumers.core;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.consumers.AbstractMonitoredConsumer;
-import org.apache.archiva.consumers.Consumer;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/MetadataUpdaterConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/MetadataUpdaterConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/MetadataUpdaterConsumer.java
index 263e042..33da786 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/MetadataUpdaterConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/MetadataUpdaterConsumer.java
@@ -19,7 +19,6 @@ package org.apache.archiva.consumers.core;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.FileTypes;
 import org.apache.archiva.consumers.AbstractMonitoredConsumer;
@@ -29,6 +28,7 @@ import org.apache.archiva.model.ArtifactReference;
 import org.apache.archiva.model.ProjectReference;
 import org.apache.archiva.model.VersionedReference;
 import org.apache.archiva.repository.ContentNotFoundException;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.RepositoryContentFactory;
 import org.apache.archiva.repository.RepositoryException;

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ValidateChecksumConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ValidateChecksumConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ValidateChecksumConsumer.java
index e0d8021..6e60bc5 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ValidateChecksumConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ValidateChecksumConsumer.java
@@ -19,13 +19,13 @@ package org.apache.archiva.consumers.core;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.common.plexusbridge.DigesterUtils;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
 import org.apache.archiva.consumers.AbstractMonitoredConsumer;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
+import org.apache.archiva.repository.ManagedRepository;
 import org.codehaus.plexus.digest.ChecksumFile;
 import org.codehaus.plexus.digest.Digester;
 import org.codehaus.plexus.digest.DigesterException;

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
index 9728027..181cbf4 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
@@ -32,19 +32,23 @@ import org.apache.archiva.model.ProjectReference;
 import org.apache.archiva.model.VersionedReference;
 import org.apache.archiva.repository.ContentNotFoundException;
 import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.ReleaseScheme;
 import org.apache.archiva.repository.RepositoryContentFactory;
 import org.apache.archiva.repository.RepositoryException;
 import org.apache.archiva.repository.RepositoryNotFoundException;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.events.RepositoryListener;
 import org.apache.archiva.repository.layout.LayoutException;
 import org.apache.archiva.repository.metadata.MetadataTools;
 import org.apache.archiva.repository.metadata.RepositoryMetadataException;
 
+import javax.inject.Inject;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
@@ -73,20 +77,16 @@ public class CleanupReleasedSnapshotsRepositoryPurge
 {
     private MetadataTools metadataTools;
 
-    private ManagedRepositoryAdmin managedRepositoryAdmin;
-
-    private RepositoryContentFactory repoContentFactory;
+    private RepositoryRegistry repositoryRegistry;
 
     public CleanupReleasedSnapshotsRepositoryPurge( ManagedRepositoryContent repository, MetadataTools metadataTools,
-                                                    ManagedRepositoryAdmin managedRepositoryAdmin,
-                                                    RepositoryContentFactory repoContentFactory,
+                                                    RepositoryRegistry repositoryRegistry,
                                                     RepositorySession repositorySession,
                                                     List<RepositoryListener> listeners )
     {
         super( repository, repositorySession, listeners );
         this.metadataTools = metadataTools;
-        this.managedRepositoryAdmin = managedRepositoryAdmin;
-        this.repoContentFactory = repoContentFactory;
+        this.repositoryRegistry = repositoryRegistry;
     }
 
     @Override
@@ -118,15 +118,15 @@ public class CleanupReleasedSnapshotsRepositoryPurge
             // Gether the released versions
             List<String> releasedVersions = new ArrayList<>( );
 
-            List<ManagedRepository> repos = managedRepositoryAdmin.getManagedRepositories( );
-            for ( ManagedRepository repo : repos )
+            Collection<org.apache.archiva.repository.ManagedRepository> repos = repositoryRegistry.getManagedRepositories( );
+            for ( org.apache.archiva.repository.ManagedRepository repo : repos )
             {
-                if ( repo.isReleases( ) )
+
+                if ( repo.getActiveReleaseSchemes().contains( ReleaseScheme.RELEASE ))
                 {
                     try
                     {
-                        ManagedRepositoryContent repoContent =
-                            repoContentFactory.getManagedRepositoryContent( repo.getId( ) );
+                        ManagedRepositoryContent repoContent = repo.getContent();
                         for ( String version : repoContent.getVersions( reference ) )
                         {
                             if ( !VersionUtil.isSnapshot( version ) )
@@ -135,10 +135,6 @@ public class CleanupReleasedSnapshotsRepositoryPurge
                             }
                         }
                     }
-                    catch ( RepositoryNotFoundException e )
-                    {
-                        // swallow
-                    }
                     catch ( RepositoryException e )
                     {
                         // swallow
@@ -179,10 +175,6 @@ public class CleanupReleasedSnapshotsRepositoryPurge
                 updateMetadata( artifactRef );
             }
         }
-        catch ( RepositoryAdminException e )
-        {
-            throw new RepositoryPurgeException( e.getMessage( ), e );
-        }
         catch ( LayoutException e )
         {
             log.debug( "Not processing file that is not an artifact: {}", e.getMessage( ) );

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurge.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
index 8687313..73fc456 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
@@ -53,15 +53,15 @@ public class DaysOldRepositoryPurge
 {
     private SimpleDateFormat timestampParser;
 
-    private int retentionTime;
+    private int retentionPeriod;
 
     private int retentionCount;
 
-    public DaysOldRepositoryPurge( ManagedRepositoryContent repository, int retentionTime, int retentionCount,
+    public DaysOldRepositoryPurge( ManagedRepositoryContent repository, int retentionPeriod, int retentionCount,
                                    RepositorySession repositorySession, List<RepositoryListener> listeners )
     {
         super( repository, repositorySession, listeners );
-        this.retentionTime = retentionTime;
+        this.retentionPeriod = retentionPeriod;
         this.retentionCount = retentionCount;
         timestampParser = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
         timestampParser.setTimeZone( DateUtils.UTC_TIME_ZONE );
@@ -83,7 +83,7 @@ public class DaysOldRepositoryPurge
             ArtifactReference artifact = repository.toArtifactReference( path );
 
             Calendar olderThanThisDate = Calendar.getInstance( DateUtils.UTC_TIME_ZONE );
-            olderThanThisDate.add( Calendar.DATE, -retentionTime );
+            olderThanThisDate.add( Calendar.DATE, -retentionPeriod );
 
             // respect retention count
             VersionedReference reference = new VersionedReference( );

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
index f761bfc..d869666 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
@@ -19,7 +19,6 @@ package org.apache.archiva.consumers.core.repository;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.ConfigurationNames;
@@ -31,11 +30,14 @@ import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.apache.archiva.redback.components.registry.Registry;
 import org.apache.archiva.redback.components.registry.RegistryListener;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.RepositoryContentFactory;
 import org.apache.archiva.repository.RepositoryException;
 import org.apache.archiva.repository.RepositoryNotFoundException;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.events.RepositoryListener;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.repository.metadata.MetadataTools;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
@@ -77,6 +79,9 @@ public class RepositoryPurgeConsumer
     private ManagedRepositoryAdmin managedRepositoryAdmin;
 
     @Inject
+    private RepositoryRegistry repositoryRegistry;
+
+    @Inject
     @Named( value = "repositoryContentFactory#default" )
     private RepositoryContentFactory repositoryContentFactory;
 
@@ -136,37 +141,35 @@ public class RepositoryPurgeConsumer
         throws ConsumerException
     {
         ManagedRepositoryContent repositoryContent;
-        try
-        {
-            repositoryContent = repositoryContentFactory.getManagedRepositoryContent( repository.getId( ) );
-        }
-        catch ( RepositoryNotFoundException e )
-        {
-            throw new ConsumerException( "Can't run repository purge: " + e.getMessage( ), e );
-        }
-        catch ( RepositoryException e )
-        {
-            throw new ConsumerException( "Can't run repository purge: " + e.getMessage( ), e );
-        }
+        repositoryContent = repository.getContent();
 
         repositorySession = repositorySessionFactory.createSession( );
 
-        if ( repository.getDaysOlder( ) != 0 )
-        {
-            repoPurge = new DaysOldRepositoryPurge( repositoryContent, repository.getDaysOlder( ),
-                repository.getRetentionCount( ), repositorySession, listeners );
-        }
-        else
+        if (repository.supportsFeature( ArtifactCleanupFeature.class ))
         {
-            repoPurge =
-                new RetentionCountRepositoryPurge( repositoryContent, repository.getRetentionCount( ), repositorySession,
-                    listeners );
+            ArtifactCleanupFeature acf = repository.getFeature( ArtifactCleanupFeature.class ).get();
+            int retentionPeriodInDays = acf.getRetentionPeriod( ).getDays( );
+            int retentionCount = acf.getRetentionCount();
+            if ( retentionPeriodInDays != 0 )
+            {
+                repoPurge = new DaysOldRepositoryPurge( repositoryContent, retentionPeriodInDays,
+                    retentionCount, repositorySession, listeners );
+            }
+            else
+            {
+                repoPurge =
+                    new RetentionCountRepositoryPurge( repositoryContent, retentionCount, repositorySession,
+                        listeners );
+            }
+            deleteReleasedSnapshots = acf.isDeleteReleasedSnapshots( );
+        } else {
+            throw new ConsumerException( "The repository does not support the ArtifactCleanup feature "+repository.getId() );
         }
 
-        cleanUp = new CleanupReleasedSnapshotsRepositoryPurge( repositoryContent, metadataTools, managedRepositoryAdmin,
-            repositoryContentFactory, repositorySession, listeners );
 
-        deleteReleasedSnapshots = repository.isDeleteReleasedSnapshots( );
+        cleanUp = new CleanupReleasedSnapshotsRepositoryPurge( repositoryContent, metadataTools, repositoryRegistry,
+            repositorySession, listeners );
+
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/conf/repository-manager-daysOld.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/conf/repository-manager-daysOld.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/conf/repository-manager-daysOld.xml
index 6b1779c..4b0a142 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/conf/repository-manager-daysOld.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/conf/repository-manager-daysOld.xml
@@ -68,7 +68,7 @@
       <snapshots>true</snapshots>
       <indexed>true</indexed>
       <refreshCronExpression>0 0 * * * ?</refreshCronExpression>
-      <retentionTime>100</retentionTime>
+      <retentionPeriod>100</retentionPeriod>
       <deleteReleasedSnapshots>true</deleteReleasedSnapshots>
     </repository>
   </repositories>

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumerTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumerTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumerTest.java
index 4e2e664..1ad70c3 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumerTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumerTest.java
@@ -1,9 +1,11 @@
 package org.apache.archiva.consumers.core;
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.checksum.ChecksumAlgorithm;
 import org.apache.archiva.checksum.ChecksummedFile;
+import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.EditableManagedRepository;
 import org.apache.commons.io.FileUtils;
 import org.assertj.core.api.Assertions;
 import org.junit.Before;
@@ -36,7 +38,7 @@ import java.util.Calendar;
 public class ArtifactMissingChecksumsConsumerTest
     extends AbstractArtifactConsumerTest
 {
-    private ManagedRepository repoConfig;
+    private EditableManagedRepository repoConfig;
 
     @Before
     @Override
@@ -45,11 +47,9 @@ public class ArtifactMissingChecksumsConsumerTest
     {
         super.setUp();
 
-        repoConfig = new ManagedRepository();
-        repoConfig.setId( "test-repo" );
-        repoConfig.setName( "Test Repository" );
+        repoConfig = new BasicManagedRepository( "test-repo", "Test Repository");
         repoConfig.setLayout( "default" );
-        repoConfig.setLocation( Paths.get( "target/test-classes/test-repo/" ).toString() );
+        repoConfig.setLocation( Paths.get( "target/test-classes/test-repo/" ).toUri() );
 
         consumer = applicationContext.getBean( "knownRepositoryContentConsumer#create-missing-checksums",
                                                KnownRepositoryContentConsumer.class );
@@ -61,8 +61,9 @@ public class ArtifactMissingChecksumsConsumerTest
     {
         String path = "no-checksums-artifact/1.0/no-checksums-artifact-1.0.jar";
 
-        Path sha1Path = Paths.get( repoConfig.getLocation(), path + ".sha1" );
-        Path md5FilePath = Paths.get( repoConfig.getLocation(), path + ".md5" );
+        Path basePath = PathUtil.getPathFromUri( repoConfig.getLocation() );
+        Path sha1Path = basePath.resolve(path + ".sha1" );
+        Path md5FilePath = basePath.resolve(path + ".md5" );
 
         Files.deleteIfExists( sha1Path );
         Files.deleteIfExists( md5FilePath );
@@ -96,15 +97,16 @@ public class ArtifactMissingChecksumsConsumerTest
         Path newLocation = Paths.get( "target/test-repo" );
         org.apache.archiva.common.utils.FileUtils.deleteDirectory( newLocation );
         FileUtils.copyDirectory( Paths.get(repoConfig.getLocation() ).toFile(), newLocation.toFile() );
-        repoConfig.setLocation( newLocation.toAbsolutePath().toString() );
+        repoConfig.setLocation( newLocation.toAbsolutePath().toUri() );
+        Path basePath = PathUtil.getPathFromUri( repoConfig.getLocation() );
 
         String path = "incorrect-checksums/1.0/incorrect-checksums-1.0.jar";
 
-        Path sha1Path = Paths.get( repoConfig.getLocation(), path + ".sha1" );
+        Path sha1Path = basePath.resolve( path + ".sha1" );
 
-        Path md5Path = Paths.get( repoConfig.getLocation(), path + ".md5" );
+        Path md5Path = basePath.resolve( path + ".md5" );
 
-        ChecksummedFile checksum = new ChecksummedFile( Paths.get(repoConfig.getLocation(), path ) );
+        ChecksummedFile checksum = new ChecksummedFile( basePath.resolve( path ) );
 
         Assertions.assertThat( sha1Path.toFile() ).exists();
         Assertions.assertThat( md5Path.toFile() ).exists();

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java
index e3fee94..b0e9a98 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java
@@ -24,8 +24,11 @@ import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.storage.maven2.Maven2RepositoryPathTranslator;
+import org.apache.archiva.repository.BasicManagedRepository;
 import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.ReleaseScheme;
 import org.apache.archiva.repository.events.RepositoryListener;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
@@ -42,11 +45,15 @@ import org.springframework.test.context.ContextConfiguration;
 
 import javax.inject.Inject;
 import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.time.Period;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 import java.util.stream.Collectors;
 
 import static org.junit.Assert.assertFalse;
@@ -87,7 +94,7 @@ public abstract class AbstractRepositoryPurgeTest
 
     protected static final String RELEASES_TEST_REPO_NAME = "Releases Test Repo One";
 
-    private ManagedRepository config;
+    private BasicManagedRepository config;
 
     private ManagedRepositoryContent repo;
 
@@ -156,19 +163,18 @@ public abstract class AbstractRepositoryPurgeTest
         return path;
     }
 
-    public ManagedRepository getRepoConfiguration( String repoId, String repoName )
+    public org.apache.archiva.repository.ManagedRepository getRepoConfiguration( String repoId, String repoName ) throws URISyntaxException
     {
-        config = new ManagedRepository();
-        config.setId( repoId );
-        config.setName( repoName );
-        config.setDaysOlder( TEST_DAYS_OLDER );
+        config = new BasicManagedRepository( repoId, repoName);
+        config.addActiveReleaseScheme( ReleaseScheme.RELEASE );
+        config.addActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
+        ArtifactCleanupFeature atf = config.getFeature( ArtifactCleanupFeature.class ).get();
+        atf.setRetentionPeriod( Period.ofDays( TEST_DAYS_OLDER) );
         String path = AbstractRepositoryPurgeTest.fixPath(
             Paths.get( "target/test-" + getName() + "/" + repoId ).toAbsolutePath().toString() );
-        config.setLocation( path );
-        config.setReleases( true );
-        config.setSnapshots( true );
-        config.setDeleteReleasedSnapshots( true );
-        config.setRetentionCount( TEST_RETENTION_COUNT );
+        config.setLocation( new URI( path ) );
+        atf.setDeleteReleasedSnapshots( true );
+        atf.setRetentionCount( TEST_RETENTION_COUNT );
 
         return config;
     }

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
index 0b57515..a289734 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
@@ -24,10 +24,11 @@ import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.model.MetadataFacet;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.RepositoryContentFactory;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.events.RepositoryListener;
 import org.apache.archiva.repository.metadata.MetadataTools;
-import org.apache.commons.io.FileUtils;
 import org.custommonkey.xmlunit.XMLAssert;
 import org.easymock.EasyMock;
 import org.junit.Before;
@@ -92,7 +93,7 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
         List<RepositoryListener> listeners = Collections.singletonList( listener );
         repoPurge = new CleanupReleasedSnapshotsRepositoryPurge( getRepository(), metadataTools,
                                                                  applicationContext.getBean(
-                                                                     ManagedRepositoryAdmin.class ), factory,
+                                                                     RepositoryRegistry.class ),
                                                                  repositorySession, listeners );
 
         ( (DefaultManagedRepositoryAdmin) applicationContext.getBean(
@@ -104,9 +105,11 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
     public void testReleasedSnapshotsExistsInSameRepo()
         throws Exception
     {
-        applicationContext.getBean( ManagedRepositoryAdmin.class ).deleteManagedRepository( TEST_REPO_ID, null, true );
-        applicationContext.getBean( ManagedRepositoryAdmin.class ).addManagedRepository(
-            getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ), false, null );
+        RepositoryRegistry repositoryRegistry = applicationContext.getBean( RepositoryRegistry.class );
+        ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( TEST_REPO_ID );
+        repositoryRegistry.removeRepository( managedRepository );
+        repositoryRegistry.putRepository(
+            getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ));
 
         String repoRoot = prepareTestRepos();
         String projectNs = "org.apache.maven.plugins";
@@ -180,9 +183,11 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
         throws Exception
     {
 
-        applicationContext.getBean( ManagedRepositoryAdmin.class ).deleteManagedRepository( TEST_REPO_ID, null, false );
-        applicationContext.getBean( ManagedRepositoryAdmin.class ).addManagedRepository(
-            getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ), false, null );
+        RepositoryRegistry repositoryRegistry = applicationContext.getBean(RepositoryRegistry.class);
+        ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( TEST_REPO_ID );
+        repositoryRegistry.removeRepository( managedRepository );
+        repositoryRegistry.putRepository(
+            getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ));
 
         String repoRoot = prepareTestRepos();
 
@@ -210,12 +215,15 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
         throws Exception
     {
 
-        applicationContext.getBean( ManagedRepositoryAdmin.class ).deleteManagedRepository( TEST_REPO_ID, null, false );
-        applicationContext.getBean( ManagedRepositoryAdmin.class ).addManagedRepository(
-            getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ), false, null );
+        RepositoryRegistry repositoryRegistry = applicationContext.getBean(RepositoryRegistry.class);
+        ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( TEST_REPO_ID );
+        repositoryRegistry.removeRepository( managedRepository );
+        repositoryRegistry.putRepository(
+            getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ));
 
-        applicationContext.getBean( ManagedRepositoryAdmin.class ).addManagedRepository(
-            getRepoConfiguration( RELEASES_TEST_REPO_ID, RELEASES_TEST_REPO_NAME ), false, null );
+
+        repositoryRegistry.putRepository(
+            getRepoConfiguration( RELEASES_TEST_REPO_ID, RELEASES_TEST_REPO_NAME ));
 
         String repoRoot = prepareTestRepos();
         String projectNs = "org.apache.archiva";
@@ -288,9 +296,11 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
         throws Exception
     {
 
-        applicationContext.getBean( ManagedRepositoryAdmin.class ).deleteManagedRepository( TEST_REPO_ID, null, false );
-        applicationContext.getBean( ManagedRepositoryAdmin.class ).addManagedRepository(
-            getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ), false, null );
+        RepositoryRegistry repositoryRegistry = applicationContext.getBean(RepositoryRegistry.class);
+        ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( TEST_REPO_ID );
+        repositoryRegistry.removeRepository( managedRepository );
+        repositoryRegistry.putRepository(
+            getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ));
 
         String repoRoot = prepareTestRepos();
         String projectNs = "org.apache.maven.plugins";

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
index 1d4ddeb..3c70837 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
@@ -19,9 +19,9 @@ package org.apache.archiva.consumers.core.repository;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.repository.events.RepositoryListener;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.commons.lang.time.DateUtils;
 import org.junit.After;
 import org.junit.Test;
@@ -73,9 +73,10 @@ public class DaysOldRepositoryPurgeTest
     public void testByLastModified()
         throws Exception
     {
-        ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
-        repoPurge = new DaysOldRepositoryPurge( getRepository(), repoConfiguration.getDaysOlder(),
-                                                repoConfiguration.getRetentionCount(), repositorySession,
+        org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
+        ArtifactCleanupFeature atf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get();
+        repoPurge = new DaysOldRepositoryPurge( getRepository(), atf.getRetentionPeriod().getDays(),
+                                                atf.getRetentionCount(), repositorySession,
                                                 Collections.singletonList( listener ) );
 
         String repoRoot = prepareTestRepos();
@@ -163,10 +164,11 @@ public class DaysOldRepositoryPurgeTest
     public void testOrderOfDeletion()
         throws Exception
     {
-        ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
+        org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
+        ArtifactCleanupFeature atf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get();
         List<RepositoryListener> listeners = Collections.singletonList( listener );
-        repoPurge = new DaysOldRepositoryPurge( getRepository(), repoConfiguration.getDaysOlder(),
-                                                repoConfiguration.getRetentionCount(), repositorySession, listeners );
+        repoPurge = new DaysOldRepositoryPurge( getRepository(), atf.getRetentionPeriod().getDays(),
+                                                atf.getRetentionCount(), repositorySession, listeners );
 
         String repoRoot = prepareTestRepos();
         String projectNs = "org.apache.maven.plugins";
@@ -241,10 +243,11 @@ public class DaysOldRepositoryPurgeTest
     public void testMetadataDrivenSnapshots()
         throws Exception
     {
-        ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
+        org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
+        ArtifactCleanupFeature atf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get();
         List<RepositoryListener> listeners = Collections.singletonList( listener );
-        repoPurge = new DaysOldRepositoryPurge( getRepository(), repoConfiguration.getDaysOlder(),
-                                                repoConfiguration.getRetentionCount(), repositorySession, listeners );
+        repoPurge = new DaysOldRepositoryPurge( getRepository(), atf.getRetentionPeriod().getDays(),
+            atf.getRetentionCount(), repositorySession, listeners );
 
         String repoRoot = prepareTestRepos();
         String projectNs = "org.codehaus.plexus";

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java
index f052915..11e0ffe 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java
@@ -33,9 +33,12 @@ import org.apache.archiva.consumers.functors.ConsumerWantsFilePredicate;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.model.MetadataFacet;
 import org.apache.archiva.mock.MockRepositorySessionFactory;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.custommonkey.xmlunit.XMLAssert;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 import org.slf4j.Logger;
@@ -48,6 +51,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.attribute.FileTime;
+import java.time.Period;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -168,9 +172,10 @@ public class RepositoryPurgeConsumerTest
             applicationContext.getBean( "knownRepositoryContentConsumer#repo-purge-consumer-by-retention-count",
                                         KnownRepositoryContentConsumer.class );
 
-        ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
-        repoConfiguration.setDaysOlder( 0 ); // force days older off to allow retention count purge to execute.
-        repoConfiguration.setRetentionCount( TEST_RETENTION_COUNT );
+        org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
+        ArtifactCleanupFeature atf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get();
+        atf.setRetentionPeriod( Period.ofDays( 0 ) ); // force days older off to allow retention count purge to execute.
+        atf.setRetentionCount( TEST_RETENTION_COUNT );
         addRepoToConfiguration( "retention-count", repoConfiguration );
 
         repoPurgeConsumer.beginScan( repoConfiguration, null );
@@ -247,40 +252,18 @@ public class RepositoryPurgeConsumerTest
         removeRepoFromConfiguration( "retention-count", repoConfiguration );
     }
 
-    private void addRepoToConfiguration( String configHint, ManagedRepository repoConfiguration )
+    private void addRepoToConfiguration( String configHint, org.apache.archiva.repository.ManagedRepository repoConfiguration )
         throws Exception
     {
-        ArchivaConfiguration archivaConfiguration =
-            applicationContext.getBean( "archivaConfiguration#" + configHint, ArchivaConfiguration.class );
-        ( (DefaultManagedRepositoryAdmin) applicationContext.getBean(
-            ManagedRepositoryAdmin.class ) ).setArchivaConfiguration( archivaConfiguration );
-        // skygo: Default Validator was not looking at same config
-        ( (DefaultRepositoryCommonValidator) applicationContext.getBean(
-            RepositoryCommonValidator.class ) ).setArchivaConfiguration( archivaConfiguration );
-        ManagedRepositoryAdmin managedRepositoryAdmin = applicationContext.getBean( ManagedRepositoryAdmin.class );
-        if ( managedRepositoryAdmin.getManagedRepository( repoConfiguration.getId() ) != null )
-        {
-            managedRepositoryAdmin.deleteManagedRepository( repoConfiguration.getId(), null, false );
-        }
-        managedRepositoryAdmin.addManagedRepository( repoConfiguration, false, null );
+        RepositoryRegistry repositoryRegistry = applicationContext.getBean(RepositoryRegistry.class);
+        repositoryRegistry.putRepository( repoConfiguration );
     }
 
-    private void removeRepoFromConfiguration( String configHint, ManagedRepository repoConfiguration )
+    private void removeRepoFromConfiguration( String configHint, org.apache.archiva.repository.ManagedRepository repoConfiguration )
         throws Exception
     {
-        ArchivaConfiguration archivaConfiguration =
-            applicationContext.getBean( "archivaConfiguration#" + configHint, ArchivaConfiguration.class );
-
-        ( (DefaultManagedRepositoryAdmin) applicationContext.getBean(
-            ManagedRepositoryAdmin.class ) ).setArchivaConfiguration( archivaConfiguration );
-        // skygo: Default Validator was not looking at same config
-        ( (DefaultRepositoryCommonValidator) applicationContext.getBean(
-            RepositoryCommonValidator.class ) ).setArchivaConfiguration( archivaConfiguration );
-        ManagedRepositoryAdmin managedRepositoryAdmin = applicationContext.getBean( ManagedRepositoryAdmin.class );
-        if ( managedRepositoryAdmin.getManagedRepository( repoConfiguration.getId() ) != null )
-        {
-            managedRepositoryAdmin.deleteManagedRepository( repoConfiguration.getId(), null, true );
-        }
+        RepositoryRegistry repositoryRegistry = applicationContext.getBean(RepositoryRegistry.class);
+        repositoryRegistry.removeRepository( repoConfiguration );
     }
 
     @Test
@@ -291,8 +274,9 @@ public class RepositoryPurgeConsumerTest
             applicationContext.getBean( "knownRepositoryContentConsumer#repo-purge-consumer-by-days-old",
                                         KnownRepositoryContentConsumer.class );
 
-        ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
-        repoConfiguration.setDaysOlder( TEST_DAYS_OLDER );
+        org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
+        ArtifactCleanupFeature atf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get();
+        atf.setRetentionPeriod( Period.ofDays( TEST_DAYS_OLDER ) );
         addRepoToConfiguration( "days-old", repoConfiguration );
 
         repoPurgeConsumer.beginScan( repoConfiguration, null );
@@ -375,8 +359,9 @@ public class RepositoryPurgeConsumerTest
             applicationContext.getBean( "knownRepositoryContentConsumer#repo-purge-consumer-by-retention-count",
                                         KnownRepositoryContentConsumer.class );
 
-        ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
-        repoConfiguration.setDeleteReleasedSnapshots( false ); // Set to NOT delete released snapshots.
+        org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
+        ArtifactCleanupFeature acf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get();
+        acf.setDeleteReleasedSnapshots( false ); // Set to NOT delete released snapshots.
         addRepoToConfiguration( "retention-count", repoConfiguration );
 
         repoPurgeConsumer.beginScan( repoConfiguration, null );
@@ -437,10 +422,12 @@ public class RepositoryPurgeConsumerTest
             applicationContext.getBean( "knownRepositoryContentConsumer#repo-purge-consumer-by-days-old",
                                         KnownRepositoryContentConsumer.class );
 
-        ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
-        repoConfiguration.setDeleteReleasedSnapshots( true );
+        org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
+        ArtifactCleanupFeature acf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get();
+        acf.setDeleteReleasedSnapshots( true );
         addRepoToConfiguration( "days-old", repoConfiguration );
 
+
         repoPurgeConsumer.beginScan( repoConfiguration, null );
 
         String repoRoot = prepareTestRepos();

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java
index 009830c..13d6b68 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java
@@ -22,6 +22,7 @@ package org.apache.archiva.consumers.core.repository;
 import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.repository.events.RepositoryListener;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -50,9 +51,10 @@ public class RetentionCountRepositoryPurgeTest
     {
         super.setUp();
 
-        ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
+        org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME );
         List<RepositoryListener> listeners = Collections.singletonList( listener );
-        repoPurge = new RetentionCountRepositoryPurge( getRepository(), repoConfiguration.getRetentionCount(),
+        ArtifactCleanupFeature acf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get();
+        repoPurge = new RetentionCountRepositoryPurge( getRepository(), acf.getRetentionCount(),
                                                        repositorySession, listeners );
     }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
new file mode 100644
index 0000000..9a53bf2
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
@@ -0,0 +1,181 @@
+package org.apache.archiva.repository.mock;
+
+/*
+ * 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.model.ArchivaArtifact;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.model.ProjectReference;
+import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.repository.ContentNotFoundException;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.layout.LayoutException;
+import org.springframework.stereotype.Service;
+
+import java.net.URI;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Set;
+
+/**
+ * @author Martin Stockhammer <ma...@apache.org>
+ */
+@Service("managedRepositoryContent#mock")
+public class ManagedRepositoryContentMock implements ManagedRepositoryContent
+{
+    private ManagedRepository repository;
+
+    @Override
+    public void deleteVersion( VersionedReference reference ) throws ContentNotFoundException
+    {
+
+    }
+
+    @Override
+    public void deleteArtifact( ArtifactReference artifactReference ) throws ContentNotFoundException
+    {
+
+    }
+
+    @Override
+    public void deleteGroupId( String groupId ) throws ContentNotFoundException
+    {
+
+    }
+
+    @Override
+    public void deleteProject( String namespace, String projectId ) throws RepositoryException
+    {
+
+    }
+
+    @Override
+    public String getId( )
+    {
+        return null;
+    }
+
+    @Override
+    public Set<ArtifactReference> getRelatedArtifacts( ArtifactReference reference ) throws ContentNotFoundException
+    {
+        return null;
+    }
+
+    @Override
+    public String getRepoRoot()
+    {
+        return convertUriToPath( repository.getLocation() );
+    }
+
+    private String convertUriToPath( URI uri ) {
+        if (uri.getScheme()==null) {
+            return Paths.get(uri.getPath()).toString();
+        } else if ("file".equals(uri.getScheme())) {
+            return Paths.get(uri).toString();
+        } else {
+            return uri.toString();
+        }
+    }
+
+    @Override
+    public ManagedRepository getRepository( )
+    {
+        return repository;
+    }
+
+    @Override
+    public Set<String> getVersions( ProjectReference reference ) throws ContentNotFoundException, LayoutException
+    {
+        return null;
+    }
+
+    @Override
+    public Set<String> getVersions( VersionedReference reference ) throws ContentNotFoundException
+    {
+        return null;
+    }
+
+    @Override
+    public boolean hasContent( ArtifactReference reference )
+    {
+        return false;
+    }
+
+    @Override
+    public boolean hasContent( ProjectReference reference )
+    {
+        return false;
+    }
+
+    @Override
+    public boolean hasContent( VersionedReference reference )
+    {
+        return false;
+    }
+
+    @Override
+    public void setRepository( ManagedRepository repo )
+    {
+        this.repository = repo;
+    }
+
+    @Override
+    public ArtifactReference toArtifactReference( String path ) throws LayoutException
+    {
+        return null;
+    }
+
+    @Override
+    public Path toFile( ArtifactReference reference )
+    {
+        return null;
+    }
+
+    @Override
+    public Path toFile( ArchivaArtifact reference )
+    {
+        return null;
+    }
+
+    @Override
+    public String toMetadataPath( ProjectReference reference )
+    {
+        return null;
+    }
+
+    @Override
+    public String toMetadataPath( VersionedReference reference )
+    {
+        return null;
+    }
+
+    @Override
+    public String toPath( ArtifactReference reference )
+    {
+        return null;
+    }
+
+    @Override
+    public String toPath( ArchivaArtifact reference )
+    {
+        return null;
+    }
+}


[06/21] archiva git commit: Changing repository registry and layer

Posted by ma...@apache.org.
Changing repository registry and layer

Adding unit tests for the registry.
Fixing some uri issues.
Removing dependency to consumer to break circular dependency


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/d6e4a5b4
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/d6e4a5b4
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/d6e4a5b4

Branch: refs/heads/master
Commit: d6e4a5b48580ffc0420df5c6b2486fa0e57ab7c4
Parents: 55f72f2
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:27:45 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:27:45 2017 +0100

----------------------------------------------------------------------
 .../archiva-repository-layer/pom.xml            |  25 +-
 .../archiva/repository/AbstractRepository.java  |  19 +-
 .../repository/BasicManagedRepository.java      |  79 +++
 .../repository/BasicRemoteRepository.java       |  73 +++
 .../repository/ManagedRepositoryContent.java    |   5 +-
 .../archiva/repository/PasswordCredentials.java |   5 +
 .../repository/RemoteRepositoryContent.java     |   1 -
 .../repository/RepositoryContentFactory.java    | 134 ++---
 .../archiva/repository/RepositoryProvider.java  |  89 +++-
 .../archiva/repository/RepositoryRegistry.java  | 231 +++++++--
 .../features/ArtifactCleanupFeature.java        |  16 +-
 .../features/IndexCreationFeature.java          |  11 +-
 .../repository/RepositoryRegistryTest.java      | 511 +++++++++++++++++++
 .../mock/ManagedRepositoryContentMock.java      | 169 ++++++
 .../mock/RemoteRepositoryContentMock.java       |  78 +++
 .../repository/mock/RepositoryProviderMock.java | 231 +++++++++
 .../repository/RepositoryRegistryTest.java      |  87 ----
 .../src/main/test/resources/archiva.xml         | 202 ++++++++
 .../src/main/test/resources/log4j2-test.xml     |  45 ++
 .../src/main/test/resources/spring-context.xml  |  53 ++
 20 files changed, 1849 insertions(+), 215 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/pom.xml b/archiva-modules/archiva-base/archiva-repository-layer/pom.xml
index 16df6e4..8f21534 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/pom.xml
+++ b/archiva-modules/archiva-base/archiva-repository-layer/pom.xml
@@ -39,10 +39,6 @@
     </dependency>
     <dependency>
       <groupId>org.apache.archiva</groupId>
-      <artifactId>archiva-consumer-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.archiva</groupId>
       <artifactId>archiva-checksum</artifactId>
     </dependency>
     <dependency>
@@ -105,6 +101,27 @@
       <artifactId>cron-utils</artifactId>
       <version>6.0.2</version>
     </dependency>
+
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-1.2-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-jcl</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   <build>
     <plugins>

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
index 4bac7e7..0ff3cb1 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
@@ -52,10 +52,12 @@ public abstract class AbstractRepository implements EditableRepository
     private Set<URI> failoverLocations = new HashSet<>(  );
     private Set<URI> uFailoverLocations = Collections.unmodifiableSet( failoverLocations );
     private boolean scanned = true;
-    String schedulingDefinition = "0 0 02 * *";
-    private String layout;
+    String schedulingDefinition = "0 0 02 * * ?";
+    private String layout = "default";
     public static final CronDefinition CRON_DEFINITION = CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ);
 
+    Map<Class<? extends RepositoryFeature<?>>, RepositoryFeature<?>> featureMap = new HashMap<>(  );
+
     public AbstractRepository(RepositoryType type, String id, String name) {
         this.id = id;
         this.names.put( primaryLocale, name);
@@ -152,13 +154,18 @@ public abstract class AbstractRepository implements EditableRepository
     @Override
     public <T extends RepositoryFeature<T>> RepositoryFeature<T> getFeature( Class<T> clazz ) throws UnsupportedFeatureException
     {
-        throw new UnsupportedFeatureException( "Feature "+clazz+" not supported"  );
+        if (featureMap.containsKey( clazz )) {
+            return (RepositoryFeature<T>) featureMap.get(clazz);
+        } else
+        {
+            throw new UnsupportedFeatureException( "Feature " + clazz + " not supported" );
+        }
     }
 
     @Override
     public <T extends RepositoryFeature<T>> boolean supportsFeature( Class<T> clazz )
     {
-        return false;
+        return featureMap.containsKey( clazz );
     }
 
     @Override
@@ -226,4 +233,8 @@ public abstract class AbstractRepository implements EditableRepository
         parser.parse(cronExpression).validate();
         this.schedulingDefinition = cronExpression;
     }
+
+    protected <T extends RepositoryFeature<T>> void addFeature(RepositoryFeature<T> feature) {
+       featureMap.put( (Class<? extends RepositoryFeature<?>>) feature.getClass(), feature);
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicManagedRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicManagedRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicManagedRepository.java
new file mode 100644
index 0000000..0ab88f3
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicManagedRepository.java
@@ -0,0 +1,79 @@
+package org.apache.archiva.repository;
+
+/*
+ * 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.repository.features.ArtifactCleanupFeature;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.StagingRepositoryFeature;
+
+import java.util.Locale;
+
+/**
+ *
+ * Just a helper class, mainly used for unit tests.
+ *
+ *
+ */
+public class BasicManagedRepository extends AbstractManagedRepository
+
+{
+    ArtifactCleanupFeature artifactCleanupFeature = new ArtifactCleanupFeature(  );
+    IndexCreationFeature indexCreationFeature = new IndexCreationFeature(  );
+    StagingRepositoryFeature stagingRepositoryFeature = new StagingRepositoryFeature( );
+
+
+    static final StandardCapabilities CAPABILITIES = new StandardCapabilities( new ReleaseScheme[] {
+        ReleaseScheme.RELEASE, ReleaseScheme.SNAPSHOT
+    }, new String[] {"default"}, new String[0], new String[] {
+        ArtifactCleanupFeature.class.toString(), IndexCreationFeature.class.toString(),
+        StagingRepositoryFeature.class.toString()
+    }, true, true, true, true, true  );
+
+    public BasicManagedRepository( String id, String name )
+    {
+        super( RepositoryType.MAVEN, id, name );
+        initFeatures();
+    }
+
+    public BasicManagedRepository( Locale primaryLocale, RepositoryType type, String id, String name )
+    {
+        super( primaryLocale, type, id, name );
+        initFeatures();
+    }
+
+    private void initFeatures() {
+        addFeature( artifactCleanupFeature );
+        addFeature( indexCreationFeature );
+        addFeature( stagingRepositoryFeature );
+    }
+
+    @Override
+    public boolean hasIndex( )
+    {
+        return true;
+    }
+
+    @Override
+    public RepositoryCapabilities getCapabilities( )
+    {
+        return CAPABILITIES;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicRemoteRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicRemoteRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicRemoteRepository.java
new file mode 100644
index 0000000..d241854
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/BasicRemoteRepository.java
@@ -0,0 +1,73 @@
+package org.apache.archiva.repository;
+
+/*
+ * 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.repository.features.RemoteIndexFeature;
+
+import java.util.Locale;
+
+/**
+ *
+ * Just a helper class, mainly used for unit tests.
+ *
+ *
+ */
+public class BasicRemoteRepository extends AbstractRemoteRepository
+
+{
+    RemoteIndexFeature remoteIndexFeature = new RemoteIndexFeature();
+
+
+    static final StandardCapabilities CAPABILITIES = new StandardCapabilities( new ReleaseScheme[] {
+        ReleaseScheme.RELEASE, ReleaseScheme.SNAPSHOT
+    }, new String[] {"default"}, new String[0], new String[] {
+        RemoteIndexFeature.class.toString()
+    }, true, true, true, true, true  );
+
+    public BasicRemoteRepository( String id, String name )
+    {
+        super( RepositoryType.MAVEN, id, name );
+        initFeatures();
+    }
+
+    public BasicRemoteRepository( Locale primaryLocale, RepositoryType type, String id, String name )
+    {
+        super( primaryLocale, type, id, name );
+        initFeatures();
+    }
+
+    private void initFeatures() {
+        addFeature( remoteIndexFeature );
+    }
+
+    @Override
+    public boolean hasIndex( )
+    {
+        return true;
+    }
+
+    @Override
+    public RepositoryCapabilities getCapabilities( )
+    {
+        return CAPABILITIES;
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
index 643f3e9..c209c38 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
@@ -19,7 +19,6 @@ package org.apache.archiva.repository;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.model.ArchivaArtifact;
 import org.apache.archiva.model.ArtifactReference;
 import org.apache.archiva.model.ProjectReference;
@@ -118,7 +117,7 @@ public interface ManagedRepositoryContent
      *
      * @return the repository that is associated with this repository content.
      */
-    ManagedRepository getRepository();
+    org.apache.archiva.repository.ManagedRepository getRepository();
 
     /**
      * Given a specific {@link ProjectReference}, return the list of available versions for
@@ -178,7 +177,7 @@ public interface ManagedRepositoryContent
      *
      * @param repo the repository to associate with this repository content.
      */
-    void setRepository( ManagedRepository repo );
+    void setRepository( org.apache.archiva.repository.ManagedRepository repo );
 
     /**
      * Given a repository relative path to a filename, return the {@link VersionedReference} object suitable for the path.

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/PasswordCredentials.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/PasswordCredentials.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/PasswordCredentials.java
index 44b087b..97ed05c 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/PasswordCredentials.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/PasswordCredentials.java
@@ -27,6 +27,11 @@ public class PasswordCredentials implements RepositoryCredentials
     String username;
     char[] password;
 
+    public PasswordCredentials(String username, char[] password) {
+        this.username = username;
+        this.password = password;
+    }
+
     public String getUsername( )
     {
         return username;

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RemoteRepositoryContent.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RemoteRepositoryContent.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RemoteRepositoryContent.java
index b4d7709..6745dd8 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RemoteRepositoryContent.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RemoteRepositoryContent.java
@@ -19,7 +19,6 @@ package org.apache.archiva.repository;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.RemoteRepository;
 import org.apache.archiva.model.ArtifactReference;
 import org.apache.archiva.model.RepositoryURL;
 import org.apache.archiva.repository.layout.LayoutException;

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryContentFactory.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryContentFactory.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryContentFactory.java
index 85ed80f..5547458 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryContentFactory.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryContentFactory.java
@@ -19,13 +19,10 @@ package org.apache.archiva.repository;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.model.beans.RemoteRepository;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.ConfigurationNames;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.archiva.redback.components.registry.Registry;
 import org.apache.archiva.redback.components.registry.RegistryListener;
 import org.springframework.context.ApplicationContext;
@@ -38,8 +35,6 @@ import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * RepositoryContentRequest
- *
- *
  */
 @Service( "repositoryContentFactory#default" )
 public class RepositoryContentFactory
@@ -52,12 +47,6 @@ public class RepositoryContentFactory
     private ArchivaConfiguration archivaConfiguration;
 
     @Inject
-    private ManagedRepositoryAdmin managedRepositoryAdmin;
-
-    @Inject
-    private RemoteRepositoryAdmin remoteRepositoryAdmin;
-
-    @Inject
     private ApplicationContext applicationContext;
 
     private final Map<String, ManagedRepositoryContent> managedContentMap;
@@ -65,10 +54,10 @@ public class RepositoryContentFactory
     private final Map<String, RemoteRepositoryContent> remoteContentMap;
 
 
-    public RepositoryContentFactory()
+    public RepositoryContentFactory( )
     {
-        managedContentMap = new ConcurrentHashMap<String, ManagedRepositoryContent>();
-        remoteContentMap = new ConcurrentHashMap<String, RemoteRepositoryContent>();
+        managedContentMap = new ConcurrentHashMap<String, ManagedRepositoryContent>( );
+        remoteContentMap = new ConcurrentHashMap<String, RemoteRepositoryContent>( );
     }
 
     /**
@@ -82,65 +71,86 @@ public class RepositoryContentFactory
     public ManagedRepositoryContent getManagedRepositoryContent( String repoId )
         throws RepositoryNotFoundException, RepositoryException
     {
-        try
-        {
-            ManagedRepositoryContent repo = managedContentMap.get( repoId );
-
-            if ( repo != null )
-            {
-                return repo;
-            }
-
-            ManagedRepository repoConfig = managedRepositoryAdmin.getManagedRepository( repoId );
-            if ( repoConfig == null )
-            {
-                throw new RepositoryNotFoundException(
-                    "Unable to find managed repository configuration for id:" + repoId );
-            }
-
-            repo = applicationContext.getBean( "managedRepositoryContent#" + repoConfig.getLayout(),
-                                               ManagedRepositoryContent.class );
-            repo.setRepository( repoConfig );
-            managedContentMap.put( repoId, repo );
+        ManagedRepositoryContent repo = managedContentMap.get( repoId );
 
+        if ( repo != null )
+        {
             return repo;
         }
-        catch ( RepositoryAdminException e )
+        else
         {
-            throw new RepositoryException( e.getMessage(), e );
+            throw new RepositoryNotFoundException(
+                "Unable to find managed repository configuration for id " + repoId );
         }
+
     }
 
-    public RemoteRepositoryContent getRemoteRepositoryContent( String repoId )
+    public ManagedRepositoryContent getManagedRepositoryContent( ManagedRepositoryConfiguration repoConfig, org.apache.archiva.repository.ManagedRepository mRepo )
         throws RepositoryNotFoundException, RepositoryException
     {
-        try
+        ManagedRepositoryContent repo = managedContentMap.get( repoConfig.getId( ) );
+
+        if ( repo != null && repo.getRepository()==mRepo)
         {
-            RemoteRepositoryContent repo = remoteContentMap.get( repoId );
+            return repo;
+        }
 
-            if ( repo != null )
-            {
-                return repo;
+        repo = applicationContext.getBean( "managedRepositoryContent#" + repoConfig.getLayout( ),
+            ManagedRepositoryContent.class );
+        repo.setRepository( mRepo );
+        ManagedRepositoryContent previousRepo = managedContentMap.put( repoConfig.getId( ), repo );
+        if (previousRepo!=null) {
+            ManagedRepository previousMRepo = previousRepo.getRepository( );
+            if (previousMRepo!=null && previousMRepo instanceof EditableManagedRepository) {
+                ((EditableManagedRepository)previousMRepo).setContent( null );
             }
+            previousRepo.setRepository( null );
+        }
 
-            RemoteRepository repoConfig = remoteRepositoryAdmin.getRemoteRepository( repoId );
-            if ( repoConfig == null )
-            {
-                throw new RepositoryNotFoundException(
-                    "Unable to find remote repository configuration for id:" + repoId );
-            }
+        return repo;
+    }
 
-            repo = applicationContext.getBean( "remoteRepositoryContent#" + repoConfig.getLayout(),
-                                               RemoteRepositoryContent.class );
-            repo.setRepository( repoConfig );
-            remoteContentMap.put( repoId, repo );
+    public RemoteRepositoryContent getRemoteRepositoryContent( String repoId )
+        throws RepositoryNotFoundException, RepositoryException
+    {
+        RemoteRepositoryContent repo = remoteContentMap.get( repoId );
 
+        if ( repo != null )
+        {
             return repo;
         }
-        catch ( RepositoryAdminException e )
+        else
         {
-            throw new RepositoryException( e.getMessage(), e );
+            throw new RepositoryNotFoundException(
+                "Unable to find remote repository configuration for id:" + repoId );
         }
+
+    }
+
+    public RemoteRepositoryContent getRemoteRepositoryContent( RemoteRepositoryConfiguration repoConfig, RemoteRepository mRepo )
+        throws RepositoryNotFoundException, RepositoryException
+    {
+        RemoteRepositoryContent repo = remoteContentMap.get( repoConfig.getId( ) );
+
+        if ( repo != null && repo.getRepository()==mRepo)
+        {
+            return repo;
+        }
+
+        repo = applicationContext.getBean( "remoteRepositoryContent#" + repoConfig.getLayout( ),
+            RemoteRepositoryContent.class );
+        repo.setRepository( mRepo );
+        RemoteRepositoryContent previousRepo = remoteContentMap.put( repoConfig.getId( ), repo );
+        if (previousRepo!=null) {
+            RemoteRepository previousMRepo = previousRepo.getRepository( );
+            if (previousMRepo!=null && previousMRepo instanceof EditableRemoteRepository) {
+                ((EditableRemoteRepository)previousMRepo).setContent( null );
+            }
+            previousRepo.setRepository( null );
+        }
+
+
+        return repo;
     }
 
 
@@ -150,7 +160,7 @@ public class RepositoryContentFactory
         if ( ConfigurationNames.isManagedRepositories( propertyName ) || ConfigurationNames.isRemoteRepositories(
             propertyName ) )
         {
-            initMaps();
+            initMaps( );
         }
     }
 
@@ -161,26 +171,26 @@ public class RepositoryContentFactory
     }
 
     @PostConstruct
-    public void initialize()
+    public void initialize( )
     {
         archivaConfiguration.addChangeListener( this );
     }
 
-    private void initMaps()
+    private void initMaps( )
     {
         // olamy we use concurent so no need of synchronize
         //synchronized ( managedContentMap )
         //{
-        managedContentMap.clear();
+        managedContentMap.clear( );
         //}
 
         //synchronized ( remoteContentMap )
         //{
-        remoteContentMap.clear();
+        remoteContentMap.clear( );
         //}
     }
 
-    public ArchivaConfiguration getArchivaConfiguration()
+    public ArchivaConfiguration getArchivaConfiguration( )
     {
         return archivaConfiguration;
     }

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
index a45c05e..a501514 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
@@ -26,29 +26,114 @@ import java.util.Set;
 
 /**
  *
- * This interface must be implemented by the repository implementations. These
- * are responsible for creating the instances.
+ * This interface must be implemented by the repository implementations. The repository provider knows all
+ * about the repositories and should be the only part that uses the repository specific classes and libraries
+ * (e.g. the maven libraries).
+ *
+ * Newly created instances should always be filled with default values that make sense. null values should
+ * be avoided.
+ *
+ * References like staging repositories must not be set.
+ *
  *
  */
 public interface RepositoryProvider
 {
+
+    /**
+     * Returns the types of repositories this provider can handle.
+     *
+     * @return the set of supported repository types
+     */
     Set<RepositoryType> provides();
 
+    /**
+     * Creates a editable managed repository instance. The provider must not check the uniqueness of the
+     * id parameter and must not track the already created instances. Each call to this method will create
+     * a new instance.
+     *
+     * @param id the repository identifier
+     * @param name the repository name
+     * @return a new created managed repository instance
+     */
     EditableManagedRepository createManagedInstance(String id, String name);
 
+    /**
+     * Creates a editable remote repository instance. The provider must not check the uniqueness of the
+     * id parameter and must not track the already created instances. Each call to this method will create
+     * a new instance.
+     *
+     * @param id the repository identifier
+     * @param name the repository name
+     * @return a new created remote repository instance
+     */
     EditableRemoteRepository createRemoteInstance(String id, String name);
 
+    /**
+     * Creates a new managed repository instance from the given configuration. All attributes are filled from the
+     * provided configuration object.
+     *
+     * @param configuration the repository configuration that contains the repository data
+     * @return a new created managed repository instance
+     * @throws RepositoryException if some of the configuration values are not valid
+     */
     ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration) throws RepositoryException;
 
+    /**
+     * Updates the given managed repository instance from the given configuration. All attributes are filled from the
+     * provided configuration object.
+     *
+     * @param repo the repository instance that should be updated
+     * @param configuration the repository configuration that contains the repository data
+     * @throws RepositoryException if some of the configuration values are not valid
+     */
     void updateManagedInstance( EditableManagedRepository repo, ManagedRepositoryConfiguration configuration) throws RepositoryException;
 
+    /**
+     * Creates a new managed staging repository instance from the given configuration. All attributes are filled from the
+     * provided configuration object.
+     *
+     * @param baseConfiguration the repository configuration of the base repository that references the staging repository
+     * @return a new created managed staging repository instance
+     * @throws RepositoryException if some of the configuration values are not valid
+     */
     ManagedRepository createStagingInstance(ManagedRepositoryConfiguration baseConfiguration) throws RepositoryException;
 
+    /**
+     * Creates a new remote repository instance from the given configuration. All attributes are filled from the
+     * provided configuration object.
+     *
+     * @param configuration the repository configuration that contains the repository data
+     * @return a new created remote repository instance
+     * @throws RepositoryException if some of the configuration values are not valid
+     */
     RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration) throws RepositoryException;
 
+    /**
+     * Updates the given remote repository instance from the given configuration. All attributes are filled from the
+     * provided configuration object.
+     *
+     * @param repo the repository instance that should be updated
+     * @param configuration the repository configuration that contains the repository data
+     * @throws RepositoryException if some of the configuration values are not valid
+     */
     void updateRemoteInstance(EditableRemoteRepository repo, RemoteRepositoryConfiguration configuration) throws RepositoryException;
 
+    /**
+     * Returns a configuration object from the given remote repository instance.
+     *
+     * @param remoteRepository the remote repository instance
+     * @return the repository configuration with all the data that is stored in the repository instance
+     * @throws RepositoryException if the data cannot be converted
+     */
     RemoteRepositoryConfiguration getRemoteConfiguration(RemoteRepository remoteRepository) throws RepositoryException;
 
+    /**
+     * Returns a configuration object from the given managed repository instance.
+     *
+     * @param managedRepository the managed repository instance
+     * @return the repository configuration with all the data that is stored in the repository instance
+     * @throws RepositoryException if the data cannot be converted
+     */
     ManagedRepositoryConfiguration getManagedConfiguration(ManagedRepository managedRepository) throws RepositoryException;
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
index a5f2f03..385cd16 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
@@ -27,6 +27,7 @@ import org.apache.archiva.configuration.IndeterminateConfigurationException;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.archiva.redback.components.registry.RegistryException;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -34,6 +35,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
+import javax.inject.Named;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -50,6 +52,8 @@ import java.util.stream.Stream;
  *
  * The modification methods addXX and removeXX persist the changes immediately to the configuration. If the
  * configuration save fails the changes are rolled back.
+ *
+ * TODO: Audit events should be sent, but we don't want dependency to the repsitory-metadata-api
  */
 @Service( "repositoryRegistry" )
 public class RepositoryRegistry implements ConfigurationListener {
@@ -66,8 +70,11 @@ public class RepositoryRegistry implements ConfigurationListener {
     ArchivaConfiguration archivaConfiguration;
 
     @Inject
+    @Named("repositoryContentFactory#default")
     RepositoryContentFactory repositoryContentFactory;
 
+
+
     private Map<String, ManagedRepository> managedRepositories = new HashMap<>( );
     private Map<String, ManagedRepository> uManagedRepository = Collections.unmodifiableMap( managedRepositories );
 
@@ -76,6 +83,10 @@ public class RepositoryRegistry implements ConfigurationListener {
 
     private ReentrantReadWriteLock rwLock = new ReentrantReadWriteLock( );
 
+    public void setArchivaConfiguration( ArchivaConfiguration archivaConfiguration) {
+        this.archivaConfiguration = archivaConfiguration;
+    }
+
     @PostConstruct
     private void initialize( )
     {
@@ -158,29 +169,40 @@ public class RepositoryRegistry implements ConfigurationListener {
     private ManagedRepository createNewManagedRepository( RepositoryProvider provider, ManagedRepositoryConfiguration cfg ) throws RepositoryException
     {
         ManagedRepository repo = provider.createManagedInstance( cfg );
+        updateRepositoryReferences( provider, repo, cfg , null);
+        return repo;
+
+    }
+
+    private void updateRepositoryReferences(RepositoryProvider provider, ManagedRepository repo, ManagedRepositoryConfiguration cfg, Configuration configuration) throws RepositoryException
+    {
         if ( repo.supportsFeature( StagingRepositoryFeature.class ) )
         {
             StagingRepositoryFeature feature = repo.getFeature( StagingRepositoryFeature.class ).get( );
-            if ( feature.isStageRepoNeeded( ) )
+            if ( feature.isStageRepoNeeded( ) && feature.getStagingRepository() == null)
             {
-                ManagedRepository stageRepo = getStagingRepository( provider, cfg );
+                ManagedRepository stageRepo = getStagingRepository( provider, cfg, configuration);
+                managedRepositories.put(stageRepo.getId(), stageRepo);
                 feature.setStagingRepository( stageRepo );
+                if (configuration!=null) {
+                    replaceOrAddRepositoryConfig( provider.getManagedConfiguration( stageRepo ), configuration );
+                }
             }
         }
-        if ( repo instanceof EditableManagedRepository )
+        if ( repo instanceof EditableManagedRepository && repo.getContent() == null)
         {
-            ( (EditableManagedRepository) repo ).setContent( repositoryContentFactory.getManagedRepositoryContent( repo.getId( ) ) );
+            ( (EditableManagedRepository) repo ).setContent( repositoryContentFactory.getManagedRepositoryContent( cfg, repo ) );
         }
-        return repo;
-
     }
 
-    private ManagedRepository getStagingRepository(RepositoryProvider provider, ManagedRepositoryConfiguration baseRepoCfg ) throws RepositoryException
+    private ManagedRepository getStagingRepository(RepositoryProvider provider, ManagedRepositoryConfiguration baseRepoCfg, Configuration configuration) throws RepositoryException
     {
         ManagedRepository stageRepo = getManagedRepository( baseRepoCfg.getId( ) + StagingRepositoryFeature.STAGING_REPO_POSTFIX );
         if ( stageRepo == null )
         {
             stageRepo = provider.createStagingInstance( baseRepoCfg );
+            ManagedRepositoryConfiguration stageCfg = provider.getManagedConfiguration( stageRepo );
+            updateRepositoryReferences( provider, stageRepo, stageCfg, configuration);
         }
         return stageRepo;
     }
@@ -209,9 +231,12 @@ public class RepositoryRegistry implements ConfigurationListener {
                 RepositoryType repositoryType = RepositoryType.valueOf( repoConfig.getType( ) );
                 if ( providerMap.containsKey( repositoryType ) )
                 {
+                    RepositoryProvider provider = getProvider( repositoryType );
                     try
                     {
-                        remoteRepos.put( repoConfig.getId( ), providerMap.get( repositoryType ).createRemoteInstance( repoConfig ) );
+
+                        RemoteRepository remoteRepository = createNewRemoteRepository( provider, repoConfig );
+                        remoteRepos.put( repoConfig.getId( ), remoteRepository);
                     }
                     catch ( Exception e )
                     {
@@ -228,6 +253,22 @@ public class RepositoryRegistry implements ConfigurationListener {
         }
     }
 
+    private RemoteRepository createNewRemoteRepository( RepositoryProvider provider, RemoteRepositoryConfiguration cfg ) throws RepositoryException
+    {
+        RemoteRepository repo = provider.createRemoteInstance( cfg );
+        updateRepositoryReferences( provider, repo, cfg , null);
+        return repo;
+
+    }
+
+    private void updateRepositoryReferences( RepositoryProvider provider, RemoteRepository repo, RemoteRepositoryConfiguration cfg, Configuration configuration) throws RepositoryException
+    {
+        if ( repo instanceof EditableRemoteRepository && repo.getContent() == null)
+        {
+            ( (EditableRemoteRepository) repo ).setContent( repositoryContentFactory.getRemoteRepositoryContent( cfg, repo ) );
+        }
+    }
+
     private ArchivaConfiguration getArchivaConfiguration( )
     {
         return this.archivaConfiguration;
@@ -360,23 +401,30 @@ public class RepositoryRegistry implements ConfigurationListener {
      * @param managedRepository the new repository.
      * @throws RepositoryException if the new repository could not be saved to the configuration.
      */
-    public void putRepository( ManagedRepository managedRepository ) throws RepositoryException
+    public ManagedRepository putRepository( ManagedRepository managedRepository ) throws RepositoryException
     {
         rwLock.writeLock( ).lock( );
         try
         {
             final String id = managedRepository.getId();
+            if (remoteRepositories.containsKey( id )) {
+                throw new RepositoryException( "There exists a remote repository with id "+id+". Could not update with managed repository." );
+            }
+
             ManagedRepository originRepo = managedRepositories.put( id, managedRepository );
             try
             {
-                ManagedRepositoryConfiguration newCfg = getProvider( managedRepository.getType( ) ).getManagedConfiguration( managedRepository );
+                RepositoryProvider provider = getProvider( managedRepository.getType() );
+                ManagedRepositoryConfiguration newCfg = provider.getManagedConfiguration( managedRepository );
                 Configuration configuration = getArchivaConfiguration( ).getConfiguration( );
+                updateRepositoryReferences( provider, managedRepository, newCfg, configuration );
                 ManagedRepositoryConfiguration oldCfg = configuration.findManagedRepositoryById( id );
                 if (oldCfg!=null) {
                     configuration.removeManagedRepository( oldCfg );
                 }
                 configuration.addManagedRepository( newCfg );
                 getArchivaConfiguration( ).save( configuration );
+                return managedRepository;
             }
             catch ( Exception e )
             {
@@ -387,7 +435,8 @@ public class RepositoryRegistry implements ConfigurationListener {
                 } else {
                     managedRepositories.remove(id);
                 }
-                throw new RepositoryException( "Could not save the configuration: " + e.getMessage( ) );
+                log.error("Exception during configuration update {}", e.getMessage(), e);
+                throw new RepositoryException( "Could not save the configuration" + (e.getMessage( )==null?"":": "+e.getMessage()) );
             }
         }
         finally
@@ -466,45 +515,55 @@ public class RepositoryRegistry implements ConfigurationListener {
                 repo = getProvider( repoType ).createManagedInstance( managedRepositoryConfiguration );
                 managedRepositories.put(id, repo);
             }
-            ManagedRepositoryConfiguration oldCfg;
-            if ((oldCfg = configuration.findManagedRepositoryById( id ))!=null) {
-                configuration.removeManagedRepository( oldCfg );
-            }
-            configuration.addManagedRepository( managedRepositoryConfiguration );
+            updateRepositoryReferences( getProvider( repoType  ), repo, managedRepositoryConfiguration, configuration );
+            replaceOrAddRepositoryConfig( managedRepositoryConfiguration, configuration );
             return repo;
         }
         finally
         {
             rwLock.writeLock( ).unlock( );
         }
+    }
 
+    private void replaceOrAddRepositoryConfig(ManagedRepositoryConfiguration managedRepositoryConfiguration, Configuration configuration) {
+        ManagedRepositoryConfiguration oldCfg = configuration.findManagedRepositoryById( managedRepositoryConfiguration.getId() );
+        if ( oldCfg !=null) {
+            configuration.removeManagedRepository( oldCfg );
+        }
+        configuration.addManagedRepository( managedRepositoryConfiguration );
+    }
 
+    private void replaceOrAddRepositoryConfig(RemoteRepositoryConfiguration remoteRepositoryConfiguration, Configuration configuration) {
+        RemoteRepositoryConfiguration oldCfg = configuration.findRemoteRepositoryById( remoteRepositoryConfiguration.getId() );
+        if ( oldCfg !=null) {
+            configuration.removeRemoteRepository( oldCfg );
+        }
+        configuration.addRemoteRepository( remoteRepositoryConfiguration );
     }
 
-    /**
-     * Adds a remote repository, or overwrites the repository definition with the same id, if it exists already.
-     * The modification is saved to the configuration immediately.
-     *
-     * @param remoteRepository the remote repository to add
-     * @throws RepositoryException if an error occurs during configuration save
-     */
-    public void putRepository( RemoteRepository remoteRepository ) throws RepositoryException
+    public RemoteRepository putRepository( RemoteRepository remoteRepository, Configuration configuration) throws RepositoryException
     {
         rwLock.writeLock( ).lock( );
         try
         {
             final String id = remoteRepository.getId();
+            if (managedRepositories.containsKey( id )) {
+                throw new RepositoryException( "There exists a managed repository with id "+id+". Could not update with remote repository." );
+            }
             RemoteRepository originRepo = remoteRepositories.put( id, remoteRepository );
+            RemoteRepositoryConfiguration oldCfg=null;
+            RemoteRepositoryConfiguration newCfg=null;
             try
             {
-                RemoteRepositoryConfiguration newCfg = getProvider( remoteRepository.getType( ) ).getRemoteConfiguration( remoteRepository );
-                Configuration configuration = getArchivaConfiguration( ).getConfiguration( );
-                RemoteRepositoryConfiguration oldCfg = configuration.findRemoteRepositoryById( id );
+                final RepositoryProvider provider = getProvider( remoteRepository.getType() );
+                newCfg = provider.getRemoteConfiguration( remoteRepository );
+                updateRepositoryReferences( provider, remoteRepository, newCfg, configuration );
+                oldCfg = configuration.findRemoteRepositoryById( id );
                 if (oldCfg!=null) {
                     configuration.removeRemoteRepository( oldCfg );
                 }
                 configuration.addRemoteRepository( newCfg );
-                getArchivaConfiguration( ).save( configuration );
+                return remoteRepository;
             }
             catch ( Exception e )
             {
@@ -515,7 +574,46 @@ public class RepositoryRegistry implements ConfigurationListener {
                 } else {
                     remoteRepositories.remove( id);
                 }
-                throw new RepositoryException( "Could not save the configuration: " + e.getMessage( ) );
+                if (oldCfg!=null) {
+                    RemoteRepositoryConfiguration cfg = configuration.findRemoteRepositoryById( id );
+                    if (cfg!=null) {
+                        configuration.removeRemoteRepository( cfg );
+                        configuration.addRemoteRepository( oldCfg );
+                    }
+                }
+                log.error("Error while adding remote repository {}", e.getMessage(), e);
+                throw new RepositoryException( "Could not save the configuration" + (e.getMessage( )==null?"":": "+e.getMessage()) );
+            }
+        }
+        finally
+        {
+            rwLock.writeLock( ).unlock( );
+        }
+    }
+
+    /**
+     * Adds a remote repository, or overwrites the repository definition with the same id, if it exists already.
+     * The modification is saved to the configuration immediately.
+     *
+     * @param remoteRepository the remote repository to add
+     * @throws RepositoryException if an error occurs during configuration save
+     */
+    public RemoteRepository putRepository( RemoteRepository remoteRepository ) throws RepositoryException
+    {
+        rwLock.writeLock( ).lock( );
+        try
+        {
+            Configuration configuration = getArchivaConfiguration().getConfiguration();
+            try
+            {
+                RemoteRepository repo = putRepository( remoteRepository, configuration );
+                getArchivaConfiguration().save(configuration);
+                return repo;
+            }
+            catch ( RegistryException | IndeterminateConfigurationException e )
+            {
+                log.error("Error while saving remote repository {}", e.getMessage(), e);
+                throw new RepositoryException( "Could not save the configuration" + (e.getMessage( )==null?"":": "+e.getMessage()) );
             }
         }
         finally
@@ -594,11 +692,8 @@ public class RepositoryRegistry implements ConfigurationListener {
                 repo = getProvider( repoType ).createRemoteInstance( remoteRepositoryConfiguration );
                 remoteRepositories.put(id, repo);
             }
-            RemoteRepositoryConfiguration oldCfg;
-            if ((oldCfg = configuration.findRemoteRepositoryById( id ))!=null) {
-                configuration.removeRemoteRepository( oldCfg );
-            }
-            configuration.addRemoteRepository( remoteRepositoryConfiguration );
+            updateRepositoryReferences( getProvider( repoType  ), repo, remoteRepositoryConfiguration, configuration );
+            replaceOrAddRepositoryConfig( remoteRepositoryConfiguration, configuration );
             return repo;
         }
         finally
@@ -609,6 +704,17 @@ public class RepositoryRegistry implements ConfigurationListener {
 
     }
 
+    public void removeRepository(Repository repo) throws RepositoryException
+    {
+        if (repo instanceof RemoteRepository ) {
+            removeRepository( (RemoteRepository)repo );
+        } else if (repo instanceof ManagedRepository) {
+            removeRepository( (ManagedRepository)repo);
+        } else {
+            throw new RepositoryException( "Repository type not known: "+repo.getClass() );
+        }
+    }
+
     /**
      * Removes a managed repository from the registry and configuration, if it exists.
      * The change is saved to the configuration immediately.
@@ -648,6 +754,29 @@ public class RepositoryRegistry implements ConfigurationListener {
         }
     }
 
+    public void removeRepository(ManagedRepository managedRepository, Configuration configuration) throws RepositoryException
+    {
+        final String id = managedRepository.getId();
+        ManagedRepository repo = getManagedRepository( id );
+        if (repo!=null) {
+            rwLock.writeLock().lock();
+            try {
+                repo = managedRepositories.remove( id );
+                if (repo!=null) {
+                    ManagedRepositoryConfiguration cfg = configuration.findManagedRepositoryById( id );
+                    if (cfg!=null) {
+                        configuration.removeManagedRepository( cfg );
+                    }
+                }
+            }
+            finally
+            {
+                rwLock.writeLock().unlock();
+            }
+        }
+
+    }
+
     /**
      * Removes the remote repository from the registry and configuration.
      * The change is saved to the configuration immediately.
@@ -687,6 +816,29 @@ public class RepositoryRegistry implements ConfigurationListener {
         }
     }
 
+    public void removeRepository( RemoteRepository remoteRepository, Configuration configuration) throws RepositoryException
+    {
+        final String id = remoteRepository.getId();
+        RemoteRepository repo = getRemoteRepository( id );
+        if (repo!=null) {
+            rwLock.writeLock().lock();
+            try {
+                repo = remoteRepositories.remove( id );
+                if (repo!=null) {
+                    RemoteRepositoryConfiguration cfg = configuration.findRemoteRepositoryById( id );
+                    if (cfg!=null) {
+                        configuration.removeRemoteRepository( cfg );
+                    }
+                }
+            }
+            finally
+            {
+                rwLock.writeLock().unlock();
+            }
+        }
+
+    }
+
     /**
      * Reloads the registry from the configuration.
      */
@@ -715,7 +867,7 @@ public class RepositoryRegistry implements ConfigurationListener {
     }
 
     public <T extends Repository> Repository clone(T repo, String newId) throws RepositoryException {
-        if (repo instanceof RemoteRepository) {
+        if (repo instanceof RemoteRepository ) {
             return this.clone((RemoteRepository)repo, newId);
         } else if (repo instanceof ManagedRepository) {
             return this.clone((ManagedRepository)repo, newId);
@@ -731,7 +883,7 @@ public class RepositoryRegistry implements ConfigurationListener {
      * @param repo The origin repository
      * @return The cloned repository.
      */
-    public RemoteRepository clone(RemoteRepository repo, String newId) throws RepositoryException
+    public RemoteRepository clone( RemoteRepository repo, String newId) throws RepositoryException
     {
         if (managedRepositories.containsKey(newId) || remoteRepositories.containsKey(newId)) {
             throw new RepositoryException("The given id exists already "+newId);
@@ -743,13 +895,6 @@ public class RepositoryRegistry implements ConfigurationListener {
         return cloned;
     }
 
-    public EditableManagedRepository createNewManaged(RepositoryType type, String id, String name) throws RepositoryException {
-        return getProvider(type).createManagedInstance(id, name);
-    }
-
-    public EditableRemoteRepository createNewRemote(RepositoryType type, String id, String name) throws RepositoryException {
-        return getProvider(type).createRemoteInstance(id, name);
-    }
 
     @Override
     public void configurationEvent(ConfigurationEvent event) {

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/ArtifactCleanupFeature.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/ArtifactCleanupFeature.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/ArtifactCleanupFeature.java
index 0243ff4..57c6830 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/ArtifactCleanupFeature.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/ArtifactCleanupFeature.java
@@ -30,16 +30,16 @@ import java.time.Period;
 public class ArtifactCleanupFeature implements RepositoryFeature<ArtifactCleanupFeature> {
 
     private boolean deleteReleasedSnapshots = false;
-    private Period retentionTime = Period.ofDays(100);
+    private Period retentionPeriod = Period.ofDays(100);
     private int retentionCount = 2;
 
     public ArtifactCleanupFeature() {
 
     }
 
-    public ArtifactCleanupFeature(boolean deleteReleasedSnapshots, Period retentionTime, int retentionCount) {
+    public ArtifactCleanupFeature( boolean deleteReleasedSnapshots, Period retentionPeriod, int retentionCount) {
         this.deleteReleasedSnapshots = deleteReleasedSnapshots;
-        this.retentionTime = retentionTime;
+        this.retentionPeriod = retentionPeriod;
         this.retentionCount = retentionCount;
     }
 
@@ -70,16 +70,16 @@ public class ArtifactCleanupFeature implements RepositoryFeature<ArtifactCleanup
      *
      * @return The time period after that the artifacts can be deleted.
      */
-    public Period getRetentionTime() {
-        return retentionTime;
+    public Period getRetentionPeriod() {
+        return retentionPeriod;
     }
 
     /**
      * Sets time period, after that artifacts can be deleted.
-     * @param retentionTime
+     * @param retentionPeriod
      */
-    public void setRetentionTime(Period retentionTime) {
-        this.retentionTime = retentionTime;
+    public void setRetentionPeriod( Period retentionPeriod ) {
+        this.retentionPeriod = retentionPeriod;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java
index 276232e..9c6b70c 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java
@@ -23,6 +23,7 @@ package org.apache.archiva.repository.features;
 import org.apache.commons.lang.StringUtils;
 
 import java.net.URI;
+import java.net.URISyntaxException;
 
 /**
  *
@@ -36,7 +37,15 @@ public class IndexCreationFeature implements RepositoryFeature<IndexCreationFeat
     private URI indexPath;
 
     public IndexCreationFeature() {
-
+        try
+        {
+            this.indexPath = new URI(".indexer");
+        }
+        catch ( URISyntaxException e )
+        {
+            // This may not happen.
+            e.printStackTrace( );
+        }
     }
 
     public IndexCreationFeature(boolean skipPackedIndexCreation) {

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/RepositoryRegistryTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/RepositoryRegistryTest.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/RepositoryRegistryTest.java
new file mode 100644
index 0000000..01dcbd2
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/RepositoryRegistryTest.java
@@ -0,0 +1,511 @@
+package org.apache.archiva.repository;
+
+/*
+ * 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.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+
+import javax.inject.Inject;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.Collection;
+
+import static org.junit.Assert.*;
+
+/**
+ * Test for RepositoryRegistry
+ */
+@RunWith(ArchivaSpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" })
+public class RepositoryRegistryTest
+{
+
+    @Inject
+    RepositoryRegistry repositoryRegistry;
+
+    @Inject
+    ArchivaConfiguration archivaConfiguration;
+
+    private static final Path userCfg = Paths.get(System.getProperty( "user.home" ), ".m2/archiva.xml");
+
+    private static Path cfgCopy;
+    private static Path archivaCfg;
+
+    @BeforeClass
+    public static void classSetup() throws IOException, URISyntaxException
+    {
+        URL archivaCfgUri = Thread.currentThread().getContextClassLoader().getResource( "archiva.xml" );
+        if (archivaCfgUri!=null) {
+            archivaCfg = Paths.get(archivaCfgUri.toURI());
+            cfgCopy = Files.createTempFile( "archiva-backup", ".xml" );
+            Files.copy( archivaCfg, cfgCopy, StandardCopyOption.REPLACE_EXISTING);
+        }
+    }
+
+    @AfterClass
+    public static void classTearDown() throws IOException
+    {
+        if (cfgCopy!=null) {
+            Files.deleteIfExists( cfgCopy );
+        }
+    }
+
+    @Before
+    public void setUp( ) throws Exception
+    {
+        assertNotNull( repositoryRegistry );
+        Files.deleteIfExists( userCfg );
+        URL archivaCfgUri = Thread.currentThread().getContextClassLoader().getResource( "archiva.xml" );
+        if (archivaCfgUri!=null) {
+            archivaCfg = Paths.get(archivaCfgUri.toURI());
+            if (Files.exists(cfgCopy))
+            {
+                Files.copy( cfgCopy, archivaCfg , StandardCopyOption.REPLACE_EXISTING);
+            }
+        }
+        archivaConfiguration.reload();
+        repositoryRegistry.reload();
+    }
+
+    @After
+    public void tearDown( ) throws Exception
+    {
+        Files.deleteIfExists( userCfg );
+        if (cfgCopy!=null && Files.exists(cfgCopy)) {
+            Files.copy(cfgCopy, archivaCfg, StandardCopyOption.REPLACE_EXISTING);
+        }
+    }
+
+    @Test
+    public void getRepositories( ) throws Exception
+    {
+        Collection<Repository> repos = repositoryRegistry.getRepositories( );
+        assertEquals( 5, repos.size( ) );
+        assertTrue(repos.stream().anyMatch( rep -> rep.getId().equals("internal") ));
+        assertTrue( repos.stream( ).anyMatch( rep -> rep.getId( ).equals( "snapshots") ) );
+        assertTrue(repos.stream().anyMatch( rep -> rep.getId().equals( "central") ));
+    }
+
+    @Test
+    public void getManagedRepositories( ) throws Exception
+    {
+        Collection<ManagedRepository> repos = repositoryRegistry.getManagedRepositories();
+        assertEquals( 4, repos.size( ) );
+        assertTrue(repos.stream().anyMatch( rep -> rep.getId().equals("internal") ));
+        assertTrue( repos.stream( ).anyMatch( rep -> rep.getId( ).equals( "snapshots") ) );
+    }
+
+    @Test
+    public void getRemoteRepositories( ) throws Exception
+    {
+        Collection<RemoteRepository> repos = repositoryRegistry.getRemoteRepositories( );
+        assertEquals( 1, repos.size( ) );
+        assertTrue(repos.stream().anyMatch( rep -> rep.getId().equals( "central") ));
+    }
+
+    @Test
+    public void getRepository( ) throws Exception
+    {
+        Repository repo = repositoryRegistry.getRepository( "internal" );
+        assertNotNull(repo);
+        assertEquals("internal", repo.getId());
+        assertEquals("Archiva Managed Internal Repository", repo.getName());
+        assertEquals("This is internal repository.", repo.getDescription());
+        assertEquals( "default", repo.getLayout( ) );
+        assertEquals("0 0 * * * ?", repo.getSchedulingDefinition());
+        assertTrue(repo instanceof ManagedRepository);
+        assertTrue( repo.hasIndex( ) );
+        assertTrue(repo.isScanned());
+        assertEquals(RepositoryType.MAVEN, repo.getType());
+    }
+
+    @Test
+    public void getManagedRepository( ) throws Exception
+    {
+        ManagedRepository repo = repositoryRegistry.getManagedRepository( "internal" );
+        assertNotNull(repo);
+        assertEquals("internal", repo.getId());
+        assertEquals("Archiva Managed Internal Repository", repo.getName());
+        assertEquals("This is internal repository.", repo.getDescription());
+        assertEquals( "default", repo.getLayout( ) );
+        assertEquals("0 0 * * * ?", repo.getSchedulingDefinition());
+        assertTrue( repo.hasIndex( ) );
+        assertTrue(repo.isScanned());
+        assertEquals(RepositoryType.MAVEN, repo.getType());
+        assertTrue(repo.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE));
+        assertFalse( repo.getActiveReleaseSchemes( ).contains( ReleaseScheme.SNAPSHOT ) );
+        assertNotNull(repo.getContent());
+
+        assertNull(repositoryRegistry.getManagedRepository( "xyu" ));
+
+    }
+
+    @Test
+    public void getRemoteRepository( ) throws Exception
+    {
+        RemoteRepository repo = repositoryRegistry.getRemoteRepository( "central" );
+        assertNotNull(repo);
+        assertEquals("central", repo.getId());
+        assertEquals("Central Repository", repo.getName());
+        assertEquals("", repo.getDescription());
+        assertEquals( "default", repo.getLayout( ) );
+        assertEquals("0 0 08 ? * SUN", repo.getSchedulingDefinition());
+        assertTrue( repo.hasIndex( ) );
+        assertTrue(repo.isScanned());
+        assertEquals(RepositoryType.MAVEN, repo.getType());
+
+        assertEquals(35, repo.getTimeout().getSeconds());
+    }
+
+    @Test
+    public void putManagedRepository( ) throws Exception
+    {
+        BasicManagedRepository managedRepository = new BasicManagedRepository( "test001", "Test repo" );
+        managedRepository.setDescription( managedRepository.getPrimaryLocale(), "This is just a test" );
+        repositoryRegistry.putRepository(managedRepository);
+
+        assertNotNull(managedRepository.getContent());
+        assertEquals(6, repositoryRegistry.getRepositories().size());
+
+        managedRepository = new BasicManagedRepository( "central", "Test repo" );
+        managedRepository.setDescription( managedRepository.getPrimaryLocale(), "This is just a test" );
+        ManagedRepository updatedRepo = null;
+        try {
+            repositoryRegistry.putRepository( managedRepository );
+            throw new RuntimeException("Repository exception should be thrown, if there exists a remote repository already with that id");
+        } catch (RepositoryException e) {
+            // OK
+        }
+        managedRepository = new BasicManagedRepository( "internal", "Test repo" );
+        managedRepository.setDescription( managedRepository.getPrimaryLocale(), "This is just a test" );
+        updatedRepo = repositoryRegistry.putRepository( managedRepository );
+
+        assertTrue(updatedRepo==managedRepository);
+        assertNotNull(managedRepository.getContent());
+        assertEquals(6, repositoryRegistry.getRepositories().size());
+        ManagedRepository managedRepository1 = repositoryRegistry.getManagedRepository( "internal" );
+        assertEquals("Test repo", managedRepository1.getName());
+        assertTrue(managedRepository1==managedRepository);
+
+    }
+
+    @Test
+    public void putManagedRepositoryFromConfig( ) throws Exception
+    {
+        ManagedRepositoryConfiguration cfg = new ManagedRepositoryConfiguration();
+        cfg.setId("test002");
+        cfg.setName("This is test 002");
+        ManagedRepository repo = repositoryRegistry.putRepository( cfg );
+        assertNotNull(repo);
+        assertEquals("test002", repo.getId());
+        assertEquals("This is test 002", repo.getName());
+        assertNotNull(repo.getContent());
+        archivaConfiguration.reload();
+        Collection<ManagedRepository> repos = repositoryRegistry.getManagedRepositories();
+        assertEquals(5, repos.size());
+
+        ManagedRepository internalRepo = repositoryRegistry.getManagedRepository( "internal" );
+        cfg = new ManagedRepositoryConfiguration();
+        cfg.setId("internal");
+        cfg.setName("This is internal test 002");
+        repo = repositoryRegistry.putRepository( cfg );
+        assertTrue(internalRepo==repo);
+        assertEquals("This is internal test 002",repo.getName());
+        assertEquals(5, repositoryRegistry.getManagedRepositories().size());
+
+        repositoryRegistry.reload();
+        assertEquals(5, repositoryRegistry.getManagedRepositories().size());
+
+    }
+
+    @Test
+    public void putManagedRepositoryFromConfigWithoutSave( ) throws Exception
+    {
+        Configuration configuration = archivaConfiguration.getConfiguration();
+        ManagedRepositoryConfiguration cfg = new ManagedRepositoryConfiguration();
+        cfg.setId("test002");
+        cfg.setName("This is test 002");
+        ManagedRepository repo = repositoryRegistry.putRepository( cfg, configuration );
+        assertNotNull(repo);
+        assertEquals("test002", repo.getId());
+        assertEquals("This is test 002", repo.getName());
+        assertNotNull(repo.getContent());
+        archivaConfiguration.reload();
+        assertEquals(3, archivaConfiguration.getConfiguration().getManagedRepositories().size());
+        Collection<ManagedRepository> repos = repositoryRegistry.getManagedRepositories();
+        assertEquals(5, repos.size());
+
+        ManagedRepository internalRepo = repositoryRegistry.getManagedRepository( "internal" );
+        cfg = new ManagedRepositoryConfiguration();
+        cfg.setId("internal");
+        cfg.setName("This is internal test 002");
+        repo = repositoryRegistry.putRepository( cfg, configuration );
+        assertTrue(internalRepo==repo);
+        assertEquals("This is internal test 002",repo.getName());
+        assertEquals(5, repositoryRegistry.getManagedRepositories().size());
+
+        repositoryRegistry.reload();
+        assertEquals(4, repositoryRegistry.getManagedRepositories().size());
+    }
+
+    @Test
+    public void putRemoteRepository( ) throws Exception
+    {
+        BasicRemoteRepository remoteRepository = new BasicRemoteRepository( "test001", "Test repo" );
+        remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), "This is just a test" );
+        RemoteRepository newRepo = repositoryRegistry.putRepository(remoteRepository);
+
+        assertTrue(remoteRepository==newRepo);
+        assertNotNull(remoteRepository.getContent());
+        assertEquals(6, repositoryRegistry.getRepositories().size());
+
+        remoteRepository = new BasicRemoteRepository( "internal", "Test repo" );
+        remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), "This is just a test" );
+        RemoteRepository updatedRepo = null;
+        try
+        {
+            updatedRepo = repositoryRegistry.putRepository( remoteRepository );
+            throw new RuntimeException("Should throw repository exception, if repository exists already and is not the same type.");
+        } catch (RepositoryException e) {
+            // OK
+        }
+
+        remoteRepository = new BasicRemoteRepository( "central", "Test repo" );
+        remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), "This is just a test" );
+        updatedRepo = repositoryRegistry.putRepository( remoteRepository );
+
+        assertTrue(updatedRepo==remoteRepository);
+        assertNotNull(remoteRepository.getContent());
+        assertEquals(6, repositoryRegistry.getRepositories().size());
+        RemoteRepository remoteRepository1 = repositoryRegistry.getRemoteRepository( "central" );
+        assertEquals("Test repo", remoteRepository1.getName());
+        assertTrue(remoteRepository1==remoteRepository);
+    }
+
+    @Test
+    public void putRemoteRepositoryFromConfig( ) throws Exception
+    {
+        RemoteRepositoryConfiguration cfg = new RemoteRepositoryConfiguration();
+        cfg.setId("test002");
+        cfg.setName("This is test 002");
+        RemoteRepository repo = repositoryRegistry.putRepository( cfg );
+        assertNotNull(repo);
+        assertEquals("test002", repo.getId());
+        assertEquals("This is test 002", repo.getName());
+        assertNotNull(repo.getContent());
+        archivaConfiguration.reload();
+        Collection<RemoteRepository> repos = repositoryRegistry.getRemoteRepositories();
+        assertEquals(2, repos.size());
+
+        RemoteRepository internalRepo = repositoryRegistry.getRemoteRepository( "central" );
+        cfg = new RemoteRepositoryConfiguration();
+        cfg.setId("central");
+        cfg.setName("This is central test 002");
+        repo = repositoryRegistry.putRepository( cfg );
+        assertTrue(internalRepo==repo);
+        assertEquals("This is central test 002",repo.getName());
+        assertEquals(2, repositoryRegistry.getRemoteRepositories().size());
+
+        repositoryRegistry.reload();
+        assertEquals(2, repositoryRegistry.getRemoteRepositories().size());
+    }
+
+    @Test
+    public void putRemoteRepositoryFromConfigWithoutSave( ) throws Exception
+    {
+        Configuration configuration = archivaConfiguration.getConfiguration();
+        RemoteRepositoryConfiguration cfg = new RemoteRepositoryConfiguration();
+        cfg.setId("test002");
+        cfg.setName("This is test 002");
+        RemoteRepository repo = repositoryRegistry.putRepository( cfg, configuration );
+        assertNotNull(repo);
+        assertEquals("test002", repo.getId());
+        assertEquals("This is test 002", repo.getName());
+        assertNotNull(repo.getContent());
+        archivaConfiguration.reload();
+        assertEquals(1, archivaConfiguration.getConfiguration().getRemoteRepositories().size());
+        Collection<RemoteRepository> repos = repositoryRegistry.getRemoteRepositories();
+        assertEquals(2, repos.size());
+
+        RemoteRepository internalRepo = repositoryRegistry.getRemoteRepository( "central" );
+        cfg = new RemoteRepositoryConfiguration();
+        cfg.setId("central");
+        cfg.setName("This is central test 002");
+        repo = repositoryRegistry.putRepository( cfg, configuration );
+        assertTrue(internalRepo==repo);
+        assertEquals("This is central test 002",repo.getName());
+        assertEquals(2, repositoryRegistry.getRemoteRepositories().size());
+
+        repositoryRegistry.reload();
+        assertEquals(1, repositoryRegistry.getRemoteRepositories().size());
+    }
+
+    @Test
+    public void removeRepository( ) throws Exception
+    {
+        assertEquals(5, repositoryRegistry.getRepositories().size());
+        Repository repo = repositoryRegistry.getRepository( "snapshots" );
+        repositoryRegistry.removeRepository( repo );
+        assertEquals(4, repositoryRegistry.getRepositories().size());
+        assertTrue( repositoryRegistry.getRepositories( ).stream( ).noneMatch( rep -> rep.getId( ).equals( "snapshots" ) ) );
+        archivaConfiguration.reload();
+        repositoryRegistry.reload();
+        assertEquals(4, repositoryRegistry.getRepositories().size());
+    }
+
+    @Test
+    public void removeManagedRepository( ) throws Exception
+    {
+
+        assertEquals(4, repositoryRegistry.getManagedRepositories().size());
+        ManagedRepository repo = repositoryRegistry.getManagedRepository( "snapshots" );
+        repositoryRegistry.removeRepository( repo );
+        assertEquals(3, repositoryRegistry.getManagedRepositories().size());
+        assertTrue( repositoryRegistry.getManagedRepositories( ).stream( ).noneMatch( rep -> rep.getId( ).equals( "snapshots" ) ) );
+        archivaConfiguration.reload();
+        repositoryRegistry.reload();
+        assertEquals(3, repositoryRegistry.getManagedRepositories().size());
+    }
+
+    @Test
+    public void removeManagedRepositoryWithoutSave( ) throws Exception
+    {
+        Configuration configuration = archivaConfiguration.getConfiguration();
+        assertEquals(4, repositoryRegistry.getManagedRepositories().size());
+        ManagedRepository repo = repositoryRegistry.getManagedRepository( "snapshots" );
+        repositoryRegistry.removeRepository( repo, configuration );
+        assertEquals(3, repositoryRegistry.getManagedRepositories().size());
+        assertTrue( repositoryRegistry.getManagedRepositories( ).stream( ).noneMatch( rep -> rep.getId( ).equals( "snapshots" ) ) );
+        archivaConfiguration.reload();
+        repositoryRegistry.reload();
+        assertEquals(4, repositoryRegistry.getManagedRepositories().size());
+    }
+
+
+    @Test
+    public void removeRemoteRepository( ) throws Exception
+    {
+        assertEquals(1, repositoryRegistry.getRemoteRepositories().size());
+        RemoteRepository repo = repositoryRegistry.getRemoteRepository( "central" );
+        repositoryRegistry.removeRepository( repo );
+        assertEquals(0, repositoryRegistry.getRemoteRepositories().size());
+        assertTrue( repositoryRegistry.getRemoteRepositories( ).stream( ).noneMatch( rep -> rep.getId( ).equals( "central" ) ) );
+        archivaConfiguration.reload();
+        repositoryRegistry.reload();
+        assertEquals(0, repositoryRegistry.getRemoteRepositories().size());
+    }
+
+    @Test
+    public void removeRemoteRepositoryWithoutSave( ) throws Exception
+    {
+        Configuration configuration = archivaConfiguration.getConfiguration();
+        assertEquals(1, repositoryRegistry.getRemoteRepositories().size());
+        RemoteRepository repo = repositoryRegistry.getRemoteRepository( "central" );
+        repositoryRegistry.removeRepository( repo, configuration );
+        assertEquals(0, repositoryRegistry.getRemoteRepositories().size());
+        assertTrue( repositoryRegistry.getRemoteRepositories( ).stream( ).noneMatch( rep -> rep.getId( ).equals( "central" ) ) );
+        archivaConfiguration.reload();
+        repositoryRegistry.reload();
+        assertEquals(1, repositoryRegistry.getRemoteRepositories().size());
+    }
+
+
+    @Test
+    public void cloneManagedRepo( ) throws Exception
+    {
+        ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( "internal" );
+
+        try
+        {
+            repositoryRegistry.clone(managedRepository, "snapshots");
+            throw new RuntimeException("RepositoryRegistry exception should be thrown if id exists already.");
+        }
+        catch ( RepositoryException e )
+        {
+            // OK
+        }
+
+        try
+        {
+            repositoryRegistry.clone(managedRepository, "central");
+            throw new RuntimeException("RepositoryRegistry exception should be thrown if id exists already.");
+        }
+        catch ( RepositoryException e )
+        {
+            // OK
+        }
+
+        ManagedRepository clone = repositoryRegistry.clone( managedRepository, "newinternal" );
+        assertNotNull(clone);
+        assertNull(clone.getContent());
+        assertEquals("Archiva Managed Internal Repository", clone.getName());
+        assertFalse(managedRepository==clone);
+
+    }
+
+    @Test
+    public void cloneRemoteRepo( ) throws Exception
+    {
+        RemoteRepository remoteRepository = repositoryRegistry.getRemoteRepository( "central" );
+
+        try
+        {
+            repositoryRegistry.clone(remoteRepository, "snapshots");
+            throw new RuntimeException("RepositoryRegistry exception should be thrown if id exists already.");
+        }
+        catch ( RepositoryException e )
+        {
+            // OK
+        }
+
+        try
+        {
+            repositoryRegistry.clone(remoteRepository, "central");
+            throw new RuntimeException("RepositoryRegistry exception should be thrown if id exists already.");
+        }
+        catch ( RepositoryException e )
+        {
+            // OK
+        }
+
+        RemoteRepository clone = repositoryRegistry.clone( remoteRepository, "newCentral" );
+        assertNotNull(clone);
+        assertNull(clone.getContent());
+        assertEquals("Central Repository", clone.getName());
+        assertFalse(remoteRepository==clone);
+
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
new file mode 100644
index 0000000..1fb6133
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
@@ -0,0 +1,169 @@
+package org.apache.archiva.repository.mock;
+
+/*
+ * 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.model.ArchivaArtifact;
+import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.model.ProjectReference;
+import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.repository.ContentNotFoundException;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.layout.LayoutException;
+import org.springframework.stereotype.Service;
+
+import java.nio.file.Path;
+import java.util.Set;
+
+/**
+ * @author Martin Stockhammer <ma...@apache.org>
+ */
+@Service("managedRepositoryContent#mock")
+public class ManagedRepositoryContentMock implements ManagedRepositoryContent
+{
+    private ManagedRepository repository;
+
+    @Override
+    public void deleteVersion( VersionedReference reference ) throws ContentNotFoundException
+    {
+
+    }
+
+    @Override
+    public void deleteArtifact( ArtifactReference artifactReference ) throws ContentNotFoundException
+    {
+
+    }
+
+    @Override
+    public void deleteGroupId( String groupId ) throws ContentNotFoundException
+    {
+
+    }
+
+    @Override
+    public void deleteProject( String namespace, String projectId ) throws RepositoryException
+    {
+
+    }
+
+    @Override
+    public String getId( )
+    {
+        return null;
+    }
+
+    @Override
+    public Set<ArtifactReference> getRelatedArtifacts( ArtifactReference reference ) throws ContentNotFoundException
+    {
+        return null;
+    }
+
+    @Override
+    public String getRepoRoot( )
+    {
+        return null;
+    }
+
+    @Override
+    public ManagedRepository getRepository( )
+    {
+        return repository;
+    }
+
+    @Override
+    public Set<String> getVersions( ProjectReference reference ) throws ContentNotFoundException, LayoutException
+    {
+        return null;
+    }
+
+    @Override
+    public Set<String> getVersions( VersionedReference reference ) throws ContentNotFoundException
+    {
+        return null;
+    }
+
+    @Override
+    public boolean hasContent( ArtifactReference reference )
+    {
+        return false;
+    }
+
+    @Override
+    public boolean hasContent( ProjectReference reference )
+    {
+        return false;
+    }
+
+    @Override
+    public boolean hasContent( VersionedReference reference )
+    {
+        return false;
+    }
+
+    @Override
+    public void setRepository( ManagedRepository repo )
+    {
+        this.repository = repo;
+    }
+
+    @Override
+    public ArtifactReference toArtifactReference( String path ) throws LayoutException
+    {
+        return null;
+    }
+
+    @Override
+    public Path toFile( ArtifactReference reference )
+    {
+        return null;
+    }
+
+    @Override
+    public Path toFile( ArchivaArtifact reference )
+    {
+        return null;
+    }
+
+    @Override
+    public String toMetadataPath( ProjectReference reference )
+    {
+        return null;
+    }
+
+    @Override
+    public String toMetadataPath( VersionedReference reference )
+    {
+        return null;
+    }
+
+    @Override
+    public String toPath( ArtifactReference reference )
+    {
+        return null;
+    }
+
+    @Override
+    public String toPath( ArchivaArtifact reference )
+    {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/mock/RemoteRepositoryContentMock.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/mock/RemoteRepositoryContentMock.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/mock/RemoteRepositoryContentMock.java
new file mode 100644
index 0000000..238b0cf
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/mock/RemoteRepositoryContentMock.java
@@ -0,0 +1,78 @@
+package org.apache.archiva.repository.mock;
+
+/*
+ * 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.model.ArtifactReference;
+import org.apache.archiva.model.RepositoryURL;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RemoteRepositoryContent;
+import org.apache.archiva.repository.layout.LayoutException;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Martin Stockhammer <ma...@apache.org>
+ */
+@Service("remoteRepositoryContent#mock")
+public class RemoteRepositoryContentMock implements RemoteRepositoryContent
+{
+    RemoteRepository repository;
+
+    @Override
+    public String getId( )
+    {
+        return null;
+    }
+
+    @Override
+    public RemoteRepository getRepository( )
+    {
+        return null;
+    }
+
+    @Override
+    public RepositoryURL getURL( )
+    {
+        return null;
+    }
+
+    @Override
+    public void setRepository( RemoteRepository repo )
+    {
+        this.repository = repo;
+    }
+
+    @Override
+    public ArtifactReference toArtifactReference( String path ) throws LayoutException
+    {
+        return null;
+    }
+
+    @Override
+    public String toPath( ArtifactReference reference )
+    {
+        return null;
+    }
+
+    @Override
+    public RepositoryURL toURL( ArtifactReference reference )
+    {
+        return null;
+    }
+}


[02/21] archiva git commit: Adding absolute URI to repositories

Posted by ma...@apache.org.
Adding absolute URI to repositories


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/1026c8ee
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/1026c8ee
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/1026c8ee

Branch: refs/heads/master
Commit: 1026c8eeb87b393f2a259b10d56a366ba1b523e9
Parents: acbcb48
Author: Martin Stockhammer <ma...@apache.org>
Authored: Sun Oct 22 18:22:03 2017 +0200
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Sun Oct 22 18:22:03 2017 +0200

----------------------------------------------------------------------
 .../archiva/repository/AbstractRepository.java  |  10 +
 .../archiva/repository/EditableRepository.java  |   7 +
 .../apache/archiva/repository/Repository.java   |   8 +
 .../archiva/repository/RepositoryProvider.java  |   4 +
 .../archiva/repository/RepositoryRegistry.java  | 208 +++++++++++++++++--
 .../maven2/MavenRepositoryProvider.java         |  89 +++++++-
 .../maven2/MavenRepositoryProviderTest.java     |  35 +++-
 7 files changed, 332 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
index a517d84..4bac7e7 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
@@ -48,6 +48,7 @@ public abstract class AbstractRepository implements EditableRepository
 
     private Locale primaryLocale = new Locale("en_US");
     private URI location;
+    private URI baseUri;
     private Set<URI> failoverLocations = new HashSet<>(  );
     private Set<URI> uFailoverLocations = Collections.unmodifiableSet( failoverLocations );
     private boolean scanned = true;
@@ -114,6 +115,10 @@ public abstract class AbstractRepository implements EditableRepository
         return location;
     }
 
+    public URI getAbsoluteLocation() {
+        return baseUri.resolve( location );
+    }
+
     @Override
     public Set<URI> getFailoverLocations( )
     {
@@ -211,6 +216,11 @@ public abstract class AbstractRepository implements EditableRepository
     }
 
     @Override
+    public void setBaseUri(URI baseUri) {
+        this.baseUri = baseUri;
+    }
+
+    @Override
     public void setSchedulingDefinition(String cronExpression) {
         CronParser parser = new CronParser(CRON_DEFINITION);
         parser.parse(cronExpression).validate();

http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java
index 6715422..b275492 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java
@@ -68,6 +68,13 @@ public interface EditableRepository extends Repository
     void setLocation(URI location) throws UnsupportedURIException;
 
     /**
+     * Sets the base uri for relative location uris.
+     *
+     * @param baseUri
+     */
+    void setBaseUri(URI baseUri);
+
+    /**
      * Adds a failover location for the repository.
      *
      * @param location The location that should be used as failover.

http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java
index 229f30f..68c00d6 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java
@@ -85,6 +85,14 @@ public interface Repository {
      */
     URI getLocation();
 
+    /**
+     * This returns the absolute location uri of this repository. Some repository locations may be relative to
+     * the base repository directory or uri. This returns the absolute path of the repository.
+     * If the location is absolute already this method returns the same URI as getLocation().
+     *
+     * @return the absolute uri of the location.
+     */
+    URI getAbsoluteLocation();
 
     /**
      * A repository may allow additional locations that can be used, if the primary location is not available.

http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
index a818da9..a45c05e 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
@@ -40,10 +40,14 @@ public interface RepositoryProvider
 
     ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration) throws RepositoryException;
 
+    void updateManagedInstance( EditableManagedRepository repo, ManagedRepositoryConfiguration configuration) throws RepositoryException;
+
     ManagedRepository createStagingInstance(ManagedRepositoryConfiguration baseConfiguration) throws RepositoryException;
 
     RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration) throws RepositoryException;
 
+    void updateRemoteInstance(EditableRemoteRepository repo, RemoteRepositoryConfiguration configuration) throws RepositoryException;
+
     RemoteRepositoryConfiguration getRemoteConfiguration(RemoteRepository remoteRepository) throws RepositoryException;
 
     ManagedRepositoryConfiguration getManagedConfiguration(ManagedRepository managedRepository) throws RepositoryException;

http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
index 209fd54..a5f2f03 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
@@ -19,7 +19,13 @@ package org.apache.archiva.repository;
  * under the License.
  */
 
-import org.apache.archiva.configuration.*;
+import org.apache.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ConfigurationEvent;
+import org.apache.archiva.configuration.ConfigurationListener;
+import org.apache.archiva.configuration.IndeterminateConfigurationException;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.archiva.redback.components.registry.RegistryException;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
 import org.slf4j.Logger;
@@ -28,7 +34,12 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -139,6 +150,7 @@ public class RepositoryRegistry implements ConfigurationListener {
             return managedRepos;
         } catch (Throwable e) {
             log.error("Could not initialize repositories from config: {}",e.getMessage(), e );
+            //noinspection unchecked
             return Collections.EMPTY_MAP;
         }
     }
@@ -185,6 +197,7 @@ public class RepositoryRegistry implements ConfigurationListener {
 
             if ( remoteRepoConfigs == null )
             {
+                //noinspection unchecked
                 return Collections.EMPTY_MAP;
             }
 
@@ -210,6 +223,7 @@ public class RepositoryRegistry implements ConfigurationListener {
             return remoteRepos;
         } catch (Throwable e) {
             log.error("Could not initialize remote repositories from config: {}", e.getMessage(), e);
+            //noinspection unchecked
             return Collections.EMPTY_MAP;
         }
     }
@@ -339,23 +353,20 @@ public class RepositoryRegistry implements ConfigurationListener {
     }
 
     /**
-     * Adds a new repository to the current list, or overwrites the repository definition with
+     * Adds a new repository to the current list, or replaces the repository definition with
      * the same id, if it exists already.
      * The change is saved to the configuration immediately.
      *
      * @param managedRepository the new repository.
      * @throws RepositoryException if the new repository could not be saved to the configuration.
      */
-    public void addRepository( ManagedRepository managedRepository ) throws RepositoryException
+    public void putRepository( ManagedRepository managedRepository ) throws RepositoryException
     {
         rwLock.writeLock( ).lock( );
         try
         {
             final String id = managedRepository.getId();
             ManagedRepository originRepo = managedRepositories.put( id, managedRepository );
-            ManagedRepositoryConfiguration originCfg = null;
-            List<ManagedRepositoryConfiguration> cfgList = null;
-            int index = 0;
             try
             {
                 ManagedRepositoryConfiguration newCfg = getProvider( managedRepository.getType( ) ).getManagedConfiguration( managedRepository );
@@ -386,22 +397,104 @@ public class RepositoryRegistry implements ConfigurationListener {
     }
 
     /**
+     * Adds a new repository or updates the repository with the same id, if it exists already.
+     * The configuration is saved immediately.
+     *
+     * @param managedRepositoryConfiguration the repository configuration
+     * @return the updated or created repository
+     * @throws RepositoryException if an error occurs, or the configuration is not valid.
+     */
+    public ManagedRepository putRepository( ManagedRepositoryConfiguration managedRepositoryConfiguration) throws RepositoryException
+    {
+        rwLock.writeLock( ).lock( );
+        try
+        {
+            final String id = managedRepositoryConfiguration.getId();
+            final RepositoryType repositoryType = RepositoryType.valueOf( managedRepositoryConfiguration.getType() );
+            Configuration configuration = getArchivaConfiguration().getConfiguration();
+            ManagedRepository repo = managedRepositories.get(id);
+            ManagedRepositoryConfiguration oldCfg = repo!=null ? getProvider( repositoryType ).getManagedConfiguration( repo ) : null;
+            repo = putRepository( managedRepositoryConfiguration, configuration );
+            try
+            {
+                getArchivaConfiguration().save(configuration);
+            }
+            catch ( IndeterminateConfigurationException | RegistryException e )
+            {
+                if (oldCfg!=null) {
+                    getProvider( repositoryType ).updateManagedInstance( (EditableManagedRepository)repo, oldCfg );
+                }
+                log.error("Could not save the configuration for repository {}: {}", id, e.getMessage(),e );
+                throw new RepositoryException( "Could not save the configuration for repository "+id+": "+e.getMessage() );
+            }
+            return repo;
+        }
+        finally
+        {
+            rwLock.writeLock( ).unlock( );
+        }
+
+    }
+
+    /**
+     * Adds a new repository or updates the repository with the same id. The given configuration object is updated, but
+     * the configuration is not saved.
+     *
+     * @param managedRepositoryConfiguration the new or changed repository configuration
+     * @param configuration the configuration object
+     * @return the new or updated repository
+     * @throws RepositoryException if the configuration cannot be saved or updated
+     */
+    public ManagedRepository putRepository( ManagedRepositoryConfiguration managedRepositoryConfiguration, Configuration configuration) throws RepositoryException
+    {
+        rwLock.writeLock( ).lock( );
+        try
+        {
+            final String id = managedRepositoryConfiguration.getId();
+            final RepositoryType repoType = RepositoryType.valueOf( managedRepositoryConfiguration.getType() );
+            ManagedRepository repo;
+            if (managedRepositories.containsKey( id )) {
+                repo = managedRepositories.get(id);
+                if (repo instanceof EditableManagedRepository)
+                {
+                    getProvider( repoType ).updateManagedInstance( (EditableManagedRepository) repo, managedRepositoryConfiguration );
+                } else {
+                    throw new RepositoryException( "The repository is not editable "+id );
+                }
+            } else
+            {
+                repo = getProvider( repoType ).createManagedInstance( managedRepositoryConfiguration );
+                managedRepositories.put(id, repo);
+            }
+            ManagedRepositoryConfiguration oldCfg;
+            if ((oldCfg = configuration.findManagedRepositoryById( id ))!=null) {
+                configuration.removeManagedRepository( oldCfg );
+            }
+            configuration.addManagedRepository( managedRepositoryConfiguration );
+            return repo;
+        }
+        finally
+        {
+            rwLock.writeLock( ).unlock( );
+        }
+
+
+    }
+
+    /**
      * Adds a remote repository, or overwrites the repository definition with the same id, if it exists already.
      * The modification is saved to the configuration immediately.
      *
      * @param remoteRepository the remote repository to add
      * @throws RepositoryException if an error occurs during configuration save
      */
-    public void addRepository( RemoteRepository remoteRepository ) throws RepositoryException
+    public void putRepository( RemoteRepository remoteRepository ) throws RepositoryException
     {
         rwLock.writeLock( ).lock( );
         try
         {
             final String id = remoteRepository.getId();
             RemoteRepository originRepo = remoteRepositories.put( id, remoteRepository );
-            RemoteRepositoryConfiguration originCfg = null;
-            List<RemoteRepositoryConfiguration> cfgList = null;
-            int index = 0;
             try
             {
                 RemoteRepositoryConfiguration newCfg = getProvider( remoteRepository.getType( ) ).getRemoteConfiguration( remoteRepository );
@@ -432,6 +525,91 @@ public class RepositoryRegistry implements ConfigurationListener {
     }
 
     /**
+     * Adds a new repository or updates the repository with the same id, if it exists already.
+     * The configuration is saved immediately.
+     *
+     * @param remoteRepositoryConfiguration the repository configuration
+     * @return the updated or created repository
+     * @throws RepositoryException if an error occurs, or the configuration is not valid.
+     */
+    public RemoteRepository putRepository( RemoteRepositoryConfiguration remoteRepositoryConfiguration) throws RepositoryException
+    {
+        rwLock.writeLock( ).lock( );
+        try
+        {
+            final String id = remoteRepositoryConfiguration.getId();
+            final RepositoryType repositoryType = RepositoryType.valueOf( remoteRepositoryConfiguration.getType() );
+            Configuration configuration = getArchivaConfiguration().getConfiguration();
+            RemoteRepository repo = remoteRepositories.get(id);
+            RemoteRepositoryConfiguration oldCfg = repo!=null ? getProvider( repositoryType ).getRemoteConfiguration( repo ) : null;
+            repo = putRepository( remoteRepositoryConfiguration, configuration );
+            try
+            {
+                getArchivaConfiguration().save(configuration);
+            }
+            catch ( IndeterminateConfigurationException | RegistryException e )
+            {
+                if (oldCfg!=null) {
+                    getProvider( repositoryType ).updateRemoteInstance( (EditableRemoteRepository)repo, oldCfg );
+                }
+                log.error("Could not save the configuration for repository {}: {}", id, e.getMessage(),e );
+                throw new RepositoryException( "Could not save the configuration for repository "+id+": "+e.getMessage() );
+            }
+            return repo;
+        }
+        finally
+        {
+            rwLock.writeLock( ).unlock( );
+        }
+
+    }
+
+    /**
+     * Adds a new repository or updates the repository with the same id. The given configuration object is updated, but
+     * the configuration is not saved.
+     *
+     * @param remoteRepositoryConfiguration the new or changed repository configuration
+     * @param configuration the configuration object
+     * @return the new or updated repository
+     * @throws RepositoryException if the configuration cannot be saved or updated
+     */
+    public RemoteRepository putRepository( RemoteRepositoryConfiguration remoteRepositoryConfiguration, Configuration configuration) throws RepositoryException
+    {
+        rwLock.writeLock( ).lock( );
+        try
+        {
+            final String id = remoteRepositoryConfiguration.getId();
+            final RepositoryType repoType = RepositoryType.valueOf( remoteRepositoryConfiguration.getType() );
+            RemoteRepository repo;
+            if (remoteRepositories.containsKey( id )) {
+                repo = remoteRepositories.get(id);
+                if (repo instanceof EditableRemoteRepository)
+                {
+                    getProvider( repoType ).updateRemoteInstance( (EditableRemoteRepository) repo, remoteRepositoryConfiguration );
+                } else {
+                    throw new RepositoryException( "The repository is not editable "+id );
+                }
+            } else
+            {
+                repo = getProvider( repoType ).createRemoteInstance( remoteRepositoryConfiguration );
+                remoteRepositories.put(id, repo);
+            }
+            RemoteRepositoryConfiguration oldCfg;
+            if ((oldCfg = configuration.findRemoteRepositoryById( id ))!=null) {
+                configuration.removeRemoteRepository( oldCfg );
+            }
+            configuration.addRemoteRepository( remoteRepositoryConfiguration );
+            return repo;
+        }
+        finally
+        {
+            rwLock.writeLock( ).unlock( );
+        }
+
+
+    }
+
+    /**
      * Removes a managed repository from the registry and configuration, if it exists.
      * The change is saved to the configuration immediately.
      *
@@ -460,9 +638,7 @@ public class RepositoryRegistry implements ConfigurationListener {
             {
                 // Rollback
                 log.error("Could not save config after repository removal: {}", e.getMessage(), e);
-                if (repo!=null) {
-                    managedRepositories.put(repo.getId(), repo);
-                }
+                managedRepositories.put(repo.getId(), repo);
                 throw new RepositoryException( "Could not save configuration after repository removal: "+e.getMessage() );
             }
             finally
@@ -501,9 +677,7 @@ public class RepositoryRegistry implements ConfigurationListener {
             {
                 // Rollback
                 log.error("Could not save config after repository removal: {}", e.getMessage(), e);
-                if (repo!=null) {
-                    remoteRepositories.put(repo.getId(), repo);
-                }
+                remoteRepositories.put(repo.getId(), repo);
                 throw new RepositoryException( "Could not save configuration after repository removal: "+e.getMessage() );
             }
             finally

http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
index c2a7ac7..b1e763a 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
@@ -20,9 +20,21 @@ package org.apache.archiva.repository.maven2;
  */
 
 import org.apache.archiva.configuration.AbstractRepositoryConfiguration;
+import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.repository.*;
+import org.apache.archiva.repository.EditableManagedRepository;
+import org.apache.archiva.repository.EditableRemoteRepository;
+import org.apache.archiva.repository.EditableRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryCredentials;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryProvider;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.UnsupportedURIException;
 import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
@@ -32,8 +44,11 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
+import javax.inject.Inject;
+import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.Duration;
@@ -49,6 +64,10 @@ import java.util.Set;
 public class MavenRepositoryProvider implements RepositoryProvider
 {
 
+
+    @Inject
+    private ArchivaConfiguration archivaConfiguration;
+
     private static final Logger log = LoggerFactory.getLogger( MavenRepositoryProvider.class );
 
     static final Set<RepositoryType> TYPES = new HashSet<>(  );
@@ -105,13 +124,39 @@ public class MavenRepositoryProvider implements RepositoryProvider
     public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration cfg ) throws RepositoryException
     {
         MavenManagedRepository repo = new MavenManagedRepository(cfg.getId() ,cfg.getName());
-        repo.setLocation( getURIFromString( cfg.getLocation() ) );
+        updateManagedInstance( repo, cfg );
+        return repo;
+    }
+
+    @Override
+    public void updateManagedInstance( EditableManagedRepository repo , ManagedRepositoryConfiguration cfg ) throws RepositoryException
+    {
+        try
+        {
+            repo.setLocation( getURIFromString( cfg.getLocation() ) );
+        }
+        catch ( UnsupportedURIException e )
+        {
+            throw new RepositoryException( "The location entry is not a valid uri: "+cfg.getLocation() );
+        }
         setBaseConfig( repo, cfg );
+        Path repoDir = Paths.get(repo.getAbsoluteLocation());
+        if (!Files.exists(repoDir)) {
+            try
+            {
+                Files.createDirectories( repoDir );
+            }
+            catch ( IOException e )
+            {
+                log.error("Could not create directory {} for repository {}", repo.getAbsoluteLocation(), repo.getId(), e);
+                throw new RepositoryException( "Could not create directory for repository "+repo.getAbsoluteLocation() );
+            }
+        }
         repo.setSchedulingDefinition(cfg.getRefreshCronExpression());
         repo.setBlocksRedeployment( cfg.isBlockRedeployments() );
         repo.setScanned( cfg.isScanned() );
         if (cfg.isReleases()) {
-            repo.addActiveReleaseScheme(ReleaseScheme.RELEASE);
+            repo.addActiveReleaseScheme( ReleaseScheme.RELEASE);
         }
         if (cfg.isSnapshots()) {
             repo.addActiveReleaseScheme(ReleaseScheme.SNAPSHOT);
@@ -129,10 +174,9 @@ public class MavenRepositoryProvider implements RepositoryProvider
         artifactCleanupFeature.setDeleteReleasedSnapshots( cfg.isDeleteReleasedSnapshots() );
         artifactCleanupFeature.setRetentionCount( cfg.getRetentionCount() );
         artifactCleanupFeature.setRetentionTime( Period.ofDays( cfg.getRetentionTime() ) );
-
-        return repo;
     }
 
+
     @Override
     public ManagedRepository createStagingInstance( ManagedRepositoryConfiguration baseConfiguration ) throws RepositoryException
     {
@@ -144,6 +188,13 @@ public class MavenRepositoryProvider implements RepositoryProvider
     public RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration cfg ) throws RepositoryException
     {
         MavenRemoteRepository repo = new MavenRemoteRepository( cfg.getId( ), cfg.getName( ) );
+        updateRemoteInstance( repo, cfg );
+        return repo;
+    }
+
+    @Override
+    public void updateRemoteInstance( EditableRemoteRepository repo, RemoteRepositoryConfiguration cfg ) throws RepositoryException
+    {
         setBaseConfig( repo, cfg );
         repo.setCheckPath( cfg.getCheckPath() );
         repo.setSchedulingDefinition( cfg.getRefreshCronExpression() );
@@ -151,9 +202,10 @@ public class MavenRepositoryProvider implements RepositoryProvider
         {
             repo.setLocation(new URI(cfg.getUrl()));
         }
-        catch ( URISyntaxException e )
+        catch ( UnsupportedURIException | URISyntaxException e )
         {
             log.error("Could not set remote url "+cfg.getUrl());
+            throw new RepositoryException( "The url config is not a valid uri: "+cfg.getUrl() );
         }
         repo.setTimeout( Duration.ofSeconds( cfg.getTimeout() ) );
         RemoteIndexFeature remoteIndexFeature = repo.getFeature( RemoteIndexFeature.class ).get();
@@ -189,8 +241,6 @@ public class MavenRepositoryProvider implements RepositoryProvider
             IndexCreationFeature indexCreationFeature = repo.getFeature( IndexCreationFeature.class ).get();
             indexCreationFeature.setIndexPath( getURIFromString( cfg.getIndexDir() ) );
         }
-
-        return repo;
     }
 
     @Override
@@ -321,9 +371,30 @@ public class MavenRepositoryProvider implements RepositoryProvider
         return stagingRepository;
     }
 
-    private void setBaseConfig( EditableRepository repo, AbstractRepositoryConfiguration cfg) {
+    private void setBaseConfig( EditableRepository repo, AbstractRepositoryConfiguration cfg) throws RepositoryException {
+        final String baseUriStr = archivaConfiguration.getConfiguration().getArchivaRuntimeConfiguration().getRepositoryBaseDirectory();
+        try
+        {
+            URI baseUri = new URI(baseUriStr);
+            repo.setBaseUri( baseUri );
+        }
+        catch ( URISyntaxException e )
+        {
+            log.error("Could not set base URI {}: {}", baseUriStr, e.getMessage(), e);
+            throw new RepositoryException( "Could not set base URI "+ baseUriStr);
+        }
         repo.setDescription( repo.getPrimaryLocale(), cfg.getDescription() );
         repo.setLayout( cfg.getLayout() );
 
     }
+
+    public ArchivaConfiguration getArchivaConfiguration( )
+    {
+        return archivaConfiguration;
+    }
+
+    public void setArchivaConfiguration( ArchivaConfiguration archivaConfiguration )
+    {
+        this.archivaConfiguration = archivaConfiguration;
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
index aa5ddef..a43c398 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
@@ -19,9 +19,18 @@ package org.apache.archiva.repository.maven2;
  * under the License.
  */
 
+import org.apache.archiva.common.utils.FileUtils;
 import org.apache.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.ArchivaRuntimeConfiguration;
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ConfigurationListener;
+import org.apache.archiva.configuration.DefaultArchivaConfiguration;
+import org.apache.archiva.configuration.IndeterminateConfigurationException;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.metadata.repository.storage.maven2.conf.MockConfiguration;
+import org.apache.archiva.redback.components.registry.RegistryException;
+import org.apache.archiva.redback.components.registry.RegistryListener;
 import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.PasswordCredentials;
 import org.apache.archiva.repository.ReleaseScheme;
@@ -33,6 +42,7 @@ import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -42,6 +52,8 @@ import org.springframework.test.context.ContextConfiguration;
 import javax.inject.Inject;
 import javax.inject.Named;
 import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.time.Duration;
 import java.time.Period;
 import java.time.temporal.ChronoUnit;
@@ -59,12 +71,25 @@ public class MavenRepositoryProviderTest
 
     MavenRepositoryProvider provider;
 
+    Path repoLocation;
+
 
     @Before
     public void setUp()
         throws Exception
     {
-        provider = new MavenRepositoryProvider();
+        provider = new MavenRepositoryProvider( );
+        MockConfiguration mockConfiguration =new MockConfiguration();
+        mockConfiguration.getConfiguration().setArchivaRuntimeConfiguration( new ArchivaRuntimeConfiguration() );
+        mockConfiguration.getConfiguration().getArchivaRuntimeConfiguration().setRepositoryBaseDirectory( "repositories" );
+        provider.setArchivaConfiguration( mockConfiguration );
+    }
+
+    @After
+    public void cleanUp() {
+        if (repoLocation!=null && Files.exists( repoLocation )) {
+            FileUtils.deleteQuietly( repoLocation );
+        }
     }
 
     @Test
@@ -82,7 +107,8 @@ public class MavenRepositoryProviderTest
         repo.setName("Managed Test Repo 001");
         repo.setDescription( "This is a managed test" );
         repo.setRetentionTime( 37 );
-        repo.setLocation( "file:///test/dir/repository" );
+        repoLocation = Files.createTempDirectory( "test-repo-001");
+        repo.setLocation( repoLocation.toAbsolutePath().toString() );
         repo.setSnapshots( true );
         repo.setReleases( true );
         repo.setRefreshCronExpression( "4 0 0 ? * TUE" );
@@ -99,7 +125,10 @@ public class MavenRepositoryProviderTest
 
         ManagedRepository mr = provider.createManagedInstance( repo );
         assertNotNull(mr.getLocation());
-        assertEquals("file:///test/dir/repository", mr.getLocation().toString());
+        String repoUri = repoLocation.toUri().toString();
+        assertTrue(Files.exists(repoLocation));
+        repoUri = repoUri.substring( 0, repoUri.length()-1 );
+        assertEquals(repoUri, mr.getLocation().toString());
         assertEquals("This is a managed test", mr.getDescription());
         assertEquals("Managed Test Repo 001", mr.getName());
         assertEquals(2, mr.getActiveReleaseSchemes().size());


[05/21] archiva git commit: Changing repository registry and layer

Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
new file mode 100644
index 0000000..834ce5b
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
@@ -0,0 +1,231 @@
+package org.apache.archiva.repository.mock;
+
+/*
+ * 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.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.BasicRemoteRepository;
+import org.apache.archiva.repository.EditableManagedRepository;
+import org.apache.archiva.repository.EditableRemoteRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryCredentials;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryProvider;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
+import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import org.springframework.stereotype.Service;
+
+import java.net.URI;
+import java.time.Duration;
+import java.time.Period;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Just a simple mock class for the repository provider
+ */
+@Service("mockRepositoryProvider")
+public class RepositoryProviderMock implements RepositoryProvider
+{
+
+    private static final Set<RepositoryType> TYPES = new HashSet<>( );
+
+    static
+    {
+        TYPES.add( RepositoryType.MAVEN );
+        TYPES.add( RepositoryType.NPM );
+    }
+
+    @Override
+    public Set<RepositoryType> provides( )
+    {
+        return TYPES;
+    }
+
+    @Override
+    public EditableManagedRepository createManagedInstance( String id, String name )
+    {
+        return new BasicManagedRepository( id, name );
+    }
+
+    @Override
+    public EditableRemoteRepository createRemoteInstance( String id, String name )
+    {
+        return new BasicRemoteRepository( id, name );
+    }
+
+    @Override
+    public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        BasicManagedRepository managedRepository = new BasicManagedRepository( configuration.getId( ), configuration.getName( ) );
+        updateManagedInstance( managedRepository, configuration );
+        return managedRepository;
+    }
+
+
+    @Override
+    public void updateManagedInstance( EditableManagedRepository managedRepository, ManagedRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        try
+        {
+            managedRepository.setName( managedRepository.getPrimaryLocale(), configuration.getName( ) );
+            managedRepository.setLocation( new URI( configuration.getLocation( )==null ?"" : configuration.getLocation() ) );
+            managedRepository.setBaseUri( new URI( "" ) );
+            managedRepository.setBlocksRedeployment( configuration.isBlockRedeployments( ) );
+            managedRepository.setDescription( managedRepository.getPrimaryLocale(), configuration.getDescription( ) );
+            managedRepository.setLayout( configuration.getLayout( ) );
+            managedRepository.setScanned( configuration.isScanned( ) );
+            managedRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
+            if (configuration.isReleases()) {
+                managedRepository.addActiveReleaseScheme( ReleaseScheme.RELEASE );
+            }
+            if (configuration.isSnapshots()) {
+                managedRepository.addActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
+            }
+            ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
+            acf.setRetentionPeriod( Period.ofDays( configuration.getRetentionPeriod( ) ) );
+            acf.setDeleteReleasedSnapshots( configuration.isDeleteReleasedSnapshots( ) );
+            acf.setRetentionCount( configuration.getRetentionCount( ) );
+            IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
+            icf.setIndexPath( new URI( configuration.getIndexDir( ) ) );
+            icf.setSkipPackedIndexCreation( configuration.isSkipPackedIndexCreation( ) );
+            StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
+            srf.setStageRepoNeeded( configuration.isStageRepoNeeded( ) );
+        }
+        catch ( Exception e )
+        {
+            throw new RepositoryException( "Error", e );
+        }
+
+    }
+
+
+    @Override
+    public ManagedRepository createStagingInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        String id = configuration.getId( ) + StagingRepositoryFeature.STAGING_REPO_POSTFIX;
+        BasicManagedRepository managedRepository = new BasicManagedRepository( id, configuration.getName( ) );
+        updateManagedInstance( managedRepository, configuration );
+        return managedRepository;
+    }
+
+    @Override
+    public RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        BasicRemoteRepository remoteRepository = new BasicRemoteRepository( configuration.getId( ), configuration.getName( ) );
+        updateRemoteInstance( remoteRepository, configuration );
+        return remoteRepository;
+    }
+
+    @Override
+    public void updateRemoteInstance( EditableRemoteRepository remoteRepository, RemoteRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        try
+        {
+            remoteRepository.setName( remoteRepository.getPrimaryLocale(), configuration.getName( ) );
+            remoteRepository.setBaseUri( new URI( "" ) );
+            remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), configuration.getDescription( ) );
+            remoteRepository.setLayout( configuration.getLayout( ) );
+            remoteRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
+            remoteRepository.setCheckPath( configuration.getCheckPath( ) );
+            remoteRepository.setExtraHeaders( configuration.getExtraHeaders( ) );
+            remoteRepository.setExtraParameters( configuration.getExtraParameters( ) );
+            remoteRepository.setTimeout( Duration.ofSeconds( configuration.getTimeout( ) ) );
+            char[] pwd = configuration.getPassword()==null ? "".toCharArray() : configuration.getPassword().toCharArray();
+            remoteRepository.setCredentials( new PasswordCredentials( configuration.getUsername( ), pwd ) );
+            remoteRepository.setLocation( new URI( configuration.getUrl( )==null ? "" : configuration.getUrl() ) );
+            RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
+            rif.setDownloadRemoteIndexOnStartup( configuration.isDownloadRemoteIndexOnStartup( ) );
+            rif.setDownloadRemoteIndex( configuration.isDownloadRemoteIndex( ) );
+            rif.setIndexUri( new URI( configuration.getIndexDir( ) ) );
+            rif.setDownloadTimeout( Duration.ofSeconds( configuration.getRemoteDownloadTimeout( ) ) );
+            rif.setProxyId( configuration.getRemoteDownloadNetworkProxyId( ) );
+        }
+        catch ( Exception e )
+        {
+            throw new RepositoryException( "Error", e );
+        }
+
+    }
+
+    @Override
+    public ManagedRepositoryConfiguration getManagedConfiguration( ManagedRepository managedRepository ) throws RepositoryException
+    {
+        ManagedRepositoryConfiguration configuration = new ManagedRepositoryConfiguration( );
+        configuration.setId( managedRepository.getId( ) );
+        configuration.setName(managedRepository.getName());
+        configuration.setLocation( managedRepository.getLocation( ) == null ? "" : managedRepository.getLocation().toString( ) );
+        configuration.setBlockRedeployments( managedRepository.blocksRedeployments( ) );
+        configuration.setDescription( managedRepository.getDescription( ) );
+        configuration.setLayout( managedRepository.getLayout( ) );
+        configuration.setScanned( managedRepository.isScanned( ) );
+        configuration.setRefreshCronExpression( managedRepository.getSchedulingDefinition( ) );
+        configuration.setReleases( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE) );
+        configuration.setSnapshots( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT) );
+        ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
+        configuration.setRetentionPeriod( acf.getRetentionPeriod( ).getDays( ) );
+        configuration.setDeleteReleasedSnapshots( acf.isDeleteReleasedSnapshots( ) );
+        configuration.setRetentionCount( acf.getRetentionCount( ) );
+        IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
+        configuration.setSkipPackedIndexCreation( icf.isSkipPackedIndexCreation( ) );
+        configuration.setIndexDir( icf.getIndexPath( ) == null ? "" : icf.getIndexPath().toString( ) );
+        StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
+        configuration.setStageRepoNeeded( srf.isStageRepoNeeded( ) );
+        return configuration;
+    }
+
+
+    @Override
+    public RemoteRepositoryConfiguration getRemoteConfiguration( RemoteRepository remoteRepository ) throws RepositoryException
+    {
+        RemoteRepositoryConfiguration configuration = new RemoteRepositoryConfiguration( );
+        configuration.setId( remoteRepository.getId( ) );
+        configuration.setName( remoteRepository.getName( ) );
+        configuration.setDescription( remoteRepository.getDescription( ) );
+        configuration.setLayout( remoteRepository.getLayout( ) );
+        configuration.setRefreshCronExpression( remoteRepository.getSchedulingDefinition( ) );
+        configuration.setCheckPath( remoteRepository.getCheckPath( ) );
+        configuration.setExtraHeaders( remoteRepository.getExtraHeaders( ) );
+        configuration.setExtraParameters( remoteRepository.getExtraParameters( ) );
+        configuration.setTimeout( (int) remoteRepository.getTimeout( ).getSeconds( ) );
+        RepositoryCredentials creds = remoteRepository.getLoginCredentials( );
+        if (creds!=null)
+        {
+            PasswordCredentials pwdCreds = (PasswordCredentials) creds;
+            configuration.setUsername( pwdCreds.getUsername( ) );
+            configuration.setPassword( new String( pwdCreds.getPassword( ) ) );
+        }
+        configuration.setUrl( remoteRepository.getLocation( ) == null ? "" : remoteRepository.getLocation().toString( ) );
+        RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
+        configuration.setDownloadRemoteIndex( rif.isDownloadRemoteIndex( ) );
+        configuration.setDownloadRemoteIndexOnStartup( rif.isDownloadRemoteIndexOnStartup( ) );
+        configuration.setIndexDir( rif.getIndexUri( )==null ? "" : rif.getIndexUri().toString( ) );
+        configuration.setRemoteDownloadNetworkProxyId( rif.getProxyId( ) );
+        return configuration;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/org/apache/archiva/repository/RepositoryRegistryTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/org/apache/archiva/repository/RepositoryRegistryTest.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/org/apache/archiva/repository/RepositoryRegistryTest.java
deleted file mode 100644
index 4ce7903..0000000
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/org/apache/archiva/repository/RepositoryRegistryTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.apache.archiva.repository;
-
-/*
- * 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.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * @author Martin Stockhammer <ma...@apache.org>
- */
-public class RepositoryRegistryTest
-{
-    @Before
-    public void setUp( ) throws Exception
-    {
-    }
-
-    @Test
-    public void getRepositories( ) throws Exception
-    {
-    }
-
-    @Test
-    public void getManagedRepositories( ) throws Exception
-    {
-    }
-
-    @Test
-    public void getRemoteRepositories( ) throws Exception
-    {
-    }
-
-    @Test
-    public void getRepository( ) throws Exception
-    {
-    }
-
-    @Test
-    public void getManagedRepository( ) throws Exception
-    {
-    }
-
-    @Test
-    public void getRemoteRepository( ) throws Exception
-    {
-    }
-
-    @Test
-    public void addRepository( ) throws Exception
-    {
-    }
-
-    @Test
-    public void addRepository1( ) throws Exception
-    {
-    }
-
-    @Test
-    public void deleteRepository( ) throws Exception
-    {
-    }
-
-    @Test
-    public void deleteRepository1( ) throws Exception
-    {
-    }
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/resources/archiva.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/resources/archiva.xml b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/resources/archiva.xml
new file mode 100644
index 0000000..308c673
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/resources/archiva.xml
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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>
+  <version>3.0.0</version>
+  <managedRepositories>
+    <managedRepository>
+      <id>internal</id>
+      <name>Archiva Managed Internal Repository</name>
+      <description>This is internal repository.</description>
+      <location>${appserver.base}/repositories/internal</location>
+      <indexDir>${appserver.base}/repositories/internal/.indexer</indexDir>
+      <layout>default</layout>
+      <releases>true</releases>
+      <snapshots>false</snapshots>
+      <blockRedeployments>true</blockRedeployments>
+      <scanned>true</scanned>
+      <refreshCronExpression>0 0 * * * ?</refreshCronExpression>
+      <retentionPeriod>30</retentionPeriod>
+    </managedRepository>
+    <managedRepository>
+      <id>staging</id>
+      <name>Repository with staging</name>
+      <description>This is repository with staging.</description>
+      <location>${appserver.base}/repositories/internal</location>
+      <indexDir>${appserver.base}/repositories/internal/.indexer</indexDir>
+      <layout>default</layout>
+      <releases>true</releases>
+      <snapshots>false</snapshots>
+      <blockRedeployments>true</blockRedeployments>
+      <scanned>true</scanned>
+      <refreshCronExpression>0 0 * * * ?</refreshCronExpression>
+      <retentionPeriod>30</retentionPeriod>
+      <stageRepoNeeded>true</stageRepoNeeded>
+    </managedRepository>
+    <managedRepository>
+      <id>snapshots</id>
+      <name>Archiva Managed Snapshot Repository</name>
+      <location>${appserver.base}/repositories/snapshots</location>
+      <indexDir>${appserver.base}/repositories/snapshots/.indexer</indexDir>
+      <layout>default</layout>
+      <releases>false</releases>
+      <snapshots>true</snapshots>
+      <blockRedeployments>false</blockRedeployments>
+      <scanned>true</scanned>
+      <refreshCronExpression>0 0\,30 * * * ?</refreshCronExpression>
+      <retentionPeriod>30</retentionPeriod>
+    </managedRepository>
+  </managedRepositories>
+  <remoteRepositories>
+    <remoteRepository>
+      <id>central</id>
+      <name>Central Repository</name>
+      <url>https://repo.maven.apache.org/maven2</url>
+      <layout>default</layout>
+      <timeout>35</timeout>
+    </remoteRepository>
+  </remoteRepositories>
+
+  <proxyConnectors>
+    <proxyConnector>
+      <sourceRepoId>internal</sourceRepoId>
+      <targetRepoId>central</targetRepoId>
+      <proxyId/>
+      <policies>
+        <snapshots>disabled</snapshots>
+        <releases>once</releases>
+        <checksum>fix</checksum>
+        <cache-failures>cached</cache-failures>
+      </policies>
+      <whiteListPatterns>
+        <whiteListPattern>**/*</whiteListPattern>
+      </whiteListPatterns>
+    </proxyConnector>
+  </proxyConnectors>
+
+  <legacyArtifactPaths>
+    <legacyArtifactPath>
+        <path>jaxen/jars/jaxen-1.0-FCS-full.jar</path>
+        <artifact>jaxen:jaxen:1.0-FCS:full:jar</artifact>
+    </legacyArtifactPath>
+  </legacyArtifactPaths>
+
+  <repositoryScanning>
+    <fileTypes>
+      <fileType>
+        <id>artifacts</id>
+        <patterns>
+          <pattern>**/*.pom</pattern>
+          <pattern>**/*.jar</pattern>
+          <pattern>**/*.ear</pattern>
+          <pattern>**/*.war</pattern>
+          <pattern>**/*.car</pattern>
+          <pattern>**/*.sar</pattern>
+          <pattern>**/*.mar</pattern>
+          <pattern>**/*.rar</pattern>
+          <pattern>**/*.dtd</pattern>
+          <pattern>**/*.tld</pattern>
+          <pattern>**/*.tar.gz</pattern>
+          <pattern>**/*.tar.bz2</pattern>
+          <pattern>**/*.zip</pattern>
+        </patterns>
+      </fileType>
+      <fileType>
+        <id>indexable-content</id>
+        <patterns>
+          <pattern>**/*.txt</pattern>
+          <pattern>**/*.TXT</pattern>
+          <pattern>**/*.block</pattern>
+          <pattern>**/*.config</pattern>
+          <pattern>**/*.pom</pattern>
+          <pattern>**/*.xml</pattern>
+          <pattern>**/*.xsd</pattern>
+          <pattern>**/*.dtd</pattern>
+          <pattern>**/*.tld</pattern>
+        </patterns>
+      </fileType>
+      <fileType>
+        <id>auto-remove</id>
+        <patterns>
+          <pattern>**/*.bak</pattern>
+          <pattern>**/*~</pattern>
+          <pattern>**/*-</pattern>
+        </patterns>
+      </fileType>
+      <fileType>
+        <id>ignored</id>
+        <patterns>
+          <pattern>**/.htaccess</pattern>
+          <pattern>**/KEYS</pattern>
+          <pattern>**/*.rb</pattern>
+          <pattern>**/*.sh</pattern>
+          <pattern>**/.svn/**</pattern>
+          <pattern>**/.DAV/**</pattern>
+          <pattern>.index/**</pattern>
+          <pattern>.indexer/**</pattern>
+        </patterns>
+      </fileType>
+    </fileTypes>
+    <knownContentConsumers>
+      <knownContentConsumer>create-missing-checksums</knownContentConsumer>
+      <knownContentConsumer>validate-checksum</knownContentConsumer>
+      <knownContentConsumer>validate-signature</knownContentConsumer>
+      <knownContentConsumer>index-content</knownContentConsumer>
+      <knownContentConsumer>auto-remove</knownContentConsumer>
+      <knownContentConsumer>auto-rename</knownContentConsumer>
+      <knownContentConsumer>metadata-updater</knownContentConsumer>
+      <knownContentConsumer>create-archiva-metadata</knownContentConsumer>
+      <knownContentConsumer>duplicate-artifacts</knownContentConsumer>
+      <!--knownContentConsumer>repository-purge</knownContentConsumer-->
+    </knownContentConsumers>
+    <invalidContentConsumers>
+      <invalidContentConsumer>update-db-bad-content</invalidContentConsumer>
+    </invalidContentConsumers>
+  </repositoryScanning>
+
+  <webapp>
+    <ui>
+      <showFindArtifacts>true</showFindArtifacts>
+      <appletFindEnabled>true</appletFindEnabled>
+    </ui>
+  </webapp>
+
+  <redbackRuntimeConfiguration>
+    <userManagerImpls>
+      <userManagerImpl>jpa</userManagerImpl>
+    </userManagerImpls>
+    <rbacManagerImpls>
+      <rbacManagerImpl>cached</rbacManagerImpl>
+    </rbacManagerImpls>
+  </redbackRuntimeConfiguration>
+
+  <archivaDefaultConfiguration>
+    <defaultCheckPaths>
+      <defaultCheckPath>
+        <url>http://download.oracle.com/maven</url>
+        <path>com/sleepycat/je/license.txt</path>
+      </defaultCheckPath>
+      <defaultCheckPath>
+        <url>https://download.oracle.com/maven</url>
+        <path>com/sleepycat/je/license.txt</path>
+      </defaultCheckPath>
+    </defaultCheckPaths>
+  </archivaDefaultConfiguration>
+
+</configuration>

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/resources/log4j2-test.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/resources/log4j2-test.xml b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/resources/log4j2-test.xml
new file mode 100644
index 0000000..3919a98
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/resources/log4j2-test.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ 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 status="debug">
+  <appenders>
+    <Console name="console" target="SYSTEM_OUT">
+      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
+    </Console>
+  </appenders>
+  <loggers>
+
+    <logger name="org.apache.archiva.admin.repository.managed" level="debug"/>
+    <logger name="org.apache.archiva.repository" level="TRACE" />
+
+    <logger name="JPOX" level="error"/>
+
+
+    <logger name="org.springframework" level="error"/>
+
+
+    <root level="info">
+      <appender-ref ref="console"/>
+    </root>
+  </loggers>
+</configuration>
+
+

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6e4a5b4/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/resources/spring-context.xml b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/resources/spring-context.xml
new file mode 100644
index 0000000..2b7748f
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/test/resources/spring-context.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+
+<!--
+  ~ 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.
+  -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xmlns:tx="http://www.springframework.org/schema/tx"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+           http://www.springframework.org/schema/beans/spring-beans.xsd
+           http://www.springframework.org/schema/context 
+           http://www.springframework.org/schema/context/spring-context.xsd
+           http://www.springframework.org/schema/tx
+           http://www.springframework.org/schema/tx/spring-tx.xsd"
+       default-lazy-init="true">
+
+  <context:annotation-config/>
+  <context:component-scan base-package="org.apache.archiva.repository.mock"/>
+
+
+  <bean name="commons-configuration" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry">
+    <property name="properties">
+      <value>
+        <![CDATA[
+        <configuration>
+          <system/>
+          <xml fileName="archiva.xml" config-forceCreate="true"
+               config-optional="true"
+               config-name="org.apache.archiva.base" config-at="org.apache.archiva"/>
+        </configuration>
+        ]]>
+      </value>
+    </property>
+  </bean>
+
+
+</beans>
\ No newline at end of file


[12/21] archiva git commit: Adding utility method for uri conversion

Posted by ma...@apache.org.
Adding utility method for uri conversion


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/3dc85427
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/3dc85427
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/3dc85427

Branch: refs/heads/master
Commit: 3dc85427b33f2a045a9e9b460dc906e1f1e5bba5
Parents: 763991b
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:35:50 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:35:50 2017 +0100

----------------------------------------------------------------------
 .../apache/archiva/common/utils/PathUtil.java    | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/3dc85427/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/archiva/common/utils/PathUtil.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/archiva/common/utils/PathUtil.java b/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/archiva/common/utils/PathUtil.java
index e029e0d..1adb0a7 100644
--- a/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/archiva/common/utils/PathUtil.java
+++ b/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/archiva/common/utils/PathUtil.java
@@ -22,6 +22,7 @@ package org.apache.archiva.common.utils;
 import org.apache.commons.lang.StringUtils;
 
 import java.net.MalformedURLException;
+import java.net.URI;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
@@ -95,4 +96,22 @@ public class PathUtil
 
         return getRelative(basedir, Paths.get(child));
     }
+
+    /**
+     * Returns a path object from the given URI. If the URI has no scheme, the path of the URI is used
+     * for creating the filesystem path.
+     *
+     * @param uri the uri to convert
+     * @return a path object with the given path
+     * @throws java.nio.file.FileSystemNotFoundException if the uri scheme is not known.
+     */
+    public static Path getPathFromUri( URI uri) {
+        if (uri==null) {
+            return Paths.get("");
+        } else if (uri.getScheme()==null) {
+            return Paths.get(uri.getPath());
+        } else {
+            return Paths.get(uri);
+        }
+    }
 }


[11/21] archiva git commit: Adapting maven repository provider to new repository api

Posted by ma...@apache.org.
Adapting maven repository provider to new repository api

Using the new repository interfaces where necessary.


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/763991b3
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/763991b3
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/763991b3

Branch: refs/heads/master
Commit: 763991b3d9f3ca8d04a782d08492b9647953597a
Parents: 4bcf4c0
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:34:34 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:34:34 2017 +0100

----------------------------------------------------------------------
 .../storage/maven2/Maven2RepositoryStorage.java |  2 +-
 .../maven2/ManagedDefaultRepositoryContent.java | 40 +++++----
 .../maven2/RemoteDefaultRepositoryContent.java  | 31 ++++---
 .../maven2/MavenManagedRepository.java          | 28 +++++++
 .../maven2/MavenRemoteRepository.java           |  2 -
 .../maven2/MavenRepositoryProvider.java         | 88 ++++++++++++++++----
 .../archiva/configuration/MockRepoAdmin.java    | 13 ++-
 .../configuration/TestConfiguration.java        | 15 ++++
 .../ManagedDefaultRepositoryContentTest.java    | 15 ++--
 .../RemoteDefaultRepositoryContentTest.java     |  2 +-
 .../storage/maven2/conf/MockConfiguration.java  | 14 ++++
 .../AbstractRepositoryLayerTestCase.java        | 33 ++++----
 .../content/maven2/RepositoryRequestTest.java   |  8 +-
 .../maven2/MavenRepositoryProviderTest.java     | 26 ++----
 .../metadata/Maven2RepositoryStorageTest.java   | 10 ++-
 .../repository/metadata/MetadataToolsTest.java  |  5 +-
 .../resources/spring-context-no-mock-conf.xml   |  6 +-
 .../spring-context-repo-request-test.xml        |  5 ++
 .../src/test/resources/spring-context.xml       |  5 +-
 19 files changed, 241 insertions(+), 107 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
index 31e8c67..359c7eb 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
@@ -724,7 +724,7 @@ public class Maven2RepositoryStorage
 
 
     @Override
-    public String getFilePath( String requestPath, ManagedRepository managedRepository )
+    public String getFilePath( String requestPath, org.apache.archiva.repository.ManagedRepository managedRepository )
     {
         // managedRepository can be null
         // extract artifact reference from url

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
index 1fb858d..298aa5d 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
@@ -19,7 +19,7 @@ package org.apache.archiva.repository.content.maven2;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.configuration.FileTypes;
 import org.apache.archiva.metadata.repository.storage.maven2.DefaultArtifactMappingProvider;
 import org.apache.archiva.model.ArchivaArtifact;
@@ -37,6 +37,7 @@ import org.springframework.stereotype.Service;
 import javax.inject.Inject;
 import javax.inject.Named;
 import java.io.IOException;
+import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -50,7 +51,7 @@ import java.util.stream.Stream;
 /**
  * ManagedDefaultRepositoryContent
  */
-@Service ("managedRepositoryContent#default")
+@Service ("managedRepositoryContent#maven")
 @Scope ("prototype")
 public class ManagedDefaultRepositoryContent
     extends AbstractDefaultRepositoryContent
@@ -60,7 +61,7 @@ public class ManagedDefaultRepositoryContent
     @Named ( "fileTypes" )
     private FileTypes filetypes;
 
-    private ManagedRepository repository;
+    private org.apache.archiva.repository.ManagedRepository repository;
 
     public ManagedDefaultRepositoryContent()
     {
@@ -171,7 +172,7 @@ public class ManagedDefaultRepositoryContent
         throws ContentNotFoundException
     {
         Path artifactFile = toFile( reference );
-        Path repoBase = Paths.get(repository.getLocation()).toAbsolutePath();
+        Path repoBase = PathUtil.getPathFromUri(repository.getLocation()).toAbsolutePath();
         Path repoDir = artifactFile.getParent().toAbsolutePath();
 
         if ( !Files.exists(repoDir))
@@ -215,11 +216,21 @@ public class ManagedDefaultRepositoryContent
     @Override
     public String getRepoRoot()
     {
-        return repository.getLocation();
+        return convertUriToPath( repository.getLocation() );
+    }
+
+    private String convertUriToPath( URI uri ) {
+        if (uri.getScheme()==null) {
+            return Paths.get(uri.getPath()).toString();
+        } else if ("file".equals(uri.getScheme())) {
+            return Paths.get(uri).toString();
+        } else {
+            return uri.toString();
+        }
     }
 
     @Override
-    public ManagedRepository getRepository()
+    public org.apache.archiva.repository.ManagedRepository getRepository()
     {
         return repository;
     }
@@ -244,7 +255,7 @@ public class ManagedDefaultRepositoryContent
             path = path.substring( 0, idx );
         }
 
-        Path repoDir = Paths.get( repository.getLocation(), path );
+        Path repoDir = PathUtil.getPathFromUri( repository.getLocation() ).resolve( path );
 
         if ( !Files.exists(repoDir) )
         {
@@ -297,7 +308,7 @@ public class ManagedDefaultRepositoryContent
             path = path.substring( 0, idx );
         }
 
-        Path repoBase = Paths.get(repository.getLocation());
+        Path repoBase = PathUtil.getPathFromUri(repository.getLocation());
         Path repoDir = repoBase.resolve( path );
 
         if ( !Files.exists(repoDir) )
@@ -370,7 +381,7 @@ public class ManagedDefaultRepositoryContent
     }
 
     @Override
-    public void setRepository( ManagedRepository repository )
+    public void setRepository( org.apache.archiva.repository.ManagedRepository repository )
     {
         this.repository = repository;
     }
@@ -385,9 +396,10 @@ public class ManagedDefaultRepositoryContent
     public ArtifactReference toArtifactReference( String path )
         throws LayoutException
     {
-        if ( ( path != null ) && path.startsWith( repository.getLocation() ) && repository.getLocation().length() > 0 )
+        String repoPath = convertUriToPath( repository.getLocation() );
+        if ( ( path != null ) && path.startsWith( repoPath ) && repoPath.length() > 0 )
         {
-            return super.toArtifactReference( path.substring( repository.getLocation().length() + 1 ) );
+            return super.toArtifactReference( path.substring( repoPath.length() + 1 ) );
         }
 
         return super.toArtifactReference( path );
@@ -407,13 +419,13 @@ public class ManagedDefaultRepositoryContent
     @Override
     public Path toFile( ArtifactReference reference )
     {
-        return Paths.get( repository.getLocation(), toPath( reference ) );
+        return PathUtil.getPathFromUri( repository.getLocation()).resolve( toPath( reference ) );
     }
 
     @Override
     public Path toFile( ArchivaArtifact reference )
     {
-        return Paths.get( repository.getLocation(), toPath( reference ) );
+        return PathUtil.getPathFromUri( repository.getLocation()).resolve( toPath( reference ) );
     }
 
     /**
@@ -436,7 +448,7 @@ public class ManagedDefaultRepositoryContent
             path = path.substring( 0, idx );
         }
 
-        Path repoBase = Paths.get(repository.getLocation()).toAbsolutePath();
+        Path repoBase = PathUtil.getPathFromUri(repository.getLocation()).toAbsolutePath();
         Path repoDir = repoBase.resolve( path );
 
         if ( !Files.exists(repoDir) )

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/content/maven2/RemoteDefaultRepositoryContent.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/content/maven2/RemoteDefaultRepositoryContent.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/content/maven2/RemoteDefaultRepositoryContent.java
index 9bf565b..2942c23 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/content/maven2/RemoteDefaultRepositoryContent.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/content/maven2/RemoteDefaultRepositoryContent.java
@@ -19,9 +19,9 @@ package org.apache.archiva.repository.content.maven2;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.RemoteRepository;
 import org.apache.archiva.model.ArtifactReference;
 import org.apache.archiva.model.RepositoryURL;
+import org.apache.archiva.repository.RemoteRepository;
 import org.apache.archiva.repository.RemoteRepositoryContent;
 import org.apache.archiva.repository.layout.LayoutException;
 import org.springframework.context.annotation.Scope;
@@ -29,10 +29,8 @@ import org.springframework.stereotype.Service;
 
 /**
  * RemoteDefaultRepositoryContent
- *
- *
  */
-@Service( "remoteRepositoryContent#default" )
+@Service( "remoteRepositoryContent#maven" )
 @Scope( "prototype" )
 public class RemoteDefaultRepositoryContent
     extends AbstractDefaultRepositoryContent
@@ -41,21 +39,29 @@ public class RemoteDefaultRepositoryContent
     private RemoteRepository repository;
 
     @Override
-    public String getId()
+    public String getId( )
     {
-        return repository.getId();
+        return repository.getId( );
     }
 
     @Override
-    public RemoteRepository getRepository()
+    public RemoteRepository getRepository( )
     {
         return repository;
     }
 
     @Override
-    public RepositoryURL getURL()
+    public RepositoryURL getURL( )
     {
-        return new RepositoryURL( repository.getUrl() );
+        try
+        {
+            return new RepositoryURL( repository.getLocation( ).toString( ) );
+        }
+        catch ( Exception e )
+        {
+            log.error( "Could not convert location url {}", repository.getLocation( ) );
+            return new RepositoryURL( "" );
+        }
     }
 
     @Override
@@ -74,9 +80,10 @@ public class RemoteDefaultRepositoryContent
     public ArtifactReference toArtifactReference( String path )
         throws LayoutException
     {
-        if ( ( path != null ) && path.startsWith( repository.getUrl() ) )
+
+        if ( ( path != null ) && repository.getLocation()!=null && path.startsWith( repository.getLocation().toString() ) )
         {
-            return super.toArtifactReference( path.substring( repository.getUrl().length() ) );
+            return super.toArtifactReference( path.substring( repository.getLocation().toString().length( ) ) );
         }
 
         return super.toArtifactReference( path );
@@ -85,7 +92,7 @@ public class RemoteDefaultRepositoryContent
     @Override
     public RepositoryURL toURL( ArtifactReference reference )
     {
-        String url = repository.getUrl() + toPath( reference );
+        String url = repository.getLocation( ) + toPath( reference );
         return new RepositoryURL( url );
     }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
index f9b1698..aaad382 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
@@ -19,6 +19,7 @@ package org.apache.archiva.repository.maven2;
  * under the License.
  */
 
+import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.repository.AbstractManagedRepository;
 import org.apache.archiva.repository.ReleaseScheme;
 import org.apache.archiva.repository.RepositoryCapabilities;
@@ -29,7 +30,14 @@ import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RepositoryFeature;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Locale;
@@ -40,6 +48,9 @@ import java.util.Set;
  */
 public class MavenManagedRepository extends AbstractManagedRepository
 {
+
+    private static final Logger log = LoggerFactory.getLogger( MavenManagedRepository.class );
+
     public static final String DEFAULT_LAYOUT = "default";
     public static final String LEGACY_LAYOUT = "legacy";
     private ArtifactCleanupFeature artifactCleanupFeature = new ArtifactCleanupFeature( );
@@ -106,4 +117,21 @@ public class MavenManagedRepository extends AbstractManagedRepository
     {
         return indexCreationFeature.hasIndex();
     }
+
+    @Override
+    public void setLocation( URI location )
+    {
+        super.setLocation( location );
+        Path newLoc = PathUtil.getPathFromUri( location );
+        if (!Files.exists( newLoc )) {
+            try
+            {
+                Files.createDirectories( newLoc );
+            }
+            catch ( IOException e )
+            {
+                log.error("Could not create directory {}",location, e);
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
index 224177d..8c7a8cf 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
@@ -7,11 +7,9 @@ import org.apache.archiva.repository.RepositoryCapabilities;
 import org.apache.archiva.repository.RepositoryType;
 import org.apache.archiva.repository.StandardCapabilities;
 import org.apache.archiva.repository.UnsupportedFeatureException;
-import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.apache.archiva.repository.features.RepositoryFeature;
-import org.apache.archiva.repository.features.StagingRepositoryFeature;
 
 import java.util.Locale;
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
index b1e763a..6bdd0b8 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
@@ -19,6 +19,7 @@ package org.apache.archiva.repository.maven2;
  * under the License.
  */
 
+import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.configuration.AbstractRepositoryConfiguration;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
@@ -94,6 +95,9 @@ public class MavenRepositoryProvider implements RepositoryProvider
     private URI getURIFromString( String uriStr) throws RepositoryException {
         URI uri;
         try {
+            if (StringUtils.isEmpty( uriStr )) {
+                return new URI("");
+            }
             if (uriStr.startsWith("/")) {
                 // only absolute paths are prepended with file scheme
                 uri = new URI("file://"+uriStr);
@@ -117,6 +121,7 @@ public class MavenRepositoryProvider implements RepositoryProvider
                 throw new RepositoryException( "The config entry "+uriStr+" cannot be converted to URI." );
             }
         }
+        log.debug("Setting location uri: {}", uri);
         return uri;
     }
 
@@ -140,8 +145,9 @@ public class MavenRepositoryProvider implements RepositoryProvider
             throw new RepositoryException( "The location entry is not a valid uri: "+cfg.getLocation() );
         }
         setBaseConfig( repo, cfg );
-        Path repoDir = Paths.get(repo.getAbsoluteLocation());
+        Path repoDir = PathUtil.getPathFromUri(repo.getAbsoluteLocation());
         if (!Files.exists(repoDir)) {
+            log.debug("Creating repo directory {}", repoDir);
             try
             {
                 Files.createDirectories( repoDir );
@@ -168,18 +174,40 @@ public class MavenRepositoryProvider implements RepositoryProvider
         IndexCreationFeature indexCreationFeature = repo.getFeature( IndexCreationFeature.class ).get( );
         indexCreationFeature.setSkipPackedIndexCreation( cfg.isSkipPackedIndexCreation() );
         indexCreationFeature.setIndexPath( getURIFromString( cfg.getIndexDir() ) );
+        Path indexPath;
+        if (indexCreationFeature.getIndexPath().getScheme()==null) {
+            indexPath = Paths.get(indexCreationFeature.getIndexPath().getPath());
+        } else {
+            indexPath = Paths.get(indexCreationFeature.getIndexPath());
+        }
+        Path absoluteIndexPath;
+        if (indexPath.isAbsolute()) {
+            absoluteIndexPath = indexPath;
+        } else {
+            absoluteIndexPath = PathUtil.getPathFromUri( repo.getLocation()).resolve(indexCreationFeature.getIndexPath().getPath());
+        }
+        try
+        {
+            Files.createDirectories( absoluteIndexPath );
+        }
+        catch ( IOException e )
+        {
+            log.error("Could not create index directory {}", absoluteIndexPath);
+            throw new RepositoryException( "Could not create index directory "+absoluteIndexPath );
+        }
 
         ArtifactCleanupFeature artifactCleanupFeature = repo.getFeature( ArtifactCleanupFeature.class ).get();
 
         artifactCleanupFeature.setDeleteReleasedSnapshots( cfg.isDeleteReleasedSnapshots() );
         artifactCleanupFeature.setRetentionCount( cfg.getRetentionCount() );
-        artifactCleanupFeature.setRetentionTime( Period.ofDays( cfg.getRetentionTime() ) );
+        artifactCleanupFeature.setRetentionPeriod( Period.ofDays( cfg.getRetentionPeriod() ) );
     }
 
 
     @Override
     public ManagedRepository createStagingInstance( ManagedRepositoryConfiguration baseConfiguration ) throws RepositoryException
     {
+        log.debug("Creating staging instance for {}", baseConfiguration.getId());
         return createManagedInstance( getStageRepoConfig( baseConfiguration ) );
     }
 
@@ -192,6 +220,16 @@ public class MavenRepositoryProvider implements RepositoryProvider
         return repo;
     }
 
+    private String convertUriToPath(URI uri) {
+        if (uri.getScheme()==null) {
+            return uri.getPath();
+        } else if ("file".equals(uri.getScheme())) {
+            return Paths.get(uri).toString();
+        } else {
+            return uri.toString();
+        }
+    }
+
     @Override
     public void updateRemoteInstance( EditableRemoteRepository repo, RemoteRepositoryConfiguration cfg ) throws RepositoryException
     {
@@ -228,7 +266,7 @@ public class MavenRepositoryProvider implements RepositoryProvider
         }
         repo.setExtraHeaders( cfg.getExtraHeaders() );
         repo.setExtraParameters( cfg.getExtraParameters() );
-        PasswordCredentials credentials = new PasswordCredentials();
+        PasswordCredentials credentials = new PasswordCredentials("", new char[0]);
         if (cfg.getPassword()!=null && cfg.getUsername()!=null)
         {
             credentials.setPassword( cfg.getPassword( ).toCharArray( ) );
@@ -273,7 +311,7 @@ public class MavenRepositoryProvider implements RepositoryProvider
         cfg.setRefreshCronExpression( remoteRepository.getSchedulingDefinition() );
 
         IndexCreationFeature indexCreationFeature = remoteRepository.getFeature( IndexCreationFeature.class ).get();
-        cfg.setIndexDir( indexCreationFeature.getIndexPath().toString());
+        cfg.setIndexDir( convertUriToPath( indexCreationFeature.getIndexPath()));
 
         RemoteIndexFeature remoteIndexFeature = remoteRepository.getFeature( RemoteIndexFeature.class ).get();
         cfg.setRemoteIndexUrl( remoteIndexFeature.getIndexUri().toString() );
@@ -301,22 +339,20 @@ public class MavenRepositoryProvider implements RepositoryProvider
         cfg.setId( managedRepository.getId() );
         cfg.setName( managedRepository.getName() );
         cfg.setDescription( managedRepository.getDescription() );
-        cfg.setLocation( managedRepository.getLocation().toString() );
+        cfg.setLocation( convertUriToPath( managedRepository.getLocation() ) );
         cfg.setLayout( managedRepository.getLayout() );
         cfg.setRefreshCronExpression( managedRepository.getSchedulingDefinition() );
         cfg.setScanned( managedRepository.isScanned() );
         cfg.setBlockRedeployments( managedRepository.blocksRedeployments() );
         StagingRepositoryFeature stagingRepositoryFeature = managedRepository.getFeature( StagingRepositoryFeature.class ).get();
         cfg.setStageRepoNeeded(stagingRepositoryFeature.isStageRepoNeeded());
-
-
         IndexCreationFeature indexCreationFeature = managedRepository.getFeature( IndexCreationFeature.class ).get();
-        cfg.setIndexDir( indexCreationFeature.getIndexPath().toString());
+        cfg.setIndexDir(convertUriToPath( indexCreationFeature.getIndexPath() ));
         cfg.setSkipPackedIndexCreation( indexCreationFeature.isSkipPackedIndexCreation() );
 
         ArtifactCleanupFeature artifactCleanupFeature = managedRepository.getFeature( ArtifactCleanupFeature.class ).get();
         cfg.setRetentionCount( artifactCleanupFeature.getRetentionCount());
-        cfg.setRetentionTime( artifactCleanupFeature.getRetentionTime().getDays() );
+        cfg.setRetentionPeriod( artifactCleanupFeature.getRetentionPeriod().getDays() );
         cfg.setDeleteReleasedSnapshots(artifactCleanupFeature.isDeleteReleasedSnapshots());
 
         if (managedRepository.getActiveReleaseSchemes().contains( ReleaseScheme.RELEASE )) {
@@ -340,8 +376,9 @@ public class MavenRepositoryProvider implements RepositoryProvider
         stagingRepository.setLayout( repository.getLayout() );
         stagingRepository.setName( repository.getName() + StagingRepositoryFeature.STAGING_REPO_POSTFIX );
         stagingRepository.setBlockRedeployments( repository.isBlockRedeployments() );
-        stagingRepository.setRetentionTime( repository.getRetentionTime() );
+        stagingRepository.setRetentionPeriod( repository.getRetentionPeriod() );
         stagingRepository.setDeleteReleasedSnapshots( repository.isDeleteReleasedSnapshots() );
+        stagingRepository.setStageRepoNeeded( false );
 
         String path = repository.getLocation();
         int lastIndex = path.replace( '\\', '/' ).lastIndexOf( '/' );
@@ -349,16 +386,28 @@ public class MavenRepositoryProvider implements RepositoryProvider
 
         if ( StringUtils.isNotBlank( repository.getIndexDir() ) )
         {
-            Path indexDir = Paths.get( repository.getIndexDir() );
-            // in case of absolute dir do not use the same
-            if ( indexDir.isAbsolute() )
+            Path indexDir = null;
+            try
             {
-                stagingRepository.setIndexDir( stagingRepository.getLocation() + "/.index" );
+                indexDir = Paths.get( new URI(repository.getIndexDir().startsWith( "file://" ) ? repository.getIndexDir() : "file://"+repository.getIndexDir()) );
+                if ( indexDir.isAbsolute() )
+                {
+                    Path newDir = Paths.get(new URI(stagingRepository.getLocation().startsWith( "file://" ) ? stagingRepository.getLocation() : "file://"+stagingRepository.getLocation())).resolve(".index");
+                    log.debug("Changing index directory {} -> {}", indexDir, newDir);
+                    stagingRepository.setIndexDir( newDir.toString() );
+                }
+                else
+                {
+                    log.debug("Keeping index directory {}", repository.getIndexDir());
+                    stagingRepository.setIndexDir( repository.getIndexDir() );
+                }
             }
-            else
+            catch ( URISyntaxException e )
             {
-                stagingRepository.setIndexDir( repository.getIndexDir() );
+                log.error("Could not parse index path as uri {}", repository.getIndexDir());
+                stagingRepository.setIndexDir( "" );
             }
+            // in case of absolute dir do not use the same
         }
         stagingRepository.setRefreshCronExpression( repository.getRefreshCronExpression() );
         stagingRepository.setReleases( repository.isReleases() );
@@ -372,7 +421,10 @@ public class MavenRepositoryProvider implements RepositoryProvider
     }
 
     private void setBaseConfig( EditableRepository repo, AbstractRepositoryConfiguration cfg) throws RepositoryException {
-        final String baseUriStr = archivaConfiguration.getConfiguration().getArchivaRuntimeConfiguration().getRepositoryBaseDirectory();
+        String baseUriStr = archivaConfiguration.getConfiguration().getArchivaRuntimeConfiguration().getRepositoryBaseDirectory();
+        if (baseUriStr==null) {
+            baseUriStr = Paths.get(System.getProperty( "appserver.base" )).resolve("repositories").normalize().toString();
+        }
         try
         {
             URI baseUri = new URI(baseUriStr);
@@ -383,9 +435,9 @@ public class MavenRepositoryProvider implements RepositoryProvider
             log.error("Could not set base URI {}: {}", baseUriStr, e.getMessage(), e);
             throw new RepositoryException( "Could not set base URI "+ baseUriStr);
         }
+        repo.setName( repo.getPrimaryLocale(), cfg.getName() );
         repo.setDescription( repo.getPrimaryLocale(), cfg.getDescription() );
         repo.setLayout( cfg.getLayout() );
-
     }
 
     public ArchivaConfiguration getArchivaConfiguration( )

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/MockRepoAdmin.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/MockRepoAdmin.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/MockRepoAdmin.java
index a0b7e6a..450cee5 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/MockRepoAdmin.java
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/MockRepoAdmin.java
@@ -42,6 +42,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 /**
@@ -64,7 +65,7 @@ public class MockRepoAdmin
         for ( RemoteRepositoryConfiguration repositoryConfiguration : archivaConfiguration.getConfiguration().getRemoteRepositories() )
         {
             RemoteRepository remoteRepository =
-                new RemoteRepository( repositoryConfiguration.getId(), repositoryConfiguration.getName(),
+                new RemoteRepository( Locale.getDefault(), repositoryConfiguration.getId(), repositoryConfiguration.getName(),
                                       repositoryConfiguration.getUrl(), repositoryConfiguration.getLayout(),
                                       repositoryConfiguration.getUsername(), repositoryConfiguration.getPassword(),
                                       repositoryConfiguration.getTimeout() );
@@ -153,11 +154,11 @@ public class MockRepoAdmin
         {
             if ( StringUtils.equals( repositoryId, repoConfig.getId() ) )
             {
-                return new ManagedRepository( repoConfig.getId(), repoConfig.getName(), repoConfig.getLocation(),
+                return new ManagedRepository( Locale.getDefault(), repoConfig.getId(), repoConfig.getName(), repoConfig.getLocation(),
                                               repoConfig.getLayout(), repoConfig.isSnapshots(), repoConfig.isReleases(),
                                               repoConfig.isBlockRedeployments(), repoConfig.getRefreshCronExpression(),
                                               repoConfig.getIndexDir(), repoConfig.isScanned(),
-                                              repoConfig.getRetentionTime(), repoConfig.getRetentionCount(),
+                                              repoConfig.getRetentionPeriod(), repoConfig.getRetentionCount(),
                                               repoConfig.isDeleteReleasedSnapshots(), false );
             }
         }
@@ -196,6 +197,12 @@ public class MockRepoAdmin
     }
 
     @Override
+    public IndexingContext createIndexContext( org.apache.archiva.repository.ManagedRepository repository ) throws RepositoryAdminException
+    {
+        return null;
+    }
+
+    @Override
     public List<ProxyConnector> getProxyConnectors()
         throws RepositoryAdminException
     {

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java
index 2056299..ce931e3 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java
@@ -4,6 +4,9 @@ import org.apache.archiva.redback.components.registry.RegistryException;
 import org.apache.archiva.redback.components.registry.RegistryListener;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Locale;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -77,4 +80,16 @@ public class TestConfiguration
     {
         // no op
     }
+
+    @Override
+    public Locale getDefaultLocale( )
+    {
+        return Locale.getDefault();
+    }
+
+    @Override
+    public List<Locale.LanguageRange> getLanguagePriorities( )
+    {
+        return Locale.LanguageRange.parse("en,fr,de");
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java
index f8773c6..86749a2 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java
@@ -19,7 +19,6 @@ package org.apache.archiva.metadata.repository.storage.maven2;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.common.utils.VersionComparator;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.FileType;
@@ -27,8 +26,10 @@ import org.apache.archiva.configuration.FileTypes;
 import org.apache.archiva.model.ArtifactReference;
 import org.apache.archiva.model.ProjectReference;
 import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.repository.EditableManagedRepository;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.layout.LayoutException;
+import org.apache.archiva.repository.maven2.MavenManagedRepository;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -36,7 +37,11 @@ import javax.inject.Inject;
 import javax.inject.Named;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -64,7 +69,7 @@ public class ManagedDefaultRepositoryContentTest
     {
         Path repoDir = Paths.get( "src/test/repositories/default-repository" );
 
-        ManagedRepository repository = createRepository( "testRepo", "Unit Test Repo", repoDir );
+        MavenManagedRepository repository = createRepository( "testRepo", "Unit Test Repo", repoDir );
 
         FileType fileType = archivaConfiguration.getConfiguration().getRepositoryScanning().getFileTypes().get( 0 );
         fileType.addPattern( "**/*.xml" );
@@ -176,7 +181,7 @@ public class ManagedDefaultRepositoryContentTest
         // Use the test metadata-repository, which is already setup for
         // These kind of version tests.
         Path repoDir = Paths.get( "src/test/repositories/metadata-repository" );
-        repoContent.getRepository().setLocation( repoDir.toAbsolutePath().toString() );
+        (( EditableManagedRepository)repoContent.getRepository()).setLocation( repoDir.toAbsolutePath().toUri() );
 
         // Request the versions.
         Set<String> testedVersionSet = repoContent.getVersions( reference );
@@ -201,7 +206,7 @@ public class ManagedDefaultRepositoryContentTest
         // Use the test metadata-repository, which is already setup for
         // These kind of version tests.
         Path repoDir = Paths.get( "src/test/repositories/metadata-repository" );
-        repoContent.getRepository().setLocation( repoDir.toAbsolutePath().toString() );
+        ((EditableManagedRepository)repoContent.getRepository()).setLocation( repoDir.toAbsolutePath().toUri() );
 
         // Request the versions.
         Set<String> testedVersionSet = repoContent.getVersions( reference );

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/RemoteDefaultRepositoryContentTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/RemoteDefaultRepositoryContentTest.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/RemoteDefaultRepositoryContentTest.java
index 2145ebc..da3f409 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/RemoteDefaultRepositoryContentTest.java
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/RemoteDefaultRepositoryContentTest.java
@@ -19,8 +19,8 @@ package org.apache.archiva.metadata.repository.storage.maven2;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.RemoteRepository;
 import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.repository.RemoteRepository;
 import org.apache.archiva.repository.RemoteRepositoryContent;
 import org.apache.archiva.repository.layout.LayoutException;
 import org.junit.Before;

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java
index 51479bb..d41cff0 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java
@@ -29,6 +29,8 @@ import org.easymock.IMocksControl;
 import org.springframework.stereotype.Service;
 
 import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 
 import static org.easymock.EasyMock.createNiceControl;
@@ -121,4 +123,16 @@ public class MockConfiguration
     {
         // no op
     }
+
+    @Override
+    public Locale getDefaultLocale( )
+    {
+        return Locale.getDefault();
+    }
+
+    @Override
+    public List<Locale.LanguageRange> getLanguagePriorities( )
+    {
+        return Locale.LanguageRange.parse( "en,fr,de" );
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java
index 02bbf0c..1a6cf7c 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java
@@ -21,6 +21,8 @@ package org.apache.archiva.repository;
 
 import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.model.beans.RemoteRepository;
+import org.apache.archiva.repository.maven2.MavenManagedRepository;
+import org.apache.archiva.repository.maven2.MavenRemoteRepository;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.junit.Rule;
 import org.junit.rules.TestName;
@@ -29,7 +31,10 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.test.context.ContextConfiguration;
 
 import javax.inject.Inject;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.nio.file.Path;
+import java.util.Locale;
 
 /**
  * AbstractRepositoryLayerTestCase
@@ -46,21 +51,17 @@ public abstract class AbstractRepositoryLayerTestCase
     @Inject
     protected ApplicationContext applicationContext;
 
-    protected ManagedRepository createRepository( String id, String name, Path location )
+    protected MavenManagedRepository createRepository( String id, String name, Path location )
     {
-        ManagedRepository repo = new ManagedRepository();
-        repo.setId( id );
-        repo.setName( name );
-        repo.setLocation( location.toAbsolutePath().toString() );
+        MavenManagedRepository repo = new MavenManagedRepository( id, name);
+        repo.setLocation( location.toAbsolutePath().toUri() );
         return repo;
     }
 
-    protected RemoteRepository createRemoteRepository( String id, String name, String url )
+    protected MavenRemoteRepository createRemoteRepository( String id, String name, String url ) throws URISyntaxException
     {
-        RemoteRepository repo = new RemoteRepository();
-        repo.setId( id );
-        repo.setName( name );
-        repo.setUrl( url );
+        MavenRemoteRepository repo = new MavenRemoteRepository(id, name);
+        repo.setLocation( new URI( url ) );
         return repo;
     }
 
@@ -68,10 +69,8 @@ public abstract class AbstractRepositoryLayerTestCase
                                                                        String layout )
         throws Exception
     {
-        ManagedRepository repo = new ManagedRepository();
-        repo.setId( id );
-        repo.setName( name );
-        repo.setLocation( location.toAbsolutePath().toString() );
+        MavenManagedRepository repo = new MavenManagedRepository( id, name );
+        repo.setLocation( location.toAbsolutePath().toUri() );
         repo.setLayout( layout );
 
         ManagedRepositoryContent repoContent =
@@ -84,10 +83,8 @@ public abstract class AbstractRepositoryLayerTestCase
     protected RemoteRepositoryContent createRemoteRepositoryContent( String id, String name, String url, String layout )
         throws Exception
     {
-        RemoteRepository repo = new RemoteRepository();
-        repo.setId( id );
-        repo.setName( name );
-        repo.setUrl( url );
+        MavenRemoteRepository repo = new MavenRemoteRepository(id, name);
+        repo.setLocation( new URI( url ) );
         repo.setLayout( layout );
 
         RemoteRepositoryContent repoContent =

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/content/maven2/RepositoryRequestTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/content/maven2/RepositoryRequestTest.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/content/maven2/RepositoryRequestTest.java
index ee56ed2..17068d6 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/content/maven2/RepositoryRequestTest.java
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/content/maven2/RepositoryRequestTest.java
@@ -19,12 +19,12 @@ package org.apache.archiva.repository.content.maven2;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.common.utils.FileUtils;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.model.ArtifactReference;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.layout.LayoutException;
+import org.apache.archiva.repository.maven2.MavenManagedRepository;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.commons.lang.StringUtils;
 import org.junit.Before;
@@ -514,10 +514,8 @@ public class RepositoryRequestTest
                                                                        String layout )
         throws Exception
     {
-        ManagedRepository repo = new ManagedRepository();
-        repo.setId( id );
-        repo.setName( name );
-        repo.setLocation( location.toAbsolutePath().toString() );
+        MavenManagedRepository repo = new MavenManagedRepository( id, name);
+        repo.setLocation( location.toAbsolutePath().toUri() );
         repo.setLayout( layout );
 
         ManagedRepositoryContent repoContent =

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
index a43c398..54810ce 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
@@ -20,17 +20,10 @@ package org.apache.archiva.repository.maven2;
  */
 
 import org.apache.archiva.common.utils.FileUtils;
-import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.ArchivaRuntimeConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.ConfigurationListener;
-import org.apache.archiva.configuration.DefaultArchivaConfiguration;
-import org.apache.archiva.configuration.IndeterminateConfigurationException;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.archiva.metadata.repository.storage.maven2.conf.MockConfiguration;
-import org.apache.archiva.redback.components.registry.RegistryException;
-import org.apache.archiva.redback.components.registry.RegistryListener;
 import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.PasswordCredentials;
 import org.apache.archiva.repository.ReleaseScheme;
@@ -41,23 +34,16 @@ import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
-import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.sonatype.aether.util.layout.RepositoryLayout;
-import org.springframework.test.context.ContextConfiguration;
 
-import javax.inject.Inject;
-import javax.inject.Named;
 import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.time.Duration;
 import java.time.Period;
 import java.time.temporal.ChronoUnit;
-import java.time.temporal.TemporalUnit;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -106,7 +92,7 @@ public class MavenRepositoryProviderTest
         repo.setId("testm001");
         repo.setName("Managed Test Repo 001");
         repo.setDescription( "This is a managed test" );
-        repo.setRetentionTime( 37 );
+        repo.setRetentionPeriod( 37 );
         repoLocation = Files.createTempDirectory( "test-repo-001");
         repo.setLocation( repoLocation.toAbsolutePath().toString() );
         repo.setSnapshots( true );
@@ -139,7 +125,7 @@ public class MavenRepositoryProviderTest
         assertEquals("4 0 0 ? * TUE", mr.getSchedulingDefinition());
         assertTrue(mr.isScanned());
         ArtifactCleanupFeature artifactCleanupFeature = mr.getFeature( ArtifactCleanupFeature.class ).get();
-        assertEquals( Period.ofDays( 37), artifactCleanupFeature.getRetentionTime());
+        assertEquals( Period.ofDays( 37), artifactCleanupFeature.getRetentionPeriod());
         assertTrue(artifactCleanupFeature.isDeleteReleasedSnapshots());
         assertEquals(33, artifactCleanupFeature.getRetentionCount());
 
@@ -229,7 +215,7 @@ public class MavenRepositoryProviderTest
     public void getManagedConfiguration() throws Exception {
         MavenManagedRepository repo = new MavenManagedRepository( "test01", "My Test repo" );
 
-        repo.setLocation( new URI("https://this.is/a/test") );
+        repo.setLocation( new URI("file:///this.is/a/test") );
         repo.setScanned( true );
         repo.setDescription( repo.getPrimaryLocale(), "This is a description" );
         repo.setLayout( "maven2" );
@@ -244,12 +230,12 @@ public class MavenRepositoryProviderTest
         indexCreationFeature.setIndexPath( new URI("test/.indexes") );
         indexCreationFeature.setSkipPackedIndexCreation( true );
         ArtifactCleanupFeature artifactCleanupFeature = repo.getFeature( ArtifactCleanupFeature.class ).get();
-        artifactCleanupFeature.setRetentionTime( Period.ofDays( 5 ) );
+        artifactCleanupFeature.setRetentionPeriod( Period.ofDays( 5 ) );
         artifactCleanupFeature.setRetentionCount( 7 );
         artifactCleanupFeature.setDeleteReleasedSnapshots( true );
 
         ManagedRepositoryConfiguration cfg = provider.getManagedConfiguration( repo );
-        assertEquals("https://this.is/a/test", cfg.getLocation());
+        assertEquals("/this.is/a/test", cfg.getLocation());
         assertTrue(cfg.isScanned());
         assertEquals( "This is a description", cfg.getDescription() );
         assertEquals("maven2", cfg.getLayout());
@@ -259,7 +245,7 @@ public class MavenRepositoryProviderTest
         assertTrue(cfg.isStageRepoNeeded());
         assertEquals("test/.indexes", cfg.getIndexDir());
         assertTrue(cfg.isSkipPackedIndexCreation());
-        assertEquals(5, cfg.getRetentionTime());
+        assertEquals(5, cfg.getRetentionPeriod());
         assertEquals(7, cfg.getRetentionCount());
         assertTrue(cfg.isDeleteReleasedSnapshots());
         assertTrue(cfg.isReleases());

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java
index ee52f5f..92ea54e 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java
@@ -21,6 +21,7 @@ package org.apache.archiva.repository.metadata;
 
 import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.metadata.repository.storage.RepositoryStorage;
+import org.apache.archiva.repository.maven2.MavenManagedRepository;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.junit.Assert;
 import org.junit.Test;
@@ -29,6 +30,7 @@ import org.springframework.test.context.ContextConfiguration;
 
 import javax.inject.Inject;
 import javax.inject.Named;
+import java.util.Locale;
 
 /**
  * @author Olivier Lamy
@@ -46,17 +48,17 @@ public class Maven2RepositoryStorageTest
     {
         String href = "/repository/internal/org/apache/maven/someartifact.jar";
         Assert.assertEquals( "/org/apache/maven/someartifact.jar",
-                             repositoryStorage.getFilePath( href, new ManagedRepository() ) );
+                             repositoryStorage.getFilePath( href, new MavenManagedRepository( "repo01", "repo01") ) );
 
         href = "repository/internal/org/apache/maven/someartifact.jar";
         Assert.assertEquals( "/org/apache/maven/someartifact.jar",
-                             repositoryStorage.getFilePath( href, new ManagedRepository() ) );
+                             repositoryStorage.getFilePath( href, new MavenManagedRepository( "repo01", "repo01" ) ) );
 
         href = "repository/internal/org/apache/maven/";
-        Assert.assertEquals( "/org/apache/maven/", repositoryStorage.getFilePath( href, new ManagedRepository() ) );
+        Assert.assertEquals( "/org/apache/maven/", repositoryStorage.getFilePath( href, new MavenManagedRepository("repo01", "repo01") ) );
 
         href = "mypath";
-        Assert.assertEquals( "/", repositoryStorage.getFilePath( href, new ManagedRepository() ) );
+        Assert.assertEquals( "/", repositoryStorage.getFilePath( href, new MavenManagedRepository("repo01", "repo01") ) );
     }
 
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/metadata/MetadataToolsTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/metadata/MetadataToolsTest.java b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/metadata/MetadataToolsTest.java
index a258108..4516486 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/metadata/MetadataToolsTest.java
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/metadata/MetadataToolsTest.java
@@ -33,6 +33,7 @@ import org.apache.archiva.repository.AbstractRepositoryLayerTestCase;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.RemoteRepositoryContent;
 import org.apache.archiva.repository.layout.LayoutException;
+import org.apache.archiva.repository.maven2.MavenManagedRepository;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
 import org.custommonkey.xmlunit.DetailedDiff;
@@ -362,7 +363,7 @@ public class MetadataToolsTest
         reference.setArtifactId( artifactId );
         reference.setVersion( version );
 
-        ManagedRepository repo =
+        MavenManagedRepository repo =
             createRepository( "test-repo", "Test Repository: " + name.getMethodName(), repoRootDir );
         ManagedRepositoryContent repoContent =
             applicationContext.getBean( "managedRepositoryContent#default", ManagedRepositoryContent.class );
@@ -614,7 +615,7 @@ public class MetadataToolsTest
 
         Files.createDirectories(repoRoot);
 
-        ManagedRepository repoConfig =
+        MavenManagedRepository repoConfig =
             createRepository( "test-repo", "Test Repository: " + name.getMethodName(), repoRoot );
 
         ManagedRepositoryContent repoContent =

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context-no-mock-conf.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context-no-mock-conf.xml b/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context-no-mock-conf.xml
index f4d7890..8b00cdc 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context-no-mock-conf.xml
+++ b/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context-no-mock-conf.xml
@@ -27,6 +27,10 @@
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
   <context:annotation-config/>
-  <context:component-scan base-package="org.apache.archiva.metadata.repository.storage.maven2.conf"/>
+  <context:component-scan base-package="org.apache.archiva.metadata.repository.storage.maven2.conf,org.apache.archiva.repository.content.maven2"/>
+
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
+
 
 </beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context-repo-request-test.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context-repo-request-test.xml b/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context-repo-request-test.xml
index b8ebc83..1601f2a 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context-repo-request-test.xml
+++ b/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context-repo-request-test.xml
@@ -27,6 +27,7 @@
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
   <context:property-placeholder system-properties-mode="OVERRIDE"/>
+  <context:component-scan base-package="org.apache.archiva.repository.content.maven2" />
   <bean name="archivaConfiguration#repo-request-test" class="org.apache.archiva.configuration.DefaultArchivaConfiguration">
     <property name="registry" ref="registry#configured"/>
   </bean>
@@ -34,6 +35,10 @@
   <alias name="archivaConfiguration#repo-request-test" alias="archivaConfiguration#default"/>
   <alias name="archivaConfiguration#repo-request-test" alias="archivaConfiguration"/>
 
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
+
+
   <bean name="registry#configured" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry">
     <property name="properties">
       <value>

http://git-wip-us.apache.org/repos/asf/archiva/blob/763991b3/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context.xml b/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context.xml
index ee8e343..5f445d7 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context.xml
+++ b/archiva-modules/plugins/maven2-repository/src/test/resources/spring-context.xml
@@ -28,9 +28,12 @@
        default-lazy-init="true">
 
   <context:annotation-config/>
-  <context:component-scan base-package="org.apache.archiva.configuration,org.apache.archiva.metadata.repository"/>
+  <context:component-scan base-package="org.apache.archiva.configuration,org.apache.archiva.metadata.repository,org.apache.archiva.repository.content.maven2"/>
+
+
   <alias name="archivaConfiguration#test" alias="archivaConfiguration#default"/>
   <alias name="archivaConfiguration#test" alias="archivaConfiguration"/>
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
 
   <alias name="metadataResolver#test" alias="metadataResolver#default"/>
 </beans>
\ No newline at end of file


[04/21] archiva git commit: Changed configuration model

Posted by ma...@apache.org.
Changed configuration model


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/55f72f28
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/55f72f28
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/55f72f28

Branch: refs/heads/master
Commit: 55f72f28244b22a347b84a9868bbc54a0195714c
Parents: 89f7aa3
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:26:06 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:26:06 2017 +0100

----------------------------------------------------------------------
 .../archiva-configuration/src/main/mdo/configuration.mdo       | 6 ++++--
 .../org/apache/archiva/configuration/default-archiva.xml       | 4 ++--
 .../archiva-configuration/src/test/conf/archiva-1.3.xml        | 4 ++--
 .../org/apache/archiva/configuration/test-default-archiva.xml  | 4 ++--
 4 files changed, 10 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/55f72f28/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo b/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
index b6acf53..91dbb65 100644
--- a/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
@@ -707,11 +707,11 @@
           <defaultValue>2</defaultValue>
         </field>
         <field>
-          <name>retentionTime</name>
+          <name>retentionPeriod</name>
           <version>1.0.0+</version>
           <type>int</type>
           <description>
-            The number of days old which will be the basis for removing a snapshot.
+            The number of days after which snapshots will be removed.
           </description>
           <defaultValue>100</defaultValue>
         </field>
@@ -1550,12 +1550,14 @@
           <name>defaultLanguage</name>
           <type>String</type>
           <version>3.0.0+</version>
+          <defaultValue>en-US</defaultValue>
           <description>The default language used for setting internationalized strings.</description>
         </field>
         <field>
           <name>languageRange</name>
           <type>String</type>
           <version>3.0.0+</version>
+          <defaultValue>en,fr,de</defaultValue>
           <description>Comma separated list of language patterns. Sorted by priority descending. Used for display of internationalized strings.</description>
         </field>
       </fields>

http://git-wip-us.apache.org/repos/asf/archiva/blob/55f72f28/archiva-modules/archiva-base/archiva-configuration/src/main/resources/org/apache/archiva/configuration/default-archiva.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/resources/org/apache/archiva/configuration/default-archiva.xml b/archiva-modules/archiva-base/archiva-configuration/src/main/resources/org/apache/archiva/configuration/default-archiva.xml
index 9a34ace..c5acb80 100644
--- a/archiva-modules/archiva-base/archiva-configuration/src/main/resources/org/apache/archiva/configuration/default-archiva.xml
+++ b/archiva-modules/archiva-base/archiva-configuration/src/main/resources/org/apache/archiva/configuration/default-archiva.xml
@@ -13,7 +13,7 @@
       <blockRedeployments>true</blockRedeployments>
       <scanned>true</scanned>
       <refreshCronExpression>0 0 * * * ?</refreshCronExpression>
-      <retentionTime>30</retentionTime>
+      <retentionPeriod>30</retentionPeriod>
     </managedRepository>
     <managedRepository>
       <id>snapshots</id>
@@ -26,7 +26,7 @@
       <blockRedeployments>false</blockRedeployments>
       <scanned>true</scanned>
       <refreshCronExpression>0 0\,30 * * * ?</refreshCronExpression>
-      <retentionTime>30</retentionTime>
+      <retentionPeriod>30</retentionPeriod>
     </managedRepository>
   </managedRepositories>
   <remoteRepositories>

http://git-wip-us.apache.org/repos/asf/archiva/blob/55f72f28/archiva-modules/archiva-base/archiva-configuration/src/test/conf/archiva-1.3.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/test/conf/archiva-1.3.xml b/archiva-modules/archiva-base/archiva-configuration/src/test/conf/archiva-1.3.xml
index 4462b6d..8575ebd 100644
--- a/archiva-modules/archiva-base/archiva-configuration/src/test/conf/archiva-1.3.xml
+++ b/archiva-modules/archiva-base/archiva-configuration/src/test/conf/archiva-1.3.xml
@@ -103,7 +103,7 @@
 <managedRepository>
 <location>${appserver.base}/data/repositories/internal</location>
 <blockRedeployments>true</blockRedeployments>
-<retentionTime>30</retentionTime>
+<retentionPeriod>30</retentionPeriod>
 <id>internal</id>
 <name>Archiva Managed Internal Repository</name>
 </managedRepository>
@@ -112,7 +112,7 @@
 <releases>false</releases>
 <snapshots>true</snapshots>
 <refreshCronExpression>0 0\,30 * * * ?</refreshCronExpression>
-<retentionTime>30</retentionTime>
+<retentionPeriod>30</retentionPeriod>
 <id>snapshots</id>
 <name>Archiva Managed Snapshot Repository</name>
 </managedRepository>

http://git-wip-us.apache.org/repos/asf/archiva/blob/55f72f28/archiva-modules/archiva-base/archiva-configuration/src/test/resources/org/apache/archiva/configuration/test-default-archiva.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-configuration/src/test/resources/org/apache/archiva/configuration/test-default-archiva.xml b/archiva-modules/archiva-base/archiva-configuration/src/test/resources/org/apache/archiva/configuration/test-default-archiva.xml
index bb3d803..dc1215e 100755
--- a/archiva-modules/archiva-base/archiva-configuration/src/test/resources/org/apache/archiva/configuration/test-default-archiva.xml
+++ b/archiva-modules/archiva-base/archiva-configuration/src/test/resources/org/apache/archiva/configuration/test-default-archiva.xml
@@ -10,7 +10,7 @@
       <snapshots>false</snapshots>
       <scanned>true</scanned>
       <refreshCronExpression>0 0 * * * ?</refreshCronExpression>
-      <retentionTime>30</retentionTime>
+      <retentionPeriod>30</retentionPeriod>
     </managedRepository>
     <managedRepository>
       <id>snapshots</id>
@@ -21,7 +21,7 @@
       <snapshots>true</snapshots>
       <scanned>true</scanned>
       <refreshCronExpression>0 0\,30 * * * ?</refreshCronExpression>
-      <retentionTime>30</retentionTime>
+      <retentionPeriod>30</retentionPeriod>
     </managedRepository>
   </managedRepositories>
   <remoteRepositories>


[18/21] archiva git commit: Adapting the web modules to the new repository api

Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/ArchivaDavResourceFactoryTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/ArchivaDavResourceFactoryTest.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/ArchivaDavResourceFactoryTest.java
index dbfbc1d..ba1fdeb 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/ArchivaDavResourceFactoryTest.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/ArchivaDavResourceFactoryTest.java
@@ -34,8 +34,10 @@ import org.apache.archiva.configuration.Configuration;
 import org.apache.archiva.configuration.RepositoryGroupConfiguration;
 import org.apache.archiva.proxy.DefaultRepositoryProxyConnectors;
 import org.apache.archiva.proxy.model.ProxyFetchResult;
+import org.apache.archiva.repository.EditableManagedRepository;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.RepositoryContentFactory;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.content.maven2.ManagedDefaultRepositoryContent;
 import org.apache.archiva.repository.content.maven2.RepositoryRequest;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
@@ -44,12 +46,15 @@ import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.DavResourceLocator;
 import org.apache.jackrabbit.webdav.DavServletRequest;
 import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.easymock.EasyMock;
 import org.easymock.IMocksControl;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
 import org.springframework.context.ApplicationContext;
+import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.test.context.ContextConfiguration;
 
 import javax.inject.Inject;
@@ -58,6 +63,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 
 import static org.easymock.EasyMock.*;
 
@@ -113,6 +119,9 @@ public class ArchivaDavResourceFactoryTest
     DefaultManagedRepositoryAdmin defaultManagedRepositoryAdmin;
 
     @Inject
+    RepositoryRegistry repositoryRegistry;
+
+    @Inject
     RemoteRepositoryAdmin remoteRepositoryAdmin;
 
 
@@ -138,13 +147,18 @@ public class ArchivaDavResourceFactoryTest
         archivaConfiguration = archivaConfigurationControl.createMock( ArchivaConfiguration.class );
 
         config = new Configuration();
-        expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 5, 20 );
+        expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 2, 20 );
+        expect (archivaConfiguration.getDefaultLocale()).andReturn( Locale.getDefault() ).anyTimes();
+        archivaConfiguration.addListener( EasyMock.anyObject(  ) );
+        expectLastCall().times(0, 4);
         archivaConfiguration.save( config );
 
-        expectLastCall().times( 1, 4 );
+        expectLastCall().times( 0, 4 );
         archivaConfigurationControl.replay();
 
         defaultManagedRepositoryAdmin.setArchivaConfiguration( archivaConfiguration );
+        repositoryRegistry.setArchivaConfiguration( archivaConfiguration );
+        repositoryRegistry.reload();
         ( (DefaultRepositoryCommonValidator) defaultManagedRepositoryAdmin.getRepositoryCommonValidator() ).setArchivaConfiguration(
             archivaConfiguration );
         if ( defaultManagedRepositoryAdmin.getManagedRepository( RELEASES_REPO ) == null )
@@ -184,11 +198,12 @@ public class ArchivaDavResourceFactoryTest
         resourceFactory.setConnectors( new OverridingRepositoryProxyConnectors() );
         resourceFactory.setRemoteRepositoryAdmin( remoteRepositoryAdmin );
         resourceFactory.setManagedRepositoryAdmin( defaultManagedRepositoryAdmin );
+        resourceFactory.setRepositoryRegistry( repositoryRegistry );
     }
 
     private ManagedRepository createManagedRepository( String id, String location, String layout )
     {
-        ManagedRepository repoConfig = new ManagedRepository();
+        ManagedRepository repoConfig = new ManagedRepository( Locale.getDefault());
         repoConfig.setId( id );
         repoConfig.setName( id );
         repoConfig.setLocation( location );
@@ -201,8 +216,12 @@ public class ArchivaDavResourceFactoryTest
         throws RepositoryAdminException
     {
         ManagedRepositoryContent repoContent = new ManagedDefaultRepositoryContent();
-        repoContent.setRepository( defaultManagedRepositoryAdmin.getManagedRepository( repoId ) );
-
+        org.apache.archiva.repository.ManagedRepository repo = repositoryRegistry.getManagedRepository( repoId );
+        repoContent.setRepository( repo );
+        if (repo!=null && repo instanceof EditableManagedRepository)
+        {
+            ( (EditableManagedRepository) repo ).setContent( repoContent );
+        }
         return repoContent;
     }
 
@@ -466,9 +485,7 @@ public class ArchivaDavResourceFactoryTest
         {
             archivaConfigurationControl.reset();
 
-            expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 2 );
-
-            expect( repoFactory.getManagedRepositoryContent( INTERNAL_REPO ) ).andReturn( internalRepo );
+            expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 1 );
 
             expect( request.getMethod() ).andReturn( "GET" ).times( 4 );
 
@@ -561,6 +578,9 @@ public class ArchivaDavResourceFactoryTest
     public void testRequestMetadataRepoIsLegacy()
         throws Exception
     {
+        ManagedRepositoryContent legacyRepo = createManagedRepositoryContent( LEGACY_REPO );
+        ConfigurableListableBeanFactory beanFactory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory();
+        beanFactory.registerSingleton("managedRepositoryContent#legacy", legacyRepo);
         defaultManagedRepositoryAdmin.addManagedRepository(
             createManagedRepository( LEGACY_REPO, Paths.get( "target/test-classes/" + LEGACY_REPO ).toString(),
                                      "legacy" ), false, null );
@@ -568,7 +588,6 @@ public class ArchivaDavResourceFactoryTest
             new ArchivaDavResourceLocator( "", "/repository/" + LEGACY_REPO + "/eclipse/maven-metadata.xml",
                                            LEGACY_REPO, new ArchivaDavLocatorFactory() );
 
-        ManagedRepositoryContent legacyRepo = createManagedRepositoryContent( LEGACY_REPO );
 
         // use actual object (this performs the isMetadata, isDefault and isSupportFile check!)
         RepositoryRequest repoRequest = new RepositoryRequest( );

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/DavResourceTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/DavResourceTest.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/DavResourceTest.java
index 0559f64..4802776 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/DavResourceTest.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/DavResourceTest.java
@@ -20,13 +20,24 @@ package org.apache.archiva.webdav;
  */
 
 import junit.framework.TestCase;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.common.filelock.FileLockManager;
 import org.apache.archiva.repository.events.AuditListener;
+import org.apache.archiva.repository.maven2.MavenManagedRepository;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.archiva.webdav.util.MimeTypes;
-import org.apache.jackrabbit.webdav.*;
-import org.apache.jackrabbit.webdav.lock.*;
+import org.apache.jackrabbit.webdav.DavException;
+import org.apache.jackrabbit.webdav.DavResource;
+import org.apache.jackrabbit.webdav.DavResourceFactory;
+import org.apache.jackrabbit.webdav.DavResourceLocator;
+import org.apache.jackrabbit.webdav.DavServletRequest;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.DavSession;
+import org.apache.jackrabbit.webdav.lock.ActiveLock;
+import org.apache.jackrabbit.webdav.lock.LockInfo;
+import org.apache.jackrabbit.webdav.lock.LockManager;
+import org.apache.jackrabbit.webdav.lock.Scope;
+import org.apache.jackrabbit.webdav.lock.SimpleLockManager;
+import org.apache.jackrabbit.webdav.lock.Type;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -66,7 +77,7 @@ public class DavResourceTest
 
     private LockManager lockManager;
 
-    private ManagedRepository repository = new ManagedRepository();
+    private MavenManagedRepository repository = new MavenManagedRepository( "repo001", "repo001");
     
     @Override
     @Before

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletRepositoryGroupTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletRepositoryGroupTest.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletRepositoryGroupTest.java
index 3ee62a1..c07ce0d 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletRepositoryGroupTest.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletRepositoryGroupTest.java
@@ -125,6 +125,7 @@ public class RepositoryServletRepositoryGroupTest
         configuration.removeManagedRepository( managedRepositoryConfiguration );
         org.apache.archiva.common.utils.FileUtils.deleteDirectory( repoRootInvalid );
 
+        repositoryRegistry.reload();
         saveConfiguration( archivaConfiguration );
 
         startRepository();

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletSecurityTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletSecurityTest.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletSecurityTest.java
index aabd74c..f6d6f26 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletSecurityTest.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/RepositoryServletSecurityTest.java
@@ -33,6 +33,7 @@ import org.apache.archiva.redback.system.DefaultSecuritySession;
 import org.apache.archiva.redback.system.SecuritySession;
 import org.apache.archiva.redback.users.User;
 import org.apache.archiva.redback.users.memory.SimpleUser;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.audit.TestAuditListener;
 import org.apache.archiva.security.ServletAuthenticator;
 import org.apache.archiva.security.common.ArchivaRoleConstants;
@@ -86,6 +87,9 @@ public class RepositoryServletSecurityTest
     @Inject
     protected ArchivaConfiguration archivaConfiguration;
 
+    @Inject
+    protected RepositoryRegistry repositoryRegistry;
+
     private DavSessionProvider davSessionProvider;
 
     private IMocksControl servletAuthControl;
@@ -188,6 +192,7 @@ public class RepositoryServletSecurityTest
     protected void saveConfiguration( ArchivaConfiguration archivaConfiguration )
         throws Exception
     {
+        repositoryRegistry.reload();
         archivaConfiguration.save( archivaConfiguration.getConfiguration() );        
     }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webdav/src/test/resources/repository-archiva.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/resources/repository-archiva.xml b/archiva-modules/archiva-web/archiva-webdav/src/test/resources/repository-archiva.xml
index 997d62b..d3b9733 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/resources/repository-archiva.xml
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/resources/repository-archiva.xml
@@ -20,7 +20,7 @@
 
 <configuration>
 
-  <version>2</version>
+  <version>3.0.0</version>
   
   <repositoryScanning>
     <fileTypes>

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webdav/src/test/resources/spring-context-servlet-security-test.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/resources/spring-context-servlet-security-test.xml b/archiva-modules/archiva-web/archiva-webdav/src/test/resources/spring-context-servlet-security-test.xml
index 9f38b82..6938160 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/resources/spring-context-servlet-security-test.xml
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/resources/spring-context-servlet-security-test.xml
@@ -31,7 +31,10 @@
 
   <context:annotation-config/>
   <context:component-scan
-      base-package="org.apache.archiva.redback.keys,org.apache.archiva.webdav,org.apache.archiva.metadata.repository,org.apache.archiva.webdav.util,org.apache.archiva.common.plexusbridge"/>
+      base-package="org.apache.archiva.redback.keys,org.apache.archiva.webdav,org.apache.archiva.metadata.repository,org.apache.archiva.webdav.util,org.apache.archiva.common.plexusbridge,org.apache.archiva.repository.content.maven2,org.apache.archiva.repository"/>
+
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
 
   <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
     <property name="properties">

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webdav/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/resources/spring-context.xml b/archiva-modules/archiva-web/archiva-webdav/src/test/resources/spring-context.xml
index 5601082..28f59f7 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/resources/spring-context.xml
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/resources/spring-context.xml
@@ -30,7 +30,10 @@
   <context:property-placeholder system-properties-mode="OVERRIDE"/>
 
   <context:annotation-config/>
-  <context:component-scan base-package="org.apache.archiva.redback.keys,org.apache.archiva.webdav,org.apache.archiva.metadata.repository"/>
+  <context:component-scan base-package="org.apache.archiva.redback.keys,org.apache.archiva.webdav,org.apache.archiva.metadata.repository,org.apache.archiva.repository,org.apache.archiva.repository.content.maven2"/>
+
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
 
   <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
     <property name="properties">


[08/21] archiva git commit: Using RepositoryRegistry in repository admin implementations

Posted by ma...@apache.org.
Using RepositoryRegistry in repository admin implementations

Switching to the repository registry to retrieve repository data.
Indexing is currently kept in the admin part, but will be moved in the future
to the registry.


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/fd51964c
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/fd51964c
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/fd51964c

Branch: refs/heads/master
Commit: fd51964c13cdeb633aad1944c0b95b1a571681e2
Parents: d6e4a5b
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:30:35 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:30:35 2017 +0100

----------------------------------------------------------------------
 .../archiva-repository-admin-api/pom.xml        |   4 +
 .../admin/model/beans/AbstractRepository.java   | 124 +++++-
 .../admin/model/beans/ManagedRepository.java    |  38 +-
 .../admin/model/beans/RemoteRepository.java     |  20 +-
 .../model/managed/ManagedRepositoryAdmin.java   |   1 +
 .../archiva-repository-admin-default/pom.xml    |   4 +
 .../repository/AbstractRepositoryAdmin.java     |  44 ++
 .../managed/DefaultManagedRepositoryAdmin.java  | 422 +++++++++----------
 .../networkproxy/DefaultNetworkProxyAdmin.java  |  28 +-
 .../remote/DefaultRemoteRepositoryAdmin.java    | 202 +++++----
 .../repository/AbstractRepositoryAdminTest.java |   8 +-
 .../managed/ManagedRepositoryAdminTest.java     |  46 +-
 .../ProxyConnectorRuleAdminTest.java            |   5 +-
 .../src/test/resources/default-archiva.xml      | 185 ++++++++
 .../src/test/resources/spring-context.xml       |   5 +-
 15 files changed, 769 insertions(+), 367 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/pom.xml b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/pom.xml
index b7e8ad2..bf2868c 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/pom.xml
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/pom.xml
@@ -30,6 +30,10 @@
   <name>Archiva Base :: Repository Admin Api</name>
   <dependencies>
     <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-repository-layer</artifactId>
+    </dependency>
+    <dependency>
       <groupId>commons-collections</groupId>
       <artifactId>commons-collections</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/AbstractRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/AbstractRepository.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/AbstractRepository.java
index 7438f4f..0f2ce93 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/AbstractRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/AbstractRepository.java
@@ -19,6 +19,12 @@ package org.apache.archiva.admin.model.beans;
  */
 
 import java.io.Serializable;
+import java.security.KeyStore;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author Olivier Lamy
@@ -28,29 +34,51 @@ public class AbstractRepository
     implements Serializable
 {
 
+    private Locale defaultLocale = Locale.getDefault();
+
+    private String type;
+
     private String id;
 
-    private String name;
+    /*
+     * @since 3.0.0 as Map
+     */
+    private Map<Locale, String> name = new HashMap<>(  );
+
+    /*
+     * @since 3.0.0 as Map
+     */
+    private Map<Locale, String> description = new HashMap<>(  );
 
     private String layout = "default";
 
     private String indexDirectory;
 
-    /**
-     * @since 1.4-M3
-     */
-    private String description;
+    private String toStringCache = null;
+
 
     public AbstractRepository()
     {
         // no op
     }
 
+    public AbstractRepository(Locale defaultLocale) {
+        this.defaultLocale = defaultLocale;
+    }
+
+    public AbstractRepository( Locale defaultLocale,  String id, String name, String layout )
+    {
+        this.defaultLocale = defaultLocale;
+        setId(id);
+        setName(name);
+        setLayout(layout);
+    }
+
     public AbstractRepository( String id, String name, String layout )
     {
-        this.id = id;
-        this.name = name;
-        this.layout = layout;
+        setId(id);
+        setName(name);
+        setLayout(layout);
     }
 
     public String getId()
@@ -60,17 +88,32 @@ public class AbstractRepository
 
     public void setId( String id )
     {
+        this.toStringCache=null;
         this.id = id;
     }
 
     public String getName()
     {
-        return name;
+        return name.get(defaultLocale);
+    }
+
+    public Map<String,String> getNames() {
+        if (this.name==null) {
+            return Collections.emptyMap();
+        }
+        return this.name.entrySet().stream().collect( Collectors.toMap( e -> e.getKey().toLanguageTag(), Map.Entry::getValue ) );
     }
 
     public void setName( String name )
     {
-        this.name = name;
+        this.toStringCache=null;
+        this.name.put(defaultLocale, name);
+    }
+
+    public void setName( String languageTag, String name ) {
+        this.toStringCache=null;
+        final Locale loc = Locale.forLanguageTag( languageTag );
+        this.name.put(loc, name);
     }
 
     public String getLayout()
@@ -80,6 +123,7 @@ public class AbstractRepository
 
     public void setLayout( String layout )
     {
+        this.toStringCache=null;
         this.layout = layout;
     }
 
@@ -97,12 +141,28 @@ public class AbstractRepository
 
     public String getDescription()
     {
-        return description;
+        return this.description.get(defaultLocale);
     }
 
+    public Map<String,String> getDescriptions() {
+        if (this.description==null) {
+            return Collections.emptyMap();
+        }
+        return this.description.entrySet().stream().filter( e -> e!=null && e.getKey()!=null )
+            .collect( Collectors.toMap( e -> e.getKey().toLanguageTag(), e -> e.getValue()==null ? "" : e.getValue() ) );
+    }
+
+
     public void setDescription( String description )
     {
-        this.description = description;
+        this.toStringCache=null;
+        this.description.put(defaultLocale, description);
+    }
+
+    public void setDescription( String languageTag, String description) {
+        this.toStringCache = null;
+        final Locale loc = Locale.forLanguageTag( languageTag );
+        this.description.put(loc, description);
     }
 
     @Override
@@ -132,17 +192,39 @@ public class AbstractRepository
         return result;
     }
 
+    private String getLocaleString(Map<Locale, String>  map) {
+        return map.entrySet().stream().map(entry -> entry.getKey().toLanguageTag()+'='+entry.getValue()).collect( Collectors.joining( ",") );
+    }
+
+    public String getType( )
+    {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
     @Override
     public String toString()
     {
-        final StringBuilder sb = new StringBuilder();
-        sb.append( "AbstractRepository" );
-        sb.append( "{id='" ).append( id ).append( '\'' );
-        sb.append( ", name='" ).append( name ).append( '\'' );
-        sb.append( ", layout='" ).append( layout ).append( '\'' );
-        sb.append( ", indexDirectory='" ).append( indexDirectory ).append( '\'' );
-        sb.append( ", description='" ).append( description ).append( '\'' );
-        sb.append( '}' );
-        return sb.toString();
+        if (toStringCache!=null) {
+            return toStringCache;
+        } else
+        {
+            final StringBuilder sb = new StringBuilder( );
+            sb.append( "AbstractRepository" );
+            sb.append( "{id='" ).append( id ).append( '\'' );
+            sb.append(", type='").append(type).append('\'');
+            sb.append( ", name='" ).append( getLocaleString( name ) ).append( '\'' );
+            sb.append( ", layout='" ).append( layout ).append( '\'' );
+            sb.append( ", indexDirectory='" ).append( indexDirectory ).append( '\'' );
+            sb.append( ", description='" ).append( getLocaleString( description ) ).append( '\'' );
+            sb.append( '}' );
+            toStringCache=sb.toString( );
+            return toStringCache;
+        }
     }
+
+
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/ManagedRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/ManagedRepository.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/ManagedRepository.java
index b8b58ea..bd0b2af 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/ManagedRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/ManagedRepository.java
@@ -21,6 +21,7 @@ package org.apache.archiva.admin.model.beans;
 
 import javax.xml.bind.annotation.XmlRootElement;
 import java.io.Serializable;
+import java.util.Locale;
 
 /**
  * @author Olivier Lamy
@@ -57,7 +58,7 @@ public class ManagedRepository
     /**
      * default model value
      */
-    private int retentionTime = 100;
+    private int retentionPeriod = 100;
 
     /**
      * default model value
@@ -75,17 +76,22 @@ public class ManagedRepository
      */
     private boolean skipPackedIndexCreation;
 
-    public ManagedRepository()
+    public ManagedRepository() {
+        super(Locale.getDefault());
+    }
+
+    public ManagedRepository(Locale defaultLocale)
     {
-        // no op
+        super(defaultLocale);
     }
 
-    public ManagedRepository( String id, String name, String location, String layout, boolean snapshots,
+
+    public ManagedRepository( Locale defaultLocale, String id, String name, String location, String layout, boolean snapshots,
                               boolean releases, boolean blockRedeployments, String cronExpression, String indexDir,
-                              boolean scanned, int retentionTime, int retentionCount, boolean deleteReleasedSnapshots,
+                              boolean scanned, int retentionPeriod, int retentionCount, boolean deleteReleasedSnapshots,
                               boolean stageRepoNeeded )
     {
-        super( id, name, layout );
+        super( defaultLocale, id, name, layout );
 
         this.location = location;
         this.snapshots = snapshots;
@@ -94,7 +100,7 @@ public class ManagedRepository
         this.setCronExpression( cronExpression );
         this.setIndexDirectory( indexDir );
         this.scanned = scanned;
-        this.retentionTime = retentionTime;
+        this.retentionPeriod = retentionPeriod;
         this.retentionCount = retentionCount;
         this.deleteReleasedSnapshots = deleteReleasedSnapshots;
         this.stageRepoNeeded = stageRepoNeeded;
@@ -103,13 +109,13 @@ public class ManagedRepository
     /**
      * @since 1.4-M3
      */
-    public ManagedRepository( String id, String name, String location, String layout, boolean snapshots,
+    public ManagedRepository( Locale defaultLocale, String id, String name, String location, String layout, boolean snapshots,
                               boolean releases, boolean blockRedeployments, String cronExpression, String indexDir,
-                              boolean scanned, int retentionTime, int retentionCount, boolean deleteReleasedSnapshots,
+                              boolean scanned, int retentionPeriod, int retentionCount, boolean deleteReleasedSnapshots,
                               boolean stageRepoNeeded, String description, boolean skipPackedIndexCreation )
     {
-        this( id, name, location, layout, snapshots, releases, blockRedeployments, cronExpression, indexDir, scanned,
-              retentionTime, retentionCount, deleteReleasedSnapshots, stageRepoNeeded );
+        this( defaultLocale, id, name, location, layout, snapshots, releases, blockRedeployments, cronExpression, indexDir, scanned,
+            retentionPeriod, retentionCount, deleteReleasedSnapshots, stageRepoNeeded );
         setDescription( description );
         setSkipPackedIndexCreation( skipPackedIndexCreation );
     }
@@ -192,14 +198,14 @@ public class ManagedRepository
     }
 
 
-    public int getDaysOlder()
+    public int getRetentionPeriod()
     {
-        return retentionTime;
+        return retentionPeriod;
     }
 
-    public void setDaysOlder( int retentionTime )
+    public void setRetentionPeriod( int periodInDays )
     {
-        this.retentionTime = retentionTime;
+        this.retentionPeriod = periodInDays;
     }
 
     public int getRetentionCount()
@@ -265,7 +271,7 @@ public class ManagedRepository
         sb.append( ", cronExpression='" ).append( cronExpression ).append( '\'' );
         sb.append( ", stagingRepository=" ).append( stagingRepository );
         sb.append( ", scanned=" ).append( scanned );
-        sb.append( ", retentionTime=" ).append( retentionTime );
+        sb.append( ", retentionPeriod=" ).append( retentionPeriod );
         sb.append( ", retentionCount=" ).append( retentionCount );
         sb.append( ", deleteReleasedSnapshots=" ).append( deleteReleasedSnapshots );
         sb.append( ", stageRepoNeeded=" ).append( stageRepoNeeded );

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java
index fd07ce9..f56127a 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java
@@ -26,6 +26,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 /**
@@ -104,22 +105,25 @@ public class RemoteRepository
      */
     private List<PropertyEntry> extraHeadersEntries;
 
+    public RemoteRepository() {
+        super(Locale.getDefault());
+    }
 
-    public RemoteRepository()
+    public RemoteRepository(Locale locale)
     {
-        // no op
+        super(locale);
     }
 
-    public RemoteRepository( String id, String name, String url, String layout )
+    public RemoteRepository( Locale locale, String id, String name, String url, String layout )
     {
-        super( id, name, layout );
+        super( locale, id, name, layout );
         this.url = url;
     }
 
-    public RemoteRepository( String id, String name, String url, String layout, String userName, String password,
+    public RemoteRepository( Locale locale, String id, String name, String url, String layout, String userName, String password,
                              int timeout )
     {
-        super( id, name, layout );
+        super( locale, id, name, layout );
         this.url = StringUtils.stripEnd(url,"/");
         this.userName = userName;
         this.password = password;
@@ -129,10 +133,10 @@ public class RemoteRepository
     /**
      * @since 1.4-M3
      */
-    public RemoteRepository( String id, String name, String url, String layout, String userName, String password,
+    public RemoteRepository( Locale locale, String id, String name, String url, String layout, String userName, String password,
                              int timeout, String description )
     {
-        this( id, name, url, layout, userName, password, timeout );
+        this( locale, id, name, url, layout, userName, password, timeout );
         setDescription( description );
     }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java
index 2591b75..a73e457 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/managed/ManagedRepositoryAdmin.java
@@ -68,4 +68,5 @@ public interface ManagedRepositoryAdmin
             throws RepositoryAdminException;
 
 
+    IndexingContext createIndexContext( org.apache.archiva.repository.ManagedRepository repository) throws RepositoryAdminException;
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/pom.xml b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/pom.xml
index 724d838..cfcf793 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/pom.xml
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/pom.xml
@@ -75,6 +75,10 @@
       <artifactId>metadata-model</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>maven2-repository</artifactId>
+    </dependency>
+    <dependency>
       <groupId>javax.inject</groupId>
       <artifactId>javax.inject</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/AbstractRepositoryAdmin.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/AbstractRepositoryAdmin.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/AbstractRepositoryAdmin.java
index 183e15b..1a8ccc7 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/AbstractRepositoryAdmin.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/AbstractRepositoryAdmin.java
@@ -21,13 +21,18 @@ package org.apache.archiva.admin.repository;
 import org.apache.archiva.admin.model.AuditInformation;
 import org.apache.archiva.admin.model.RepositoryAdminException;
 import org.apache.archiva.admin.model.RepositoryCommonValidator;
+import org.apache.archiva.admin.model.beans.AbstractRepository;
+import org.apache.archiva.configuration.AbstractRepositoryConfiguration;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.Configuration;
 import org.apache.archiva.configuration.IndeterminateConfigurationException;
 import org.apache.archiva.metadata.model.facets.AuditEvent;
 import org.apache.archiva.redback.users.User;
 import org.apache.archiva.redback.components.registry.Registry;
+import org.apache.archiva.repository.Repository;
 import org.apache.archiva.repository.events.AuditListener;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.commons.lang.StringUtils;
 import org.modelmapper.ModelMapper;
 import org.modelmapper.convention.MatchingStrategies;
 import org.slf4j.Logger;
@@ -36,6 +41,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 import javax.inject.Inject;
 import javax.inject.Named;
+import java.net.URI;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -93,6 +100,43 @@ public abstract class AbstractRepositoryAdmin
         }
     }
 
+    protected String convertUriToString( URI uri ) {
+        if (uri==null) {
+            return "";
+        }
+        String result;
+        if (uri.getScheme()==null) {
+            result = uri.getPath();
+        } else if ("file".equals(uri.getScheme())) {
+            result = Paths.get(uri).normalize().toString();
+        } else {
+            result = uri.toString();
+        }
+        log.debug("Converted uri {} -> {}", uri, result);
+        return result;
+    }
+
+    protected void setBaseRepoAttributes( AbstractRepository adminRepo, Repository repo){
+        adminRepo.setId(repo.getId());
+        adminRepo.setName( repo.getName() );
+        adminRepo.setLayout( repo.getLayout( ) );
+        adminRepo.setDescription( repo.getDescription() );
+        adminRepo.setType(repo.getType()==null?"MAVEN": repo.getType().name());
+        if (repo.supportsFeature( IndexCreationFeature.class )) {
+            IndexCreationFeature icf = repo.getFeature( IndexCreationFeature.class ).get();
+            adminRepo.setIndexDirectory( convertUriToString( icf.getIndexPath() ) );
+        }
+    }
+
+    protected void setBaseRepoAttributes( AbstractRepositoryConfiguration repoConfig, AbstractRepository repo) {
+        repoConfig.setId( repo.getId() );
+        repoConfig.setName( repo.getName() );
+        repoConfig.setLayout( repo.getLayout() );
+        repoConfig.setDescription( repo.getDescription() );
+        repoConfig.setIndexDir( repo.getIndexDirectory() );
+        repoConfig.setType( StringUtils.isEmpty( repo.getType() ) ? "MAVEN" : repo.getType() );
+    }
+
     private static class ModelMapperHolder
     {
         private static ModelMapper MODEL_MAPPER = new ModelMapper();

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
index 6d7a914..ae7cd62 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
@@ -24,6 +24,7 @@ import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
 import org.apache.archiva.admin.repository.AbstractRepositoryAdmin;
 import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.IndeterminateConfigurationException;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.archiva.configuration.ProxyConnectorConfiguration;
 import org.apache.archiva.configuration.RepositoryGroupConfiguration;
@@ -34,13 +35,19 @@ import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.apache.archiva.metadata.repository.stats.model.RepositoryStatisticsManager;
 import org.apache.archiva.redback.components.cache.Cache;
+import org.apache.archiva.redback.components.registry.RegistryException;
 import org.apache.archiva.redback.components.taskqueue.TaskQueueException;
 import org.apache.archiva.redback.role.RoleManager;
 import org.apache.archiva.redback.role.RoleManagerException;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.StagingRepositoryFeature;
 import org.apache.archiva.scheduler.repository.model.RepositoryArchivaTaskScheduler;
 import org.apache.archiva.scheduler.repository.model.RepositoryTask;
 import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.index.NexusIndexer;
 import org.apache.maven.index.context.IndexCreator;
@@ -56,10 +63,15 @@ import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import javax.inject.Named;
 import java.io.IOException;
+import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * FIXME review the staging mechanism to have a per user session one
@@ -76,6 +88,10 @@ public class DefaultManagedRepositoryAdmin
 
     public static final String STAGE_REPO_ID_END = "-stage";
 
+
+    @Inject
+    private RepositoryRegistry repositoryRegistry;
+
     @Inject
     @Named(value = "archivaTaskScheduler#repository")
     private RepositoryArchivaTaskScheduler repositoryTaskScheduler;
@@ -110,6 +126,7 @@ public class DefaultManagedRepositoryAdmin
         // initialize index context on start and check roles here
         for ( ManagedRepository managedRepository : getManagedRepositories() )
         {
+            log.debug("Initializating {}", managedRepository.getId());
             createIndexContext( managedRepository );
             addRepositoryRoles( managedRepository.getId() );
 
@@ -138,63 +155,80 @@ public class DefaultManagedRepositoryAdmin
         }
     }
 
+    /*
+     * Conversion between the repository from the registry and the serialized DTO for the admin API
+     */
+    private ManagedRepository convertRepo( org.apache.archiva.repository.ManagedRepository repo ) {
+        if (repo==null) {
+            return null;
+        }
+        ManagedRepository adminRepo = new ManagedRepository( getArchivaConfiguration().getDefaultLocale() );
+        setBaseRepoAttributes( adminRepo, repo );
+        adminRepo.setLocation( convertUriToString( repo.getLocation()) );
+        adminRepo.setReleases(repo.getActiveReleaseSchemes().contains( ReleaseScheme.RELEASE ));
+        adminRepo.setSnapshots( repo.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT) );
+        adminRepo.setBlockRedeployments( repo.blocksRedeployments() );
+        adminRepo.setCronExpression( repo.getSchedulingDefinition() );
+        if (repo.supportsFeature( IndexCreationFeature.class )) {
+            IndexCreationFeature icf = repo.getFeature( IndexCreationFeature.class ).get();
+            adminRepo.setIndexDirectory(convertUriToString( icf.getIndexPath() ));
+            adminRepo.setSkipPackedIndexCreation( icf.isSkipPackedIndexCreation() );
+        }
+        adminRepo.setScanned( repo.isScanned() );
+        if (repo.supportsFeature( ArtifactCleanupFeature.class) ) {
+            ArtifactCleanupFeature acf = repo.getFeature( ArtifactCleanupFeature.class ).get();
+            adminRepo.setRetentionPeriod( acf.getRetentionPeriod().getDays() );
+            adminRepo.setRetentionCount( acf.getRetentionCount() );
+            adminRepo.setDeleteReleasedSnapshots( acf.isDeleteReleasedSnapshots() );
+
+        }
+        if (repo.supportsFeature( StagingRepositoryFeature.class )) {
+            StagingRepositoryFeature stf = repo.getFeature( StagingRepositoryFeature.class ).get();
+            adminRepo.setStageRepoNeeded( stf.isStageRepoNeeded() );
+            if (stf.getStagingRepository()!=null) {
+                adminRepo.setStagingRepository( convertRepo( stf.getStagingRepository() ) );
+            }
+        }
+        return adminRepo;
+    }
+
+    private ManagedRepositoryConfiguration getRepositoryConfiguration(ManagedRepository repo) {
+        ManagedRepositoryConfiguration repoConfig = new ManagedRepositoryConfiguration();
+        setBaseRepoAttributes( repoConfig, repo );
+        repoConfig.setBlockRedeployments( repo.isBlockRedeployments( ) );
+        repoConfig.setReleases( repo.isReleases() );
+        repoConfig.setSnapshots( repo.isSnapshots() );
+        repoConfig.setScanned( repo.isScanned() );
+        repoConfig.setLocation( getRepositoryCommonValidator().removeExpressions( repo.getLocation() ) );
+        repoConfig.setRefreshCronExpression( repo.getCronExpression() );
+        repoConfig.setRetentionPeriod( repo.getRetentionPeriod() );
+        repoConfig.setRetentionCount( repo.getRetentionCount());
+        repoConfig.setDeleteReleasedSnapshots( repo.isDeleteReleasedSnapshots() );
+        repoConfig.setSkipPackedIndexCreation( repo.isSkipPackedIndexCreation());
+        repoConfig.setStageRepoNeeded( repo.isStageRepoNeeded() );
+        return repoConfig;
+    }
+
     @Override
     public List<ManagedRepository> getManagedRepositories()
         throws RepositoryAdminException
     {
-        List<ManagedRepositoryConfiguration> managedRepoConfigs =
-            getArchivaConfiguration().getConfiguration().getManagedRepositories();
-
-        if ( managedRepoConfigs == null )
-        {
-            return Collections.emptyList();
-        }
-
-        List<ManagedRepository> managedRepos = new ArrayList<ManagedRepository>( managedRepoConfigs.size() );
-
-        for ( ManagedRepositoryConfiguration repoConfig : managedRepoConfigs )
-        {
-            ManagedRepository repo =
-                new ManagedRepository( repoConfig.getId(), repoConfig.getName(), repoConfig.getLocation(),
-                                       repoConfig.getLayout(), repoConfig.isSnapshots(), repoConfig.isReleases(),
-                                       repoConfig.isBlockRedeployments(), repoConfig.getRefreshCronExpression(),
-                                       repoConfig.getIndexDir(), repoConfig.isScanned(), repoConfig.getRetentionTime(),
-                                       repoConfig.getRetentionCount(), repoConfig.isDeleteReleasedSnapshots(),
-                                       repoConfig.isStageRepoNeeded() );
-            repo.setDescription( repoConfig.getDescription() );
-            repo.setSkipPackedIndexCreation( repoConfig.isSkipPackedIndexCreation() );
-            managedRepos.add( repo );
-        }
 
-        return managedRepos;
+        return repositoryRegistry.getManagedRepositories().stream().map( rep -> this.convertRepo( rep ) ).collect( Collectors.toList());
     }
 
     @Override
     public Map<String, ManagedRepository> getManagedRepositoriesAsMap()
         throws RepositoryAdminException
     {
-        List<ManagedRepository> managedRepositories = getManagedRepositories();
-        Map<String, ManagedRepository> repositoriesMap = new HashMap<>( managedRepositories.size() );
-        for ( ManagedRepository managedRepository : managedRepositories )
-        {
-            repositoriesMap.put( managedRepository.getId(), managedRepository );
-        }
-        return repositoriesMap;
+        return repositoryRegistry.getManagedRepositories().stream().collect( Collectors.toMap( e -> e.getId(), e -> convertRepo( e ) ) );
     }
 
     @Override
     public ManagedRepository getManagedRepository( String repositoryId )
         throws RepositoryAdminException
     {
-        List<ManagedRepository> repos = getManagedRepositories();
-        for ( ManagedRepository repo : repos )
-        {
-            if ( StringUtils.equals( repo.getId(), repositoryId ) )
-            {
-                return repo;
-            }
-        }
-        return null;
+        return convertRepo( repositoryRegistry.getManagedRepository( repositoryId ) );
     }
 
     @Override
@@ -202,105 +236,66 @@ public class DefaultManagedRepositoryAdmin
                                          AuditInformation auditInformation )
         throws RepositoryAdminException
     {
+        log.debug("addManagedRepository {}, {}, {}", managedRepository.getId(), needStageRepo, auditInformation);
 
         getRepositoryCommonValidator().basicValidation( managedRepository, false );
         getRepositoryCommonValidator().validateManagedRepository( managedRepository );
         triggerAuditEvent( managedRepository.getId(), null, AuditEvent.ADD_MANAGED_REPO, auditInformation );
-        Boolean res =
-            addManagedRepository( managedRepository.getId(), managedRepository.getLayout(), managedRepository.getName(),
-                                  managedRepository.getLocation(), managedRepository.isBlockRedeployments(),
-                                  managedRepository.isReleases(), managedRepository.isSnapshots(), needStageRepo,
-                                  managedRepository.getCronExpression(), managedRepository.getIndexDirectory(),
-                                  managedRepository.getDaysOlder(), managedRepository.getRetentionCount(),
-                                  managedRepository.isDeleteReleasedSnapshots(), managedRepository.getDescription(),
-                                  managedRepository.isSkipPackedIndexCreation(), managedRepository.isScanned(),
-                                  auditInformation, getArchivaConfiguration().getConfiguration() ) != null;
-
-        createIndexContext( managedRepository );
-        return res;
-
-    }
-
-    private ManagedRepositoryConfiguration addManagedRepository( String repoId, String layout, String name,
-                                                                 String location, boolean blockRedeployments,
-                                                                 boolean releasesIncluded, boolean snapshotsIncluded,
-                                                                 boolean stageRepoNeeded, String cronExpression,
-                                                                 String indexDir, int retentionTime, int retentionCount,
-                                                                 boolean deteleReleasedSnapshots, String description,
-                                                                 boolean skipPackedIndexCreation, boolean scanned,
-                                                                 AuditInformation auditInformation,
-                                                                 Configuration config )
-        throws RepositoryAdminException
-    {
-
-        ManagedRepositoryConfiguration repository = new ManagedRepositoryConfiguration();
-
-        repository.setId( repoId );
-        repository.setBlockRedeployments( blockRedeployments );
-        repository.setReleases( releasesIncluded );
-        repository.setSnapshots( snapshotsIncluded );
-        repository.setScanned( scanned );
-        repository.setName( name );
-        repository.setLocation( getRepositoryCommonValidator().removeExpressions( location ) );
-        repository.setLayout( layout );
-        repository.setRefreshCronExpression( cronExpression );
-        repository.setIndexDir( indexDir );
-        repository.setRetentionTime( retentionTime );
-        repository.setRetentionCount( retentionCount );
-        repository.setDeleteReleasedSnapshots( deteleReleasedSnapshots );
-        repository.setIndexDir( indexDir );
-        repository.setDescription( description );
-        repository.setSkipPackedIndexCreation( skipPackedIndexCreation );
-        repository.setStageRepoNeeded( stageRepoNeeded );
-
+        ManagedRepositoryConfiguration repoConfig = getRepositoryConfiguration( managedRepository );
+        if (needStageRepo) {
+            repoConfig.setStageRepoNeeded( true );
+        }
+        Configuration configuration = getArchivaConfiguration().getConfiguration();
         try
         {
-            addRepository( repository, config );
-            addRepositoryRoles( repository.getId() );
+            org.apache.archiva.repository.ManagedRepository newRepo = repositoryRegistry.putRepository( repoConfig, configuration );
+            log.debug("Added new repository {}", newRepo.getId());
+            org.apache.archiva.repository.ManagedRepository stagingRepo = null;
+            addRepositoryRoles( newRepo.getId() );
+            if ( newRepo.supportsFeature( StagingRepositoryFeature.class )) {
+                StagingRepositoryFeature stf = newRepo.getFeature( StagingRepositoryFeature.class ).get();
+                stagingRepo = stf.getStagingRepository();
+                if (stf.isStageRepoNeeded() && stagingRepo != null) {
+                    addRepositoryRoles( stagingRepo.getId() );
+                    triggerAuditEvent( stagingRepo.getId(), null, AuditEvent.ADD_MANAGED_REPO, auditInformation );
+                }
+            }
+            saveConfiguration( configuration );
+            //MRM-1342 Repository statistics report doesn't appear to be working correctly
+            //scan repository when adding of repository is successful
+            try
+            {
+                if ( newRepo.isScanned())
+                {
+                    scanRepository( newRepo.getId(), true );
+                }
 
-            if ( stageRepoNeeded )
+                if ( stagingRepo!=null && stagingRepo.isScanned() )
+                {
+                    scanRepository( stagingRepo.getId(), true );
+                }
+            }
+            catch ( Exception e )
             {
-                ManagedRepositoryConfiguration stagingRepository = getStageRepoConfig( repository );
-                addRepository( stagingRepository, config );
-                addRepositoryRoles( stagingRepository.getId() );
-                triggerAuditEvent( stagingRepository.getId(), null, AuditEvent.ADD_MANAGED_REPO, auditInformation );
+                log.warn("Unable to scan repository [{}]: {}", newRepo.getId(), e.getMessage(), e);
             }
         }
-        catch ( RoleManagerException e )
+        catch ( RepositoryException e )
         {
-            throw new RepositoryAdminException( "failed to add repository roles " + e.getMessage(), e );
+            log.error("Could not add managed repository {}"+managedRepository);
+            throw new RepositoryAdminException( "Could not add repository "+e.getMessage() );
         }
-        catch ( IOException e )
+        catch ( RoleManagerException e )
         {
-            throw new RepositoryAdminException( "failed to add repository " + e.getMessage(), e );
+            log.error("Could not add repository roles for repository [{}]: {}", managedRepository.getId(), e.getMessage(), e);
+            throw new RepositoryAdminException( "Could not add roles to repository "+e.getMessage() );
         }
+        createIndexContext( managedRepository );
+        return Boolean.TRUE;
 
-        saveConfiguration( config );
-
-        //MRM-1342 Repository statistics report doesn't appear to be working correctly
-        //scan repository when adding of repository is successful
-        try
-        {
-            if ( scanned )
-            {
-                scanRepository( repoId, true );
-            }
+    }
 
-            // TODO need a better to define scanning or not for staged repo
-            if ( stageRepoNeeded && scanned )
-            {
-                ManagedRepositoryConfiguration stagingRepository = getStageRepoConfig( repository );
-                scanRepository( stagingRepository.getId(), true );
-            }
-        }
-        catch ( Exception e )
-        {
-            log.warn( new StringBuilder( "Unable to scan repository [" ).append( repoId ).append( "]: " ).append(
-                e.getMessage() ).toString(), e );
-        }
 
-        return repository;
-    }
 
     @Override
     public Boolean deleteManagedRepository( String repositoryId, AuditInformation auditInformation,
@@ -308,25 +303,53 @@ public class DefaultManagedRepositoryAdmin
         throws RepositoryAdminException
     {
         Configuration config = getArchivaConfiguration().getConfiguration();
+        ManagedRepositoryConfiguration repoConfig=config.findManagedRepositoryById( repositoryId );
 
-        ManagedRepositoryConfiguration repository = config.findManagedRepositoryById( repositoryId );
+        log.debug("Repo location "+repoConfig.getLocation());
 
-        if ( repository == null )
-        {
+        org.apache.archiva.repository.ManagedRepository repo = repositoryRegistry.getManagedRepository( repositoryId );
+        org.apache.archiva.repository.ManagedRepository stagingRepository = null;
+        if (repo!=null) {
+            try
+            {
+                if (repo.supportsFeature( StagingRepositoryFeature.class )) {
+                    stagingRepository = repo.getFeature( StagingRepositoryFeature.class ).get().getStagingRepository();
+                }
+                repositoryRegistry.removeRepository( repo, config );
+            }
+            catch ( RepositoryException e )
+            {
+                log.error("Removal of repository {} failed: {}", repositoryId, e.getMessage(), e);
+                throw new RepositoryAdminException( "Removal of repository "+repositoryId+" failed." );
+            }
+        } else {
             throw new RepositoryAdminException( "A repository with that id does not exist" );
         }
 
         triggerAuditEvent( repositoryId, null, AuditEvent.DELETE_MANAGED_REPO, auditInformation );
+        if (repoConfig!=null)
+        {
+            deleteManagedRepository( repoConfig, deleteContent, config, false );
+        }
 
-        deleteManagedRepository( repository, deleteContent, config, false );
 
         // stage repo exists ?
-        ManagedRepositoryConfiguration stagingRepository =
-            getArchivaConfiguration().getConfiguration().findManagedRepositoryById( repositoryId + STAGE_REPO_ID_END );
         if ( stagingRepository != null )
         {
             // do not trigger event when deleting the staged one
-            deleteManagedRepository( stagingRepository, deleteContent, config, true );
+            ManagedRepositoryConfiguration stagingRepositoryConfig = config.findManagedRepositoryById( stagingRepository.getId( ) );
+            try
+            {
+                repositoryRegistry.removeRepository( stagingRepository );
+                if (stagingRepositoryConfig!=null)
+                {
+                    deleteManagedRepository( stagingRepositoryConfig, deleteContent, config, true );
+                }
+            }
+            catch ( RepositoryException e )
+            {
+                log.error("Removal of staging repository {} failed: {}", stagingRepository.getId(), e.getMessage(), e);
+            }
         }
 
         try
@@ -383,7 +406,6 @@ public class DefaultManagedRepositoryAdmin
                 repositorySession.close();
             }
         }
-        config.removeManagedRepository( repository );
 
         if ( deleteContent )
         {
@@ -455,50 +477,63 @@ public class DefaultManagedRepositoryAdmin
 
         Configuration configuration = getArchivaConfiguration().getConfiguration();
 
-        ManagedRepositoryConfiguration toremove = configuration.findManagedRepositoryById( managedRepository.getId() );
+        ManagedRepositoryConfiguration updatedRepoConfig = getRepositoryConfiguration( managedRepository );
+        updatedRepoConfig.setStageRepoNeeded( needStageRepo );
 
-        boolean updateIndexContext = false;
-
-        if ( toremove != null )
-        {
-            configuration.removeManagedRepository( toremove );
-
-            updateIndexContext = !StringUtils.equals( toremove.getIndexDir(), managedRepository.getIndexDirectory() );
+        org.apache.archiva.repository.ManagedRepository oldRepo = repositoryRegistry.getManagedRepository( managedRepository.getId( ) );
+        boolean stagingExists = false;
+        if (oldRepo.supportsFeature( StagingRepositoryFeature.class ) ){
+            stagingExists = oldRepo.getFeature( StagingRepositoryFeature.class ).get().getStagingRepository() != null;
         }
-
-        ManagedRepositoryConfiguration stagingRepository = getStageRepoConfig( toremove );
+        boolean updateIndexContext = !StringUtils.equals( updatedRepoConfig.getIndexDir(), managedRepository.getIndexDirectory() );
 
         // TODO remove content from old if path has changed !!!!!
+        try
+        {
+            org.apache.archiva.repository.ManagedRepository newRepo = repositoryRegistry.putRepository( updatedRepoConfig, configuration );
+            if (newRepo.supportsFeature( StagingRepositoryFeature.class )) {
+                org.apache.archiva.repository.ManagedRepository stagingRepo = newRepo.getFeature( StagingRepositoryFeature.class ).get( ).getStagingRepository( );
+                if (stagingRepo!=null && !stagingExists)
+                {
+                    triggerAuditEvent( stagingRepo.getId(), null, AuditEvent.ADD_MANAGED_REPO, auditInformation );
+                    addRepositoryRoles( stagingRepo.getId( ) );
+                }
+            }
 
-        if ( stagingRepository != null )
+
+        }
+        catch ( RepositoryException e )
         {
-            configuration.removeManagedRepository( stagingRepository );
+            log.error("Could not update repository {}: {}", managedRepository.getId(), e.getMessage(), e);
+            throw new RepositoryAdminException( "Could not update repository "+managedRepository.getId());
+        }
+        catch ( RoleManagerException e ) {
+            log.error("Error during role update of stage repo {}", managedRepository.getId(), e);
+            throw new RepositoryAdminException( "Could not update repository "+managedRepository.getId());
+        }
+        triggerAuditEvent( managedRepository.getId(), null, AuditEvent.MODIFY_MANAGED_REPO,
+            auditInformation );
+        try
+        {
+            getArchivaConfiguration().save(configuration);
+        }
+        catch ( RegistryException | IndeterminateConfigurationException e )
+        {
+            log.error("Could not save repository configuration: {}", e.getMessage(), e);
+            throw new RepositoryAdminException( "Could not save repository configuration: "+e.getMessage() );
         }
-
-        ManagedRepositoryConfiguration managedRepositoryConfiguration =
-            addManagedRepository( managedRepository.getId(), managedRepository.getLayout(), managedRepository.getName(),
-                                  managedRepository.getLocation(), managedRepository.isBlockRedeployments(),
-                                  managedRepository.isReleases(), managedRepository.isSnapshots(), needStageRepo,
-                                  managedRepository.getCronExpression(), managedRepository.getIndexDirectory(),
-                                  managedRepository.getDaysOlder(), managedRepository.getRetentionCount(),
-                                  managedRepository.isDeleteReleasedSnapshots(), managedRepository.getDescription(),
-                                  managedRepository.isSkipPackedIndexCreation(), managedRepository.isScanned(),
-                                  auditInformation, getArchivaConfiguration().getConfiguration() );
 
         // Save the repository configuration.
         RepositorySession repositorySession = getRepositorySessionFactory().createSession();
 
         try
         {
-            triggerAuditEvent( managedRepositoryConfiguration.getId(), null, AuditEvent.MODIFY_MANAGED_REPO,
-                               auditInformation );
 
-            saveConfiguration( this.getArchivaConfiguration().getConfiguration() );
             if ( resetStats )
             {
                 log.debug( "call repositoryStatisticsManager.deleteStatistics" );
                 getRepositoryStatisticsManager().deleteStatistics( repositorySession.getRepository(),
-                                                                   managedRepositoryConfiguration.getId() );
+                                                                   managedRepository.getId() );
                 repositorySession.save();
             }
 
@@ -545,27 +580,20 @@ public class DefaultManagedRepositoryAdmin
     protected void addRepository( ManagedRepositoryConfiguration repository, Configuration configuration )
         throws RepositoryAdminException, IOException
     {
-        // Normalize the path
-        Path file = Paths.get( repository.getLocation() );
-        if ( !file.isAbsolute() )
-        {
-            // add appserver.base/repositories
-            file = Paths.get( getRegistry().getString( "appserver.base" ),"repositories",
-                             repository.getLocation() );
-        }
-        repository.setLocation( file.normalize().toString() );
-        if ( !Files.exists(file) )
+        try
         {
-            Files.createDirectories(file);
+            getRepositoryRegistry().putRepository( repository, configuration );
         }
-        if ( !Files.exists(file) || !Files.isDirectory(file) )
+        catch ( RepositoryException e )
         {
-            throw new RepositoryAdminException(
-                "Unable to add repository - no write access, can not create the root directory: " + file );
+            throw new RepositoryAdminException( "Could not add the repository to the registry. Cause: "+e.getMessage() );
         }
 
-        configuration.addManagedRepository( repository );
+    }
 
+    public IndexingContext createIndexContext( org.apache.archiva.repository.ManagedRepository repository) throws RepositoryAdminException
+    {
+        return createIndexContext( convertRepo( repository ) );
     }
 
     @Override
@@ -668,44 +696,6 @@ public class DefaultManagedRepositoryAdmin
         }
     }
 
-    private ManagedRepositoryConfiguration getStageRepoConfig( ManagedRepositoryConfiguration repository )
-    {
-        ManagedRepositoryConfiguration stagingRepository = new ManagedRepositoryConfiguration();
-        stagingRepository.setId( repository.getId() + STAGE_REPO_ID_END );
-        stagingRepository.setLayout( repository.getLayout() );
-        stagingRepository.setName( repository.getName() + STAGE_REPO_ID_END );
-        stagingRepository.setBlockRedeployments( repository.isBlockRedeployments() );
-        stagingRepository.setRetentionTime( repository.getRetentionTime() );
-        stagingRepository.setDeleteReleasedSnapshots( repository.isDeleteReleasedSnapshots() );
-
-        String path = repository.getLocation();
-        int lastIndex = path.replace( '\\', '/' ).lastIndexOf( '/' );
-        stagingRepository.setLocation( path.substring( 0, lastIndex ) + "/" + stagingRepository.getId() );
-
-        if ( StringUtils.isNotBlank( repository.getIndexDir() ) )
-        {
-            Path indexDir = Paths.get( repository.getIndexDir() );
-            // in case of absolute dir do not use the same
-            if ( indexDir.isAbsolute() )
-            {
-                stagingRepository.setIndexDir( stagingRepository.getLocation() + "/.index" );
-            }
-            else
-            {
-                stagingRepository.setIndexDir( repository.getIndexDir() );
-            }
-        }
-        stagingRepository.setRefreshCronExpression( repository.getRefreshCronExpression() );
-        stagingRepository.setReleases( repository.isReleases() );
-        stagingRepository.setRetentionCount( repository.getRetentionCount() );
-        stagingRepository.setScanned( repository.isScanned() );
-        stagingRepository.setSnapshots( repository.isSnapshots() );
-        stagingRepository.setSkipPackedIndexCreation( repository.isSkipPackedIndexCreation() );
-        // do not duplicate description
-        //stagingRepository.getDescription("")
-        return stagingRepository;
-    }
-
     public Boolean scanRepository( String repositoryId, boolean fullScan )
     {
         if ( getRepositoryTaskScheduler().isProcessingRepositoryTask( repositoryId ) )
@@ -828,4 +818,14 @@ public class DefaultManagedRepositoryAdmin
     {
         this.indexCreators = indexCreators;
     }
+
+    public RepositoryRegistry getRepositoryRegistry( )
+    {
+        return repositoryRegistry;
+    }
+
+    public void setRepositoryRegistry( RepositoryRegistry repositoryRegistry )
+    {
+        this.repositoryRegistry = repositoryRegistry;
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/networkproxy/DefaultNetworkProxyAdmin.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/networkproxy/DefaultNetworkProxyAdmin.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/networkproxy/DefaultNetworkProxyAdmin.java
index 7c3eb0c..6e38369 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/networkproxy/DefaultNetworkProxyAdmin.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/networkproxy/DefaultNetworkProxyAdmin.java
@@ -25,11 +25,15 @@ import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
 import org.apache.archiva.admin.repository.AbstractRepositoryAdmin;
 import org.apache.archiva.configuration.Configuration;
 import org.apache.archiva.configuration.NetworkProxyConfiguration;
-import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.archiva.metadata.model.facets.AuditEvent;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 
+import javax.inject.Inject;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -43,6 +47,9 @@ public class DefaultNetworkProxyAdmin
     implements NetworkProxyAdmin
 {
 
+    @Inject
+    RepositoryRegistry repositoryRegistry;
+
     @Override
     public List<NetworkProxy> getNetworkProxies()
         throws RepositoryAdminException
@@ -130,11 +137,20 @@ public class DefaultNetworkProxyAdmin
         NetworkProxyConfiguration networkProxyConfiguration = getNetworkProxyConfiguration( networkProxy );
         configuration.removeNetworkProxy( networkProxyConfiguration );
 
-        for ( RemoteRepositoryConfiguration rrc : configuration.getRemoteRepositories() )
-        {
-            if ( StringUtils.equals( rrc.getRemoteDownloadNetworkProxyId(), networkProxyId ) )
-            {
-                rrc.setRemoteDownloadNetworkProxyId( null );
+        for ( RemoteRepository repo : repositoryRegistry.getRemoteRepositories()) {
+            if (repo.supportsFeature( RemoteIndexFeature.class )) {
+                RemoteIndexFeature rif = repo.getFeature( RemoteIndexFeature.class ).get();
+                if (networkProxyId.equals(rif.getProxyId())) {
+                    rif.setProxyId( null );
+                    try
+                    {
+                        repositoryRegistry.putRepository( repo, configuration);
+                    }
+                    catch ( RepositoryException e )
+                    {
+                        log.error("Could not update repository {}", repo.getId(), e);
+                    }
+                }
             }
         }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/remote/DefaultRemoteRepositoryAdmin.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/remote/DefaultRemoteRepositoryAdmin.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/remote/DefaultRemoteRepositoryAdmin.java
index 12c4d07..19b540a 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/remote/DefaultRemoteRepositoryAdmin.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/remote/DefaultRemoteRepositoryAdmin.java
@@ -20,7 +20,6 @@ package org.apache.archiva.admin.repository.remote;
 
 import org.apache.archiva.admin.model.AuditInformation;
 import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.RemoteRepository;
 import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
 import org.apache.archiva.admin.repository.AbstractRepositoryAdmin;
 import org.apache.archiva.configuration.Configuration;
@@ -28,7 +27,12 @@ import org.apache.archiva.configuration.ProxyConnectorConfiguration;
 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.archiva.configuration.RepositoryCheckPath;
 import org.apache.archiva.metadata.model.facets.AuditEvent;
-import org.apache.commons.io.FileUtils;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.RepositoryCredentials;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.index.NexusIndexer;
 import org.apache.maven.index.context.IndexCreator;
@@ -48,6 +52,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author Olivier Lamy
@@ -60,6 +65,9 @@ public class DefaultRemoteRepositoryAdmin
 {
 
     @Inject
+    RepositoryRegistry repositoryRegistry;
+
+    @Inject
     private List<? extends IndexCreator> indexCreators;
 
     @Inject
@@ -69,7 +77,7 @@ public class DefaultRemoteRepositoryAdmin
     private void initialize()
         throws RepositoryAdminException
     {
-        for ( RemoteRepository remoteRepository : getRemoteRepositories() )
+        for ( org.apache.archiva.admin.model.beans.RemoteRepository remoteRepository : getRemoteRepositories() )
         {
             createIndexContext( remoteRepository );
         }
@@ -81,9 +89,9 @@ public class DefaultRemoteRepositoryAdmin
     {
         try
         {
-            List<RemoteRepository> remoteRepositories = getRemoteRepositories();
+            List<org.apache.archiva.admin.model.beans.RemoteRepository> remoteRepositories = getRemoteRepositories();
             // close index on shutdown
-            for ( RemoteRepository remoteRepository : remoteRepositories )
+            for ( org.apache.archiva.admin.model.beans.RemoteRepository remoteRepository : remoteRepositories )
             {
                 IndexingContext context = indexer.getIndexingContexts().get( remoteRepository.getId() );
                 if ( context != null )
@@ -99,53 +107,74 @@ public class DefaultRemoteRepositoryAdmin
     }
 
 
+    /*
+ * Conversion between the repository from the registry and the serialized DTO for the admin API
+ */
+    private org.apache.archiva.admin.model.beans.RemoteRepository convertRepo( RemoteRepository repo ) {
+        if (repo==null) {
+            return null;
+        }
+        org.apache.archiva.admin.model.beans.RemoteRepository adminRepo = new org.apache.archiva.admin.model.beans.RemoteRepository( getArchivaConfiguration().getDefaultLocale() );
+        setBaseRepoAttributes( adminRepo, repo );
+        adminRepo.setUrl( convertUriToString( repo.getLocation() ));
+        adminRepo.setCronExpression( repo.getSchedulingDefinition() );
+        adminRepo.setCheckPath( repo.getCheckPath() );
+        adminRepo.setExtraHeaders( repo.getExtraHeaders() );
+        adminRepo.setExtraParameters( repo.getExtraParameters() );
+        adminRepo.setTimeout( (int) repo.getTimeout().getSeconds() );
+        RepositoryCredentials creds = repo.getLoginCredentials();
+        if (creds!=null && creds instanceof PasswordCredentials) {
+            PasswordCredentials pCreds = (PasswordCredentials) creds;
+            adminRepo.setUserName( pCreds.getUsername() );
+            adminRepo.setPassword( new String(pCreds.getPassword()!=null ? pCreds.getPassword() : new char[0]) );
+        }
+        if (repo.supportsFeature( RemoteIndexFeature.class )) {
+            RemoteIndexFeature rif = repo.getFeature( RemoteIndexFeature.class ).get();
+            adminRepo.setRemoteIndexUrl( convertUriToString( rif.getIndexUri() ) );
+            adminRepo.setDownloadRemoteIndex( rif.isDownloadRemoteIndex() );
+            adminRepo.setRemoteDownloadNetworkProxyId( rif.getProxyId() );
+            adminRepo.setDownloadRemoteIndexOnStartup( rif.isDownloadRemoteIndexOnStartup() );
+            adminRepo.setRemoteDownloadTimeout( (int) rif.getDownloadTimeout().getSeconds() );
+        }
+        return adminRepo;
+    }
+
+    private RemoteRepositoryConfiguration getRepositoryConfiguration( org.apache.archiva.admin.model.beans.RemoteRepository repo) {
+        RemoteRepositoryConfiguration repoConfig = new RemoteRepositoryConfiguration();
+        setBaseRepoAttributes( repoConfig, repo );
+        repoConfig.setUrl( getRepositoryCommonValidator().removeExpressions( repo.getUrl() ) );
+        repoConfig.setRefreshCronExpression( repo.getCronExpression() );
+        repoConfig.setCheckPath( repo.getCheckPath() );
+        repoConfig.setExtraHeaders( repo.getExtraHeaders() );
+        repoConfig.setExtraParameters( repo.getExtraParameters() );
+        repoConfig.setUsername( repo.getUserName() );
+        repoConfig.setPassword( repo.getPassword() );
+        repoConfig.setTimeout( repo.getTimeout() );
+        repoConfig.setRemoteIndexUrl( repo.getRemoteIndexUrl() );
+        repoConfig.setDownloadRemoteIndex( repo.isDownloadRemoteIndex() );
+        repoConfig.setRemoteDownloadNetworkProxyId( repo.getRemoteDownloadNetworkProxyId() );
+        repoConfig.setDownloadRemoteIndexOnStartup( repo.isDownloadRemoteIndexOnStartup() );
+        repoConfig.setRemoteDownloadTimeout( repo.getRemoteDownloadTimeout() );
+        return repoConfig;
+    }
+
     @Override
-    public List<RemoteRepository> getRemoteRepositories()
+    public List<org.apache.archiva.admin.model.beans.RemoteRepository> getRemoteRepositories()
         throws RepositoryAdminException
     {
-        List<RemoteRepository> remoteRepositories =
-            new ArrayList<>( getArchivaConfiguration().getConfiguration().getRemoteRepositories().size() );
-        for ( RemoteRepositoryConfiguration repositoryConfiguration : getArchivaConfiguration().getConfiguration().getRemoteRepositories() )
-        {
-            RemoteRepository remoteRepository =
-                new RemoteRepository( repositoryConfiguration.getId(), repositoryConfiguration.getName(),
-                                      repositoryConfiguration.getUrl(), repositoryConfiguration.getLayout(),
-                                      repositoryConfiguration.getUsername(), repositoryConfiguration.getPassword(),
-                                      repositoryConfiguration.getTimeout() );
-            remoteRepository.setDownloadRemoteIndex( repositoryConfiguration.isDownloadRemoteIndex() );
-            remoteRepository.setRemoteIndexUrl( repositoryConfiguration.getRemoteIndexUrl() );
-            remoteRepository.setCronExpression( repositoryConfiguration.getRefreshCronExpression() );
-            remoteRepository.setIndexDirectory( repositoryConfiguration.getIndexDir() );
-            remoteRepository.setRemoteDownloadNetworkProxyId(
-                repositoryConfiguration.getRemoteDownloadNetworkProxyId() );
-            remoteRepository.setRemoteDownloadTimeout( repositoryConfiguration.getRemoteDownloadTimeout() );
-            remoteRepository.setDownloadRemoteIndexOnStartup(
-                repositoryConfiguration.isDownloadRemoteIndexOnStartup() );
-            remoteRepository.setDescription( repositoryConfiguration.getDescription() );
-            remoteRepository.setExtraHeaders( repositoryConfiguration.getExtraHeaders() );
-            remoteRepository.setExtraParameters( repositoryConfiguration.getExtraParameters() );
-            remoteRepository.setCheckPath(repositoryConfiguration.getCheckPath());
-            remoteRepositories.add( remoteRepository );
-        }
-        return remoteRepositories;
+
+        return repositoryRegistry.getRemoteRepositories().stream().map( repo -> convertRepo( repo ) ).collect( Collectors.toList());
     }
 
     @Override
-    public RemoteRepository getRemoteRepository( String repositoryId )
+    public org.apache.archiva.admin.model.beans.RemoteRepository getRemoteRepository( String repositoryId )
         throws RepositoryAdminException
     {
-        for ( RemoteRepository remoteRepository : getRemoteRepositories() )
-        {
-            if ( StringUtils.equals( repositoryId, remoteRepository.getId() ) )
-            {
-                return remoteRepository;
-            }
-        }
-        return null;
+        return convertRepo( repositoryRegistry.getRemoteRepository( repositoryId ));
     }
 
     @Override
-    public Boolean addRemoteRepository( RemoteRepository remoteRepository, AuditInformation auditInformation )
+    public Boolean addRemoteRepository( org.apache.archiva.admin.model.beans.RemoteRepository remoteRepository, AuditInformation auditInformation )
         throws RepositoryAdminException
     {
         triggerAuditEvent( remoteRepository.getId(), null, AuditEvent.ADD_REMOTE_REPO, auditInformation );
@@ -172,11 +201,21 @@ public class DefaultRemoteRepositoryAdmin
             }
         }
 
+        Configuration configuration = getArchivaConfiguration().getConfiguration();
         RemoteRepositoryConfiguration remoteRepositoryConfiguration =
-            getRemoteRepositoryConfiguration( remoteRepository );
+            getRepositoryConfiguration( remoteRepository );
+
+        try
+        {
+            repositoryRegistry.putRepository( remoteRepositoryConfiguration, configuration );
+        }
+        catch ( RepositoryException e )
+        {
+            log.error("Could not add remote repository {}: {}", remoteRepositoryConfiguration.getId(), e.getMessage(), e);
+            throw new RepositoryAdminException( "Adding of remote repository failed"+(e.getMessage()==null?"":": "+e.getMessage()) );
+
+        }
 
-        Configuration configuration = getArchivaConfiguration().getConfiguration();
-        configuration.addRemoteRepository( remoteRepositoryConfiguration );
         saveConfiguration( configuration );
 
         return Boolean.TRUE;
@@ -191,15 +230,19 @@ public class DefaultRemoteRepositoryAdmin
 
         Configuration configuration = getArchivaConfiguration().getConfiguration();
 
-        RemoteRepositoryConfiguration remoteRepositoryConfiguration =
-            configuration.getRemoteRepositoriesAsMap().get( repositoryId );
-        if ( remoteRepositoryConfiguration == null )
+        RemoteRepository repo = repositoryRegistry.getRemoteRepository( repositoryId );
+        if (repo==null) {
+            throw new RepositoryAdminException( "Could not delete repository "+repositoryId+". The repository does not exist." );
+        }
+        try
         {
-            throw new RepositoryAdminException(
-                "remoteRepository with id " + repositoryId + " not exist cannot remove it" );
+            repositoryRegistry.removeRepository( repo, configuration );
+        }
+        catch ( RepositoryException e )
+        {
+            log.error("Deletion of remote repository failed {}: {}", repo.getId(), e.getMessage(), e);
+            throw new RepositoryAdminException( "Could not delete remote repository"+(e.getMessage()==null?"":": "+e.getMessage()) );
         }
-
-        configuration.removeRemoteRepository( remoteRepositoryConfiguration );
 
         // TODO use ProxyConnectorAdmin interface ?
         // [MRM-520] Proxy Connectors are not deleted with the deletion of a Repository.
@@ -218,7 +261,7 @@ public class DefaultRemoteRepositoryAdmin
     }
 
     @Override
-    public Boolean updateRemoteRepository( RemoteRepository remoteRepository, AuditInformation auditInformation )
+    public Boolean updateRemoteRepository( org.apache.archiva.admin.model.beans.RemoteRepository remoteRepository, AuditInformation auditInformation )
         throws RepositoryAdminException
     {
 
@@ -230,30 +273,27 @@ public class DefaultRemoteRepositoryAdmin
 
         Configuration configuration = getArchivaConfiguration().getConfiguration();
 
-        RemoteRepositoryConfiguration remoteRepositoryConfiguration =
-            configuration.getRemoteRepositoriesAsMap().get( repositoryId );
-        if ( remoteRepositoryConfiguration == null )
+        RemoteRepositoryConfiguration remoteRepositoryConfiguration = getRepositoryConfiguration( remoteRepository );
+        try
         {
-            throw new RepositoryAdminException(
-                "remoteRepository with id " + repositoryId + " not exist cannot remove it" );
+            repositoryRegistry.putRepository( remoteRepositoryConfiguration, configuration );
+        }
+        catch ( RepositoryException e )
+        {
+            log.error("Could not update remote repository {}: {}", remoteRepositoryConfiguration.getId(), e.getMessage(), e);
+            throw new RepositoryAdminException( "Update of remote repository failed"+(e.getMessage()==null?"":": "+e.getMessage()) );
         }
-
-        configuration.removeRemoteRepository( remoteRepositoryConfiguration );
-
-        remoteRepositoryConfiguration = getRemoteRepositoryConfiguration( remoteRepository );
-        configuration.addRemoteRepository( remoteRepositoryConfiguration );
         saveConfiguration( configuration );
-
         return Boolean.TRUE;
     }
 
     @Override
-    public Map<String, RemoteRepository> getRemoteRepositoriesAsMap()
+    public Map<String, org.apache.archiva.admin.model.beans.RemoteRepository> getRemoteRepositoriesAsMap()
         throws RepositoryAdminException
     {
-        java.util.Map<String, RemoteRepository> map = new HashMap<>();
+        java.util.Map<String, org.apache.archiva.admin.model.beans.RemoteRepository> map = new HashMap<>();
 
-        for ( RemoteRepository repo : getRemoteRepositories() )
+        for ( org.apache.archiva.admin.model.beans.RemoteRepository repo : getRemoteRepositories() )
         {
             map.put( repo.getId(), repo );
         }
@@ -262,7 +302,7 @@ public class DefaultRemoteRepositoryAdmin
     }
 
     @Override
-    public IndexingContext createIndexContext( RemoteRepository remoteRepository )
+    public IndexingContext createIndexContext( org.apache.archiva.admin.model.beans.RemoteRepository remoteRepository )
         throws RepositoryAdminException
     {
         try
@@ -328,7 +368,7 @@ public class DefaultRemoteRepositoryAdmin
 
     }
 
-    protected String calculateIndexRemoteUrl( RemoteRepository remoteRepository )
+    protected String calculateIndexRemoteUrl( org.apache.archiva.admin.model.beans.RemoteRepository remoteRepository )
     {
         if ( StringUtils.startsWith( remoteRepository.getRemoteIndexUrl(), "http" ) )
         {
@@ -345,30 +385,6 @@ public class DefaultRemoteRepositoryAdmin
 
     }
 
-    private RemoteRepositoryConfiguration getRemoteRepositoryConfiguration( RemoteRepository remoteRepository )
-    {
-        RemoteRepositoryConfiguration remoteRepositoryConfiguration = new RemoteRepositoryConfiguration();
-        remoteRepositoryConfiguration.setId( remoteRepository.getId() );
-        remoteRepositoryConfiguration.setPassword( remoteRepository.getPassword() );
-        remoteRepositoryConfiguration.setTimeout( remoteRepository.getTimeout() );
-        remoteRepositoryConfiguration.setUrl( remoteRepository.getUrl() );
-        remoteRepositoryConfiguration.setUsername( remoteRepository.getUserName() );
-        remoteRepositoryConfiguration.setLayout( remoteRepository.getLayout() );
-        remoteRepositoryConfiguration.setName( remoteRepository.getName() );
-        remoteRepositoryConfiguration.setDownloadRemoteIndex( remoteRepository.isDownloadRemoteIndex() );
-        remoteRepositoryConfiguration.setRemoteIndexUrl( remoteRepository.getRemoteIndexUrl() );
-        remoteRepositoryConfiguration.setRefreshCronExpression( remoteRepository.getCronExpression() );
-        remoteRepositoryConfiguration.setIndexDir( remoteRepository.getIndexDirectory() );
-        remoteRepositoryConfiguration.setRemoteDownloadNetworkProxyId(
-            remoteRepository.getRemoteDownloadNetworkProxyId() );
-        remoteRepositoryConfiguration.setRemoteDownloadTimeout( remoteRepository.getRemoteDownloadTimeout() );
-        remoteRepositoryConfiguration.setDownloadRemoteIndexOnStartup(
-            remoteRepository.isDownloadRemoteIndexOnStartup() );
-        remoteRepositoryConfiguration.setDescription( remoteRepository.getDescription() );
-        remoteRepositoryConfiguration.setExtraHeaders( remoteRepository.getExtraHeaders() );
-        remoteRepositoryConfiguration.setExtraParameters( remoteRepository.getExtraParameters() );
-        remoteRepositoryConfiguration.setCheckPath(remoteRepository.getCheckPath());
-        return remoteRepositoryConfiguration;
-    }
+
 
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/AbstractRepositoryAdminTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/AbstractRepositoryAdminTest.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/AbstractRepositoryAdminTest.java
index d3389cf..d158b40 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/AbstractRepositoryAdminTest.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/AbstractRepositoryAdminTest.java
@@ -43,6 +43,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 /**
@@ -106,8 +107,9 @@ public abstract class AbstractRepositoryAdminTest
 
     protected ManagedRepository getTestManagedRepository( String repoId, String repoLocation )
     {
-        return new ManagedRepository( repoId, "test repo", repoLocation, "default", false, true, true, "0 0 * * * ?",
-                                      repoLocation + "/.index", false, 1, 2, true, false );
+        String repoLocationStr = Paths.get(repoLocation, ".index").toString();
+        return new ManagedRepository( Locale.getDefault( ), repoId, "test repo", repoLocation, "default", false, true, true, "0 0 * * * ?",
+                                      repoLocationStr, false, 1, 2, true, false );
     }
 
     protected Path clearRepoLocation(String path )
@@ -141,7 +143,7 @@ public abstract class AbstractRepositoryAdminTest
 
     protected RemoteRepository getRemoteRepository( String id )
     {
-        RemoteRepository remoteRepository = new RemoteRepository();
+        RemoteRepository remoteRepository = new RemoteRepository(Locale.getDefault());
         remoteRepository.setUrl( "http://foo.com/maven-it-rocks" );
         remoteRepository.setTimeout( 10 );
         remoteRepository.setName( "maven foo" );

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
index b131abc..87c6f97 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
@@ -20,14 +20,25 @@ package org.apache.archiva.admin.repository.managed;
 
 import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.repository.AbstractRepositoryAdminTest;
+import org.apache.archiva.common.utils.FileUtils;
+import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.metadata.model.facets.AuditEvent;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.security.common.ArchivaRoleConstants;
+import org.junit.Before;
 import org.junit.Test;
 
+import javax.inject.Inject;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.CopyOption;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 import java.util.List;
+import java.util.Locale;
 
 /**
  * @author Olivier Lamy
@@ -35,6 +46,12 @@ import java.util.List;
 public class ManagedRepositoryAdminTest
     extends AbstractRepositoryAdminTest
 {
+    @Inject
+    private ArchivaConfiguration archivaConfiguration;
+
+    @Inject
+    private RepositoryRegistry repositoryRegistry;
+
     public static final String STAGE_REPO_ID_END = DefaultManagedRepositoryAdmin.STAGE_REPO_ID_END;
 
 
@@ -42,6 +59,21 @@ public class ManagedRepositoryAdminTest
 
     String repoLocation = Paths.get(APPSERVER_BASE_PATH, repoId).toString();
 
+    @Before
+    public void setup() throws IOException, URISyntaxException
+    {
+        Path archivaCfg1 = Paths.get( System.getProperty( "user.home" ), ".m2", "archiva.xml" );
+        Files.deleteIfExists( archivaCfg1 );
+        Path archivaCfg2 = Paths.get(APPSERVER_BASE_PATH, "conf/archiva.xml");
+        Files.deleteIfExists( archivaCfg2 );
+        Files.createDirectories( archivaCfg2.getParent() );
+        URL url = Thread.currentThread().getContextClassLoader().getResource( "default-archiva.xml" );
+        Path defaultCfg = Paths.get(url.toURI());
+        Files.copy( defaultCfg, archivaCfg2, StandardCopyOption.REPLACE_EXISTING );
+        archivaConfiguration.reload();
+        repositoryRegistry.reload();
+    }
+
     @Test
     public void getAllManagedRepos()
         throws Exception
@@ -83,7 +115,7 @@ public class ManagedRepositoryAdminTest
         int initialSize = repos.size();
         assertTrue( initialSize > 0 );
 
-        ManagedRepository repo = new ManagedRepository();
+        ManagedRepository repo = new ManagedRepository( Locale.getDefault());
         repo.setId( repoId );
         repo.setName( "test repo" );
         repo.setLocation( repoLocation );
@@ -135,7 +167,7 @@ public class ManagedRepositoryAdminTest
         int initialSize = repos.size();
         assertTrue( initialSize > 0 );
 
-        ManagedRepository repo = new ManagedRepository();
+        ManagedRepository repo = new ManagedRepository(Locale.getDefault());
         repo.setId( repoId );
         repo.setName( "test repo" );
         repo.setLocation( repoLocation );
@@ -200,7 +232,7 @@ public class ManagedRepositoryAdminTest
         int initialSize = repos.size();
         assertTrue( initialSize > 0 );
 
-        ManagedRepository repo = new ManagedRepository();
+        ManagedRepository repo = new ManagedRepository(Locale.getDefault());
         repo.setId( repoId );
         repo.setName( "test repo" );
         repo.setLocation( repoLocation );
@@ -250,6 +282,7 @@ public class ManagedRepositoryAdminTest
         String stageRepoLocation = Paths.get(APPSERVER_BASE_PATH, repoId).toString();
 
         Path repoDir = clearRepoLocation( repoLocation );
+        clearRepoLocation( repoLocation+STAGE_REPO_ID_END );
 
         mockAuditListener.clearEvents();
         List<ManagedRepository> repos = managedRepositoryAdmin.getManagedRepositories();
@@ -284,16 +317,17 @@ public class ManagedRepositoryAdminTest
         managedRepositoryAdmin.updateManagedRepository( repo, true, getFakeAuditInformation(), false );
 
         repo = managedRepositoryAdmin.getManagedRepository( repoId );
+        System.err.println("REPOSITORY "+repo.getLocation());
         assertNotNull( repo );
         assertEquals( newName, repo.getName() );
-        assertEquals( Paths.get( repoLocation ).normalize(), Paths.get( repo.getLocation() ).normalize() );
+        assertEquals( Paths.get( repoLocation ).toAbsolutePath(), Paths.get( repo.getLocation() ).toAbsolutePath() );
         assertTrue( Files.exists( Paths.get(repoLocation )) );
         assertEquals( getTestManagedRepository( repoId, repoLocation ).getCronExpression(), repo.getCronExpression() );
         assertEquals( getTestManagedRepository( repoId, repoLocation ).getLayout(), repo.getLayout() );
         assertEquals( getTestManagedRepository( repoId, repoLocation ).getId(), repo.getId() );
         assertEquals( getTestManagedRepository( repoId, repoLocation ).getIndexDirectory(), repo.getIndexDirectory() );
 
-        assertEquals( getTestManagedRepository( repoId, repoLocation ).getDaysOlder(), repo.getDaysOlder() );
+        assertEquals( getTestManagedRepository( repoId, repoLocation ).getRetentionPeriod(), repo.getRetentionPeriod() );
         assertEquals( getTestManagedRepository( repoId, repoLocation ).getRetentionCount(), repo.getRetentionCount() );
         assertEquals( getTestManagedRepository( repoId, repoLocation ).isDeleteReleasedSnapshots(),
                       repo.isDeleteReleasedSnapshots() );
@@ -319,7 +353,7 @@ public class ManagedRepositoryAdminTest
 
         mockAuditListener.clearEvents();
 
-        Files.deleteIfExists(Paths.get( repoLocation + STAGE_REPO_ID_END ));
+        FileUtils.deleteQuietly( Paths.get( repoLocation + STAGE_REPO_ID_END ));
         assertFalse( Files.exists(Paths.get( repoLocation + STAGE_REPO_ID_END )) );
     }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/proxyconnectorrule/ProxyConnectorRuleAdminTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/proxyconnectorrule/ProxyConnectorRuleAdminTest.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/proxyconnectorrule/ProxyConnectorRuleAdminTest.java
index 9a99600..a9d4b97 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/proxyconnectorrule/ProxyConnectorRuleAdminTest.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/proxyconnectorrule/ProxyConnectorRuleAdminTest.java
@@ -26,6 +26,7 @@ import org.apache.archiva.admin.repository.AbstractRepositoryAdminTest;
 import org.junit.Test;
 
 import java.util.Arrays;
+import java.util.Locale;
 
 /**
  * @author Olivier Lamy
@@ -74,7 +75,7 @@ public class ProxyConnectorRuleAdminTest
     public void addProxyConnectorRuleWithTwoProxyConnectors()
         throws Exception
     {
-        RemoteRepository remoteRepository = new RemoteRepository();
+        RemoteRepository remoteRepository = new RemoteRepository(Locale.getDefault());
         remoteRepository.setId( "archiva" );
         remoteRepository.setName( "archiva rocks" );
         remoteRepository.setUrl( "http://wine.org" );
@@ -120,7 +121,7 @@ public class ProxyConnectorRuleAdminTest
     public void updateProxyConnectorRuleWithTwoProxyConnectors()
         throws Exception
     {
-        RemoteRepository remoteRepository = new RemoteRepository();
+        RemoteRepository remoteRepository = new RemoteRepository( Locale.getDefault( ));
         remoteRepository.setId( "archiva" );
         remoteRepository.setName( "archiva rocks" );
         remoteRepository.setUrl( "http://wine.org" );


[16/21] archiva git commit: Adapting base modules to the new repository api

Posted by ma...@apache.org.
Adapting base modules to the new repository api

Using the repository api and RepositoryRegistry for repo access


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/9469c1b6
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/9469c1b6
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/9469c1b6

Branch: refs/heads/master
Commit: 9469c1b67f5a667b99b1810ddd95642164ba2ec3
Parents: 45b601f
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:38:00 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:38:00 2017 +0100

----------------------------------------------------------------------
 .../DefaultLegacyRepositoryConverter.java       |   8 +-
 .../legacy/LegacyConverterArtifactConsumer.java |   4 +-
 .../archiva-base/archiva-indexer/pom.xml        |   5 +
 .../indexer/search/MavenRepositorySearch.java   |   6 +
 .../search/AbstractMavenRepositorySearch.java   |  17 ++
 .../search/MavenRepositorySearchOSGITest.java   |   4 +-
 .../search/MavenRepositorySearchTest.java       |  93 +++++---
 .../src/test/resources/spring-context.xml       |   5 +
 .../archiva/proxy/model/ProxyConnector.java     |   2 +-
 .../proxy/DefaultRepositoryProxyConnectors.java | 183 ++++++++-------
 .../archiva/proxy/AbstractProxyTestCase.java    |  43 ++--
 .../proxy/CacheFailuresTransferTest.java        |   1 +
 .../archiva/proxy/HttpProxyTransferTest.java    |  14 +-
 .../apache/archiva/proxy/MockConfiguration.java |  13 ++
 .../repository/mock/RepositoryProviderMock.java | 231 +++++++++++++++++++
 .../src/test/resources/spring-context.xml       |   5 +-
 .../scanner/DefaultRepositoryScanner.java       |   2 +-
 .../scanner/RepositoryContentConsumers.java     |   9 +-
 .../scanner/RepositoryScanStatistics.java       |   2 +-
 .../repository/scanner/RepositoryScanner.java   |   2 +-
 .../scanner/RepositoryScannerInstance.java      |   6 +-
 .../functors/TriggerBeginScanClosure.java       |   2 +-
 .../functors/TriggerScanCompletedClosure.java   |   2 +-
 .../repository/scanner/InvalidScanConsumer.java |   2 +-
 .../repository/scanner/KnownScanConsumer.java   |   4 +-
 .../scanner/RepositoryContentConsumersTest.java |  22 +-
 .../scanner/RepositoryScannerTest.java          |  27 +--
 .../repository/scanner/SampleKnownConsumer.java |   2 +-
 .../archiva-base/archiva-test-utils/pom.xml     |   7 +-
 archiva-modules/archiva-base/pom.xml            |   1 +
 30 files changed, 537 insertions(+), 187 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/DefaultLegacyRepositoryConverter.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/DefaultLegacyRepositoryConverter.java b/archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/DefaultLegacyRepositoryConverter.java
index ff04828..3e8e168 100644
--- a/archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/DefaultLegacyRepositoryConverter.java
+++ b/archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/DefaultLegacyRepositoryConverter.java
@@ -26,6 +26,7 @@ import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.archiva.converter.RepositoryConversionException;
+import org.apache.archiva.repository.BasicManagedRepository;
 import org.apache.archiva.repository.scanner.RepositoryScanner;
 import org.apache.archiva.repository.scanner.RepositoryScannerException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -40,6 +41,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
 
 /**
  * DefaultLegacyRepositoryConverter
@@ -90,10 +92,8 @@ public class DefaultLegacyRepositoryConverter
         {
             String defaultRepositoryUrl = PathUtil.toUrl( repositoryDirectory );
 
-            ManagedRepository legacyRepository = new ManagedRepository();
-            legacyRepository.setId( "legacy" );
-            legacyRepository.setName( "Legacy Repository" );
-            legacyRepository.setLocation( legacyRepositoryDirectory.toAbsolutePath().toString() );
+            BasicManagedRepository legacyRepository = new BasicManagedRepository( "legacy", "Legacy Repository");
+            legacyRepository.setLocation( legacyRepositoryDirectory.toAbsolutePath().toUri() );
             legacyRepository.setLayout( "legacy" );
 
             ArtifactRepository repository =

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/LegacyConverterArtifactConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/LegacyConverterArtifactConsumer.java b/archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/LegacyConverterArtifactConsumer.java
index 1dc82a5..7fb542e 100644
--- a/archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/LegacyConverterArtifactConsumer.java
+++ b/archiva-modules/archiva-base/archiva-converter/src/main/java/org/apache/archiva/converter/legacy/LegacyConverterArtifactConsumer.java
@@ -19,7 +19,6 @@ package org.apache.archiva.converter.legacy;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
 import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
 import org.apache.archiva.consumers.AbstractMonitoredConsumer;
@@ -28,6 +27,7 @@ import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.archiva.converter.artifact.ArtifactConversionException;
 import org.apache.archiva.converter.artifact.ArtifactConverter;
 import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.content.maven2.ManagedDefaultRepositoryContent;
 import org.apache.archiva.repository.layout.LayoutException;
@@ -85,7 +85,7 @@ public class LegacyConverterArtifactConsumer
     }
 
     @Override
-    public void beginScan( ManagedRepository repository, Date whenGathered )
+    public void beginScan( org.apache.archiva.repository.ManagedRepository repository, Date whenGathered )
         throws ConsumerException
     {
         this.managedRepository = new ManagedDefaultRepositoryContent();

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-indexer/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-indexer/pom.xml b/archiva-modules/archiva-base/archiva-indexer/pom.xml
index a9f24ef..992fcf7 100644
--- a/archiva-modules/archiva-base/archiva-indexer/pom.xml
+++ b/archiva-modules/archiva-base/archiva-indexer/pom.xml
@@ -38,6 +38,11 @@
       <groupId>org.apache.archiva</groupId>
       <artifactId>archiva-common</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-repository-layer</artifactId>
+    </dependency>
+
 
     <dependency>
       <groupId>org.springframework</groupId>

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/MavenRepositorySearch.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/MavenRepositorySearch.java b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/MavenRepositorySearch.java
index 0e41016..892d7b7 100644
--- a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/MavenRepositorySearch.java
+++ b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/MavenRepositorySearch.java
@@ -261,6 +261,12 @@ public class MavenRepositorySearch
         {
             throw new RepositorySearchException( "No search fields set." );
         }
+        System.err.println("CLAUSES "+q.getClauses());
+        if (q.getClauses()!=null) {
+            for (BooleanClause cl : q.getClauses()) {
+                System.err.println("Clause "+cl);
+            }
+        }
 
         return search( limits, q, indexingContextIds, Collections.<ArtifactInfoFilter>emptyList(),
                        searchFields.getRepositories(), searchFields.isIncludePomArtifacts() );

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractMavenRepositorySearch.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractMavenRepositorySearch.java b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractMavenRepositorySearch.java
index e2946ff..ab85ec5 100644
--- a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractMavenRepositorySearch.java
+++ b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractMavenRepositorySearch.java
@@ -26,7 +26,9 @@ import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
 import org.apache.archiva.common.utils.FileUtils;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ConfigurationListener;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.commons.lang.SystemUtils;
 import org.apache.maven.index.ArtifactContext;
@@ -52,6 +54,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
+import java.util.Locale;
 
 /**
  * @author Olivier Lamy
@@ -78,6 +81,9 @@ public abstract class AbstractMavenRepositorySearch
     @Inject
     ArtifactContextProducer artifactContextProducer;
 
+    @Inject
+    RepositoryRegistry repositoryRegistry;
+
     IMocksControl archivaConfigControl;
 
     Configuration config;
@@ -116,17 +122,28 @@ public abstract class AbstractMavenRepositorySearch
 
         DefaultProxyConnectorAdmin defaultProxyConnectorAdmin = new DefaultProxyConnectorAdmin();
         defaultProxyConnectorAdmin.setArchivaConfiguration( archivaConfig );
+        repositoryRegistry.setArchivaConfiguration( archivaConfig );
 
         search = new MavenRepositorySearch( nexusIndexer, defaultManagedRepositoryAdmin, defaultProxyConnectorAdmin,
                                             queryCreator );
 
         defaultManagedRepositoryAdmin.setIndexer( nexusIndexer );
         defaultManagedRepositoryAdmin.setIndexCreators( indexCreators );
+        assertNotNull( repositoryRegistry );
+        defaultManagedRepositoryAdmin.setRepositoryRegistry( repositoryRegistry );
 
         config = new Configuration();
         config.addManagedRepository( createRepositoryConfig( TEST_REPO_1 ) );
         config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );
         config.addManagedRepository( createRepositoryConfig( REPO_RELEASE ) );
+
+
+        archivaConfig.addListener( EasyMock.anyObject( ConfigurationListener.class ) );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn(config).anyTimes();
+        archivaConfigControl.replay();
+        repositoryRegistry.reload();
+        archivaConfigControl.reset();
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchOSGITest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchOSGITest.java b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchOSGITest.java
index 7257e4a..6942930 100644
--- a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchOSGITest.java
+++ b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchOSGITest.java
@@ -26,6 +26,7 @@ import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
 
 /**
  * @author Olivier Lamy
@@ -44,7 +45,8 @@ public class MavenRepositorySearchOSGITest
         List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
 
         // search artifactId
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchTest.java b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchTest.java
index a989311..3c10633 100644
--- a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchTest.java
+++ b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchTest.java
@@ -19,15 +19,20 @@ package org.apache.archiva.indexer.search;
  * under the License.
  */
 
+import org.apache.archiva.configuration.ConfigurationEvent;
+import org.apache.archiva.configuration.ConfigurationListener;
 import org.apache.archiva.indexer.util.SearchUtil;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.maven.index_shaded.lucene.index.IndexUpgrader;
 import org.codehaus.plexus.util.FileUtils;
 import org.easymock.EasyMock;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.test.context.ContextConfiguration;
 
+import javax.inject.Inject;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
@@ -35,6 +40,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
 
 
 @RunWith( ArchivaSpringJUnit4ClassRunner.class )
@@ -106,7 +112,8 @@ public class MavenRepositorySearchTest
         List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
 
         // search artifactId
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -125,9 +132,10 @@ public class MavenRepositorySearchTest
 
         archivaConfigControl.reset();
 
-        // search groupId
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
+        // search groupId
         archivaConfigControl.replay();
 
         results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
@@ -149,7 +157,8 @@ public class MavenRepositorySearchTest
         List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
 
         // search artifactId
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -169,7 +178,8 @@ public class MavenRepositorySearchTest
         archivaConfigControl.reset();
 
         // search groupId
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -193,7 +203,8 @@ public class MavenRepositorySearchTest
         selectedRepos.add( TEST_REPO_1 );
 
         // search artifactId
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -223,7 +234,8 @@ public class MavenRepositorySearchTest
         selectedRepos.add( TEST_REPO_1 );
 
         // search artifactId
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -259,7 +271,8 @@ public class MavenRepositorySearchTest
         List<String> selectedRepos = new ArrayList<>();
         selectedRepos.add( TEST_REPO_1 );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
         archivaConfigControl.replay();
 
         SearchResults results = search.search( "user", selectedRepos, "archiva search", null, null );
@@ -283,7 +296,8 @@ public class MavenRepositorySearchTest
         SearchResultLimits limits = new SearchResultLimits( 0 );
         limits.setPageSize( 1 );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -303,7 +317,8 @@ public class MavenRepositorySearchTest
         limits = new SearchResultLimits( 1 );
         limits.setPageSize( 1 );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -338,7 +353,8 @@ public class MavenRepositorySearchTest
 
         config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 5 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -373,7 +389,8 @@ public class MavenRepositorySearchTest
         List<String> selectedRepos = new ArrayList<>();
         selectedRepos.add( TEST_REPO_1 );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -392,7 +409,8 @@ public class MavenRepositorySearchTest
         List<String> selectedRepos = new ArrayList<>();
         selectedRepos.add( TEST_REPO_1 );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -410,8 +428,6 @@ public class MavenRepositorySearchTest
         List<String> selectedRepos = new ArrayList<>();
         selectedRepos.add( "non-existing-repo" );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
-
         archivaConfigControl.replay();
 
         SearchResults results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
@@ -433,7 +449,8 @@ public class MavenRepositorySearchTest
         List<String> previousSearchTerms = new ArrayList<>();
         previousSearchTerms.add( "archiva-test" );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -471,7 +488,8 @@ public class MavenRepositorySearchTest
         searchFields.setVersion( "1.0" );
         searchFields.setRepositories( selectedRepos );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -506,7 +524,8 @@ public class MavenRepositorySearchTest
         SearchResultLimits limits = new SearchResultLimits( 0 );
         limits.setPageSize( 1 );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -524,7 +543,8 @@ public class MavenRepositorySearchTest
         limits = new SearchResultLimits( 1 );
         limits.setPageSize( 1 );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -556,7 +576,8 @@ public class MavenRepositorySearchTest
         searchFields.setArtifactId( "artifactid-numeric" );
         searchFields.setRepositories( selectedRepos );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -599,7 +620,8 @@ public class MavenRepositorySearchTest
 
         try
         {
-            EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+            EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+            EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
             archivaConfigControl.replay();
 
@@ -633,15 +655,16 @@ public class MavenRepositorySearchTest
 
         try
         {
-            EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
 
+            EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+            EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
             archivaConfigControl.replay();
 
             search.search( "user", searchFields, null );
 
             archivaConfigControl.verify();
 
-            fail( "A RepositorySearchExcecption should have been thrown." );
+            fail( "A RepositorySearchException should have been thrown." );
         }
         catch ( RepositorySearchException e )
         {
@@ -666,7 +689,8 @@ public class MavenRepositorySearchTest
         searchFields.setClassName( "org.apache.archiva.test.App" );
         searchFields.setRepositories( selectedRepos );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -697,7 +721,8 @@ public class MavenRepositorySearchTest
         searchFields.setPackaging( "jar" );
         searchFields.setRepositories( selectedRepos );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -725,7 +750,9 @@ public class MavenRepositorySearchTest
         searchFields.setPackaging( "war" );
         searchFields.setRepositories( selectedRepos );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
+
         archivaConfigControl.replay();
 
         SearchResults results = search.search( "user", searchFields, null );
@@ -748,7 +775,8 @@ public class MavenRepositorySearchTest
         searchFields.setClassName( "com.classname.search.App" );
         searchFields.setRepositories( selectedRepos );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -776,7 +804,8 @@ public class MavenRepositorySearchTest
         searchFields.setGroupId( "org.apache.archiva" );
         searchFields.setRepositories( selectedRepos );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -800,7 +829,8 @@ public class MavenRepositorySearchTest
         searchFields.setClassName( "SomeClass" );
         searchFields.setRepositories( selectedRepos );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 
@@ -849,8 +879,6 @@ public class MavenRepositorySearchTest
         searchFields.setClassName( "SomeClass" );
         searchFields.setRepositories( selectedRepos );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
-
         archivaConfigControl.replay();
 
         SearchResults results = search.search( "user", searchFields, null );
@@ -881,7 +909,8 @@ public class MavenRepositorySearchTest
         SearchResultLimits limits = new SearchResultLimits( SearchResultLimits.ALL_PAGES );
         limits.setPageSize( 300 );
 
-        EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 5 );
+        EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes();
+        EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes();
 
         archivaConfigControl.replay();
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-indexer/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/test/resources/spring-context.xml b/archiva-modules/archiva-base/archiva-indexer/src/test/resources/spring-context.xml
index e0bf5c4..4877906 100644
--- a/archiva-modules/archiva-base/archiva-indexer/src/test/resources/spring-context.xml
+++ b/archiva-modules/archiva-base/archiva-indexer/src/test/resources/spring-context.xml
@@ -28,6 +28,11 @@
        default-lazy-init="false">
 
   <context:annotation-config/>
+  <context:component-scan base-package="org.apache.archiva.repository.content.maven2" />
+
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
+
 
   <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
     <property name="properties">

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-proxy-api/src/main/java/org/apache/archiva/proxy/model/ProxyConnector.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy-api/src/main/java/org/apache/archiva/proxy/model/ProxyConnector.java b/archiva-modules/archiva-base/archiva-proxy-api/src/main/java/org/apache/archiva/proxy/model/ProxyConnector.java
index e8c2034..d653de5 100644
--- a/archiva-modules/archiva-base/archiva-proxy-api/src/main/java/org/apache/archiva/proxy/model/ProxyConnector.java
+++ b/archiva-modules/archiva-base/archiva-proxy-api/src/main/java/org/apache/archiva/proxy/model/ProxyConnector.java
@@ -137,7 +137,7 @@ public class ProxyConnector
 
         sb.append( "ProxyConnector[\n" );
         sb.append( "  source: [managed] " ).append( this.sourceRepository.getRepoRoot() ).append( "\n" );
-        sb.append( "  target: [remote] " ).append( this.targetRepository.getRepository().getUrl() ).append( "\n" );
+        sb.append( "  target: [remote] " ).append( this.targetRepository.getRepository().getLocation() ).append( "\n" );
         sb.append( "  proxyId:" ).append( this.proxyId ).append( "\n" );
 
         Iterator<String> keys = this.policies.keySet().iterator();

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java b/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java
index 4266bf7..a76e744 100644
--- a/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java
+++ b/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java
@@ -22,17 +22,27 @@ package org.apache.archiva.proxy;
 import org.apache.archiva.admin.model.RepositoryAdminException;
 import org.apache.archiva.admin.model.beans.NetworkProxy;
 import org.apache.archiva.admin.model.beans.ProxyConnectorRuleType;
-import org.apache.archiva.admin.model.beans.RemoteRepository;
 import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
 import org.apache.archiva.common.filelock.FileLockException;
 import org.apache.archiva.common.filelock.FileLockManager;
 import org.apache.archiva.common.filelock.FileLockTimeoutException;
 import org.apache.archiva.common.filelock.Lock;
-import org.apache.archiva.configuration.*;
+import org.apache.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ConfigurationNames;
+import org.apache.archiva.configuration.NetworkProxyConfiguration;
+import org.apache.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.archiva.configuration.ProxyConnectorRuleConfiguration;
 import org.apache.archiva.model.ArtifactReference;
 import org.apache.archiva.model.Keys;
 import org.apache.archiva.model.RepositoryURL;
-import org.apache.archiva.policies.*;
+import org.apache.archiva.policies.DownloadErrorPolicy;
+import org.apache.archiva.policies.DownloadPolicy;
+import org.apache.archiva.policies.PolicyConfigurationException;
+import org.apache.archiva.policies.PolicyViolationException;
+import org.apache.archiva.policies.PostDownloadPolicy;
+import org.apache.archiva.policies.PreDownloadPolicy;
+import org.apache.archiva.policies.ProxyDownloadException;
 import org.apache.archiva.policies.urlcache.UrlFailureCache;
 import org.apache.archiva.proxy.common.WagonFactory;
 import org.apache.archiva.proxy.common.WagonFactoryException;
@@ -43,7 +53,16 @@ import org.apache.archiva.proxy.model.RepositoryProxyConnectors;
 import org.apache.archiva.redback.components.registry.Registry;
 import org.apache.archiva.redback.components.registry.RegistryListener;
 import org.apache.archiva.redback.components.taskqueue.TaskQueueException;
-import org.apache.archiva.repository.*;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.RemoteRepositoryContent;
+import org.apache.archiva.repository.RepositoryContentFactory;
+import org.apache.archiva.repository.RepositoryCredentials;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryNotFoundException;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.metadata.MetadataTools;
 import org.apache.archiva.repository.metadata.RepositoryMetadataException;
 import org.apache.archiva.scheduler.ArchivaTaskScheduler;
@@ -73,11 +92,15 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.TimeUnit;
 
 /**
  * DefaultRepositoryProxyConnectors
@@ -126,6 +149,9 @@ public class DefaultRepositoryProxyConnectors
     private ArchivaTaskScheduler scheduler;
 
     @Inject
+    private RepositoryRegistry repositoryRegistry;
+
+    @Inject
     private NetworkProxyAdmin networkProxyAdmin;
 
     @Inject
@@ -157,86 +183,83 @@ public class DefaultRepositoryProxyConnectors
         {
             String key = proxyConfig.getSourceRepoId();
 
-            try
+            // Create connector object.
+            ProxyConnector connector = new ProxyConnector();
+
+            ManagedRepository repo = repositoryRegistry.getManagedRepository( proxyConfig.getSourceRepoId( ) );
+            if (repo==null) {
+                log.error("Cannot find source repository after config change "+proxyConfig.getSourceRepoId());
+                continue;
+            }
+            connector.setSourceRepository(repo.getContent());
+            RemoteRepository rRepo = repositoryRegistry.getRemoteRepository( proxyConfig.getTargetRepoId() );
+            if (rRepo==null) {
+                log.error("Cannot find target repository after config change "+proxyConfig.getSourceRepoId());
+                continue;
+            }
+            connector.setTargetRepository(rRepo.getContent());
+
+            connector.setProxyId( proxyConfig.getProxyId() );
+            connector.setPolicies( proxyConfig.getPolicies() );
+            connector.setOrder( proxyConfig.getOrder() );
+            connector.setDisabled( proxyConfig.isDisabled() );
+
+            // Copy any blacklist patterns.
+            List<String> blacklist = new ArrayList<>( 0 );
+            if ( CollectionUtils.isNotEmpty( proxyConfig.getBlackListPatterns() ) )
             {
-                // Create connector object.
-                ProxyConnector connector = new ProxyConnector();
-
-                connector.setSourceRepository(
-                    repositoryFactory.getManagedRepositoryContent( proxyConfig.getSourceRepoId() ) );
-                connector.setTargetRepository(
-                    repositoryFactory.getRemoteRepositoryContent( proxyConfig.getTargetRepoId() ) );
-
-                connector.setProxyId( proxyConfig.getProxyId() );
-                connector.setPolicies( proxyConfig.getPolicies() );
-                connector.setOrder( proxyConfig.getOrder() );
-                connector.setDisabled( proxyConfig.isDisabled() );
-
-                // Copy any blacklist patterns.
-                List<String> blacklist = new ArrayList<>( 0 );
-                if ( CollectionUtils.isNotEmpty( proxyConfig.getBlackListPatterns() ) )
-                {
-                    blacklist.addAll( proxyConfig.getBlackListPatterns() );
-                }
-                connector.setBlacklist( blacklist );
+                blacklist.addAll( proxyConfig.getBlackListPatterns() );
+            }
+            connector.setBlacklist( blacklist );
 
-                // Copy any whitelist patterns.
-                List<String> whitelist = new ArrayList<>( 0 );
-                if ( CollectionUtils.isNotEmpty( proxyConfig.getWhiteListPatterns() ) )
-                {
-                    whitelist.addAll( proxyConfig.getWhiteListPatterns() );
-                }
-                connector.setWhitelist( whitelist );
+            // Copy any whitelist patterns.
+            List<String> whitelist = new ArrayList<>( 0 );
+            if ( CollectionUtils.isNotEmpty( proxyConfig.getWhiteListPatterns() ) )
+            {
+                whitelist.addAll( proxyConfig.getWhiteListPatterns() );
+            }
+            connector.setWhitelist( whitelist );
 
-                List<ProxyConnectorRuleConfiguration> proxyConnectorRuleConfigurations =
-                    findProxyConnectorRules( connector.getSourceRepository().getId(),
-                                             connector.getTargetRepository().getId(),
-                                             allProxyConnectorRuleConfigurations );
+            List<ProxyConnectorRuleConfiguration> proxyConnectorRuleConfigurations =
+                findProxyConnectorRules( connector.getSourceRepository().getId(),
+                                         connector.getTargetRepository().getId(),
+                                         allProxyConnectorRuleConfigurations );
 
-                if ( !proxyConnectorRuleConfigurations.isEmpty() )
+            if ( !proxyConnectorRuleConfigurations.isEmpty() )
+            {
+                for ( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration : proxyConnectorRuleConfigurations )
                 {
-                    for ( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration : proxyConnectorRuleConfigurations )
+                    if ( StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(),
+                                             ProxyConnectorRuleType.BLACK_LIST.getRuleType() ) )
                     {
-                        if ( StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(),
-                                                 ProxyConnectorRuleType.BLACK_LIST.getRuleType() ) )
-                        {
-                            connector.getBlacklist().add( proxyConnectorRuleConfiguration.getPattern() );
-                        }
-
-                        if ( StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(),
-                                                 ProxyConnectorRuleType.WHITE_LIST.getRuleType() ) )
-                        {
-                            connector.getWhitelist().add( proxyConnectorRuleConfiguration.getPattern() );
-                        }
+                        connector.getBlacklist().add( proxyConnectorRuleConfiguration.getPattern() );
                     }
-                }
 
-                // Get other connectors
-                List<ProxyConnector> connectors = this.proxyConnectorMap.get( key );
-                if ( connectors == null )
-                {
-                    // Create if we are the first.
-                    connectors = new ArrayList<>( 1 );
+                    if ( StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(),
+                                             ProxyConnectorRuleType.WHITE_LIST.getRuleType() ) )
+                    {
+                        connector.getWhitelist().add( proxyConnectorRuleConfiguration.getPattern() );
+                    }
                 }
-
-                // Add the connector.
-                connectors.add( connector );
-
-                // Ensure the list is sorted.
-                Collections.sort( connectors, proxyOrderSorter );
-
-                // Set the key to the list of connectors.
-                this.proxyConnectorMap.put( key, connectors );
             }
-            catch ( RepositoryNotFoundException e )
-            {
-                log.warn( "Unable to use proxy connector: {}", e.getMessage(), e );
-            }
-            catch ( RepositoryException e )
+
+            // Get other connectors
+            List<ProxyConnector> connectors = this.proxyConnectorMap.get( key );
+            if ( connectors == null )
             {
-                log.warn( "Unable to use proxy connector: {}", e.getMessage(), e );
+                // Create if we are the first.
+                connectors = new ArrayList<>( 1 );
             }
 
+            // Add the connector.
+            connectors.add( connector );
+
+            // Ensure the list is sorted.
+            Collections.sort( connectors, proxyOrderSorter );
+
+            // Set the key to the list of connectors.
+            this.proxyConnectorMap.put( key, connectors );
+
 
         }
 
@@ -1176,8 +1199,14 @@ public class DefaultRepositoryProxyConnectors
         }
 
         AuthenticationInfo authInfo = null;
-        String username = remoteRepository.getRepository().getUserName();
-        String password = remoteRepository.getRepository().getPassword();
+        String username = "";
+        String password = "";
+        RepositoryCredentials repCred = remoteRepository.getRepository().getLoginCredentials();
+        if (repCred!=null && repCred instanceof PasswordCredentials) {
+            PasswordCredentials pwdCred = (PasswordCredentials) repCred;
+            username = pwdCred.getUsername();
+            password = pwdCred.getPassword()==null ? "" : new String(pwdCred.getPassword());
+        }
 
         if ( StringUtils.isNotBlank( username ) && StringUtils.isNotBlank( password ) )
         {
@@ -1188,8 +1217,8 @@ public class DefaultRepositoryProxyConnectors
         }
 
         // Convert seconds to milliseconds
-        long timeoutInMilliseconds = TimeUnit.MILLISECONDS.convert( remoteRepository.getRepository().getTimeout(), //
-                                                                    TimeUnit.SECONDS );
+
+        long timeoutInMilliseconds = remoteRepository.getRepository().getTimeout().toMillis();
 
         // Set timeout  read and connect
         // FIXME olamy having 2 config values

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
index a8ffb63..2a43b86 100644
--- a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
+++ b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
@@ -36,6 +36,8 @@ import org.apache.archiva.policies.ReleasesPolicy;
 import org.apache.archiva.policies.SnapshotsPolicy;
 import org.apache.archiva.proxy.model.RepositoryProxyConnectors;
 import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.maven2.MavenManagedRepository;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.commons.io.FileUtils;
 import org.apache.maven.index.NexusIndexer;
@@ -55,6 +57,7 @@ import javax.inject.Inject;
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
+import java.net.URI;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -117,8 +120,7 @@ public abstract class AbstractProxyTestCase
 
     WagonDelegate delegate;
 
-    @Inject
-    protected ManagedRepositoryAdmin managedRepositoryAdmin;
+    protected RepositoryRegistry repositoryRegistry;
 
     @Inject
     protected NexusIndexer nexusIndexer;
@@ -143,38 +145,44 @@ public abstract class AbstractProxyTestCase
 
         managedDefaultDir = Paths.get( managedDefaultRepository.getRepoRoot() );
 
-        ManagedRepository repoConfig = managedDefaultRepository.getRepository();
+        org.apache.archiva.repository.ManagedRepository repoConfig = managedDefaultRepository.getRepository();
 
         ( (DefaultManagedRepositoryAdmin) applicationContext.getBean(
             ManagedRepositoryAdmin.class ) ).setArchivaConfiguration( config );
 
-        applicationContext.getBean( ManagedRepositoryAdmin.class ).addManagedRepository( repoConfig, false, null );
+        applicationContext.getBean( RepositoryRegistry.class ).putRepository( repoConfig );
 
         // to prevent windauze file leaking
         removeMavenIndexes();
 
-        ManagedRepositoryAdmin managedRepositoryAdmin = applicationContext.getBean( ManagedRepositoryAdmin.class );
-
-        if ( managedRepositoryAdmin.getManagedRepository( repoConfig.getId() ) != null )
-        {
-            managedRepositoryAdmin.deleteManagedRepository( repoConfig.getId(), null, true );
-        }
-
-        managedRepositoryAdmin.addManagedRepository( repoConfig, false, null );
+        repositoryRegistry = applicationContext.getBean( RepositoryRegistry.class );
+        repositoryRegistry.setArchivaConfiguration( config );
 
         // Setup target (proxied to) repository.
         saveRemoteRepositoryConfig( ID_PROXIED1, "Proxied Repository 1",
-                                    Paths.get( REPOPATH_PROXIED1 ).toUri().toURL().toExternalForm(), "default" );
+            Paths.get( REPOPATH_PROXIED1 ).toUri().toURL().toExternalForm(), "default" );
 
         // Setup target (proxied to) repository.
         saveRemoteRepositoryConfig( ID_PROXIED2, "Proxied Repository 2",
-                                    Paths.get( REPOPATH_PROXIED2 ).toUri().toURL().toExternalForm(), "default" );
+            Paths.get( REPOPATH_PROXIED2 ).toUri().toURL().toExternalForm(), "default" );
+
+        repositoryRegistry.reload();
+
+        if ( repositoryRegistry.getManagedRepository( repoConfig.getId() ) != null )
+        {
+            org.apache.archiva.repository.ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( repoConfig.getId() );
+            repositoryRegistry.removeRepository( managedRepository );
+        }
+
+        repositoryRegistry.putRepository( repoConfig );
+
 
         // Setup the proxy handler.
         //proxyHandler = applicationContext.getBean (RepositoryProxyConnectors) lookup( RepositoryProxyConnectors.class.getName() );
 
         proxyHandler = applicationContext.getBean( "repositoryProxyConnectors#test", RepositoryProxyConnectors.class );
 
+
         // Setup the wagon mock.
         wagonMockControl = EasyMock.createNiceControl();
         wagonMock = wagonMockControl.createMock( Wagon.class );
@@ -345,10 +353,8 @@ public abstract class AbstractProxyTestCase
     protected ManagedRepositoryContent createRepository( String id, String name, String path, String layout )
         throws Exception
     {
-        ManagedRepository repo = new ManagedRepository();
-        repo.setId( id );
-        repo.setName( name );
-        repo.setLocation( path );
+        MavenManagedRepository repo = new MavenManagedRepository(id, name);
+        repo.setLocation( new URI(path) );
         repo.setLayout( layout );
 
         ManagedRepositoryContent repoContent =
@@ -477,6 +483,7 @@ public abstract class AbstractProxyTestCase
         config.triggerChange( prefix + ".name", repoConfig.getName() );
         config.triggerChange( prefix + ".url", repoConfig.getUrl() );
         config.triggerChange( prefix + ".layout", repoConfig.getLayout() );
+        repositoryRegistry.reload();
     }
 
     protected Path saveTargetedRepositoryConfig( String id, String originalPath, String targetPath, String layout )

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/CacheFailuresTransferTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/CacheFailuresTransferTest.java b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/CacheFailuresTransferTest.java
index f1857fb..3445ee8 100644
--- a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/CacheFailuresTransferTest.java
+++ b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/CacheFailuresTransferTest.java
@@ -112,6 +112,7 @@ public class CacheFailuresTransferTest
         saveRemoteRepositoryConfig( "badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default" );
         saveRemoteRepositoryConfig( "badproxied2", "Bad Proxied 2", "test://bad.machine.com/anotherrepo/", "default" );
 
+
         // Configure Connector (usually done within archiva.xml configuration)
         saveConnector( ID_DEFAULT_MANAGED, "badproxied1", ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
                        SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java
index fad03d8..8b8d08e 100644
--- a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java
+++ b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java
@@ -23,6 +23,8 @@ import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
 import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
 import org.apache.archiva.proxy.model.RepositoryProxyConnectors;
+import org.apache.archiva.repository.RepositoryRegistry;
+import org.apache.archiva.repository.maven2.MavenManagedRepository;
 import org.apache.commons.io.FileUtils;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.NetworkProxyConfiguration;
@@ -55,10 +57,12 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.net.URI;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Locale;
 
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 
@@ -118,10 +122,8 @@ public class HttpProxyTransferTest
         // Make the destination dir.
         Files.createDirectories(destRepoDir);
 
-        ManagedRepository repo = new ManagedRepository();
-        repo.setId( MANAGED_ID );
-        repo.setName( "Default Managed Repository" );
-        repo.setLocation( repoPath );
+        MavenManagedRepository repo = new MavenManagedRepository( MANAGED_ID, "Default Managed Repository" );
+        repo.setLocation( new URI(repoPath) );
         repo.setLayout( "default" );
 
         ManagedRepositoryContent repoContent =
@@ -133,10 +135,10 @@ public class HttpProxyTransferTest
         ( (DefaultManagedRepositoryAdmin) applicationContext.getBean(
             ManagedRepositoryAdmin.class ) ).setArchivaConfiguration( config );
 
-        ManagedRepositoryAdmin managedRepositoryAdmin = applicationContext.getBean( ManagedRepositoryAdmin.class );
+        RepositoryRegistry managedRepositoryAdmin = applicationContext.getBean( RepositoryRegistry.class );
         if ( managedRepositoryAdmin.getManagedRepository( repo.getId() ) == null )
         {
-            managedRepositoryAdmin.addManagedRepository( repo, false, null );
+            managedRepositoryAdmin.putRepository( repo );
         }
 
         //config.getConfiguration().addManagedRepository( repo );

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java
index 935f2a6..fce6949 100644
--- a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java
+++ b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java
@@ -35,6 +35,7 @@ import org.springframework.stereotype.Service;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 import javax.annotation.PostConstruct;
 
@@ -145,4 +146,16 @@ public class MockConfiguration
     {
         // no op
     }
+
+    @Override
+    public Locale getDefaultLocale( )
+    {
+        return Locale.getDefault();
+    }
+
+    @Override
+    public List<Locale.LanguageRange> getLanguagePriorities( )
+    {
+        return Locale.LanguageRange.parse( "en,fr,de" );
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
new file mode 100644
index 0000000..834ce5b
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
@@ -0,0 +1,231 @@
+package org.apache.archiva.repository.mock;
+
+/*
+ * 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.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.BasicRemoteRepository;
+import org.apache.archiva.repository.EditableManagedRepository;
+import org.apache.archiva.repository.EditableRemoteRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryCredentials;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryProvider;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
+import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import org.springframework.stereotype.Service;
+
+import java.net.URI;
+import java.time.Duration;
+import java.time.Period;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Just a simple mock class for the repository provider
+ */
+@Service("mockRepositoryProvider")
+public class RepositoryProviderMock implements RepositoryProvider
+{
+
+    private static final Set<RepositoryType> TYPES = new HashSet<>( );
+
+    static
+    {
+        TYPES.add( RepositoryType.MAVEN );
+        TYPES.add( RepositoryType.NPM );
+    }
+
+    @Override
+    public Set<RepositoryType> provides( )
+    {
+        return TYPES;
+    }
+
+    @Override
+    public EditableManagedRepository createManagedInstance( String id, String name )
+    {
+        return new BasicManagedRepository( id, name );
+    }
+
+    @Override
+    public EditableRemoteRepository createRemoteInstance( String id, String name )
+    {
+        return new BasicRemoteRepository( id, name );
+    }
+
+    @Override
+    public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        BasicManagedRepository managedRepository = new BasicManagedRepository( configuration.getId( ), configuration.getName( ) );
+        updateManagedInstance( managedRepository, configuration );
+        return managedRepository;
+    }
+
+
+    @Override
+    public void updateManagedInstance( EditableManagedRepository managedRepository, ManagedRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        try
+        {
+            managedRepository.setName( managedRepository.getPrimaryLocale(), configuration.getName( ) );
+            managedRepository.setLocation( new URI( configuration.getLocation( )==null ?"" : configuration.getLocation() ) );
+            managedRepository.setBaseUri( new URI( "" ) );
+            managedRepository.setBlocksRedeployment( configuration.isBlockRedeployments( ) );
+            managedRepository.setDescription( managedRepository.getPrimaryLocale(), configuration.getDescription( ) );
+            managedRepository.setLayout( configuration.getLayout( ) );
+            managedRepository.setScanned( configuration.isScanned( ) );
+            managedRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
+            if (configuration.isReleases()) {
+                managedRepository.addActiveReleaseScheme( ReleaseScheme.RELEASE );
+            }
+            if (configuration.isSnapshots()) {
+                managedRepository.addActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
+            }
+            ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
+            acf.setRetentionPeriod( Period.ofDays( configuration.getRetentionPeriod( ) ) );
+            acf.setDeleteReleasedSnapshots( configuration.isDeleteReleasedSnapshots( ) );
+            acf.setRetentionCount( configuration.getRetentionCount( ) );
+            IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
+            icf.setIndexPath( new URI( configuration.getIndexDir( ) ) );
+            icf.setSkipPackedIndexCreation( configuration.isSkipPackedIndexCreation( ) );
+            StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
+            srf.setStageRepoNeeded( configuration.isStageRepoNeeded( ) );
+        }
+        catch ( Exception e )
+        {
+            throw new RepositoryException( "Error", e );
+        }
+
+    }
+
+
+    @Override
+    public ManagedRepository createStagingInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        String id = configuration.getId( ) + StagingRepositoryFeature.STAGING_REPO_POSTFIX;
+        BasicManagedRepository managedRepository = new BasicManagedRepository( id, configuration.getName( ) );
+        updateManagedInstance( managedRepository, configuration );
+        return managedRepository;
+    }
+
+    @Override
+    public RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        BasicRemoteRepository remoteRepository = new BasicRemoteRepository( configuration.getId( ), configuration.getName( ) );
+        updateRemoteInstance( remoteRepository, configuration );
+        return remoteRepository;
+    }
+
+    @Override
+    public void updateRemoteInstance( EditableRemoteRepository remoteRepository, RemoteRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        try
+        {
+            remoteRepository.setName( remoteRepository.getPrimaryLocale(), configuration.getName( ) );
+            remoteRepository.setBaseUri( new URI( "" ) );
+            remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), configuration.getDescription( ) );
+            remoteRepository.setLayout( configuration.getLayout( ) );
+            remoteRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
+            remoteRepository.setCheckPath( configuration.getCheckPath( ) );
+            remoteRepository.setExtraHeaders( configuration.getExtraHeaders( ) );
+            remoteRepository.setExtraParameters( configuration.getExtraParameters( ) );
+            remoteRepository.setTimeout( Duration.ofSeconds( configuration.getTimeout( ) ) );
+            char[] pwd = configuration.getPassword()==null ? "".toCharArray() : configuration.getPassword().toCharArray();
+            remoteRepository.setCredentials( new PasswordCredentials( configuration.getUsername( ), pwd ) );
+            remoteRepository.setLocation( new URI( configuration.getUrl( )==null ? "" : configuration.getUrl() ) );
+            RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
+            rif.setDownloadRemoteIndexOnStartup( configuration.isDownloadRemoteIndexOnStartup( ) );
+            rif.setDownloadRemoteIndex( configuration.isDownloadRemoteIndex( ) );
+            rif.setIndexUri( new URI( configuration.getIndexDir( ) ) );
+            rif.setDownloadTimeout( Duration.ofSeconds( configuration.getRemoteDownloadTimeout( ) ) );
+            rif.setProxyId( configuration.getRemoteDownloadNetworkProxyId( ) );
+        }
+        catch ( Exception e )
+        {
+            throw new RepositoryException( "Error", e );
+        }
+
+    }
+
+    @Override
+    public ManagedRepositoryConfiguration getManagedConfiguration( ManagedRepository managedRepository ) throws RepositoryException
+    {
+        ManagedRepositoryConfiguration configuration = new ManagedRepositoryConfiguration( );
+        configuration.setId( managedRepository.getId( ) );
+        configuration.setName(managedRepository.getName());
+        configuration.setLocation( managedRepository.getLocation( ) == null ? "" : managedRepository.getLocation().toString( ) );
+        configuration.setBlockRedeployments( managedRepository.blocksRedeployments( ) );
+        configuration.setDescription( managedRepository.getDescription( ) );
+        configuration.setLayout( managedRepository.getLayout( ) );
+        configuration.setScanned( managedRepository.isScanned( ) );
+        configuration.setRefreshCronExpression( managedRepository.getSchedulingDefinition( ) );
+        configuration.setReleases( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE) );
+        configuration.setSnapshots( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT) );
+        ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
+        configuration.setRetentionPeriod( acf.getRetentionPeriod( ).getDays( ) );
+        configuration.setDeleteReleasedSnapshots( acf.isDeleteReleasedSnapshots( ) );
+        configuration.setRetentionCount( acf.getRetentionCount( ) );
+        IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
+        configuration.setSkipPackedIndexCreation( icf.isSkipPackedIndexCreation( ) );
+        configuration.setIndexDir( icf.getIndexPath( ) == null ? "" : icf.getIndexPath().toString( ) );
+        StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
+        configuration.setStageRepoNeeded( srf.isStageRepoNeeded( ) );
+        return configuration;
+    }
+
+
+    @Override
+    public RemoteRepositoryConfiguration getRemoteConfiguration( RemoteRepository remoteRepository ) throws RepositoryException
+    {
+        RemoteRepositoryConfiguration configuration = new RemoteRepositoryConfiguration( );
+        configuration.setId( remoteRepository.getId( ) );
+        configuration.setName( remoteRepository.getName( ) );
+        configuration.setDescription( remoteRepository.getDescription( ) );
+        configuration.setLayout( remoteRepository.getLayout( ) );
+        configuration.setRefreshCronExpression( remoteRepository.getSchedulingDefinition( ) );
+        configuration.setCheckPath( remoteRepository.getCheckPath( ) );
+        configuration.setExtraHeaders( remoteRepository.getExtraHeaders( ) );
+        configuration.setExtraParameters( remoteRepository.getExtraParameters( ) );
+        configuration.setTimeout( (int) remoteRepository.getTimeout( ).getSeconds( ) );
+        RepositoryCredentials creds = remoteRepository.getLoginCredentials( );
+        if (creds!=null)
+        {
+            PasswordCredentials pwdCreds = (PasswordCredentials) creds;
+            configuration.setUsername( pwdCreds.getUsername( ) );
+            configuration.setPassword( new String( pwdCreds.getPassword( ) ) );
+        }
+        configuration.setUrl( remoteRepository.getLocation( ) == null ? "" : remoteRepository.getLocation().toString( ) );
+        RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
+        configuration.setDownloadRemoteIndex( rif.isDownloadRemoteIndex( ) );
+        configuration.setDownloadRemoteIndexOnStartup( rif.isDownloadRemoteIndexOnStartup( ) );
+        configuration.setIndexDir( rif.getIndexUri( )==null ? "" : rif.getIndexUri().toString( ) );
+        configuration.setRemoteDownloadNetworkProxyId( rif.getProxyId( ) );
+        return configuration;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-proxy/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-proxy/src/test/resources/spring-context.xml b/archiva-modules/archiva-base/archiva-proxy/src/test/resources/spring-context.xml
index 7a57f01..6ec124f 100755
--- a/archiva-modules/archiva-base/archiva-proxy/src/test/resources/spring-context.xml
+++ b/archiva-modules/archiva-base/archiva-proxy/src/test/resources/spring-context.xml
@@ -28,7 +28,10 @@
        default-lazy-init="true">
 
   <context:annotation-config/>
-  <context:component-scan base-package="org.apache.archiva.metadata.repository"/>
+  <context:component-scan base-package="org.apache.archiva.metadata.repository,org.apache.archiva.repository.content.maven2,org.apache.archiva.proxy,org.apache.archiva.repository.mock"/>
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
+  <alias name="mockRepositoryProvider" alias="mavenRepositoryProvider" />
 
   <alias name="archivaConfiguration#mock" alias="archivaConfiguration#default"/>
   <alias name="archivaConfiguration#mock" alias="archivaConfiguration"/>

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/DefaultRepositoryScanner.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/DefaultRepositoryScanner.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/DefaultRepositoryScanner.java
index 5daae07..fff2069 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/DefaultRepositoryScanner.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/DefaultRepositoryScanner.java
@@ -20,11 +20,11 @@ package org.apache.archiva.repository.scanner;
  */
 
 import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.configuration.FileTypes;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.archiva.consumers.RepositoryContentConsumer;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java
index 5ccdb1e..c3159c7 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java
@@ -21,13 +21,14 @@ package org.apache.archiva.repository.scanner;
 
 import org.apache.archiva.admin.model.RepositoryAdminException;
 import org.apache.archiva.admin.model.admin.ArchivaAdministration;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.common.utils.BaseFile;
+import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.archiva.consumers.functors.ConsumerWantsFilePredicate;
 import org.apache.archiva.redback.components.registry.RegistryListener;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.scanner.functors.ConsumerProcessFileClosure;
 import org.apache.archiva.repository.scanner.functors.TriggerBeginScanClosure;
 import org.apache.archiva.repository.scanner.functors.TriggerScanCompletedClosure;
@@ -41,6 +42,7 @@ import org.springframework.stereotype.Service;
 
 import javax.inject.Inject;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.*;
 
 /**
@@ -262,7 +264,7 @@ public class RepositoryContentConsumers
      * @param localFile              the local file to execute the consumers against.
      * @param updateRelatedArtifacts TODO
      */
-    public void executeConsumers(ManagedRepository repository, Path localFile, boolean updateRelatedArtifacts )
+    public void executeConsumers( ManagedRepository repository, Path localFile, boolean updateRelatedArtifacts )
         throws RepositoryAdminException
     {
         List<KnownRepositoryContentConsumer> selectedKnownConsumers = null;
@@ -296,7 +298,8 @@ public class RepositoryContentConsumers
 
             // yuck. In case you can't read this, it says
             // "process the file if the consumer has it in the includes list, and not in the excludes list"
-            BaseFile baseFile = new BaseFile( repository.getLocation(), localFile.toFile() );
+            Path repoPath = PathUtil.getPathFromUri( repository.getLocation() );
+            BaseFile baseFile = new BaseFile( repoPath.toString(), localFile.toFile() );
             ConsumerWantsFilePredicate predicate = new ConsumerWantsFilePredicate( repository );
             predicate.setBasefile( baseFile );
             predicate.setCaseSensitive( false );

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanStatistics.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanStatistics.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanStatistics.java
index 8e2dd83..1d9ebbe 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanStatistics.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanStatistics.java
@@ -19,7 +19,7 @@ package org.apache.archiva.repository.scanner;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.commons.collections.CollectionUtils;
 
 import javax.xml.bind.annotation.XmlRootElement;

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanner.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanner.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanner.java
index cfa8f17..8c5cb89 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanner.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScanner.java
@@ -19,9 +19,9 @@ package org.apache.archiva.repository.scanner;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
+import org.apache.archiva.repository.ManagedRepository;
 
 import java.util.List;
 import java.util.Set;

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScannerInstance.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScannerInstance.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScannerInstance.java
index 55e0e52..5928823 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScannerInstance.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScannerInstance.java
@@ -19,11 +19,12 @@ package org.apache.archiva.repository.scanner;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.common.utils.BaseFile;
+import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.archiva.consumers.functors.ConsumerWantsFilePredicate;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.scanner.functors.ConsumerProcessFileClosure;
 import org.apache.archiva.repository.scanner.functors.TriggerBeginScanClosure;
 import org.apache.archiva.repository.scanner.functors.TriggerScanCompletedClosure;
@@ -216,7 +217,8 @@ public class RepositoryScannerInstance
             stats.increaseFileCount();
 
             // consume files regardless - the predicate will check the timestamp
-            BaseFile basefile = new BaseFile( repository.getLocation(), file.toFile() );
+            Path repoPath = PathUtil.getPathFromUri( repository.getLocation() );
+            BaseFile basefile = new BaseFile( repoPath.toString(), file.toFile() );
 
             // Timestamp finished points to the last successful scan, not this current one.
             if ( Files.getLastModifiedTime(file).toMillis() >= changesSince )

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerBeginScanClosure.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerBeginScanClosure.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerBeginScanClosure.java
index b830854..4ae19dc 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerBeginScanClosure.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerBeginScanClosure.java
@@ -19,7 +19,7 @@ package org.apache.archiva.repository.scanner.functors;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.commons.collections.Closure;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.RepositoryContentConsumer;

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerScanCompletedClosure.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerScanCompletedClosure.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerScanCompletedClosure.java
index 3b7cf9d..c4789be 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerScanCompletedClosure.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/TriggerScanCompletedClosure.java
@@ -19,7 +19,7 @@ package org.apache.archiva.repository.scanner.functors;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.commons.collections.Closure;
 import org.apache.archiva.consumers.RepositoryContentConsumer;
 import org.slf4j.Logger;

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/InvalidScanConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/InvalidScanConsumer.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/InvalidScanConsumer.java
index cee2d72..81f9440 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/InvalidScanConsumer.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/InvalidScanConsumer.java
@@ -19,10 +19,10 @@ package org.apache.archiva.repository.scanner;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.consumers.AbstractMonitoredConsumer;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
+import org.apache.archiva.repository.ManagedRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Scope;

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/KnownScanConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/KnownScanConsumer.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/KnownScanConsumer.java
index f494bf4..7a48f71 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/KnownScanConsumer.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/KnownScanConsumer.java
@@ -19,12 +19,10 @@ package org.apache.archiva.repository.scanner;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.consumers.AbstractMonitoredConsumer;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Service;
+import org.apache.archiva.repository.ManagedRepository;
 
 import java.util.ArrayList;
 import java.util.Arrays;

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryContentConsumersTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryContentConsumersTest.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryContentConsumersTest.java
index 988e3ef..c24c0c2 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryContentConsumersTest.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryContentConsumersTest.java
@@ -20,11 +20,13 @@ package org.apache.archiva.repository.scanner;
  */
 
 import junit.framework.TestCase;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.model.beans.RemoteRepository;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.BasicRemoteRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.RemoteRepository;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.commons.lang.SystemUtils;
 import org.easymock.IMocksControl;
@@ -46,6 +48,8 @@ import org.springframework.test.context.ContextConfiguration;
 import javax.inject.Inject;
 import java.io.IOException;
 import java.lang.annotation.Annotation;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Arrays;
@@ -72,19 +76,15 @@ public class RepositoryContentConsumersTest
 
     protected ManagedRepository createRepository( String id, String name, Path location )
     {
-        ManagedRepository repo = new ManagedRepository();
-        repo.setId( id );
-        repo.setName( name );
-        repo.setLocation( location.toAbsolutePath().toString() );
+        BasicManagedRepository repo = new BasicManagedRepository( id, name  );
+        repo.setLocation( location.toAbsolutePath().toUri() );
         return repo;
     }
 
-    protected RemoteRepository createRemoteRepository( String id, String name, String url )
+    protected RemoteRepository createRemoteRepository( String id, String name, String url ) throws URISyntaxException
     {
-        RemoteRepository repo = new RemoteRepository();
-        repo.setId( id );
-        repo.setName( name );
-        repo.setUrl( url );
+        BasicRemoteRepository repo = new BasicRemoteRepository(id, name);
+        repo.setLocation( new URI( url ) );
         return repo;
     }
 


[19/21] archiva git commit: Adapting the web modules to the new repository api

Posted by ma...@apache.org.
Adapting the web modules to the new repository api


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/d6120d6c
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/d6120d6c
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/d6120d6c

Branch: refs/heads/master
Commit: d6120d6c22acd9996531716ae77806795277c9c7
Parents: 32ff2ca
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:39:07 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:39:07 2017 +0100

----------------------------------------------------------------------
 .../api/model/RepositoryScannerStatistics.java  |   2 +
 .../archiva-rest/archiva-rest-services/pom.xml  |   1 -
 .../rest/services/AbstractRestService.java      |  14 +-
 .../rest/services/DefaultBrowseService.java     |  43 +++--
 .../services/DefaultRepositoriesService.java    |  48 +++--
 .../services/DefaultSystemStatusService.java    |  16 +-
 .../rest/services/AbstractArchivaRestTest.java  |   5 +-
 .../services/RemoteRepositoriesServiceTest.java |   7 +-
 .../rest/services/RepositoriesServiceTest.java  |   3 +-
 .../resources/META-INF/spring-context-test.xml  |   5 +-
 .../archiva/security/AbstractSecurityTest.java  |   5 +
 .../archiva/security/mock/MockBeanServices.java |   2 +-
 .../src/test/resources/spring-context.xml       |   3 +
 .../MockInvalidRepositoryContentConsumer.java   |   2 +-
 .../org/apache/archiva/i18n/default.properties  |   6 +-
 .../DownloadArtifactFromQueryTest.java          |   3 +-
 .../DownloadMergedIndexNonDefaultPathTest.java  |   7 +-
 .../remotedownload/DownloadMergedIndexTest.java |   7 +-
 .../remotedownload/DownloadSnapshotTest.java    |   3 +-
 .../RemoteRepositoryConnectivityCheckTest.java  |   3 +-
 .../spring-context-artifacts-download.xml       |   5 +
 .../spring-context-merge-index-download.xml     |   4 +
 .../resources/spring-context-rss-servlet.xml    |   6 +-
 .../resources/spring-context-test-common.xml    |   4 +-
 .../test/resources/spring-context-with-jcr.xml  |   4 +
 .../admin/repository/maven2/repositories.js     |  10 +-
 .../js/templates/archiva/repositories.html      |  14 +-
 .../archiva/webdav/ArchivaDavResource.java      |  30 ++-
 .../webdav/ArchivaDavResourceFactory.java       | 187 +++++++++----------
 .../archiva/webdav/RepositoryServlet.java       |   2 +-
 .../AbstractRepositoryServletTestCase.java      |   7 +
 .../webdav/ArchivaDavResourceFactoryTest.java   |  37 +++-
 .../apache/archiva/webdav/DavResourceTest.java  |  19 +-
 .../RepositoryServletRepositoryGroupTest.java   |   1 +
 .../webdav/RepositoryServletSecurityTest.java   |   5 +
 .../src/test/resources/repository-archiva.xml   |   2 +-
 .../spring-context-servlet-security-test.xml    |   5 +-
 .../src/test/resources/spring-context.xml       |   5 +-
 38 files changed, 328 insertions(+), 204 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/RepositoryScannerStatistics.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/RepositoryScannerStatistics.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/RepositoryScannerStatistics.java
index b6143ac..5115f1a 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/RepositoryScannerStatistics.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/model/RepositoryScannerStatistics.java
@@ -18,6 +18,8 @@ package org.apache.archiva.rest.api.model;
  * under the License.
  */
 
+
+
 import org.apache.archiva.admin.model.beans.ManagedRepository;
 
 import javax.xml.bind.annotation.XmlRootElement;

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml
index fd293fa..c3c8a2f 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/pom.xml
@@ -55,7 +55,6 @@
     <dependency>
       <groupId>org.apache.archiva</groupId>
       <artifactId>archiva-configuration</artifactId>
-      <scope>runtime</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.archiva</groupId>

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/AbstractRestService.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/AbstractRestService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/AbstractRestService.java
index 3089024..4dacc86 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/AbstractRestService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/AbstractRestService.java
@@ -37,8 +37,11 @@ import org.apache.archiva.redback.configuration.UserConfigurationKeys;
 import org.apache.archiva.redback.rest.services.RedbackAuthenticationThreadLocal;
 import org.apache.archiva.redback.rest.services.RedbackRequestInformation;
 import org.apache.archiva.redback.users.User;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.RepositoryContentFactory;
 import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.events.AuditListener;
 import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
 import org.apache.archiva.rest.services.utils.ArtifactBuilder;
@@ -99,6 +102,9 @@ public abstract class AbstractRestService
     protected ManagedRepositoryAdmin managedRepositoryAdmin;
 
     @Inject
+    protected RepositoryRegistry repositoryRegistry;
+
+    @Inject
     protected RepositoryContentFactory repositoryContentFactory;
 
     @Inject
@@ -322,10 +328,14 @@ public abstract class AbstractRestService
                     if ( repoId == null ) {
                         throw new IllegalStateException( "Repository Id is null" );
                     }
-
+                    ManagedRepository repo = repositoryRegistry.getManagedRepository( repoId );
+                    if (repo==null) {
+                        throw new RepositoryException( "Repository not found "+repoId );
+                    }
+                    ManagedRepositoryContent content = repo.getContent( );
                     ArtifactBuilder builder =
                         new ArtifactBuilder().forArtifactMetadata( artifact ).withManagedRepositoryContent(
-                            repositoryContentFactory.getManagedRepositoryContent( repoId ) );
+                            content );
                     Artifact art = builder.build();
                     art.setUrl( getArtifactUrl( art, repositoryId ) );
                     artifacts.add( art );

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
index aad3f28..2a87462 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
@@ -42,6 +42,7 @@ import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.RepositoryContentFactory;
 import org.apache.archiva.repository.RepositoryException;
 import org.apache.archiva.repository.RepositoryNotFoundException;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.metadata.MetadataTools;
 import org.apache.archiva.rest.api.model.*;
 import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
@@ -83,9 +84,6 @@ public class DefaultBrowseService
     private DependencyTreeBuilder dependencyTreeBuilder;
 
     @Inject
-    private RepositoryContentFactory repositoryContentFactory;
-
-    @Inject
     @Named( value = "repositoryProxyConnectors#default" )
     private RepositoryProxyConnectors connectors;
 
@@ -93,6 +91,15 @@ public class DefaultBrowseService
     @Named( value = "browse#versionMetadata" )
     private Cache<String, ProjectVersionMetadata> versionMetadataCache;
 
+    private ManagedRepositoryContent getManagedRepositoryContent(String id) throws RepositoryException
+    {
+        org.apache.archiva.repository.ManagedRepository repo = repositoryRegistry.getManagedRepository( id );
+        if (repo==null) {
+            throw new RepositoryException( "Could not find repository "+id );
+        }
+        return repo.getContent();
+    }
+
     @Override
     public BrowseResult getRootGroups( String repositoryId )
         throws ArchivaRestServiceException
@@ -687,7 +694,7 @@ public class DefaultBrowseService
             {
 
                 ManagedRepositoryContent managedRepositoryContent =
-                    repositoryContentFactory.getManagedRepositoryContent( repoId );
+                    getManagedRepositoryContent( repoId );
                 ArchivaArtifact archivaArtifact = new ArchivaArtifact( groupId, artifactId, version, classifier,
                                                                        StringUtils.isEmpty( type ) ? "jar" : type,
                                                                        repoId );
@@ -763,8 +770,16 @@ public class DefaultBrowseService
             for ( String repoId : selectedRepos )
             {
 
-                ManagedRepositoryContent managedRepositoryContent =
-                    repositoryContentFactory.getManagedRepositoryContent( repoId );
+                ManagedRepositoryContent managedRepositoryContent = null;
+                try
+                {
+                    managedRepositoryContent = getManagedRepositoryContent( repoId );
+                }
+                catch ( RepositoryException e )
+                {
+                    log.error("No repository content found for "+repoId);
+                    continue;
+                }
                 ArchivaArtifact archivaArtifact = new ArchivaArtifact( groupId, artifactId, version, classifier,
                                                                        StringUtils.isEmpty( type ) ? "jar" : type,
                                                                        repoId );
@@ -797,18 +812,6 @@ public class DefaultBrowseService
             throw new ArchivaRestServiceException( e.getMessage(),
                                                    Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );
         }
-        catch ( RepositoryNotFoundException e )
-        {
-            log.error( e.getMessage(), e );
-            throw new ArchivaRestServiceException( e.getMessage(),
-                                                   Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );
-        }
-        catch ( RepositoryException e )
-        {
-            log.error( e.getMessage(), e );
-            throw new ArchivaRestServiceException( e.getMessage(),
-                                                   Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );
-        }
         log.debug( "artifact: {}:{}:{}:{}:{} not found", groupId, artifactId, version, classifier, type );
         // 404 ?
         return new ArtifactContent();
@@ -835,8 +838,8 @@ public class DefaultBrowseService
                 {
                     continue;
                 }
-                ManagedRepositoryContent managedRepositoryContent =
-                    repositoryContentFactory.getManagedRepositoryContent( repoId );
+                ManagedRepositoryContent managedRepositoryContent = getManagedRepositoryContent( repoId );
+
                 // FIXME default to jar which can be wrong for war zip etc....
                 ArchivaArtifact archivaArtifact = new ArchivaArtifact( groupId, artifactId, version,
                                                                        StringUtils.isEmpty( classifier )

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
index 697cadc..155546d 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
@@ -48,6 +48,7 @@ import org.apache.archiva.redback.users.User;
 import org.apache.archiva.redback.users.UserManagerException;
 import org.apache.archiva.redback.users.UserNotFoundException;
 import org.apache.archiva.repository.*;
+import org.apache.archiva.repository.content.maven2.ManagedDefaultRepositoryContent;
 import org.apache.archiva.repository.events.RepositoryListener;
 import org.apache.archiva.repository.metadata.MetadataTools;
 import org.apache.archiva.repository.metadata.RepositoryMetadataException;
@@ -102,6 +103,9 @@ public class DefaultRepositoriesService
     private ArchivaIndexingTaskExecutor archivaIndexingTaskExecutor;
 
     @Inject
+    private RepositoryRegistry repositoryRegistry;
+
+    @Inject
     private ManagedRepositoryAdmin managedRepositoryAdmin;
 
     @Inject
@@ -111,9 +115,6 @@ public class DefaultRepositoriesService
     private SecuritySystem securitySystem;
 
     @Inject
-    private RepositoryContentFactory repositoryFactory;
-
-    @Inject
     @Named(value = "archivaTaskScheduler#repository")
     private ArchivaTaskScheduler scheduler;
 
@@ -180,6 +181,15 @@ public class DefaultRepositoriesService
         }
     }
 
+    private ManagedRepositoryContent getManagedRepositoryContent(String id) throws RepositoryException
+    {
+        org.apache.archiva.repository.ManagedRepository repo = repositoryRegistry.getManagedRepository( id );
+        if (repo==null) {
+            throw new RepositoryException( "Repository not found "+id );
+        }
+        return repo.getContent();
+    }
+
     @Override
     public Boolean scanRepositoryNow( String repositoryId, boolean fullScan )
         throws ArchivaRestServiceException
@@ -187,7 +197,8 @@ public class DefaultRepositoriesService
 
         try
         {
-            ManagedRepository repository = managedRepositoryAdmin.getManagedRepository( repositoryId );
+
+            org.apache.archiva.repository.ManagedRepository repository = repositoryRegistry.getManagedRepository( repositoryId );
 
             IndexingContext context = managedRepositoryAdmin.createIndexContext( repository );
 
@@ -367,7 +378,7 @@ public class DefaultRepositoriesService
         {
 
             ManagedRepositoryContent sourceRepository =
-                repositoryFactory.getManagedRepositoryContent( artifactTransferRequest.getRepositoryId() );
+                getManagedRepositoryContent( artifactTransferRequest.getRepositoryId() );
 
             String artifactSourcePath = sourceRepository.toPath( artifactReference );
 
@@ -388,7 +399,7 @@ public class DefaultRepositoriesService
             }
 
             ManagedRepositoryContent targetRepository =
-                repositoryFactory.getManagedRepositoryContent( artifactTransferRequest.getTargetRepositoryId() );
+                getManagedRepositoryContent( artifactTransferRequest.getTargetRepositoryId() );
 
             String artifactPath = targetRepository.toPath( artifactReference );
 
@@ -646,7 +657,7 @@ public class DefaultRepositoriesService
 
         try
         {
-            ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );
+            ManagedRepositoryContent repository = getManagedRepositoryContent( repositoryId );
 
             VersionedReference ref = new VersionedReference();
             ref.setArtifactId( projectId );
@@ -767,7 +778,7 @@ public class DefaultRepositoriesService
             ref.setGroupId( artifact.getGroupId() );
             ref.setVersion( artifact.getVersion() );
 
-            ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );
+            ManagedRepositoryContent repository = getManagedRepositoryContent( repositoryId );
 
             ArtifactReference artifactReference = new ArtifactReference();
             artifactReference.setArtifactId( artifact.getArtifactId() );
@@ -977,7 +988,7 @@ public class DefaultRepositoriesService
 
         try
         {
-            ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );
+            ManagedRepositoryContent repository = getManagedRepositoryContent( repositoryId );
 
             repository.deleteGroupId( groupId );
 
@@ -1038,7 +1049,7 @@ public class DefaultRepositoriesService
 
         try
         {
-            ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );
+            ManagedRepositoryContent repository = getManagedRepositoryContent( repositoryId );
 
             repository.deleteProject( groupId, projectId );
         }
@@ -1100,18 +1111,13 @@ public class DefaultRepositoriesService
         long sinceWhen = RepositoryScanner.FRESH_SCAN;
         try
         {
-            return repoScanner.scan( getManagedRepositoryAdmin().getManagedRepository( repositoryId ), sinceWhen );
+            return repoScanner.scan( repositoryRegistry.getManagedRepository( repositoryId ), sinceWhen );
         }
         catch ( RepositoryScannerException e )
         {
             log.error( e.getMessage(), e );
             throw new ArchivaRestServiceException( "RepositoryScannerException exception: " + e.getMessage(), 500, e );
         }
-        catch ( RepositoryAdminException e )
-        {
-            log.error( e.getMessage(), e );
-            throw new ArchivaRestServiceException( "RepositoryScannerException exception: " + e.getMessage(), 500, e );
-        }
     }
 
     /**
@@ -1191,16 +1197,6 @@ public class DefaultRepositoriesService
         this.managedRepositoryAdmin = managedRepositoryAdmin;
     }
 
-    public RepositoryContentFactory getRepositoryFactory()
-    {
-        return repositoryFactory;
-    }
-
-    public void setRepositoryFactory( RepositoryContentFactory repositoryFactory )
-    {
-        this.repositoryFactory = repositoryFactory;
-    }
-
     public RepositorySessionFactory getRepositorySessionFactory()
     {
         return repositorySessionFactory;

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSystemStatusService.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSystemStatusService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSystemStatusService.java
index 89663e1..ab49702 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSystemStatusService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSystemStatusService.java
@@ -18,6 +18,8 @@ package org.apache.archiva.rest.services;
  * under the License.
  */
 
+import org.apache.archiva.admin.model.RepositoryAdminException;
+import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
 import org.apache.archiva.redback.components.cache.Cache;
 import org.apache.archiva.redback.components.cache.CacheStatistics;
 import org.apache.archiva.redback.components.taskqueue.TaskQueue;
@@ -57,6 +59,8 @@ public class DefaultSystemStatusService
 
     private RepositoryScanner scanner;
 
+    ManagedRepositoryAdmin managedRepositoryAdmin;
+
     // display spring scheduled
     //@Inject @Named (value="springScheduler");
 
@@ -69,6 +73,8 @@ public class DefaultSystemStatusService
         queues = getBeansOfType( applicationContext, TaskQueue.class );
 
         caches = getBeansOfType( applicationContext, Cache.class );
+
+        managedRepositoryAdmin = applicationContext.getBean( ManagedRepositoryAdmin.class );
     }
 
     @Override
@@ -178,11 +184,19 @@ public class DefaultSystemStatusService
         List<RepositoryScannerStatistics> repositoryScannerStatisticsList =
             new ArrayList<RepositoryScannerStatistics>( repositoryScannerInstances.size() );
 
+
         for ( RepositoryScannerInstance instance : repositoryScannerInstances )
         {
             RepositoryScannerStatistics repositoryScannerStatistics = new RepositoryScannerStatistics();
             repositoryScannerStatisticsList.add( repositoryScannerStatistics );
-            repositoryScannerStatistics.setManagedRepository( instance.getRepository() );
+            try
+            {
+                repositoryScannerStatistics.setManagedRepository( managedRepositoryAdmin.getManagedRepository( instance.getRepository().getId())  );
+            }
+            catch ( RepositoryAdminException e )
+            {
+                log.error("Could not retrieve repository '{}'", instance.getRepository().getId());
+            }
             repositoryScannerStatistics.setNewFileCount( instance.getStats().getNewFileCount() );
             repositoryScannerStatistics.setTotalFileCount( instance.getStats().getTotalFileCount() );
             repositoryScannerStatistics.setConsumerScanningStatistics( mapConsumerScanningStatistics( instance ) );

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java
index 22e599b..c055aee 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java
@@ -43,6 +43,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Collections;
 import java.util.Date;
+import java.util.Locale;
 
 /**
  * @author Olivier Lamy
@@ -320,7 +321,7 @@ public abstract class AbstractArchivaRestTest
     protected ManagedRepository getTestManagedRepository()
     {
         String location = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repo" ).toAbsolutePath().toString();
-        return new ManagedRepository( "TEST", "test", location, "default", true, true, false, "2 * * * * ?", null,
+        return new ManagedRepository( Locale.getDefault(),  "TEST", "test", location, "default", true, true, false, "2 * * * * ?", null,
                                       false, 2, 3, true, false, "my nice repo", false );
 
     }
@@ -429,7 +430,7 @@ public abstract class AbstractArchivaRestTest
             getManagedRepositoriesService( authorizationHeader ).deleteManagedRepository( testRepoId, false );
         }
 
-        ManagedRepository managedRepository = new ManagedRepository();
+        ManagedRepository managedRepository = new ManagedRepository(Locale.getDefault());
         managedRepository.setId( testRepoId );
         managedRepository.setName( "test repo" );
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java
index d3d6672..77605ed 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java
@@ -26,6 +26,7 @@ import org.junit.Test;
 
 import javax.ws.rs.ForbiddenException;
 import java.util.List;
+import java.util.Locale;
 
 /**
  * @author Olivier Lamy
@@ -201,21 +202,21 @@ public class RemoteRepositoriesServiceTest
 
     RemoteRepository getRemoteRepository()
     {
-        return new RemoteRepository( "id-new", "new one", "http://foo.com", "default", "foo", "foopassword", 120,
+        return new RemoteRepository( Locale.getDefault( ), "id-new", "new one", "http://foo.com", "default", "foo", "foopassword", 120,
                                      "cool repo" );
     }
 
 
     RemoteRepository getRemoteMavenRepository()
     {
-        return new RemoteRepository( "id-maven1", "Maven1", "http://repo.maven.apache.org/maven2", "default", "foo", "foopassword", 120,
+        return new RemoteRepository( Locale.getDefault( ),"id-maven1", "Maven1", "http://repo.maven.apache.org/maven2", "default", "foo", "foopassword", 120,
                 "cool repo3" );
     }
 
 
     RemoteRepository getRemoteOracleRepository()
     {
-        return new RemoteRepository( "id-oracle", "Oracle", "http://download.oracle.com/maven", "default", "foo", "foopassword", 120,
+        return new RemoteRepository( Locale.getDefault( ),"id-oracle", "Oracle", "http://download.oracle.com/maven", "default", "foo", "foopassword", 120,
                 "cool repo4" );
     }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
index 934bfc6..de7df45 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
@@ -37,6 +37,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
+import java.util.Locale;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -544,7 +545,7 @@ public class RepositoriesServiceTest
     protected ManagedRepository getTestManagedRepository( String id, String path )
     {
         String location = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/" + path ).toAbsolutePath().toString();
-        return new ManagedRepository( id, id, location, "default", true, true, true, "2 * * * * ?", null, false, 80, 80,
+        return new ManagedRepository( Locale.getDefault(), id, id, location, "default", true, true, true, "2 * * * * ?", null, false, 80, 80,
                                       true, false );
     }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/META-INF/spring-context-test.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/META-INF/spring-context-test.xml b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/META-INF/spring-context-test.xml
index 8e0df07..d77b845 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/META-INF/spring-context-test.xml
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/resources/META-INF/spring-context-test.xml
@@ -32,7 +32,10 @@
 
   <context:annotation-config/>
   <context:component-scan
-      base-package="org.apache.archiva.redback.keys,org.apache.archiva.rest.services.utils"/>
+      base-package="org.apache.archiva.redback.keys,org.apache.archiva.rest.services.utils,org.apache.archiva.repository.content.maven2"/>
+  
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
 
   <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
     <property name="properties">

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/AbstractSecurityTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/AbstractSecurityTest.java b/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/AbstractSecurityTest.java
index 0d61740..25b0ed6 100644
--- a/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/AbstractSecurityTest.java
+++ b/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/AbstractSecurityTest.java
@@ -32,6 +32,7 @@ import org.apache.archiva.redback.system.SecuritySystem;
 import org.apache.archiva.redback.users.User;
 import org.apache.archiva.redback.users.UserManager;
 import org.apache.archiva.redback.users.UserManagerException;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.security.common.ArchivaRoleConstants;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.commons.io.FileUtils;
@@ -80,6 +81,9 @@ public abstract class AbstractSecurityTest
     private ArchivaConfiguration archivaConfiguration;
 
     @Inject
+    private RepositoryRegistry repositoryRegistry;
+
+    @Inject
     protected UserRepositories userRepos;
 
     protected void setupRepository( String repoId )
@@ -94,6 +98,7 @@ public abstract class AbstractSecurityTest
         {
             archivaConfiguration.getConfiguration().addManagedRepository( repoConfig );
         }
+        repositoryRegistry.reload();
 
         // Add repo roles to security.
         userRepos.createMissingRepositoryRoles( repoId );

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/mock/MockBeanServices.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/mock/MockBeanServices.java b/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/mock/MockBeanServices.java
index d513a35..9480019 100644
--- a/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/mock/MockBeanServices.java
+++ b/archiva-modules/archiva-web/archiva-security/src/test/java/org/apache/archiva/security/mock/MockBeanServices.java
@@ -156,7 +156,7 @@ public class MockBeanServices
     }
 
     @Override
-    public String getFilePath( String requestPath, ManagedRepository managedRepository )
+    public String getFilePath( String requestPath, org.apache.archiva.repository.ManagedRepository managedRepository )
     {
         return null;
     }

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-security/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-security/src/test/resources/spring-context.xml b/archiva-modules/archiva-web/archiva-security/src/test/resources/spring-context.xml
index 6965148..fcc22ae 100644
--- a/archiva-modules/archiva-web/archiva-security/src/test/resources/spring-context.xml
+++ b/archiva-modules/archiva-web/archiva-security/src/test/resources/spring-context.xml
@@ -27,6 +27,9 @@
             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"
        default-lazy-init="true">
 
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
+
   <bean name="securitySystem#testable" class="org.apache.archiva.redback.system.DefaultSecuritySystem">
     <property name="userManager" ref="userManager#memory"/>
     <property name="keyManager" ref="keyManager#memory"/>

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-test-mocks/src/main/java/org/apache/archiva/web/mocks/MockInvalidRepositoryContentConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-test-mocks/src/main/java/org/apache/archiva/web/mocks/MockInvalidRepositoryContentConsumer.java b/archiva-modules/archiva-web/archiva-test-mocks/src/main/java/org/apache/archiva/web/mocks/MockInvalidRepositoryContentConsumer.java
index e3981bc..f517957 100644
--- a/archiva-modules/archiva-web/archiva-test-mocks/src/main/java/org/apache/archiva/web/mocks/MockInvalidRepositoryContentConsumer.java
+++ b/archiva-modules/archiva-web/archiva-test-mocks/src/main/java/org/apache/archiva/web/mocks/MockInvalidRepositoryContentConsumer.java
@@ -18,10 +18,10 @@ package org.apache.archiva.web.mocks;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.ConsumerMonitor;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
+import org.apache.archiva.repository.ManagedRepository;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties b/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties
index 666d997..bbaf02d 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties
+++ b/archiva-modules/archiva-web/archiva-web-common/src/main/resources/org/apache/archiva/i18n/default.properties
@@ -84,7 +84,7 @@ index.directory=Index Directory
 retentionCount=Retention Count
 snapshots=Snapshots
 blockRedeployments=Block Redeployments
-retentionTime=Days Older
+retentionPeriod=Days Older
 cronExpression=Cron Expression
 cronExpression.help.title=Cron Expression Format
 cronExpression.help.content= Quartz cron is used. Documentation is: <a target="_blank" href="http://quartz-scheduler.org/documentation/quartz-2.1.x/cookbook/">here</a>
@@ -129,8 +129,8 @@ managedRepository.location.help.title=Location
 managedRepository.location.help.content=Location on File System (can be relative to Archiva base directory or absolute path)
 managedRepository.indexDirectory.help.title=Index Directory
 managedRepository.indexDirectory.help.content=Path to the Maven Index directory
-managedRepository.retentionTime.help.title=Days Older
-managedRepository.retentionTime.help.content=For snapshots repositories, maximum file days age you want to keep
+managedRepository.retentionPeriod.help.title=Days Older
+managedRepository.retentionPeriod.help.content=For snapshots repositories, maximum file days age you want to keep
 managedRepository.retentionCount.help.title=Retention Count
 managedRepository.retentionCount.help.content=For snapshots repositories, maximum of files you want to keep.
 managedRepository.description.help.content=A free description for your repository

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadArtifactFromQueryTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadArtifactFromQueryTest.java b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadArtifactFromQueryTest.java
index 94a048f..beedae5 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadArtifactFromQueryTest.java
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadArtifactFromQueryTest.java
@@ -34,6 +34,7 @@ import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Locale;
 
 /**
  * @author Olivier Lamy
@@ -88,7 +89,7 @@ public class DownloadArtifactFromQueryTest
             FileUtils.deleteDirectory( tmpIndexDir.toFile() );
         }
         String id = Long.toString( System.currentTimeMillis() );
-        ManagedRepository managedRepository = new ManagedRepository();
+        ManagedRepository managedRepository = new ManagedRepository( Locale.getDefault());
         managedRepository.setId( id );
         managedRepository.setName( "name of " + id );
         managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" );

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadMergedIndexNonDefaultPathTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadMergedIndexNonDefaultPathTest.java b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadMergedIndexNonDefaultPathTest.java
index 0d0bbab..95f56ab 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadMergedIndexNonDefaultPathTest.java
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadMergedIndexNonDefaultPathTest.java
@@ -39,6 +39,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Locale;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -92,7 +93,7 @@ public class DownloadMergedIndexNonDefaultPathTest
             org.apache.archiva.common.utils.FileUtils.deleteDirectory( tmpIndexDir );
         }
         String id = Long.toString( System.currentTimeMillis() );
-        ManagedRepository managedRepository = new ManagedRepository();
+        ManagedRepository managedRepository = new ManagedRepository( Locale.getDefault());
         managedRepository.setId( id );
         managedRepository.setName( "name of " + id );
         managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" );
@@ -138,7 +139,7 @@ public class DownloadMergedIndexNonDefaultPathTest
 
         // create a repo with a remote on the one with index
         id = Long.toString( System.currentTimeMillis() );
-        managedRepository = new ManagedRepository();
+        managedRepository = new ManagedRepository(Locale.getDefault());
         managedRepository.setId( id );
         managedRepository.setName( "name of " + id );
         managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" );
@@ -153,7 +154,7 @@ public class DownloadMergedIndexNonDefaultPathTest
 
         String remoteId = Long.toString( System.currentTimeMillis() );
 
-        RemoteRepository remoteRepository = new RemoteRepository();
+        RemoteRepository remoteRepository = new RemoteRepository(Locale.getDefault());
         remoteRepository.setId( remoteId );
         remoteRepository.setName( remoteId );
         remoteRepository.setDownloadRemoteIndex( true );

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadMergedIndexTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadMergedIndexTest.java b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadMergedIndexTest.java
index c5cf891..f870d42 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadMergedIndexTest.java
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadMergedIndexTest.java
@@ -41,6 +41,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Locale;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -98,7 +99,7 @@ public class DownloadMergedIndexTest
             FileUtils.deleteDirectory( tmpIndexDir.toFile() );
         }
         String id = Long.toString( System.currentTimeMillis() );
-        ManagedRepository managedRepository = new ManagedRepository();
+        ManagedRepository managedRepository = new ManagedRepository( Locale.getDefault());
         managedRepository.setId( id );
         managedRepository.setName( "name of " + id );
         managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" );
@@ -142,7 +143,7 @@ public class DownloadMergedIndexTest
 
         // create a repo with a remote on the one with index
         id = Long.toString( System.currentTimeMillis() );
-        managedRepository = new ManagedRepository();
+        managedRepository = new ManagedRepository(Locale.getDefault());
         managedRepository.setId( id );
         managedRepository.setName( "name of " + id );
         managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" );
@@ -155,7 +156,7 @@ public class DownloadMergedIndexTest
 
         getManagedRepositoriesService().addManagedRepository( managedRepository );
 
-        RemoteRepository remoteRepository = new RemoteRepository();
+        RemoteRepository remoteRepository = new RemoteRepository(Locale.getDefault());
         remoteRepository.setId( "all-merged" );
         remoteRepository.setName( "all-merged" );
         remoteRepository.setDownloadRemoteIndex( true );

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadSnapshotTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadSnapshotTest.java b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadSnapshotTest.java
index f5913b7..024e1b8 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadSnapshotTest.java
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/DownloadSnapshotTest.java
@@ -38,6 +38,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
+import java.util.Locale;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
@@ -82,7 +83,7 @@ public class DownloadSnapshotTest
             org.apache.archiva.common.utils.FileUtils.deleteDirectory( tmpIndexDir );
         }
         String id = Long.toString( System.currentTimeMillis() );
-        ManagedRepository managedRepository = new ManagedRepository();
+        ManagedRepository managedRepository = new ManagedRepository( Locale.getDefault());
         managedRepository.setId( id );
         managedRepository.setName( "name of " + id );
         managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/snapshot-repo" );

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/RemoteRepositoryConnectivityCheckTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/RemoteRepositoryConnectivityCheckTest.java b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/RemoteRepositoryConnectivityCheckTest.java
index 256a9be..e9d156c 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/RemoteRepositoryConnectivityCheckTest.java
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/remotedownload/RemoteRepositoryConnectivityCheckTest.java
@@ -36,6 +36,7 @@ import org.junit.Test;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Locale;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -184,7 +185,7 @@ public class RemoteRepositoryConnectivityCheckTest
 
     RemoteRepository getRemoteRepository()
     {
-        return new RemoteRepository( "id-new", "new one", "http://foo.com", "default", "foo", "foopassword", 120,
+        return new RemoteRepository( Locale.getDefault( ), "id-new", "new one", "http://foo.com", "default", "foo", "foopassword", 120,
                                      "cool repo" );
     }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-artifacts-download.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-artifacts-download.xml b/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-artifacts-download.xml
index 570eeb5..cdec7b4 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-artifacts-download.xml
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-artifacts-download.xml
@@ -30,6 +30,11 @@
 
   <context:property-placeholder system-properties-mode="OVERRIDE"/>
 
+  <context:component-scan base-package="org.apache.archiva.repository.content.maven2" />
+  
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
+
   <bean name="commons-configuration" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry">
     <property name="properties">
       <value>

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-merge-index-download.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-merge-index-download.xml b/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-merge-index-download.xml
index 7a06a88..7388de1 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-merge-index-download.xml
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-merge-index-download.xml
@@ -29,6 +29,10 @@
        default-lazy-init="true">
 
   <context:property-placeholder system-properties-mode="OVERRIDE"/>
+  <context:component-scan base-package="org.apache.archiva.repository.content.maven2" />
+
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
 
 
   <bean name="commons-configuration" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry">

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-rss-servlet.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-rss-servlet.xml b/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-rss-servlet.xml
index 5f9f771..e35f0ac 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-rss-servlet.xml
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-rss-servlet.xml
@@ -30,7 +30,11 @@
   <context:property-placeholder system-properties-mode="OVERRIDE"/>
 
   <context:annotation-config/>
-  <context:component-scan base-package="org.apache.archiva.webtest.memory"/>
+  <context:component-scan base-package="org.apache.archiva.webtest.memory,org.apache.archiva.repository.content.maven2"/>
+
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
+
 
   <alias name="repositorySessionFactory#test" alias="repositorySessionFactory"/>
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-test-common.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-test-common.xml b/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-test-common.xml
index d62446b..d7083d2 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-test-common.xml
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-test-common.xml
@@ -29,7 +29,9 @@
 
   <context:annotation-config/>
   <context:component-scan
-      base-package="org.apache.archiva.redback.keys,org.apache.archiva.rest.services.utils"/>
+      base-package="org.apache.archiva.redback.keys,org.apache.archiva.rest.services.utils,org.apache.archiva.repository.content.maven2"/>
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
 
   <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
     <property name="properties">

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-with-jcr.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-with-jcr.xml b/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-with-jcr.xml
index f29dbcb..7eb9645 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-with-jcr.xml
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/resources/spring-context-with-jcr.xml
@@ -37,6 +37,10 @@
   </bean>
   -->
 
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
+
+
   <alias name="repositorySessionFactory#jcr" alias="repositorySessionFactory"/>
 
   <bean name="TestRepositorySessionFactoryBean" class="org.apache.archiva.TestRepositorySessionFactoryBean">

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repositories.js
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repositories.js b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repositories.js
index 0e70372..b169712 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repositories.js
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repositories.js
@@ -32,7 +32,7 @@ function(jquery,i18n,jqueryTmpl,bootstrap,jqueryValidate,ko) {
             ];
 
   ManagedRepository=function(id,name,layout,indexDirectory,location,snapshots,releases,blockRedeployments,cronExpression,
-                             scanned,retentionTime,retentionCount,deleteReleasedSnapshots,stageRepoNeeded,description,
+                             scanned,retentionPeriod,retentionCount,deleteReleasedSnapshots,stageRepoNeeded,description,
                              skipPackedIndexCreation,feedsUrl,url){
 
     var self=this;
@@ -63,9 +63,9 @@ function(jquery,i18n,jqueryTmpl,bootstrap,jqueryValidate,ko) {
 
     //private ManagedRepository stagingRepository;
 
-    //private int retentionTime = 100;
-    this.retentionTime=ko.observable(retentionTime);
-    this.retentionTime.subscribe(function(newValue){self.modified(true)});
+    //private int retentionPeriod = 100;
+    this.retentionPeriod=ko.observable(retentionPeriod);
+    this.retentionPeriod.subscribe(function(newValue){self.modified(true)});
 
     //private int retentionCount = 2;
     this.retentionCount=ko.observable(retentionCount);
@@ -167,7 +167,7 @@ function(jquery,i18n,jqueryTmpl,bootstrap,jqueryValidate,ko) {
     return new ManagedRepository(data.id,data.name,data.layout,data.indexDirectory,data.location,data.snapshots
                                  ,data.releases,
                                  data.blockRedeployments,data.cronExpression,
-                                 data.scanned,data.retentionTime,data.retentionCount,data.deleteReleasedSnapshots,
+                                 data.scanned,data.retentionPeriod,data.retentionCount,data.deleteReleasedSnapshots,
                                  data.stageRepoNeeded,data.description,data.skipPackedIndexCreation);
   }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/repositories.html
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/repositories.html b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/repositories.html
index 5629b55..17735c6 100644
--- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/repositories.html
+++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/repositories.html
@@ -282,14 +282,14 @@
         </div>
       </div>
       <div class="control-group">
-        <label class="control-label" for="retentionTime">${$.i18n.prop('retentionTime')}</label>
+        <label class="control-label" for="retentionPeriod">${$.i18n.prop('retentionPeriod')}</label>
 
         <div class="controls">
-          <input type="text" id="retentionTime" class="digits" name="retentionTime" size="5"
-                 data-bind="value: managedRepository.retentionTime"/>
-          <a class="btn btn-warning btn-mini popover-doc" id="managedRepository-retentionTime-info-button"
-             data-original-title="${$.i18n.prop('managedRepository.retentionTime.help.title')}"
-             data-content="${$.i18n.prop('managedRepository.retentionTime.help.content')}">
+          <input type="text" id="retentionPeriod" class="digits" name="retentionPeriod" size="5"
+                 data-bind="value: managedRepository.retentionPeriod"/>
+          <a class="btn btn-warning btn-mini popover-doc" id="managedRepository-retentionPeriod-info-button"
+             data-original-title="${$.i18n.prop('managedRepository.retentionPeriod.help.title')}"
+             data-content="${$.i18n.prop('managedRepository.retentionPeriod.help.content')}">
             <i class="icon-question-sign icon-white"></i>
           </a>
         </div>
@@ -604,7 +604,7 @@
         <label class="control-label" for="timeout">${$.i18n.prop('timeout')}</label>
 
         <div class="controls">
-          <input type="text" id="timeout" class="digits" name="retentionTime" size="5"
+          <input type="text" id="timeout" class="digits" name="retentionPeriod" size="5"
                  data-bind="value: remoteRepository.timeout"/>
           <a class="btn btn-warning btn-mini popover-doc" id="remoteRepository-timeout-info-button"
              data-original-title="${$.i18n.prop('remoteRepository.timeout.help.title')}"

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResource.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResource.java b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResource.java
index b152e89..c13f039 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResource.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResource.java
@@ -19,7 +19,6 @@ package org.apache.archiva.webdav;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.common.filelock.FileLockException;
 import org.apache.archiva.common.filelock.FileLockManager;
 import org.apache.archiva.common.filelock.FileLockTimeoutException;
@@ -35,11 +34,28 @@ import org.apache.archiva.webdav.util.MimeTypes;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.util.Text;
-import org.apache.jackrabbit.webdav.*;
+import org.apache.jackrabbit.webdav.DavException;
+import org.apache.jackrabbit.webdav.DavResource;
+import org.apache.jackrabbit.webdav.DavResourceFactory;
+import org.apache.jackrabbit.webdav.DavResourceIterator;
+import org.apache.jackrabbit.webdav.DavResourceIteratorImpl;
+import org.apache.jackrabbit.webdav.DavResourceLocator;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.DavSession;
+import org.apache.jackrabbit.webdav.MultiStatusResponse;
 import org.apache.jackrabbit.webdav.io.InputContext;
 import org.apache.jackrabbit.webdav.io.OutputContext;
-import org.apache.jackrabbit.webdav.lock.*;
-import org.apache.jackrabbit.webdav.property.*;
+import org.apache.jackrabbit.webdav.lock.ActiveLock;
+import org.apache.jackrabbit.webdav.lock.LockInfo;
+import org.apache.jackrabbit.webdav.lock.LockManager;
+import org.apache.jackrabbit.webdav.lock.Scope;
+import org.apache.jackrabbit.webdav.lock.Type;
+import org.apache.jackrabbit.webdav.property.DavProperty;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
+import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
+import org.apache.jackrabbit.webdav.property.DavPropertySet;
+import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
+import org.apache.jackrabbit.webdav.property.ResourceType;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormatter;
 import org.joda.time.format.ISODateTimeFormat;
@@ -80,7 +96,7 @@ public class ArchivaDavResource
 
     private String remoteAddr;
 
-    private final ManagedRepository repository;
+    private final org.apache.archiva.repository.ManagedRepository repository;
 
     private final MimeTypes mimeTypes;
 
@@ -96,7 +112,7 @@ public class ArchivaDavResource
 
     private Logger log = LoggerFactory.getLogger( ArchivaDavResource.class );
 
-    public ArchivaDavResource( String localResource, String logicalResource, ManagedRepository repository,
+    public ArchivaDavResource( String localResource, String logicalResource, org.apache.archiva.repository.ManagedRepository repository,
                                DavSession session, ArchivaDavResourceLocator locator, DavResourceFactory factory,
                                MimeTypes mimeTypes, List<AuditListener> auditListeners,
                                RepositoryArchivaTaskScheduler scheduler, FileLockManager fileLockManager )
@@ -117,7 +133,7 @@ public class ArchivaDavResource
         this.fileLockManager = fileLockManager;
     }
 
-    public ArchivaDavResource( String localResource, String logicalResource, ManagedRepository repository,
+    public ArchivaDavResource( String localResource, String logicalResource, org.apache.archiva.repository.ManagedRepository repository,
                                String remoteAddr, String principal, DavSession session,
                                ArchivaDavResourceLocator locator, DavResourceFactory factory, MimeTypes mimeTypes,
                                List<AuditListener> auditListeners, RepositoryArchivaTaskScheduler scheduler,

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
index 1f5e0be..6774e85 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
@@ -20,7 +20,6 @@ package org.apache.archiva.webdav;
  */
 
 import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.model.beans.RemoteRepository;
 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
 import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
@@ -32,7 +31,12 @@ import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.common.utils.VersionUtil;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.RepositoryGroupConfiguration;
-import org.apache.archiva.indexer.merger.*;
+import org.apache.archiva.indexer.merger.IndexMerger;
+import org.apache.archiva.indexer.merger.IndexMergerException;
+import org.apache.archiva.indexer.merger.IndexMergerRequest;
+import org.apache.archiva.indexer.merger.MergedRemoteIndexesTask;
+import org.apache.archiva.indexer.merger.MergedRemoteIndexesTaskRequest;
+import org.apache.archiva.indexer.merger.TemporaryGroupIndex;
 import org.apache.archiva.indexer.search.RepositorySearch;
 import org.apache.archiva.maven2.metadata.MavenMetadataReader;
 import org.apache.archiva.metadata.model.facets.AuditEvent;
@@ -52,12 +56,16 @@ import org.apache.archiva.redback.policy.MustChangePasswordException;
 import org.apache.archiva.redback.system.SecuritySession;
 import org.apache.archiva.redback.users.User;
 import org.apache.archiva.redback.users.UserManager;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.ReleaseScheme;
 import org.apache.archiva.repository.RepositoryContentFactory;
 import org.apache.archiva.repository.RepositoryException;
 import org.apache.archiva.repository.RepositoryNotFoundException;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.content.maven2.RepositoryRequest;
 import org.apache.archiva.repository.events.AuditListener;
+import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.layout.LayoutException;
 import org.apache.archiva.repository.metadata.MetadataTools;
 import org.apache.archiva.repository.metadata.RepositoryMetadataException;
@@ -72,7 +80,13 @@ import org.apache.archiva.xml.XMLException;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.SystemUtils;
-import org.apache.jackrabbit.webdav.*;
+import org.apache.jackrabbit.webdav.DavException;
+import org.apache.jackrabbit.webdav.DavResource;
+import org.apache.jackrabbit.webdav.DavResourceFactory;
+import org.apache.jackrabbit.webdav.DavResourceLocator;
+import org.apache.jackrabbit.webdav.DavServletRequest;
+import org.apache.jackrabbit.webdav.DavServletResponse;
+import org.apache.jackrabbit.webdav.DavSession;
 import org.apache.jackrabbit.webdav.lock.LockManager;
 import org.apache.jackrabbit.webdav.lock.SimpleLockManager;
 import org.apache.maven.index.context.IndexingContext;
@@ -94,7 +108,13 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  *
@@ -143,6 +163,9 @@ public class ArchivaDavResourceFactory
     private ManagedRepositoryAdmin managedRepositoryAdmin;
 
     @Inject
+    private RepositoryRegistry repositoryRegistry;
+
+    @Inject
     private IndexMerger indexMerger;
 
     @Inject
@@ -283,40 +306,28 @@ public class ArchivaDavResourceFactory
                            archivaLocator.getRepositoryId(), e.getMessage() );
             }
 
-            ManagedRepositoryContent managedRepositoryContent = null;
 
-            try
-            {
-                managedRepositoryContent =
-                    repositoryFactory.getManagedRepositoryContent( archivaLocator.getRepositoryId() );
-            }
-            catch ( RepositoryNotFoundException e )
-            {
+            ManagedRepository repo = repositoryRegistry.getManagedRepository( archivaLocator.getRepositoryId() );
+            if (repo==null) {
                 throw new DavException( HttpServletResponse.SC_NOT_FOUND,
-                                        "Invalid repository: " + archivaLocator.getRepositoryId() );
+                    "Invalid repository: " + archivaLocator.getRepositoryId() );
             }
-            catch ( RepositoryException e )
-            {
-                throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
+            ManagedRepositoryContent managedRepositoryContent = repo.getContent( );
+            if (managedRepositoryContent==null) {
+                log.error("Inconsistency detected. Repository content not found for '{}'", archivaLocator.getRepositoryId());
+                throw new DavException( HttpServletResponse.SC_NOT_FOUND,
+                    "Invalid repository: " + archivaLocator.getRepositoryId() );
             }
 
             log.debug( "Managed repository '{}' accessed by '{}'", managedRepositoryContent.getId(), activePrincipal );
 
-            try
-            {
-                resource = processRepository( request, archivaLocator, activePrincipal, managedRepositoryContent,
-                                              managedRepositoryAdmin.getManagedRepository(
-                                                  archivaLocator.getRepositoryId() ) );
+            resource = processRepository( request, archivaLocator, activePrincipal, managedRepositoryContent,
+                                          repo);
 
-                String logicalResource = getLogicalResource( archivaLocator, null, false );
-                resourcesInAbsolutePath.add(
-                    Paths.get( managedRepositoryContent.getRepoRoot(), logicalResource ).toAbsolutePath().toString() );
+            String logicalResource = getLogicalResource( archivaLocator, null, false );
+            resourcesInAbsolutePath.add(
+                Paths.get( managedRepositoryContent.getRepoRoot(), logicalResource ).toAbsolutePath().toString() );
 
-            }
-            catch ( RepositoryAdminException e )
-            {
-                throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
-            }
         }
 
         String requestedResource = request.getRequestURI();
@@ -457,22 +468,17 @@ public class ArchivaDavResourceFactory
             for ( String repositoryId : repositories )
             {
                 ManagedRepositoryContent managedRepositoryContent;
-                try
-                {
-                    managedRepositoryContent = repositoryFactory.getManagedRepositoryContent( repositoryId );
+                ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( repositoryId );
+                if (managedRepository==null) {
+                    throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Could not find repository with id "+repositoryId );
                 }
-                catch ( RepositoryNotFoundException e )
-                {
-                    throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
-                }
-                catch ( RepositoryException e )
-                {
-                    throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
+                managedRepositoryContent = managedRepository.getContent();
+                if (managedRepositoryContent==null) {
+                    log.error("Inconsistency detected. Repository content not found for '{}'",repositoryId);
+                    throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Could not find repository content with id "+repositoryId );
                 }
-
                 try
                 {
-                    ManagedRepository managedRepository = managedRepositoryAdmin.getManagedRepository( repositoryId );
                     DavResource updatedResource =
                         processRepository( request, archivaLocator, activePrincipal, managedRepositoryContent,
                                            managedRepository );
@@ -493,10 +499,6 @@ public class ArchivaDavResourceFactory
                 {
                     storedExceptions.add( e );
                 }
-                catch ( RepositoryAdminException e )
-                {
-                    storedExceptions.add( new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e ) );
-                }
             }
         }
         if ( resource == null )
@@ -522,12 +524,12 @@ public class ArchivaDavResourceFactory
         return resource;
     }
 
-    private String getLogicalResource( ArchivaDavResourceLocator archivaLocator, ManagedRepository managedRepository,
+    private String getLogicalResource( ArchivaDavResourceLocator archivaLocator, org.apache.archiva.repository.ManagedRepository managedRepository,
                                        boolean useOrigResourcePath )
     {
         // FIXME remove this hack
         // but currently managedRepository can be null in case of group
-        String layout = managedRepository == null ? new ManagedRepository().getLayout() : managedRepository.getLayout();
+        String layout = managedRepository == null ? "default" : managedRepository.getLayout();
         RepositoryStorage repositoryStorage =
             this.applicationContext.getBean( "repositoryStorage#" + layout, RepositoryStorage.class );
         String path = repositoryStorage.getFilePath(
@@ -545,7 +547,7 @@ public class ArchivaDavResourceFactory
         throws DavException
     {
         String layout = managedRepositoryContent.getRepository() == null
-            ? new ManagedRepository().getLayout()
+            ? "default"
             : managedRepositoryContent.getRepository().getLayout();
         RepositoryStorage repositoryStorage =
             this.applicationContext.getBean( "repositoryStorage#" + layout, RepositoryStorage.class );
@@ -570,7 +572,7 @@ public class ArchivaDavResourceFactory
 
     private DavResource processRepository( final DavServletRequest request, ArchivaDavResourceLocator archivaLocator,
                                            String activePrincipal, ManagedRepositoryContent managedRepositoryContent,
-                                           ManagedRepository managedRepository )
+                                           org.apache.archiva.repository.ManagedRepository managedRepository )
         throws DavException
     {
         DavResource resource = null;
@@ -659,7 +661,7 @@ public class ArchivaDavResourceFactory
 
                 // check if target repo is enabled for releases
                 // we suppose that release-artifacts can be deployed only to repos enabled for releases
-                if ( managedRepositoryContent.getRepository().isReleases() && !repositoryRequest.isMetadata(
+                if ( managedRepositoryContent.getRepository().getActiveReleaseSchemes().contains( ReleaseScheme.RELEASE ) && !repositoryRequest.isMetadata(
                     resourcePath ) && !repositoryRequest.isSupportFile( resourcePath ) )
                 {
                     ArtifactReference artifact = null;
@@ -671,7 +673,7 @@ public class ArchivaDavResourceFactory
                         {
                             // check if artifact already exists and if artifact re-deployment to the repository is allowed
                             if ( managedRepositoryContent.hasContent( artifact )
-                                && managedRepositoryContent.getRepository().isBlockRedeployments() )
+                                && managedRepositoryContent.getRepository().blocksRedeployments())
                             {
                                 log.warn( "Overwriting released artifacts in repository '{}' is not allowed.",
                                           managedRepositoryContent.getId() );
@@ -727,41 +729,30 @@ public class ArchivaDavResourceFactory
         ArchivaDavResourceLocator archivaLocator = checkLocatorIsInstanceOfRepositoryLocator( locator );
 
         ManagedRepositoryContent managedRepositoryContent;
-        try
-        {
-            managedRepositoryContent =
-                repositoryFactory.getManagedRepositoryContent( archivaLocator.getRepositoryId() );
-        }
-        catch ( RepositoryNotFoundException e )
-        {
+        ManagedRepository repo = repositoryRegistry.getManagedRepository( archivaLocator.getRepositoryId( ) );
+        if (repo==null) {
             throw new DavException( HttpServletResponse.SC_NOT_FOUND,
-                                    "Invalid repository: " + archivaLocator.getRepositoryId() );
+                "Invalid repository: " + archivaLocator.getRepositoryId() );
         }
-        catch ( RepositoryException e )
-        {
-            throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
+        managedRepositoryContent = repo.getContent();
+        if (managedRepositoryContent==null) {
+            log.error("Inconsistency detected. Repository content not found for '{}'", archivaLocator.getRepositoryId());
+            throw new DavException( HttpServletResponse.SC_NOT_FOUND,
+                "Invalid repository: " + archivaLocator.getRepositoryId() );
         }
 
         DavResource resource = null;
-        try
-        {
-            String logicalResource = getLogicalResource( archivaLocator, managedRepositoryAdmin.getManagedRepository(
-                archivaLocator.getRepositoryId() ), false );
-            if ( logicalResource.startsWith( "/" ) )
-            {
-                logicalResource = logicalResource.substring( 1 );
-            }
-            Path resourceFile = Paths.get( managedRepositoryContent.getRepoRoot(), logicalResource );
-            resource = new ArchivaDavResource( resourceFile.toAbsolutePath().toString(), logicalResource,
-                                               managedRepositoryContent.getRepository(), davSession, archivaLocator,
-                                               this, mimeTypes, auditListeners, scheduler, fileLockManager );
-
-            resource.addLockManager( lockManager );
-        }
-        catch ( RepositoryAdminException e )
+        String logicalResource = getLogicalResource( archivaLocator, repo, false );
+        if ( logicalResource.startsWith( "/" ) )
         {
-            throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
+            logicalResource = logicalResource.substring( 1 );
         }
+        Path resourceFile = Paths.get( managedRepositoryContent.getRepoRoot(), logicalResource );
+        resource = new ArchivaDavResource( resourceFile.toAbsolutePath().toString(), logicalResource,
+                                           repo, davSession, archivaLocator,
+                                           this, mimeTypes, auditListeners, scheduler, fileLockManager );
+
+        resource.addLockManager( lockManager );
         return resource;
     }
 
@@ -1027,7 +1018,7 @@ public class ArchivaDavResourceFactory
         // FIXME add a method with group in the repository storage
         String firstRepoId = repositoryGroupConfiguration.getRepositories().get( 0 );
 
-        String path = getLogicalResource( locator, managedRepositoryAdmin.getManagedRepository( firstRepoId ), false );
+        String path = getLogicalResource( locator, repositoryRegistry.getManagedRepository( firstRepoId ), false );
         if ( path.startsWith( "/" ) )
         {
             path = path.substring( 1 );
@@ -1084,32 +1075,28 @@ public class ArchivaDavResourceFactory
                 for ( String repository : repositories )
                 {
                     ManagedRepositoryContent managedRepository = null;
-
-                    try
-                    {
-                        managedRepository = repositoryFactory.getManagedRepositoryContent( repository );
-                    }
-                    catch ( RepositoryNotFoundException e )
-                    {
+                    ManagedRepository repo = repositoryRegistry.getManagedRepository( repository );
+                    if (repo == null) {
                         throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
-                                                "Invalid managed repository <" + repository + ">: " + e.getMessage() );
+                            "Invalid managed repository <" + repository + ">");
                     }
-                    catch ( RepositoryException e )
-                    {
+                    managedRepository = repo.getContent();
+                    if (managedRepository==null) {
+                        log.error("Inconsistency detected. Repository content not found for '{}'",repository);
                         throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
-                                                "Invalid managed repository <" + repository + ">: " + e.getMessage() );
+                            "Invalid managed repository <" + repository + ">");
                     }
-
                     Path resourceFile = Paths.get( managedRepository.getRepoRoot(), logicalResource.getPath() );
                     if ( Files.exists(resourceFile) )
                     {
                         // in case of group displaying index directory doesn't have sense !!
-                        String repoIndexDirectory = managedRepository.getRepository().getIndexDirectory();
+                        IndexCreationFeature idf = managedRepository.getRepository().getFeature(IndexCreationFeature.class).get();
+                        String repoIndexDirectory = idf.getIndexPath().toString();
                         if ( StringUtils.isNotEmpty( repoIndexDirectory ) )
                         {
                             if ( !Paths.get( repoIndexDirectory ).isAbsolute() )
                             {
-                                repoIndexDirectory = Paths.get( managedRepository.getRepository().getLocation(),
+                                repoIndexDirectory = Paths.get( managedRepository.getRepository().getLocation() ).resolve(
                                                                StringUtils.isEmpty( repoIndexDirectory )
                                                                    ? ".indexer"
                                                                    : repoIndexDirectory ).toAbsolutePath().toString();
@@ -1117,7 +1104,7 @@ public class ArchivaDavResourceFactory
                         }
                         if ( StringUtils.isEmpty( repoIndexDirectory ) )
                         {
-                            repoIndexDirectory = Paths.get( managedRepository.getRepository().getLocation(),
+                            repoIndexDirectory = Paths.get( managedRepository.getRepository().getLocation() ).resolve(
                                                            ".indexer" ).toAbsolutePath().toString();
                         }
 
@@ -1460,4 +1447,14 @@ public class ArchivaDavResourceFactory
     {
         this.managedRepositoryAdmin = managedRepositoryAdmin;
     }
+
+    public RepositoryRegistry getRepositoryRegistry( )
+    {
+        return repositoryRegistry;
+    }
+
+    public void setRepositoryRegistry( RepositoryRegistry repositoryRegistry )
+    {
+        this.repositoryRegistry = repositoryRegistry;
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/RepositoryServlet.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/RepositoryServlet.java b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/RepositoryServlet.java
index 27a9036..24f2db3 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/RepositoryServlet.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/RepositoryServlet.java
@@ -204,7 +204,7 @@ public class RepositoryServlet
 
         long end = System.currentTimeMillis();
 
-        log.info( "initServers done in {} ms", (end - start) );
+        log.debug( "initServers done in {} ms", (end - start) );
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/archiva/blob/d6120d6c/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/AbstractRepositoryServletTestCase.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/AbstractRepositoryServletTestCase.java b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/AbstractRepositoryServletTestCase.java
index 1fbe417..ce2d851 100644
--- a/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/AbstractRepositoryServletTestCase.java
+++ b/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/webdav/AbstractRepositoryServletTestCase.java
@@ -28,6 +28,7 @@ import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.Configuration;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.archiva.webdav.httpunit.MkColMethodWebRequest;
 import org.apache.archiva.webdav.util.MavenIndexerCleaner;
@@ -99,6 +100,9 @@ public abstract class AbstractRepositoryServletTestCase
     @Inject
     protected ManagedRepositoryAdmin managedRepositoryAdmin;
 
+    @Inject
+    RepositoryRegistry repositoryRegistry;
+
     protected Logger log = LoggerFactory.getLogger( getClass() );
 
 
@@ -106,6 +110,7 @@ public abstract class AbstractRepositoryServletTestCase
         throws Exception
     {
         saveConfiguration( archivaConfiguration );
+        repositoryRegistry.reload();
     }
 
     @Before
@@ -135,6 +140,7 @@ public abstract class AbstractRepositoryServletTestCase
 
         config.addManagedRepository(
             createManagedRepository( REPOID_INTERNAL, "Internal Test Repo", repoRootInternal, true ) );
+        repositoryRegistry.reload();
 
         managedRepositoryAdmin.createIndexContext( managedRepositoryAdmin.getManagedRepository( REPOID_INTERNAL ) );
 
@@ -776,6 +782,7 @@ public abstract class AbstractRepositoryServletTestCase
     protected void saveConfiguration( ArchivaConfiguration archivaConfiguration )
         throws Exception
     {
+        repositoryRegistry.reload();
         archivaConfiguration.save( archivaConfiguration.getConfiguration() );
     }
 


[13/21] archiva git commit: Adapting cli to the new repository api

Posted by ma...@apache.org.
Adapting cli to the new repository api


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/2f131c66
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/2f131c66
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/2f131c66

Branch: refs/heads/master
Commit: 2f131c666ad40f02ba617abe3f8b4490e3bfc45f
Parents: 3dc8542
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:36:28 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:36:28 2017 +0100

----------------------------------------------------------------------
 .../org/apache/archiva/cli/AbstractProgressConsumer.java  |  2 +-
 .../src/main/java/org/apache/archiva/cli/ArchivaCli.java  | 10 +++++-----
 2 files changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/2f131c66/archiva-cli/src/main/java/org/apache/archiva/cli/AbstractProgressConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-cli/src/main/java/org/apache/archiva/cli/AbstractProgressConsumer.java b/archiva-cli/src/main/java/org/apache/archiva/cli/AbstractProgressConsumer.java
index c415fac..be552a3 100644
--- a/archiva-cli/src/main/java/org/apache/archiva/cli/AbstractProgressConsumer.java
+++ b/archiva-cli/src/main/java/org/apache/archiva/cli/AbstractProgressConsumer.java
@@ -19,10 +19,10 @@ package org.apache.archiva.cli;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.consumers.AbstractMonitoredConsumer;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.RepositoryContentConsumer;
+import org.apache.archiva.repository.ManagedRepository;
 
 import java.util.Date;
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/2f131c66/archiva-cli/src/main/java/org/apache/archiva/cli/ArchivaCli.java
----------------------------------------------------------------------
diff --git a/archiva-cli/src/main/java/org/apache/archiva/cli/ArchivaCli.java b/archiva-cli/src/main/java/org/apache/archiva/cli/ArchivaCli.java
index dad00f6..d274c3d 100644
--- a/archiva-cli/src/main/java/org/apache/archiva/cli/ArchivaCli.java
+++ b/archiva-cli/src/main/java/org/apache/archiva/cli/ArchivaCli.java
@@ -21,13 +21,14 @@ package org.apache.archiva.cli;
 
 import com.sampullara.cli.Args;
 import com.sampullara.cli.Argument;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.archiva.consumers.RepositoryContentConsumer;
 import org.apache.archiva.converter.RepositoryConversionException;
 import org.apache.archiva.converter.legacy.LegacyRepositoryConverter;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.scanner.RepositoryScanStatistics;
 import org.apache.archiva.repository.scanner.RepositoryScanner;
 import org.apache.archiva.repository.scanner.RepositoryScannerException;
@@ -47,6 +48,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 
@@ -166,10 +168,8 @@ public class ArchivaCli
     private void doScan( String path, String[] consumers )
         throws ConsumerException, MalformedURLException
     {
-        ManagedRepository repo = new ManagedRepository();
-        repo.setId( Paths.get( path ).getFileName().toString());
-        repo.setName( "Archiva CLI Provided Repo" );
-        repo.setLocation( path );
+        BasicManagedRepository repo = new BasicManagedRepository( Paths.get(path).getFileName().toString(), "Archiva CLI Provided Repo" );
+        repo.setLocation( Paths.get(path).toUri() );
 
         List<KnownRepositoryContentConsumer> knownConsumerList = new ArrayList<>();
 


[20/21] archiva git commit: Adapting the metadata module to the new repository api

Posted by ma...@apache.org.
Adapting the metadata module to the new repository api


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/e4941b46
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/e4941b46
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/e4941b46

Branch: refs/heads/master
Commit: e4941b469668189cad9d45026423f6da9ee22af6
Parents: d6120d6
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:39:41 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:39:41 2017 +0100

----------------------------------------------------------------------
 .../archiva/metadata/repository/storage/RepositoryStorage.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/e4941b46/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java
----------------------------------------------------------------------
diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java
index 1c300b0..1504c4b 100644
--- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java
+++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/storage/RepositoryStorage.java
@@ -81,7 +81,7 @@ public interface RepositoryStorage
      * @return the file path
      * @since 2.0.0
      */
-    String getFilePath( String requestPath, ManagedRepository managedRepository );
+    String getFilePath( String requestPath, org.apache.archiva.repository.ManagedRepository managedRepository );
 
     String getFilePathWithVersion( final String requestPath, ManagedRepositoryContent managedRepositoryContent )
         throws RelocationException, XMLException;


[15/21] archiva git commit: Adapting base modules to the new repository api

Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryScannerTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryScannerTest.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryScannerTest.java
index e028b94..e9a462b 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryScannerTest.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryScannerTest.java
@@ -20,10 +20,13 @@ package org.apache.archiva.repository.scanner;
  */
 
 import junit.framework.TestCase;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.model.beans.RemoteRepository;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.BasicRemoteRepository;
+import org.apache.archiva.repository.EditableManagedRepository;
+import org.apache.archiva.repository.EditableRemoteRepository;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.commons.io.FileUtils;
 import org.junit.Test;
@@ -33,6 +36,8 @@ import org.springframework.test.context.ContextConfiguration;
 
 import javax.inject.Inject;
 import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -57,21 +62,17 @@ public class RepositoryScannerTest
     @Inject
     ApplicationContext applicationContext;
 
-    protected ManagedRepository createRepository( String id, String name, Path location )
+    protected EditableManagedRepository createRepository( String id, String name, Path location )
     {
-        ManagedRepository repo = new ManagedRepository();
-        repo.setId( id );
-        repo.setName( name );
-        repo.setLocation( location.toAbsolutePath().toString());
+        BasicManagedRepository repo = new BasicManagedRepository(id, name);
+        repo.setLocation( location.toAbsolutePath().toUri());
         return repo;
     }
 
-    protected RemoteRepository createRemoteRepository( String id, String name, String url )
+    protected EditableRemoteRepository createRemoteRepository( String id, String name, String url ) throws URISyntaxException
     {
-        RemoteRepository repo = new RemoteRepository();
-        repo.setId( id );
-        repo.setName( name );
-        repo.setUrl( url );
+        BasicRemoteRepository repo = new BasicRemoteRepository(id, name);
+        repo.setLocation( new URI( url ) );
         return repo;
     }
 
@@ -122,7 +123,7 @@ public class RepositoryScannerTest
 
         assertTrue( "Legacy Test Repository should exist.", Files.exists(repoDir) && Files.isDirectory(repoDir) );
 
-        ManagedRepository repo = createRepository( "testLegacyRepo", "Test Legacy Repository", repoDir );
+        EditableManagedRepository repo = createRepository( "testLegacyRepo", "Test Legacy Repository", repoDir );
         repo.setLayout( "legacy" );
 
         return repo;

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/SampleKnownConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/SampleKnownConsumer.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/SampleKnownConsumer.java
index ab9a3c8..02d961b 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/SampleKnownConsumer.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/SampleKnownConsumer.java
@@ -19,10 +19,10 @@ package org.apache.archiva.repository.scanner;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.consumers.AbstractMonitoredConsumer;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
+import org.apache.archiva.repository.ManagedRepository;
 
 import java.util.Date;
 import java.util.List;

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/archiva-test-utils/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-test-utils/pom.xml b/archiva-modules/archiva-base/archiva-test-utils/pom.xml
index bb97001..bde3e5c 100644
--- a/archiva-modules/archiva-base/archiva-test-utils/pom.xml
+++ b/archiva-modules/archiva-base/archiva-test-utils/pom.xml
@@ -42,10 +42,5 @@
       <artifactId>xmlunit</artifactId>
       <scope>compile</scope>
     </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-simple</artifactId>
-      <scope>compile</scope>
-    </dependency>
-  </dependencies>  
+  </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/archiva/blob/9469c1b6/archiva-modules/archiva-base/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/pom.xml b/archiva-modules/archiva-base/pom.xml
index e78f79b..2402128 100644
--- a/archiva-modules/archiva-base/pom.xml
+++ b/archiva-modules/archiva-base/pom.xml
@@ -41,6 +41,7 @@
     <module>archiva-policies</module>
     <module>archiva-indexer</module>
     <module>archiva-consumers</module>
+    <module>archiva-repository-api</module>
     <module>archiva-repository-layer</module>
     <module>archiva-xml-tools</module>
     <module>archiva-proxy-api</module>


[07/21] archiva git commit: Using RepositoryRegistry in repository admin implementations

Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/resources/default-archiva.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/resources/default-archiva.xml b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/resources/default-archiva.xml
new file mode 100644
index 0000000..7955798
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/resources/default-archiva.xml
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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>
+  <version>3.0.0</version>
+  <managedRepositories>
+    <managedRepository>
+      <id>internal</id>
+      <name>Archiva Managed Internal Repository</name>
+      <location>${appserver.base}/repositories/internal</location>
+      <indexDir>${appserver.base}/repositories/internal/.indexer</indexDir>
+      <layout>default</layout>
+      <releases>true</releases>
+      <snapshots>false</snapshots>
+      <blockRedeployments>true</blockRedeployments>
+      <scanned>true</scanned>
+      <refreshCronExpression>0 0 * * * ?</refreshCronExpression>
+      <retentionPeriod>30</retentionPeriod>
+    </managedRepository>
+    <managedRepository>
+      <id>snapshots</id>
+      <name>Archiva Managed Snapshot Repository</name>
+      <location>${appserver.base}/repositories/snapshots</location>
+      <indexDir>${appserver.base}/repositories/snapshots/.indexer</indexDir>
+      <layout>default</layout>
+      <releases>false</releases>
+      <snapshots>true</snapshots>
+      <blockRedeployments>false</blockRedeployments>
+      <scanned>true</scanned>
+      <refreshCronExpression>0 0\,30 * * * ?</refreshCronExpression>
+      <retentionPeriod>30</retentionPeriod>
+    </managedRepository>
+  </managedRepositories>
+  <remoteRepositories>
+    <remoteRepository>
+      <id>central</id>
+      <name>Central Repository</name>
+      <url>https://repo.maven.apache.org/maven2</url>
+      <layout>default</layout>
+    </remoteRepository>
+  </remoteRepositories>
+
+  <proxyConnectors>
+    <proxyConnector>
+      <sourceRepoId>internal</sourceRepoId>
+      <targetRepoId>central</targetRepoId>
+      <proxyId/>
+      <policies>
+        <snapshots>disabled</snapshots>
+        <releases>once</releases>
+        <checksum>fix</checksum>
+        <cache-failures>cached</cache-failures>
+      </policies>
+      <whiteListPatterns>
+        <whiteListPattern>**/*</whiteListPattern>
+      </whiteListPatterns>
+    </proxyConnector>
+  </proxyConnectors>
+
+  <legacyArtifactPaths>
+    <legacyArtifactPath>
+        <path>jaxen/jars/jaxen-1.0-FCS-full.jar</path>
+        <artifact>jaxen:jaxen:1.0-FCS:full:jar</artifact>
+    </legacyArtifactPath>
+  </legacyArtifactPaths>
+
+  <repositoryScanning>
+    <fileTypes>
+      <fileType>
+        <id>artifacts</id>
+        <patterns>
+          <pattern>**/*.pom</pattern>
+          <pattern>**/*.jar</pattern>
+          <pattern>**/*.ear</pattern>
+          <pattern>**/*.war</pattern>
+          <pattern>**/*.car</pattern>
+          <pattern>**/*.sar</pattern>
+          <pattern>**/*.mar</pattern>
+          <pattern>**/*.rar</pattern>
+          <pattern>**/*.dtd</pattern>
+          <pattern>**/*.tld</pattern>
+          <pattern>**/*.tar.gz</pattern>
+          <pattern>**/*.tar.bz2</pattern>
+          <pattern>**/*.zip</pattern>
+        </patterns>
+      </fileType>
+      <fileType>
+        <id>indexable-content</id>
+        <patterns>
+          <pattern>**/*.txt</pattern>
+          <pattern>**/*.TXT</pattern>
+          <pattern>**/*.block</pattern>
+          <pattern>**/*.config</pattern>
+          <pattern>**/*.pom</pattern>
+          <pattern>**/*.xml</pattern>
+          <pattern>**/*.xsd</pattern>
+          <pattern>**/*.dtd</pattern>
+          <pattern>**/*.tld</pattern>
+        </patterns>
+      </fileType>
+      <fileType>
+        <id>auto-remove</id>
+        <patterns>
+          <pattern>**/*.bak</pattern>
+          <pattern>**/*~</pattern>
+          <pattern>**/*-</pattern>
+        </patterns>
+      </fileType>
+      <fileType>
+        <id>ignored</id>
+        <patterns>
+          <pattern>**/.htaccess</pattern>
+          <pattern>**/KEYS</pattern>
+          <pattern>**/*.rb</pattern>
+          <pattern>**/*.sh</pattern>
+          <pattern>**/.svn/**</pattern>
+          <pattern>**/.DAV/**</pattern>
+          <pattern>.index/**</pattern>
+          <pattern>.indexer/**</pattern>
+        </patterns>
+      </fileType>
+    </fileTypes>
+    <knownContentConsumers>
+      <knownContentConsumer>create-missing-checksums</knownContentConsumer>
+      <knownContentConsumer>validate-checksum</knownContentConsumer>
+      <knownContentConsumer>validate-signature</knownContentConsumer>
+      <knownContentConsumer>index-content</knownContentConsumer>
+      <knownContentConsumer>auto-remove</knownContentConsumer>
+      <knownContentConsumer>auto-rename</knownContentConsumer>
+      <knownContentConsumer>metadata-updater</knownContentConsumer>
+      <knownContentConsumer>create-archiva-metadata</knownContentConsumer>
+      <knownContentConsumer>duplicate-artifacts</knownContentConsumer>
+      <!--knownContentConsumer>repository-purge</knownContentConsumer-->
+    </knownContentConsumers>
+    <invalidContentConsumers>
+      <invalidContentConsumer>update-db-bad-content</invalidContentConsumer>
+    </invalidContentConsumers>
+  </repositoryScanning>
+
+  <webapp>
+    <ui>
+      <showFindArtifacts>true</showFindArtifacts>
+      <appletFindEnabled>true</appletFindEnabled>
+    </ui>
+  </webapp>
+
+  <redbackRuntimeConfiguration>
+    <userManagerImpls>
+      <userManagerImpl>jpa</userManagerImpl>
+    </userManagerImpls>
+    <rbacManagerImpls>
+      <rbacManagerImpl>cached</rbacManagerImpl>
+    </rbacManagerImpls>
+  </redbackRuntimeConfiguration>
+
+  <archivaDefaultConfiguration>
+    <defaultCheckPaths>
+      <defaultCheckPath>
+        <url>http://download.oracle.com/maven</url>
+        <path>com/sleepycat/je/license.txt</path>
+      </defaultCheckPath>
+      <defaultCheckPath>
+        <url>https://download.oracle.com/maven</url>
+        <path>com/sleepycat/je/license.txt</path>
+      </defaultCheckPath>
+    </defaultCheckPaths>
+  </archivaDefaultConfiguration>
+
+</configuration>

http://git-wip-us.apache.org/repos/asf/archiva/blob/fd51964c/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/resources/spring-context.xml b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/resources/spring-context.xml
index 84adf6d..a2670af 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/resources/spring-context.xml
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/resources/spring-context.xml
@@ -31,7 +31,10 @@
        default-lazy-init="true">
 
   <context:annotation-config/>
-  <context:component-scan base-package="org.apache.archiva.admin.mock"/>
+  <context:component-scan base-package="org.apache.archiva.admin.mock,org.apache.archiva.repository.content.maven2"/>
+
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
 
   <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
     <property name="properties">


[17/21] archiva git commit: Adapting the scheduler to the new repository api

Posted by ma...@apache.org.
Adapting the scheduler to the new repository api


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/32ff2ca2
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/32ff2ca2
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/32ff2ca2

Branch: refs/heads/master
Commit: 32ff2ca265ac92be20f2941c7d4a291834e950f9
Parents: 9469c1b
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:38:42 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:38:42 2017 +0100

----------------------------------------------------------------------
 .../indexing/ArchivaIndexingTaskExecutor.java   | 119 ++++++++++---------
 .../indexing/ArtifactIndexingTask.java          |   2 +-
 .../ArchivaIndexingTaskExecutorTest.java        |  58 +++++----
 .../indexing/DownloadRemoteIndexTaskTest.java   |   3 +-
 .../src/test/resources/spring-context.xml       |   8 +-
 .../archiva-scheduler-repository/pom.xml        |   1 -
 .../ArchivaRepositoryScanningTaskExecutor.java  |   8 +-
 .../mock/MockManagedRepositoryAdmin.java        |  11 +-
 ...chivaRepositoryScanningTaskExecutorTest.java |  11 +-
 .../scheduler/repository/TestConsumer.java      |  12 +-
 .../src/test/resources/spring-context.xml       |   5 +-
 11 files changed, 135 insertions(+), 103 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/32ff2ca2/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java
index 666715f..1bab921 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java
@@ -21,11 +21,12 @@ package org.apache.archiva.scheduler.indexing;
  */
 
 import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
 import org.apache.archiva.redback.components.taskqueue.Task;
 import org.apache.archiva.redback.components.taskqueue.execution.TaskExecutionException;
 import org.apache.archiva.redback.components.taskqueue.execution.TaskExecutor;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.maven.index.ArtifactContext;
 import org.apache.maven.index.ArtifactContextProducer;
 import org.apache.maven.index.FlatSearchRequest;
@@ -84,138 +85,138 @@ public class ArchivaIndexingTaskExecutor
     {
         ArtifactIndexingTask indexingTask = (ArtifactIndexingTask) task;
 
-        ManagedRepository repository = indexingTask.getRepository();
-        IndexingContext context = indexingTask.getContext();
+        ManagedRepository repository = indexingTask.getRepository( );
+        IndexingContext context = indexingTask.getContext( );
 
-        if ( ArtifactIndexingTask.Action.FINISH.equals( indexingTask.getAction() )
-            && indexingTask.isExecuteOnEntireRepo() )
+        if ( ArtifactIndexingTask.Action.FINISH.equals( indexingTask.getAction( ) )
+            && indexingTask.isExecuteOnEntireRepo( ) )
         {
             try
             {
-                long start = System.currentTimeMillis();
-                nexusIndexer.scan( context, null, indexingTask.isOnlyUpdate() );
-                long end = System.currentTimeMillis();
-                log.info( "indexed maven repository: {}, onlyUpdate: {}, time {} ms", repository.getId(),
-                          indexingTask.isOnlyUpdate(), ( end - start ) );
+                long start = System.currentTimeMillis( );
+                nexusIndexer.scan( context, null, indexingTask.isOnlyUpdate( ) );
+                long end = System.currentTimeMillis( );
+                log.info( "indexed maven repository: {}, onlyUpdate: {}, time {} ms", repository.getId( ),
+                    indexingTask.isOnlyUpdate( ), ( end - start ) );
             }
             catch ( IOException e )
             {
                 throw new TaskExecutionException( "Error scan repository " + repository, e );
             }
-            log.debug( "Finishing indexing task on repo: {}", repository.getId() );
+            log.debug( "Finishing indexing task on repo: {}", repository.getId( ) );
             finishIndexingTask( indexingTask, repository, context );
         }
         else
         {
             // create context if not a repo scan request
-            if ( !indexingTask.isExecuteOnEntireRepo() )
+            if ( !indexingTask.isExecuteOnEntireRepo( ) )
             {
                 try
                 {
                     log.debug( "Creating indexing context on resource: {}", //
-                               ( indexingTask.getResourceFile() == null
-                                   ? "none"
-                                   : indexingTask.getResourceFile() ) );
+                        ( indexingTask.getResourceFile( ) == null
+                            ? "none"
+                            : indexingTask.getResourceFile( ) ) );
                     context = managedRepositoryAdmin.createIndexContext( repository );
                 }
                 catch ( RepositoryAdminException e )
                 {
-                    log.error( "Error occurred while creating context: {}", e.getMessage() );
-                    throw new TaskExecutionException( "Error occurred while creating context: " + e.getMessage(), e );
+                    log.error( "Error occurred while creating context: {}", e.getMessage( ) );
+                    throw new TaskExecutionException( "Error occurred while creating context: " + e.getMessage( ), e );
                 }
             }
 
-            if ( context == null || context.getIndexDirectory() == null )
+            if ( context == null || context.getIndexDirectory( ) == null )
             {
                 throw new TaskExecutionException( "Trying to index an artifact but the context is already closed" );
             }
 
             try
             {
-                Path artifactFile = indexingTask.getResourceFile();
+                Path artifactFile = indexingTask.getResourceFile( );
                 if ( artifactFile == null )
                 {
                     log.debug( "no artifact pass in indexing task so skip it" );
                 }
                 else
                 {
-                    ArtifactContext ac = artifactContextProducer.getArtifactContext( context, artifactFile.toFile() );
+                    ArtifactContext ac = artifactContextProducer.getArtifactContext( context, artifactFile.toFile( ) );
 
                     if ( ac != null )
                     {
                         // MRM-1779 pom must be indexed too
                         // TODO make that configurable?
-                        if ( artifactFile.getFileName().toString().endsWith( ".pom" ) )
+                        if ( artifactFile.getFileName( ).toString( ).endsWith( ".pom" ) )
                         {
-                            ac.getArtifactInfo().setFileExtension( "pom" );
-                            ac.getArtifactInfo().setPackaging( "pom" );
-                            ac.getArtifactInfo().setClassifier( "pom" );
+                            ac.getArtifactInfo( ).setFileExtension( "pom" );
+                            ac.getArtifactInfo( ).setPackaging( "pom" );
+                            ac.getArtifactInfo( ).setClassifier( "pom" );
                         }
-                        if ( indexingTask.getAction().equals( ArtifactIndexingTask.Action.ADD ) )
+                        if ( indexingTask.getAction( ).equals( ArtifactIndexingTask.Action.ADD ) )
                         {
                             //IndexSearcher s = context.getIndexSearcher();
                             //String uinfo = ac.getArtifactInfo().getUinfo();
                             //TopDocs d = s.search( new TermQuery( new Term( ArtifactInfo.UINFO, uinfo ) ), 1 );
 
-                            BooleanQuery q = new BooleanQuery();
+                            BooleanQuery q = new BooleanQuery( );
                             q.add( nexusIndexer.constructQuery( MAVEN.GROUP_ID, new SourcedSearchExpression(
-                                ac.getArtifactInfo().getGroupId() ) ), BooleanClause.Occur.MUST );
+                                ac.getArtifactInfo( ).getGroupId( ) ) ), BooleanClause.Occur.MUST );
                             q.add( nexusIndexer.constructQuery( MAVEN.ARTIFACT_ID, new SourcedSearchExpression(
-                                ac.getArtifactInfo().getArtifactId() ) ), BooleanClause.Occur.MUST );
+                                ac.getArtifactInfo( ).getArtifactId( ) ) ), BooleanClause.Occur.MUST );
                             q.add( nexusIndexer.constructQuery( MAVEN.VERSION, new SourcedSearchExpression(
-                                ac.getArtifactInfo().getVersion() ) ), BooleanClause.Occur.MUST );
-                            if ( ac.getArtifactInfo().getClassifier() != null )
+                                ac.getArtifactInfo( ).getVersion( ) ) ), BooleanClause.Occur.MUST );
+                            if ( ac.getArtifactInfo( ).getClassifier( ) != null )
                             {
                                 q.add( nexusIndexer.constructQuery( MAVEN.CLASSIFIER, new SourcedSearchExpression(
-                                    ac.getArtifactInfo().getClassifier() ) ), BooleanClause.Occur.MUST );
+                                    ac.getArtifactInfo( ).getClassifier( ) ) ), BooleanClause.Occur.MUST );
                             }
-                            if ( ac.getArtifactInfo().getPackaging() != null )
+                            if ( ac.getArtifactInfo( ).getPackaging( ) != null )
                             {
                                 q.add( nexusIndexer.constructQuery( MAVEN.PACKAGING, new SourcedSearchExpression(
-                                    ac.getArtifactInfo().getPackaging() ) ), BooleanClause.Occur.MUST );
+                                    ac.getArtifactInfo( ).getPackaging( ) ) ), BooleanClause.Occur.MUST );
                             }
                             FlatSearchRequest flatSearchRequest = new FlatSearchRequest( q, context );
                             FlatSearchResponse flatSearchResponse = nexusIndexer.searchFlat( flatSearchRequest );
-                            if ( flatSearchResponse.getResults().isEmpty() )
+                            if ( flatSearchResponse.getResults( ).isEmpty( ) )
                             {
-                                log.debug( "Adding artifact '{}' to index..", ac.getArtifactInfo() );
+                                log.debug( "Adding artifact '{}' to index..", ac.getArtifactInfo( ) );
                                 nexusIndexer.addArtifactToIndex( ac, context );
                             }
                             else
                             {
-                                log.debug( "Updating artifact '{}' in index..", ac.getArtifactInfo() );
+                                log.debug( "Updating artifact '{}' in index..", ac.getArtifactInfo( ) );
                                 // TODO check if update exists !!
                                 nexusIndexer.deleteArtifactFromIndex( ac, context );
                                 nexusIndexer.addArtifactToIndex( ac, context );
                             }
 
-                            context.updateTimestamp();
-                            context.commit();
+                            context.updateTimestamp( );
+                            context.commit( );
 
 
                         }
                         else
                         {
-                            log.debug( "Removing artifact '{}' from index..", ac.getArtifactInfo() );
+                            log.debug( "Removing artifact '{}' from index..", ac.getArtifactInfo( ) );
                             nexusIndexer.deleteArtifactFromIndex( ac, context );
                         }
                     }
                 }
                 // close the context if not a repo scan request
-                if ( !indexingTask.isExecuteOnEntireRepo() )
+                if ( !indexingTask.isExecuteOnEntireRepo( ) )
                 {
-                    log.debug( "Finishing indexing task on resource file : {}", indexingTask.getResourceFile() != null
-                        ? indexingTask.getResourceFile()
+                    log.debug( "Finishing indexing task on resource file : {}", indexingTask.getResourceFile( ) != null
+                        ? indexingTask.getResourceFile( )
                         : " none " );
                     finishIndexingTask( indexingTask, repository, context );
                 }
             }
             catch ( IOException e )
             {
-                log.error( "Error occurred while executing indexing task '{}': {}", indexingTask, e.getMessage(),
-                           e );
+                log.error( "Error occurred while executing indexing task '{}': {}", indexingTask, e.getMessage( ),
+                    e );
                 throw new TaskExecutionException( "Error occurred while executing indexing task '" + indexingTask + "'",
-                                                  e );
+                    e );
             }
         }
 
@@ -228,20 +229,26 @@ public class ArchivaIndexingTaskExecutor
         try
         {
 
-            context.optimize();
+            context.optimize( );
 
-            if ( !repository.isSkipPackedIndexCreation() )
+            if ( repository.supportsFeature( IndexCreationFeature.class ) )
             {
+                IndexCreationFeature icf = repository.getFeature( IndexCreationFeature.class ).get( );
+                if ( !icf.isSkipPackedIndexCreation( ) )
+                {
 
-                IndexPackingRequest request = new IndexPackingRequest( context, //
-                                                                       context.acquireIndexSearcher().getIndexReader(),
-                                                                       //
-                                                                       context.getIndexDirectoryFile() );
+                    IndexPackingRequest request = new IndexPackingRequest( context, //
+                        context.acquireIndexSearcher( ).getIndexReader( ),
+                        //
+                        context.getIndexDirectoryFile( ) );
 
-                indexPacker.packIndex( request );
-                context.updateTimestamp( true );
+                    indexPacker.packIndex( request );
+                    context.updateTimestamp( true );
 
-                log.debug( "Index file packaged at '{}'.", context.getIndexDirectoryFile() );
+                    log.debug( "Index file packaged at '{}'.", context.getIndexDirectoryFile( ) );
+                } else {
+                    log.debug( "skip packed index creation" );
+                }
             }
             else
             {
@@ -250,9 +257,9 @@ public class ArchivaIndexingTaskExecutor
         }
         catch ( IOException e )
         {
-            log.error( "Error occurred while executing indexing task '{}': {}", indexingTask, e.getMessage() );
+            log.error( "Error occurred while executing indexing task '{}': {}", indexingTask, e.getMessage( ) );
             throw new TaskExecutionException( "Error occurred while executing indexing task '" + indexingTask + "'",
-                                              e );
+                e );
         }
     }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/32ff2ca2/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java
index 59f9d37..d2ca16e 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArtifactIndexingTask.java
@@ -19,8 +19,8 @@ package org.apache.archiva.scheduler.indexing;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.redback.components.taskqueue.Task;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.maven.index.context.IndexingContext;
 
 import java.nio.file.Path;

http://git-wip-us.apache.org/repos/asf/archiva/blob/32ff2ca2/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java
index b0bbbb6..02c0261 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutorTest.java
@@ -20,8 +20,12 @@ package org.apache.archiva.scheduler.indexing;
  */
 
 import junit.framework.TestCase;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
+import org.apache.archiva.common.utils.PathUtil;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.maven.index.ArtifactInfo;
 import org.apache.maven.index.FlatSearchRequest;
@@ -52,6 +56,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 
 /**
@@ -65,7 +70,7 @@ public class ArchivaIndexingTaskExecutorTest
     @Inject
     private ArchivaIndexingTaskExecutor indexingExecutor;
 
-    private ManagedRepository repositoryConfig;
+    private BasicManagedRepository repositoryConfig;
 
     @Inject
     private NexusIndexer indexer;
@@ -86,16 +91,13 @@ public class ArchivaIndexingTaskExecutorTest
     {
         super.setUp();
 
-        repositoryConfig = new ManagedRepository();
-        repositoryConfig.setId( "test-repo" );
-        repositoryConfig.setLocation(
-            Paths.get( System.getProperty( "basedir" ), "target/test-classes/test-repo" ).toAbsolutePath().toString() );
+        repositoryConfig = new BasicManagedRepository( "test-repo", "Test Repository");
+        Path repoLocation = Paths.get( System.getProperty( "basedir" ), "target/test-classes/test-repo" ).toAbsolutePath();
+        repositoryConfig.setLocation(repoLocation.toUri() );
         repositoryConfig.setLayout( "default" );
-        repositoryConfig.setName( "Test Repository" );
         repositoryConfig.setScanned( true );
-        repositoryConfig.setSnapshots( false );
-        repositoryConfig.setReleases( true );
-
+        repositoryConfig.addActiveReleaseScheme( ReleaseScheme.RELEASE );
+        repositoryConfig.removeActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
         managedRepositoryAdmin.createIndexContext( repositoryConfig );
     }
 
@@ -132,7 +134,8 @@ public class ArchivaIndexingTaskExecutorTest
     public void testAddArtifactToIndex()
         throws Exception
     {
-        Path artifactFile = Paths.get( repositoryConfig.getLocation(),
+        Path basePath = PathUtil.getPathFromUri( repositoryConfig.getLocation() );
+        Path artifactFile = basePath.resolve(
                                       "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" );
 
         ArtifactIndexingTask task =
@@ -152,8 +155,8 @@ public class ArchivaIndexingTaskExecutorTest
         {
             IndexingContext context = indexer.addIndexingContext( repositoryConfig.getId(), //
                                                                   repositoryConfig.getId(), //
-                                                                  Paths.get( repositoryConfig.getLocation() ).toFile(), //
-                                                                  Paths.get( repositoryConfig.getLocation(), ".indexer" ).toFile()
+                                                                  basePath.toFile(), //
+                                                                  basePath.resolve(".indexer" ).toFile()
                                                                   //
                 , null, null, indexCreators );
             context.setSearchable( true );
@@ -162,8 +165,8 @@ public class ArchivaIndexingTaskExecutorTest
         FlatSearchRequest request = new FlatSearchRequest( q );
         FlatSearchResponse response = indexer.searchFlat( request );
 
-        assertTrue( Files.exists(Paths.get( repositoryConfig.getLocation(), ".indexer" )) );
-        assertFalse( Files.exists(Paths.get( repositoryConfig.getLocation(), ".index" )) );
+        assertTrue( Files.exists(basePath.resolve( ".indexer" )) );
+        assertFalse( Files.exists(basePath.resolve(".index" )) );
         assertEquals( 1, response.getTotalHits() );
 
         Set<ArtifactInfo> results = response.getResults();
@@ -179,7 +182,8 @@ public class ArchivaIndexingTaskExecutorTest
     public void testUpdateArtifactInIndex()
         throws Exception
     {
-        Path artifactFile = Paths.get( repositoryConfig.getLocation(),
+        Path basePath = PathUtil.getPathFromUri( repositoryConfig.getLocation( ) );
+        Path artifactFile = basePath.resolve(
                                       "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" );
 
         ArtifactIndexingTask task =
@@ -204,8 +208,8 @@ public class ArchivaIndexingTaskExecutorTest
         //searcher.close();
         ctx.releaseIndexSearcher( searcher );
 
-        assertTrue( Files.exists(Paths.get( repositoryConfig.getLocation(), ".indexer" )) );
-        assertFalse( Files.exists(Paths.get( repositoryConfig.getLocation(), ".index" )) );
+        assertTrue( Files.exists(basePath.resolve(".indexer" )) );
+        assertFalse( Files.exists(basePath.resolve(".index" )) );
 
         // should only return 1 hit!
         assertEquals( 1, topDocs.totalHits );
@@ -215,7 +219,8 @@ public class ArchivaIndexingTaskExecutorTest
     public void testRemoveArtifactFromIndex()
         throws Exception
     {
-        Path artifactFile = Paths.get( repositoryConfig.getLocation(),
+        Path basePath = PathUtil.getPathFromUri( repositoryConfig.getLocation( ) );
+        Path artifactFile = basePath.resolve(
                                       "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" );
 
         ArtifactIndexingTask task =
@@ -237,8 +242,8 @@ public class ArchivaIndexingTaskExecutorTest
 
         FlatSearchResponse response = indexer.searchFlat( flatSearchRequest );
 
-        assertTrue( Files.exists(Paths.get( repositoryConfig.getLocation(), ".indexer" )) );
-        assertFalse( Files.exists(Paths.get( repositoryConfig.getLocation(), ".index" )) );
+        assertTrue( Files.exists(basePath.resolve(".indexer" )) );
+        assertFalse( Files.exists(basePath.resolve( ".index" )) );
 
         // should return 1 hit
         assertEquals( 1, response.getTotalHitsCount() );
@@ -259,8 +264,8 @@ public class ArchivaIndexingTaskExecutorTest
                                        new SourcedSearchExpression( "archiva-index-methods-jar-test" ) ),
                BooleanClause.Occur.SHOULD );
 
-        assertTrue( Files.exists(Paths.get( repositoryConfig.getLocation(), ".indexer" )) );
-        assertFalse( Files.exists(Paths.get( repositoryConfig.getLocation(), ".index" )) );
+        assertTrue( Files.exists(basePath.resolve( ".indexer" )) );
+        assertFalse( Files.exists(basePath.resolve(".index" )) );
 
         flatSearchRequest = new FlatSearchRequest( q, getIndexingContext() );
 
@@ -276,7 +281,8 @@ public class ArchivaIndexingTaskExecutorTest
         throws Exception
     {
 
-        Path indexerDirectory =Paths.get( repositoryConfig.getLocation(), ".indexer" );
+        Path basePath = PathUtil.getPathFromUri( repositoryConfig.getLocation());
+        Path indexerDirectory =basePath.resolve( ".indexer" );
 
         Files.list(indexerDirectory).filter( path -> path.getFileName().toString().startsWith("nexus-maven-repository-index") )
             .forEach( path ->
@@ -292,7 +298,7 @@ public class ArchivaIndexingTaskExecutorTest
             } );
 
 
-        Path artifactFile = Paths.get( repositoryConfig.getLocation(),
+        Path artifactFile = basePath.resolve(
                                       "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" );
 
         ArtifactIndexingTask task =
@@ -318,7 +324,7 @@ public class ArchivaIndexingTaskExecutorTest
         Assertions.assertThat( Files.exists(indexerDirectory.resolve("nexus-maven-repository-index.gz" ) ));
 
         // unpack .zip index
-        Path destDir = Paths.get( repositoryConfig.getLocation(), ".indexer/tmp" );
+        Path destDir = basePath.resolve( ".indexer/tmp" );
         //unzipIndex( indexerDirectory.getPath(), destDir.getPath() );
 
         DefaultIndexUpdater.FileFetcher fetcher = new DefaultIndexUpdater.FileFetcher( indexerDirectory.toFile() );

http://git-wip-us.apache.org/repos/asf/archiva/blob/32ff2ca2/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/DownloadRemoteIndexTaskTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/DownloadRemoteIndexTaskTest.java b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/DownloadRemoteIndexTaskTest.java
index c40fc62..0c80cd4 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/DownloadRemoteIndexTaskTest.java
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/java/org/apache/archiva/scheduler/indexing/DownloadRemoteIndexTaskTest.java
@@ -50,6 +50,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Arrays;
+import java.util.Locale;
 import java.util.concurrent.TimeUnit;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -145,7 +146,7 @@ public class DownloadRemoteIndexTaskTest
 
     protected RemoteRepository getRemoteRepository() throws IOException
     {
-        RemoteRepository remoteRepository = new RemoteRepository();
+        RemoteRepository remoteRepository = new RemoteRepository( Locale.getDefault());
         Path indexDirectory =
             Paths.get( FileUtils.getBasedir(), "target/index/test-" + Long.toString( System.currentTimeMillis() ) );
         Files.createDirectories( indexDirectory );

http://git-wip-us.apache.org/repos/asf/archiva/blob/32ff2ca2/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/resources/spring-context.xml b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/resources/spring-context.xml
index 8c31f0f..adec67c 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/resources/spring-context.xml
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/test/resources/spring-context.xml
@@ -20,10 +20,16 @@
   -->
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
+       xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
-           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"
+           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
        default-lazy-init="true">
 
+  <context:component-scan base-package="org.apache.archiva.repository.content.maven2" />
+
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
+
   <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
     <property name="properties">
       <props>

http://git-wip-us.apache.org/repos/asf/archiva/blob/32ff2ca2/archiva-modules/archiva-scheduler/archiva-scheduler-repository/pom.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/pom.xml b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/pom.xml
index 881d689..51b3a2c 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/pom.xml
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/pom.xml
@@ -89,7 +89,6 @@
     <dependency>
       <groupId>org.apache.archiva</groupId>
       <artifactId>archiva-repository-layer</artifactId>
-      <scope>test</scope>
       <exclusions>
         <exclusion>
           <groupId>commons-logging</groupId>

http://git-wip-us.apache.org/repos/asf/archiva/blob/32ff2ca2/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java
index 1ac363c..c3178eb 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java
@@ -19,8 +19,8 @@ package org.apache.archiva.scheduler.repository;
  * under the License.
  */
 
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
@@ -28,6 +28,7 @@ import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.apache.archiva.metadata.repository.stats.model.RepositoryStatistics;
 import org.apache.archiva.metadata.repository.stats.model.RepositoryStatisticsManager;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.scanner.RepositoryContentConsumers;
 import org.apache.archiva.repository.scanner.RepositoryScanStatistics;
 import org.apache.archiva.repository.scanner.RepositoryScanner;
@@ -58,6 +59,9 @@ public class ArchivaRepositoryScanningTaskExecutor
     private Logger log = LoggerFactory.getLogger( ArchivaRepositoryScanningTaskExecutor.class );
 
     @Inject
+    RepositoryRegistry repositoryRegistry;
+
+    @Inject
     private ManagedRepositoryAdmin managedRepositoryAdmin;
 
     @Inject
@@ -107,7 +111,7 @@ public class ArchivaRepositoryScanningTaskExecutor
                 throw new TaskExecutionException( "Unable to execute RepositoryTask with blank repository Id." );
             }
 
-            ManagedRepository arepo = managedRepositoryAdmin.getManagedRepository( repoId );
+            ManagedRepository arepo = repositoryRegistry.getManagedRepository( repoId );
 
             // execute consumers on resource file if set
             if ( task.getResourceFile() != null )

http://git-wip-us.apache.org/repos/asf/archiva/blob/32ff2ca2/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/mock/MockManagedRepositoryAdmin.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/mock/MockManagedRepositoryAdmin.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/mock/MockManagedRepositoryAdmin.java
index d8dd8f3..22aea17 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/mock/MockManagedRepositoryAdmin.java
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/mock/MockManagedRepositoryAdmin.java
@@ -29,6 +29,7 @@ import org.apache.maven.index.context.IndexingContext;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 /**
@@ -52,10 +53,10 @@ public class MockManagedRepositoryAdmin
         {
             // TODO add staging repo information back too
             ManagedRepository repo =
-                new ManagedRepository( repoConfig.getId(), repoConfig.getName(), repoConfig.getLocation(),
+                new ManagedRepository( Locale.getDefault( ), repoConfig.getId(), repoConfig.getName(), repoConfig.getLocation(),
                                        repoConfig.getLayout(), repoConfig.isSnapshots(), repoConfig.isReleases(),
                                        repoConfig.isBlockRedeployments(), repoConfig.getRefreshCronExpression(),
-                                       repoConfig.getIndexDir(), repoConfig.isScanned(), repoConfig.getRetentionTime(),
+                                       repoConfig.getIndexDir(), repoConfig.isScanned(), repoConfig.getRetentionPeriod(),
                                        repoConfig.getRetentionCount(), repoConfig.isDeleteReleasedSnapshots(), true );
 
             managedRepos.add( repo );
@@ -126,4 +127,10 @@ public class MockManagedRepositoryAdmin
     {
         return null;
     }
+
+    @Override
+    public IndexingContext createIndexContext( org.apache.archiva.repository.ManagedRepository repository ) throws RepositoryAdminException
+    {
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/32ff2ca2/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/AbstractArchivaRepositoryScanningTaskExecutorTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/AbstractArchivaRepositoryScanningTaskExecutorTest.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/AbstractArchivaRepositoryScanningTaskExecutorTest.java
index 1890297..9b31305 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/AbstractArchivaRepositoryScanningTaskExecutorTest.java
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/AbstractArchivaRepositoryScanningTaskExecutorTest.java
@@ -26,6 +26,8 @@ import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.stats.model.RepositoryStatisticsManager;
 import org.apache.archiva.mock.MockRepositorySessionFactory;
 import org.apache.archiva.redback.components.taskqueue.execution.TaskExecutor;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.codehaus.plexus.util.FileUtils;
 import org.junit.After;
@@ -60,6 +62,9 @@ public abstract class AbstractArchivaRepositoryScanningTaskExecutorTest
     extends TestCase
 {
     @Inject
+    RepositoryRegistry repositoryRegistry;
+
+    @Inject
     @Named( value = "taskExecutor#test-repository-scanning" )
     protected TaskExecutor taskExecutor;
 
@@ -134,8 +139,10 @@ public abstract class AbstractArchivaRepositoryScanningTaskExecutorTest
         repositoryConfiguration.setId( TEST_REPO_ID );
         repositoryConfiguration.setName( "Test Repository" );
         repositoryConfiguration.setLocation( repoDir.toAbsolutePath().toString() );
-        archivaConfig.getConfiguration().getManagedRepositories().clear();
-        archivaConfig.getConfiguration().addManagedRepository( repositoryConfiguration );
+        for ( ManagedRepository repo : repositoryRegistry.getManagedRepositories()) {
+            repositoryRegistry.removeRepository( repo );
+        }
+        repositoryRegistry.putRepository( repositoryConfiguration );
 
         metadataRepository = mock( MetadataRepository.class );
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/32ff2ca2/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestConsumer.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestConsumer.java
index 2de47a1..9637673 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestConsumer.java
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestConsumer.java
@@ -19,14 +19,13 @@ package org.apache.archiva.scheduler.repository;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.consumers.AbstractMonitoredConsumer;
 import org.apache.archiva.consumers.ConsumerException;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.archiva.model.ArtifactReference;
+import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.RepositoryContentFactory;
-import org.apache.archiva.repository.RepositoryException;
 import org.apache.archiva.repository.layout.LayoutException;
 import org.springframework.stereotype.Service;
 
@@ -80,14 +79,7 @@ public class TestConsumer
     {
         consumed.clear();
 
-        try
-        {
-            this.repository = factory.getManagedRepositoryContent( repository.getId() );
-        }
-        catch ( RepositoryException e )
-        {
-            throw new ConsumerException( e.getMessage(), e );
-        }
+        this.repository = repository.getContent();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/archiva/blob/32ff2ca2/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/spring-context.xml b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/spring-context.xml
index 4f49908..4b4b0df 100755
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/spring-context.xml
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/spring-context.xml
@@ -28,7 +28,10 @@
        default-lazy-init="false">
 
   <context:annotation-config/>
-  <context:component-scan base-package="org.apache.archiva.metadata.repository"/>
+  <context:component-scan base-package="org.apache.archiva.metadata.repository,org.apache.archiva.repository.content.maven2"/>
+
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
 
   <bean name="managedRepoAdmin#test" class="org.apache.archiva.mock.MockManagedRepositoryAdmin">
     <property name="archivaConfiguration" ref="archivaConfiguration#test-repository-scanning"/>


[14/21] archiva git commit: Change documentation for new retention settings

Posted by ma...@apache.org.
Change documentation for new retention settings


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/45b601fd
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/45b601fd
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/45b601fd

Branch: refs/heads/master
Commit: 45b601fd1ffa9277ef88d11ef77204df3948a755
Parents: 2f131c6
Author: Martin Stockhammer <ma...@apache.org>
Authored: Wed Nov 1 15:37:01 2017 +0100
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Wed Nov 1 15:37:01 2017 +0100

----------------------------------------------------------------------
 archiva-docs/src/site/apt/adminguide/configuration-files.apt.vm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/45b601fd/archiva-docs/src/site/apt/adminguide/configuration-files.apt.vm
----------------------------------------------------------------------
diff --git a/archiva-docs/src/site/apt/adminguide/configuration-files.apt.vm b/archiva-docs/src/site/apt/adminguide/configuration-files.apt.vm
index e6f17cf..8260401 100644
--- a/archiva-docs/src/site/apt/adminguide/configuration-files.apt.vm
+++ b/archiva-docs/src/site/apt/adminguide/configuration-files.apt.vm
@@ -60,7 +60,7 @@ Configuration Files of Apache Archiva
   <managedRepositories>
     <managedRepository>
       <location>${appserver.base}/repositories/internal</location>
-      <retentionTime>30</retentionTime>
+      <retentionPeriod>30</retentionPeriod>
       <id>internal</id>
       <name>Archiva Managed Internal Repository</name>
     </managedRepository>


[09/21] archiva git commit: Adapting consumers to new repository api interfaces.

Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RemoteRepositoryContentMock.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RemoteRepositoryContentMock.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RemoteRepositoryContentMock.java
new file mode 100644
index 0000000..238b0cf
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RemoteRepositoryContentMock.java
@@ -0,0 +1,78 @@
+package org.apache.archiva.repository.mock;
+
+/*
+ * 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.model.ArtifactReference;
+import org.apache.archiva.model.RepositoryURL;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RemoteRepositoryContent;
+import org.apache.archiva.repository.layout.LayoutException;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Martin Stockhammer <ma...@apache.org>
+ */
+@Service("remoteRepositoryContent#mock")
+public class RemoteRepositoryContentMock implements RemoteRepositoryContent
+{
+    RemoteRepository repository;
+
+    @Override
+    public String getId( )
+    {
+        return null;
+    }
+
+    @Override
+    public RemoteRepository getRepository( )
+    {
+        return null;
+    }
+
+    @Override
+    public RepositoryURL getURL( )
+    {
+        return null;
+    }
+
+    @Override
+    public void setRepository( RemoteRepository repo )
+    {
+        this.repository = repo;
+    }
+
+    @Override
+    public ArtifactReference toArtifactReference( String path ) throws LayoutException
+    {
+        return null;
+    }
+
+    @Override
+    public String toPath( ArtifactReference reference )
+    {
+        return null;
+    }
+
+    @Override
+    public RepositoryURL toURL( ArtifactReference reference )
+    {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
new file mode 100644
index 0000000..ad98c99
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
@@ -0,0 +1,231 @@
+package org.apache.archiva.repository.mock;
+
+/*
+ * 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.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.BasicRemoteRepository;
+import org.apache.archiva.repository.EditableManagedRepository;
+import org.apache.archiva.repository.EditableRemoteRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryCredentials;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryProvider;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.RemoteIndexFeature;
+import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import org.springframework.stereotype.Service;
+
+import java.net.URI;
+import java.time.Duration;
+import java.time.Period;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Just a simple mock class for the repository provider
+ */
+@Service("mockRepositoryProvider")
+public class RepositoryProviderMock implements RepositoryProvider
+{
+
+    private static final Set<RepositoryType> TYPES = new HashSet<>( );
+
+    static
+    {
+        TYPES.add( RepositoryType.MAVEN );
+        TYPES.add( RepositoryType.NPM );
+    }
+
+    @Override
+    public Set<RepositoryType> provides( )
+    {
+        return TYPES;
+    }
+
+    @Override
+    public EditableManagedRepository createManagedInstance( String id, String name )
+    {
+        return new BasicManagedRepository( id, name );
+    }
+
+    @Override
+    public EditableRemoteRepository createRemoteInstance( String id, String name )
+    {
+        return new BasicRemoteRepository( id, name );
+    }
+
+    @Override
+    public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        BasicManagedRepository managedRepository = new BasicManagedRepository( configuration.getId( ), configuration.getName( ) );
+        updateManagedInstance( managedRepository, configuration );
+        return managedRepository;
+    }
+
+
+    @Override
+    public void updateManagedInstance( EditableManagedRepository managedRepository, ManagedRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        try
+        {
+            managedRepository.setName( managedRepository.getPrimaryLocale(), configuration.getName( ) );
+            managedRepository.setLocation( new URI( configuration.getLocation( )==null ?"" : configuration.getLocation() ) );
+            managedRepository.setBaseUri( new URI( "" ) );
+            managedRepository.setBlocksRedeployment( configuration.isBlockRedeployments( ) );
+            managedRepository.setDescription( managedRepository.getPrimaryLocale(), configuration.getDescription( ) );
+            managedRepository.setLayout( configuration.getLayout( ) );
+            managedRepository.setScanned( configuration.isScanned( ) );
+            managedRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
+            if (configuration.isReleases()) {
+                managedRepository.addActiveReleaseScheme( ReleaseScheme.RELEASE );
+            }
+            if (configuration.isSnapshots()) {
+                managedRepository.addActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
+            }
+            ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
+            acf.setRetentionPeriod( Period.ofDays( configuration.getRetentionPeriod( ) ) );
+            acf.setDeleteReleasedSnapshots( configuration.isDeleteReleasedSnapshots( ) );
+            acf.setRetentionCount( configuration.getRetentionCount( ) );
+            IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
+            icf.setIndexPath( new URI( configuration.getIndexDir( ) ) );
+            icf.setSkipPackedIndexCreation( configuration.isSkipPackedIndexCreation( ) );
+            StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
+            srf.setStageRepoNeeded( configuration.isStageRepoNeeded( ) );
+        }
+        catch ( Exception e )
+        {
+            throw new RepositoryException( "Error", e );
+        }
+
+    }
+
+
+    @Override
+    public ManagedRepository createStagingInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        String id = configuration.getId( ) + StagingRepositoryFeature.STAGING_REPO_POSTFIX;
+        BasicManagedRepository managedRepository = new BasicManagedRepository( id, configuration.getName( ) );
+        updateManagedInstance( managedRepository, configuration );
+        return managedRepository;
+    }
+
+    @Override
+    public RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        BasicRemoteRepository remoteRepository = new BasicRemoteRepository( configuration.getId( ), configuration.getName( ) );
+        updateRemoteInstance( remoteRepository, configuration );
+        return remoteRepository;
+    }
+
+    @Override
+    public void updateRemoteInstance( EditableRemoteRepository remoteRepository, RemoteRepositoryConfiguration configuration ) throws RepositoryException
+    {
+        try
+        {
+            remoteRepository.setName( remoteRepository.getPrimaryLocale(), configuration.getName( ) );
+            remoteRepository.setBaseUri( new URI( "" ) );
+            remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), configuration.getDescription( ) );
+            remoteRepository.setLayout( configuration.getLayout( ) );
+            remoteRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
+            remoteRepository.setCheckPath( configuration.getCheckPath( ) );
+            remoteRepository.setExtraHeaders( configuration.getExtraHeaders( ) );
+            remoteRepository.setExtraParameters( configuration.getExtraParameters( ) );
+            remoteRepository.setTimeout( Duration.ofSeconds( configuration.getTimeout( ) ) );
+            char[] pwd = configuration.getPassword()==null ? "".toCharArray() : configuration.getPassword().toCharArray();
+            remoteRepository.setCredentials( new PasswordCredentials( configuration.getUsername( ), pwd ) );
+            remoteRepository.setLocation( new URI( configuration.getUrl( )==null ? "" : configuration.getUrl() ) );
+            RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
+            rif.setDownloadRemoteIndexOnStartup( configuration.isDownloadRemoteIndexOnStartup( ) );
+            rif.setDownloadRemoteIndex( configuration.isDownloadRemoteIndex( ) );
+            rif.setIndexUri( new URI( configuration.getIndexDir( ) ) );
+            rif.setDownloadTimeout( Duration.ofSeconds( configuration.getRemoteDownloadTimeout( ) ) );
+            rif.setProxyId( configuration.getRemoteDownloadNetworkProxyId( ) );
+        }
+        catch ( Exception e )
+        {
+            throw new RepositoryException( "Error", e );
+        }
+
+    }
+
+    @Override
+    public ManagedRepositoryConfiguration getManagedConfiguration( ManagedRepository managedRepository ) throws RepositoryException
+    {
+        ManagedRepositoryConfiguration configuration = new ManagedRepositoryConfiguration( );
+        configuration.setId( managedRepository.getId( ) );
+        configuration.setName(managedRepository.getName());
+        configuration.setLocation( managedRepository.getLocation( ) == null ? "" : managedRepository.getLocation().toString( ) );
+        configuration.setBlockRedeployments( managedRepository.blocksRedeployments( ) );
+        configuration.setDescription( managedRepository.getDescription( ) );
+        configuration.setScanned( managedRepository.isScanned( ) );
+        configuration.setRefreshCronExpression( managedRepository.getSchedulingDefinition( ) );
+        configuration.setReleases( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE) );
+        configuration.setSnapshots( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT) );
+        configuration.setLayout( managedRepository.getLayout() );
+        ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
+        configuration.setRetentionPeriod( acf.getRetentionPeriod( ).getDays( ) );
+        configuration.setDeleteReleasedSnapshots( acf.isDeleteReleasedSnapshots( ) );
+        configuration.setRetentionCount( acf.getRetentionCount( ) );
+        IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
+        configuration.setSkipPackedIndexCreation( icf.isSkipPackedIndexCreation( ) );
+        configuration.setIndexDir( icf.getIndexPath( ) == null ? "" : icf.getIndexPath().toString( ) );
+        StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
+        configuration.setStageRepoNeeded( srf.isStageRepoNeeded( ) );
+        return configuration;
+    }
+
+
+    @Override
+    public RemoteRepositoryConfiguration getRemoteConfiguration( RemoteRepository remoteRepository ) throws RepositoryException
+    {
+        RemoteRepositoryConfiguration configuration = new RemoteRepositoryConfiguration( );
+        configuration.setId( remoteRepository.getId( ) );
+        configuration.setName( remoteRepository.getName( ) );
+        configuration.setDescription( remoteRepository.getDescription( ) );
+        configuration.setLayout( remoteRepository.getLayout( ) );
+        configuration.setRefreshCronExpression( remoteRepository.getSchedulingDefinition( ) );
+        configuration.setCheckPath( remoteRepository.getCheckPath( ) );
+        configuration.setExtraHeaders( remoteRepository.getExtraHeaders( ) );
+        configuration.setExtraParameters( remoteRepository.getExtraParameters( ) );
+        configuration.setTimeout( (int) remoteRepository.getTimeout( ).getSeconds( ) );
+        RepositoryCredentials creds = remoteRepository.getLoginCredentials( );
+        if (creds!=null)
+        {
+            PasswordCredentials pwdCreds = (PasswordCredentials) creds;
+            configuration.setUsername( pwdCreds.getUsername( ) );
+            configuration.setPassword( new String( pwdCreds.getPassword( ) ) );
+        }
+        configuration.setUrl( remoteRepository.getLocation( ) == null ? "" : remoteRepository.getLocation().toString( ) );
+        RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
+        configuration.setDownloadRemoteIndex( rif.isDownloadRemoteIndex( ) );
+        configuration.setDownloadRemoteIndexOnStartup( rif.isDownloadRemoteIndexOnStartup( ) );
+        configuration.setIndexDir( rif.getIndexUri( )==null ? "" : rif.getIndexUri().toString( ) );
+        configuration.setRemoteDownloadNetworkProxyId( rif.getProxyId( ) );
+        return configuration;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context-cleanup-released-snapshots.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context-cleanup-released-snapshots.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context-cleanup-released-snapshots.xml
index 9e36b99..c6fa2a1 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context-cleanup-released-snapshots.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context-cleanup-released-snapshots.xml
@@ -32,6 +32,11 @@
   </bean>
   <alias name="archivaConfiguration#cleanup-released-snapshots" alias="archivaConfiguration"/>
   <alias name="archivaConfiguration#cleanup-released-snapshots" alias="archivaConfiguration#default"/>
+  <context:component-scan base-package="org.apache.archiva.repository.mock,org.apache.archiva.repository.content.maven2"/>
+
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
+  <alias name="repositoryContentFactory#cleanup-released-snapshots" alias="repositoryContentFactory#default" />
+
 
   <bean name="registry#cleanup-released-snapshots" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry">
     <property name="properties">

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context.xml
index e63eb7a..360e20d 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/spring-context.xml
@@ -44,6 +44,7 @@
     </property>
   </bean>
 
+  <alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
   <alias name="userConfiguration#redback" alias="userConfiguration#default"/>
 
   <!-- ***

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java
index 434f864..50dd8c1 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java
@@ -20,8 +20,8 @@ package org.apache.archiva.consumers.lucene;
  */
 
 import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
+import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.ConfigurationNames;
 import org.apache.archiva.configuration.FileTypes;
@@ -31,6 +31,8 @@ import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.archiva.redback.components.registry.Registry;
 import org.apache.archiva.redback.components.registry.RegistryListener;
 import org.apache.archiva.redback.components.taskqueue.TaskQueueException;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.scheduler.ArchivaTaskScheduler;
 import org.apache.archiva.scheduler.indexing.ArtifactIndexingTask;
 import org.apache.maven.index.NexusIndexer;
@@ -60,6 +62,10 @@ public class NexusIndexerConsumer
     extends AbstractMonitoredConsumer
     implements KnownRepositoryContentConsumer, RegistryListener
 {
+
+    @Inject
+    private RepositoryRegistry repositoryRegistry;
+
     private Logger log = LoggerFactory.getLogger( getClass() );
 
     private ArchivaConfiguration configuration;
@@ -113,7 +119,7 @@ public class NexusIndexerConsumer
         throws ConsumerException
     {
         this.repository = repository;
-        managedRepository = Paths.get( repository.getLocation() );
+        managedRepository = PathUtil.getPathFromUri( repository.getLocation() );
 
         try
         {

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/conf/repository-manager.xml
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/conf/repository-manager.xml b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/conf/repository-manager.xml
index 6c836b8..106fcea 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/conf/repository-manager.xml
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/conf/repository-manager.xml
@@ -30,7 +30,7 @@
       <snapshots>true</snapshots>
       <indexed>true</indexed>
       <refreshCronExpression>0 0 * * * ?</refreshCronExpression>
-      <retentionTime>0</retentionTime>
+      <retentionPeriod>0</retentionPeriod>
       <retentionCount>2</retentionCount>
     </repository>
   </repositories>

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumerTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumerTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumerTest.java
index 2b76279..2a8546a 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumerTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/test/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumerTest.java
@@ -20,16 +20,20 @@ package org.apache.archiva.consumers.lucene;
  */
 
 import junit.framework.TestCase;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
+import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.FileTypes;
 import org.apache.archiva.redback.components.taskqueue.TaskQueueException;
+import org.apache.archiva.repository.BasicManagedRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.ReleaseScheme;
 import org.apache.archiva.scheduler.ArchivaTaskScheduler;
 import org.apache.archiva.scheduler.indexing.ArtifactIndexingTask;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
 import org.apache.maven.index.NexusIndexer;
 import org.apache.maven.index.context.IndexCreator;
+import org.apache.regexp.RE;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -39,6 +43,7 @@ import org.springframework.test.context.ContextConfiguration;
 
 import javax.inject.Inject;
 import java.io.IOException;
+import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -46,6 +51,7 @@ import java.util.Calendar;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 
 /**
@@ -89,7 +95,7 @@ public class NexusIndexerConsumerTest
 
     private NexusIndexerConsumer nexusIndexerConsumer;
 
-    private ManagedRepository repositoryConfig;
+    private BasicManagedRepository repositoryConfig;
 
     private ArchivaTaskSchedulerStub scheduler;
 
@@ -126,27 +132,27 @@ public class NexusIndexerConsumerTest
         // initialize to set the file types to be processed
         nexusIndexerConsumer.initialize();
 
-        repositoryConfig = new ManagedRepository();
-        repositoryConfig.setId( "test-repo" );
-        repositoryConfig.setLocation( "target/test-classes/test-repo" );
+        repositoryConfig = new BasicManagedRepository( "test-repo", "Test Repository"  );
+        repositoryConfig.setLocation( new URI("target/test-classes/test-repo") );
         repositoryConfig.setLayout( "default" );
-        repositoryConfig.setName( "Test Repository" );
         repositoryConfig.setScanned( true );
-        repositoryConfig.setSnapshots( false );
-        repositoryConfig.setReleases( true );
+        repositoryConfig.addActiveReleaseScheme( ReleaseScheme.RELEASE );
+        repositoryConfig.removeActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
     }
 
+
     @Override
     @After
     public void tearDown()
         throws Exception
     {
         // delete created index in the repository
-        Path indexDir = Paths.get( repositoryConfig.getLocation(), ".indexer" );
+        Path basePath = PathUtil.getPathFromUri( repositoryConfig.getLocation() );
+        Path indexDir = basePath.resolve( ".indexer" );
         org.apache.archiva.common.utils.FileUtils.deleteDirectory( indexDir );
         assertFalse( Files.exists(indexDir) );
 
-        indexDir = Paths.get( repositoryConfig.getLocation(), ".index" );
+        indexDir = basePath.resolve( ".index" );
         org.apache.archiva.common.utils.FileUtils.deleteDirectory( indexDir );
         assertFalse( Files.exists(indexDir) );
 
@@ -157,7 +163,8 @@ public class NexusIndexerConsumerTest
     public void testIndexerIndexArtifact()
         throws Exception
     {
-        Path artifactFile = Paths.get( repositoryConfig.getLocation(),
+        Path basePath = PathUtil.getPathFromUri( repositoryConfig.getLocation() );
+        Path artifactFile = basePath.resolve(
                                       "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" );
 
         // begin scan
@@ -174,7 +181,8 @@ public class NexusIndexerConsumerTest
     public void testIndexerArtifactAlreadyIndexed()
         throws Exception
     {
-        Path artifactFile = Paths.get( repositoryConfig.getLocation(),
+        Path basePath = PathUtil.getPathFromUri( repositoryConfig.getLocation() );
+        Path artifactFile = basePath.resolve(
                                       "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" );
 
         // begin scan
@@ -200,7 +208,8 @@ public class NexusIndexerConsumerTest
     public void testIndexerIndexArtifactThenPom()
         throws Exception
     {
-        Path artifactFile = Paths.get( repositoryConfig.getLocation(),
+        Path basePath = PathUtil.getPathFromUri( repositoryConfig.getLocation( ) );
+        Path artifactFile = basePath.resolve(
                                       "org/apache/archiva/archiva-index-methods-jar-test/1.0/archiva-index-methods-jar-test-1.0.jar" );
 
         // begin scan
@@ -213,7 +222,7 @@ public class NexusIndexerConsumerTest
         assertTrue( scheduler.indexed.contains( artifactFile ) );
 
         artifactFile =
-            Paths.get( repositoryConfig.getLocation(), "org/apache/archiva/archiva-index-methods-jar-test/1.0/pom.xml" );
+            basePath.resolve( "org/apache/archiva/archiva-index-methods-jar-test/1.0/pom.xml" );
 
         // scan and index again
         now = Calendar.getInstance().getTime();

http://git-wip-us.apache.org/repos/asf/archiva/blob/4bcf4c0c/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
index a25457c..407b239 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
@@ -19,7 +19,6 @@ package org.apache.archiva.consumers.metadata;
  * under the License.
  */
 
-import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.common.utils.VersionUtil;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.ConfigurationNames;
@@ -41,6 +40,7 @@ import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataN
 import org.apache.archiva.metadata.repository.storage.RepositoryStorageRuntimeException;
 import org.apache.archiva.redback.components.registry.Registry;
 import org.apache.archiva.redback.components.registry.RegistryListener;
+import org.apache.archiva.repository.ManagedRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Scope;