mirror of
https://github.com/apache/archiva.git
synced 2025-02-21 17:35:19 +00:00
[MRM-1033] Changing the location of a scanned repository results to the contents of the new location not getting indexed
submitted by Maria Catherine Tan o delete all stats when repository location is changed git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@882448 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
92d9bce38a
commit
607b7fb090
@ -25,12 +25,19 @@
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.maven.archiva.configuration.Configuration;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.database.ArchivaDAO;
|
||||
import org.apache.maven.archiva.database.ArchivaDatabaseException;
|
||||
import org.apache.maven.archiva.database.ObjectNotFoundException;
|
||||
import org.apache.maven.archiva.database.RepositoryContentStatisticsDAO;
|
||||
import org.apache.maven.archiva.database.constraints.RepositoryContentStatisticsByRepositoryConstraint;
|
||||
import org.apache.maven.archiva.model.RepositoryContentStatistics;
|
||||
import org.apache.maven.archiva.repository.audit.AuditEvent;
|
||||
import org.codehaus.plexus.redback.role.RoleManagerException;
|
||||
import org.codehaus.plexus.scheduler.CronExpressionValidator;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* AddManagedRepositoryAction
|
||||
@ -52,6 +59,11 @@ public class EditManagedRepositoryAction
|
||||
|
||||
private final String action = "editRepository";
|
||||
|
||||
/**
|
||||
* @plexus.requirement role-hint="jdo"
|
||||
*/
|
||||
private ArchivaDAO archivaDAO;
|
||||
|
||||
public void prepare()
|
||||
{
|
||||
if ( StringUtils.isNotBlank( repoid ) )
|
||||
@ -78,17 +90,22 @@ public String input()
|
||||
|
||||
public String confirmUpdate()
|
||||
{
|
||||
return save();
|
||||
// location was changed
|
||||
return save( true );
|
||||
}
|
||||
|
||||
public String commit()
|
||||
{
|
||||
{
|
||||
ManagedRepositoryConfiguration existingConfig =
|
||||
archivaConfiguration.getConfiguration().findManagedRepositoryById( repository.getId() );
|
||||
|
||||
|
||||
boolean resetStats = false;
|
||||
|
||||
// check if the location was changed
|
||||
if( !StringUtils.equalsIgnoreCase( existingConfig.getLocation().trim(), repository.getLocation().trim() ) )
|
||||
{
|
||||
resetStats = true;
|
||||
|
||||
File dir = new File( repository.getLocation() );
|
||||
if( dir.exists() )
|
||||
{
|
||||
@ -96,10 +113,10 @@ public String commit()
|
||||
}
|
||||
}
|
||||
|
||||
return save();
|
||||
return save( resetStats );
|
||||
}
|
||||
|
||||
private String save()
|
||||
|
||||
private String save( boolean resetStats )
|
||||
{
|
||||
// Ensure that the fields are valid.
|
||||
Configuration configuration = archivaConfiguration.getConfiguration();
|
||||
@ -115,6 +132,7 @@ private String save()
|
||||
triggerAuditEvent( repository.getId(), null, AuditEvent.MODIFY_MANAGED_REPO );
|
||||
addRepositoryRoles( repository );
|
||||
result = saveConfiguration( configuration );
|
||||
resetStatistics( resetStats );
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
@ -126,6 +144,16 @@ private String save()
|
||||
addActionError( "Role Manager Exception: " + e.getMessage() );
|
||||
result = ERROR;
|
||||
}
|
||||
catch ( ObjectNotFoundException e )
|
||||
{
|
||||
addActionError( e.getMessage() );
|
||||
result = ERROR;
|
||||
}
|
||||
catch ( ArchivaDatabaseException e )
|
||||
{
|
||||
addActionError( e.getMessage() );
|
||||
result = ERROR;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -141,6 +169,28 @@ public void validate()
|
||||
}
|
||||
}
|
||||
|
||||
private void resetStatistics( boolean reset )
|
||||
throws ObjectNotFoundException, ArchivaDatabaseException
|
||||
{
|
||||
if ( !reset )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RepositoryContentStatisticsDAO repoContentStatsDao = archivaDAO.getRepositoryContentStatisticsDAO();
|
||||
|
||||
List<RepositoryContentStatistics> contentStats = repoContentStatsDao.queryRepositoryContentStatistics(
|
||||
new RepositoryContentStatisticsByRepositoryConstraint( repository.getId() ) );
|
||||
|
||||
if ( contentStats != null )
|
||||
{
|
||||
for ( RepositoryContentStatistics stats : contentStats )
|
||||
{
|
||||
repoContentStatsDao.deleteRepositoryContentStatistics( stats );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String getRepoid()
|
||||
{
|
||||
return repoid;
|
||||
@ -165,4 +215,11 @@ public String getAction()
|
||||
{
|
||||
return action;
|
||||
}
|
||||
|
||||
// for testing
|
||||
|
||||
public void setArchivaDAO( ArchivaDAO archivaDao )
|
||||
{
|
||||
this.archivaDAO = archivaDao;
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,10 @@
|
||||
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||
import org.apache.maven.archiva.configuration.Configuration;
|
||||
import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.maven.archiva.database.ArchivaDAO;
|
||||
import org.apache.maven.archiva.database.RepositoryContentStatisticsDAO;
|
||||
import org.apache.maven.archiva.database.constraints.RepositoryContentStatisticsByRepositoryConstraint;
|
||||
import org.apache.maven.archiva.model.RepositoryContentStatistics;
|
||||
import org.apache.maven.archiva.security.ArchivaRoleConstants;
|
||||
import org.codehaus.plexus.redback.role.RoleManager;
|
||||
import org.codehaus.redback.integration.interceptor.SecureActionBundle;
|
||||
@ -32,7 +36,10 @@
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* EditManagedRepositoryActionTest
|
||||
@ -52,6 +59,14 @@ public class EditManagedRepositoryActionTest
|
||||
|
||||
private ArchivaConfiguration archivaConfiguration;
|
||||
|
||||
private MockControl archivaDaoControl;
|
||||
|
||||
private ArchivaDAO archivaDao;
|
||||
|
||||
private MockControl repoContentStatsDaoControl;
|
||||
|
||||
private RepositoryContentStatisticsDAO repoContentStatsDao;
|
||||
|
||||
private static final String REPO_ID = "repo-ident";
|
||||
|
||||
private File location;
|
||||
@ -77,6 +92,13 @@ protected void setUp()
|
||||
roleManager = (RoleManager) roleManagerControl.getMock();
|
||||
action.setRoleManager( roleManager );
|
||||
location = getTestFile( "target/test/location" );
|
||||
|
||||
archivaDaoControl = MockControl.createControl( ArchivaDAO.class );
|
||||
archivaDao = (ArchivaDAO) archivaDaoControl.getMock();
|
||||
action.setArchivaDAO( archivaDao );
|
||||
|
||||
repoContentStatsDaoControl = MockControl.createControl( RepositoryContentStatisticsDAO.class );
|
||||
repoContentStatsDao = (RepositoryContentStatisticsDAO) repoContentStatsDaoControl.getMock();
|
||||
}
|
||||
|
||||
public void testSecureActionBundle()
|
||||
@ -157,6 +179,66 @@ public void testEditRepository()
|
||||
roleManagerControl.verify();
|
||||
archivaConfigurationControl.verify();
|
||||
}
|
||||
|
||||
public void testEditRepositoryLocationChanged()
|
||||
throws Exception
|
||||
{
|
||||
roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, REPO_ID );
|
||||
roleManagerControl.setReturnValue( false );
|
||||
roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, REPO_ID );
|
||||
roleManagerControl.setVoidCallable();
|
||||
roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, REPO_ID );
|
||||
roleManagerControl.setReturnValue( false );
|
||||
roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, REPO_ID );
|
||||
roleManagerControl.setVoidCallable();
|
||||
|
||||
roleManagerControl.replay();
|
||||
|
||||
Configuration configuration = createConfigurationForEditing( createRepository() );
|
||||
archivaConfiguration.getConfiguration();
|
||||
archivaConfigurationControl.setReturnValue( configuration );
|
||||
archivaConfigurationControl.setReturnValue( configuration );
|
||||
archivaConfigurationControl.setReturnValue( configuration );
|
||||
|
||||
archivaConfiguration.save( configuration );
|
||||
|
||||
archivaConfigurationControl.replay();
|
||||
|
||||
archivaDaoControl.expectAndReturn( archivaDao.getRepositoryContentStatisticsDAO(), repoContentStatsDao );
|
||||
|
||||
archivaDaoControl.replay();
|
||||
|
||||
repoContentStatsDao.queryRepositoryContentStatistics(
|
||||
new RepositoryContentStatisticsByRepositoryConstraint( REPO_ID ) );
|
||||
repoContentStatsDaoControl.setMatcher( MockControl.ALWAYS_MATCHER );
|
||||
|
||||
List<RepositoryContentStatistics> repoStats = createRepositoryContentStatisticsList();
|
||||
repoContentStatsDaoControl.setReturnValue( repoStats );
|
||||
|
||||
repoContentStatsDao.deleteRepositoryContentStatistics( repoStats.get( 0 ) );
|
||||
repoContentStatsDaoControl.setVoidCallable();
|
||||
repoContentStatsDao.deleteRepositoryContentStatistics( repoStats.get( 1 ) );
|
||||
repoContentStatsDaoControl.setVoidCallable();
|
||||
|
||||
repoContentStatsDaoControl.replay();
|
||||
|
||||
action.setRepoid( REPO_ID );
|
||||
action.prepare();
|
||||
assertEquals( REPO_ID, action.getRepoid() );
|
||||
|
||||
ManagedRepositoryConfiguration repository = new ManagedRepositoryConfiguration();
|
||||
populateRepository( repository );
|
||||
repository.setLocation( new File( "target/test/location/new" ).getCanonicalPath() );
|
||||
action.setRepository( repository );
|
||||
String status = action.commit();
|
||||
assertEquals( Action.SUCCESS, status );
|
||||
assertEquals( Collections.singletonList( repository ), configuration.getManagedRepositories() );
|
||||
|
||||
roleManagerControl.verify();
|
||||
archivaConfigurationControl.verify();
|
||||
archivaDaoControl.verify();
|
||||
repoContentStatsDaoControl.verify();
|
||||
}
|
||||
|
||||
private void assertRepositoryEquals( ManagedRepositoryConfiguration expectedRepository,
|
||||
ManagedRepositoryConfiguration actualRepository )
|
||||
@ -207,4 +289,29 @@ private void populateRepository( ManagedRepositoryConfiguration repository )
|
||||
repository.setDeleteReleasedSnapshots( true );
|
||||
}
|
||||
|
||||
private List<RepositoryContentStatistics> createRepositoryContentStatisticsList()
|
||||
{
|
||||
List<RepositoryContentStatistics> repoStatsList = new ArrayList<RepositoryContentStatistics>();
|
||||
|
||||
repoStatsList.add( createRepositoryContentStatistics() );
|
||||
repoStatsList.add( createRepositoryContentStatistics() );
|
||||
|
||||
return repoStatsList;
|
||||
}
|
||||
|
||||
private RepositoryContentStatistics createRepositoryContentStatistics()
|
||||
{
|
||||
RepositoryContentStatistics repoStats = new RepositoryContentStatistics();
|
||||
repoStats.setRepositoryId( REPO_ID );
|
||||
repoStats.setDuration( 1000 );
|
||||
repoStats.setTotalArtifactCount( 100 );
|
||||
repoStats.setTotalSize( 10 );
|
||||
repoStats.setTotalFileCount( 10 );
|
||||
repoStats.setTotalProjectCount( 2 );
|
||||
repoStats.setTotalGroupCount( 1 );
|
||||
repoStats.setNewFileCount( 3 );
|
||||
repoStats.setWhenGathered( new Date( System.currentTimeMillis() ) );
|
||||
|
||||
return repoStats;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user