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

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

commit 17c3bb60da9fa76d69f53fc6c42e9b49c959e644
Author: Martin Stockhammer <[email protected]>
AuthorDate: Sun May 19 17:34:57 2019 +0200

    Switching to repository storage API
---
 .../archiva/repository/ManagedRepository.java      |  2 +
 .../repository/ManagedRepositoryContent.java       | 54 +-------------
 .../archiva/repository/AbstractRepository.java     |  4 +
 .../mock/ManagedRepositoryContentMock.java         | 34 +++++++++
 .../maven2/ManagedDefaultRepositoryContent.java    | 86 +++-------------------
 5 files changed, 52 insertions(+), 128 deletions(-)

diff --git 
a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepository.java
 
b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepository.java
index 3acd161..2c77cad 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepository.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepository.java
@@ -20,6 +20,8 @@ package org.apache.archiva.repository;
  */
 
 
+import org.apache.archiva.repository.content.RepositoryStorage;
+
 import java.util.Set;
 
 /**
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 37ba9cf..a496f83 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
@@ -23,6 +23,7 @@ import org.apache.archiva.model.ArchivaArtifact;
 import org.apache.archiva.model.ArtifactReference;
 import org.apache.archiva.model.ProjectReference;
 import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.repository.content.RepositoryStorage;
 import org.apache.archiva.repository.content.StorageAsset;
 
 import java.io.IOException;
@@ -41,7 +42,7 @@ import java.util.function.Function;
  *
  * This interface
  */
-public interface ManagedRepositoryContent extends RepositoryContent
+public interface ManagedRepositoryContent extends RepositoryContent, 
RepositoryStorage
 {
 
 
@@ -233,56 +234,5 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      */
     String toPath( ArchivaArtifact reference );
 
-    /**
-     * Returns information about a specific storage asset.
-     * @param path
-     * @return
-     */
-    StorageAsset getAsset(String path);
-
-    /**
-     * Consumes the data and sets a lock for the file during the operation.
-     *
-     * @param asset
-     * @param consumerFunction
-     * @param readLock
-     * @throws IOException
-     */
-    void consumeData( StorageAsset asset, Consumer<InputStream> 
consumerFunction, boolean readLock ) throws IOException;
 
-    /**
-     * Adds a new asset to the underlying storage.
-     * @param path The path to the asset.
-     * @param container True, if the asset should be a container, false, if it 
is a file.
-     * @return
-     */
-    StorageAsset addAsset(String path, boolean container);
-
-    /**
-     * Removes the given asset from the storage.
-     *
-     * @param asset
-     * @throws IOException
-     */
-    void removeAsset(StorageAsset asset) throws IOException;
-
-    /**
-     * Moves the asset to the given location and returns the asset object for 
the destination.
-     *
-     * @param origin
-     * @param destination
-     * @return
-     */
-    StorageAsset moveAsset(StorageAsset origin, String destination) throws 
IOException;
-
-
-    /**
-     * Copies the given asset to the new destination.
-     *
-     * @param origin
-     * @param destination
-     * @return
-     * @throws IOException
-     */
-    StorageAsset copyAsset(StorageAsset origin, String destination) throws 
IOException;
 }
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 62d8168..5272708 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
@@ -321,4 +321,8 @@ public abstract class AbstractRepository implements 
EditableRepository, Reposito
         this.listeners.clear();
     }
 
+    protected Path getRepositoryBase() {
+        return repositoryBase;
+    }
+
 }
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 efcdfed..91d584b 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
@@ -28,10 +28,14 @@ import org.apache.archiva.repository.LayoutException;
 import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.content.StorageAsset;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.nio.file.Path;
 import java.util.Set;
+import java.util.function.Consumer;
 
 /**
  * @author Martin Stockhammer <[email protected]>
@@ -166,4 +170,34 @@ 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-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 e6da2c1..92c9b60 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
@@ -38,6 +38,7 @@ import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.RepositoryException;
 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.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
@@ -66,7 +67,7 @@ public class ManagedDefaultRepositoryContent
     implements ManagedRepositoryContent
 {
 
-    private final FileLockManager fileLockManager;
+    private final FilesystemStorage storage;
 
     private FileTypes filetypes;
 
@@ -81,16 +82,16 @@ public class ManagedDefaultRepositoryContent
     public ManagedDefaultRepositoryContent(ManagedRepository repository, 
FileTypes fileTypes, FileLockManager lockManager) {
         super(Collections.singletonList( new DefaultArtifactMappingProvider() 
));
         setFileTypes( fileTypes );
-        this.fileLockManager = lockManager;
         setRepository( repository );
+        storage = new FilesystemStorage(getRepoDir(), lockManager);
     }
 
     public ManagedDefaultRepositoryContent( ManagedRepository repository, 
List<? extends ArtifactMappingProvider> artifactMappingProviders, FileTypes 
fileTypes, FileLockManager lockManager )
     {
         super(artifactMappingProviders==null ? Collections.singletonList( new 
DefaultArtifactMappingProvider() ) : artifactMappingProviders);
         setFileTypes( fileTypes );
-        this.fileLockManager = lockManager;
         setRepository( repository );
+        storage = new FilesystemStorage(getRepoDir(), lockManager);
     }
 
     private Path getRepoDir() {
@@ -535,105 +536,38 @@ public class ManagedDefaultRepositoryContent
     @Override
     public void consumeData( StorageAsset asset, Consumer<InputStream> 
consumerFunction, boolean readLock ) throws IOException
     {
-        final Path path = asset.getFilePath();
-        try {
-        if (readLock) {
-            consumeDataLocked( path, consumerFunction );
-        } else
-        {
-            try ( InputStream is = Files.newInputStream( path ) )
-            {
-                consumerFunction.accept( is );
-            }
-            catch ( IOException e )
-            {
-                log.error("Could not read the input stream from file {}", 
path);
-                throw e;
-            }
-        }
-        } catch (RuntimeException e)
-        {
-            log.error( "Runtime exception during data consume from artifact 
{}. Error: {}", path, e.getMessage() );
-            throw new IOException( e );
-        }
-
-    }
-
-    public void consumeDataLocked( Path file, Consumer<InputStream> 
consumerFunction) throws IOException
-    {
-
-        final Lock lock;
-        try
-        {
-            lock = fileLockManager.readFileLock( file );
-            try ( InputStream is = Files.newInputStream( lock.getFile()))
-            {
-                consumerFunction.accept( is );
-            }
-            catch ( IOException e )
-            {
-                log.error("Could not read the input stream from file {}", 
file);
-                throw e;
-            } finally
-            {
-                fileLockManager.release( lock );
-            }
-        }
-        catch ( FileLockException | FileNotFoundException | 
FileLockTimeoutException e)
-        {
-            log.error("Locking error on file {}", file);
-            throw new IOException(e);
-        }
+        storage.consumeData(asset, consumerFunction, readLock);
     }
 
 
     @Override
     public StorageAsset getAsset( String path )
     {
-        final Path repoPath = getRepoDir();
-        return new FilesystemAsset( repoPath, path);
+        return storage.getAsset(path);
     }
 
     @Override
     public StorageAsset addAsset( String path, boolean container )
     {
-        final Path repoPath = getRepoDir();
-        FilesystemAsset asset = new FilesystemAsset( repoPath, path , 
container);
-        return asset;
+        return storage.addAsset(path, container);
     }
 
     @Override
     public void removeAsset( StorageAsset asset ) throws IOException
     {
-        Files.delete(asset.getFilePath());
+        storage.removeAsset(asset);
     }
 
     @Override
     public StorageAsset moveAsset( StorageAsset origin, String destination ) 
throws IOException
     {
-        final Path repoPath = getRepoDir();
-        boolean container = origin.isContainer();
-        FilesystemAsset newAsset = new FilesystemAsset( repoPath, destination, 
container );
-        Files.move(origin.getFilePath(), newAsset.getFilePath());
-        return newAsset;
+        return storage.moveAsset(origin, destination);
     }
 
     @Override
     public StorageAsset copyAsset( StorageAsset origin, String destination ) 
throws IOException
     {
-        final Path repoPath = getRepoDir();
-        boolean container = origin.isContainer();
-        FilesystemAsset newAsset = new FilesystemAsset( repoPath, destination, 
container );
-        if (Files.exists(newAsset.getFilePath())) {
-            throw new IOException("Destination file exists already "+ 
newAsset.getFilePath());
-        }
-        if (Files.isDirectory( origin.getFilePath() ))
-        {
-            FileUtils.copyDirectory(origin.getFilePath( ).toFile(), 
newAsset.getFilePath( ).toFile() );
-        } else if (Files.isRegularFile( origin.getFilePath() )) {
-            FileUtils.copyFile(origin.getFilePath( ).toFile(), 
newAsset.getFilePath( ).toFile() );
-        }
-        return newAsset;
+        return storage.copyAsset(origin, destination);
     }
 
 

Reply via email to