]> source.dussan.org Git - archiva.git/commitdiff
Switching to asset API
authorMartin Stockhammer <martin_s@apache.org>
Thu, 20 Jun 2019 17:25:28 +0000 (19:25 +0200)
committerMartin Stockhammer <martin_s@apache.org>
Thu, 20 Jun 2019 17:25:28 +0000 (19:25 +0200)
archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaVirtualDavResource.java
archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/util/IndexWriter.java

index d51b47f6172bf6a20e2c8eea0e399fe4ab7af8f9..238cedb84632afaa29867dfc5b11f4422d3543a2 100644 (file)
@@ -1022,7 +1022,7 @@ public class ArchivaDavResourceFactory
                 throw new DavException(500, e);
             }
         }
-        List<Path> mergedRepositoryContents = new ArrayList<>();
+        List<StorageAsset> mergedRepositoryContents = new ArrayList<>();
 
         ManagedRepository firstRepo = repositories.get( 0 );
 
@@ -1050,8 +1050,9 @@ public class ArchivaDavResourceFactory
 
             if ( StringUtils.endsWith( pathInfo, repositoryGroup.getMergedIndexPath().getPath() ) )
             {
-                Path mergedRepoDir =
+                Path mergedRepoDirPath =
                     buildMergedIndexDirectory( activePrincipal, request, repositoryGroup );
+                FilesystemAsset mergedRepoDir = new FilesystemAsset(pathInfo, mergedRepoDirPath);
                 mergedRepositoryContents.add( mergedRepoDir );
             }
             else
@@ -1078,7 +1079,8 @@ public class ArchivaDavResourceFactory
                             }
                         }
                     }
-                    mergedRepositoryContents.add( tmpDirectory.getParent() );
+                    FilesystemAsset parentDir = new FilesystemAsset(pathInfo, tmpDirectory.getParent());
+                    mergedRepositoryContents.add( parentDir );
                 }
                 for ( ManagedRepository repo : repositories )
                 {
@@ -1093,8 +1095,9 @@ public class ArchivaDavResourceFactory
                         throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                             "Invalid managed repository <" + repo.getId() + ">");
                     }
-                    Path resourceFile = Paths.get( managedRepository.getRepoRoot(), logicalResource.getPath() );
-                    if ( Files.exists(resourceFile) )
+                    // Path resourceFile = Paths.get( managedRepository.getRepoRoot(), logicalResource.getPath() );
+                    StorageAsset resourceFile = managedRepository.getAsset(logicalResource.getPath());
+                    if ( resourceFile.exists() )
                     {
                         // in case of group displaying index directory doesn't have sense !!
                         IndexCreationFeature idf = managedRepository.getRepository().getFeature(IndexCreationFeature.class).get();
index a74e80d4d64ac976f33f35f9dee3de9696e12cf0..586eebc88565cb7df4faefc689ca453e9f0c777a 100644 (file)
@@ -19,6 +19,8 @@ package org.apache.archiva.webdav;
  * under the License.
  */
 
+import org.apache.archiva.repository.ManagedRepositoryContent;
+import org.apache.archiva.repository.content.StorageAsset;
 import org.apache.archiva.webdav.util.IndexWriter;
 import org.apache.archiva.webdav.util.MimeTypes;
 import org.apache.jackrabbit.util.Text;
@@ -49,9 +51,8 @@ import org.joda.time.format.ISODateTimeFormat;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * DavResource for virtual repositories
@@ -73,10 +74,10 @@ public class ArchivaVirtualDavResource
 
     private static final String METHODS = "OPTIONS, GET, HEAD, POST, TRACE, PROPFIND, PROPPATCH, MKCOL";
 
-    private final List<Path> localResources;
+    private final List<StorageAsset> localResources;
 
-    public ArchivaVirtualDavResource( List<Path> localResources, String logicalResource, MimeTypes mimeTypes,
-                                      ArchivaDavResourceLocator locator, DavResourceFactory factory )
+    public ArchivaVirtualDavResource(List<StorageAsset> localResources, String logicalResource, MimeTypes mimeTypes,
+                                     ArchivaDavResourceLocator locator, DavResourceFactory factory )
     {
         this.localResources = localResources;
         this.logicalResource = logicalResource;
@@ -86,23 +87,14 @@ public class ArchivaVirtualDavResource
     }
 
     @Override
-    public void spool( OutputContext outputContext )
-        throws IOException
-    {
+    public void spool( OutputContext outputContext ) {
         if ( outputContext.hasStream() )
         {
-            Collections.sort( localResources );
-            List<Path> localResourceFiles = new ArrayList<>();
-
-            for ( Path resourceFile : localResources )
-            {
-                if ( Files.exists(resourceFile) )
-                {
-                    localResourceFiles.add( resourceFile );
-                }
-            }
+            List<StorageAsset> localResourceFiles = localResources.stream().filter(Objects::nonNull)
+                    .filter(repoAsset -> repoAsset.exists())
+                    .sorted(Comparator.comparing(o -> o.getName())).collect(Collectors.toList());
 
-            IndexWriter writer = new IndexWriter( this, localResourceFiles, logicalResource );
+            IndexWriter writer = new IndexWriter(localResourceFiles, logicalResource );
             writer.write( outputContext );
         }
     }
index 284633156dcff1b966f61626f97798929c270689..3aa9b387b40916eb869b1ad12fb1536a9aef358d 100644 (file)
@@ -50,42 +50,20 @@ public class IndexWriter
 
     private final String logicalResource;
 
-    private final List<RepoAsset> repositoryAssets;
+    private final List<StorageAsset> repositoryAssets;
 
 
     private final boolean isVirtual;
 
-    public class RepoAsset
-    {
-        private ManagedRepositoryContent repo;
-        private StorageAsset asset;
-
-        public RepoAsset( ManagedRepositoryContent repo, StorageAsset asset) {
-            this.repo = repo;
-            this.asset = asset;
-        }
-
-        public ManagedRepositoryContent getRepo( )
-        {
-            return repo;
-        }
-
-        public StorageAsset getAsset( )
-        {
-            return asset;
-        }
-
-    }
-
-    public IndexWriter( ManagedRepositoryContent repo, StorageAsset reference, String logicalResource )
+    public IndexWriter( StorageAsset reference, String logicalResource )
     {
         this.repositoryAssets = new ArrayList<>(  );
-        this.repositoryAssets.add(new RepoAsset( repo, reference));
+        this.repositoryAssets.add(reference);
         this.logicalResource = logicalResource;
         this.isVirtual = false;
     }
 
-    public IndexWriter( List<RepoAsset> localResources, String logicalResource )
+    public IndexWriter( List<StorageAsset> localResources, String logicalResource )
     {
         this.logicalResource = logicalResource;
         this.repositoryAssets = localResources;
@@ -176,9 +154,9 @@ public class IndexWriter
     {
         if ( !isVirtual )
         {
-            for ( RepoAsset localResource : repositoryAssets )
+            for ( StorageAsset localResource : repositoryAssets )
             {
-                localResource.getAsset().list().stream().sorted(
+                localResource.list().stream().sorted(
                     Comparator.comparing( StorageAsset::getName )
                 ).forEach( asset -> {
                     writeHyperlink( writer, asset.getName(), asset.getModificationTime().toEpochMilli(), asset.getSize(),
@@ -190,9 +168,9 @@ public class IndexWriter
         {
             // virtual repository - filter unique directories
             SortedMap<String, StorageAsset> uniqueChildFiles = new TreeMap<>();
-            for ( RepoAsset resource : repositoryAssets )
+            for ( StorageAsset resource : repositoryAssets )
             {
-                List<StorageAsset> files = resource.getAsset().list();
+                List<StorageAsset> files = resource.list();
                 for ( StorageAsset file : files )
                 {
                     // the first entry wins