Author: olamy
Date: Mon Oct 15 12:12:43 2012
New Revision: 1398262

URL: http://svn.apache.org/viewvc?rev=1398262&view=rev
Log:
[MRM-1693] exposing index downloaded from remote repositories

Modified:
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/remote/DefaultRemoteRepositoryAdmin.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/remote/DefaultRemoteRepositoryAdmin.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/remote/DefaultRemoteRepositoryAdmin.java?rev=1398262&r1=1398261&r2=1398262&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/remote/DefaultRemoteRepositoryAdmin.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/remote/DefaultRemoteRepositoryAdmin.java
 Mon Oct 15 12:12:43 2012
@@ -52,7 +52,7 @@ import java.util.Map;
  * @author Olivier Lamy
  * @since 1.4-M1
  */
-@Service( "remoteRepositoryAdmin#default" )
+@Service ( "remoteRepositoryAdmin#default" )
 public class DefaultRemoteRepositoryAdmin
     extends AbstractRepositoryAdmin
     implements RemoteRepositoryAdmin
@@ -268,13 +268,34 @@ public class DefaultRemoteRepositoryAdmi
             {
                 return indexingContext;
             }
-            // create path
+            // create remote repository path
             File repoDir = new File( appServerBase, "data/remotes/" + 
remoteRepository.getId() );
             if ( !repoDir.exists() )
             {
                 repoDir.mkdirs();
             }
-            File indexDirectory = new File( repoDir, ".index" );
+
+            File indexDirectory = null;
+
+            // is there configured indexDirectory ?
+            String indexDirectoryPath = remoteRepository.getIndexDirectory();
+
+            if ( StringUtils.isNotBlank( indexDirectoryPath ) )
+            {
+                if ( new File( indexDirectoryPath ).isAbsolute() )
+                {
+                    indexDirectory = new File( indexDirectoryPath );
+                }
+                else
+                {
+                    indexDirectory = new File( repoDir, indexDirectoryPath );
+                }
+            }
+            // if not configured use a default value
+            if ( indexDirectory == null )
+            {
+                indexDirectory = new File( repoDir, ".index" );
+            }
             if ( !indexDirectory.exists() )
             {
                 indexDirectory.mkdirs();

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java?rev=1398262&r1=1398261&r2=1398262&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
 Mon Oct 15 12:12:43 2012
@@ -20,6 +20,8 @@ package org.apache.archiva.webdav;
  */
 
 import org.apache.archiva.admin.model.RepositoryAdminException;
+import org.apache.archiva.admin.model.beans.RemoteRepository;
+import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
 import org.apache.archiva.audit.AuditEvent;
 import org.apache.archiva.audit.AuditListener;
 import org.apache.archiva.audit.Auditable;
@@ -179,6 +181,9 @@ public class ArchivaDavResourceFactory
     private HttpAuthenticator httpAuth;
 
     @Inject
+    private RemoteRepositoryAdmin remoteRepositoryAdmin;
+
+    @Inject
     private IndexMerger indexMerger;
 
     @Inject
@@ -277,6 +282,32 @@ public class ArchivaDavResourceFactory
         }
         else
         {
+
+            try
+            {
+                RemoteRepository remoteRepository =
+                    remoteRepositoryAdmin.getRemoteRepository( 
archivaLocator.getRepositoryId() );
+
+                if ( remoteRepository != null )
+                {
+                    String logicalResource = 
RepositoryPathUtil.getLogicalResource( locator.getResourcePath() );
+                    IndexingContext indexingContext = 
remoteRepositoryAdmin.createIndexContext( remoteRepository );
+                    File resourceFile = StringUtils.equals( logicalResource, 
"/" )
+                        ? new File( 
indexingContext.getIndexDirectoryFile().getParent() )
+                        : new File( 
indexingContext.getIndexDirectoryFile().getParent(), logicalResource );
+                    resource = new ArchivaDavResource( 
resourceFile.getAbsolutePath(), locator.getResourcePath(), null,
+                                                       
request.getRemoteAddr(), activePrincipal,
+                                                       
request.getDavSession(), archivaLocator, this, mimeTypes,
+                                                       auditListeners, 
scheduler );
+                    return resource;
+                }
+            }
+            catch ( RepositoryAdminException e )
+            {
+                log.debug( "RepositoryException remote repository with d'{}' 
not found, msg: {}",
+                           archivaLocator.getRepositoryId(), e.getMessage() );
+            }
+
             ManagedRepositoryContent managedRepository = null;
 
             try
@@ -592,8 +623,8 @@ public class ArchivaDavResourceFactory
                             if ( managedRepository.hasContent( artifact )
                                 && 
managedRepository.getRepository().isBlockRedeployments() )
                             {
-                                log.warn( "Overwriting released artifacts in 
repository '" + managedRepository.getId()
-                                              + "' is not allowed." );
+                                log.warn( "Overwriting released artifacts in 
repository '{}' is not allowed.",
+                                          managedRepository.getId() );
                                 throw new DavException( 
HttpServletResponse.SC_CONFLICT,
                                                         "Overwriting released 
artifacts is not allowed." );
                             }


Reply via email to