archiva-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From marti...@apache.org
Subject [02/21] archiva git commit: Adding absolute URI to repositories
Date Wed, 01 Nov 2017 14:40:48 GMT
Adding absolute URI to repositories


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/1026c8ee
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/1026c8ee
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/1026c8ee

Branch: refs/heads/master
Commit: 1026c8eeb87b393f2a259b10d56a366ba1b523e9
Parents: acbcb48
Author: Martin Stockhammer <martin_s@apache.org>
Authored: Sun Oct 22 18:22:03 2017 +0200
Committer: Martin Stockhammer <martin_s@apache.org>
Committed: Sun Oct 22 18:22:03 2017 +0200

----------------------------------------------------------------------
 .../archiva/repository/AbstractRepository.java  |  10 +
 .../archiva/repository/EditableRepository.java  |   7 +
 .../apache/archiva/repository/Repository.java   |   8 +
 .../archiva/repository/RepositoryProvider.java  |   4 +
 .../archiva/repository/RepositoryRegistry.java  | 208 +++++++++++++++++--
 .../maven2/MavenRepositoryProvider.java         |  89 +++++++-
 .../maven2/MavenRepositoryProviderTest.java     |  35 +++-
 7 files changed, 332 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
index a517d84..4bac7e7 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java
@@ -48,6 +48,7 @@ public abstract class AbstractRepository implements EditableRepository
 
     private Locale primaryLocale = new Locale("en_US");
     private URI location;
+    private URI baseUri;
     private Set<URI> failoverLocations = new HashSet<>(  );
     private Set<URI> uFailoverLocations = Collections.unmodifiableSet( failoverLocations
);
     private boolean scanned = true;
@@ -114,6 +115,10 @@ public abstract class AbstractRepository implements EditableRepository
         return location;
     }
 
+    public URI getAbsoluteLocation() {
+        return baseUri.resolve( location );
+    }
+
     @Override
     public Set<URI> getFailoverLocations( )
     {
@@ -211,6 +216,11 @@ public abstract class AbstractRepository implements EditableRepository
     }
 
     @Override
+    public void setBaseUri(URI baseUri) {
+        this.baseUri = baseUri;
+    }
+
+    @Override
     public void setSchedulingDefinition(String cronExpression) {
         CronParser parser = new CronParser(CRON_DEFINITION);
         parser.parse(cronExpression).validate();

http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java
index 6715422..b275492 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/EditableRepository.java
@@ -68,6 +68,13 @@ public interface EditableRepository extends Repository
     void setLocation(URI location) throws UnsupportedURIException;
 
     /**
+     * Sets the base uri for relative location uris.
+     *
+     * @param baseUri
+     */
+    void setBaseUri(URI baseUri);
+
+    /**
      * Adds a failover location for the repository.
      *
      * @param location The location that should be used as failover.

http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java
index 229f30f..68c00d6 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java
@@ -85,6 +85,14 @@ public interface Repository {
      */
     URI getLocation();
 
+    /**
+     * This returns the absolute location uri of this repository. Some repository locations
may be relative to
+     * the base repository directory or uri. This returns the absolute path of the repository.
+     * If the location is absolute already this method returns the same URI as getLocation().
+     *
+     * @return the absolute uri of the location.
+     */
+    URI getAbsoluteLocation();
 
     /**
      * A repository may allow additional locations that can be used, if the primary location
is not available.

http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
index a818da9..a45c05e 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java
@@ -40,10 +40,14 @@ public interface RepositoryProvider
 
     ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration)
throws RepositoryException;
 
+    void updateManagedInstance( EditableManagedRepository repo, ManagedRepositoryConfiguration
configuration) throws RepositoryException;
+
     ManagedRepository createStagingInstance(ManagedRepositoryConfiguration baseConfiguration)
throws RepositoryException;
 
     RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration) throws
RepositoryException;
 
+    void updateRemoteInstance(EditableRemoteRepository repo, RemoteRepositoryConfiguration
configuration) throws RepositoryException;
+
     RemoteRepositoryConfiguration getRemoteConfiguration(RemoteRepository remoteRepository)
throws RepositoryException;
 
     ManagedRepositoryConfiguration getManagedConfiguration(ManagedRepository managedRepository)
throws RepositoryException;

http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
----------------------------------------------------------------------
diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
index 209fd54..a5f2f03 100644
--- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
+++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java
@@ -19,7 +19,13 @@ package org.apache.archiva.repository;
  * under the License.
  */
 
-import org.apache.archiva.configuration.*;
+import org.apache.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ConfigurationEvent;
+import org.apache.archiva.configuration.ConfigurationListener;
+import org.apache.archiva.configuration.IndeterminateConfigurationException;
+import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.archiva.redback.components.registry.RegistryException;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
 import org.slf4j.Logger;
@@ -28,7 +34,12 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -139,6 +150,7 @@ public class RepositoryRegistry implements ConfigurationListener {
             return managedRepos;
         } catch (Throwable e) {
             log.error("Could not initialize repositories from config: {}",e.getMessage(),
e );
+            //noinspection unchecked
             return Collections.EMPTY_MAP;
         }
     }
@@ -185,6 +197,7 @@ public class RepositoryRegistry implements ConfigurationListener {
 
             if ( remoteRepoConfigs == null )
             {
+                //noinspection unchecked
                 return Collections.EMPTY_MAP;
             }
 
@@ -210,6 +223,7 @@ public class RepositoryRegistry implements ConfigurationListener {
             return remoteRepos;
         } catch (Throwable e) {
             log.error("Could not initialize remote repositories from config: {}", e.getMessage(),
e);
+            //noinspection unchecked
             return Collections.EMPTY_MAP;
         }
     }
@@ -339,23 +353,20 @@ public class RepositoryRegistry implements ConfigurationListener {
     }
 
     /**
-     * Adds a new repository to the current list, or overwrites the repository definition
with
+     * Adds a new repository to the current list, or replaces the repository definition with
      * the same id, if it exists already.
      * The change is saved to the configuration immediately.
      *
      * @param managedRepository the new repository.
      * @throws RepositoryException if the new repository could not be saved to the configuration.
      */
-    public void addRepository( ManagedRepository managedRepository ) throws RepositoryException
+    public void putRepository( ManagedRepository managedRepository ) throws RepositoryException
     {
         rwLock.writeLock( ).lock( );
         try
         {
             final String id = managedRepository.getId();
             ManagedRepository originRepo = managedRepositories.put( id, managedRepository
);
-            ManagedRepositoryConfiguration originCfg = null;
-            List<ManagedRepositoryConfiguration> cfgList = null;
-            int index = 0;
             try
             {
                 ManagedRepositoryConfiguration newCfg = getProvider( managedRepository.getType(
) ).getManagedConfiguration( managedRepository );
@@ -386,22 +397,104 @@ public class RepositoryRegistry implements ConfigurationListener {
     }
 
     /**
+     * Adds a new repository or updates the repository with the same id, if it exists already.
+     * The configuration is saved immediately.
+     *
+     * @param managedRepositoryConfiguration the repository configuration
+     * @return the updated or created repository
+     * @throws RepositoryException if an error occurs, or the configuration is not valid.
+     */
+    public ManagedRepository putRepository( ManagedRepositoryConfiguration managedRepositoryConfiguration)
throws RepositoryException
+    {
+        rwLock.writeLock( ).lock( );
+        try
+        {
+            final String id = managedRepositoryConfiguration.getId();
+            final RepositoryType repositoryType = RepositoryType.valueOf( managedRepositoryConfiguration.getType()
);
+            Configuration configuration = getArchivaConfiguration().getConfiguration();
+            ManagedRepository repo = managedRepositories.get(id);
+            ManagedRepositoryConfiguration oldCfg = repo!=null ? getProvider( repositoryType
).getManagedConfiguration( repo ) : null;
+            repo = putRepository( managedRepositoryConfiguration, configuration );
+            try
+            {
+                getArchivaConfiguration().save(configuration);
+            }
+            catch ( IndeterminateConfigurationException | RegistryException e )
+            {
+                if (oldCfg!=null) {
+                    getProvider( repositoryType ).updateManagedInstance( (EditableManagedRepository)repo,
oldCfg );
+                }
+                log.error("Could not save the configuration for repository {}: {}", id, e.getMessage(),e
);
+                throw new RepositoryException( "Could not save the configuration for repository
"+id+": "+e.getMessage() );
+            }
+            return repo;
+        }
+        finally
+        {
+            rwLock.writeLock( ).unlock( );
+        }
+
+    }
+
+    /**
+     * Adds a new repository or updates the repository with the same id. The given configuration
object is updated, but
+     * the configuration is not saved.
+     *
+     * @param managedRepositoryConfiguration the new or changed repository configuration
+     * @param configuration the configuration object
+     * @return the new or updated repository
+     * @throws RepositoryException if the configuration cannot be saved or updated
+     */
+    public ManagedRepository putRepository( ManagedRepositoryConfiguration managedRepositoryConfiguration,
Configuration configuration) throws RepositoryException
+    {
+        rwLock.writeLock( ).lock( );
+        try
+        {
+            final String id = managedRepositoryConfiguration.getId();
+            final RepositoryType repoType = RepositoryType.valueOf( managedRepositoryConfiguration.getType()
);
+            ManagedRepository repo;
+            if (managedRepositories.containsKey( id )) {
+                repo = managedRepositories.get(id);
+                if (repo instanceof EditableManagedRepository)
+                {
+                    getProvider( repoType ).updateManagedInstance( (EditableManagedRepository)
repo, managedRepositoryConfiguration );
+                } else {
+                    throw new RepositoryException( "The repository is not editable "+id );
+                }
+            } else
+            {
+                repo = getProvider( repoType ).createManagedInstance( managedRepositoryConfiguration
);
+                managedRepositories.put(id, repo);
+            }
+            ManagedRepositoryConfiguration oldCfg;
+            if ((oldCfg = configuration.findManagedRepositoryById( id ))!=null) {
+                configuration.removeManagedRepository( oldCfg );
+            }
+            configuration.addManagedRepository( managedRepositoryConfiguration );
+            return repo;
+        }
+        finally
+        {
+            rwLock.writeLock( ).unlock( );
+        }
+
+
+    }
+
+    /**
      * Adds a remote repository, or overwrites the repository definition with the same id,
if it exists already.
      * The modification is saved to the configuration immediately.
      *
      * @param remoteRepository the remote repository to add
      * @throws RepositoryException if an error occurs during configuration save
      */
-    public void addRepository( RemoteRepository remoteRepository ) throws RepositoryException
+    public void putRepository( RemoteRepository remoteRepository ) throws RepositoryException
     {
         rwLock.writeLock( ).lock( );
         try
         {
             final String id = remoteRepository.getId();
             RemoteRepository originRepo = remoteRepositories.put( id, remoteRepository );
-            RemoteRepositoryConfiguration originCfg = null;
-            List<RemoteRepositoryConfiguration> cfgList = null;
-            int index = 0;
             try
             {
                 RemoteRepositoryConfiguration newCfg = getProvider( remoteRepository.getType(
) ).getRemoteConfiguration( remoteRepository );
@@ -432,6 +525,91 @@ public class RepositoryRegistry implements ConfigurationListener {
     }
 
     /**
+     * Adds a new repository or updates the repository with the same id, if it exists already.
+     * The configuration is saved immediately.
+     *
+     * @param remoteRepositoryConfiguration the repository configuration
+     * @return the updated or created repository
+     * @throws RepositoryException if an error occurs, or the configuration is not valid.
+     */
+    public RemoteRepository putRepository( RemoteRepositoryConfiguration remoteRepositoryConfiguration)
throws RepositoryException
+    {
+        rwLock.writeLock( ).lock( );
+        try
+        {
+            final String id = remoteRepositoryConfiguration.getId();
+            final RepositoryType repositoryType = RepositoryType.valueOf( remoteRepositoryConfiguration.getType()
);
+            Configuration configuration = getArchivaConfiguration().getConfiguration();
+            RemoteRepository repo = remoteRepositories.get(id);
+            RemoteRepositoryConfiguration oldCfg = repo!=null ? getProvider( repositoryType
).getRemoteConfiguration( repo ) : null;
+            repo = putRepository( remoteRepositoryConfiguration, configuration );
+            try
+            {
+                getArchivaConfiguration().save(configuration);
+            }
+            catch ( IndeterminateConfigurationException | RegistryException e )
+            {
+                if (oldCfg!=null) {
+                    getProvider( repositoryType ).updateRemoteInstance( (EditableRemoteRepository)repo,
oldCfg );
+                }
+                log.error("Could not save the configuration for repository {}: {}", id, e.getMessage(),e
);
+                throw new RepositoryException( "Could not save the configuration for repository
"+id+": "+e.getMessage() );
+            }
+            return repo;
+        }
+        finally
+        {
+            rwLock.writeLock( ).unlock( );
+        }
+
+    }
+
+    /**
+     * Adds a new repository or updates the repository with the same id. The given configuration
object is updated, but
+     * the configuration is not saved.
+     *
+     * @param remoteRepositoryConfiguration the new or changed repository configuration
+     * @param configuration the configuration object
+     * @return the new or updated repository
+     * @throws RepositoryException if the configuration cannot be saved or updated
+     */
+    public RemoteRepository putRepository( RemoteRepositoryConfiguration remoteRepositoryConfiguration,
Configuration configuration) throws RepositoryException
+    {
+        rwLock.writeLock( ).lock( );
+        try
+        {
+            final String id = remoteRepositoryConfiguration.getId();
+            final RepositoryType repoType = RepositoryType.valueOf( remoteRepositoryConfiguration.getType()
);
+            RemoteRepository repo;
+            if (remoteRepositories.containsKey( id )) {
+                repo = remoteRepositories.get(id);
+                if (repo instanceof EditableRemoteRepository)
+                {
+                    getProvider( repoType ).updateRemoteInstance( (EditableRemoteRepository)
repo, remoteRepositoryConfiguration );
+                } else {
+                    throw new RepositoryException( "The repository is not editable "+id );
+                }
+            } else
+            {
+                repo = getProvider( repoType ).createRemoteInstance( remoteRepositoryConfiguration
);
+                remoteRepositories.put(id, repo);
+            }
+            RemoteRepositoryConfiguration oldCfg;
+            if ((oldCfg = configuration.findRemoteRepositoryById( id ))!=null) {
+                configuration.removeRemoteRepository( oldCfg );
+            }
+            configuration.addRemoteRepository( remoteRepositoryConfiguration );
+            return repo;
+        }
+        finally
+        {
+            rwLock.writeLock( ).unlock( );
+        }
+
+
+    }
+
+    /**
      * Removes a managed repository from the registry and configuration, if it exists.
      * The change is saved to the configuration immediately.
      *
@@ -460,9 +638,7 @@ public class RepositoryRegistry implements ConfigurationListener {
             {
                 // Rollback
                 log.error("Could not save config after repository removal: {}", e.getMessage(),
e);
-                if (repo!=null) {
-                    managedRepositories.put(repo.getId(), repo);
-                }
+                managedRepositories.put(repo.getId(), repo);
                 throw new RepositoryException( "Could not save configuration after repository
removal: "+e.getMessage() );
             }
             finally
@@ -501,9 +677,7 @@ public class RepositoryRegistry implements ConfigurationListener {
             {
                 // Rollback
                 log.error("Could not save config after repository removal: {}", e.getMessage(),
e);
-                if (repo!=null) {
-                    remoteRepositories.put(repo.getId(), repo);
-                }
+                remoteRepositories.put(repo.getId(), repo);
                 throw new RepositoryException( "Could not save configuration after repository
removal: "+e.getMessage() );
             }
             finally

http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
index c2a7ac7..b1e763a 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
@@ -20,9 +20,21 @@ package org.apache.archiva.repository.maven2;
  */
 
 import org.apache.archiva.configuration.AbstractRepositoryConfiguration;
+import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.repository.*;
+import org.apache.archiva.repository.EditableManagedRepository;
+import org.apache.archiva.repository.EditableRemoteRepository;
+import org.apache.archiva.repository.EditableRepository;
+import org.apache.archiva.repository.ManagedRepository;
+import org.apache.archiva.repository.PasswordCredentials;
+import org.apache.archiva.repository.ReleaseScheme;
+import org.apache.archiva.repository.RemoteRepository;
+import org.apache.archiva.repository.RepositoryCredentials;
+import org.apache.archiva.repository.RepositoryException;
+import org.apache.archiva.repository.RepositoryProvider;
+import org.apache.archiva.repository.RepositoryType;
+import org.apache.archiva.repository.UnsupportedURIException;
 import org.apache.archiva.repository.features.ArtifactCleanupFeature;
 import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
@@ -32,8 +44,11 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
+import javax.inject.Inject;
+import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.Duration;
@@ -49,6 +64,10 @@ import java.util.Set;
 public class MavenRepositoryProvider implements RepositoryProvider
 {
 
+
+    @Inject
+    private ArchivaConfiguration archivaConfiguration;
+
     private static final Logger log = LoggerFactory.getLogger( MavenRepositoryProvider.class
);
 
     static final Set<RepositoryType> TYPES = new HashSet<>(  );
@@ -105,13 +124,39 @@ public class MavenRepositoryProvider implements RepositoryProvider
     public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration cfg )
throws RepositoryException
     {
         MavenManagedRepository repo = new MavenManagedRepository(cfg.getId() ,cfg.getName());
-        repo.setLocation( getURIFromString( cfg.getLocation() ) );
+        updateManagedInstance( repo, cfg );
+        return repo;
+    }
+
+    @Override
+    public void updateManagedInstance( EditableManagedRepository repo , ManagedRepositoryConfiguration
cfg ) throws RepositoryException
+    {
+        try
+        {
+            repo.setLocation( getURIFromString( cfg.getLocation() ) );
+        }
+        catch ( UnsupportedURIException e )
+        {
+            throw new RepositoryException( "The location entry is not a valid uri: "+cfg.getLocation()
);
+        }
         setBaseConfig( repo, cfg );
+        Path repoDir = Paths.get(repo.getAbsoluteLocation());
+        if (!Files.exists(repoDir)) {
+            try
+            {
+                Files.createDirectories( repoDir );
+            }
+            catch ( IOException e )
+            {
+                log.error("Could not create directory {} for repository {}", repo.getAbsoluteLocation(),
repo.getId(), e);
+                throw new RepositoryException( "Could not create directory for repository
"+repo.getAbsoluteLocation() );
+            }
+        }
         repo.setSchedulingDefinition(cfg.getRefreshCronExpression());
         repo.setBlocksRedeployment( cfg.isBlockRedeployments() );
         repo.setScanned( cfg.isScanned() );
         if (cfg.isReleases()) {
-            repo.addActiveReleaseScheme(ReleaseScheme.RELEASE);
+            repo.addActiveReleaseScheme( ReleaseScheme.RELEASE);
         }
         if (cfg.isSnapshots()) {
             repo.addActiveReleaseScheme(ReleaseScheme.SNAPSHOT);
@@ -129,10 +174,9 @@ public class MavenRepositoryProvider implements RepositoryProvider
         artifactCleanupFeature.setDeleteReleasedSnapshots( cfg.isDeleteReleasedSnapshots()
);
         artifactCleanupFeature.setRetentionCount( cfg.getRetentionCount() );
         artifactCleanupFeature.setRetentionTime( Period.ofDays( cfg.getRetentionTime() )
);
-
-        return repo;
     }
 
+
     @Override
     public ManagedRepository createStagingInstance( ManagedRepositoryConfiguration baseConfiguration
) throws RepositoryException
     {
@@ -144,6 +188,13 @@ public class MavenRepositoryProvider implements RepositoryProvider
     public RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration cfg ) throws
RepositoryException
     {
         MavenRemoteRepository repo = new MavenRemoteRepository( cfg.getId( ), cfg.getName(
) );
+        updateRemoteInstance( repo, cfg );
+        return repo;
+    }
+
+    @Override
+    public void updateRemoteInstance( EditableRemoteRepository repo, RemoteRepositoryConfiguration
cfg ) throws RepositoryException
+    {
         setBaseConfig( repo, cfg );
         repo.setCheckPath( cfg.getCheckPath() );
         repo.setSchedulingDefinition( cfg.getRefreshCronExpression() );
@@ -151,9 +202,10 @@ public class MavenRepositoryProvider implements RepositoryProvider
         {
             repo.setLocation(new URI(cfg.getUrl()));
         }
-        catch ( URISyntaxException e )
+        catch ( UnsupportedURIException | URISyntaxException e )
         {
             log.error("Could not set remote url "+cfg.getUrl());
+            throw new RepositoryException( "The url config is not a valid uri: "+cfg.getUrl()
);
         }
         repo.setTimeout( Duration.ofSeconds( cfg.getTimeout() ) );
         RemoteIndexFeature remoteIndexFeature = repo.getFeature( RemoteIndexFeature.class
).get();
@@ -189,8 +241,6 @@ public class MavenRepositoryProvider implements RepositoryProvider
             IndexCreationFeature indexCreationFeature = repo.getFeature( IndexCreationFeature.class
).get();
             indexCreationFeature.setIndexPath( getURIFromString( cfg.getIndexDir() ) );
         }
-
-        return repo;
     }
 
     @Override
@@ -321,9 +371,30 @@ public class MavenRepositoryProvider implements RepositoryProvider
         return stagingRepository;
     }
 
-    private void setBaseConfig( EditableRepository repo, AbstractRepositoryConfiguration
cfg) {
+    private void setBaseConfig( EditableRepository repo, AbstractRepositoryConfiguration
cfg) throws RepositoryException {
+        final String baseUriStr = archivaConfiguration.getConfiguration().getArchivaRuntimeConfiguration().getRepositoryBaseDirectory();
+        try
+        {
+            URI baseUri = new URI(baseUriStr);
+            repo.setBaseUri( baseUri );
+        }
+        catch ( URISyntaxException e )
+        {
+            log.error("Could not set base URI {}: {}", baseUriStr, e.getMessage(), e);
+            throw new RepositoryException( "Could not set base URI "+ baseUriStr);
+        }
         repo.setDescription( repo.getPrimaryLocale(), cfg.getDescription() );
         repo.setLayout( cfg.getLayout() );
 
     }
+
+    public ArchivaConfiguration getArchivaConfiguration( )
+    {
+        return archivaConfiguration;
+    }
+
+    public void setArchivaConfiguration( ArchivaConfiguration archivaConfiguration )
+    {
+        this.archivaConfiguration = archivaConfiguration;
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/1026c8ee/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
----------------------------------------------------------------------
diff --git a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
index aa5ddef..a43c398 100644
--- a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
+++ b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/repository/maven2/MavenRepositoryProviderTest.java
@@ -19,9 +19,18 @@ package org.apache.archiva.repository.maven2;
  * under the License.
  */
 
+import org.apache.archiva.common.utils.FileUtils;
 import org.apache.archiva.configuration.ArchivaConfiguration;
+import org.apache.archiva.configuration.ArchivaRuntimeConfiguration;
+import org.apache.archiva.configuration.Configuration;
+import org.apache.archiva.configuration.ConfigurationListener;
+import org.apache.archiva.configuration.DefaultArchivaConfiguration;
+import org.apache.archiva.configuration.IndeterminateConfigurationException;
 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
+import org.apache.archiva.metadata.repository.storage.maven2.conf.MockConfiguration;
+import org.apache.archiva.redback.components.registry.RegistryException;
+import org.apache.archiva.redback.components.registry.RegistryListener;
 import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.PasswordCredentials;
 import org.apache.archiva.repository.ReleaseScheme;
@@ -33,6 +42,7 @@ import org.apache.archiva.repository.features.IndexCreationFeature;
 import org.apache.archiva.repository.features.RemoteIndexFeature;
 import org.apache.archiva.repository.features.StagingRepositoryFeature;
 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -42,6 +52,8 @@ import org.springframework.test.context.ContextConfiguration;
 import javax.inject.Inject;
 import javax.inject.Named;
 import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.time.Duration;
 import java.time.Period;
 import java.time.temporal.ChronoUnit;
@@ -59,12 +71,25 @@ public class MavenRepositoryProviderTest
 
     MavenRepositoryProvider provider;
 
+    Path repoLocation;
+
 
     @Before
     public void setUp()
         throws Exception
     {
-        provider = new MavenRepositoryProvider();
+        provider = new MavenRepositoryProvider( );
+        MockConfiguration mockConfiguration =new MockConfiguration();
+        mockConfiguration.getConfiguration().setArchivaRuntimeConfiguration( new ArchivaRuntimeConfiguration()
);
+        mockConfiguration.getConfiguration().getArchivaRuntimeConfiguration().setRepositoryBaseDirectory(
"repositories" );
+        provider.setArchivaConfiguration( mockConfiguration );
+    }
+
+    @After
+    public void cleanUp() {
+        if (repoLocation!=null && Files.exists( repoLocation )) {
+            FileUtils.deleteQuietly( repoLocation );
+        }
     }
 
     @Test
@@ -82,7 +107,8 @@ public class MavenRepositoryProviderTest
         repo.setName("Managed Test Repo 001");
         repo.setDescription( "This is a managed test" );
         repo.setRetentionTime( 37 );
-        repo.setLocation( "file:///test/dir/repository" );
+        repoLocation = Files.createTempDirectory( "test-repo-001");
+        repo.setLocation( repoLocation.toAbsolutePath().toString() );
         repo.setSnapshots( true );
         repo.setReleases( true );
         repo.setRefreshCronExpression( "4 0 0 ? * TUE" );
@@ -99,7 +125,10 @@ public class MavenRepositoryProviderTest
 
         ManagedRepository mr = provider.createManagedInstance( repo );
         assertNotNull(mr.getLocation());
-        assertEquals("file:///test/dir/repository", mr.getLocation().toString());
+        String repoUri = repoLocation.toUri().toString();
+        assertTrue(Files.exists(repoLocation));
+        repoUri = repoUri.substring( 0, repoUri.length()-1 );
+        assertEquals(repoUri, mr.getLocation().toString());
         assertEquals("This is a managed test", mr.getDescription());
         assertEquals("Managed Test Repo 001", mr.getName());
         assertEquals(2, mr.getActiveReleaseSchemes().size());


Mime
View raw message