Author: oching
Date: Fri Nov 20 08:41:50 2009
New Revision: 882448

URL: http://svn.apache.org/viewvc?rev=882448&view=rev
Log:
[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

Modified:
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java?rev=882448&r1=882447&r2=882448&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction.java
 Fri Nov 20 08:41:50 2009
@@ -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 @@
     
     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 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 @@
             }
         }
         
-        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 @@
             triggerAuditEvent( repository.getId(), null, 
AuditEvent.MODIFY_MANAGED_REPO );
             addRepositoryRoles( repository );
             result = saveConfiguration( configuration );
+            resetStatistics( resetStats );
         }
         catch ( IOException e )
         {
@@ -126,6 +144,16 @@
             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 @@
         }
     }
 
+    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 @@
     {
         return action;
     }
+
+    // for testing
+
+    public void setArchivaDAO( ArchivaDAO archivaDao )
+    {
+        this.archivaDAO = archivaDao;
+    }
 }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java?rev=882448&r1=882447&r2=882448&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryActionTest.java
 Fri Nov 20 08:41:50 2009
@@ -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 @@
 
     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 @@
         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 @@
         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 @@
         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;
+    }
 }


Reply via email to