]> source.dussan.org Git - archiva.git/commitdiff
[MRM-1804] IndexOutOfBoundsException when browsing a group with 0 or 1 repo
authorOlivier Lamy <olamy@apache.org>
Sat, 15 Feb 2014 11:59:04 +0000 (11:59 +0000)
committerOlivier Lamy <olamy@apache.org>
Sat, 15 Feb 2014 11:59:04 +0000 (11:59 +0000)
avoid npe

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1568621 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/group/DefaultRepositoryGroupAdmin.java
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/util/IndexWriter.java

index f53ae3fe70d6bf141a1fd23ed7bf274b8c235e49..425fd5270686df8acc5075fd560712b014fe4d33 100644 (file)
@@ -81,7 +81,14 @@ public class DefaultRepositoryGroupAdmin
         {
             for ( RepositoryGroup repositoryGroup : getRepositoriesGroups() )
             {
-                mergedRemoteIndexesScheduler.schedule( repositoryGroup, getMergedIndexDirectory( repositoryGroup.getId() ) );
+                mergedRemoteIndexesScheduler.schedule( repositoryGroup,
+                                                       getMergedIndexDirectory( repositoryGroup.getId() ) );
+                // create the directory for each group if not exists
+                File groupPath = new File( groupsDirectory, repositoryGroup.getId() );
+                if ( !groupPath.exists() )
+                {
+                    groupPath.mkdirs();
+                }
             }
         }
         catch ( RepositoryAdminException e )
@@ -244,7 +251,8 @@ public class DefaultRepositoryGroupAdmin
         {
             throw new RepositoryAdminException(
                 "repositoryGroup with id " + repositoryGroupId + " doesn't not contains repository with id"
-                    + repositoryId );
+                    + repositoryId
+            );
         }
 
         repositoryGroup.removeRepository( repositoryId );
index 95c73a163cf16288b1b0ea58ea3fedc4c101f690..260e4e4a32d6afb593339886fbeb0953773fbc9c 100644 (file)
@@ -309,7 +309,8 @@ public class ArchivaDavResourceFactory
             {
                 resource = processRepository( request, archivaLocator, activePrincipal, managedRepositoryContent,
                                               managedRepositoryAdmin.getManagedRepository(
-                                                  archivaLocator.getRepositoryId() ) );
+                                                  archivaLocator.getRepositoryId() )
+                );
 
                 String logicalResource = getLogicalResource( archivaLocator, null, false );
                 resourcesInAbsolutePath.add(
@@ -408,8 +409,8 @@ public class ArchivaDavResourceFactory
                         catch ( DigesterException de )
                         {
                             throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
-                                                    "Error occurred while generating checksum files."
-                                                        + de.getMessage() );
+                                                    "Error occurred while generating checksum files." + de.getMessage()
+                            );
                         }
                     }
                 }
@@ -925,7 +926,8 @@ public class ArchivaDavResourceFactory
             return servletAuth.isAuthenticated( request, result ) && servletAuth.isAuthorized( request, securitySession,
                                                                                                repositoryId,
                                                                                                WebdavMethodUtil.getMethodPermission(
-                                                                                                   request.getMethod() ) );
+                                                                                                   request.getMethod() )
+            );
         }
         catch ( AuthenticationException e )
         {
@@ -972,11 +974,23 @@ public class ArchivaDavResourceFactory
                                               RepositoryGroupConfiguration repositoryGroupConfiguration )
         throws DavException, RepositoryAdminException
     {
+        if ( repositoryGroupConfiguration.getRepositories() == null
+            || repositoryGroupConfiguration.getRepositories().isEmpty() )
+        {
+
+            return new ArchivaVirtualDavResource( new ArrayList<File>(), //
+                                                  new File( System.getProperty( "appserver.base" ) + "/groups/"
+                                                                + repositoryGroupConfiguration.getId() ).getPath(),  //
+                                                  mimeTypes, //
+                                                  locator, //
+                                                  this
+            );
+        }
         List<File> mergedRepositoryContents = new ArrayList<File>();
         // multiple repo types so we guess they are all the same type
         // so use the first one
         // FIXME add a method with group in the repository storage
-        String firstRepoId = repositoryGroupConfiguration.getRepositories().get( 1 );
+        String firstRepoId = repositoryGroupConfiguration.getRepositories().get( 0 );
 
         String path = getLogicalResource( locator, managedRepositoryAdmin.getManagedRepository( firstRepoId ), false );
         if ( path.startsWith( "/" ) )
@@ -1012,7 +1026,8 @@ public class ArchivaDavResourceFactory
                 {
                     File tmpDirectory = new File( SystemUtils.getJavaIoTmpDir(),
                                                   repositoryGroupConfiguration.getId() + "/"
-                                                      + repositoryGroupConfiguration.getMergedIndexPath() );
+                                                      + repositoryGroupConfiguration.getMergedIndexPath()
+                    );
                     if ( !tmpDirectory.exists() )
                     {
                         synchronized ( tmpDirectory.getAbsolutePath() )
@@ -1056,7 +1071,8 @@ public class ArchivaDavResourceFactory
                                 repoIndexDirectory = new File( managedRepository.getRepository().getLocation(),
                                                                StringUtils.isEmpty( repoIndexDirectory )
                                                                    ? ".indexer"
-                                                                   : repoIndexDirectory ).getAbsolutePath();
+                                                                   : repoIndexDirectory
+                                ).getAbsolutePath();
                             }
                         }
                         if ( StringUtils.isEmpty( repoIndexDirectory ) )
@@ -1096,7 +1112,8 @@ public class ArchivaDavResourceFactory
                                 {
                                     if ( servletAuth.isAuthorized( activePrincipal, repository,
                                                                    WebdavMethodUtil.getMethodPermission(
-                                                                       request.getMethod() ) ) )
+                                                                       request.getMethod() )
+                                    ) )
                                     {
                                         mergedRepositoryContents.add( resourceFile );
                                         log.debug( "Repository '{}' accessed by '{}'", repository, activePrincipal );
@@ -1312,13 +1329,14 @@ public class ArchivaDavResourceFactory
             File tempRepoFile = Files.createTempDir();
             tempRepoFile.deleteOnExit();
 
-            IndexMergerRequest indexMergerRequest = new IndexMergerRequest( authzRepos, true, repositoryGroupConfiguration.getId(),
-                                    repositoryGroupConfiguration.getMergedIndexPath(),
-                                    repositoryGroupConfiguration.getMergedIndexTtl() ).mergedIndexDirectory( tempRepoFile )
-                                    .temporary( true );
+            IndexMergerRequest indexMergerRequest =
+                new IndexMergerRequest( authzRepos, true, repositoryGroupConfiguration.getId(),
+                                        repositoryGroupConfiguration.getMergedIndexPath(),
+                                        repositoryGroupConfiguration.getMergedIndexTtl() ).mergedIndexDirectory(
+                    tempRepoFile ).temporary( true );
 
             MergedRemoteIndexesTaskRequest taskRequest =
-                new MergedRemoteIndexesTaskRequest(indexMergerRequest, indexMerger);
+                new MergedRemoteIndexesTaskRequest( indexMergerRequest, indexMerger );
 
             MergedRemoteIndexesTask job = new MergedRemoteIndexesTask( taskRequest );
 
index 8c28a35470f601bbc61fbbb6c1a9a80eeac847a9..d1a995ea66787f087a32e9bee2478c9409e6287c 100644 (file)
@@ -86,7 +86,7 @@ public class IndexWriter
         writer.println( "ul{list-style:none;}" ); 
         
         StringBuilder relative = new StringBuilder("../../");
-        if ( logicalResource.length() > 0 ) 
+        if ( logicalResource != null && logicalResource.length() > 0 )
         {
             String tmpRelative = StringUtils.replace( logicalResource, "\\", "/" );
             for (int i=0;i<tmpRelative.split("/").length;i++) 
@@ -109,7 +109,7 @@ public class IndexWriter
         writer.println( "<h3>Collection: /" + logicalResource + "</h3>" );
 
         //Check if not root
-        if ( logicalResource.length() > 0 )
+        if ( logicalResource != null && logicalResource.length() > 0 )
         {
             File file = new File( logicalResource );
             String parentName = file.getParent() == null ? "/" : file.getParent();