Author: olamy
Date: Sat Feb 15 11:59:04 2014
New Revision: 1568621
URL: http://svn.apache.org/r1568621
Log:
[MRM-1804] IndexOutOfBoundsException when browsing a group with 0 or 1 repo
avoid npe
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/group/DefaultRepositoryGroupAdmin.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/util/IndexWriter.java
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/group/DefaultRepositoryGroupAdmin.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/group/DefaultRepositoryGroupAdmin.java?rev=1568621&r1=1568620&r2=1568621&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/group/DefaultRepositoryGroupAdmin.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/group/DefaultRepositoryGroupAdmin.java
Sat Feb 15 11:59:04 2014
@@ -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 );
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=1568621&r1=1568620&r2=1568621&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
Sat Feb 15 11:59:04 2014
@@ -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 );
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/util/IndexWriter.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/util/IndexWriter.java?rev=1568621&r1=1568620&r2=1568621&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/util/IndexWriter.java
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/util/IndexWriter.java
Sat Feb 15 11:59:04 2014
@@ -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();