You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2008/03/15 17:42:44 UTC
svn commit: r637438 - in /maven/artifact/trunk/src:
main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java
Author: brianf
Date: Sat Mar 15 09:42:24 2008
New Revision: 637438
URL: http://svn.apache.org/viewvc?rev=637438&view=rev
Log:
refactor wagon and add tests in preparation for MNG-3461. Note: this does not change current functionality and adds tests to establish the old functionality.
Modified:
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java?rev=637438&r1=637437&r2=637438&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java (original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java Sat Mar 15 09:42:24 2008
@@ -19,6 +19,17 @@
* under the License.
*/
+import java.io.File;
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.metadata.ArtifactMetadata;
import org.apache.maven.artifact.repository.ArtifactRepository;
@@ -54,16 +65,6 @@
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.xml.Xpp3Dom;
-import java.io.File;
-import java.io.IOException;
-import java.security.NoSuchAlgorithmException;
-import java.text.MessageFormat;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
/** @plexus.component */
public class DefaultWagonManager
extends AbstractLogEnabled
@@ -87,7 +88,8 @@
private Map serverPermissionsMap = new HashMap();
- private Map mirrors = new HashMap();
+ //used LinkedMap to preserve the order.
+ private Map mirrors = new LinkedHashMap();
/** Map( String, XmlPlexusConfiguration ) with the repository id and the wagon configuration */
private Map serverConfigurationMap = new HashMap();
@@ -672,7 +674,7 @@
public ArtifactRepository getMirrorRepository( ArtifactRepository repository )
{
- ArtifactRepository mirror = getMirror( repository.getId() );
+ ArtifactRepository mirror = getMirror( repository );
if ( mirror != null )
{
repository = repositoryFactory.createArtifactRepository( mirror.getId(), mirror.getUrl(),
@@ -808,18 +810,56 @@
;
}
- public ArtifactRepository getMirror( String mirrorOf )
- {
- ArtifactRepository repository = (ArtifactRepository) mirrors.get( mirrorOf );
+ /**
+ * This method finds a matching mirror for the selected repository. If there is an exact match,
+ * this will be used. If there is no exact match, then the list of mirrors is examined to see
+ * if a pattern applies.
+ * @param originalRepository See if there is a mirror for this repository.
+ * @return the selected mirror or null if none are found.
+ */
+ public ArtifactRepository getMirror( ArtifactRepository originalRepository )
+ {
+ ArtifactRepository selectedMirror = (ArtifactRepository) mirrors.get( originalRepository.getId() );
+ if ( null == selectedMirror )
+ {
+ // Process the patterns in order. First one that matches wins.
+ Set keySet = mirrors.keySet();
+ if ( keySet != null )
+ {
+ Iterator iter = keySet.iterator();
+ while ( iter.hasNext() )
+ {
+ String pattern = (String) iter.next();
+ if ( matchPattern( originalRepository, pattern ) )
+ {
+ selectedMirror = (ArtifactRepository) mirrors.get( pattern );
+ }
+ }
+ }
- if ( repository == null )
+ }
+ return selectedMirror;
+ }
+
+ /**
+ * This method checks if the pattern matches the originalRepository. Currently only wildcard
+ * matches are peformed on the repository id. Wildcard == '*'
+ * @param originalRepository to compare for a match.
+ * @param pattern used for match. Currently only '*' is supported.
+ * @return true if the repository is a match to this pattern.
+ */
+ public boolean matchPattern (ArtifactRepository originalRepository, String pattern)
+ {
+ if (WILDCARD.equals( pattern ) || pattern.equals( originalRepository.getId() ))
{
- repository = (ArtifactRepository) mirrors.get( WILDCARD );
+ return true;
+ }
+ else
+ {
+ return false;
}
-
- return repository;
}
-
+
/**
* Set the proxy used for a particular protocol.
*
Modified: maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java?rev=637438&r1=637437&r2=637438&view=diff
==============================================================================
--- maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java (original)
+++ maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java Sat Mar 15 09:42:24 2008
@@ -28,6 +28,7 @@
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
import org.apache.maven.artifact.repository.DefaultArtifactRepository;
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.wagon.UnsupportedProtocolException;
import org.apache.maven.wagon.Wagon;
@@ -57,6 +58,59 @@
wagonManager = (WagonManager) lookup( WagonManager.ROLE );
}
+ /**
+ * Check that lookups with exact matches work and that no matches don't corrupt the repo.
+ */
+ public void testMirrorLookup()
+ {
+ wagonManager.addMirror( "a", "a", "http://a" );
+ wagonManager.addMirror( "b", "b", "http://b" );
+
+ ArtifactRepository repo = null;
+ repo = wagonManager.getMirrorRepository( getRepo("a","http://a.a" ));
+ assertEquals( "http://a", repo.getUrl() );
+
+ repo = wagonManager.getMirrorRepository( getRepo("b","http://a.a" ));
+ assertEquals( "http://b", repo.getUrl() );
+
+ repo = wagonManager.getMirrorRepository( getRepo("c","http://c.c") );
+ assertEquals( "http://c.c", repo.getUrl() );
+
+
+ }
+
+ /**
+ * Check that wildcards don't override exact id matches.
+ */
+ public void testMirrorWildcardLookup()
+ {
+ wagonManager.addMirror( "a", "a", "http://a" );
+ wagonManager.addMirror( "b", "b", "http://b" );
+ wagonManager.addMirror( "c", "*", "http://wildcard" );
+
+ ArtifactRepository repo = null;
+ repo = wagonManager.getMirrorRepository( getRepo("a","http://a.a" ));
+ assertEquals( "http://a", repo.getUrl() );
+
+ repo = wagonManager.getMirrorRepository( getRepo("b","http://a.a" ));
+ assertEquals( "http://b", repo.getUrl() );
+
+ repo = wagonManager.getMirrorRepository( getRepo("c","http://c.c") );
+ assertEquals( "http://wildcard", repo.getUrl() );
+
+ }
+
+ /**
+ * Build an ArtifactRepository object.
+ * @param id
+ * @param url
+ * @return
+ */
+ private ArtifactRepository getRepo (String id, String url)
+ {
+ return (ArtifactRepository) new DefaultArtifactRepository(id,url,new DefaultRepositoryLayout());
+ }
+
public void testDefaultWagonManager()
throws Exception
{