Author: olamy
Date: Mon Aug 29 21:43:57 2011
New Revision: 1163031

URL: http://svn.apache.org/viewvc?rev=1163031&view=rev
Log:
rest services use new repo admin module for managed repos

Modified:
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultPingService.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java?rev=1163031&r1=1163030&r2=1163031&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/RepositoriesService.java
 Mon Aug 29 21:43:57 2011
@@ -19,6 +19,7 @@ package org.apache.archiva.rest.api.serv
  * under the License.
  */
 
+import org.apache.archiva.admin.repository.RepositoryAdminException;
 import org.apache.archiva.rest.api.model.ManagedRepository;
 import org.apache.archiva.rest.api.model.RemoteRepository;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
@@ -45,13 +46,15 @@ public interface RepositoriesService
     @GET
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, 
MediaType.TEXT_PLAIN } )
     @RedbackAuthorization( permission = 
ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
-    List<ManagedRepository> getManagedRepositories();
+    List<ManagedRepository> getManagedRepositories()
+        throws RepositoryAdminException;
 
     @Path( "getManagedRepository/{repositoryId}" )
     @GET
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, 
MediaType.TEXT_PLAIN } )
     @RedbackAuthorization( permission = 
ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
-    ManagedRepository getManagedRepository( @PathParam( "repositoryId" ) 
String repositoryId );
+    ManagedRepository getManagedRepository( @PathParam( "repositoryId" ) 
String repositoryId )
+        throws RepositoryAdminException;
 
     @Path( "deleteManagedRepository/{repositoryId}" )
     @GET
@@ -66,7 +69,7 @@ public interface RepositoriesService
     @Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
     @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, 
MediaType.TEXT_PLAIN } )
     @RedbackAuthorization( permission = 
ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
-    Boolean addManagedRepository( ManagedRepository managedRepository )
+    Boolean addManagedRepository( ManagedRepository managedRepository)
         throws Exception;
 
 

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultPingService.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultPingService.java?rev=1163031&r1=1163030&r2=1163031&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultPingService.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultPingService.java
 Mon Aug 29 21:43:57 2011
@@ -20,8 +20,6 @@ package org.apache.archiva.rest.services
  */
 
 import org.apache.archiva.rest.api.services.PingService;
-import org.codehaus.plexus.redback.users.User;
-import org.codehaus.redback.rest.services.RedbackAuthenticationThreadLocal;
 import org.springframework.stereotype.Service;
 
 /**
@@ -39,7 +37,6 @@ public class DefaultPingService
 
     public String pingWithAuthz()
     {
-        User user = RedbackAuthenticationThreadLocal.get();
         return ping();
     }
 }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java?rev=1163031&r1=1163030&r2=1163031&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
 Mon Aug 29 21:43:57 2011
@@ -19,11 +19,11 @@ package org.apache.archiva.rest.services
  * under the License.
  */
 
+import org.apache.archiva.admin.AuditInformation;
+import org.apache.archiva.admin.repository.RepositoryAdminException;
+import org.apache.archiva.admin.repository.managed.ManagedRepositoryAdmin;
 import org.apache.archiva.audit.AuditEvent;
 import org.apache.archiva.audit.AuditListener;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.MetadataRepositoryException;
-import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import 
org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
 import org.apache.archiva.rest.api.model.ManagedRepository;
@@ -31,14 +31,11 @@ import org.apache.archiva.rest.api.model
 import org.apache.archiva.rest.api.services.RepositoriesService;
 import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler;
 import org.apache.archiva.scheduler.repository.RepositoryTask;
-import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
-import org.apache.commons.validator.GenericValidator;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import 
org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
 import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
 import org.codehaus.plexus.redback.role.RoleManager;
@@ -47,8 +44,8 @@ import org.codehaus.plexus.redback.users
 import org.codehaus.plexus.registry.Registry;
 import org.codehaus.plexus.registry.RegistryException;
 import org.codehaus.plexus.taskqueue.TaskQueueException;
-import org.codehaus.redback.components.scheduler.CronExpressionValidator;
 import org.codehaus.redback.rest.services.RedbackAuthenticationThreadLocal;
+import org.codehaus.redback.rest.services.RedbackRequestInformation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -60,7 +57,6 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author Olivier Lamy
@@ -104,21 +100,24 @@ public class DefaultRepositoriesService
     @Inject
     private RepositorySessionFactory repositorySessionFactory;
 
+    @Inject
+    private ManagedRepositoryAdmin managedRepositoryAdmin;
+
     public List<ManagedRepository> getManagedRepositories()
+        throws RepositoryAdminException
     {
-        List<ManagedRepositoryConfiguration> managedRepoConfigs =
-            archivaConfiguration.getConfiguration().getManagedRepositories();
+        List<org.apache.archiva.admin.repository.managed.ManagedRepository> 
repos =
+            managedRepositoryAdmin.getManagedRepositories();
 
-        List<ManagedRepository> managedRepos = new 
ArrayList<ManagedRepository>( managedRepoConfigs.size() );
+        List<ManagedRepository> managedRepos = new 
ArrayList<ManagedRepository>( repos.size() );
 
-        for ( ManagedRepositoryConfiguration repoConfig : managedRepoConfigs )
+        for ( org.apache.archiva.admin.repository.managed.ManagedRepository 
repoConfig : repos )
         {
             // TODO staging repo too
             ManagedRepository repo =
                 new ManagedRepository( repoConfig.getId(), 
repoConfig.getName(), repoConfig.getLocation(),
                                        repoConfig.getLayout(), 
repoConfig.isSnapshots(), repoConfig.isReleases(),
-                                       repoConfig.isBlockRedeployments(), 
false,
-                                       repoConfig.getRefreshCronExpression() );
+                                       repoConfig.isBlockRedeployments(), 
false, repoConfig.getCronExpression() );
             managedRepos.add( repo );
         }
 
@@ -126,6 +125,7 @@ public class DefaultRepositoriesService
     }
 
     public ManagedRepository getManagedRepository( String repositoryId )
+        throws RepositoryAdminException
     {
         List<ManagedRepository> repos = getManagedRepositories();
         for ( ManagedRepository repo : repos )
@@ -138,74 +138,11 @@ public class DefaultRepositoriesService
         return null;
     }
 
-    // FIXME duplicate of xml rpc
-    // move this in a common place archiva commons remote service
     public Boolean deleteManagedRepository( String repoId )
         throws Exception
     {
-        Configuration config = archivaConfiguration.getConfiguration();
-
-        ManagedRepositoryConfiguration repository = 
config.findManagedRepositoryById( repoId );
-
-        if ( repository == null )
-        {
-            throw new Exception( "A repository with that id does not exist" );
-        }
-
-        RepositorySession repositorySession = 
repositorySessionFactory.createSession();
-        try
-        {
-            MetadataRepository metadataRepository = 
repositorySession.getRepository();
-            metadataRepository.removeRepository( repository.getId() );
-            repositoryStatisticsManager.deleteStatistics( metadataRepository, 
repository.getId() );
-            repositorySession.save();
-        }
-        finally
-        {
-            repositorySession.close();
-        }
-        config.removeManagedRepository( repository );
-
-        try
-        {
-            saveConfiguration( config );
-        }
-        catch ( Exception e )
-        {
-            throw new Exception( "Error saving configuration for delete 
action" + e.getMessage() );
-        }
-
-        // TODO could be async ? as directory can be huge
-        File dir = new File( repository.getLocation() );
-        if ( !FileUtils.deleteQuietly( dir ) )
-        {
-            throw new IOException( "Cannot delete repository " + dir );
-        }
 
-        List<ProxyConnectorConfiguration> proxyConnectors = 
config.getProxyConnectors();
-        for ( ProxyConnectorConfiguration proxyConnector : proxyConnectors )
-        {
-            if ( StringUtils.equals( proxyConnector.getSourceRepoId(), 
repository.getId() ) )
-            {
-                archivaConfiguration.getConfiguration().removeProxyConnector( 
proxyConnector );
-            }
-        }
-
-        Map<String, List<String>> repoToGroupMap = 
archivaConfiguration.getConfiguration().getRepositoryToGroupMap();
-        if ( repoToGroupMap != null )
-        {
-            if ( repoToGroupMap.containsKey( repository.getId() ) )
-            {
-                List<String> repoGroups = repoToGroupMap.get( 
repository.getId() );
-                for ( String repoGroup : repoGroups )
-                {
-                    
archivaConfiguration.getConfiguration().findRepositoryGroupById( repoGroup 
).removeRepository(
-                        repository.getId() );
-                }
-            }
-        }
-
-        return Boolean.TRUE;
+        return managedRepositoryAdmin.deleteManagedRepository( repoId, 
getAuditInformation() );
     }
 
     public List<RemoteRepository> getRemoteRepositories()
@@ -228,203 +165,36 @@ public class DefaultRepositoriesService
     public Boolean addManagedRepository( ManagedRepository managedRepository )
         throws Exception
     {
-        return
-            addManagedRepository( managedRepository.getId(), 
managedRepository.getLayout(), managedRepository.getName(),
-                                  managedRepository.getLocation(), 
managedRepository.isBlockRedeployments(),
-                                  managedRepository.isReleases(), 
managedRepository.isSnapshots(),
-                                  managedRepository.isStageRepoNeeded(), 
managedRepository.getCronExpression() )
-                != null;
+        org.apache.archiva.admin.repository.managed.ManagedRepository repo =
+            new 
org.apache.archiva.admin.repository.managed.ManagedRepository();
+        repo.setLocation( managedRepository.getLocation() );
+        repo.setBlockRedeployments( managedRepository.isBlockRedeployments() );
+        repo.setCronExpression( managedRepository.getCronExpression() );
+        repo.setId( managedRepository.getId() );
+        repo.setLayout( managedRepository.getLayout() );
+        repo.setName( managedRepository.getName() );
+        repo.setReleases( managedRepository.isReleases() );
+        repo.setSnapshots( managedRepository.isSnapshots() );
+        return managedRepositoryAdmin.addManagedRepository( repo, 
managedRepository.isStageRepoNeeded(),
+                                                            
getAuditInformation() );
     }
 
-    private ManagedRepositoryConfiguration addManagedRepository( String 
repoId, String layout, String name,
-                                                                 String 
location, boolean blockRedeployments,
-                                                                 boolean 
releasesIncluded, boolean snapshotsIncluded,
-                                                                 boolean 
stageRepoNeeded, String cronExpression )
-        throws Exception
-    {
-
-        Configuration config = archivaConfiguration.getConfiguration();
-
-        CronExpressionValidator validator = new CronExpressionValidator();
-
-        if ( config.getManagedRepositoriesAsMap().containsKey( repoId ) )
-        {
-            throw new Exception( "Unable to add new repository with id [" + 
repoId
-                                     + "], that id already exists as a managed 
repository." );
-        }
-        else if ( config.getRemoteRepositoriesAsMap().containsKey( repoId ) )
-        {
-            throw new Exception( "Unable to add new repository with id [" + 
repoId
-                                     + "], that id already exists as a remote 
repository." );
-        }
-        else if ( config.getRepositoryGroupsAsMap().containsKey( repoId ) )
-        {
-            throw new Exception( "Unable to add new repository with id [" + 
repoId
-                                     + "], that id already exists as a 
repository group." );
-        }
-
-        if ( !validator.validate( cronExpression ) )
-        {
-            throw new Exception( "Invalid cron expression." );
-        }
-
-        if ( !GenericValidator.matchRegexp( repoId, 
REPOSITORY_ID_VALID_EXPRESSION ) )
-        {
-            throw new Exception(
-                "Invalid repository ID. Identifier must only contain 
alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
-        }
-
-        if ( !GenericValidator.matchRegexp( name, 
REPOSITORY_NAME_VALID_EXPRESSION ) )
-        {
-            throw new Exception(
-                "Invalid repository name. Repository Name must only contain 
alphanumeric characters, white-spaces(' '), "
-                    + "forward-slashes(/), open-parenthesis('('), 
close-parenthesis(')'),  underscores(_), dots(.), and dashes(-)." );
-        }
-
-        String repoLocation = removeExpressions( location );
-
-        if ( !GenericValidator.matchRegexp( repoLocation, 
REPOSITORY_LOCATION_VALID_EXPRESSION ) )
-        {
-            throw new Exception(
-                "Invalid repository location. Directory must only contain 
alphanumeric characters, equals(=), question-marks(?), "
-                    + "exclamation-points(!), ampersands(&amp;), 
forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), 
tildes(~), and dashes(-)." );
-        }
-
-        ManagedRepositoryConfiguration repository = new 
ManagedRepositoryConfiguration();
-
-        repository.setId( repoId );
-        repository.setBlockRedeployments( blockRedeployments );
-        repository.setReleases( releasesIncluded );
-        repository.setSnapshots( snapshotsIncluded );
-        repository.setName( name );
-        repository.setLocation( repoLocation );
-        repository.setLayout( layout );
-        repository.setRefreshCronExpression( cronExpression );
-
-        addRepository( repository, config );
-
-        if ( stageRepoNeeded )
-        {
-            ManagedRepositoryConfiguration stagingRepository = 
getStageRepoConfig( repository );
-            addRepository( stagingRepository, config );
-        }
-
-        saveConfiguration( config );
-
-        //MRM-1342 Repository statistics report doesn't appear to be working 
correctly
-        //scan repository when adding of repository is successful
-        try
-        {
-            executeRepositoryScanner( repoId );
-            if ( stageRepoNeeded )
-            {
-                ManagedRepositoryConfiguration stagingRepository = 
getStageRepoConfig( repository );
-                executeRepositoryScanner( stagingRepository.getId() );
-            }
-        }
-        catch ( Exception e )
-        {
-            log.warn( new StringBuilder( "Unable to scan repository [" 
).append( repoId ).append( "]: " ).append(
-                e.getMessage() ).toString(), e );
-        }
 
-        return repository;
-    }
-
-    public Boolean updateManagedRepository( ManagedRepository repository )
+    public Boolean updateManagedRepository( ManagedRepository 
managedRepository )
         throws Exception
     {
-        // Ensure that the fields are valid.
-        Configuration configuration = archivaConfiguration.getConfiguration();
-
-        ManagedRepositoryConfiguration toremove = 
configuration.findManagedRepositoryById( repository.getId() );
-
-        if ( toremove != null )
-        {
-            configuration.removeManagedRepository( toremove );
-        }
-        // FIXME the case of the attached staging repository
-        /*
-        if ( stagingRepository != null )
-        {
-            removeRepository( stagingRepository.getId(), configuration );
-        }*/
-
-        // Save the repository configuration.
-        String result;
-        RepositorySession repositorySession = 
repositorySessionFactory.createSession();
-        ManagedRepositoryConfiguration managedRepositoryConfiguration =
-            addManagedRepository( repository.getId(), repository.getLayout(), 
repository.getName(), repository.getLocation(),
-                                  repository.isBlockRedeployments(), 
repository.isReleases(), repository.isSnapshots(),
-                                  repository.isStageRepoNeeded(), 
repository.getCronExpression() );
-
-        // FIXME only location has changed from previous
-        boolean resetStats = true;
-
-        try
-        {
-            triggerAuditEvent( repository.getId(), null, 
AuditEvent.MODIFY_MANAGED_REPO );
-            addRepositoryRoles( managedRepositoryConfiguration );
-
-            // FIXME this staging part !!
-
-            //update changes of the staging repo
-            /*if ( stageNeeded )
-            {
-
-                stagingRepository = getStageRepoConfig( configuration );
-                addRepository( stagingRepository, configuration );
-                addRepositoryRoles( stagingRepository );
-
-            }*/
-            //delete staging repo when we dont need it
-            /*
-            if ( !stageNeeded )
-            {
-                stagingRepository = getStageRepoConfig( configuration );
-                removeRepository( stagingRepository.getId(), configuration );
-                removeContents( stagingRepository );
-                removeRepositoryRoles( stagingRepository );
-            }*/
-
-            saveConfiguration( this.archivaConfiguration.getConfiguration() );
-            if ( resetStats )
-            {
-                repositoryStatisticsManager.deleteStatistics( 
repositorySession.getRepository(), repository.getId() );
-                repositorySession.save();
-            }
-
-            //MRM-1342 Repository statistics report doesn't appear to be 
working correctly
-            //scan repository when modification of repository is successful
-            // olamy :  IMHO we are fine to ignore issue with scheduling 
scanning
-            // as here the repo has been updated
-            scanRepository( repository.getId(), true );
-            // FIXME staging !!
-            /*
-            if ( stageNeeded )
-            {
-                executeRepositoryScanner( stagingRepository.getId() );
-            }*/
-
-        }
-        catch ( IOException e )
-        {
-            throw e;
-        }
-        catch ( RoleManagerException e )
-        {
-            throw e;
-        }
-        catch ( MetadataRepositoryException e )
-        {
-            throw e;
-        }
-        finally
-        {
-            repositorySession.close();
-        }
-
-        return true;
+        org.apache.archiva.admin.repository.managed.ManagedRepository repo =
+            new 
org.apache.archiva.admin.repository.managed.ManagedRepository();
+        repo.setLocation( managedRepository.getLocation() );
+        repo.setBlockRedeployments( managedRepository.isBlockRedeployments() );
+        repo.setCronExpression( managedRepository.getCronExpression() );
+        repo.setId( managedRepository.getId() );
+        repo.setLayout( managedRepository.getLayout() );
+        repo.setName( managedRepository.getName() );
+        repo.setReleases( managedRepository.isReleases() );
+        repo.setSnapshots( managedRepository.isSnapshots() );
+        return managedRepositoryAdmin.updateManagedRepository( repo, 
managedRepository.isStageRepoNeeded(),
+                                                               
getAuditInformation() );
     }
 
 
@@ -477,7 +247,7 @@ public class DefaultRepositoriesService
 
     protected void triggerAuditEvent( String repositoryId, String resource, 
String action )
     {
-        User user = RedbackAuthenticationThreadLocal.get();
+        User user = RedbackAuthenticationThreadLocal.get().getUser();
         if ( user == null )
         {
             log.warn( "no user found in Redback ThreadLocal" );
@@ -585,6 +355,15 @@ public class DefaultRepositoriesService
         return value;
     }
 
+
+    private AuditInformation getAuditInformation()
+    {
+        RedbackRequestInformation redbackRequestInformation = 
RedbackAuthenticationThreadLocal.get();
+        User user = redbackRequestInformation == null ? null : 
redbackRequestInformation.getUser();
+        String remoteAddr = redbackRequestInformation == null ? null : 
redbackRequestInformation.getRemoteAddr();
+        return new AuditInformation( user, remoteAddr );
+    }
+
 }
 
 


Reply via email to