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

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


The following commit(s) were added to refs/heads/master by this push:
     new 830ea54  Moving storage api to repository level
830ea54 is described below

commit 830ea54e0c64bb5c7fe5b2006c171ebd2625e287
Author: Martin Stockhammer <[email protected]>
AuthorDate: Thu Jul 11 23:28:01 2019 +0200

    Moving storage api to repository level
---
 .../java/org/apache/archiva/cli/ArchivaCli.java    |  4 +-
 .../src/test/java/RepositoryProviderMock.java      | 40 ++++++++---
 .../src/test/java/SimpleArtifactConsumerTest.java  |  2 +-
 .../core/ArtifactMissingChecksumsConsumerTest.java |  2 +-
 .../repository/AbstractRepositoryPurgeTest.java    |  5 +-
 .../repository/mock/RepositoryProviderMock.java    | 34 +++++++--
 .../consumers/lucene/NexusIndexerConsumerTest.java |  2 +-
 .../repository/ManagedRepositoryContent.java       |  2 +-
 .../org/apache/archiva/repository/Repository.java  |  3 +-
 .../archiva/repository/RepositoryProvider.java     |  3 +-
 .../repository/AbstractManagedRepository.java      | 20 ++++--
 .../repository/AbstractRemoteRepository.java       | 12 ++--
 .../archiva/repository/AbstractRepository.java     | 80 +++++++++++++++++-----
 .../repository/AbstractRepositoryGroup.java        | 44 ++----------
 .../archiva/repository/BasicManagedRepository.java | 24 +++++--
 .../archiva/repository/BasicRemoteRepository.java  | 18 +++--
 .../repository/content/FilesystemStorage.java      |  4 ++
 .../archiva/repository/RepositoryRegistryTest.java | 12 ++--
 .../mock/ManagedRepositoryContentMock.java         | 29 --------
 .../repository/mock/RepositoryProviderMock.java    | 39 ++++++++---
 .../scanner/DefaultRepositoryScanner.java          | 10 +--
 .../scanner/RepositoryContentConsumersTest.java    | 10 ++-
 .../repository/scanner/RepositoryScannerTest.java  | 11 ++-
 .../scanner/mock/ManagedRepositoryContentMock.java | 39 +----------
 .../legacy/DefaultLegacyRepositoryConverter.java   |  2 +-
 .../indexer/maven/MavenIndexManagerTest.java       |  6 +-
 .../archiva/proxy/AbstractProxyTestCase.java       |  2 +-
 .../archiva/proxy/HttpProxyTransferTest.java       |  2 +-
 .../mock/ManagedRepositoryContentMock.java         | 29 --------
 .../repository/mock/RepositoryProviderMock.java    | 33 +++++++--
 .../maven2/ManagedDefaultRepositoryContent.java    | 47 -------------
 .../repository/maven2/MavenManagedRepository.java  | 55 +++++++++++----
 .../repository/maven2/MavenRemoteRepository.java   | 18 +++--
 .../repository/maven2/MavenRepositoryGroup.java    | 32 ++++-----
 .../repository/maven2/MavenRepositoryProvider.java | 52 +++++++++++---
 .../AbstractRepositoryLayerTestCase.java           | 15 ++--
 .../maven2/MavenRepositoryRequestInfoTest.java     |  8 +--
 .../maven2/MavenRepositoryProviderTest.java        | 15 ++--
 .../metadata/Maven2RepositoryStorageTest.java      | 12 ++--
 .../maven/ArchivaIndexingTaskExecutorTest.java     |  2 +-
 .../archiva/webdav/ArchivaDavResourceFactory.java  | 14 ++--
 .../apache/archiva/webdav/RepositoryServlet.java   |  2 +-
 .../org/apache/archiva/webdav/DavResourceTest.java |  6 +-
 .../consumers/DuplicateArtifactsConsumerTest.java  |  2 +-
 44 files changed, 423 insertions(+), 380 deletions(-)

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 d8078a9..3ff6b3f 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
@@ -164,9 +164,9 @@ public class ArchivaCli
     }
 
     private void doScan( String path, String[] consumers )
-        throws ConsumerException, MalformedURLException
+            throws ConsumerException, IOException
     {
-        BasicManagedRepository repo = new BasicManagedRepository( 
Paths.get(path).getFileName().toString(), "Archiva CLI Provided Repo", 
Paths.get(path).getParent());
+        BasicManagedRepository repo = 
BasicManagedRepository.newFilesystemInstance( 
Paths.get(path).getFileName().toString(), "Archiva CLI Provided Repo", 
Paths.get(path).getParent());
         repo.setLocation( Paths.get(path).toUri() );
 
         List<KnownRepositoryContentConsumer> knownConsumerList = new 
ArrayList<>();
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
index 7f72c42..15cf17e 100644
--- 
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
@@ -42,6 +42,7 @@ import 
org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.net.URI;
 import java.nio.file.Paths;
 import java.time.Duration;
@@ -73,19 +74,32 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     @Override
     public EditableManagedRepository createManagedInstance( String id, String 
name )
     {
-        return new BasicManagedRepository( id, name, 
Paths.get("target/repositories") );
+        try {
+            return BasicManagedRepository.newFilesystemInstance(id, name, 
Paths.get("target/repositories"));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
     }
 
     @Override
     public EditableRemoteRepository createRemoteInstance( String id, String 
name )
     {
-        return new BasicRemoteRepository( id, name , 
Paths.get("target/remotes"));
+        try {
+            return BasicRemoteRepository.newFilesystemInstance(id, name, 
Paths.get("target/remotes"));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
     }
 
     @Override
     public ManagedRepository createManagedInstance( 
ManagedRepositoryConfiguration configuration ) throws RepositoryException
     {
-        BasicManagedRepository managedRepository = new BasicManagedRepository( 
configuration.getId( ), configuration.getName( ), 
Paths.get("target/repositories") );
+        BasicManagedRepository managedRepository;
+        try {
+            managedRepository = 
BasicManagedRepository.newFilesystemInstance(configuration.getId(), 
configuration.getName(), Paths.get("target/repositories"));
+        } catch (IOException e) {
+            throw new RepositoryException(e);
+        }
         updateManagedInstance( managedRepository, configuration );
         return managedRepository;
     }
@@ -132,17 +146,25 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     public ManagedRepository createStagingInstance( 
ManagedRepositoryConfiguration configuration ) throws RepositoryException
     {
         String id = configuration.getId( ) + 
StagingRepositoryFeature.STAGING_REPO_POSTFIX;
-        BasicManagedRepository managedRepository = new BasicManagedRepository( 
id, configuration.getName( ), Paths.get("target/repositories") );
-        updateManagedInstance( managedRepository, configuration );
-        return managedRepository;
+        try {
+            BasicManagedRepository managedRepository = 
BasicManagedRepository.newFilesystemInstance(id, configuration.getName(), 
Paths.get("target/repositories"));
+            updateManagedInstance(managedRepository, configuration);
+            return managedRepository;
+        } catch (IOException e) {
+            throw new RepositoryException(e);
+        }
     }
 
     @Override
     public RemoteRepository createRemoteInstance( 
RemoteRepositoryConfiguration configuration ) throws RepositoryException
     {
-        BasicRemoteRepository remoteRepository = new BasicRemoteRepository( 
configuration.getId( ), configuration.getName( ), Paths.get("target/remotes") );
-        updateRemoteInstance( remoteRepository, configuration );
-        return remoteRepository;
+        try {
+            BasicRemoteRepository remoteRepository = 
BasicRemoteRepository.newFilesystemInstance(configuration.getId(), 
configuration.getName(), Paths.get("target/remotes"));
+            updateRemoteInstance(remoteRepository, configuration);
+            return remoteRepository;
+        } catch (IOException e) {
+            throw new RepositoryException(e);
+        }
     }
 
     @Override
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 54ec5d0..6f45b20 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
@@ -82,7 +82,7 @@ public class SimpleArtifactConsumerTest
         Files.createDirectories( repoDir );
         repoDir.toFile().deleteOnExit();
 
-        testRepository = new 
BasicManagedRepository("test-consumer-repository","Test-Consumer-Repository", 
Paths.get("target/repositories") );
+        testRepository = 
BasicManagedRepository.newFilesystemInstance("test-consumer-repository","Test-Consumer-Repository",
 Paths.get("target/repositories") );
         testRepository.setLocation( repoDir.toAbsolutePath().toUri() );
 
         repositoryRegistry.putRepository(testRepository);
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 0cd2488..4c0e24a 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
@@ -49,7 +49,7 @@ public class ArtifactMissingChecksumsConsumerTest
         super.setUp();
 
         Path basePath = Paths.get("target/test-classes");
-        repoConfig = new BasicManagedRepository( "test-repo", "Test 
Repository", basePath);
+        repoConfig = BasicManagedRepository.newFilesystemInstance( 
"test-repo", "Test Repository", basePath);
         repoConfig.setLayout( "default" );
         repoConfig.setLocation(basePath.resolve("test-repo/" ).toUri() );
 
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 27173cf..04b5a6d 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
@@ -146,10 +146,9 @@ public abstract class AbstractRepositoryPurgeTest
         return path;
     }
 
-    public org.apache.archiva.repository.ManagedRepository 
getRepoConfiguration( String repoId, String repoName ) throws URISyntaxException
-    {
+    public org.apache.archiva.repository.ManagedRepository 
getRepoConfiguration( String repoId, String repoName ) throws 
URISyntaxException, IOException {
         Path basePath = Paths.get("target/test-" + getName()).toAbsolutePath();
-        config = new BasicManagedRepository( repoId, repoName, basePath);
+        config = BasicManagedRepository.newFilesystemInstance( repoId, 
repoName, basePath);
         config.addActiveReleaseScheme( ReleaseScheme.RELEASE );
         config.addActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
         ArtifactCleanupFeature atf = config.getFeature( 
ArtifactCleanupFeature.class ).get();
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
index b4df20d..92b5996 100644
--- 
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
@@ -43,6 +43,7 @@ import 
org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.net.URI;
 import java.nio.file.Paths;
 import java.time.Duration;
@@ -74,13 +75,21 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     @Override
     public EditableManagedRepository createManagedInstance( String id, String 
name )
     {
-        return new BasicManagedRepository( id, name, 
Paths.get("target/repositories") );
+        try {
+            return BasicManagedRepository.newFilesystemInstance( id, name, 
Paths.get("target/repositories") );
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
     }
 
     @Override
     public EditableRemoteRepository createRemoteInstance( String id, String 
name )
     {
-        return new BasicRemoteRepository( id, name, 
Paths.get("target/remotes") );
+        try {
+            return BasicRemoteRepository.newFilesystemInstance( id, name, 
Paths.get("target/remotes") );
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
     }
 
     @Override
@@ -93,7 +102,12 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     @Override
     public ManagedRepository createManagedInstance( 
ManagedRepositoryConfiguration configuration ) throws RepositoryException
     {
-        BasicManagedRepository managedRepository = new BasicManagedRepository( 
configuration.getId( ), configuration.getName( ), 
Paths.get("target/repositories") );
+        BasicManagedRepository managedRepository = null;
+        try {
+            managedRepository = BasicManagedRepository.newFilesystemInstance( 
configuration.getId( ), configuration.getName( ), 
Paths.get("target/repositories") );
+        } catch (IOException e) {
+            throw new RepositoryException(e);
+        }
         updateManagedInstance( managedRepository, configuration );
         return managedRepository;
     }
@@ -140,7 +154,12 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     public ManagedRepository createStagingInstance( 
ManagedRepositoryConfiguration configuration ) throws RepositoryException
     {
         String id = configuration.getId( ) + 
StagingRepositoryFeature.STAGING_REPO_POSTFIX;
-        BasicManagedRepository managedRepository = new BasicManagedRepository( 
id, configuration.getName( ), Paths.get("target/repositories") );
+        BasicManagedRepository managedRepository = null;
+        try {
+            managedRepository = BasicManagedRepository.newFilesystemInstance( 
id, configuration.getName( ), Paths.get("target/repositories") );
+        } catch (IOException e) {
+            throw new RepositoryException(e);
+        }
         updateManagedInstance( managedRepository, configuration );
         return managedRepository;
     }
@@ -148,7 +167,12 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     @Override
     public RemoteRepository createRemoteInstance( 
RemoteRepositoryConfiguration configuration ) throws RepositoryException
     {
-        BasicRemoteRepository remoteRepository = new BasicRemoteRepository( 
configuration.getId( ), configuration.getName( ), Paths.get("target/remotes") );
+        BasicRemoteRepository remoteRepository = null;
+        try {
+            remoteRepository = BasicRemoteRepository.newFilesystemInstance( 
configuration.getId( ), configuration.getName( ), Paths.get("target/remotes") );
+        } catch (IOException e) {
+            throw new RepositoryException(e);
+        }
         updateRemoteInstance( remoteRepository, configuration );
         return remoteRepository;
     }
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 e52baa3..ba8c79f 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
@@ -116,7 +116,7 @@ public class NexusIndexerConsumerTest
         // initialize to set the file types to be processed
         nexusIndexerConsumer.initialize();
 
-        repositoryConfig = new BasicManagedRepository( "test-repo", "Test 
Repository", Paths.get("target/test-classes")  );
+        repositoryConfig = BasicManagedRepository.newFilesystemInstance( 
"test-repo", "Test Repository", Paths.get("target/test-classes")  );
         repositoryConfig.setLocation( new URI("target/test-classes/test-repo") 
);
         repositoryConfig.setLayout( "default" );
         repositoryConfig.setScanned( true );
diff --git 
a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
 
b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
index a496f83..1bab4a8 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
@@ -42,7 +42,7 @@ import java.util.function.Function;
  *
  * This interface
  */
-public interface ManagedRepositoryContent extends RepositoryContent, 
RepositoryStorage
+public interface ManagedRepositoryContent extends RepositoryContent
 {
 
 
diff --git 
a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/Repository.java
 
b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/Repository.java
index 3846398..453badc 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/Repository.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/Repository.java
@@ -20,6 +20,7 @@ package org.apache.archiva.repository;
  */
 
 import org.apache.archiva.indexer.ArchivaIndexingContext;
+import org.apache.archiva.repository.content.RepositoryStorage;
 import org.apache.archiva.repository.features.RepositoryFeature;
 
 import java.net.URI;
@@ -33,7 +34,7 @@ import java.util.Set;
  *
  * Created by Martin Stockhammer on 21.09.17.
  */
-public interface Repository extends RepositoryEventHandler {
+public interface Repository extends RepositoryEventHandler, RepositoryStorage {
 
     /**
      * Return the identifier of the repository. Repository identifier should 
be unique at least
diff --git 
a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
 
b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
index abbb8c4..1f26a5d 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
@@ -23,6 +23,7 @@ import 
org.apache.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.archiva.configuration.RepositoryGroupConfiguration;
 
+import java.io.IOException;
 import java.util.Set;
 
 /**
@@ -57,7 +58,7 @@ public interface RepositoryProvider extends 
RepositoryEventListener
      * @param name the repository name
      * @return a new created managed repository instance
      */
-    EditableManagedRepository createManagedInstance(String id, String name);
+    EditableManagedRepository createManagedInstance(String id, String name) 
throws IOException;
 
     /**
      * Creates a editable remote repository instance. The provider must not 
check the uniqueness of the
diff --git 
a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractManagedRepository.java
 
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractManagedRepository.java
index 06cab6b..41d703a 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractManagedRepository.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractManagedRepository.java
@@ -20,11 +20,17 @@ package org.apache.archiva.repository;
  */
 
 
+import org.apache.archiva.repository.content.RepositoryStorage;
+import org.apache.archiva.repository.content.StorageAsset;
+
+import java.io.IOException;
+import java.io.InputStream;
 import java.nio.file.Path;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Locale;
 import java.util.Set;
+import java.util.function.Consumer;
 
 /**
  * Simple implementation of a managed repository.
@@ -36,14 +42,18 @@ public abstract class AbstractManagedRepository extends 
AbstractRepository imple
     private Set<ReleaseScheme> activeReleaseSchemes = new HashSet<>(  );
     private Set<ReleaseScheme> uActiveReleaseSchemes = 
Collections.unmodifiableSet( activeReleaseSchemes );
 
-    public AbstractManagedRepository( RepositoryType type, String id, String 
name, Path basePath )
+    private RepositoryStorage storage;
+
+    public AbstractManagedRepository(RepositoryType type, String id, String 
name, RepositoryStorage storage)
     {
-        super( type, id, name, basePath );
+        super( type, id, name, storage );
+        this.storage = storage;
     }
 
-    public AbstractManagedRepository( Locale primaryLocale, RepositoryType 
type, String id, String name, Path basePath )
+    public AbstractManagedRepository( Locale primaryLocale, RepositoryType 
type, String id, String name, RepositoryStorage storage )
     {
-        super( primaryLocale, type, id, name, basePath );
+        super( primaryLocale, type, id, name, storage );
+        this.storage = storage;
     }
 
     @Override
@@ -92,4 +102,6 @@ public abstract class AbstractManagedRepository extends 
AbstractRepository imple
     {
         this.activeReleaseSchemes.clear();
     }
+
+
 }
diff --git 
a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRemoteRepository.java
 
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRemoteRepository.java
index 5c3aeba..ff2ac06 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRemoteRepository.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRemoteRepository.java
@@ -20,6 +20,8 @@ package org.apache.archiva.repository;
  */
 
 
+import org.apache.archiva.repository.content.RepositoryStorage;
+
 import java.nio.file.Path;
 import java.time.Duration;
 import java.util.Collections;
@@ -44,14 +46,14 @@ public abstract class AbstractRemoteRepository extends 
AbstractRepository implem
     private String proxyId;
     private RemoteRepositoryContent content;
 
-    public AbstractRemoteRepository( RepositoryType type, String id, String 
name , Path repositoryBase)
+    public AbstractRemoteRepository(RepositoryType type, String id, String 
name , RepositoryStorage storage)
     {
-        super( type, id, name, repositoryBase );
+        super( type, id, name, storage );
     }
 
-    public AbstractRemoteRepository( Locale primaryLocale, RepositoryType 
type, String id, String name, Path repositoryBase )
+    public AbstractRemoteRepository( Locale primaryLocale, RepositoryType 
type, String id, String name, RepositoryStorage storage )
     {
-        super( primaryLocale, type, id, name, repositoryBase );
+        super( primaryLocale, type, id, name, storage );
     }
 
     @Override
@@ -145,7 +147,7 @@ public abstract class AbstractRemoteRepository extends 
AbstractRepository implem
      */
     @Override
     public Path getLocalPath() {
-        return repositoryBase.resolve(getId());
+        return getStorage().getAsset("").getFilePath();
     }
 
     @Override
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 1627ddf..de57977 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
@@ -25,6 +25,8 @@ import com.cronutils.model.definition.CronDefinitionBuilder;
 import com.cronutils.parser.CronParser;
 import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.indexer.ArchivaIndexingContext;
+import org.apache.archiva.repository.content.RepositoryStorage;
+import org.apache.archiva.repository.content.StorageAsset;
 import org.apache.archiva.repository.features.RepositoryFeature;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
 import org.apache.commons.lang.StringUtils;
@@ -32,6 +34,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.URI;
 import java.nio.file.Path;
 import java.util.ArrayList;
@@ -42,6 +45,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Consumer;
 
 /**
  * Implementation of a repository with the necessary fields for a bare 
repository.
@@ -73,22 +77,22 @@ public abstract class AbstractRepository implements 
EditableRepository, Reposito
 
     Map<Class<? extends RepositoryFeature<?>>, RepositoryFeature<?>> 
featureMap = new HashMap<>(  );
 
-    protected Path repositoryBase;
     private ArchivaIndexingContext indexingContext;
+    private RepositoryStorage storage;
 
-    public AbstractRepository(RepositoryType type, String id, String name, 
Path repositoryBase) {
+    public AbstractRepository(RepositoryType type, String id, String name, 
RepositoryStorage repositoryStorage) {
         this.id = id;
         this.names.put( primaryLocale, name);
         this.type = type;
-        this.repositoryBase=repositoryBase;
+        this.storage = repositoryStorage;
     }
 
-    public AbstractRepository(Locale primaryLocale, RepositoryType type, 
String id, String name, Path repositoryBase) {
+    public AbstractRepository(Locale primaryLocale, RepositoryType type, 
String id, String name, RepositoryStorage repositoryStorage) {
         setPrimaryLocale( primaryLocale );
         this.id = id;
         this.names.put( primaryLocale, name);
         this.type = type;
-        this.repositoryBase=repositoryBase;
+        this.storage = repositoryStorage;
     }
 
     protected void setPrimaryLocale(Locale locale) {
@@ -139,17 +143,18 @@ public abstract class AbstractRepository implements 
EditableRepository, Reposito
 
     @Override
     public Path getLocalPath() {
-        Path localPath;
-        if (StringUtils.isEmpty(getLocation().getScheme()) || 
"file".equals(getLocation().getScheme()) ) {
-            localPath = PathUtil.getPathFromUri(getLocation());
-            if (localPath.isAbsolute()) {
-                return localPath;
-            } else {
-                return repositoryBase.resolve(localPath);
-            }
-        } else {
-            return repositoryBase.resolve(getId());
-        }
+        return storage.getAsset("").getFilePath();
+//        Path localPath;
+//        if (StringUtils.isEmpty(getLocation().getScheme()) || 
"file".equals(getLocation().getScheme()) ) {
+//            localPath = PathUtil.getPathFromUri(getLocation());
+//            if (localPath.isAbsolute()) {
+//                return localPath;
+//            } else {
+//                return repositoryBase.resolve(localPath);
+//            }
+//        } else {
+//            return repositoryBase.resolve(getId());
+//        }
     }
 
     @Override
@@ -324,8 +329,47 @@ public abstract class AbstractRepository implements 
EditableRepository, Reposito
         this.listeners.clear();
     }
 
-    protected Path getRepositoryBase() {
-        return repositoryBase;
+    @Override
+    public StorageAsset getAsset(String path )
+    {
+        return storage.getAsset(path);
+    }
+
+    @Override
+    public StorageAsset addAsset( String path, boolean container )
+    {
+        return storage.addAsset(path, container);
+    }
+
+    @Override
+    public void removeAsset( StorageAsset asset ) throws IOException
+    {
+        storage.removeAsset(asset);
     }
 
+    @Override
+    public StorageAsset moveAsset( StorageAsset origin, String destination ) 
throws IOException
+    {
+        return storage.moveAsset(origin, destination);
+    }
+
+    @Override
+    public StorageAsset copyAsset( StorageAsset origin, String destination ) 
throws IOException
+    {
+        return storage.copyAsset(origin, destination);
+    }
+
+    @Override
+    public void consumeData(StorageAsset asset, Consumer<InputStream> 
consumerFunction, boolean readLock ) throws IOException
+    {
+        storage.consumeData(asset, consumerFunction, readLock);
+    }
+
+    protected void setStorage(RepositoryStorage storage) {
+        this.storage = storage;
+    }
+
+    protected RepositoryStorage getStorage() {
+        return storage;
+    }
 }
diff --git 
a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepositoryGroup.java
 
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepositoryGroup.java
index 48d2d2b..2011d4a 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepositoryGroup.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepositoryGroup.java
@@ -44,16 +44,14 @@ public class AbstractRepositoryGroup extends 
AbstractRepository implements Edita
 
     private final ReadWriteLock rwl = new ReentrantReadWriteLock();
 
-    private RepositoryStorage storage;
-
     private RepositoryCapabilities capabilities;
 
-    public AbstractRepositoryGroup(RepositoryType type, String id, String 
name, Path repositoryBase) {
-        super(type, id, name, repositoryBase);
+    public AbstractRepositoryGroup(RepositoryType type, String id, String 
name, RepositoryStorage storage) {
+        super(type, id, name, storage);
     }
 
-    public AbstractRepositoryGroup(Locale primaryLocale, RepositoryType type, 
String id, String name, Path repositoryBase) {
-        super(primaryLocale, type, id, name, repositoryBase);
+    public AbstractRepositoryGroup(Locale primaryLocale, RepositoryType type, 
String id, String name, RepositoryStorage storage) {
+        super(primaryLocale, type, id, name, storage);
     }
 
     @Override
@@ -173,40 +171,6 @@ public class AbstractRepositoryGroup extends 
AbstractRepository implements Edita
         return mergedIndexTTL;
     }
 
-    @Override
-    public StorageAsset getAsset(String path) {
-        return storage.getAsset(path);
-    }
-
-    @Override
-    public void consumeData(StorageAsset asset, Consumer<InputStream> 
consumerFunction, boolean readLock) throws IOException {
-        storage.consumeData(asset, consumerFunction, readLock);
-    }
-
-    @Override
-    public StorageAsset addAsset(String path, boolean container) {
-        return storage.addAsset(path, container);
-    }
-
-    @Override
-    public void removeAsset(StorageAsset asset) throws IOException {
-        storage.removeAsset(asset);
-    }
-
-    @Override
-    public StorageAsset moveAsset(StorageAsset origin, String destination) 
throws IOException {
-        return storage.moveAsset(origin, destination);
-    }
-
-    @Override
-    public StorageAsset copyAsset(StorageAsset origin, String destination) 
throws IOException {
-        return storage.copyAsset(origin, destination);
-    }
-
-    protected void setStorage(RepositoryStorage storage) {
-        this.storage = storage;
-    }
-
     protected void setCapabilities(RepositoryCapabilities capabilities) {
         this.capabilities = capabilities;
     }
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
index d45daea..a16630b 100644
--- 
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
@@ -19,14 +19,22 @@ package org.apache.archiva.repository;
  * under the License.
  */
 
+import org.apache.archiva.common.filelock.DefaultFileLockManager;
+import org.apache.archiva.common.filelock.FileLockManager;
+import org.apache.archiva.repository.content.FilesystemStorage;
+import org.apache.archiva.repository.content.RepositoryStorage;
+import org.apache.archiva.repository.content.StorageAsset;
 import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.nio.file.Path;
 import java.util.Locale;
+import java.util.function.Consumer;
 
 /**
  *
@@ -41,7 +49,6 @@ public class BasicManagedRepository extends 
AbstractManagedRepository
     ArtifactCleanupFeature artifactCleanupFeature = new 
ArtifactCleanupFeature(  );
     StagingRepositoryFeature stagingRepositoryFeature = new 
StagingRepositoryFeature( );
 
-
     static final StandardCapabilities CAPABILITIES = new StandardCapabilities( 
new ReleaseScheme[] {
         ReleaseScheme.RELEASE, ReleaseScheme.SNAPSHOT
     }, new String[] {"default"}, new String[0], new String[] {
@@ -49,15 +56,15 @@ public class BasicManagedRepository extends 
AbstractManagedRepository
         StagingRepositoryFeature.class.toString()
     }, true, true, true, true, true  );
 
-    public BasicManagedRepository( String id, String name, Path basePath )
+    public BasicManagedRepository( String id, String name, RepositoryStorage 
repositoryStorage )
     {
-        super( RepositoryType.MAVEN, id, name, basePath );
+        super( RepositoryType.MAVEN, id, name, repositoryStorage );
         initFeatures();
     }
 
-    public BasicManagedRepository( Locale primaryLocale, RepositoryType type, 
String id, String name, Path basePath )
+    public BasicManagedRepository( Locale primaryLocale, RepositoryType type, 
String id, String name, RepositoryStorage repositoryStorage )
     {
-        super( primaryLocale, type, id, name, basePath );
+        super( primaryLocale, type, id, name, repositoryStorage);
         initFeatures();
     }
 
@@ -85,4 +92,11 @@ public class BasicManagedRepository extends 
AbstractManagedRepository
     public RepositoryRequestInfo getRequestInfo() {
         return null;
     }
+
+    public static BasicManagedRepository newFilesystemInstance(String id, 
String name, Path basePath) throws IOException {
+        FileLockManager lockManager = new DefaultFileLockManager();
+        FilesystemStorage storage = new 
FilesystemStorage(basePath.resolve(id), lockManager);
+        return new BasicManagedRepository(id, name, storage);
+    }
+
 }
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
index 81c7b39..acca83a 100644
--- 
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
@@ -19,11 +19,16 @@ package org.apache.archiva.repository;
  * under the License.
  */
 
+import org.apache.archiva.common.filelock.DefaultFileLockManager;
+import org.apache.archiva.common.filelock.FileLockManager;
+import org.apache.archiva.repository.content.FilesystemStorage;
+import org.apache.archiva.repository.content.RepositoryStorage;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.IOException;
 import java.nio.file.Path;
 import java.util.Locale;
 
@@ -49,15 +54,15 @@ public class BasicRemoteRepository extends 
AbstractRemoteRepository
             IndexCreationFeature.class.toString()
     }, true, true, true, true, true  );
 
-    public BasicRemoteRepository( String id, String name, Path basePath )
+    public BasicRemoteRepository( String id, String name, RepositoryStorage 
storage)
     {
-        super( RepositoryType.MAVEN, id, name, basePath);
+        super( RepositoryType.MAVEN, id, name, storage);
         initFeatures();
     }
 
-    public BasicRemoteRepository( Locale primaryLocale, RepositoryType type, 
String id, String name, Path basePath )
+    public BasicRemoteRepository( Locale primaryLocale, RepositoryType type, 
String id, String name, RepositoryStorage storage )
     {
-        super( primaryLocale, type, id, name, basePath );
+        super( primaryLocale, type, id, name, storage );
         initFeatures();
     }
 
@@ -79,4 +84,9 @@ public class BasicRemoteRepository extends 
AbstractRemoteRepository
     }
 
 
+    public static BasicRemoteRepository newFilesystemInstance(String id, 
String name, Path basePath) throws IOException {
+        FileLockManager lockManager = new DefaultFileLockManager();
+        FilesystemStorage storage = new 
FilesystemStorage(basePath.resolve(id), lockManager);
+        return new BasicRemoteRepository(id, name, storage);
+    }
 }
diff --git 
a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/FilesystemStorage.java
 
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/FilesystemStorage.java
index 25e0bc5..344ebe6 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/FilesystemStorage.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/content/FilesystemStorage.java
@@ -180,4 +180,8 @@ public class FilesystemStorage implements RepositoryStorage 
{
         return newAsset;
     }
 
+    public FileLockManager getFileLockManager() {
+        return fileLockManager;
+    }
+
 }
diff --git 
a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/RepositoryRegistryTest.java
 
b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/RepositoryRegistryTest.java
index b125f81..3e66c09 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/RepositoryRegistryTest.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/RepositoryRegistryTest.java
@@ -192,14 +192,14 @@ public class RepositoryRegistryTest
     @Test
     public void putManagedRepository( ) throws Exception
     {
-        BasicManagedRepository managedRepository = new BasicManagedRepository( 
"test001", "Test repo", archivaConfiguration.getRepositoryBaseDir() );
+        BasicManagedRepository managedRepository = 
BasicManagedRepository.newFilesystemInstance( "test001", "Test repo", 
archivaConfiguration.getRepositoryBaseDir() );
         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", archivaConfiguration.getRepositoryBaseDir() );
+        managedRepository = BasicManagedRepository.newFilesystemInstance( 
"central", "Test repo", archivaConfiguration.getRepositoryBaseDir() );
         managedRepository.setDescription( 
managedRepository.getPrimaryLocale(), "This is just a test" );
         ManagedRepository updatedRepo = null;
         try {
@@ -208,7 +208,7 @@ public class RepositoryRegistryTest
         } catch (RepositoryException e) {
             // OK
         }
-        managedRepository = new BasicManagedRepository( "internal", "Test 
repo", archivaConfiguration.getRepositoryBaseDir() );
+        managedRepository = BasicManagedRepository.newFilesystemInstance( 
"internal", "Test repo", archivaConfiguration.getRepositoryBaseDir() );
         managedRepository.setDescription( 
managedRepository.getPrimaryLocale(), "This is just a test" );
         updatedRepo = repositoryRegistry.putRepository( managedRepository );
 
@@ -283,7 +283,7 @@ public class RepositoryRegistryTest
     @Test
     public void putRemoteRepository( ) throws Exception
     {
-        BasicRemoteRepository remoteRepository = new BasicRemoteRepository( 
"test001", "Test repo", archivaConfiguration.getRemoteRepositoryBaseDir() );
+        BasicRemoteRepository remoteRepository = 
BasicRemoteRepository.newFilesystemInstance( "test001", "Test repo", 
archivaConfiguration.getRemoteRepositoryBaseDir() );
         remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), 
"This is just a test" );
         RemoteRepository newRepo = 
repositoryRegistry.putRepository(remoteRepository);
 
@@ -291,7 +291,7 @@ public class RepositoryRegistryTest
         assertNotNull(remoteRepository.getContent());
         assertEquals(6, repositoryRegistry.getRepositories().size());
 
-        remoteRepository = new BasicRemoteRepository( "internal", "Test repo", 
archivaConfiguration.getRemoteRepositoryBaseDir() );
+        remoteRepository = BasicRemoteRepository.newFilesystemInstance( 
"internal", "Test repo", archivaConfiguration.getRemoteRepositoryBaseDir() );
         remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), 
"This is just a test" );
         RemoteRepository updatedRepo = null;
         try
@@ -302,7 +302,7 @@ public class RepositoryRegistryTest
             // OK
         }
 
-        remoteRepository = new BasicRemoteRepository( "central", "Test repo", 
archivaConfiguration.getRemoteRepositoryBaseDir() );
+        remoteRepository = BasicRemoteRepository.newFilesystemInstance( 
"central", "Test repo", archivaConfiguration.getRemoteRepositoryBaseDir() );
         remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), 
"This is just a test" );
         updatedRepo = repositoryRegistry.putRepository( remoteRepository );
 
diff --git 
a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
 
b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
index 91d584b..0eb574e 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
@@ -171,33 +171,4 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
         return null;
     }
 
-    @Override
-    public StorageAsset getAsset(String path) {
-        return null;
-    }
-
-    @Override
-    public void consumeData(StorageAsset asset, Consumer<InputStream> 
consumerFunction, boolean readLock) throws IOException {
-
-    }
-
-    @Override
-    public StorageAsset addAsset(String path, boolean container) {
-        return null;
-    }
-
-    @Override
-    public void removeAsset(StorageAsset asset) throws IOException {
-
-    }
-
-    @Override
-    public StorageAsset moveAsset(StorageAsset origin, String destination) 
throws IOException {
-        return null;
-    }
-
-    @Override
-    public StorageAsset copyAsset(StorageAsset origin, String destination) 
throws IOException {
-        return null;
-    }
 }
diff --git 
a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
 
b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
index 36d6a99..5d2cd7b 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
@@ -29,6 +29,7 @@ import 
org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.net.URI;
 import java.nio.file.Paths;
 import java.time.Duration;
@@ -58,15 +59,18 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     }
 
     @Override
-    public EditableManagedRepository createManagedInstance( String id, String 
name )
-    {
-        return new BasicManagedRepository( id, name, 
Paths.get("target/repositories") );
+    public EditableManagedRepository createManagedInstance( String id, String 
name ) throws IOException {
+        return BasicManagedRepository.newFilesystemInstance( id, name, 
Paths.get("target/repositories") );
     }
 
     @Override
     public EditableRemoteRepository createRemoteInstance( String id, String 
name )
     {
-        return new BasicRemoteRepository( id, name , 
Paths.get("target/remotes"));
+        try {
+            return BasicRemoteRepository.newFilesystemInstance( id, name , 
Paths.get("target/remotes"));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
     }
 
     @Override
@@ -75,9 +79,13 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     }
 
     @Override
-    public ManagedRepository createManagedInstance( 
ManagedRepositoryConfiguration configuration ) throws RepositoryException
-    {
-        BasicManagedRepository managedRepository = new BasicManagedRepository( 
configuration.getId( ), configuration.getName( ), 
Paths.get("target/repositories") );
+    public ManagedRepository createManagedInstance( 
ManagedRepositoryConfiguration configuration ) throws RepositoryException {
+        BasicManagedRepository managedRepository = null;
+        try {
+            managedRepository = BasicManagedRepository.newFilesystemInstance( 
configuration.getId( ), configuration.getName( ), 
Paths.get("target/repositories") );
+        } catch (IOException e) {
+            throw new RepositoryException(e);
+        }
         updateManagedInstance( managedRepository, configuration );
         return managedRepository;
     }
@@ -121,10 +129,14 @@ public class RepositoryProviderMock implements 
RepositoryProvider
 
 
     @Override
-    public ManagedRepository createStagingInstance( 
ManagedRepositoryConfiguration configuration ) throws RepositoryException
-    {
+    public ManagedRepository createStagingInstance( 
ManagedRepositoryConfiguration configuration ) throws RepositoryException {
         String id = configuration.getId( ) + 
StagingRepositoryFeature.STAGING_REPO_POSTFIX;
-        BasicManagedRepository managedRepository = new BasicManagedRepository( 
id, configuration.getName( ) , Paths.get("target/repositories"));
+        BasicManagedRepository managedRepository = null;
+        try {
+            managedRepository = BasicManagedRepository.newFilesystemInstance( 
id, configuration.getName( ) , Paths.get("target/repositories"));
+        } catch (IOException e) {
+            throw new RepositoryException(e);
+        }
         updateManagedInstance( managedRepository, configuration );
         
managedRepository.getFeature(StagingRepositoryFeature.class).get().setStageRepoNeeded(false);
         return managedRepository;
@@ -133,7 +145,12 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     @Override
     public RemoteRepository createRemoteInstance( 
RemoteRepositoryConfiguration configuration ) throws RepositoryException
     {
-        BasicRemoteRepository remoteRepository = new BasicRemoteRepository( 
configuration.getId( ), configuration.getName( ), Paths.get("target/remotes") );
+        BasicRemoteRepository remoteRepository = null;
+        try {
+            remoteRepository = BasicRemoteRepository.newFilesystemInstance( 
configuration.getId( ), configuration.getName( ), Paths.get("target/remotes") );
+        } catch (IOException e) {
+            throw new RepositoryException(e);
+        }
         updateRemoteInstance( remoteRepository, configuration );
         return remoteRepository;
     }
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 d09863e..b26bea9 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
@@ -35,13 +35,7 @@ import javax.inject.Inject;
 import java.io.IOException;
 import java.nio.file.FileVisitOption;
 import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * DefaultRepositoryScanner
@@ -97,7 +91,7 @@ public class DefaultRepositoryScanner
             throw new IllegalArgumentException( "Unable to operate on a null 
repository." );
         }
 
-        StorageAsset repositoryBase = repository.getContent().getAsset("");
+        StorageAsset repositoryBase = repository.getAsset("");
 
         //MRM-1342 Repository statistics report doesn't appear to be working 
correctly
         //create the repo if not existing to have an empty stats
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 2537a62..3be2e29 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
@@ -76,16 +76,14 @@ public class RepositoryContentConsumersTest
     @Inject
     ApplicationContext applicationContext;
 
-    protected ManagedRepository createRepository( String id, String name, Path 
location )
-    {
-        BasicManagedRepository repo = new BasicManagedRepository( id, name , 
location.getParent() );
+    protected ManagedRepository createRepository( String id, String name, Path 
location ) throws IOException {
+        BasicManagedRepository repo = 
BasicManagedRepository.newFilesystemInstance( id, name , location.getParent() );
         repo.setLocation( location.toAbsolutePath().toUri() );
         return repo;
     }
 
-    protected RemoteRepository createRemoteRepository( String id, String name, 
String url ) throws URISyntaxException
-    {
-        BasicRemoteRepository repo = new BasicRemoteRepository(id, name, 
Paths.get("remotes"));
+    protected RemoteRepository createRemoteRepository( String id, String name, 
String url ) throws URISyntaxException, IOException {
+        BasicRemoteRepository repo = 
BasicRemoteRepository.newFilesystemInstance(id, name, Paths.get("remotes"));
         repo.setLocation( new URI( url ) );
         return repo;
     }
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 9e08f64..5f6f7e0 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
@@ -67,17 +67,16 @@ public class RepositoryScannerTest
     ApplicationContext applicationContext;
 
     protected EditableManagedRepository createRepository( String id, String 
name, Path location ) throws IOException {
-        BasicManagedRepository repo = new BasicManagedRepository(id, name, 
location.getParent());
-        repo.setLocation( location.toAbsolutePath().toUri());
         FileLockManager lockManager = new DefaultFileLockManager();
         FilesystemStorage storage = new 
FilesystemStorage(location.toAbsolutePath(), lockManager);
-        repo.setContent(new ManagedRepositoryContentMock(repo, storage));
+        BasicManagedRepository repo = new BasicManagedRepository(id, name, 
storage);
+        repo.setLocation( location.toAbsolutePath().toUri());
+        repo.setContent(new ManagedRepositoryContentMock(repo));
         return repo;
     }
 
-    protected EditableRemoteRepository createRemoteRepository( String id, 
String name, String url ) throws URISyntaxException
-    {
-        BasicRemoteRepository repo = new BasicRemoteRepository(id, name, 
Paths.get("remotes"));
+    protected EditableRemoteRepository createRemoteRepository( String id, 
String name, String url ) throws URISyntaxException, IOException {
+        BasicRemoteRepository repo = 
BasicRemoteRepository.newFilesystemInstance(id, name, Paths.get("remotes"));
         repo.setLocation( new URI( url ) );
         return repo;
     }
diff --git 
a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java
 
b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java
index 6cac73d..e814a49 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java
@@ -27,20 +27,14 @@ import org.apache.archiva.model.ArtifactReference;
 import org.apache.archiva.model.ProjectReference;
 import org.apache.archiva.model.VersionedReference;
 import org.apache.archiva.repository.*;
-import org.apache.archiva.repository.content.FilesystemAsset;
 import org.apache.archiva.repository.content.FilesystemStorage;
-import org.apache.archiva.repository.content.StorageAsset;
 import org.apache.commons.lang.StringUtils;
-import org.springframework.stereotype.Service;
 
-import java.io.IOException;
-import java.io.InputStream;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
-import java.util.function.Consumer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -55,11 +49,9 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
 
 
     private ManagedRepository repository;
-    private FilesystemStorage storage;
 
-    public ManagedRepositoryContentMock(ManagedRepository repo, 
FilesystemStorage storage) {
+    public ManagedRepositoryContentMock(ManagedRepository repo) {
         this.repository = repo;
-        this.storage = storage;
     }
 
     @Override
@@ -391,33 +383,4 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
         return null;
     }
 
-    @Override
-    public StorageAsset getAsset(String path) {
-        return storage.getAsset(path);
-    }
-
-    @Override
-    public void consumeData(StorageAsset asset, Consumer<InputStream> 
consumerFunction, boolean readLock) throws IOException {
-        storage.consumeData(asset, consumerFunction, readLock);
-    }
-
-    @Override
-    public StorageAsset addAsset(String path, boolean container) {
-        return storage.addAsset(path, container);
-    }
-
-    @Override
-    public void removeAsset(StorageAsset asset) throws IOException {
-        storage.removeAsset(asset);
-    }
-
-    @Override
-    public StorageAsset moveAsset(StorageAsset origin, String destination) 
throws IOException {
-        return storage.moveAsset(origin, destination);
-    }
-
-    @Override
-    public StorageAsset copyAsset(StorageAsset origin, String destination) 
throws IOException {
-        return storage.copyAsset(origin, destination);
-    }
 }
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-converter/src/main/java/org/apache/archiva/converter/legacy/DefaultLegacyRepositoryConverter.java
 
b/archiva-modules/archiva-maven/archiva-maven-converter/src/main/java/org/apache/archiva/converter/legacy/DefaultLegacyRepositoryConverter.java
index 209fa8f..25a3f9d 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-converter/src/main/java/org/apache/archiva/converter/legacy/DefaultLegacyRepositoryConverter.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-converter/src/main/java/org/apache/archiva/converter/legacy/DefaultLegacyRepositoryConverter.java
@@ -99,7 +99,7 @@ public class DefaultLegacyRepositoryConverter
         {
             String defaultRepositoryUrl = PathUtil.toUrl( repositoryDirectory 
);
 
-            BasicManagedRepository legacyRepository = new 
BasicManagedRepository( "legacy", "Legacy Repository", 
repositoryDirectory.getParent());
+            BasicManagedRepository legacyRepository = 
BasicManagedRepository.newFilesystemInstance( "legacy", "Legacy Repository", 
repositoryDirectory.getParent());
             legacyRepository.setLocation( 
legacyRepositoryDirectory.toAbsolutePath().toUri() );
             legacyRepository.setLayout( "legacy" );
             DefaultFileLockManager lockManager = new DefaultFileLockManager();
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java
 
b/archiva-modules/archiva-maven/archiva-maven-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java
index 71363dc..ae512f1 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java
@@ -183,8 +183,8 @@ public class MavenIndexManagerTest {
     private ArchivaIndexingContext createTestContext() throws 
URISyntaxException, IndexCreationFailedException, IOException {
         indexPath = Paths.get("target/repositories/test-repo/.index-test");
         FileUtils.deleteDirectory(indexPath);
-        repository = new MavenManagedRepository("test-repo", "Test Repo", 
Paths.get("target/repositories"));
-        repository.setLocation(new URI("test-repo"));
+        repository = MavenManagedRepository.newLocalInstance("test-repo", 
"Test Repo", Paths.get("target/repositories"));
+        // repository.setLocation(new URI("test-repo"));
         IndexCreationFeature icf = 
repository.getFeature(IndexCreationFeature.class).get();
         icf.setIndexPath(new URI(".index-test"));
         ctx = mavenIndexManager.createContext(repository);
@@ -194,7 +194,7 @@ public class MavenIndexManagerTest {
     private ArchivaIndexingContext createTestContextForRemote() throws 
URISyntaxException, IndexCreationFailedException, IOException {
         indexPath = Paths.get("target/repositories/test-repo/.index-test");
         Path repoPath = Paths.get("target/repositories").toAbsolutePath();
-        repositoryRemote = new MavenRemoteRepository("test-repo", "Test Repo", 
repoPath);
+        repositoryRemote = MavenRemoteRepository.newLocalInstance("test-repo", 
"Test Repo", repoPath);
         repositoryRemote.setLocation(repoPath.resolve("test-repo").toUri());
         RemoteIndexFeature icf = 
repositoryRemote.getFeature(RemoteIndexFeature.class).get();
         icf.setIndexUri(new URI(".index-test"));
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
 
b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
index 30f780c..7e53c1d 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/AbstractProxyTestCase.java
@@ -319,7 +319,7 @@ public abstract class AbstractProxyTestCase
     protected ManagedRepositoryContent createRepository( String id, String 
name, String path, String layout )
         throws Exception
     {
-        ManagedRepository repo = new BasicManagedRepository(id, name, 
Paths.get(path));
+        ManagedRepository repo = 
BasicManagedRepository.newFilesystemInstance(id, name, Paths.get(path));
         repositoryRegistry.putRepository(repo);
         return repositoryRegistry.getManagedRepository(id).getContent();
     }
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java
 
b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java
index c3d7c11..5d2c93b 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/proxy/HttpProxyTransferTest.java
@@ -94,7 +94,7 @@ public class HttpProxyTransferTest
     protected ManagedRepositoryContent createRepository( String id, String 
name, String path, String layout )
             throws Exception
     {
-        ManagedRepository repo = new BasicManagedRepository(id, name, 
Paths.get(path));
+        ManagedRepository repo = 
BasicManagedRepository.newFilesystemInstance(id, name, Paths.get(path));
         repositoryRegistry.putRepository(repo);
         return repositoryRegistry.getManagedRepository(id).getContent();
     }
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
 
b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
index 376bc00..2f10b16 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
@@ -389,33 +389,4 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
         return null;
     }
 
-    @Override
-    public StorageAsset getAsset(String path) {
-        return null;
-    }
-
-    @Override
-    public void consumeData(StorageAsset asset, Consumer<InputStream> 
consumerFunction, boolean readLock) throws IOException {
-
-    }
-
-    @Override
-    public StorageAsset addAsset(String path, boolean container) {
-        return null;
-    }
-
-    @Override
-    public void removeAsset(StorageAsset asset) throws IOException {
-
-    }
-
-    @Override
-    public StorageAsset moveAsset(StorageAsset origin, String destination) 
throws IOException {
-        return null;
-    }
-
-    @Override
-    public StorageAsset copyAsset(StorageAsset origin, String destination) 
throws IOException {
-        return null;
-    }
 }
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
 
b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
index cae8337..747f64e 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java
@@ -43,6 +43,7 @@ import 
org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.net.URI;
 import java.nio.file.Paths;
 import java.time.Duration;
@@ -72,15 +73,18 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     }
 
     @Override
-    public EditableManagedRepository createManagedInstance( String id, String 
name )
-    {
-        return new BasicManagedRepository( id, name , 
Paths.get("target/repositories"));
+    public EditableManagedRepository createManagedInstance( String id, String 
name ) throws IOException {
+        return BasicManagedRepository.newFilesystemInstance( id, name , 
Paths.get("target/repositories"));
     }
 
     @Override
     public EditableRemoteRepository createRemoteInstance( String id, String 
name )
     {
-        return new BasicRemoteRepository( id, name, 
Paths.get("target/remotes") );
+        try {
+            return BasicRemoteRepository.newFilesystemInstance( id, name, 
Paths.get("target/remotes") );
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
     }
 
     @Override
@@ -92,7 +96,12 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     @Override
     public ManagedRepository createManagedInstance( 
ManagedRepositoryConfiguration configuration ) throws RepositoryException
     {
-        BasicManagedRepository managedRepository = new BasicManagedRepository( 
configuration.getId( ), configuration.getName( ) , 
Paths.get("target/repositories"));
+        BasicManagedRepository managedRepository = null;
+        try {
+            managedRepository = BasicManagedRepository.newFilesystemInstance( 
configuration.getId( ), configuration.getName( ) , 
Paths.get("target/repositories"));
+        } catch (IOException e) {
+            throw new RepositoryException(e);
+        }
         updateManagedInstance( managedRepository, configuration );
         return managedRepository;
     }
@@ -139,7 +148,12 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     public ManagedRepository createStagingInstance( 
ManagedRepositoryConfiguration configuration ) throws RepositoryException
     {
         String id = configuration.getId( ) + 
StagingRepositoryFeature.STAGING_REPO_POSTFIX;
-        BasicManagedRepository managedRepository = new BasicManagedRepository( 
id, configuration.getName( ), Paths.get("target/repositories") );
+        BasicManagedRepository managedRepository = null;
+        try {
+            managedRepository = BasicManagedRepository.newFilesystemInstance( 
id, configuration.getName( ), Paths.get("target/repositories") );
+        } catch (IOException e) {
+            throw new RepositoryException(e);
+        }
         updateManagedInstance( managedRepository, configuration );
         return managedRepository;
     }
@@ -147,7 +161,12 @@ public class RepositoryProviderMock implements 
RepositoryProvider
     @Override
     public RemoteRepository createRemoteInstance( 
RemoteRepositoryConfiguration configuration ) throws RepositoryException
     {
-        BasicRemoteRepository remoteRepository = new BasicRemoteRepository( 
configuration.getId( ), configuration.getName( ), Paths.get("target/remotes") );
+        BasicRemoteRepository remoteRepository = null;
+        try {
+            remoteRepository = BasicRemoteRepository.newFilesystemInstance( 
configuration.getId( ), configuration.getName( ), Paths.get("target/remotes") );
+        } catch (IOException e) {
+            throw new RepositoryException(e);
+        }
         updateRemoteInstance( remoteRepository, configuration );
         return remoteRepository;
     }
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
index e76b92c..01e429e 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
@@ -67,8 +67,6 @@ public class ManagedDefaultRepositoryContent
     implements ManagedRepositoryContent
 {
 
-    private FilesystemStorage storage;
-
     private FileTypes filetypes;
 
     public void setFileTypes(FileTypes fileTypes) {
@@ -421,13 +419,6 @@ public class ManagedDefaultRepositoryContent
             if (repository instanceof EditableManagedRepository) {
                 ((EditableManagedRepository) repository).setContent(this);
             }
-            final Path repositoryDir = getRepoDir();
-            try {
-                storage = new FilesystemStorage(repositoryDir, 
this.lockManager);
-            } catch (IOException e) {
-                log.error("Could not initialize the filesystem storage to 
repository {}: {}", repositoryDir, e.getMessage(), e);
-                throw new RuntimeException("Fatal error. Could not initialize 
the filesystem storage for "+repositoryDir+": "+e.getMessage());
-            }
         }
 
     }
@@ -545,42 +536,4 @@ public class ManagedDefaultRepositoryContent
     }
 
 
-    @Override
-    public void consumeData( StorageAsset asset, Consumer<InputStream> 
consumerFunction, boolean readLock ) throws IOException
-    {
-        storage.consumeData(asset, consumerFunction, readLock);
-    }
-
-
-    @Override
-    public StorageAsset getAsset( String path )
-    {
-        return storage.getAsset(path);
-    }
-
-    @Override
-    public StorageAsset addAsset( String path, boolean container )
-    {
-        return storage.addAsset(path, container);
-    }
-
-    @Override
-    public void removeAsset( StorageAsset asset ) throws IOException
-    {
-        storage.removeAsset(asset);
-    }
-
-    @Override
-    public StorageAsset moveAsset( StorageAsset origin, String destination ) 
throws IOException
-    {
-        return storage.moveAsset(origin, destination);
-    }
-
-    @Override
-    public StorageAsset copyAsset( StorageAsset origin, String destination ) 
throws IOException
-    {
-        return storage.copyAsset(origin, destination);
-    }
-
-
 }
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
index be4756b..026990e 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenManagedRepository.java
@@ -19,8 +19,12 @@ package org.apache.archiva.repository.maven2;
  * under the License.
  */
 
+import org.apache.archiva.common.filelock.DefaultFileLockManager;
+import org.apache.archiva.common.filelock.FileLockManager;
 import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.repository.*;
+import org.apache.archiva.repository.content.FilesystemStorage;
+import org.apache.archiva.repository.content.RepositoryStorage;
 import org.apache.archiva.repository.content.maven2.MavenRepositoryRequestInfo;
 import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.repository.features.IndexCreationFeature;
@@ -65,17 +69,18 @@ public class MavenManagedRepository extends 
AbstractManagedRepository
         false
     );
 
-    public MavenManagedRepository( String id, String name, Path basePath )
+    public MavenManagedRepository(String id, String name, FilesystemStorage 
storage)
     {
-        super( RepositoryType.MAVEN, id, name, basePath);
+
+        super( RepositoryType.MAVEN, id, name, storage);
         this.indexCreationFeature = new IndexCreationFeature(this, this);
-        setLocation(basePath.resolve(id).toUri());
+        setLocation(storage.getAsset("").getFilePath().toUri());
     }
 
-    public MavenManagedRepository( Locale primaryLocale, String id, String 
name, Path basePath )
+    public MavenManagedRepository( Locale primaryLocale, String id, String 
name, FilesystemStorage storage )
     {
-        super( primaryLocale, RepositoryType.MAVEN, id, name, basePath );
-        setLocation(basePath.resolve(id).toUri());
+        super( primaryLocale, RepositoryType.MAVEN, id, name, storage );
+        setLocation(storage.getAsset("").getFilePath().toUri());
     }
 
     @Override
@@ -121,22 +126,44 @@ public class MavenManagedRepository extends 
AbstractManagedRepository
     @Override
     public void setLocation( URI location )
     {
-        super.setLocation( location );
+        URI previousLocation = super.getLocation();
+        Path previousLoc = PathUtil.getPathFromUri(previousLocation);
         Path newLoc = PathUtil.getPathFromUri( location );
-        if (!Files.exists( newLoc )) {
-            try
-            {
-                Files.createDirectories( newLoc );
+        if (!newLoc.toAbsolutePath().equals(previousLoc.toAbsolutePath())) {
+            super.setLocation(location);
+            if (!Files.exists(newLoc)) {
+                try {
+                    Files.createDirectories(newLoc);
+                } catch (IOException e) {
+                    log.error("Could not create directory {}", location, e);
+                }
             }
-            catch ( IOException e )
-            {
-                log.error("Could not create directory {}",location, e);
+            FilesystemStorage previous = (FilesystemStorage) getStorage();
+            try {
+                FilesystemStorage fs = new FilesystemStorage(newLoc, 
previous.getFileLockManager());
+                setStorage(fs);
+            } catch (IOException e) {
+                log.error("Could not create new filesystem storage at {}", 
newLoc);
+                try {
+                    Path tmpDir = 
Files.createTempDirectory("tmp-repo-"+getId());
+                    FilesystemStorage fs = new FilesystemStorage(tmpDir, 
previous.getFileLockManager());
+                    setStorage(fs);
+                } catch (IOException ex) {
+                    throw new RuntimeException("Could not setup storage for 
repository "+getId());
+                }
             }
         }
+
     }
 
     @Override
     public RepositoryRequestInfo getRequestInfo() {
         return new MavenRepositoryRequestInfo(this);
     }
+
+    public static MavenManagedRepository newLocalInstance(String id, String 
name, Path basePath) throws IOException {
+        FileLockManager lockManager = new DefaultFileLockManager();
+        FilesystemStorage storage = new 
FilesystemStorage(basePath.resolve(id), lockManager);
+        return new MavenManagedRepository(id, name, storage);
+    }
 }
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
index 1933554..f3380c0 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRemoteRepository.java
@@ -1,5 +1,7 @@
 package org.apache.archiva.repository.maven2;
 
+import org.apache.archiva.common.filelock.DefaultFileLockManager;
+import org.apache.archiva.common.filelock.FileLockManager;
 import org.apache.archiva.repository.AbstractRemoteRepository;
 import org.apache.archiva.repository.ReleaseScheme;
 import org.apache.archiva.repository.RemoteRepository;
@@ -7,12 +9,14 @@ 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.content.FilesystemStorage;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.apache.archiva.repository.features.RepositoryFeature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.IOException;
 import java.nio.file.Path;
 import java.util.Locale;
 
@@ -59,16 +63,16 @@ public class MavenRemoteRepository extends 
AbstractRemoteRepository
         false
     );
 
-    public MavenRemoteRepository( String id, String name, Path basePath )
+    public MavenRemoteRepository(String id, String name, FilesystemStorage 
storage)
     {
-        super( RepositoryType.MAVEN, id, name, basePath );
+        super( RepositoryType.MAVEN, id, name, storage );
         this.indexCreationFeature = new IndexCreationFeature(this, this);
 
     }
 
-    public MavenRemoteRepository( Locale primaryLocale, String id, String 
name, Path basePath )
+    public MavenRemoteRepository( Locale primaryLocale, String id, String 
name, FilesystemStorage storage )
     {
-        super( primaryLocale, RepositoryType.MAVEN, id, name, basePath );
+        super( primaryLocale, RepositoryType.MAVEN, id, name, storage );
         this.indexCreationFeature = new IndexCreationFeature(this, this);
     }
 
@@ -111,4 +115,10 @@ public class MavenRemoteRepository extends 
AbstractRemoteRepository
     public String toString() {
         return super.toString()+", 
remoteIndexFeature="+remoteIndexFeature.toString()+", 
indexCreationFeature="+indexCreationFeature.toString();
     }
+
+    public static MavenRemoteRepository newLocalInstance(String id, String 
name, Path basePath) throws IOException {
+        FileLockManager lockManager = new DefaultFileLockManager();
+        FilesystemStorage storage = new 
FilesystemStorage(basePath.resolve(id), lockManager);
+        return new MavenRemoteRepository(id, name, storage);
+    }
 }
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryGroup.java
 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryGroup.java
index 094d182..56e65a2 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryGroup.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryGroup.java
@@ -19,6 +19,7 @@ package org.apache.archiva.repository.maven2;
  * under the License.
  */
 
+import org.apache.archiva.common.filelock.DefaultFileLockManager;
 import org.apache.archiva.common.filelock.FileLockManager;
 import org.apache.archiva.repository.*;
 import org.apache.archiva.repository.content.FilesystemStorage;
@@ -47,41 +48,32 @@ public class MavenRepositoryGroup extends 
AbstractRepositoryGroup implements Edi
 
     private final Logger log = 
LoggerFactory.getLogger(MavenRepositoryGroup.class);
 
-    private FileLockManager lockManager;
-    private FilesystemStorage fsStorage;
     private IndexCreationFeature indexCreationFeature;
 
 
-    public MavenRepositoryGroup(String id, String name, Path repositoryBase, 
FileLockManager lockManager) {
-        super(RepositoryType.MAVEN, id, name, repositoryBase);
-        this.lockManager = lockManager;
+    public MavenRepositoryGroup(String id, String name, FilesystemStorage 
storage) {
+        super(RepositoryType.MAVEN, id, name, storage);
         init();
     }
 
-    public MavenRepositoryGroup(Locale primaryLocale, String id, String name, 
Path repositoryBase, FileLockManager lockManager) {
-        super(primaryLocale, RepositoryType.MAVEN, id, name, repositoryBase);
-        this.lockManager = lockManager;
+    public MavenRepositoryGroup(Locale primaryLocale, String id, String name, 
FilesystemStorage storage) {
+        super(primaryLocale, RepositoryType.MAVEN, id, name, storage);
         init();
     }
 
     private Path getRepositoryPath() {
-        return getRepositoryBase().resolve(getId());
+        return getStorage().getAsset("").getFilePath();
     }
 
     private void init() {
         setCapabilities(CAPABILITIES);
-        try {
-            Path repoPath = getRepositoryPath();
-            if (!Files.exists(repoPath)) {
-                Files.createDirectories(repoPath);
-            }
-            fsStorage = new FilesystemStorage(getRepositoryPath(), 
lockManager);
-        } catch (IOException e) {
-            log.error("IOException while initializing repository group with 
path {}",getRepositoryBase());
-            throw new RuntimeException("Fatal error while accessing repository 
path "+ getRepositoryBase(), e);
-        }
-        setStorage(fsStorage);
         this.indexCreationFeature = new IndexCreationFeature(this, this);
         addFeature( this.indexCreationFeature );
     }
+
+    public static MavenRepositoryGroup newLocalInstance(String id, String 
name, Path basePath) throws IOException {
+        FileLockManager lockManager = new DefaultFileLockManager();
+        FilesystemStorage storage = new 
FilesystemStorage(basePath.resolve(id), lockManager);
+        return new MavenRepositoryGroup(id, name, storage);
+    }
 }
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
index 211c2e7..ee21a79 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
@@ -23,6 +23,7 @@ import org.apache.archiva.common.filelock.FileLockManager;
 import org.apache.archiva.configuration.*;
 import org.apache.archiva.repository.*;
 import org.apache.archiva.repository.content.FilesystemAsset;
+import org.apache.archiva.repository.content.FilesystemStorage;
 import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
@@ -76,18 +77,51 @@ public class MavenRepositoryProvider implements 
RepositoryProvider {
     }
 
     @Override
-    public EditableManagedRepository createManagedInstance(String id, String 
name) {
-        return new MavenManagedRepository(id, name, 
archivaConfiguration.getRepositoryBaseDir());
+    public MavenManagedRepository createManagedInstance(String id, String 
name) {
+        return createManagedInstance(id, name, 
archivaConfiguration.getRemoteRepositoryBaseDir());
+    }
+
+    public MavenManagedRepository createManagedInstance(String id, String 
name, Path baseDir) {
+        FilesystemStorage storage = null;
+        try {
+            storage = new FilesystemStorage(baseDir.resolve(id), 
fileLockManager);
+        } catch (IOException e) {
+            log.error("Could not initialize fileystem for repository {}", id);
+            throw new RuntimeException(e);
+        }
+        return new MavenManagedRepository(id, name, storage);
     }
 
     @Override
-    public EditableRemoteRepository createRemoteInstance(String id, String 
name) {
-        return new MavenRemoteRepository(id, name, 
archivaConfiguration.getRemoteRepositoryBaseDir());
+    public MavenRemoteRepository createRemoteInstance(String id, String name) {
+        return createRemoteInstance(id, name, 
archivaConfiguration.getRemoteRepositoryBaseDir());
+    }
+
+    public MavenRemoteRepository createRemoteInstance(String id, String name, 
Path baseDir) {
+        FilesystemStorage storage = null;
+        try {
+            storage = new FilesystemStorage(baseDir.resolve(id), 
fileLockManager);
+        } catch (IOException e) {
+            log.error("Could not initialize fileystem for repository {}", id);
+            throw new RuntimeException(e);
+        }
+        return new MavenRemoteRepository(id, name, storage);
     }
 
     @Override
     public EditableRepositoryGroup createRepositoryGroup(String id, String 
name) {
-        return new MavenRepositoryGroup(id, name, 
archivaConfiguration.getRepositoryBaseDir(), fileLockManager);
+        return createRepositoryGroup(id, name, 
archivaConfiguration.getRepositoryBaseDir());
+    }
+
+    public MavenRepositoryGroup createRepositoryGroup(String id, String name, 
Path baseDir) {
+        FilesystemStorage storage = null;
+        try {
+            storage = new FilesystemStorage(baseDir.resolve(id), 
fileLockManager);
+        } catch (IOException e) {
+            log.error("Could not initialize fileystem for repository {}", id);
+            throw new RuntimeException(e);
+        }
+        return new MavenRepositoryGroup(id, name, storage);
     }
 
     private URI getURIFromString(String uriStr) throws RepositoryException {
@@ -121,7 +155,7 @@ public class MavenRepositoryProvider implements 
RepositoryProvider {
 
     @Override
     public ManagedRepository 
createManagedInstance(ManagedRepositoryConfiguration cfg) throws 
RepositoryException {
-        MavenManagedRepository repo = new MavenManagedRepository(cfg.getId(), 
cfg.getName(), archivaConfiguration.getRepositoryBaseDir());
+        MavenManagedRepository repo = createManagedInstance(cfg.getId(), 
cfg.getName(), Paths.get(cfg.getLocation()).getParent());
         updateManagedInstance(repo, cfg);
         return repo;
     }
@@ -181,7 +215,7 @@ public class MavenRepositoryProvider implements 
RepositoryProvider {
 
     @Override
     public RemoteRepository createRemoteInstance(RemoteRepositoryConfiguration 
cfg) throws RepositoryException {
-        MavenRemoteRepository repo = new MavenRemoteRepository(cfg.getId(), 
cfg.getName(), archivaConfiguration.getRemoteRepositoryBaseDir());
+        MavenRemoteRepository repo = createRemoteInstance(cfg.getId(), 
cfg.getName(), archivaConfiguration.getRemoteRepositoryBaseDir());
         updateRemoteInstance(repo, cfg);
         return repo;
     }
@@ -249,8 +283,8 @@ public class MavenRepositoryProvider implements 
RepositoryProvider {
     @Override
     public RepositoryGroup createRepositoryGroup(RepositoryGroupConfiguration 
configuration) throws RepositoryException {
         Path repositoryGroupBase = 
getArchivaConfiguration().getRepositoryGroupBaseDir();
-        MavenRepositoryGroup newGrp = new 
MavenRepositoryGroup(configuration.getId(), configuration.getName(),
-                repositoryGroupBase, fileLockManager);
+        MavenRepositoryGroup newGrp = 
createRepositoryGroup(configuration.getId(), configuration.getName(),
+                repositoryGroupBase);
         updateRepositoryGroupInstance(newGrp, configuration);
         return newGrp;
     }
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java
 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java
index 0c2fdbd..2dce570 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/AbstractRepositoryLayerTestCase.java
@@ -29,6 +29,7 @@ import org.springframework.context.ApplicationContext;
 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.Path;
@@ -49,16 +50,14 @@ public abstract class AbstractRepositoryLayerTestCase
     @Inject
     protected ApplicationContext applicationContext;
 
-    protected MavenManagedRepository createRepository( String id, String name, 
Path location )
-    {
-        MavenManagedRepository repo = new MavenManagedRepository( id, name, 
location.getParent().toAbsolutePath());
+    protected MavenManagedRepository createRepository( String id, String name, 
Path location ) throws IOException {
+        MavenManagedRepository repo = MavenManagedRepository.newLocalInstance( 
id, name, location.getParent().toAbsolutePath());
         repo.setLocation( location.toAbsolutePath().toUri() );
         return repo;
     }
 
-    protected MavenRemoteRepository createRemoteRepository( String id, String 
name, String url ) throws URISyntaxException
-    {
-        MavenRemoteRepository repo = new MavenRemoteRepository(id, name, 
Paths.get("target/remotes"));
+    protected MavenRemoteRepository createRemoteRepository( String id, String 
name, String url ) throws URISyntaxException, IOException {
+        MavenRemoteRepository repo = 
MavenRemoteRepository.newLocalInstance(id, name, Paths.get("target/remotes"));
         repo.setLocation( new URI( url ) );
         return repo;
     }
@@ -67,7 +66,7 @@ public abstract class AbstractRepositoryLayerTestCase
                                                                        String 
layout )
         throws Exception
     {
-        MavenManagedRepository repo = new MavenManagedRepository( id, name, 
location.getParent() );
+        MavenManagedRepository repo = MavenManagedRepository.newLocalInstance( 
id, name, location.getParent() );
         repo.setLocation( location.toAbsolutePath().toUri() );
         repo.setLayout( layout );
 
@@ -81,7 +80,7 @@ public abstract class AbstractRepositoryLayerTestCase
     protected RemoteRepositoryContent createRemoteRepositoryContent( String 
id, String name, String url, String layout )
         throws Exception
     {
-        MavenRemoteRepository repo = new MavenRemoteRepository(id, name, 
Paths.get("target/remotes"));
+        MavenRemoteRepository repo = 
MavenRemoteRepository.newLocalInstance(id, name, Paths.get("target/remotes"));
         repo.setLocation( new URI( url ) );
         repo.setLayout( layout );
 
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/MavenRepositoryRequestInfoTest.java
 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/MavenRepositoryRequestInfoTest.java
index 7839707..85ed97d 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/MavenRepositoryRequestInfoTest.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/content/maven2/MavenRepositoryRequestInfoTest.java
@@ -40,6 +40,7 @@ import org.springframework.test.context.ContextConfiguration;
 
 import javax.inject.Inject;
 import javax.inject.Named;
+import java.io.IOException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
@@ -74,9 +75,8 @@ public class MavenRepositoryRequestInfoTest
     private MavenRepositoryRequestInfo repoRequest;
 
 
-    protected MavenManagedRepository createRepository( String id, String name, 
Path location )
-    {
-        MavenManagedRepository repo = new MavenManagedRepository( id, name, 
location.getParent().toAbsolutePath());
+    protected MavenManagedRepository createRepository( String id, String name, 
Path location ) throws IOException {
+        MavenManagedRepository repo = MavenManagedRepository.newLocalInstance( 
id, name, location.getParent().toAbsolutePath());
         repo.setLocation( location.toAbsolutePath().toUri() );
         return repo;
     }
@@ -549,7 +549,7 @@ public class MavenRepositoryRequestInfoTest
                                                                        String 
layout )
         throws Exception
     {
-        MavenManagedRepository repo = new MavenManagedRepository( id, name, 
archivaConfiguration.getRepositoryBaseDir());
+        MavenManagedRepository repo = MavenManagedRepository.newLocalInstance( 
id, name, archivaConfiguration.getRepositoryBaseDir());
         repo.setLocation( location.toAbsolutePath().toUri() );
         repo.setLayout( layout );
 
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
index 39396d6..3fa8cfa 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
@@ -36,6 +36,7 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.nio.file.Files;
@@ -217,7 +218,7 @@ public class MavenRepositoryProviderTest
 
     @Test
     public void getManagedConfiguration() throws Exception {
-        MavenManagedRepository repo = new MavenManagedRepository( "test01", 
"My Test repo", Paths.get("target/repositories") );
+        MavenManagedRepository repo = MavenManagedRepository.newLocalInstance( 
"test01", "My Test repo", Paths.get("target/repositories") );
 
         repo.setLocation( new URI("file:///this.is/a/test") );
         repo.setScanned( true );
@@ -262,7 +263,7 @@ public class MavenRepositoryProviderTest
 
     @Test
     public void getRemoteConfiguration() throws Exception {
-        MavenRemoteRepository repo = new MavenRemoteRepository( "test01", "My 
Test repo", Paths.get("target/remotes") );
+        MavenRemoteRepository repo = MavenRemoteRepository.newLocalInstance( 
"test01", "My Test repo", Paths.get("target/remotes") );
 
         repo.setLocation( new URI("https://this.is/a/test";) );
         repo.setScanned( true );
@@ -296,12 +297,10 @@ public class MavenRepositoryProviderTest
     }
 
     @Test
-    public void getRepositoryGroupConfiguration() throws RepositoryException, 
URISyntaxException
-    {
-        MavenRepositoryGroup repositoryGroup = new 
MavenRepositoryGroup("group1","group1",Paths.get("target/groups"),
-                new DefaultFileLockManager());
-        MavenManagedRepository repo1 = new MavenManagedRepository( "test01", 
"My Test repo", Paths.get("target/repositories") );
-        MavenManagedRepository repo2 = new MavenManagedRepository( "test02", 
"My Test repo", Paths.get("target/repositories") );
+    public void getRepositoryGroupConfiguration() throws RepositoryException, 
URISyntaxException, IOException {
+        MavenRepositoryGroup repositoryGroup = 
MavenRepositoryGroup.newLocalInstance("group1","group1",Paths.get("target/groups"));
+        MavenManagedRepository repo1 = 
MavenManagedRepository.newLocalInstance( "test01", "My Test repo", 
Paths.get("target/repositories") );
+        MavenManagedRepository repo2 = 
MavenManagedRepository.newLocalInstance( "test02", "My Test repo", 
Paths.get("target/repositories") );
 
 
         repositoryGroup.setDescription(repositoryGroup.getPrimaryLocale(), 
"Repository group");
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java
 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java
index dd4ecd9..2adc0fc 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/repository/metadata/Maven2RepositoryStorageTest.java
@@ -29,6 +29,7 @@ import org.springframework.test.context.ContextConfiguration;
 
 import javax.inject.Inject;
 import javax.inject.Named;
+import java.io.IOException;
 import java.nio.file.Paths;
 
 /**
@@ -43,21 +44,20 @@ public class Maven2RepositoryStorageTest
     RepositoryStorage repositoryStorage;
 
     @Test
-    public void testGetLogicalPath()
-    {
+    public void testGetLogicalPath() throws IOException {
         String href = "/repository/internal/org/apache/maven/someartifact.jar";
         Assert.assertEquals( "/org/apache/maven/someartifact.jar",
-                             repositoryStorage.getFilePath( href, new 
MavenManagedRepository( "repo01", "repo01", Paths.get("target/repositories")) ) 
);
+                             repositoryStorage.getFilePath( href, 
MavenManagedRepository.newLocalInstance( "repo01", "repo01", 
Paths.get("target/repositories")) ) );
 
         href = "repository/internal/org/apache/maven/someartifact.jar";
         Assert.assertEquals( "/org/apache/maven/someartifact.jar",
-                             repositoryStorage.getFilePath( href, new 
MavenManagedRepository( "repo01", "repo01", Paths.get("target/repositories") ) 
) );
+                             repositoryStorage.getFilePath( href, 
MavenManagedRepository.newLocalInstance( "repo01", "repo01", 
Paths.get("target/repositories") ) ) );
 
         href = "repository/internal/org/apache/maven/";
-        Assert.assertEquals( "/org/apache/maven/", 
repositoryStorage.getFilePath( href, new MavenManagedRepository("repo01", 
"repo01", Paths.get("target/repositories")) ) );
+        Assert.assertEquals( "/org/apache/maven/", 
repositoryStorage.getFilePath( href, 
MavenManagedRepository.newLocalInstance("repo01", "repo01", 
Paths.get("target/repositories")) ) );
 
         href = "mypath";
-        Assert.assertEquals( "/", repositoryStorage.getFilePath( href, new 
MavenManagedRepository("repo01", "repo01", Paths.get("target/repositories")) ) 
);
+        Assert.assertEquals( "/", repositoryStorage.getFilePath( href, 
MavenManagedRepository.newLocalInstance("repo01", "repo01", 
Paths.get("target/repositories")) ) );
     }
 
 
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/java/org/apache/archiva/scheduler/indexing/maven/ArchivaIndexingTaskExecutorTest.java
 
b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/java/org/apache/archiva/scheduler/indexing/maven/ArchivaIndexingTaskExecutorTest.java
index a8ace80..80f70ac 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/java/org/apache/archiva/scheduler/indexing/maven/ArchivaIndexingTaskExecutorTest.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-scheduler/src/test/java/org/apache/archiva/scheduler/indexing/maven/ArchivaIndexingTaskExecutorTest.java
@@ -89,7 +89,7 @@ public class ArchivaIndexingTaskExecutorTest
         super.setUp();
 
         Path baseDir = Paths.get(System.getProperty("basedir"), 
"target/test-classes").toAbsolutePath();
-        BasicManagedRepository repositoryConfig = new BasicManagedRepository( 
"test-repo", "Test Repository", baseDir);
+        BasicManagedRepository repositoryConfig = 
BasicManagedRepository.newFilesystemInstance( "test-repo", "Test Repository", 
baseDir);
         Path repoLocation = baseDir.resolve("test-repo" );
         repositoryConfig.setLocation(repoLocation.toUri() );
         repositoryConfig.setLayout( "default" );
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 62fc149..46c920c 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
@@ -574,12 +574,12 @@ public class ArchivaDavResourceFactory
                 path = path.substring( 1 );
             }
             LogicalResource logicalResource = new LogicalResource( path );
-            StorageAsset repoAsset = managedRepositoryContent.getAsset( path );
+            StorageAsset repoAsset = managedRepository.getAsset( path );
             // Path resourceFile = Paths.get( 
managedRepositoryContent.getRepoRoot(), path );
             try
             {
                 resource =
-                    new ArchivaDavResource( repoAsset, path, 
managedRepositoryContent,
+                    new ArchivaDavResource( repoAsset, path, managedRepository,
                                             request.getRemoteAddr(), 
activePrincipal, request.getDavSession(),
                                             archivaLocator, this, mimeTypes, 
auditListeners, scheduler );
             }
@@ -612,10 +612,10 @@ public class ArchivaDavResourceFactory
                             // Perform an adjustment of the resource to the 
managed
                             // repository expected path.
                             // String localResourcePath = 
managedRepository.getRequestInfo().toNativePath( logicalResource.getPath() );
-                            resourceAsset = managedRepositoryContent.getAsset( 
logicalResource.getPath() );
+                            resourceAsset = managedRepository.getAsset( 
logicalResource.getPath() );
                             resource =
                                 new ArchivaDavResource( resourceAsset, 
logicalResource.getPath(),
-                                                        
managedRepositoryContent,
+                                                        managedRepository,
                                                         
request.getRemoteAddr(), activePrincipal,
                                                         
request.getDavSession(), archivaLocator, this, mimeTypes,
                                                         auditListeners, 
scheduler );
@@ -740,11 +740,11 @@ public class ArchivaDavResourceFactory
         {
             logicalResource = logicalResource.substring( 1 );
         }
-        StorageAsset resourceAsset = managedRepositoryContent.getAsset( 
logicalResource );
+        StorageAsset resourceAsset = repo.getAsset( logicalResource );
         try
         {
             resource = new ArchivaDavResource( resourceAsset, logicalResource,
-                                               repo.getContent(), davSession, 
archivaLocator,
+                                               repo, davSession, 
archivaLocator,
                                                this, mimeTypes, 
auditListeners, scheduler);
         }
         catch ( LayoutException e )
@@ -1108,7 +1108,7 @@ public class ArchivaDavResourceFactory
                             "Invalid managed repository <" + repo.getId() + 
">");
                     }
                     // Path resourceFile = Paths.get( 
managedRepository.getRepoRoot(), logicalResource.getPath() );
-                    StorageAsset resourceFile = 
managedRepository.getAsset(logicalResource.getPath());
+                    StorageAsset resourceFile = 
repo.getAsset(logicalResource.getPath());
                     if ( resourceFile.exists() && 
managedRepository.getRepository().supportsFeature( IndexCreationFeature.class ))
                     {
                         // in case of group displaying index directory doesn't 
have sense !!
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 b9d05aa..8e09cd0 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
@@ -184,7 +184,7 @@ public class RepositoryServlet
             fillRepositoryMap();
 
             for (ManagedRepository repo : repositoryMap.values()) {
-                StorageAsset repoDir = repo.getContent().getAsset("");
+                StorageAsset repoDir = repo.getAsset("");
 
                 if (!repoDir.exists()) {
                     try {
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 97fb811..6eb2867 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
@@ -97,7 +97,7 @@ public class DavResourceTest
         baseDir = Paths.get( "target/DavResourceTest" );
         Files.createDirectories( baseDir );
         Files.createDirectories( baseDir.resolve( "conf" ) );
-        repository = new MavenManagedRepository( "repo001", "repo001", 
baseDir);
+        repository = MavenManagedRepository.newLocalInstance( "repo001", 
"repo001", baseDir);
         repositoryRegistry.putRepository( repository );
 
         myResource = baseDir.resolve( "myresource.jar" );
@@ -127,7 +127,7 @@ public class DavResourceTest
 
     private DavResource getDavResource( String logicalPath, Path file ) throws 
LayoutException
     {
-        return new ArchivaDavResource( new FilesystemAsset( logicalPath, 
file.toAbsolutePath()) , logicalPath, repository.getContent(), session, 
resourceLocator,
+        return new ArchivaDavResource( new FilesystemAsset( logicalPath, 
file.toAbsolutePath()) , logicalPath, repository, session, resourceLocator,
                                        resourceFactory, mimeTypes, 
Collections.<AuditListener> emptyList(), null);
     }
 
@@ -349,7 +349,7 @@ public class DavResourceTest
         {
             try
             {
-                return new ArchivaDavResource( new FilesystemAsset( "/" , 
baseDir.toAbsolutePath()), "/", repository.getContent(), session, 
resourceLocator,
+                return new ArchivaDavResource( new FilesystemAsset( "/" , 
baseDir.toAbsolutePath()), "/", repository, session, resourceLocator,
                                                resourceFactory, mimeTypes, 
Collections.<AuditListener> emptyList(),
                                                null );
             }
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 5781dc5..97a2be6 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
@@ -95,7 +95,7 @@ public class DuplicateArtifactsConsumerTest
 
         assertNotNull( consumer );
 
-        config = new BasicManagedRepository(TEST_REPO, TEST_REPO, 
Paths.get("target"));
+        config = BasicManagedRepository.newFilesystemInstance(TEST_REPO, 
TEST_REPO, Paths.get("target"));
         config.setLocation( Paths.get( "target/test-repository" 
).toAbsolutePath().toUri() );
 
         metadataRepository = mock( MetadataRepository.class );

Reply via email to