Author: olamy
Date: Sat Aug 27 15:06:42 2011
New Revision: 1162369

URL: http://svn.apache.org/viewvc?rev=1162369&view=rev
Log:
[MRM-1504] api for repository admin
start some jobs

Added:
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/resources/
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/resources/META-INF/
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/resources/META-INF/spring-context.xml
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/AbstractRepositoryAdminTest.java
      - copied, changed from r1161988, 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/RepositoryAdminException.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
      - copied, changed from r1161988, 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/log4j.xml
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/spring-context.xml
Modified:
    
archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
    archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/pom.xml
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/RepositoryAdminException.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/ManagedRepository.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ManagedRepositoryContent.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RemoteRepositoryContent.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java?rev=1162369&r1=1162368&r2=1162369&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
 Sat Aug 27 15:06:42 2011
@@ -193,7 +193,8 @@ public class DefaultArchivaConfiguration
         }
 
         Configuration config = new ConfigurationRegistryReader().read( subset 
);
-
+        config.getRepositoryGroups();
+        config.getRepositoryGroupsAsMap();
         if ( !config.getRepositories().isEmpty() )
         {
             for ( Iterator<V1RepositoryConfiguration> i = 
config.getRepositories().iterator(); i.hasNext(); )

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/pom.xml?rev=1162369&r1=1162368&r2=1162369&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/pom.xml 
(original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/pom.xml 
Sat Aug 27 15:06:42 2011
@@ -29,12 +29,31 @@
   <name>Archiva Base :: Repository Admin</name>
   <dependencies>
     <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-configuration</artifactId>
+    </dependency>
+     <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-scheduler-repository</artifactId>
+    </dependency>
+    <dependency>
       <groupId>javax.inject</groupId>
       <artifactId>javax.inject</artifactId>
       <version>1</version>
     </dependency>
     <dependency>
       <groupId>org.springframework</groupId>
+      <artifactId>spring-context-support</artifactId>
+      <version>${spring.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>commons-logging</groupId>
+          <artifactId>commons-logging</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework</groupId>
       <artifactId>spring-context</artifactId>
       <version>${spring.version}</version>
       <exclusions>
@@ -45,9 +64,42 @@
       </exclusions>
     </dependency>
     <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>commons-validator</groupId>
+      <artifactId>commons-validator</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>oro</groupId>
+      <artifactId>oro</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.redback.components</groupId>
+      <artifactId>spring-quartz</artifactId>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.derby</groupId>
+      <artifactId>derby</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>jcl-over-slf4j</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/RepositoryAdminException.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/RepositoryAdminException.java?rev=1162369&r1=1162368&r2=1162369&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/RepositoryAdminException.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/RepositoryAdminException.java
 Sat Aug 27 15:06:42 2011
@@ -26,6 +26,11 @@ package org.apache.archiva.admin.reposit
 public class RepositoryAdminException
     extends Exception
 {
+    public RepositoryAdminException( String s )
+    {
+        super( s );
+    }
+
     public RepositoryAdminException( String message, Throwable cause )
     {
         super( message, cause );

Added: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java?rev=1162369&view=auto
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
 (added)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
 Sat Aug 27 15:06:42 2011
@@ -0,0 +1,325 @@
+package org.apache.archiva.admin.repository.managed;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.archiva.admin.repository.RepositoryAdminException;
+import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler;
+import org.apache.archiva.scheduler.repository.RepositoryTask;
+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.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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * FIXME remove all generic Exception to have usefull ones
+ * FIXME review the staging mechanism to have a per user session one
+ *
+ * @author Olivier Lamy
+ */
+@Service( "managedRepositoryAdmin#default" )
+public class DefaultManagedRepositoryAdmin
+    implements ManagedRepositoryAdmin
+{
+    public static final String REPOSITORY_ID_VALID_EXPRESSION = 
"^[a-zA-Z0-9._-]+$";
+
+    public static final String REPOSITORY_NAME_VALID_EXPRESSION = 
"^([a-zA-Z0-9.)/_(-]|\\s)+$";
+
+    public static final String REPOSITORY_LOCATION_VALID_EXPRESSION = 
"^[-a-zA-Z0-9._/~:?!&amp;=\\\\]+$";
+
+    private Logger log = LoggerFactory.getLogger( getClass() );
+
+    @Inject
+    private ArchivaConfiguration archivaConfiguration;
+
+    @Inject
+    @Named( value = "commons-configuration" )
+    private Registry registry;
+
+    @Inject
+    @Named( value = "archivaTaskScheduler#repository" )
+    private RepositoryArchivaTaskScheduler repositoryTaskScheduler;
+
+    public List<ManagedRepository> getManagedRepositories()
+        throws RepositoryAdminException
+    {
+        List<ManagedRepositoryConfiguration> managedRepoConfigs =
+            archivaConfiguration.getConfiguration().getManagedRepositories();
+
+        List<ManagedRepository> managedRepos = new 
ArrayList<ManagedRepository>( managedRepoConfigs.size() );
+
+        for ( ManagedRepositoryConfiguration repoConfig : managedRepoConfigs )
+        {
+            // TODO staging repo too
+            ManagedRepository repo =
+                new ManagedRepository( repoConfig.getId(), 
repoConfig.getName(), repoConfig.getLocation(),
+                                       repoConfig.getLayout(), 
repoConfig.isSnapshots(), repoConfig.isReleases(),
+                                       repoConfig.isBlockRedeployments(), 
repoConfig.getRefreshCronExpression() );
+
+            managedRepos.add( repo );
+        }
+
+        return managedRepos;
+    }
+
+    public ManagedRepository getManagedRepository( String repositoryId )
+        throws RepositoryAdminException
+    {
+        List<ManagedRepository> repos = getManagedRepositories();
+        for ( ManagedRepository repo : repos )
+        {
+            if ( StringUtils.equals( repo.getId(), repositoryId ) )
+            {
+                return repo;
+            }
+        }
+        return null;
+    }
+
+    public Boolean deleteManagedRepository( String repositoryId )
+        throws RepositoryAdminException
+    {
+        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+    }
+
+    public Boolean addManagedRepository( ManagedRepository managedRepository, 
boolean needStageRepo )
+        throws RepositoryAdminException
+    {
+        return
+            addManagedRepository( managedRepository.getId(), 
managedRepository.getLayout(), managedRepository.getName(),
+                                  managedRepository.getUrl(), 
managedRepository.isBlockRedeployments(),
+                                  managedRepository.isReleases(), 
managedRepository.isSnapshots(), needStageRepo,
+                                  managedRepository.getCronExpression() ) != 
null;
+
+    }
+
+    private ManagedRepositoryConfiguration addManagedRepository( String 
repoId, String layout, String name,
+                                                                 String 
location, boolean blockRedeployments,
+                                                                 boolean 
releasesIncluded, boolean snapshotsIncluded,
+                                                                 boolean 
stageRepoNeeded, String cronExpression )
+        throws RepositoryAdminException
+    {
+
+        Configuration config = archivaConfiguration.getConfiguration();
+
+        CronExpressionValidator validator = new CronExpressionValidator();
+
+        if ( config.getManagedRepositoriesAsMap().containsKey( repoId ) )
+        {
+            throw new RepositoryAdminException( "Unable to add new repository 
with id [" + repoId
+                                                    + "], that id already 
exists as a managed repository." );
+        }
+        else if ( config.getRemoteRepositoriesAsMap().containsKey( repoId ) )
+        {
+            throw new RepositoryAdminException( "Unable to add new repository 
with id [" + repoId
+                                                    + "], that id already 
exists as a remote repository." );
+        }
+        else if ( config.getRepositoryGroupsAsMap().containsKey( repoId ) )
+        {
+            throw new RepositoryAdminException( "Unable to add new repository 
with id [" + repoId
+                                                    + "], that id already 
exists as a repository group." );
+        }
+
+        if ( !validator.validate( cronExpression ) )
+        {
+            throw new RepositoryAdminException( "Invalid cron expression." );
+        }
+
+        if ( !GenericValidator.matchRegexp( repoId, 
REPOSITORY_ID_VALID_EXPRESSION ) )
+        {
+            throw new RepositoryAdminException(
+                "Invalid repository ID. Identifier must only contain 
alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
+        }
+
+        if ( !GenericValidator.matchRegexp( name, 
REPOSITORY_NAME_VALID_EXPRESSION ) )
+        {
+            throw new RepositoryAdminException(
+                "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 RepositoryAdminException(
+                "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 );
+        try
+        {
+            addRepository( repository, config );
+
+            if ( stageRepoNeeded )
+            {
+                ManagedRepositoryConfiguration stagingRepository = 
getStageRepoConfig( repository );
+                addRepository( stagingRepository, config );
+            }
+        }
+        catch ( IOException e )
+        {
+            throw new RepositoryAdminException( "failed to add repository " + 
e.getMessage(), e );
+        }
+
+        saveConfiguration( config );
+
+        //MRM-1342 Repository statistics report doesn't appear to be working 
correctly
+        //scan repository when adding of repository is successful
+        try
+        {
+            scanRepository( repoId, true );
+            if ( stageRepoNeeded )
+            {
+                ManagedRepositoryConfiguration stagingRepository = 
getStageRepoConfig( repository );
+                scanRepository( stagingRepository.getId(), true );
+            }
+        }
+        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 
managedRepository, boolean needStageRepo )
+        throws RepositoryAdminException
+    {
+        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+    }
+
+    //--------------------------
+    // utils methods
+    //--------------------------
+
+    private String removeExpressions( String directory )
+    {
+        String value = StringUtils.replace( directory, "${appserver.base}",
+                                            registry.getString( 
"appserver.base", "${appserver.base}" ) );
+        value = StringUtils.replace( value, "${appserver.home}",
+                                     registry.getString( "appserver.home", 
"${appserver.home}" ) );
+        return value;
+    }
+
+    private void saveConfiguration( Configuration config )
+        throws RepositoryAdminException
+    {
+        try
+        {
+            archivaConfiguration.save( config );
+        }
+        catch ( RegistryException e )
+        {
+            throw new RepositoryAdminException( "Error occurred in the 
registry.", e );
+        }
+        catch ( IndeterminateConfigurationException e )
+        {
+            throw new RepositoryAdminException( "Error occurred while saving 
the configuration.", e );
+        }
+    }
+
+    protected void addRepository( ManagedRepositoryConfiguration repository, 
Configuration configuration )
+        throws RepositoryAdminException, IOException
+    {
+        // Normalize the path
+        File file = new File( repository.getLocation() );
+        repository.setLocation( file.getCanonicalPath() );
+        if ( !file.exists() )
+        {
+            file.mkdirs();
+        }
+        if ( !file.exists() || !file.isDirectory() )
+        {
+            throw new RepositoryAdminException(
+                "Unable to add repository - no write access, can not create 
the root directory: " + file );
+        }
+
+        configuration.addManagedRepository( repository );
+    }
+
+    private ManagedRepositoryConfiguration getStageRepoConfig( 
ManagedRepositoryConfiguration repository )
+    {
+        ManagedRepositoryConfiguration stagingRepository = new 
ManagedRepositoryConfiguration();
+        stagingRepository.setId( repository.getId() + "-stage" );
+        stagingRepository.setLayout( repository.getLayout() );
+        stagingRepository.setName( repository.getName() + "-stage" );
+        stagingRepository.setBlockRedeployments( 
repository.isBlockRedeployments() );
+        stagingRepository.setDaysOlder( repository.getDaysOlder() );
+        stagingRepository.setDeleteReleasedSnapshots( 
repository.isDeleteReleasedSnapshots() );
+        stagingRepository.setIndexDir( repository.getIndexDir() );
+        String path = repository.getLocation();
+        int lastIndex = path.lastIndexOf( '/' );
+        stagingRepository.setLocation( path.substring( 0, lastIndex ) + "/" + 
stagingRepository.getId() );
+        stagingRepository.setRefreshCronExpression( 
repository.getRefreshCronExpression() );
+        stagingRepository.setReleases( repository.isReleases() );
+        stagingRepository.setRetentionCount( repository.getRetentionCount() );
+        stagingRepository.setScanned( repository.isScanned() );
+        stagingRepository.setSnapshots( repository.isSnapshots() );
+        return stagingRepository;
+    }
+
+    public Boolean scanRepository( String repositoryId, boolean fullScan )
+    {
+        if ( repositoryTaskScheduler.isProcessingRepositoryTask( repositoryId 
) )
+        {
+            log.info( "scanning of repository with id {} already scheduled" );
+        }
+        RepositoryTask task = new RepositoryTask();
+        task.setRepositoryId( repositoryId );
+        task.setScanAll( fullScan );
+        try
+        {
+            repositoryTaskScheduler.queueTask( task );
+        }
+        catch ( TaskQueueException e )
+        {
+            log.error( "failed to schedule scanning of repo with id {}", 
repositoryId, e );
+            return false;
+        }
+        return true;
+    }
+}

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/ManagedRepository.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/ManagedRepository.java?rev=1162369&r1=1162368&r2=1162369&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/ManagedRepository.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/ManagedRepository.java
 Sat Aug 27 15:06:42 2011
@@ -43,6 +43,8 @@ public class ManagedRepository
 
     private String cronExpression;
 
+    private boolean stageRepoNeeded;
+
     /**
      * not need when creating the repo : only available when reading
      */
@@ -63,7 +65,6 @@ public class ManagedRepository
         this.snapshots = snapshots;
         this.releases = releases;
         this.blockRedeployments = blockRedeployments;
-        this.cronExpression = cronExpression;
     }
 
     public String getId()
@@ -189,8 +190,21 @@ public class ManagedRepository
     @Override
     public String toString()
     {
-        return "ManagedRepository{" + "id='" + id + '\'' + ", name='" + name + 
'\'' + ", url='" + url + '\''
-            + ", layout='" + layout + '\'' + ", snapshots=" + snapshots + ", 
releases=" + releases
-            + ", blockRedeployments=" + blockRedeployments + ", 
cronExpression='" + cronExpression + '\'' + '}';
+        final StringBuilder sb = new StringBuilder();
+        sb.append( "ManagedRepository" );
+        sb.append( "{id='" ).append( id ).append( '\'' );
+        sb.append( ", name='" ).append( name ).append( '\'' );
+        sb.append( ", url='" ).append( url ).append( '\'' );
+        sb.append( ", layout='" ).append( layout ).append( '\'' );
+        sb.append( ", snapshots=" ).append( snapshots );
+        sb.append( ", releases=" ).append( releases );
+        sb.append( ", blockRedeployments=" ).append( blockRedeployments );
+        sb.append( ", cronExpression='" ).append( cronExpression ).append( 
'\'' );
+        sb.append( ", stageRepoNeeded=" ).append( stageRepoNeeded );
+        sb.append( ", stagingRepository=" ).append( stagingRepository );
+        sb.append( '}' );
+        return sb.toString();
     }
+
+
 }
\ No newline at end of file

Added: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/resources/META-INF/spring-context.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/resources/META-INF/spring-context.xml?rev=1162369&view=auto
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/resources/META-INF/spring-context.xml
 (added)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/resources/META-INF/spring-context.xml
 Sat Aug 27 15:06:42 2011
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xmlns:context="http://www.springframework.org/schema/context";
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+           http://www.springframework.org/schema/context 
+           
http://www.springframework.org/schema/context/spring-context-3.0.xsd"; 
default-lazy-init="true">
+
+
+  <context:annotation-config />
+  <context:component-scan
+    base-package="org.apache.archiva.admin.repository"/>
+
+
+
+</beans>
\ No newline at end of file

Copied: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/AbstractRepositoryAdminTest.java
 (from r1161988, 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/RepositoryAdminException.java)
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/AbstractRepositoryAdminTest.java?p2=archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/AbstractRepositoryAdminTest.java&p1=archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/RepositoryAdminException.java&r1=1161988&r2=1162369&rev=1162369&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/RepositoryAdminException.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/AbstractRepositoryAdminTest.java
 Sat Aug 27 15:06:42 2011
@@ -1,4 +1,4 @@
-package org.apache.archiva.admin.repository;
+package org.apache.archiva.admin.repository.managed;
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -18,16 +18,18 @@ package org.apache.archiva.admin.reposit
  * under the License.
  */
 
+import junit.framework.TestCase;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 /**
  * @author Olivier Lamy
- * @since 1.4
  */
-public class RepositoryAdminException
-    extends Exception
+@RunWith( SpringJUnit4ClassRunner.class )
+@ContextConfiguration( locations = { 
"classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
+public abstract class AbstractRepositoryAdminTest
+    extends TestCase
 {
-    public RepositoryAdminException( String message, Throwable cause )
-    {
-        super( message, cause );
-    }
+    // no op
 }

Copied: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
 (from r1161988, 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java)
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java?p2=archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java&p1=archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java&r1=1161988&r2=1162369&rev=1162369&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
 Sat Aug 27 15:06:42 2011
@@ -1,4 +1,4 @@
-package org.apache.archiva.rest.services;
+package org.apache.archiva.admin.repository.managed;
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -18,22 +18,36 @@ package org.apache.archiva.rest.services
  * under the License.
  */
 
+import org.junit.Test;
 
-import org.codehaus.redback.rest.services.AbstractRestServicesTest;
+import javax.inject.Inject;
+import java.util.List;
 
 /**
  * @author Olivier Lamy
- * @since TODO
  */
-public abstract class AbstractArchivaRestTest
-    extends AbstractRestServicesTest
+public class ManagedRepositoryAdminTest
+    extends AbstractRepositoryAdminTest
 {
-    public String guestAuthzHeader =
-        "Basic " + org.apache.cxf.common.util.Base64Utility.encode( ( "guest" 
+ ":" ).getBytes() );
 
-    @Override
-    protected String getSpringConfigLocation()
+    @Inject
+    private ManagedRepositoryAdmin managedRepositoryAdmin;
+
+    @Test
+    public void getAllManagedRepos()
+        throws Exception
     {
-        return 
"classpath*:META-INF/spring-context.xml,classpath:META-INF/spring-context-test.xml";
+        List<ManagedRepository> repos = 
managedRepositoryAdmin.getManagedRepositories();
+        assertNotNull( repos );
+        assertTrue( repos.size() > 0 );
     }
+
+    @Test
+    public void getById()
+        throws Exception
+    {
+        ManagedRepository repo = managedRepositoryAdmin.getManagedRepository( 
"internal" );
+        assertNotNull( repo );
+    }
+
 }

Added: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/log4j.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/log4j.xml?rev=1162369&view=auto
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/log4j.xml
 (added)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/log4j.xml
 Sat Aug 27 15:06:42 2011
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
+
+  <appender name="console" class="org.apache.log4j.ConsoleAppender">
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
+    </layout>
+  </appender>
+
+
+
+  <logger name="org.codehaus.redback.rest.services" >
+    <level value="debug"/>
+  </logger>
+  <logger name="JPOX">
+    <level value="ERROR"/>
+  </logger>
+
+  <logger name="org.springframework">
+    <level value="info"/>
+  </logger>
+
+  <root>
+    <priority value ="info" />
+    <appender-ref ref="console" />
+  </root>
+
+</log4j:configuration>

Added: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/spring-context.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/spring-context.xml?rev=1162369&view=auto
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/spring-context.xml
 (added)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/spring-context.xml
 Sat Aug 27 15:06:42 2011
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xmlns:context="http://www.springframework.org/schema/context";
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+           http://www.springframework.org/schema/context 
+           
http://www.springframework.org/schema/context/spring-context-3.0.xsd"; 
default-lazy-init="true">
+
+</beans>
\ No newline at end of file

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ManagedRepositoryContent.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ManagedRepositoryContent.java?rev=1162369&r1=1162368&r2=1162369&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ManagedRepositoryContent.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ManagedRepositoryContent.java
 Sat Aug 27 15:06:42 2011
@@ -44,7 +44,7 @@ public interface ManagedRepositoryConten
      * @param reference the version reference to delete.
      * @throws ContentNotFoundException 
      */
-    public void deleteVersion( VersionedReference reference )
+    void deleteVersion( VersionedReference reference )
         throws ContentNotFoundException;
 
     /**
@@ -58,7 +58,7 @@ public interface ManagedRepositoryConten
      * 
      * @return the repository id.
      */
-    public String getId();
+    String getId();
 
     /**
      * <p>
@@ -76,7 +76,7 @@ public interface ManagedRepositoryConten
      * @throws ContentNotFoundException if the initial artifact reference does 
not exist within the repository.
      * @throws LayoutException 
      */
-    public Set<ArtifactReference> getRelatedArtifacts( ArtifactReference 
reference )
+    Set<ArtifactReference> getRelatedArtifacts( ArtifactReference reference )
         throws ContentNotFoundException;
 
     /**
@@ -90,7 +90,7 @@ public interface ManagedRepositoryConten
      * 
      * @return the repository (on disk) root directory.
      */
-    public String getRepoRoot();
+    String getRepoRoot();
 
     /**
      * Get the repository configuration associated with this
@@ -98,7 +98,7 @@ public interface ManagedRepositoryConten
      * 
      * @return the repository that is associated with this repository content.
      */
-    public ManagedRepositoryConfiguration getRepository();
+    ManagedRepositoryConfiguration getRepository();
 
     /**
      * Given a specific {@link ProjectReference}, return the list of available 
versions for
@@ -109,7 +109,7 @@ public interface ManagedRepositoryConten
      * @throws ContentNotFoundException if the project reference does nto 
exist within the repository.
      * @throws LayoutException 
      */
-    public Set<String> getVersions( ProjectReference reference )
+    Set<String> getVersions( ProjectReference reference )
         throws ContentNotFoundException, LayoutException;
 
     /**

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RemoteRepositoryContent.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RemoteRepositoryContent.java?rev=1162369&r1=1162368&r2=1162369&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RemoteRepositoryContent.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RemoteRepositoryContent.java
 Sat Aug 27 15:06:42 2011
@@ -43,7 +43,7 @@ public interface RemoteRepositoryContent
      * 
      * @return the repository id.
      */
-    public String getId();
+    String getId();
 
     /**
      * Get the repository configuration associated with this
@@ -51,7 +51,7 @@ public interface RemoteRepositoryContent
      * 
      * @return the repository that is associated with this repository content.
      */
-    public RemoteRepositoryConfiguration getRepository();
+    RemoteRepositoryConfiguration getRepository();
 
     /**
      * <p>
@@ -64,7 +64,7 @@ public interface RemoteRepositoryContent
      * 
      * @return the repository url.
      */
-    public RepositoryURL getURL();
+    RepositoryURL getURL();
 
     /**
      * Set the repository configuration to associate with this
@@ -72,7 +72,7 @@ public interface RemoteRepositoryContent
      * 
      * @param repo the repository to associate with this repository content.
      */
-    public void setRepository( RemoteRepositoryConfiguration repo );
+    void setRepository( RemoteRepositoryConfiguration repo );
 
     /**
      * Given a repository relative path to a filename, return the {@link 
VersionedReference} object suitable for the path.
@@ -82,7 +82,7 @@ public interface RemoteRepositoryContent
      *         a {@link ArtifactReference})
      * @throws LayoutException if there was a problem converting the path to 
an artifact.
      */
-    public ArtifactReference toArtifactReference( String path )
+    ArtifactReference toArtifactReference( String path )
         throws LayoutException;
 
     /**
@@ -91,7 +91,7 @@ public interface RemoteRepositoryContent
      * @param reference the artifact reference to use.
      * @return the relative path to the artifact.
      */
-    public String toPath( ArtifactReference reference );
+    String toPath( ArtifactReference reference );
 
     /**
      * Given an ArtifactReference, return the url to the artifact.
@@ -99,5 +99,5 @@ public interface RemoteRepositoryContent
      * @param reference the artifact reference to use.
      * @return the relative path to the artifact.
      */
-    public RepositoryURL toURL( ArtifactReference reference );
+    RepositoryURL toURL( ArtifactReference reference );
 }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java?rev=1162369&r1=1162368&r2=1162369&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java
 Sat Aug 27 15:06:42 2011
@@ -23,7 +23,6 @@ import org.codehaus.redback.rest.service
 
 /**
  * @author Olivier Lamy
- * @since TODO
  */
 public abstract class AbstractArchivaRestTest
     extends AbstractRestServicesTest

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java?rev=1162369&r1=1162368&r2=1162369&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java
 Sat Aug 27 15:06:42 2011
@@ -246,7 +246,7 @@ public class ArchivaDavResourceFactory
                 // make a copy to avoid potential concurrent modifications 
(eg. by configuration)
                 // TODO: ultimately, locking might be more efficient than 
copying in this fashion since updates are
                 //  infrequent
-                ArrayList<String> repositories = new ArrayList<String>( 
repoGroupConfig.getRepositories() );
+                List<String> repositories = new ArrayList<String>( 
repoGroupConfig.getRepositories() );
                 resource = processRepositoryGroup( request, archivaLocator, 
repositories, activePrincipal,
                                                    resourcesInAbsolutePath );
             }


Reply via email to