You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2016/05/01 12:56:03 UTC

[01/50] [abbrv] maven-aether git commit: Tweaked configuration for maven-bundle-plugin to use some more properties for reduced duplication

Repository: maven-aether
Updated Branches:
  refs/heads/master [created] 4cf5f7a40


Tweaked configuration for maven-bundle-plugin to use some more properties for reduced duplication


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/9940845d
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/9940845d
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/9940845d

Branch: refs/heads/master
Commit: 9940845d2c69d220bf5378fa6d1a488e8d26ba28
Parents: 87fa055
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun May 18 19:46:41 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun May 18 19:46:41 2014 +0200

----------------------------------------------------------------------
 pom.xml | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/9940845d/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 1addfa1..858f065 100644
--- a/pom.xml
+++ b/pom.xml
@@ -127,6 +127,8 @@
   </modules>
 
   <properties>
+    <bundle.env>J2SE-1.5</bundle.env>
+    <bundle.vendor>Eclipse Aether</bundle.vendor>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     <surefire.redirectTestOutputToFile>true</surefire.redirectTestOutputToFile>
@@ -252,9 +254,9 @@
             <instructions>
               <Bundle-DocURL>${project.url}</Bundle-DocURL>
               <Bundle-Name>${project.name}</Bundle-Name>
-              <Bundle-RequiredExecutionEnvironment>J2SE-1.5</Bundle-RequiredExecutionEnvironment>
+              <Bundle-RequiredExecutionEnvironment>${bundle.env}</Bundle-RequiredExecutionEnvironment>
               <Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName>
-              <Bundle-Vendor>Eclipse Aether</Bundle-Vendor>
+              <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor>
               <Bundle-Version>${bundle.osgiVersion}</Bundle-Version>
               <Export-Package>org.eclipse.aether.internal.*;x-internal:=true,org.eclipse.aether.*</Export-Package>
             </instructions>
@@ -424,9 +426,9 @@
                 <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
                 <Bundle-Name>${project.name} Sources</Bundle-Name>
                 <Bundle-License>http://www.eclipse.org/legal/epl-v10.html</Bundle-License>
-                <Bundle-RequiredExecutionEnvironment>J2SE-1.5</Bundle-RequiredExecutionEnvironment>
+                <Bundle-RequiredExecutionEnvironment>${bundle.env}</Bundle-RequiredExecutionEnvironment>
                 <Bundle-SymbolicName>${bundle.symbolicName}.source</Bundle-SymbolicName>
-                <Bundle-Vendor>Eclipse Aether</Bundle-Vendor>
+                <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor>
                 <Bundle-Version>${bundle.osgiVersion}</Bundle-Version>
                 <Eclipse-SourceBundle>${bundle.symbolicName};version="${bundle.osgiVersion}";roots:="."</Eclipse-SourceBundle>
               </manifestEntries>


[04/50] [abbrv] maven-aether git commit: Optimized non-proxy host matching in DefaultProxySelector

Posted by ol...@apache.org.
Optimized non-proxy host matching in DefaultProxySelector


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/705cd01c
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/705cd01c
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/705cd01c

Branch: refs/heads/master
Commit: 705cd01c0b83d8d0cfe88486372c4ff7cb92a313
Parents: b7fc57c
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun May 25 16:33:12 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun May 25 16:33:12 2014 +0200

----------------------------------------------------------------------
 .../util/repository/DefaultProxySelector.java   | 48 +++++++++++++++-----
 .../repository/DefaultProxySelectorTest.java    | 28 ++++++------
 2 files changed, 50 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/705cd01c/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
index c761aa7..fc30c55 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.StringTokenizer;
+import java.util.regex.Pattern;
 
 import org.eclipse.aether.repository.Proxy;
 import org.eclipse.aether.repository.ProxySelector;
@@ -40,6 +41,10 @@ public final class DefaultProxySelector
      */
     public DefaultProxySelector add( Proxy proxy, String nonProxyHosts )
     {
+        if ( proxy == null )
+        {
+            throw new IllegalArgumentException( "proxy not specified" );
+        }
         proxies.add( new ProxyDef( proxy, nonProxyHosts ) );
 
         return this;
@@ -52,7 +57,7 @@ public final class DefaultProxySelector
         String host = repository.getHost();
         for ( ProxyDef proxy : proxies )
         {
-            if ( !isNonProxyHosts( host, proxy.nonProxyHosts ) )
+            if ( !proxy.nonProxyHosts.isNonProxyHost( host ) )
             {
                 String key = proxy.proxy.getType().toLowerCase( Locale.ENGLISH );
                 if ( !candidates.containsKey( key ) )
@@ -86,22 +91,41 @@ public final class DefaultProxySelector
         return ( proxy != null ) ? proxy.proxy : null;
     }
 
-    static boolean isNonProxyHosts( String host, String nonProxyHosts )
+    static class NonProxyHosts
     {
-        if ( host != null && nonProxyHosts != null && nonProxyHosts.length() > 0 )
+
+        private final Pattern[] patterns;
+
+        public NonProxyHosts( String nonProxyHosts )
+        {
+            List<Pattern> patterns = new ArrayList<Pattern>();
+            if ( nonProxyHosts != null )
+            {
+                for ( StringTokenizer tokenizer = new StringTokenizer( nonProxyHosts, "|" ); tokenizer.hasMoreTokens(); )
+                {
+                    String pattern = tokenizer.nextToken();
+                    pattern = pattern.replace( ".", "\\." ).replace( "*", ".*" );
+                    patterns.add( Pattern.compile( pattern ) );
+                }
+            }
+            this.patterns = patterns.toArray( new Pattern[patterns.size()] );
+        }
+
+        boolean isNonProxyHost( String host )
         {
-            for ( StringTokenizer tokenizer = new StringTokenizer( nonProxyHosts, "|" ); tokenizer.hasMoreTokens(); )
+            if ( host != null )
             {
-                String pattern = tokenizer.nextToken();
-                pattern = pattern.replace( ".", "\\." ).replace( "*", ".*" );
-                if ( host.matches( pattern ) )
+                for ( Pattern pattern : patterns )
                 {
-                    return true;
+                    if ( pattern.matcher( host ).matches() )
+                    {
+                        return true;
+                    }
                 }
             }
+            return false;
         }
 
-        return false;
     }
 
     static class ProxyDef
@@ -109,12 +133,12 @@ public final class DefaultProxySelector
 
         final Proxy proxy;
 
-        final String nonProxyHosts;
+        final NonProxyHosts nonProxyHosts;
 
         public ProxyDef( Proxy proxy, String nonProxyHosts )
         {
             this.proxy = proxy;
-            this.nonProxyHosts = nonProxyHosts;
+            this.nonProxyHosts = new NonProxyHosts( nonProxyHosts );
         }
 
     }

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/705cd01c/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
index ef25a86..1da7ac6 100644
--- a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
+++ b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,27 +20,27 @@ import org.junit.Test;
 public class DefaultProxySelectorTest
 {
 
-    private boolean isNonProxyHosts( String host, String nonProxyHosts )
+    private boolean isNonProxyHost( String host, String nonProxyHosts )
     {
-        return DefaultProxySelector.isNonProxyHosts( host, nonProxyHosts );
+        return new DefaultProxySelector.NonProxyHosts( nonProxyHosts ).isNonProxyHost( host );
     }
 
     @Test
-    public void testIsNonProxyHosts()
+    public void testIsNonProxyHost()
     {
-        assertFalse( isNonProxyHosts( "www.sonatype.org", null ) );
-        assertFalse( isNonProxyHosts( "www.sonatype.org", "" ) );
+        assertFalse( isNonProxyHost( "www.sonatype.org", null ) );
+        assertFalse( isNonProxyHost( "www.sonatype.org", "" ) );
 
-        assertTrue( isNonProxyHosts( "www.sonatype.org", "*" ) );
-        assertTrue( isNonProxyHosts( "www.sonatype.org", "*.org" ) );
-        assertTrue( isNonProxyHosts( "www.sonatype.org", "www.*" ) );
-        assertTrue( isNonProxyHosts( "www.sonatype.org", "www.*.org" ) );
+        assertTrue( isNonProxyHost( "www.sonatype.org", "*" ) );
+        assertTrue( isNonProxyHost( "www.sonatype.org", "*.org" ) );
+        assertTrue( isNonProxyHost( "www.sonatype.org", "www.*" ) );
+        assertTrue( isNonProxyHost( "www.sonatype.org", "www.*.org" ) );
 
-        assertFalse( isNonProxyHosts( "www.sonatype.org", "www.sonatype.com" ) );
-        assertFalse( isNonProxyHosts( "www.sonatype.org", "*.com" ) );
-        assertFalse( isNonProxyHosts( "www.sonatype.org", "sonatype.org" ) );
+        assertFalse( isNonProxyHost( "www.sonatype.org", "www.sonatype.com" ) );
+        assertFalse( isNonProxyHost( "www.sonatype.org", "*.com" ) );
+        assertFalse( isNonProxyHost( "www.sonatype.org", "sonatype.org" ) );
 
-        assertTrue( isNonProxyHosts( "www.sonatype.org", "*.com|*.org" ) );
+        assertTrue( isNonProxyHost( "www.sonatype.org", "*.com|*.org" ) );
     }
 
 }


[18/50] [abbrv] maven-aether git commit: Added some comments

Posted by ol...@apache.org.
Added some comments


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/fa75e13f
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/fa75e13f
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/fa75e13f

Branch: refs/heads/master
Commit: fa75e13fd14b8c115aecc9f7e37f2e2df2d77cae
Parents: cbcde59
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Thu Aug 28 15:53:12 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Thu Aug 28 15:53:12 2014 +0200

----------------------------------------------------------------------
 .../java/org/eclipse/aether/transport/http/HttpTransporter.java    | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/fa75e13f/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
index 1eda25e..4e21949 100644
--- a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
+++ b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
@@ -344,10 +344,12 @@ final class HttpTransporter
                     int status = response.getStatusLine().getStatusCode();
                     if ( status < 300 || status == HttpStatus.SC_METHOD_NOT_ALLOWED )
                     {
+                        // directory was created or already existed
                         break;
                     }
                     else if ( status == HttpStatus.SC_CONFLICT )
                     {
+                        // parent directory needs to be created first
                         continue;
                     }
                     handleStatus( response );


[05/50] [abbrv] maven-aether git commit: Bug 435715 - DefaultProxySelector does not process non-proxy hosts in a case-insensitive manner

Posted by ol...@apache.org.
Bug 435715 - DefaultProxySelector does not process non-proxy hosts in a case-insensitive manner

Fixed implementation to use case-insensitive matching for non-proxy hosts


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/5595ddf8
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/5595ddf8
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/5595ddf8

Branch: refs/heads/master
Commit: 5595ddf85c00b468d31ab8a5a8414b02387d92d6
Parents: 705cd01
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun May 25 16:57:21 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun May 25 16:57:21 2014 +0200

----------------------------------------------------------------------
 .../util/repository/DefaultProxySelector.java   |  4 +-
 .../repository/DefaultProxySelectorTest.java    | 43 +++++++++++++++-----
 2 files changed, 34 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/5595ddf8/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
index fc30c55..3c5b03b 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
@@ -36,7 +36,7 @@ public final class DefaultProxySelector
      * a given repository will be used.
      * 
      * @param proxy The proxy definition to add, must not be {@code null}.
-     * @param nonProxyHosts The list of hosts to exclude from proxying, may be {@code null}.
+     * @param nonProxyHosts The list of (case-insensitive) host names to exclude from proxying, may be {@code null}.
      * @return This proxy selector for chaining, never {@code null}.
      */
     public DefaultProxySelector add( Proxy proxy, String nonProxyHosts )
@@ -105,7 +105,7 @@ public final class DefaultProxySelector
                 {
                     String pattern = tokenizer.nextToken();
                     pattern = pattern.replace( ".", "\\." ).replace( "*", ".*" );
-                    patterns.add( Pattern.compile( pattern ) );
+                    patterns.add( Pattern.compile( pattern, Pattern.CASE_INSENSITIVE ) );
                 }
             }
             this.patterns = patterns.toArray( new Pattern[patterns.size()] );

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/5595ddf8/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
index 1da7ac6..5f06982 100644
--- a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
+++ b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
@@ -26,21 +26,42 @@ public class DefaultProxySelectorTest
     }
 
     @Test
-    public void testIsNonProxyHost()
+    public void testIsNonProxyHost_Blank()
     {
-        assertFalse( isNonProxyHost( "www.sonatype.org", null ) );
-        assertFalse( isNonProxyHost( "www.sonatype.org", "" ) );
+        assertFalse( isNonProxyHost( "www.eclipse.org", null ) );
+        assertFalse( isNonProxyHost( "www.eclipse.org", "" ) );
+    }
 
-        assertTrue( isNonProxyHost( "www.sonatype.org", "*" ) );
-        assertTrue( isNonProxyHost( "www.sonatype.org", "*.org" ) );
-        assertTrue( isNonProxyHost( "www.sonatype.org", "www.*" ) );
-        assertTrue( isNonProxyHost( "www.sonatype.org", "www.*.org" ) );
+    @Test
+    public void testIsNonProxyHost_Wildcard()
+    {
+        assertTrue( isNonProxyHost( "www.eclipse.org", "*" ) );
+        assertTrue( isNonProxyHost( "www.eclipse.org", "*.org" ) );
+        assertFalse( isNonProxyHost( "www.eclipse.org", "*.com" ) );
+        assertTrue( isNonProxyHost( "www.eclipse.org", "www.*" ) );
+        assertTrue( isNonProxyHost( "www.eclipse.org", "www.*.org" ) );
+    }
 
-        assertFalse( isNonProxyHost( "www.sonatype.org", "www.sonatype.com" ) );
-        assertFalse( isNonProxyHost( "www.sonatype.org", "*.com" ) );
-        assertFalse( isNonProxyHost( "www.sonatype.org", "sonatype.org" ) );
+    @Test
+    public void testIsNonProxyHost_Multiple()
+    {
+        assertTrue( isNonProxyHost( "eclipse.org", "eclipse.org|host2" ) );
+        assertTrue( isNonProxyHost( "eclipse.org", "host1|eclipse.org" ) );
+        assertTrue( isNonProxyHost( "eclipse.org", "host1|eclipse.org|host2" ) );
+    }
 
-        assertTrue( isNonProxyHost( "www.sonatype.org", "*.com|*.org" ) );
+    @Test
+    public void testIsNonProxyHost_Misc()
+    {
+        assertFalse( isNonProxyHost( "www.eclipse.org", "www.eclipse.com" ) );
+        assertFalse( isNonProxyHost( "www.eclipse.org", "eclipse.org" ) );
+    }
+
+    @Test
+    public void testIsNonProxyHost_CaseInsensitivity()
+    {
+        assertTrue( isNonProxyHost( "www.eclipse.org", "www.ECLIPSE.org" ) );
+        assertTrue( isNonProxyHost( "www.ECLIPSE.org", "www.eclipse.org" ) );
     }
 
 }


[42/50] [abbrv] maven-aether git commit: Bug 449590 - DefaultRepositoryCache.put() with null data fails to update cache

Posted by ol...@apache.org.
Bug 449590 - DefaultRepositoryCache.put() with null data fails to update cache

Fixed DefaultRepositoryCache.put() to remove mapping if value is null


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/396bc8c9
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/396bc8c9
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/396bc8c9

Branch: refs/heads/master
Commit: 396bc8c9668a55f2f5d03527ade61a55d0c511fe
Parents: ed23cf8
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat Nov 1 17:40:19 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat Nov 1 17:40:19 2014 +0100

----------------------------------------------------------------------
 .../eclipse/aether/DefaultRepositoryCache.java  |   6 +-
 .../aether/DefaultRepositoryCacheTest.java      | 103 +++++++++++++++++++
 2 files changed, 108 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/396bc8c9/aether-api/src/main/java/org/eclipse/aether/DefaultRepositoryCache.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/DefaultRepositoryCache.java b/aether-api/src/main/java/org/eclipse/aether/DefaultRepositoryCache.java
index 94664ea..12d2789 100644
--- a/aether-api/src/main/java/org/eclipse/aether/DefaultRepositoryCache.java
+++ b/aether-api/src/main/java/org/eclipse/aether/DefaultRepositoryCache.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2012 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,10 @@ public final class DefaultRepositoryCache
         {
             cache.put( key, data );
         }
+        else
+        {
+            cache.remove( key );
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/396bc8c9/aether-api/src/test/java/org/eclipse/aether/DefaultRepositoryCacheTest.java
----------------------------------------------------------------------
diff --git a/aether-api/src/test/java/org/eclipse/aether/DefaultRepositoryCacheTest.java b/aether-api/src/test/java/org/eclipse/aether/DefaultRepositoryCacheTest.java
new file mode 100644
index 0000000..59dbd76
--- /dev/null
+++ b/aether-api/src/test/java/org/eclipse/aether/DefaultRepositoryCacheTest.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Sonatype, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Sonatype, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.aether;
+
+import static org.junit.Assert.*;
+
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.junit.Test;
+
+public class DefaultRepositoryCacheTest
+{
+
+    private DefaultRepositoryCache cache = new DefaultRepositoryCache();
+
+    private RepositorySystemSession session = new DefaultRepositorySystemSession();
+
+    private Object get( Object key )
+    {
+        return cache.get( session, key );
+    }
+
+    private void put( Object key, Object value )
+    {
+        cache.put( session, key, value );
+    }
+
+    @Test( expected = RuntimeException.class )
+    public void testGet_NullKey()
+    {
+        get( null );
+    }
+
+    @Test( expected = RuntimeException.class )
+    public void testPut_NullKey()
+    {
+        put( null, "data" );
+    }
+
+    @Test
+    public void testGetPut()
+    {
+        Object key = "key";
+        assertNull( get( key ) );
+        put( key, "value" );
+        assertEquals( "value", get( key ) );
+        put( key, "changed" );
+        assertEquals( "changed", get( key ) );
+        put( key, null );
+        assertNull( get( key ) );
+    }
+
+    @Test( timeout = 10000 )
+    public void testConcurrency()
+        throws Exception
+    {
+        final AtomicReference<Throwable> error = new AtomicReference<Throwable>();
+        Thread threads[] = new Thread[20];
+        for ( int i = 0; i < threads.length; i++ )
+        {
+            threads[i] = new Thread()
+            {
+                @Override
+                public void run()
+                {
+                    for ( int i = 0; i < 100; i++ )
+                    {
+                        String key = UUID.randomUUID().toString();
+                        try
+                        {
+                            put( key, Boolean.TRUE );
+                            assertEquals( Boolean.TRUE, get( key ) );
+                        }
+                        catch ( Throwable t )
+                        {
+                            error.compareAndSet( null, t );
+                            t.printStackTrace();
+                        }
+                    }
+                }
+            };
+        }
+        for ( Thread thread : threads )
+        {
+            thread.start();
+        }
+        for ( Thread thread : threads )
+        {
+            thread.join();
+        }
+        assertNull( String.valueOf( error.get() ), error.get() );
+    }
+
+}


[09/50] [abbrv] maven-aether git commit: Replaced discouraged StringTokenizer usage with String.split()

Posted by ol...@apache.org.
Replaced discouraged StringTokenizer usage with String.split()


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/caf41eca
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/caf41eca
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/caf41eca

Branch: refs/heads/master
Commit: caf41ecab637210499b7c094bed85e41567e7655
Parents: 39accef
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun May 25 22:43:07 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun May 25 22:43:07 2014 +0200

----------------------------------------------------------------------
 .../util/repository/DefaultProxySelector.java      | 17 ++++++++---------
 .../util/repository/DefaultProxySelectorTest.java  |  6 ++++++
 2 files changed, 14 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/caf41eca/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
index 0a3cb71..a47b5ac 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
@@ -11,12 +11,12 @@
 package org.eclipse.aether.util.repository;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import java.util.StringTokenizer;
 import java.util.regex.Pattern;
 
 import org.eclipse.aether.repository.Proxy;
@@ -53,9 +53,8 @@ public final class DefaultProxySelector
      * a given repository will be used.
      * 
      * @param proxy The proxy definition to add, must not be {@code null}.
-     * @param nonProxyHosts The list of (case-insensitive) host names to exclude from proxying, may be {@code null} but
-     *            must not contain {@code null} elements. The asterisk character ('*') may be used as wildcard in a host
-     *            name.
+     * @param nonProxyHosts The list of (case-insensitive) host names to exclude from proxying, may be {@code null}. The
+     *            asterisk character ('*') may be used as wildcard in a host name.
      * @return This proxy selector for chaining, never {@code null}.
      * @since 1.1.0
      */
@@ -123,6 +122,10 @@ public final class DefaultProxySelector
             {
                 for ( String nonProxyHost : nonProxyHosts )
                 {
+                    if ( nonProxyHost == null || nonProxyHost.length() <= 0 )
+                    {
+                        continue;
+                    }
                     String pattern = nonProxyHost;
                     pattern = pattern.replace( ".", "\\." ).replace( "*", ".*" );
                     patterns.add( Pattern.compile( pattern, Pattern.CASE_INSENSITIVE ) );
@@ -136,11 +139,7 @@ public final class DefaultProxySelector
             List<String> hosts = null;
             if ( nonProxyHosts != null )
             {
-                hosts = new ArrayList<String>();
-                for ( StringTokenizer tokenizer = new StringTokenizer( nonProxyHosts, "|" ); tokenizer.hasMoreTokens(); )
-                {
-                    hosts.add( tokenizer.nextToken() );
-                }
+                hosts = Arrays.asList( nonProxyHosts.split( "\\|" ) );
             }
             return hosts;
         }

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/caf41eca/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
index b33c1b2..a8cc141 100644
--- a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
+++ b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
@@ -37,9 +37,13 @@ public class DefaultProxySelectorTest
     {
         assertFalse( isNonProxyHost( "www.eclipse.org", (String) null ) );
         assertFalse( isNonProxyHost( "www.eclipse.org", "" ) );
+        assertFalse( isNonProxyHost( "", "" ) );
 
         assertFalse( isNonProxyHost( "www.eclipse.org", (String[]) null ) );
         assertFalse( isNonProxyHost( "www.eclipse.org", new String[0] ) );
+        assertFalse( isNonProxyHost( "", new String[0] ) );
+        assertFalse( isNonProxyHost( "", new String[] { null } ) );
+        assertFalse( isNonProxyHost( "", new String[] { "" } ) );
     }
 
     @Test
@@ -59,6 +63,8 @@ public class DefaultProxySelectorTest
         assertTrue( isNonProxyHost( "eclipse.org", "host1|eclipse.org" ) );
         assertTrue( isNonProxyHost( "eclipse.org", "host1|eclipse.org|host2" ) );
 
+        assertFalse( isNonProxyHost( "", "||host||" ) );
+
         // controversial (no trimming) but consistent with JRE's handling of http.nonProxyHosts
         assertFalse( isNonProxyHost( "eclipse.org", "host1| eclipse.org |host2" ) );
         assertFalse( isNonProxyHost( "eclipse.org", "host1|eclipse.org " ) );


[08/50] [abbrv] maven-aether git commit: Tweaked structure of API docs

Posted by ol...@apache.org.
Tweaked structure of API docs


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/39accefb
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/39accefb
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/39accefb

Branch: refs/heads/master
Commit: 39accefbdeded3f9b36a26415e34493d13d053f4
Parents: ce19988
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun May 25 18:25:17 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun May 25 18:25:17 2014 +0200

----------------------------------------------------------------------
 .../aether/util/repository/DefaultProxySelector.java  | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/39accefb/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
index 0fed710..0a3cb71 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
@@ -35,13 +35,12 @@ public final class DefaultProxySelector
     /**
      * Adds the specified proxy definition to the selector. Proxy definitions are ordered, the first matching proxy for
      * a given repository will be used.
-     * <p>
-     * The syntax of the non-proxy host list matches that of the property "http.nonProxyHosts" from the JRE, i.e. the
-     * asterisk character ('*') serves as a wildcard for pattern matching. Multiple non-proxy hosts are separated by the
-     * pipe character ('|') but note that surrounding whitespace is not trimmed from the entries.
      * 
      * @param proxy The proxy definition to add, must not be {@code null}.
-     * @param nonProxyHosts The list of (case-insensitive) host names to exclude from proxying, may be {@code null}.
+     * @param nonProxyHosts The list of (case-insensitive) host names to exclude from proxying, may be {@code null}. The
+     *            syntax of this list matches that of the property "http.nonProxyHosts" from the JRE, i.e. the asterisk
+     *            character ('*') serves as a wildcard for pattern matching. Multiple non-proxy hosts are separated by
+     *            the pipe character ('|') but note that surrounding whitespace is not trimmed from the entries.
      * @return This proxy selector for chaining, never {@code null}.
      */
     public DefaultProxySelector add( Proxy proxy, String nonProxyHosts )
@@ -52,12 +51,11 @@ public final class DefaultProxySelector
     /**
      * Adds the specified proxy definition to the selector. Proxy definitions are ordered, the first matching proxy for
      * a given repository will be used.
-     * <p>
-     * The asterisk character ('*') may be used as wildcard in a host name.
      * 
      * @param proxy The proxy definition to add, must not be {@code null}.
      * @param nonProxyHosts The list of (case-insensitive) host names to exclude from proxying, may be {@code null} but
-     *            must not contain {@code null} elements.
+     *            must not contain {@code null} elements. The asterisk character ('*') may be used as wildcard in a host
+     *            name.
      * @return This proxy selector for chaining, never {@code null}.
      * @since 1.1.0
      */


[22/50] [abbrv] maven-aether git commit: Bug 442576 - Allow to disable WebDav support

Posted by ol...@apache.org.
Bug 442576 - Allow to disable WebDav support

Added configuration property aether.connector.http.webDav[.repoId] to forcefully disable WebDAV mode during uploads


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/cd3cb86f
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/cd3cb86f
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/cd3cb86f

Branch: refs/heads/master
Commit: cd3cb86f23644784e43b8fc2ae166b6a312b6073
Parents: 6ac187b
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat Aug 30 21:25:06 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat Aug 30 21:25:06 2014 +0200

----------------------------------------------------------------------
 .../aether/transport/http/HttpTransporter.java  | 36 +++++++++++++-------
 .../aether/transport/http/LocalState.java       | 30 +++++++++++++---
 .../aether/transport/http/HttpServer.java       | 25 ++++++++++----
 .../transport/http/HttpTransporterTest.java     | 33 ++++++++++++++++--
 4 files changed, 99 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/cd3cb86f/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
index 4e21949..a801373 100644
--- a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
+++ b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 Sonatype, Inc.
+ * Copyright (c) 2013, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -304,26 +304,38 @@ final class HttpTransporter
     private void prepare( HttpUriRequest request, SharingHttpContext context )
     {
         boolean put = HttpPut.METHOD_NAME.equalsIgnoreCase( request.getMethod() );
-        if ( state.getWebDav() == null && ( put || isPayloadPresent( request ) ) )
+        if ( ( put || isPayloadPresent( request ) ) && !state.isProbed() )
         {
-            try
-            {
-                HttpOptions req = commonHeaders( new HttpOptions( request.getURI() ) );
-                HttpResponse response = client.execute( server, req, context );
-                state.setWebDav( isWebDav( response ) );
-                EntityUtils.consumeQuietly( response.getEntity() );
-            }
-            catch ( IOException e )
+            synchronized ( state )
             {
-                logger.debug( "Failed to prepare HTTP context", e );
+                if ( !state.isProbed() )
+                {
+                    probe( request, context );
+                    state.setProbed();
+                }
             }
         }
-        if ( put && Boolean.TRUE.equals( state.getWebDav() ) )
+        if ( put && state.isWebDav() )
         {
             mkdirs( request.getURI(), context );
         }
     }
 
+    private void probe( HttpUriRequest request, SharingHttpContext context )
+    {
+        try
+        {
+            HttpOptions req = commonHeaders( new HttpOptions( request.getURI() ) );
+            HttpResponse response = client.execute( server, req, context );
+            state.setWebDav( isWebDav( response ) );
+            EntityUtils.consumeQuietly( response.getEntity() );
+        }
+        catch ( IOException e )
+        {
+            logger.debug( "Failed to probe HTTP server", e );
+        }
+    }
+
     private boolean isWebDav( HttpResponse response )
     {
         return response.containsHeader( HttpHeaders.DAV );

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/cd3cb86f/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/LocalState.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/LocalState.java b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/LocalState.java
index 8275973..1cc771d 100644
--- a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/LocalState.java
+++ b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/LocalState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 Sonatype, Inc.
+ * Copyright (c) 2013, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@ import org.apache.http.conn.ClientConnectionManager;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.transport.http.GlobalState.CompoundKey;
+import org.eclipse.aether.util.ConfigUtils;
 
 /**
  * Container for HTTP-related state that can be shared across invocations of the transporter to optimize the
@@ -29,6 +30,8 @@ final class LocalState
     implements Closeable
 {
 
+    private static final String CONFIG_PROP_WEBDAV = "aether.connector.http.webDav";
+
     private final GlobalState global;
 
     private final ClientConnectionManager connMgr;
@@ -39,6 +42,8 @@ final class LocalState
 
     private final CompoundKey expectContinueKey;
 
+    private volatile boolean probed;
+
     private volatile Boolean expectContinue;
 
     private volatile Boolean webDav;
@@ -63,6 +68,10 @@ final class LocalState
             expectContinueKey = new CompoundKey( repo.getUrl(), repo.getProxy() );
             authSchemePools = global.getAuthSchemePools();
         }
+        if ( !ConfigUtils.getBoolean( session, true, CONFIG_PROP_WEBDAV + '.' + repo.getId(), CONFIG_PROP_WEBDAV ) )
+        {
+            webDav = false;
+        }
     }
 
     public ClientConnectionManager getConnectionManager()
@@ -88,6 +97,16 @@ final class LocalState
         }
     }
 
+    public boolean isProbed()
+    {
+        return probed;
+    }
+
+    public void setProbed()
+    {
+        probed = true;
+    }
+
     public boolean isExpectContinue()
     {
         if ( expectContinue == null )
@@ -107,14 +126,17 @@ final class LocalState
         }
     }
 
-    public Boolean getWebDav()
+    public boolean isWebDav()
     {
-        return webDav;
+        return Boolean.TRUE.equals( webDav );
     }
 
     public void setWebDav( boolean webDav )
     {
-        this.webDav = webDav;
+        if ( this.webDav == null )
+        {
+            this.webDav = webDav;
+        }
     }
 
     public AuthScheme getAuthScheme( HttpHost host )

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/cd3cb86f/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
index a0f6a54..60f316a 100644
--- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
+++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
@@ -72,9 +72,22 @@ public class HttpServer
 
     }
 
+    public enum WebDav
+    {
+        /** DAV header advertised, MKCOL required for missing parent directories */
+        REQUIRED,
+        /** DAV header advertised, MKCOL supported but not required */
+        OPTIONAL
+    }
+
     public enum ExpectContinue
     {
-        FAIL, PROPER, BROKEN
+        /** reject request with "Expectation Failed" */
+        FAIL,
+        /** send "Continue" only if request made it past authentication */
+        PROPER,
+        /** send "Continue" before authentication has been checked */
+        BROKEN
     }
 
     public enum ChecksumHeader
@@ -90,7 +103,7 @@ public class HttpServer
 
     private boolean rangeSupport = true;
 
-    private boolean webDav;
+    private WebDav webDav;
 
     private ExpectContinue expectContinue = ExpectContinue.PROPER;
 
@@ -186,7 +199,7 @@ public class HttpServer
         return this;
     }
 
-    public HttpServer setWebDav( boolean webDav )
+    public HttpServer setWebDav( WebDav webDav )
     {
         this.webDav = webDav;
         return this;
@@ -405,7 +418,7 @@ public class HttpServer
             }
             else if ( HttpMethods.PUT.equals( req.getMethod() ) )
             {
-                if ( !webDav )
+                if ( !WebDav.REQUIRED.equals( webDav ) )
                 {
                     file.getParentFile().mkdirs();
                 }
@@ -437,14 +450,14 @@ public class HttpServer
             }
             else if ( HttpMethods.OPTIONS.equals( req.getMethod() ) )
             {
-                if ( webDav )
+                if ( webDav != null )
                 {
                     response.setHeader( "DAV", "1,2" );
                 }
                 response.setHeader( HttpHeaders.ALLOW, "GET, PUT, HEAD, OPTIONS" );
                 response.setStatus( HttpServletResponse.SC_OK );
             }
-            else if ( webDav && "MKCOL".equals( req.getMethod() ) )
+            else if ( webDav != null && "MKCOL".equals( req.getMethod() ) )
             {
                 if ( file.exists() )
                 {

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/cd3cb86f/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
index 8a36861..14ec31e 100644
--- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
+++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
@@ -64,6 +64,8 @@ public class HttpTransporterTest
         System.setProperty( "javax.net.ssl.keyStorePassword", "client-pwd" );
     }
 
+    private static final String REPO_ID = "test";
+
     @Rule
     public TestName testName = new TestName();
 
@@ -83,7 +85,7 @@ public class HttpTransporterTest
 
     private RemoteRepository newRepo( String url )
     {
-        return new RemoteRepository.Builder( "test", "default", url ).setAuthentication( auth ).setProxy( proxy ).build();
+        return new RemoteRepository.Builder( REPO_ID, "default", url ).setAuthentication( auth ).setProxy( proxy ).build();
     }
 
     private void newTransporter( String url )
@@ -406,7 +408,7 @@ public class HttpTransporterTest
     public void testGet_WebDav()
         throws Exception
     {
-        httpServer.setWebDav( true );
+        httpServer.setWebDav( HttpServer.WebDav.REQUIRED );
         RecordingTransportListener listener = new RecordingTransportListener();
         GetTask task = new GetTask( URI.create( "repo/dir/file.txt" ) ).setListener( listener );
         ( (HttpTransporter) transporter ).getState().setWebDav( true );
@@ -801,7 +803,7 @@ public class HttpTransporterTest
     public void testPut_WebDav()
         throws Exception
     {
-        httpServer.setWebDav( true );
+        httpServer.setWebDav( HttpServer.WebDav.REQUIRED );
         RecordingTransportListener listener = new RecordingTransportListener();
         PutTask task =
             new PutTask( URI.create( "repo/dir1/dir2/file.txt" ) ).setListener( listener ).setDataString( "upload" );
@@ -824,6 +826,31 @@ public class HttpTransporterTest
     }
 
     @Test
+    public void testPut_WebDavOptional_ManuallyDisabled()
+        throws Exception
+    {
+        session.setConfigProperty( "aether.connector.http.webDav." + REPO_ID, "false" );
+        httpServer.setWebDav( HttpServer.WebDav.OPTIONAL );
+        httpServer.setAuthentication( "testuser", "testpass" );
+        auth = new AuthenticationBuilder().addUsername( "testuser" ).addPassword( "testpass" ).build();
+        newTransporter( httpServer.getHttpUrl() );
+        RecordingTransportListener listener = new RecordingTransportListener();
+        PutTask task =
+            new PutTask( URI.create( "repo/dir1/dir2/file.txt" ) ).setListener( listener ).setDataString( "upload" );
+        transporter.put( task );
+        assertEquals( 0, listener.dataOffset );
+        assertEquals( 6, listener.dataLength );
+        assertEquals( 1, listener.startedCount );
+        assertTrue( "Count: " + listener.progressedCount, listener.progressedCount > 0 );
+        assertEquals( "upload", TestFileUtils.readString( new File( repoDir, "dir1/dir2/file.txt" ) ) );
+
+        assertEquals( httpServer.getLogEntries().toString(), 3, httpServer.getLogEntries().size() );
+        assertEquals( "OPTIONS", httpServer.getLogEntries().get( 0 ).method );
+        assertEquals( "OPTIONS", httpServer.getLogEntries().get( 1 ).method );
+        assertEquals( "PUT", httpServer.getLogEntries().get( 2 ).method );
+    }
+
+    @Test
     public void testPut_FileHandleLeak()
         throws Exception
     {


[06/50] [abbrv] maven-aether git commit: Bug 435716 - Add overload of DefaultProxySelector.add() that accepts an already splitted collection of non-proxy hosts

Posted by ol...@apache.org.
Bug 435716 - Add overload of DefaultProxySelector.add() that accepts an already splitted collection of non-proxy hosts

Introduced add(Proxy, Collection<String>) to DefaultProxySelector


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/5dedc336
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/5dedc336
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/5dedc336

Branch: refs/heads/master
Commit: 5dedc336829ce5ede2af1b5ffde70646a9c9efd7
Parents: 5595ddf
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun May 25 18:00:47 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun May 25 18:00:47 2014 +0200

----------------------------------------------------------------------
 .../util/repository/DefaultProxySelector.java   | 44 ++++++++++++++++++--
 .../repository/DefaultProxySelectorTest.java    | 21 ++++++++--
 2 files changed, 58 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/5dedc336/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
index 3c5b03b..0fed710 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
@@ -11,6 +11,7 @@
 package org.eclipse.aether.util.repository;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
@@ -34,6 +35,10 @@ public final class DefaultProxySelector
     /**
      * Adds the specified proxy definition to the selector. Proxy definitions are ordered, the first matching proxy for
      * a given repository will be used.
+     * <p>
+     * The syntax of the non-proxy host list matches that of the property "http.nonProxyHosts" from the JRE, i.e. the
+     * asterisk character ('*') serves as a wildcard for pattern matching. Multiple non-proxy hosts are separated by the
+     * pipe character ('|') but note that surrounding whitespace is not trimmed from the entries.
      * 
      * @param proxy The proxy definition to add, must not be {@code null}.
      * @param nonProxyHosts The list of (case-insensitive) host names to exclude from proxying, may be {@code null}.
@@ -41,6 +46,23 @@ public final class DefaultProxySelector
      */
     public DefaultProxySelector add( Proxy proxy, String nonProxyHosts )
     {
+        return add( proxy, NonProxyHosts.split( nonProxyHosts ) );
+    }
+
+    /**
+     * Adds the specified proxy definition to the selector. Proxy definitions are ordered, the first matching proxy for
+     * a given repository will be used.
+     * <p>
+     * The asterisk character ('*') may be used as wildcard in a host name.
+     * 
+     * @param proxy The proxy definition to add, must not be {@code null}.
+     * @param nonProxyHosts The list of (case-insensitive) host names to exclude from proxying, may be {@code null} but
+     *            must not contain {@code null} elements.
+     * @return This proxy selector for chaining, never {@code null}.
+     * @since 1.1.0
+     */
+    public DefaultProxySelector add( Proxy proxy, Collection<String> nonProxyHosts )
+    {
         if ( proxy == null )
         {
             throw new IllegalArgumentException( "proxy not specified" );
@@ -96,14 +118,14 @@ public final class DefaultProxySelector
 
         private final Pattern[] patterns;
 
-        public NonProxyHosts( String nonProxyHosts )
+        public NonProxyHosts( Collection<String> nonProxyHosts )
         {
             List<Pattern> patterns = new ArrayList<Pattern>();
             if ( nonProxyHosts != null )
             {
-                for ( StringTokenizer tokenizer = new StringTokenizer( nonProxyHosts, "|" ); tokenizer.hasMoreTokens(); )
+                for ( String nonProxyHost : nonProxyHosts )
                 {
-                    String pattern = tokenizer.nextToken();
+                    String pattern = nonProxyHost;
                     pattern = pattern.replace( ".", "\\." ).replace( "*", ".*" );
                     patterns.add( Pattern.compile( pattern, Pattern.CASE_INSENSITIVE ) );
                 }
@@ -111,6 +133,20 @@ public final class DefaultProxySelector
             this.patterns = patterns.toArray( new Pattern[patterns.size()] );
         }
 
+        static List<String> split( String nonProxyHosts )
+        {
+            List<String> hosts = null;
+            if ( nonProxyHosts != null )
+            {
+                hosts = new ArrayList<String>();
+                for ( StringTokenizer tokenizer = new StringTokenizer( nonProxyHosts, "|" ); tokenizer.hasMoreTokens(); )
+                {
+                    hosts.add( tokenizer.nextToken() );
+                }
+            }
+            return hosts;
+        }
+
         boolean isNonProxyHost( String host )
         {
             if ( host != null )
@@ -135,7 +171,7 @@ public final class DefaultProxySelector
 
         final NonProxyHosts nonProxyHosts;
 
-        public ProxyDef( Proxy proxy, String nonProxyHosts )
+        public ProxyDef( Proxy proxy, Collection<String> nonProxyHosts )
         {
             this.proxy = proxy;
             this.nonProxyHosts = new NonProxyHosts( nonProxyHosts );

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/5dedc336/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
index 5f06982..b33c1b2 100644
--- a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
+++ b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
@@ -12,7 +12,9 @@ package org.eclipse.aether.util.repository;
 
 import static org.junit.Assert.*;
 
-import org.eclipse.aether.util.repository.DefaultProxySelector;
+import java.util.Arrays;
+
+import org.eclipse.aether.util.repository.DefaultProxySelector.NonProxyHosts;
 import org.junit.Test;
 
 /**
@@ -22,14 +24,22 @@ public class DefaultProxySelectorTest
 
     private boolean isNonProxyHost( String host, String nonProxyHosts )
     {
-        return new DefaultProxySelector.NonProxyHosts( nonProxyHosts ).isNonProxyHost( host );
+        return new NonProxyHosts( NonProxyHosts.split( nonProxyHosts ) ).isNonProxyHost( host );
+    }
+
+    private boolean isNonProxyHost( String host, String... nonProxyHosts )
+    {
+        return new NonProxyHosts( nonProxyHosts != null ? Arrays.asList( nonProxyHosts ) : null ).isNonProxyHost( host );
     }
 
     @Test
     public void testIsNonProxyHost_Blank()
     {
-        assertFalse( isNonProxyHost( "www.eclipse.org", null ) );
+        assertFalse( isNonProxyHost( "www.eclipse.org", (String) null ) );
         assertFalse( isNonProxyHost( "www.eclipse.org", "" ) );
+
+        assertFalse( isNonProxyHost( "www.eclipse.org", (String[]) null ) );
+        assertFalse( isNonProxyHost( "www.eclipse.org", new String[0] ) );
     }
 
     @Test
@@ -48,6 +58,11 @@ public class DefaultProxySelectorTest
         assertTrue( isNonProxyHost( "eclipse.org", "eclipse.org|host2" ) );
         assertTrue( isNonProxyHost( "eclipse.org", "host1|eclipse.org" ) );
         assertTrue( isNonProxyHost( "eclipse.org", "host1|eclipse.org|host2" ) );
+
+        // controversial (no trimming) but consistent with JRE's handling of http.nonProxyHosts
+        assertFalse( isNonProxyHost( "eclipse.org", "host1| eclipse.org |host2" ) );
+        assertFalse( isNonProxyHost( "eclipse.org", "host1|eclipse.org " ) );
+        assertFalse( isNonProxyHost( "eclipse.org", " eclipse.org|host2" ) );
     }
 
     @Test


[46/50] [abbrv] maven-aether git commit: Dropped the incubation classifier from the binary distribution

Posted by ol...@apache.org.
Dropped the incubation classifier from the binary distribution


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/1cbc81d3
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/1cbc81d3
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/1cbc81d3

Branch: refs/heads/master
Commit: 1cbc81d31564cbb92263fbd72a666c192e8617a5
Parents: 097f275
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat Nov 15 14:36:48 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat Nov 15 14:36:48 2014 +0100

----------------------------------------------------------------------
 src/main/assembly/bin.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/1cbc81d3/src/main/assembly/bin.xml
----------------------------------------------------------------------
diff --git a/src/main/assembly/bin.xml b/src/main/assembly/bin.xml
index 24f2c1f..963c32c 100644
--- a/src/main/assembly/bin.xml
+++ b/src/main/assembly/bin.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
- ~ Copyright (c) 2012, 2013 Sonatype, Inc.
+ ~ Copyright (c) 2012, 2014 Sonatype, Inc.
  ~ All rights reserved. This program and the accompanying materials
  ~ are made available under the terms of the Eclipse Public License v1.0
  ~ which accompanies this distribution, and is available at
@@ -12,7 +12,7 @@
 -->
 
 <assembly>
-  <id>bin-incubation</id>
+  <id>bin</id>
   <formats>
     <format>zip</format>
   </formats>


[49/50] [abbrv] maven-aether git commit: Updated to httpclient:4.3.5

Posted by ol...@apache.org.
Updated to httpclient:4.3.5


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/80334ca5
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/80334ca5
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/80334ca5

Branch: refs/heads/master
Commit: 80334ca56c2f7063cef400fff70a54d8591ab52e
Parents: 6f1e141
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Nov 23 16:08:31 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Nov 23 16:08:31 2014 +0100

----------------------------------------------------------------------
 aether-transport-http/pom.xml | 2 +-
 pom.xml                       | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/80334ca5/aether-transport-http/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-http/pom.xml b/aether-transport-http/pom.xml
index d41e776..c743fa9 100644
--- a/aether-transport-http/pom.xml
+++ b/aether-transport-http/pom.xml
@@ -47,7 +47,7 @@
     <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpclient</artifactId>
-      <version>4.2.6</version>
+      <version>4.3.5</version>
       <exclusions>
         <exclusion>
           <!-- using jcl-over-slf4j instead -->

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/80334ca5/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index ae84f1d..7b3f191 100644
--- a/pom.xml
+++ b/pom.xml
@@ -548,10 +548,10 @@
                     <include>com.google.guava:guava:[11.0.2]</include>
                     <!-- CQ #5639 -->
                     <include>javax.inject:javax.inject:[1]</include>
-                    <!-- CQ #7657 -->
-                    <include>org.apache.httpcomponents:httpclient:[4.2.6]</include>
-                    <!-- CQ #7656 -->
-                    <include>org.apache.httpcomponents:httpcore:[4.2.5]</include>
+                    <!-- CQ #8596 -->
+                    <include>org.apache.httpcomponents:httpclient:[4.3.5]</include>
+                    <!-- CQ #8595 -->
+                    <include>org.apache.httpcomponents:httpcore:[4.3.2]</include>
                     <!-- CQ #7346 -->
                     <include>commons-codec:commons-codec:[1.6]</include>
                     <!-- CQ #7347 -->


[34/50] [abbrv] maven-aether git commit: Extended API docs

Posted by ol...@apache.org.
Extended API docs


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/0db0dcce
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/0db0dcce
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/0db0dcce

Branch: refs/heads/master
Commit: 0db0dccec25ad4a7a93b2d7cd7a84710ac5cfa02
Parents: c6cf8d7
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Oct 19 15:55:11 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Oct 19 15:55:11 2014 +0200

----------------------------------------------------------------------
 .../org/eclipse/aether/util/ConfigUtils.java    | 56 +++++++++++---------
 1 file changed, 31 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/0db0dcce/aether-util/src/main/java/org/eclipse/aether/util/ConfigUtils.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/ConfigUtils.java b/aether-util/src/main/java/org/eclipse/aether/util/ConfigUtils.java
index 821bfa3..1f52a76 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/ConfigUtils.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/ConfigUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,7 +32,7 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as is.
      * 
      * @param properties The configuration properties to read, must not be {@code null}.
      * @param defaultValue The default value to return in case none of the property keys are set, may be {@code null}.
@@ -56,7 +56,7 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as is.
      * 
      * @param session The repository system session from which to read the configuration property, must not be
      *            {@code null}.
@@ -71,7 +71,7 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as a string value.
      * 
      * @param properties The configuration properties to read, must not be {@code null}.
      * @param defaultValue The default value to return in case none of the property keys is set to a string, may be
@@ -96,7 +96,7 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as a string value.
      * 
      * @param session The repository system session from which to read the configuration property, must not be
      *            {@code null}.
@@ -112,10 +112,11 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as an integer number.
      * 
      * @param properties The configuration properties to read, must not be {@code null}.
-     * @param defaultValue The default value to return in case none of the property keys is set to a number.
+     * @param defaultValue The default value to return in case none of the property keys is set to a number or numeric
+     *            string.
      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
      *            a {@link Number} or a string representation of an {@link Integer} is found.
      * @return The property value.
@@ -145,11 +146,12 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as an integer number.
      * 
      * @param session The repository system session from which to read the configuration property, must not be
      *            {@code null}.
-     * @param defaultValue The default value to return in case none of the property keys is set to a number.
+     * @param defaultValue The default value to return in case none of the property keys is set to a number or numeric
+     *            string.
      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
      *            a {@link Number} or a string representation of an {@link Integer} is found.
      * @return The property value.
@@ -160,10 +162,11 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as a long number.
      * 
      * @param properties The configuration properties to read, must not be {@code null}.
-     * @param defaultValue The default value to return in case none of the property keys is set to a number.
+     * @param defaultValue The default value to return in case none of the property keys is set to a number or numeric
+     *            string.
      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
      *            a {@link Number} or a string representation of a {@link Long} is found.
      * @return The property value.
@@ -193,11 +196,12 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as a long number.
      * 
      * @param session The repository system session from which to read the configuration property, must not be
      *            {@code null}.
-     * @param defaultValue The default value to return in case none of the property keys is set to a number.
+     * @param defaultValue The default value to return in case none of the property keys is set to a number or numeric
+     *            string.
      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
      *            a {@link Number} or a string representation of a {@link Long} is found.
      * @return The property value.
@@ -208,10 +212,11 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as a single-precision floating point number.
      * 
      * @param properties The configuration properties to read, must not be {@code null}.
-     * @param defaultValue The default value to return in case none of the property keys is set to a number.
+     * @param defaultValue The default value to return in case none of the property keys is set to a number or numeric
+     *            string.
      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
      *            a {@link Number} or a string representation of a {@link Float} is found.
      * @return The property value.
@@ -241,11 +246,12 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as a single-precision floating point number.
      * 
      * @param session The repository system session from which to read the configuration property, must not be
      *            {@code null}.
-     * @param defaultValue The default value to return in case none of the property keys is set to a number.
+     * @param defaultValue The default value to return in case none of the property keys is set to a number or numeric
+     *            string.
      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
      *            a {@link Number} or a string representation of a {@link Float} is found.
      * @return The property value.
@@ -256,10 +262,10 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as boolean flag.
      * 
      * @param properties The configuration properties to read, must not be {@code null}.
-     * @param defaultValue The default value to return in case none of the property keys is set to a boolean.
+     * @param defaultValue The default value to return in case none of the property keys is set to a boolean or string.
      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
      *            a {@link Boolean} or a string (to be {@link Boolean#parseBoolean(String) parsed as boolean}) is found.
      * @return The property value.
@@ -284,11 +290,11 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as a boolean flag.
      * 
      * @param session The repository system session from which to read the configuration property, must not be
      *            {@code null}.
-     * @param defaultValue The default value to return in case none of the property keys is set to a boolean.
+     * @param defaultValue The default value to return in case none of the property keys is set to a boolean or string.
      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
      *            a {@link Boolean} or a string (to be {@link Boolean#parseBoolean(String) parsed as boolean}) is found.
      * @return The property value.
@@ -299,7 +305,7 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as a list of objects.
      * 
      * @param properties The configuration properties to read, must not be {@code null}.
      * @param defaultValue The default value to return in case none of the property keys is set to a collection.
@@ -327,7 +333,7 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as a list of objects.
      * 
      * @param session The repository system session from which to read the configuration property, must not be
      *            {@code null}.
@@ -342,7 +348,7 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as a map or key value pairs.
      * 
      * @param properties The configuration properties to read, must not be {@code null}.
      * @param defaultValue The default value to return in case none of the property keys is set to a map.
@@ -366,7 +372,7 @@ public final class ConfigUtils
     }
 
     /**
-     * Gets the specified configuration property.
+     * Gets the specified configuration property as map of key value pairs.
      * 
      * @param session The repository system session from which to read the configuration property, must not be
      *            {@code null}.


[10/50] [abbrv] maven-aether git commit: Bug 435720 - Trim whitespace from non-proxy hosts in DefaultProxySelector

Posted by ol...@apache.org.
Bug 435720 - Trim whitespace from non-proxy hosts in DefaultProxySelector


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/fbf380ce
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/fbf380ce
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/fbf380ce

Branch: refs/heads/master
Commit: fbf380ce48b6b10a9f851332c1d37a4abf4a01d7
Parents: caf41ec
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun May 25 23:06:47 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun May 25 23:06:47 2014 +0200

----------------------------------------------------------------------
 .../aether/util/repository/DefaultProxySelector.java   |  8 ++++----
 .../util/repository/DefaultProxySelectorTest.java      | 13 +++++++++----
 2 files changed, 13 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/fbf380ce/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
index a47b5ac..0bccf8a 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
@@ -38,9 +38,9 @@ public final class DefaultProxySelector
      * 
      * @param proxy The proxy definition to add, must not be {@code null}.
      * @param nonProxyHosts The list of (case-insensitive) host names to exclude from proxying, may be {@code null}. The
-     *            syntax of this list matches that of the property "http.nonProxyHosts" from the JRE, i.e. the asterisk
-     *            character ('*') serves as a wildcard for pattern matching. Multiple non-proxy hosts are separated by
-     *            the pipe character ('|') but note that surrounding whitespace is not trimmed from the entries.
+     *            syntax of this list resembles that of the property "http.nonProxyHosts" from the JRE, i.e. the
+     *            asterisk character ('*') serves as a wildcard for pattern matching. Multiple entries are separated by
+     *            the pipe character ('|') and surrounding whitespace is trimmed.
      * @return This proxy selector for chaining, never {@code null}.
      */
     public DefaultProxySelector add( Proxy proxy, String nonProxyHosts )
@@ -139,7 +139,7 @@ public final class DefaultProxySelector
             List<String> hosts = null;
             if ( nonProxyHosts != null )
             {
-                hosts = Arrays.asList( nonProxyHosts.split( "\\|" ) );
+                hosts = Arrays.asList( nonProxyHosts.trim().split( "\\s*\\|\\s*" ) );
             }
             return hosts;
         }

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/fbf380ce/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
index a8cc141..6ae5f2b 100644
--- a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
+++ b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
@@ -64,11 +64,16 @@ public class DefaultProxySelectorTest
         assertTrue( isNonProxyHost( "eclipse.org", "host1|eclipse.org|host2" ) );
 
         assertFalse( isNonProxyHost( "", "||host||" ) );
+    }
 
-        // controversial (no trimming) but consistent with JRE's handling of http.nonProxyHosts
-        assertFalse( isNonProxyHost( "eclipse.org", "host1| eclipse.org |host2" ) );
-        assertFalse( isNonProxyHost( "eclipse.org", "host1|eclipse.org " ) );
-        assertFalse( isNonProxyHost( "eclipse.org", " eclipse.org|host2" ) );
+    @Test
+    public void testIsNonProxyHost_Trimming()
+    {
+        assertFalse( isNonProxyHost( "", " " ) );
+        assertTrue( isNonProxyHost( "eclipse.org", " eclipse.org " ) );
+        assertTrue( isNonProxyHost( "eclipse.org", "host1| eclipse.org |host2" ) );
+        assertTrue( isNonProxyHost( "eclipse.org", "host1|eclipse.org " ) );
+        assertTrue( isNonProxyHost( "eclipse.org", " eclipse.org|host2" ) );
     }
 
     @Test


[16/50] [abbrv] maven-aether git commit: Bug 436292 - Allow comma as delimiter for non-proxy hosts in DefaultProxySelector

Posted by ol...@apache.org.
Bug 436292 - Allow comma as delimiter for non-proxy hosts in DefaultProxySelector


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/c2b1c3db
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/c2b1c3db
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/c2b1c3db

Branch: refs/heads/master
Commit: c2b1c3dbe927ada1cc0dee55a5a734de898c0e2d
Parents: 93310af
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat May 31 17:35:51 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat May 31 17:35:51 2014 +0200

----------------------------------------------------------------------
 .../eclipse/aether/util/repository/DefaultProxySelector.java    | 4 ++--
 .../aether/util/repository/DefaultProxySelectorTest.java        | 5 +++++
 2 files changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/c2b1c3db/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
index 0bccf8a..5f3d411 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultProxySelector.java
@@ -40,7 +40,7 @@ public final class DefaultProxySelector
      * @param nonProxyHosts The list of (case-insensitive) host names to exclude from proxying, may be {@code null}. The
      *            syntax of this list resembles that of the property "http.nonProxyHosts" from the JRE, i.e. the
      *            asterisk character ('*') serves as a wildcard for pattern matching. Multiple entries are separated by
-     *            the pipe character ('|') and surrounding whitespace is trimmed.
+     *            the pipe character ('|') or comma (',') and surrounding whitespace is trimmed.
      * @return This proxy selector for chaining, never {@code null}.
      */
     public DefaultProxySelector add( Proxy proxy, String nonProxyHosts )
@@ -139,7 +139,7 @@ public final class DefaultProxySelector
             List<String> hosts = null;
             if ( nonProxyHosts != null )
             {
-                hosts = Arrays.asList( nonProxyHosts.trim().split( "\\s*\\|\\s*" ) );
+                hosts = Arrays.asList( nonProxyHosts.trim().split( "\\s*[|,]\\s*" ) );
             }
             return hosts;
         }

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/c2b1c3db/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
index 80392b1..85eeac6 100644
--- a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
+++ b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
@@ -70,7 +70,12 @@ public class DefaultProxySelectorTest
         assertTrue( isNonProxyHost( "eclipse.org", "host1|eclipse.org" ) );
         assertTrue( isNonProxyHost( "eclipse.org", "host1|eclipse.org|host2" ) );
 
+        assertTrue( isNonProxyHost( "eclipse.org", "eclipse.org,host2" ) );
+        assertTrue( isNonProxyHost( "eclipse.org", "host1,eclipse.org" ) );
+        assertTrue( isNonProxyHost( "eclipse.org", "host1,eclipse.org,host2" ) );
+
         assertFalse( isNonProxyHost( "", "||host||" ) );
+        assertFalse( isNonProxyHost( "", ",,host,," ) );
     }
 
     @Test


[20/50] [abbrv] maven-aether git commit: Extended HttpTransporterTest to cover credential encoding

Posted by ol...@apache.org.
Extended HttpTransporterTest to cover credential encoding


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/d252910f
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/d252910f
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/d252910f

Branch: refs/heads/master
Commit: d252910f5415c58f7342c5ba357e1c007396279c
Parents: 51ea175
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Fri Aug 29 16:25:54 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Fri Aug 29 16:25:54 2014 +0200

----------------------------------------------------------------------
 .../aether/transport/http/HttpServer.java       | 14 +++++++---
 .../transport/http/HttpTransporterTest.java     | 28 +++++++++++++++++++-
 2 files changed, 38 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/d252910f/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
index be97ff1..5fee786 100644
--- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
+++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 Sonatype, Inc.
+ * Copyright (c) 2013, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -100,6 +100,8 @@ public class HttpServer
 
     private Connector httpsConnector;
 
+    private String credentialEncoding = StringUtil.__ISO_8859_1;
+
     private String username;
 
     private String password;
@@ -194,6 +196,12 @@ public class HttpServer
         return this;
     }
 
+    public HttpServer setCredentialEncoding( String credentialEncoding )
+    {
+        this.credentialEncoding = ( credentialEncoding != null ) ? credentialEncoding : StringUtil.__ISO_8859_1;
+        return this;
+    }
+
     public HttpServer setAuthentication( String username, String password )
     {
         this.username = username;
@@ -524,7 +532,7 @@ public class HttpServer
 
     }
 
-    static boolean checkBasicAuth( String credentials, String username, String password )
+    boolean checkBasicAuth( String credentials, String username, String password )
     {
         if ( credentials != null )
         {
@@ -537,7 +545,7 @@ public class HttpServer
                     credentials = credentials.substring( space + 1 );
                     try
                     {
-                        credentials = B64Code.decode( credentials, StringUtil.__ISO_8859_1 );
+                        credentials = B64Code.decode( credentials, credentialEncoding );
                     }
                     catch ( UnsupportedEncodingException e )
                     {

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/d252910f/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
index 16fe0c4..8a36861 100644
--- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
+++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 Sonatype, Inc.
+ * Copyright (c) 2013, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1042,6 +1042,32 @@ public class HttpTransporterTest
     }
 
     @Test
+    public void testCredentialEncoding_Default()
+        throws Exception
+    {
+        testCredentialEncoding( null );
+    }
+
+    @Test
+    public void testCredentialEncoding_Utf8()
+        throws Exception
+    {
+        testCredentialEncoding( "UTF-8" );
+    }
+
+    private void testCredentialEncoding( String encoding )
+        throws Exception
+    {
+        session.setConfigProperty( ConfigurationProperties.HTTP_CREDENTIAL_ENCODING, encoding );
+        String username = "testuser", password = "\u00e4\u00f6\u00fc";
+        httpServer.setAuthentication( username, password );
+        httpServer.setCredentialEncoding( encoding );
+        auth = new AuthenticationBuilder().addUsername( username ).addPassword( password ).build();
+        newTransporter( httpServer.getHttpUrl() );
+        transporter.get( new GetTask( URI.create( "repo/file.txt" ) ) );
+    }
+
+    @Test
     public void testAuthSchemeReuse()
         throws Exception
     {


[24/50] [abbrv] maven-aether git commit: fixed typo

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/bb7c121b/class-overview.svg
----------------------------------------------------------------------
diff --git a/class-overview.svg b/class-overview.svg
index 75486ae..ff34232 100644
--- a/class-overview.svg
+++ b/class-overview.svg
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- ~ Copyright (c) 2010, 2011 Sonatype, Inc.
- ~ All rights reserved. This program and the accompanying materials
- ~ are made available under the terms of the Eclipse Public License v1.0
- ~ which accompanies this distribution, and is available at
- ~ http://www.eclipse.org/legal/epl-v10.html
- ~
- ~ Contributors:
- ~    Sonatype, Inc. - initial API and implementation
--->
-
-<svg xmlns:x="http://ns.adobe.com/Extensibility/1.0/" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:graph="http://ns.adobe.com/Graphs/1.0/" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"  xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1648" height="1517"><defs></defs><rect stroke="#000000" stroke-width="1" fill="#ffffff" x="0" y="0" width="1647" height="1516"/><g transform='translate(36.0,25.0) rotate(0 100.0 91.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" 
 fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='141.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='141.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RepositorySystem</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveVersionRange()</tspa
 n></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveVersion()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >readArtifactDescriptor()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >collectDependencies()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='57.2'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveDependencies()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='72.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveArtifacts()</tspan></tspa
 n></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='86.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveMetadata()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='101.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >install()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='116.39999999999999'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >deploy()</tspan></tspan></text></g></g><g transform='translate(26.0,790.0) rotate(0 100.0 61.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g tra
 nsform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='81.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='81.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,106.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,102.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Repos</tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >itorySystem
 Session</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >offline : boolean</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >systemProperties : Map</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >updatePolicy : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >checksumPolicy : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='57.2'><tspan><tspan font-size='12' font-family='A
 rial' fill='#000000' >...</tspan></tspan></text></g><g ></g></g><g transform='translate(635.3578854796845,337.77615933375705) rotate(0 69.6421145203155 37.22384066624295)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='33.4476813324859'  stroke="#A8A8A8" str
 oke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='33.4476813324859'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='69.6421145203155' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Authentication</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(640.0,463.5) rotate(0 70.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='139.44
 22310756972' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='70.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Proxy</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(320.0,463.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.
 0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='trans
 late(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >ProxySelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getProxy()</tspan></tspan></text></g></g><g transform='translate(320.0,337.0) rotate(0 100.0 38.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width=
 "2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >AuthenticationSelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Ar
 ial' fill='#000000' >getAuthentication()</tspan></tspan></text></g></g><g transform='translate(325.0,583.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A
 8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >MirrorSelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getMirror()</tspan></tspan></text></g></g><g transform='translate(1130.0,248.5) rotate(0 75.0 47.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='21.0'
   stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,61.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='38.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,57.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='38.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='75.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >ArtifactRepsository</tspan></tspan></tex
 t></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >id : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >contentType : String</tspan></tspan></text></g><g ></g></g><g transform='translate(1105.0,403.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fil
 l-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,46.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,42.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >LocalRepository</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >basedir : File</tspan><
 /tspan></text></g><g ></g></g><g transform='translate(1345.0,403.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41
 .0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >WorkspaceRepository</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(865.0,403.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g t
 ransform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,46.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='33.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,42.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='33.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RemoteRepository</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >url : String</tspan></tspan></text></g><g ></g></g><g transfo
 rm='translate(1205.0,404.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-60.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,-60.0) rotate(90.0)'><polygon points='0,0 12,7 12,-7' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-30.0)'></g></g><g transform='translate(1005.0,404.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='-20.0' x2='170.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='170.0' y1='-20.0' x2='170.0' y2='-60.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(170.0,-60.0) rotate(90.0)'><polygon points='0,0 12,7 12,-7' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(85.0,-20.0)'></g></g><g transform='translate(1405.0,404.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-wi
 dth='1' /><line x1='0.0' y1='-20.0' x2='-166.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-166.0' y1='-20.0' x2='-166.0' y2='-57.5' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(-166.0,-57.5) rotate(90.0)'><polygon points='0,0 12,7 12,-7' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(-83.0,-20.0)'></g></g><g transform='translate(1105.0,543.5) rotate(0 100.0 53.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill=
 "#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >LocalRepositoryManager</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForLocalArtifact()</t
 span></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForRemoteArtifact()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForLocalMetadata()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForRemoteMetadata()</tspan></tspan></text></g></g><g transform='translate(1348.0,543.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke=
 "#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >WorkspaceReader</tspan></tspan></text></g><g ></
 g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >findArtifact()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >findVersions</tspan><tspan font-size='12' font-family='Arial' fill='#000000' >()</tspan></tspan></text></g></g><g transform='translate(866.0,545.0) rotate(0 100.0 48.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#
 A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='55.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='55.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RepositoryConnector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='1
 2' font-family='Arial' fill='#000000' >get()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >put()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >close()</tspan></tspan></text></g></g><g transform='translate(965.0,479.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='66.5' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(90.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,33.25)'></g></g><g transform='translate(1445.0,479.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='65.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) ro
 tate(90.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,32.5)'></g></g><g transform='translate(1205.0,481.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='63.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(90.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,31.5)'></g></g><g transform='translate(865.0,426.0)'><line x1='0.0' y1='0.0' x2='-70.3578854796845' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-70.3578854796845' y1='0.0' x2='-70.3578854796845' y2='-36.1104637335028' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-70.3578854796845' y1='-36.1104637335028' x2='-90.3578854796845' y2='-36.1104637335028' stroke-dashar
 ray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(180.0)'><polygon points='0,0 8,6 16,0 8,-6' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(-35.17894273984225,0.0)'></g></g><g transform='translate(865.0,456.0)'><line x1='0.0' y1='0.0' x2='-65.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-65.0' y1='0.0' x2='-65.0' y2='29.9999999999999' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-65.0' y1='29.9999999999999' x2='-85.0' y2='29.9999999999999' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(180.0)'><polygon points='0,0 8,6 16,0 8,-6' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(-32.5,0.0)'></g></g><g transform='translate(520.0,502.0)'><line x1='0.0' y1='0.0' x2='100.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='100.0' y1='0.0' x2='1
 00.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='100.0' y1='0.0' x2='120.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(120.0,0.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(50.0,0.0)'></g></g><g transform='translate(520.0,375.0)'><line x1='0.0' y1='0.0' x2='115.357885479684' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(115.357885479684,0.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(57.678942739842,0.0)'></g></g><g transform='translate(865.0,703.0) rotate(0 100.0 38.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0' 
  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,46.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,42.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto
 ' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RepositoryConnectorFactory</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >priority : int</tspan></tspan></text></g><g ></g></g><g transform='translate(965.0,703.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-62.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,-62.0) rotate(90.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-31.0)'></g></g><g transform='translate(326.0,705.5) rotate(0 100.0 53.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8
 A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='1
 2px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >TransferListener</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >transferStarted()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >transferProgressed()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >transferFailed()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >...</tspan></tspan></text></g>
 </g><g transform='translate(330.0,845.5) rotate(0 100.0 53.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' 
 width='199.203187250996' height='66.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RepositoryListener</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >artifactResolving()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >artifactResolved()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >artifactDeployed()</tspan></tspan></text><text text-rendering
 ='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >...</tspan></tspan></text></g></g><g transform='translate(336.0,1340.0) rotate(0 100.0 38.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203
 187250996' height='35.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >DependencyGraphTransformer</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >transformGraph()</tspan></tspan></text></g></g><g transform='translate(331.0,990.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-
 opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2
 .0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >DependencySelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >selectDependency() : boolean</tspan></tspan></text></g></g><g transform='translate(336.0,1220.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='tr
 anslate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >DependencyTraverser</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >traverseDependency() : boolean</tspan></tspan></text></g></g><
 g transform='translate(331.5,1105.5) rotate(0 102.5 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='204.18326693227093' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='204.18326693227093' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='204.18326693227093' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='204.18326693227093' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='204.18326693227093' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y=
 '0.0' width='204.18326693227093' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='102.5' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >DependencyManager</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >manageDependency()</tspan></tspan></text></g></g><g transform='translate(896.0,1298.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#fff
 fff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >DependencyNode</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(89
 6.0,1148.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,46.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='33.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,42.0)'><rect x='0.0' y='0.0' width='199.203187250996' heig
 ht='33.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Dependency</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >scope : String</tspan></tspan></text></g><g ></g></g><g transform='translate(893.0,928.0) rotate(0 100.0 76.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rec
 t x='0.0' y='0.0' width='199.203187250996' height='111.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='111.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,136.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,132.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Artifact</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='tex
 t-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >groupId : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >artifactId : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >extension : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >classifier : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='57.2'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >version : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='
 72.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >file : File</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='86.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >properties : Map</tspan></tspan></text></g><g ></g></g><g transform='translate(996.0,1149.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-68.5' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(-90.0)'><polygon points='0,0 8,6 16,0 8,-6' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-34.25)'></g></g><g transform='translate(996.0,1299.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-75.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(-90.0)'><polygon points='0,0 8,6 16,0 8,-6' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-37.5)'></g></g><g transform='translate(866.0,
 593.0)'><line x1='0.0' y1='0.0' x2='-167.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-167.0' y1='0.0' x2='-167.0' y2='144.6' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-167.0' y1='144.6' x2='-340.0' y2='144.6' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(-340.0,144.6) rotate(360.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(-167.0,72.3)'></g></g><g transform='translate(1036.0,1299.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='-20.0' x2='80.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='80.0' y1='-20.0' x2='80.0' y2='22.5' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='80.0' y1='22.5' x2='60.0' y2='22.5' stro
 ke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(60.0,22.5) rotate(360.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(40.0,-20.0)'></g></g><g transform='translate(586.0,1349.75) rotate(0 50.0 31.25)'><polygon points='0.0,0.0 85.65737051792827,0.0 99.601593625498,14.48675496688742 99.601593625498,62.08609271523179 0.0,62.08609271523179 '  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><line x1='85.65737051792827' y1='0.0' x2='85.65737051792827' y2='14.48675496688742'  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><line x1='85.65737051792827' y1='14.48675496688742' x2='99.601593625498' y2='14.48675496688742'  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><g  transform='translate(0.0,13.25)'><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' 
 font-family='Arial' fill='#000000' >Scope</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' > Inheritance,</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' > Conflict</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' > Resolution</tspan></tspan></text></g></g><g transform='translate(581.0,1226.75) rotate(0 50.0 31.25)'><polygon points='0.0,0.0 85.65737051792827,0.0 99.601593625498,14.48675496688742 99.601593625498,62.08609271523179 0.0,62.08609271523179 '  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><line x1='85.65737051792827' y1='0.0' x2='85.65737051792827' y2='14.48675496688742'  str
 oke="#000000" stroke-width="1.0" fill="#ffffff"/><line x1='85.65737051792827' y1='14.48675496688742' x2='99.601593625498' y2='14.48675496688742'  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><g  transform='translate(0.0,36.25)'><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >Fat WARs</tspan></tspan></text></g></g><g transform='translate(571.0,1000.75) rotate(0 50.0 31.25)'><polygon points='0.0,0.0 85.65737051792827,0.0 99.601593625498,14.48675496688742 99.601593625498,62.08609271523179 0.0,62.08609271523179 '  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><line x1='85.65737051792827' y1='0.0' x2='85.65737051792827' y2='14.48675496688742'  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><line x1='85.65737051792827' y1='14.48675496688742' x2='99.601593625498' y2='14.48675496688742'  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><g  transform='translate(0.0
 ,21.25)'><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >Exclusions,</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' > Optional</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' > Dependencies</tspan></tspan></text></g></g><g transform='translate(136.0,207.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='83.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='83.0' x2='-50.0' y2='83.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-50.0' y1='83.0' x2='-50.0' y2='583.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(-50.0,583.0) rotate(270.0)'
 ><line x1='0' y1='0' x2='12' y2='-5' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='12' y2='5' stroke='#000000' stroke-width='1' /></g><g transform='translate(-50.0,250.0)'></g></g><g transform='translate(126.0,790.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-415.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='-415.0' x2='194.0' y2='-415.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(194.0,-415.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-207.5)'></g></g><g transform='translate(166.0,790.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-288.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='-288.0' x2='154.0' y2='-288.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(154.0,-288.0) rotate(1
 80.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-144.0)'></g></g><g transform='translate(166.0,790.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-167.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='-167.0' x2='139.0' y2='-167.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='139.0' y1='-167.0' x2='139.0' y2='-168.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='139.0' y1='-168.0' x2='159.0' y2='-168.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(159.0,-168.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-83.5)'></g></g><g transform='translate(226.0,826.6)'><line x1='0.0' y1='0.0' x2='20.
 0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='20.0' y1='0.0' x2='20.0' y2='-88.8' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='20.0' y1='-88.8' x2='100.0' y2='-88.8' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(100.0,-88.8) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(20.0,-44.4)'></g></g><g transform='translate(226.0,851.0)'><line x1='0.0' y1='0.0' x2='84.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='84.0' y1='0.0' x2='84.0' y2='48.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='84.0' y1='48.0' x2='104.0' y2='48.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(104.0,48.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' 
 stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(42.0,0.0)'></g></g><g transform='translate(226.0,875.4)'><line x1='0.0' y1='0.0' x2='20.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='20.0' y1='0.0' x2='20.0' y2='153.4' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='20.0' y1='153.4' x2='105.0' y2='153.4' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(105.0,153.4) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(20.0,76.7)'></g></g><g transform='translate(166.0,912.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='231.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='231.0' x2='165.5' y2='231.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g 
 transform='translate(165.5,231.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,115.5)'></g></g><g transform='translate(126.0,912.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='346.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='346.0' x2='210.0' y2='346.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(210.0,346.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,173.0)'></g></g><g transform='translate(86.0,912.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='466.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='466.0' x2='250.0' y2='466.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g tran
 sform='translate(250.0,466.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,233.0)'></g></g></svg>
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Copyright (c) 2010, 2011 Sonatype, Inc.
+ ~ All rights reserved. This program and the accompanying materials
+ ~ are made available under the terms of the Eclipse Public License v1.0
+ ~ which accompanies this distribution, and is available at
+ ~ http://www.eclipse.org/legal/epl-v10.html
+ ~
+ ~ Contributors:
+ ~    Sonatype, Inc. - initial API and implementation
+-->
+
+<svg xmlns:x="http://ns.adobe.com/Extensibility/1.0/" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:graph="http://ns.adobe.com/Graphs/1.0/" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"  xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1648" height="1517"><defs></defs><rect stroke="#000000" stroke-width="1" fill="#ffffff" x="0" y="0" width="1647" height="1516"/><g transform='translate(36.0,25.0) rotate(0 100.0 91.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" 
 fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='141.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='141.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RepositorySystem</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveVersionRange()</tspa
 n></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveVersion()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >readArtifactDescriptor()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >collectDependencies()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='57.2'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveDependencies()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='72.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveArtifacts()</tspan></tspa
 n></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='86.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveMetadata()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='101.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >install()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='116.39999999999999'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >deploy()</tspan></tspan></text></g></g><g transform='translate(26.0,790.0) rotate(0 100.0 61.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g tra
 nsform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='81.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='81.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,106.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,102.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Repos</tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >itorySystem
 Session</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >offline : boolean</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >systemProperties : Map</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >updatePolicy : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >checksumPolicy : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='57.2'><tspan><tspan font-size='12' font-family='A
 rial' fill='#000000' >...</tspan></tspan></text></g><g ></g></g><g transform='translate(635.3578854796845,337.77615933375705) rotate(0 69.6421145203155 37.22384066624295)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='33.4476813324859'  stroke="#A8A8A8" str
 oke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='33.4476813324859'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='69.6421145203155' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Authentication</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(640.0,463.5) rotate(0 70.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='139.44
 22310756972' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='70.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Proxy</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(320.0,463.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.
 0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='trans
 late(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >ProxySelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getProxy()</tspan></tspan></text></g></g><g transform='translate(320.0,337.0) rotate(0 100.0 38.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width=
 "2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >AuthenticationSelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Ar
 ial' fill='#000000' >getAuthentication()</tspan></tspan></text></g></g><g transform='translate(325.0,583.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A
 8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >MirrorSelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getMirror()</tspan></tspan></text></g></g><g transform='translate(1130.0,248.5) rotate(0 75.0 47.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='21.0'
   stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,61.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='38.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,57.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='38.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='75.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >ArtifactRepository</tspan></tspan></text
 ></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >id : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >contentType : String</tspan></tspan></text></g><g ></g></g><g transform='translate(1105.0,403.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill
 -opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,46.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,42.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >LocalRepository</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >basedir : File</tspan></
 tspan></text></g><g ></g></g><g transform='translate(1345.0,403.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.
 0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >WorkspaceRepository</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(865.0,403.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g tr
 ansform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,46.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='33.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,42.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='33.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RemoteRepository</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >url : String</tspan></tspan></text></g><g ></g></g><g transfor
 m='translate(1205.0,404.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-60.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,-60.0) rotate(90.0)'><polygon points='0,0 12,7 12,-7' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-30.0)'></g></g><g transform='translate(1005.0,404.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='-20.0' x2='170.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='170.0' y1='-20.0' x2='170.0' y2='-60.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(170.0,-60.0) rotate(90.0)'><polygon points='0,0 12,7 12,-7' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(85.0,-20.0)'></g></g><g transform='translate(1405.0,404.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-wid
 th='1' /><line x1='0.0' y1='-20.0' x2='-166.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-166.0' y1='-20.0' x2='-166.0' y2='-57.5' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(-166.0,-57.5) rotate(90.0)'><polygon points='0,0 12,7 12,-7' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(-83.0,-20.0)'></g></g><g transform='translate(1105.0,543.5) rotate(0 100.0 53.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="
 #A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >LocalRepositoryManager</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForLocalArtifact()</ts
 pan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForRemoteArtifact()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForLocalMetadata()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForRemoteMetadata()</tspan></tspan></text></g></g><g transform='translate(1348.0,543.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="
 #000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >WorkspaceReader</tspan></tspan></text></g><g ></g
 ><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >findArtifact()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >findVersions</tspan><tspan font-size='12' font-family='Arial' fill='#000000' >()</tspan></tspan></text></g></g><g transform='translate(866.0,545.0) rotate(0 100.0 48.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A
 8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='55.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='55.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RepositoryConnector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12
 ' font-family='Arial' fill='#000000' >get()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >put()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >close()</tspan></tspan></text></g></g><g transform='translate(965.0,479.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='66.5' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(90.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,33.25)'></g></g><g transform='translate(1445.0,479.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='65.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rot
 ate(90.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,32.5)'></g></g><g transform='translate(1205.0,481.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='63.0' stroke-dasharray='23, 0' stroke='#000000' stroke

<TRUNCATED>

[40/50] [abbrv] maven-aether git commit: Polished/extended API docs

Posted by ol...@apache.org.
Polished/extended API docs


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/6ef4a917
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/6ef4a917
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/6ef4a917

Branch: refs/heads/master
Commit: 6ef4a917003f5b68659f8f8dc83405b881a0fe3d
Parents: 570f98b
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Oct 26 16:17:26 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Oct 26 16:17:26 2014 +0100

----------------------------------------------------------------------
 .../aether/DefaultRepositorySystemSession.java  | 30 +++++++++++++-------
 .../org/eclipse/aether/RepositoryCache.java     | 17 ++++++-----
 .../java/org/eclipse/aether/SessionData.java    | 16 ++++++-----
 .../collection/DependencyGraphTransformer.java  | 11 +++++--
 .../aether/collection/DependencyManager.java    | 11 ++++---
 .../aether/collection/DependencySelector.java   | 11 ++++---
 .../aether/collection/DependencyTraverser.java  | 11 ++++---
 .../aether/collection/VersionFilter.java        | 13 +++++----
 .../aether/version/VersionConstraint.java       |  8 +++---
 .../spi/connector/layout/RepositoryLayout.java  |  7 +++--
 .../graph/transformer/ConflictResolver.java     | 26 +++++++++++------
 11 files changed, 100 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ef4a917/aether-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java b/aether-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java
index 194a661..363ede6 100644
--- a/aether-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java
+++ b/aether-api/src/main/java/org/eclipse/aether/DefaultRepositorySystemSession.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,10 +36,12 @@ import org.eclipse.aether.resolution.ResolutionErrorPolicy;
 import org.eclipse.aether.transfer.TransferListener;
 
 /**
- * A simple repository system session. <em>Note:</em> This class is not thread-safe. It is assumed that the mutators get
- * only called during an initialization phase and that the session itself is not changed when being used by the
- * repository system. It is recommended to call {@link #setReadOnly()} once the session has been fully initialized to
- * prevent accidental manipulation of it afterwards.
+ * A simple repository system session.
+ * <p>
+ * <strong>Note:</strong> This class is not thread-safe. It is assumed that the mutators get only called during an
+ * initialization phase and that the session itself is not changed once initialized and being used by the repository
+ * system. It is recommended to call {@link #setReadOnly()} once the session has been fully initialized to prevent
+ * accidental manipulation of it afterwards.
  */
 public final class DefaultRepositorySystemSession
     implements RepositorySystemSession
@@ -123,7 +125,9 @@ public final class DefaultRepositorySystemSession
 
     /**
      * Creates a shallow copy of the specified session. Actually, the copy is not completely shallow, all maps holding
-     * properties are copied as well. In other words, mutating the new session has no effect on the original session.
+     * system/user/config properties are copied as well. In other words, invoking any mutator on the new session itself
+     * has no effect on the original session. Other mutable objects like the session data and cache (if any) are not
+     * copied and will be shared with the original session unless reconfigured.
      * 
      * @param session The session to copy, must not be {@code null}.
      */
@@ -395,6 +399,7 @@ public final class DefaultRepositorySystemSession
     /**
      * Sets the system properties to use, e.g. for processing of artifact descriptors. System properties are usually
      * collected from the runtime environment like {@link System#getProperties()} and environment variables.
+     * <p>
      * <em>Note:</em> System properties are of type {@code Map<String, String>} and any key-value pair in the input map
      * that doesn't match this type will be silently ignored.
      * 
@@ -438,8 +443,10 @@ public final class DefaultRepositorySystemSession
     /**
      * Sets the user properties to use, e.g. for processing of artifact descriptors. User properties are similar to
      * system properties but are set on the discretion of the user and hence are considered of higher priority than
-     * system properties. <em>Note:</em> User properties are of type {@code Map<String, String>} and any key-value pair
-     * in the input map that doesn't match this type will be silently ignored.
+     * system properties in case of conflicts.
+     * <p>
+     * <em>Note:</em> User properties are of type {@code Map<String, String>} and any key-value pair in the input map
+     * that doesn't match this type will be silently ignored.
      * 
      * @param userProperties The user properties, may be {@code null} or empty if none.
      * @return This session for chaining, never {@code null}.
@@ -480,9 +487,10 @@ public final class DefaultRepositorySystemSession
 
     /**
      * Sets the configuration properties used to tweak internal aspects of the repository system (e.g. thread pooling,
-     * connector-specific behavior, etc.) <em>Note:</em> Configuration properties are of type
-     * {@code Map<String, Object>} and any key-value pair in the input map that doesn't match this type will be silently
-     * ignored.
+     * connector-specific behavior, etc.).
+     * <p>
+     * <em>Note:</em> Configuration properties are of type {@code Map<String, Object>} and any key-value pair in the
+     * input map that doesn't match this type will be silently ignored.
      * 
      * @param configProperties The configuration properties, may be {@code null} or empty if none.
      * @return This session for chaining, never {@code null}.

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ef4a917/aether-api/src/main/java/org/eclipse/aether/RepositoryCache.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/RepositoryCache.java b/aether-api/src/main/java/org/eclipse/aether/RepositoryCache.java
index 95dbdfe..7363844 100644
--- a/aether-api/src/main/java/org/eclipse/aether/RepositoryCache.java
+++ b/aether-api/src/main/java/org/eclipse/aether/RepositoryCache.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2012 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,9 +23,10 @@ public interface RepositoryCache
     /**
      * Puts the specified data into the cache. It is entirely up to the cache implementation how long this data will be
      * kept before being purged, i.e. callers must not make any assumptions about the lifetime of cached data.
-     * <strong>Warning:</strong> The cache will directly save the provided reference. If the cached data is mutable,
-     * i.e. could be modified after being put into the cache, the caller is responsible for creating a copy of the
-     * original data and store the copy in the cache.
+     * <p>
+     * <em>Warning:</em> The cache will directly save the provided reference. If the cached data is mutable, i.e. could
+     * be modified after being put into the cache, the caller is responsible for creating a copy of the original data
+     * and store the copy in the cache.
      * 
      * @param session The repository session during which the cache is accessed, must not be {@code null}.
      * @param key The key to use for lookup of the data, must not be {@code null}.
@@ -34,9 +35,11 @@ public interface RepositoryCache
     void put( RepositorySystemSession session, Object key, Object data );
 
     /**
-     * Gets the specified data from the cache. <strong>Warning:</strong> The cache will directly return the saved
-     * reference. If the cached data is to be modified after its retrieval, the caller is responsible to create a copy
-     * of the returned data and use this instead of the cache record.
+     * Gets the specified data from the cache.
+     * <p>
+     * <em>Warning:</em> The cache will directly return the saved reference. If the cached data is to be modified after
+     * its retrieval, the caller is responsible to create a copy of the returned data and use this instead of the cache
+     * record.
      * 
      * @param session The repository session during which the cache is accessed, must not be {@code null}.
      * @param key The key to use for lookup of the data, must not be {@code null}.

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ef4a917/aether-api/src/main/java/org/eclipse/aether/SessionData.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/SessionData.java b/aether-api/src/main/java/org/eclipse/aether/SessionData.java
index a594d41..92930e7 100644
--- a/aether-api/src/main/java/org/eclipse/aether/SessionData.java
+++ b/aether-api/src/main/java/org/eclipse/aether/SessionData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2012 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,10 +12,12 @@ package org.eclipse.aether;
 
 /**
  * A container for data that is specific to a repository system session. Both components within the repository system
- * and clients of the system may use this storage to associate arbitrary data with a session. Unlike a cache, this
- * session data is not subject to purging. For this same reason, session data should also not be abused as a cache (i.e.
- * for storing values that can be re-calculated) to avoid memory exhaustion. <strong>Note:</strong> Actual
- * implementations must be thread-safe.
+ * and clients of the system may use this storage to associate arbitrary data with a session.
+ * <p>
+ * Unlike a cache, this session data is not subject to purging. For this same reason, session data should also not be
+ * abused as a cache (i.e. for storing values that can be re-calculated) to avoid memory exhaustion.
+ * <p>
+ * <strong>Note:</strong> Actual implementations must be thread-safe.
  * 
  * @see RepositorySystemSession#getData()
  * @noimplement This interface is not intended to be implemented by clients.
@@ -39,8 +41,8 @@ public interface SessionData
      * @param key The key under which to store the session data, must not be {@code null}.
      * @param oldValue The expected data currently associated with the key, may be {@code null}.
      * @param newValue The data to associate with the key, may be {@code null} to remove the mapping.
-     * @return {@code true} if the key mapping was updated to the specified value, {@code false} if the current key
-     *         mapping didn't match the expected value and was not updated.
+     * @return {@code true} if the key mapping was successfully updated from the old value to the new value,
+     *         {@code false} if the current key mapping didn't match the expected value and was not updated.
      */
     boolean set( Object key, Object oldValue, Object newValue );
 

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ef4a917/aether-api/src/main/java/org/eclipse/aether/collection/DependencyGraphTransformer.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/collection/DependencyGraphTransformer.java b/aether-api/src/main/java/org/eclipse/aether/collection/DependencyGraphTransformer.java
index 22f9498..b3deebe 100644
--- a/aether-api/src/main/java/org/eclipse/aether/collection/DependencyGraphTransformer.java
+++ b/aether-api/src/main/java/org/eclipse/aether/collection/DependencyGraphTransformer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2012 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,8 +14,13 @@ import org.eclipse.aether.RepositoryException;
 import org.eclipse.aether.graph.DependencyNode;
 
 /**
- * Transforms a given dependency graph. <em>Note:</em> Dependency graphs may contain cycles, as such a graph transformer
- * needs to gracefully handle cyclic graphs, e.g. guard against infinite recursion. Implementations must be stateless.
+ * Transforms a given dependency graph.
+ * <p>
+ * <strong>Note:</strong> Implementations must be stateless.
+ * <p>
+ * <em>Warning:</em> Dependency graphs may generally contain cycles. As such a graph transformer that cannot assume for
+ * sure that cycles have already been eliminated must gracefully handle cyclic graphs, e.g. guard against infinite
+ * recursion.
  * 
  * @see org.eclipse.aether.RepositorySystemSession#getDependencyGraphTransformer()
  */

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ef4a917/aether-api/src/main/java/org/eclipse/aether/collection/DependencyManager.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/collection/DependencyManager.java b/aether-api/src/main/java/org/eclipse/aether/collection/DependencyManager.java
index 3ee6b0e..e214f66 100644
--- a/aether-api/src/main/java/org/eclipse/aether/collection/DependencyManager.java
+++ b/aether-api/src/main/java/org/eclipse/aether/collection/DependencyManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,9 +13,12 @@ package org.eclipse.aether.collection;
 import org.eclipse.aether.graph.Dependency;
 
 /**
- * Applies dependency management to the dependencies of a dependency node. Implementations must be stateless.
- * <em>Note:</em> This hook is called from a hot spot and therefore implementations should pay attention to performance.
- * Among others, implementations should provide a semantic {@link Object#equals(Object) equals()} method.
+ * Applies dependency management to the dependencies of a dependency node.
+ * <p>
+ * <strong>Note:</strong> Implementations must be stateless.
+ * <p>
+ * <em>Warning:</em> This hook is called from a hot spot and therefore implementations should pay attention to
+ * performance. Among others, implementations should provide a semantic {@link Object#equals(Object) equals()} method.
  * 
  * @see org.eclipse.aether.RepositorySystemSession#getDependencyManager()
  * @see org.eclipse.aether.RepositorySystem#collectDependencies(org.eclipse.aether.RepositorySystemSession,

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ef4a917/aether-api/src/main/java/org/eclipse/aether/collection/DependencySelector.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/collection/DependencySelector.java b/aether-api/src/main/java/org/eclipse/aether/collection/DependencySelector.java
index a555c2f..de503be 100644
--- a/aether-api/src/main/java/org/eclipse/aether/collection/DependencySelector.java
+++ b/aether-api/src/main/java/org/eclipse/aether/collection/DependencySelector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,9 +13,12 @@ package org.eclipse.aether.collection;
 import org.eclipse.aether.graph.Dependency;
 
 /**
- * Decides what dependencies to include in the dependency graph. Implementations must be stateless. <em>Note:</em> This
- * hook is called from a hot spot and therefore implementations should pay attention to performance. Among others,
- * implementations should provide a semantic {@link Object#equals(Object) equals()} method.
+ * Decides what dependencies to include in the dependency graph.
+ * <p>
+ * <strong>Note:</strong> Implementations must be stateless.
+ * <p>
+ * <em>Warning:</em> This hook is called from a hot spot and therefore implementations should pay attention to
+ * performance. Among others, implementations should provide a semantic {@link Object#equals(Object) equals()} method.
  * 
  * @see org.eclipse.aether.RepositorySystemSession#getDependencySelector()
  * @see org.eclipse.aether.RepositorySystem#collectDependencies(org.eclipse.aether.RepositorySystemSession,

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ef4a917/aether-api/src/main/java/org/eclipse/aether/collection/DependencyTraverser.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/collection/DependencyTraverser.java b/aether-api/src/main/java/org/eclipse/aether/collection/DependencyTraverser.java
index b237213..8140395 100644
--- a/aether-api/src/main/java/org/eclipse/aether/collection/DependencyTraverser.java
+++ b/aether-api/src/main/java/org/eclipse/aether/collection/DependencyTraverser.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,9 +13,12 @@ package org.eclipse.aether.collection;
 import org.eclipse.aether.graph.Dependency;
 
 /**
- * Decides whether the dependencies of a dependency node should be traversed as well. Implementations must be stateless.
- * <em>Note:</em> This hook is called from a hot spot and therefore implementations should pay attention to performance.
- * Among others, implementations should provide a semantic {@link Object#equals(Object) equals()} method.
+ * Decides whether the dependencies of a dependency node should be traversed as well.
+ * <p>
+ * <strong>Note:</strong> Implementations must be stateless.
+ * <p>
+ * <em>Warning:</em> This hook is called from a hot spot and therefore implementations should pay attention to
+ * performance. Among others, implementations should provide a semantic {@link Object#equals(Object) equals()} method.
  * 
  * @see org.eclipse.aether.RepositorySystemSession#getDependencyTraverser()
  * @see org.eclipse.aether.RepositorySystem#collectDependencies(org.eclipse.aether.RepositorySystemSession,

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ef4a917/aether-api/src/main/java/org/eclipse/aether/collection/VersionFilter.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/collection/VersionFilter.java b/aether-api/src/main/java/org/eclipse/aether/collection/VersionFilter.java
index 7d8b7c8..02e7ab3 100644
--- a/aether-api/src/main/java/org/eclipse/aether/collection/VersionFilter.java
+++ b/aether-api/src/main/java/org/eclipse/aether/collection/VersionFilter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 Sonatype, Inc.
+ * Copyright (c) 2013, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,10 +22,13 @@ import org.eclipse.aether.version.Version;
 import org.eclipse.aether.version.VersionConstraint;
 
 /**
- * Decides which versions matching a version range should actually be considered for the dependency graph.
- * Implementations must be stateless. <em>Note:</em> This hook is called from a hot spot and therefore implementations
- * should pay attention to performance. Among others, implementations should provide a semantic
- * {@link Object#equals(Object) equals()} method.
+ * Decides which versions matching a version range should actually be considered for the dependency graph. The version
+ * filter is not invoked for dependencies that do not declare a version range but a single version.
+ * <p>
+ * <strong>Note:</strong> Implementations must be stateless.
+ * <p>
+ * <em>Warning:</em> This hook is called from a hot spot and therefore implementations should pay attention to
+ * performance. Among others, implementations should provide a semantic {@link Object#equals(Object) equals()} method.
  * 
  * @see org.eclipse.aether.RepositorySystemSession#getVersionFilter()
  * @see org.eclipse.aether.RepositorySystem#collectDependencies(org.eclipse.aether.RepositorySystemSession,

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ef4a917/aether-api/src/main/java/org/eclipse/aether/version/VersionConstraint.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/version/VersionConstraint.java b/aether-api/src/main/java/org/eclipse/aether/version/VersionConstraint.java
index d4f6b52..dcb3b68 100644
--- a/aether-api/src/main/java/org/eclipse/aether/version/VersionConstraint.java
+++ b/aether-api/src/main/java/org/eclipse/aether/version/VersionConstraint.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,9 +11,9 @@
 package org.eclipse.aether.version;
 
 /**
- * A constraint on versions for a dependency. A constraint can either consist of a version range or a single version. In
- * the first case, the constraint expresses a hard requirement on a version matching the range. In the second case, the
- * constraint expresses a soft requirement on a specific version (i.e. a recommendation).
+ * A constraint on versions for a dependency. A constraint can either consist of a version range (e.g. "[1, ]") or a
+ * single version (e.g. "1.1"). In the first case, the constraint expresses a hard requirement on a version matching the
+ * range. In the second case, the constraint expresses a soft requirement on a specific version (i.e. a recommendation).
  */
 public interface VersionConstraint
 {

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ef4a917/aether-spi/src/main/java/org/eclipse/aether/spi/connector/layout/RepositoryLayout.java
----------------------------------------------------------------------
diff --git a/aether-spi/src/main/java/org/eclipse/aether/spi/connector/layout/RepositoryLayout.java b/aether-spi/src/main/java/org/eclipse/aether/spi/connector/layout/RepositoryLayout.java
index 1594e10..f200714 100644
--- a/aether-spi/src/main/java/org/eclipse/aether/spi/connector/layout/RepositoryLayout.java
+++ b/aether-spi/src/main/java/org/eclipse/aether/spi/connector/layout/RepositoryLayout.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 Sonatype, Inc.
+ * Copyright (c) 2013, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,8 +18,9 @@ import org.eclipse.aether.artifact.Artifact;
 import org.eclipse.aether.metadata.Metadata;
 
 /**
- * The layout for a remote repository whose artifacts/metadata can be addressed via URIs. Implementations must be
- * stateless.
+ * The layout for a remote repository whose artifacts/metadata can be addressed via URIs.
+ * <p>
+ * <strong>Note:</strong> Implementations must be stateless.
  */
 public interface RepositoryLayout
 {

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ef4a917/aether-util/src/main/java/org/eclipse/aether/util/graph/transformer/ConflictResolver.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/graph/transformer/ConflictResolver.java b/aether-util/src/main/java/org/eclipse/aether/util/graph/transformer/ConflictResolver.java
index 7ce9685..2caebb5 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/graph/transformer/ConflictResolver.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/graph/transformer/ConflictResolver.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2012, 2013 Sonatype, Inc.
+ * Copyright (c) 2012, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -1144,7 +1144,9 @@ public final class ConflictResolver
      * An extension point of {@link ConflictResolver} that determines the winner among conflicting dependencies. The
      * winning node (and its children) will be retained in the dependency graph, the other nodes will get removed. The
      * version selector does not need to deal with potential scope conflicts, these will be addressed afterwards by the
-     * {@link ScopeSelector}. Implementations must be stateless.
+     * {@link ScopeSelector}.
+     * <p>
+     * <strong>Note:</strong> Implementations must be stateless.
      */
     public static abstract class VersionSelector
     {
@@ -1154,7 +1156,7 @@ public final class ConflictResolver
          * this method once per
          * {@link ConflictResolver#transformGraph(DependencyNode, DependencyGraphTransformationContext)} invocation to
          * allow implementations to prepare any auxiliary data that is needed for their operation. Given that
-         * implementations need to be stateless, a new instance needs to be returned to hold such auxiliary data. The
+         * implementations must be stateless, a new instance needs to be returned to hold such auxiliary data. The
          * default implementation simply returns the current instance which is appropriate for implementations which do
          * not require auxiliary data.
          * 
@@ -1186,7 +1188,9 @@ public final class ConflictResolver
     /**
      * An extension point of {@link ConflictResolver} that determines the effective scope of a dependency from a
      * potentially conflicting set of {@link ScopeDeriver derived scopes}. The scope selector gets invoked after the
-     * {@link VersionSelector} has picked the winning node. Implementations must be stateless.
+     * {@link VersionSelector} has picked the winning node.
+     * <p>
+     * <strong>Note:</strong> Implementations must be stateless.
      */
     public static abstract class ScopeSelector
     {
@@ -1196,7 +1200,7 @@ public final class ConflictResolver
          * this method once per
          * {@link ConflictResolver#transformGraph(DependencyNode, DependencyGraphTransformationContext)} invocation to
          * allow implementations to prepare any auxiliary data that is needed for their operation. Given that
-         * implementations need to be stateless, a new instance needs to be returned to hold such auxiliary data. The
+         * implementations must be stateless, a new instance needs to be returned to hold such auxiliary data. The
          * default implementation simply returns the current instance which is appropriate for implementations which do
          * not require auxiliary data.
          * 
@@ -1227,7 +1231,9 @@ public final class ConflictResolver
 
     /**
      * An extension point of {@link ConflictResolver} that determines the scope of a dependency in relation to the scope
-     * of its parent. Implementations must be stateless.
+     * of its parent.
+     * <p>
+     * <strong>Note:</strong> Implementations must be stateless.
      */
     public static abstract class ScopeDeriver
     {
@@ -1237,7 +1243,7 @@ public final class ConflictResolver
          * this method once per
          * {@link ConflictResolver#transformGraph(DependencyNode, DependencyGraphTransformationContext)} invocation to
          * allow implementations to prepare any auxiliary data that is needed for their operation. Given that
-         * implementations need to be stateless, a new instance needs to be returned to hold such auxiliary data. The
+         * implementations must be stateless, a new instance needs to be returned to hold such auxiliary data. The
          * default implementation simply returns the current instance which is appropriate for implementations which do
          * not require auxiliary data.
          * 
@@ -1268,7 +1274,9 @@ public final class ConflictResolver
     /**
      * An extension point of {@link ConflictResolver} that determines the effective optional flag of a dependency from a
      * potentially conflicting set of derived optionalities. The optionality selector gets invoked after the
-     * {@link VersionSelector} has picked the winning node. Implementations must be stateless.
+     * {@link VersionSelector} has picked the winning node.
+     * <p>
+     * <strong>Note:</strong> Implementations must be stateless.
      */
     public static abstract class OptionalitySelector
     {
@@ -1278,7 +1286,7 @@ public final class ConflictResolver
          * calls this method once per
          * {@link ConflictResolver#transformGraph(DependencyNode, DependencyGraphTransformationContext)} invocation to
          * allow implementations to prepare any auxiliary data that is needed for their operation. Given that
-         * implementations need to be stateless, a new instance needs to be returned to hold such auxiliary data. The
+         * implementations must be stateless, a new instance needs to be returned to hold such auxiliary data. The
          * default implementation simply returns the current instance which is appropriate for implementations which do
          * not require auxiliary data.
          * 


[25/50] [abbrv] maven-aether git commit: fixed typo

Posted by ol...@apache.org.
fixed typo

Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/bb7c121b
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/bb7c121b
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/bb7c121b

Branch: refs/heads/master
Commit: bb7c121befcd8a36c2663838afee48ae1c5f3191
Parents: 9440b37
Author: Herv� Boutemy <he...@free.fr>
Authored: Sun Sep 28 09:19:05 2014 +0200
Committer: Herv� Boutemy <he...@free.fr>
Committed: Sun Sep 28 09:26:36 2014 +0200

----------------------------------------------------------------------
 class-overview.svg | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)
----------------------------------------------------------------------



[11/50] [abbrv] maven-aether git commit: Extended tests for DefaultProxySelector

Posted by ol...@apache.org.
Extended tests for DefaultProxySelector


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/ad273427
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/ad273427
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/ad273427

Branch: refs/heads/master
Commit: ad273427e8c63b60f0a144fd22fdbbab8dd7a524
Parents: fbf380c
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat May 31 16:44:50 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat May 31 16:44:50 2014 +0200

----------------------------------------------------------------------
 .../repository/DefaultProxySelectorTest.java    | 70 ++++++++++++++++++++
 1 file changed, 70 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/ad273427/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
index 6ae5f2b..80392b1 100644
--- a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
+++ b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultProxySelectorTest.java
@@ -14,6 +14,8 @@ import static org.junit.Assert.*;
 
 import java.util.Arrays;
 
+import org.eclipse.aether.repository.Proxy;
+import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.util.repository.DefaultProxySelector.NonProxyHosts;
 import org.junit.Test;
 
@@ -22,6 +24,11 @@ import org.junit.Test;
 public class DefaultProxySelectorTest
 {
 
+    private RemoteRepository newRepo( String url )
+    {
+        return new RemoteRepository.Builder( "id", "type", url ).build();
+    }
+
     private boolean isNonProxyHost( String host, String nonProxyHosts )
     {
         return new NonProxyHosts( NonProxyHosts.split( nonProxyHosts ) ).isNonProxyHost( host );
@@ -90,4 +97,67 @@ public class DefaultProxySelectorTest
         assertTrue( isNonProxyHost( "www.ECLIPSE.org", "www.eclipse.org" ) );
     }
 
+    @Test
+    public void testGetProxy_FirstMatchWins()
+    {
+        DefaultProxySelector selector = new DefaultProxySelector();
+        Proxy proxy1 = new Proxy( Proxy.TYPE_HTTP, "proxy", 88 );
+        selector.add( proxy1, "localhost" );
+        Proxy proxy2 = new Proxy( Proxy.TYPE_HTTP, "other", 8888 );
+        selector.add( proxy2, "" );
+
+        assertSame( proxy1, selector.getProxy( newRepo( "http://eclipse.org/" ) ) );
+        assertSame( proxy2, selector.getProxy( newRepo( "http://localhost/" ) ) );
+    }
+
+    @Test
+    public void testGetProxy_Http()
+    {
+        DefaultProxySelector selector = new DefaultProxySelector();
+        Proxy proxy1 = new Proxy( Proxy.TYPE_HTTP, "proxy", 88 );
+        selector.add( proxy1, "localhost" );
+
+        assertSame( proxy1, selector.getProxy( newRepo( "http://eclipse.org/" ) ) );
+        assertSame( proxy1, selector.getProxy( newRepo( "HTTP://eclipse.org/" ) ) );
+
+        assertSame( proxy1, selector.getProxy( newRepo( "https://eclipse.org/" ) ) );
+        assertSame( proxy1, selector.getProxy( newRepo( "HTTPS://eclipse.org/" ) ) );
+
+        assertNull( selector.getProxy( newRepo( "http://localhost/" ) ) );
+
+        Proxy proxy2 = new Proxy( Proxy.TYPE_HTTPS, "sproxy", 888 );
+        selector.add( proxy2, "localhost" );
+
+        assertSame( proxy1, selector.getProxy( newRepo( "http://eclipse.org/" ) ) );
+        assertSame( proxy1, selector.getProxy( newRepo( "HTTP://eclipse.org/" ) ) );
+
+        assertSame( proxy2, selector.getProxy( newRepo( "https://eclipse.org/" ) ) );
+        assertSame( proxy2, selector.getProxy( newRepo( "HTTPS://eclipse.org/" ) ) );
+    }
+
+    @Test
+    public void testGetProxy_WebDav()
+    {
+        DefaultProxySelector selector = new DefaultProxySelector();
+        Proxy proxy1 = new Proxy( Proxy.TYPE_HTTP, "proxy", 88 );
+        selector.add( proxy1, "localhost" );
+
+        assertSame( proxy1, selector.getProxy( newRepo( "dav://eclipse.org/" ) ) );
+        assertSame( proxy1, selector.getProxy( newRepo( "dav:http://eclipse.org/" ) ) );
+
+        assertSame( proxy1, selector.getProxy( newRepo( "davs://eclipse.org/" ) ) );
+        assertSame( proxy1, selector.getProxy( newRepo( "dav:https://eclipse.org/" ) ) );
+
+        assertNull( selector.getProxy( newRepo( "dav://localhost/" ) ) );
+
+        Proxy proxy2 = new Proxy( Proxy.TYPE_HTTPS, "sproxy", 888 );
+        selector.add( proxy2, "localhost" );
+
+        assertSame( proxy1, selector.getProxy( newRepo( "dav://eclipse.org/" ) ) );
+        assertSame( proxy1, selector.getProxy( newRepo( "dav:http://eclipse.org/" ) ) );
+
+        assertSame( proxy2, selector.getProxy( newRepo( "davs://eclipse.org/" ) ) );
+        assertSame( proxy2, selector.getProxy( newRepo( "dav:https://eclipse.org/" ) ) );
+    }
+
 }


[12/50] [abbrv] maven-aether git commit: Refactored DefaultMirrorSelector

Posted by ol...@apache.org.
Refactored DefaultMirrorSelector


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/6ef2c6e8
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/6ef2c6e8
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/6ef2c6e8

Branch: refs/heads/master
Commit: 6ef2c6e88c77250cca32b2af4eb019024f12b687
Parents: ad27342
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat May 31 16:46:14 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat May 31 16:46:14 2014 +0200

----------------------------------------------------------------------
 .../util/repository/DefaultMirrorSelector.java  | 235 ++++++++++---------
 1 file changed, 120 insertions(+), 115 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ef2c6e8/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
index 9cb83ae..168ff52 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,8 @@
 package org.eclipse.aether.util.repository;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
@@ -33,23 +35,23 @@ public final class DefaultMirrorSelector
     /**
      * Adds the specified mirror to this selector.
      * 
-     * @param id The identifier of the mirror, must not be {@code null}.
-     * @param url The URL of the mirror, must not be {@code null}.
-     * @param type The content type of the mirror, must not be {@code null}.
+     * @param id The identifier of the mirror, may be {@code null}.
+     * @param url The URL of the mirror, may be {@code null}.
+     * @param type The content type of the mirror, may be {@code null}.
      * @param repositoryManager A flag whether the mirror is a repository manager or a simple server.
-     * @param mirrorOfIds The identifier(s) of remote repositories to mirror, must not be {@code null}. Multiple
-     *            identifiers can be separated by comma and additionally the wildcards "*" and "external:*" can be used
-     *            to match all (external) repositories, prefixing a repo id with an exclamation mark allows to express
-     *            an exclusion. For example "external:*,!central".
+     * @param mirrorOfIds The identifier(s) of remote repositories to mirror, may be {@code null}. Multiple identifiers
+     *            can be separated by comma (',') and additionally the wildcards "*" and "external:*" can be used to
+     *            match all (external) repositories, prefixing a repo id with an exclamation mark allows to express an
+     *            exclusion. For example "external:*,!central".
      * @param mirrorOfTypes The content type(s) of remote repositories to mirror, may be {@code null} or empty to match
-     *            any content type. Similar to the repo id specification, multiple types can be comma-separated, the
-     *            wildcard "*" and the "!" negation syntax are supported. For example "*,!p2".
+     *            any content type. Multiple types can be separated by comma (','), the wildcard "*" and the "!"
+     *            negation syntax are also supported. For example "*,!p2".
      * @return This selector for chaining, never {@code null}.
      */
     public DefaultMirrorSelector add( String id, String url, String type, boolean repositoryManager,
                                       String mirrorOfIds, String mirrorOfTypes )
     {
-        mirrors.add( new MirrorDef( id, url, type, repositoryManager, mirrorOfIds, mirrorOfTypes ) );
+        mirrors.add( new MirrorDef( id, url, type, repositoryManager, split( mirrorOfIds ), split( mirrorOfTypes ) ) );
 
         return this;
     }
@@ -83,14 +85,14 @@ public final class DefaultMirrorSelector
 
     private MirrorDef findMirror( RemoteRepository repository )
     {
-        String repoId = repository.getId();
-
-        if ( repoId != null && !mirrors.isEmpty() )
+        if ( !mirrors.isEmpty() )
         {
+            String repoId = repository.getId();
+            String repoType = repository.getContentType();
+
             for ( MirrorDef mirror : mirrors )
             {
-                if ( repoId.equals( mirror.mirrorOfIds ) && matchesType( repository.getContentType(),
-                                                                         mirror.mirrorOfTypes ) )
+                if ( mirror.idMatcher.isExactMatch( repoId ) && mirror.typeMatcher.isMatch( repoType ) )
                 {
                     return mirror;
                 }
@@ -98,8 +100,7 @@ public final class DefaultMirrorSelector
 
             for ( MirrorDef mirror : mirrors )
             {
-                if ( matchPattern( repository, mirror.mirrorOfIds ) && matchesType( repository.getContentType(),
-                                                                                    mirror.mirrorOfTypes ) )
+                if ( mirror.idMatcher.isMatch( repository ) && mirror.typeMatcher.isMatch( repoType ) )
                 {
                     return mirror;
                 }
@@ -109,131 +110,135 @@ public final class DefaultMirrorSelector
         return null;
     }
 
-    /**
-     * This method checks if the pattern matches the originalRepository. Valid patterns: * = everything external:* =
-     * everything not on the localhost and not file based. repo,repo1 = repo or repo1 *,!repo1 = everything except repo1
-     * 
-     * @param repository 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.
-     */
-    static boolean matchPattern( RemoteRepository repository, String pattern )
+    static List<String> split( String list )
     {
-        boolean result = false;
-        String originalId = repository.getId();
+        List<String> tokens = null;
+        if ( list != null )
+        {
+            tokens = Arrays.asList( list.split( "," ) );
+        }
+        return tokens;
+    }
 
-        // simple checks first to short circuit processing below.
-        if ( WILDCARD.equals( pattern ) || pattern.equals( originalId ) )
+    static String[] clean( Collection<String> tokens )
+    {
+        List<String> cleaned = new ArrayList<String>();
+        if ( tokens != null )
         {
-            result = true;
+            for ( String token : tokens )
+            {
+                if ( token != null && token.length() > 0 )
+                {
+                    cleaned.add( token );
+                }
+            }
         }
-        else
+        return cleaned.toArray( new String[cleaned.size()] );
+    }
+
+    static final class IdMatcher
+    {
+
+        final String[] mirrorOfIds;
+
+        public IdMatcher( Collection<String> mirrorOfIds )
+        {
+            this.mirrorOfIds = clean( mirrorOfIds );
+        }
+
+        boolean isExactMatch( String repoId )
         {
-            // process the list
-            String[] repos = pattern.split( "," );
-            for ( String repo : repos )
+            return mirrorOfIds.length == 1 && mirrorOfIds[0].equals( repoId );
+        }
+
+        boolean isMatch( RemoteRepository repository )
+        {
+            boolean result = false;
+            if ( mirrorOfIds.length <= 0 )
+            {
+                result = false;
+            }
+            else
             {
-                // see if this is a negative match
-                if ( repo.length() > 1 && repo.startsWith( "!" ) )
+                String repoId = repository.getId();
+                for ( String mirrorOfId : mirrorOfIds )
                 {
-                    if ( repo.substring( 1 ).equals( originalId ) )
+                    if ( mirrorOfId.equals( repoId ) )
+                    {
+                        result = true;
+                        break;
+                    }
+                    else if ( mirrorOfId.startsWith( "!" ) && mirrorOfId.substring( 1 ).equals( repoId ) )
                     {
-                        // explicitly exclude. Set result and stop processing.
                         result = false;
                         break;
                     }
-                }
-                // check for exact match
-                else if ( repo.equals( originalId ) )
-                {
-                    result = true;
-                    break;
-                }
-                // check for external:*
-                else if ( EXTERNAL_WILDCARD.equals( repo ) && isExternalRepo( repository ) )
-                {
-                    result = true;
-                    // don't stop processing in case a future segment explicitly excludes this repo
-                }
-                else if ( WILDCARD.equals( repo ) )
-                {
-                    result = true;
-                    // don't stop processing in case a future segment explicitly excludes this repo
+                    else if ( EXTERNAL_WILDCARD.equals( mirrorOfId ) && isExternalRepo( repository ) )
+                    {
+                        result = true;
+                    }
+                    else if ( WILDCARD.equals( mirrorOfId ) )
+                    {
+                        result = true;
+                    }
                 }
             }
+            return result;
+        }
+
+        static boolean isExternalRepo( RemoteRepository repository )
+        {
+            boolean local =
+                "localhost".equals( repository.getHost() ) || "127.0.0.1".equals( repository.getHost() )
+                    || "file".equalsIgnoreCase( repository.getProtocol() );
+            return !local;
         }
-        return result;
-    }
 
-    /**
-     * Checks the URL to see if this repository refers to an external repository.
-     * 
-     * @param repository The repository to check, must not be {@code null}.
-     * @return {@code true} if external, {@code false} otherwise.
-     */
-    static boolean isExternalRepo( RemoteRepository repository )
-    {
-        boolean local =
-            "localhost".equals( repository.getHost() ) || "127.0.0.1".equals( repository.getHost() )
-                || "file".equalsIgnoreCase( repository.getProtocol() );
-        return !local;
     }
 
-    /**
-     * Checks whether the types configured for a mirror match with the type of the repository.
-     * 
-     * @param repoType The type of the repository, may be {@code null}.
-     * @param mirrorType The types supported by the mirror, may be {@code null}.
-     * @return {@code true} if the types associated with the mirror match the type of the original repository,
-     *         {@code false} otherwise.
-     */
-    static boolean matchesType( String repoType, String mirrorType )
+    static final class TypeMatcher
     {
-        boolean result = false;
 
-        // simple checks first to short circuit processing below.
-        if ( mirrorType == null || mirrorType.length() <= 0 || WILDCARD.equals( mirrorType ) )
-        {
-            result = true;
-        }
-        else if ( mirrorType.equals( repoType ) )
+        final String[] mirrorOfTypes;
+
+        public TypeMatcher( Collection<String> mirrorOfTypes )
         {
-            result = true;
+            this.mirrorOfTypes = clean( mirrorOfTypes );
         }
-        else
+
+        boolean isMatch( String repoType )
         {
-            // process the list
-            String[] layouts = mirrorType.split( "," );
-            for ( String layout : layouts )
+            boolean result = false;
+            if ( mirrorOfTypes.length <= 0 )
+            {
+                result = true;
+            }
+            else
             {
-                // see if this is a negative match
-                if ( layout.length() > 1 && layout.startsWith( "!" ) )
+                for ( String mirrorOfType : mirrorOfTypes )
                 {
-                    if ( layout.substring( 1 ).equals( repoType ) )
+                    if ( mirrorOfType.equals( repoType ) )
+                    {
+                        result = true;
+                        break;
+                    }
+                    else if ( mirrorOfType.startsWith( "!" ) && mirrorOfType.substring( 1 ).equals( repoType ) )
                     {
-                        // explicitly exclude. Set result and stop processing.
                         result = false;
                         break;
                     }
-                }
-                // check for exact match
-                else if ( layout.equals( repoType ) )
-                {
-                    result = true;
-                    break;
-                }
-                else if ( WILDCARD.equals( layout ) )
-                {
-                    result = true;
-                    // don't stop processing in case a future segment explicitly excludes this repo
+                    else if ( WILDCARD.equals( mirrorOfType ) )
+                    {
+                        result = true;
+                    }
                 }
             }
+            return result;
         }
 
-        return result;
     }
 
-    static class MirrorDef
+    static final class MirrorDef
     {
 
         final String id;
@@ -244,19 +249,19 @@ public final class DefaultMirrorSelector
 
         final boolean repositoryManager;
 
-        final String mirrorOfIds;
+        final IdMatcher idMatcher;
 
-        final String mirrorOfTypes;
+        final TypeMatcher typeMatcher;
 
-        public MirrorDef( String id, String url, String type, boolean repositoryManager, String mirrorOfIds,
-                          String mirrorOfTypes )
+        public MirrorDef( String id, String url, String type, boolean repositoryManager,
+                          Collection<String> mirrorOfIds, Collection<String> mirrorOfTypes )
         {
             this.id = id;
             this.url = url;
             this.type = type;
             this.repositoryManager = repositoryManager;
-            this.mirrorOfIds = mirrorOfIds;
-            this.mirrorOfTypes = mirrorOfTypes;
+            this.idMatcher = new IdMatcher( mirrorOfIds );
+            this.typeMatcher = new TypeMatcher( mirrorOfTypes );
         }
 
     }


[37/50] [abbrv] maven-aether git commit: Cleaned up WebDAv test

Posted by ol...@apache.org.
Cleaned up WebDAv test


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/a29e4329
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/a29e4329
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/a29e4329

Branch: refs/heads/master
Commit: a29e432956de384a4ca6127c644986da2f981624
Parents: 07e1a84
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Oct 19 17:21:05 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Oct 19 17:21:05 2014 +0200

----------------------------------------------------------------------
 .../eclipse/aether/transport/http/HttpTransporterTest.java    | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/a29e4329/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
index eed95b4..50d4fee 100644
--- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
+++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
@@ -831,8 +831,6 @@ public class HttpTransporterTest
     {
         session.setConfigProperty( "aether.connector.http.webDav." + REPO_ID, "false" );
         httpServer.setWebDav( HttpServer.WebDav.OPTIONAL );
-        httpServer.setAuthentication( "testuser", "testpass" );
-        auth = new AuthenticationBuilder().addUsername( "testuser" ).addPassword( "testpass" ).build();
         newTransporter( httpServer.getHttpUrl() );
         RecordingTransportListener listener = new RecordingTransportListener();
         PutTask task =
@@ -844,10 +842,9 @@ public class HttpTransporterTest
         assertTrue( "Count: " + listener.progressedCount, listener.progressedCount > 0 );
         assertEquals( "upload", TestFileUtils.readString( new File( repoDir, "dir1/dir2/file.txt" ) ) );
 
-        assertEquals( httpServer.getLogEntries().toString(), 3, httpServer.getLogEntries().size() );
+        assertEquals( httpServer.getLogEntries().toString(), 2, httpServer.getLogEntries().size() );
         assertEquals( "OPTIONS", httpServer.getLogEntries().get( 0 ).method );
-        assertEquals( "OPTIONS", httpServer.getLogEntries().get( 1 ).method );
-        assertEquals( "PUT", httpServer.getLogEntries().get( 2 ).method );
+        assertEquals( "PUT", httpServer.getLogEntries().get( 1 ).method );
     }
 
     @Test


[50/50] [abbrv] maven-aether git commit: 453221 represent missing dependencies in dependency tree

Posted by ol...@apache.org.
453221 represent missing dependencies in dependency tree

Signed-off-by: Igor Fedorenko <ig...@ifedorenko.com>


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/4cf5f7a4
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/4cf5f7a4
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/4cf5f7a4

Branch: refs/heads/master
Commit: 4cf5f7a406b516a45d8bf15e7dfe3fb3849cb87b
Parents: 80334ca
Author: Igor Fedorenko <ig...@ifedorenko.com>
Authored: Tue Nov 25 13:17:30 2014 -0500
Committer: Igor Fedorenko <ig...@ifedorenko.com>
Committed: Wed Dec 10 08:44:11 2014 -0500

----------------------------------------------------------------------
 .../impl/DefaultDependencyCollector.java        | 20 +++++++++++++++-----
 .../expectedPartialSubtreeOnError.txt           |  7 ++++---
 2 files changed, 19 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/4cf5f7a4/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
index 28770c1..04a3501 100644
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
+++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
@@ -447,8 +447,8 @@ public class DefaultDependencyCollector
                         getRemoteRepositories( rangeResult.getRepository( version ), repositories );
 
                     DefaultDependencyNode child =
-                        createDependencyNode( relocations, preManaged, rangeResult, version, d, descriptorResult, repos,
-                                              args.request.getRequestContext() );
+                        createDependencyNode( relocations, preManaged, rangeResult, version, d,
+                                              descriptorResult.getAliases(), repos, args.request.getRequestContext() );
 
                     node.getChildren().add( child );
 
@@ -460,6 +460,16 @@ public class DefaultDependencyCollector
                     }
                 }
             }
+            else
+            {
+                DependencyNode node = args.nodes.top();
+                List<RemoteRepository> repos =
+                    getRemoteRepositories( rangeResult.getRepository( version ), repositories );
+                DefaultDependencyNode child =
+                    createDependencyNode( relocations, preManaged, rangeResult, version, d, null, repos,
+                                          args.request.getRequestContext() );
+                node.getChildren().add( child );
+            }
         }
     }
 
@@ -544,7 +554,7 @@ public class DefaultDependencyCollector
     private static DefaultDependencyNode createDependencyNode( List<Artifact> relocations,
                                                                PremanagedDependency preManaged,
                                                                VersionRangeResult rangeResult, Version version,
-                                                               Dependency d, ArtifactDescriptorResult descriptorResult,
+                                                               Dependency d, Collection<Artifact> aliases,
                                                                List<RemoteRepository> repos, String requestContext )
     {
         DefaultDependencyNode child = new DefaultDependencyNode( d );
@@ -552,7 +562,7 @@ public class DefaultDependencyCollector
         child.setRelocations( relocations );
         child.setVersionConstraint( rangeResult.getVersionConstraint() );
         child.setVersion( version );
-        child.setAliases( descriptorResult.getAliases() );
+        child.setAliases( aliases );
         child.setRepositories( repos );
         child.setRequestContext( requestContext );
         return child;
@@ -565,7 +575,7 @@ public class DefaultDependencyCollector
                                                                DependencyNode cycleNode )
     {
         DefaultDependencyNode child =
-            createDependencyNode( relocations, preManaged, rangeResult, version, d, descriptorResult,
+            createDependencyNode( relocations, preManaged, rangeResult, version, d, descriptorResult.getAliases(),
                                   cycleNode.getRepositories(), cycleNode.getRequestContext() );
         child.setChildren( cycleNode.getChildren() );
         return child;

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/4cf5f7a4/aether-impl/src/test/resources/artifact-descriptions/expectedPartialSubtreeOnError.txt
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/resources/artifact-descriptions/expectedPartialSubtreeOnError.txt b/aether-impl/src/test/resources/artifact-descriptions/expectedPartialSubtreeOnError.txt
index badca5e..6ef2faf 100644
--- a/aether-impl/src/test/resources/artifact-descriptions/expectedPartialSubtreeOnError.txt
+++ b/aether-impl/src/test/resources/artifact-descriptions/expectedPartialSubtreeOnError.txt
@@ -1,5 +1,6 @@
 subtree:comparison:ext:error
 +- duplicate:transitive:ext:dependency compile
-   +- gid:aid:ext:ver compile
-   |  \- gid:aid2:ext:ver compile
-   \- gid:aid2:ext:ver compile
+|  +- gid:aid:ext:ver compile
+|  |  \- gid:aid2:ext:ver compile
+|  \- gid:aid2:ext:ver compile
+\- git:aid:ext:ver compile


[32/50] [abbrv] maven-aether git commit: Bug 445283 - HTTP transporter can mistake server authentication for proxy authentication

Posted by ol...@apache.org.
Bug 445283 - HTTP transporter can mistake server authentication for proxy authentication

Stored server and proxy credentials in separate providers and used new DemuxCredentialsProvider to delegate to one of those providers depending on host in auth request


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/f718cfb9
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/f718cfb9
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/f718cfb9

Branch: refs/heads/master
Commit: f718cfb98d31b0188a165d9c5baa367dca59dc20
Parents: dae0615
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Sep 28 18:43:56 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Sep 28 18:43:56 2014 +0200

----------------------------------------------------------------------
 .../http/DemuxCredentialsProvider.java          | 67 ++++++++++++++++++++
 .../aether/transport/http/HttpTransporter.java  | 26 +++++---
 .../transport/http/HttpTransporterTest.java     | 40 ++++++++++++
 3 files changed, 124 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/f718cfb9/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/DemuxCredentialsProvider.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/DemuxCredentialsProvider.java b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/DemuxCredentialsProvider.java
new file mode 100644
index 0000000..4b89639
--- /dev/null
+++ b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/DemuxCredentialsProvider.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Sonatype, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Sonatype, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.aether.transport.http;
+
+import org.apache.http.HttpHost;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.Credentials;
+import org.apache.http.client.CredentialsProvider;
+
+/**
+ * Credentials provider that helps to isolate server from proxy credentials. Apache HttpClient uses a single provider
+ * for both server and proxy auth, using the auth scope (host, port, etc.) to select the proper credentials. With regard
+ * to redirects, we use an auth scope for server credentials that's not specific enough to not be mistaken for proxy
+ * auth. This provider helps to maintain the proper isolation.
+ */
+final class DemuxCredentialsProvider
+    implements CredentialsProvider
+{
+
+    private final CredentialsProvider serverCredentialsProvider;
+
+    private final CredentialsProvider proxyCredentialsProvider;
+
+    private final HttpHost proxy;
+
+    public DemuxCredentialsProvider( CredentialsProvider serverCredentialsProvider,
+                                     CredentialsProvider proxyCredentialsProvider, HttpHost proxy )
+    {
+        this.serverCredentialsProvider = serverCredentialsProvider;
+        this.proxyCredentialsProvider = proxyCredentialsProvider;
+        this.proxy = proxy;
+    }
+
+    private CredentialsProvider getDelegate( AuthScope authScope )
+    {
+        if ( proxy.getPort() == authScope.getPort() && proxy.getHostName().equalsIgnoreCase( authScope.getHost() ) )
+        {
+            return proxyCredentialsProvider;
+        }
+        return serverCredentialsProvider;
+    }
+
+    public Credentials getCredentials( AuthScope authScope )
+    {
+        return getDelegate( authScope ).getCredentials( authScope );
+    }
+
+    public void setCredentials( AuthScope authScope, Credentials credentials )
+    {
+        getDelegate( authScope ).setCredentials( authScope, credentials );
+    }
+
+    public void clear()
+    {
+        serverCredentialsProvider.clear();
+        proxyCredentialsProvider.clear();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/f718cfb9/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
index 5ac9b8f..931e04e 100644
--- a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
+++ b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
@@ -32,6 +32,7 @@ import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
 import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.params.AuthParams;
+import org.apache.http.client.CredentialsProvider;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.HttpResponseException;
 import org.apache.http.client.methods.HttpGet;
@@ -134,13 +135,7 @@ final class HttpTransporter
 
         configureClient( client.getParams(), session, repository, proxy );
 
-        DeferredCredentialsProvider credsProvider = new DeferredCredentialsProvider();
-        addCredentials( credsProvider, server.getHostName(), AuthScope.ANY_PORT, repoAuthContext );
-        if ( proxy != null )
-        {
-            addCredentials( credsProvider, proxy.getHostName(), proxy.getPort(), proxyAuthContext );
-        }
-        client.setCredentialsProvider( credsProvider );
+        client.setCredentialsProvider( toCredentialsProvider( server, repoAuthContext, proxy, proxyAuthContext ) );
 
         this.client = new DecompressingHttpClient( client );
     }
@@ -182,9 +177,21 @@ final class HttpTransporter
                                                                         ConfigurationProperties.USER_AGENT ) );
     }
 
-    private static void addCredentials( DeferredCredentialsProvider provider, String host, int port,
-                                        AuthenticationContext ctx )
+    private static CredentialsProvider toCredentialsProvider( HttpHost server, AuthenticationContext serverAuthCtx,
+                                                              HttpHost proxy, AuthenticationContext proxyAuthCtx )
+    {
+        CredentialsProvider provider = toCredentialsProvider( server.getHostName(), AuthScope.ANY_PORT, serverAuthCtx );
+        if ( proxy != null )
+        {
+            CredentialsProvider p = toCredentialsProvider( proxy.getHostName(), proxy.getPort(), proxyAuthCtx );
+            provider = new DemuxCredentialsProvider( provider, p, proxy );
+        }
+        return provider;
+    }
+
+    private static CredentialsProvider toCredentialsProvider( String host, int port, AuthenticationContext ctx )
     {
+        DeferredCredentialsProvider provider = new DeferredCredentialsProvider();
         if ( ctx != null )
         {
             AuthScope basicScope = new AuthScope( host, port );
@@ -193,6 +200,7 @@ final class HttpTransporter
             AuthScope ntlmScope = new AuthScope( host, port, AuthScope.ANY_REALM, "ntlm" );
             provider.setCredentials( ntlmScope, new DeferredCredentialsProvider.NtlmFactory( ctx ) );
         }
+        return provider;
     }
 
     LocalState getState()

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/f718cfb9/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
index b4a38d6..4dbc730 100644
--- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
+++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
@@ -1141,6 +1141,46 @@ public class HttpTransporterTest
     }
 
     @Test
+    public void testServerAuthScope_NotUsedForProxy()
+        throws Exception
+    {
+        String username = "testuser", password = "testpass";
+        httpServer.setProxyAuthentication( username, password );
+        auth = new AuthenticationBuilder().addUsername( username ).addPassword( password ).build();
+        proxy = new Proxy( Proxy.TYPE_HTTP, httpServer.getHost(), httpServer.getHttpPort() );
+        newTransporter( "http://" + httpServer.getHost() + ":12/" );
+        try
+        {
+            transporter.get( new GetTask( URI.create( "repo/file.txt" ) ) );
+            fail( "Server auth must not be used as proxy auth" );
+        }
+        catch ( HttpResponseException e )
+        {
+            assertEquals( 407, e.getStatusCode() );
+        }
+    }
+
+    @Test
+    public void testProxyAuthScope_NotUsedForServer()
+        throws Exception
+    {
+        String username = "testuser", password = "testpass";
+        httpServer.setAuthentication( username, password );
+        Authentication auth = new AuthenticationBuilder().addUsername( username ).addPassword( password ).build();
+        proxy = new Proxy( Proxy.TYPE_HTTP, httpServer.getHost(), httpServer.getHttpPort(), auth );
+        newTransporter( "http://" + httpServer.getHost() + ":12/" );
+        try
+        {
+            transporter.get( new GetTask( URI.create( "repo/file.txt" ) ) );
+            fail( "Proxy auth must not be used as server auth" );
+        }
+        catch ( HttpResponseException e )
+        {
+            assertEquals( 401, e.getStatusCode() );
+        }
+    }
+
+    @Test
     public void testAuthSchemeReuse()
         throws Exception
     {


[45/50] [abbrv] maven-aether git commit: Bug 450948 - Widen version range for package imports in aether-transport-http to allow wiring against httpclient 4.3.x

Posted by ol...@apache.org.
Bug 450948 - Widen version range for package imports in aether-transport-http to allow wiring against httpclient 4.3.x

Updated upper version bound in instructions for maven-bundle-plugin


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/097f275c
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/097f275c
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/097f275c

Branch: refs/heads/master
Commit: 097f275c7c3022f83c9b2fe66177d6ae44f3b34b
Parents: 57c56f9
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Tue Nov 11 14:33:23 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Tue Nov 11 14:33:23 2014 +0100

----------------------------------------------------------------------
 aether-transport-http/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/097f275c/aether-transport-http/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-http/pom.xml b/aether-transport-http/pom.xml
index f791c2a..d41e776 100644
--- a/aether-transport-http/pom.xml
+++ b/aether-transport-http/pom.xml
@@ -117,7 +117,7 @@
         <artifactId>maven-bundle-plugin</artifactId>
         <configuration>
           <instructions>
-            <Import-Package>org.apache.http.*;version="[4.2.1,4.3)",*</Import-Package>
+            <Import-Package>org.apache.http.*;version="[4.2.1,4.4)",*</Import-Package>
           </instructions>
         </configuration>
       </plugin>


[39/50] [abbrv] maven-aether git commit: Bug 448409 - Output being spammed with "Using mirror ..." messages when running Maven with -X option

Posted by ol...@apache.org.
Bug 448409 - Output being spammed with "Using mirror ..." messages when running Maven with -X option

Reduced debug logging for mirror selection to log a given repository pair only once per session


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/570f98b5
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/570f98b5
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/570f98b5

Branch: refs/heads/master
Commit: 570f98b52f5954b016c1903842e544970f1536c3
Parents: 5341d52
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat Oct 25 18:17:55 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat Oct 25 18:17:55 2014 +0200

----------------------------------------------------------------------
 .../impl/DefaultRemoteRepositoryManager.java    | 36 ++++++++++++++++++--
 1 file changed, 34 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/570f98b5/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java
index ccb618a..fa560a9 100644
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java
+++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java
@@ -13,10 +13,13 @@ package org.eclipse.aether.internal.impl;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.ListIterator;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.eclipse.aether.RepositoryCache;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.impl.RemoteRepositoryManager;
 import org.eclipse.aether.impl.UpdatePolicyAnalyzer;
@@ -42,6 +45,9 @@ public class DefaultRemoteRepositoryManager
     implements RemoteRepositoryManager, Service
 {
 
+    private static final String CACHE_KEY_LOGGED_MIRRORS = DefaultRemoteRepositoryManager.class.getName()
+        + "$LoggedMirrors";
+
     private Logger logger = NullLoggerFactory.LOGGER;
 
     private UpdatePolicyAnalyzer updatePolicyAnalyzer;
@@ -121,8 +127,7 @@ public class DefaultRemoteRepositoryManager
 
                 if ( mirrorRepository != null )
                 {
-                    logger.debug( "Using mirror " + mirrorRepository.getId() + " (" + mirrorRepository.getUrl()
-                        + ") for " + recessiveRepository.getId() + " (" + recessiveRepository.getUrl() + ")." );
+                    logMirror( session, recessiveRepository, mirrorRepository );
                     repository = mirrorRepository;
                 }
             }
@@ -179,6 +184,33 @@ public class DefaultRemoteRepositoryManager
         return result;
     }
 
+    private void logMirror( RepositorySystemSession session, RemoteRepository original, RemoteRepository mirror )
+    {
+        if ( !logger.isDebugEnabled() )
+        {
+            return;
+        }
+        RepositoryCache cache = session.getCache();
+        if ( cache != null )
+        {
+            Object logged = cache.get( session, CACHE_KEY_LOGGED_MIRRORS );
+            if ( !( logged instanceof ConcurrentMap ) )
+            {
+                logged = new ConcurrentHashMap<Object, Object>();
+                cache.put( session, CACHE_KEY_LOGGED_MIRRORS, logged );
+            }
+            @SuppressWarnings( "unchecked" )
+            ConcurrentMap<Object, Object> map = (ConcurrentMap<Object, Object>) logged;
+            String key = mirror.getId() + '\t' + mirror.getUrl() + '\t' + original.getId() + '\t' + original.getUrl();
+            if ( map.put( key, Boolean.TRUE ) != null )
+            {
+                return;
+            }
+        }
+        logger.debug( "Using mirror " + mirror.getId() + " (" + mirror.getUrl() + ") for " + original.getId() + " ("
+            + original.getUrl() + ")." );
+    }
+
     private String getKey( RemoteRepository repository )
     {
         return repository.getId();


[23/50] [abbrv] maven-aether git commit: Bug 442576 - Allow to disable WebDav support

Posted by ol...@apache.org.
Bug 442576 - Allow to disable WebDav support

Automatically disabled WebDAV mode when detecting a repository manager


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/9440b371
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/9440b371
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/9440b371

Branch: refs/heads/master
Commit: 9440b371a669b8c0d21ba235858a792b83ca22ce
Parents: cd3cb86
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat Aug 30 21:50:53 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat Aug 30 21:50:53 2014 +0200

----------------------------------------------------------------------
 .../aether/transport/http/HttpTransporter.java  | 10 +++++-
 .../transport/http/HttpTransporterTest.java     | 34 ++++++++++++++++++++
 2 files changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/9440b371/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
index a801373..5ac9b8f 100644
--- a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
+++ b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
@@ -338,7 +338,15 @@ final class HttpTransporter
 
     private boolean isWebDav( HttpResponse response )
     {
-        return response.containsHeader( HttpHeaders.DAV );
+        return response.containsHeader( HttpHeaders.DAV ) && !isWebDavOptional( response );
+    }
+
+    private boolean isWebDavOptional( HttpResponse response )
+    {
+        Header header = response.getFirstHeader( HttpHeaders.SERVER );
+        String server = ( header != null ) ? header.getValue() : null;
+        // repository managers don't need webdav mode and work fine with straight puts
+        return server != null && ( server.startsWith( "Artifactory/" ) || server.startsWith( "Nexus/" ) );
     }
 
     private void mkdirs( URI uri, SharingHttpContext context )

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/9440b371/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
index 14ec31e..0ebe893 100644
--- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
+++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
@@ -851,6 +851,40 @@ public class HttpTransporterTest
     }
 
     @Test
+    public void testPut_WebDavOptional_AutomaticallyDisabled_Artifactory()
+        throws Exception
+    {
+        testPut_WebDavOptional_AutomaticallyDisabled( "Artifactory/3.3.0" );
+    }
+
+    @Test
+    public void testPut_WebDavOptional_AutomaticallyDisabled_Nexus()
+        throws Exception
+    {
+        testPut_WebDavOptional_AutomaticallyDisabled( "Nexus/2.9.0-02" );
+    }
+
+    private void testPut_WebDavOptional_AutomaticallyDisabled( String server )
+        throws Exception
+    {
+        httpServer.setServer( server );
+        httpServer.setWebDav( HttpServer.WebDav.OPTIONAL );
+        RecordingTransportListener listener = new RecordingTransportListener();
+        PutTask task =
+            new PutTask( URI.create( "repo/dir1/dir2/file.txt" ) ).setListener( listener ).setDataString( "upload" );
+        transporter.put( task );
+        assertEquals( 0, listener.dataOffset );
+        assertEquals( 6, listener.dataLength );
+        assertEquals( 1, listener.startedCount );
+        assertTrue( "Count: " + listener.progressedCount, listener.progressedCount > 0 );
+        assertEquals( "upload", TestFileUtils.readString( new File( repoDir, "dir1/dir2/file.txt" ) ) );
+
+        assertEquals( httpServer.getLogEntries().toString(), 2, httpServer.getLogEntries().size() );
+        assertEquals( "OPTIONS", httpServer.getLogEntries().get( 0 ).method );
+        assertEquals( "PUT", httpServer.getLogEntries().get( 1 ).method );
+    }
+
+    @Test
     public void testPut_FileHandleLeak()
         throws Exception
     {


[30/50] [abbrv] maven-aether git commit: Re-normalized line endings changed by bb7c121befcd8a36c2663838afee48ae1c5f3191 and 149a522165cded0d116d59c6f8793e3771058acb

Posted by ol...@apache.org.
Re-normalized line endings changed by bb7c121befcd8a36c2663838afee48ae1c5f3191 and 149a522165cded0d116d59c6f8793e3771058acb


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/e93b32de
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/e93b32de
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/e93b32de

Branch: refs/heads/master
Commit: e93b32debf9dcbf54f7d68d98d3e11a1d37e45a7
Parents: bf49c76
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Sep 28 15:35:39 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Sep 28 15:35:39 2014 +0200

----------------------------------------------------------------------
 class-overview.svg |   28 +-
 pom.xml            | 1604 +++++++++++++++++++++++------------------------
 2 files changed, 816 insertions(+), 816 deletions(-)
----------------------------------------------------------------------



[33/50] [abbrv] maven-aether git commit: Improved usability of HttpServer

Posted by ol...@apache.org.
Improved usability of HttpServer


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/c6cf8d7b
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/c6cf8d7b
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/c6cf8d7b

Branch: refs/heads/master
Commit: c6cf8d7bc11f04bc1824c9f3a80836a6b54fd883
Parents: f718cfb
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Sep 28 18:56:46 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Sep 28 18:56:46 2014 +0200

----------------------------------------------------------------------
 .../aether/transport/http/HttpServer.java       | 31 ++++++++++++++------
 1 file changed, 22 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/c6cf8d7b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
index 60f316a..5e2707a 100644
--- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
+++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
@@ -163,14 +163,17 @@ public class HttpServer
             ssl.setTrustStorePassword( "client-pwd" );
             ssl.setNeedClientAuth( true );
             httpsConnector = new SslSelectChannelConnector( ssl );
-            server.addConnector( httpsConnector );
-            try
-            {
-                httpsConnector.start();
-            }
-            catch ( Exception e )
+            if ( server != null )
             {
-                throw new IllegalStateException( e );
+                server.addConnector( httpsConnector );
+                try
+                {
+                    httpsConnector.start();
+                }
+                catch ( Exception e )
+                {
+                    throw new IllegalStateException( e );
+                }
             }
         }
         return this;
@@ -257,6 +260,10 @@ public class HttpServer
 
         server = new Server();
         server.addConnector( httpConnector );
+        if ( httpsConnector != null )
+        {
+            server.addConnector( httpsConnector );
+        }
         server.setHandler( handlers );
         server.start();
 
@@ -495,11 +502,17 @@ public class HttpServer
             req.setHandled( true );
             StringBuilder location = new StringBuilder( 128 );
             String scheme = req.getParameter( "scheme" );
+            String host = req.getParameter( "host" );
+            String port = req.getParameter( "port" );
             location.append( scheme != null ? scheme : req.getScheme() );
             location.append( "://" );
-            location.append( req.getServerName() );
+            location.append( host != null ? host : req.getServerName() );
             location.append( ":" );
-            if ( "http".equalsIgnoreCase( scheme ) )
+            if ( port != null )
+            {
+                location.append( port );
+            }
+            else if ( "http".equalsIgnoreCase( scheme ) )
             {
                 location.append( getHttpPort() );
             }


[26/50] [abbrv] maven-aether git commit: upgraded m-site-p

Posted by ol...@apache.org.
upgraded m-site-p

Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/149a5221
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/149a5221
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/149a5221

Branch: refs/heads/master
Commit: 149a522165cded0d116d59c6f8793e3771058acb
Parents: bb7c121
Author: Herv� Boutemy <he...@free.fr>
Authored: Sun Sep 28 09:30:58 2014 +0200
Committer: Herv� Boutemy <he...@free.fr>
Committed: Sun Sep 28 09:30:58 2014 +0200

----------------------------------------------------------------------
 pom.xml | 1604 +++++++++++++++++++++++++++++-----------------------------
 1 file changed, 802 insertions(+), 802 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/149a5221/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 140b0cd..8f2ff86 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,802 +1,802 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- ~ Copyright (c) 2010, 2014 Sonatype, Inc.
- ~ All rights reserved. This program and the accompanying materials
- ~ are made available under the terms of the Eclipse Public License v1.0
- ~ which accompanies this distribution, and is available at
- ~ http://www.eclipse.org/legal/epl-v10.html
- ~
- ~ Contributors:
- ~    Sonatype, Inc. - initial API and implementation
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.eclipse.aether</groupId>
-  <artifactId>aether</artifactId>
-  <version>1.1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <name>Aether</name>
-  <description>
-    The parent and aggregator for the repository system.
-  </description>
-  <url>http://www.eclipse.org/aether/</url>
-  <inceptionYear>2010</inceptionYear>
-
-  <organization>
-    <name>The Eclipse Foundation</name>
-    <url>http://www.eclipse.org/</url>
-  </organization>
-
-  <mailingLists>
-    <mailingList>
-      <name>Aether Developer List</name>
-      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-dev</subscribe>
-      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-dev</unsubscribe>
-      <post>aether-dev@eclipse.org</post>
-      <archive>http://dev.eclipse.org/mhonarc/lists/aether-dev/</archive>
-    </mailingList>
-    <mailingList>
-      <name>Aether User List</name>
-      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-users</subscribe>
-      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-users</unsubscribe>
-      <post>aether-users@eclipse.org</post>
-      <archive>http://dev.eclipse.org/mhonarc/lists/aether-users/</archive>
-    </mailingList>
-    <mailingList>
-      <name>Aether Commit Notification List</name>
-      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-commit</subscribe>
-      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-commit</unsubscribe>
-      <archive>http://dev.eclipse.org/mhonarc/lists/aether-commit/</archive>
-    </mailingList>
-    <mailingList>
-      <name>Aether CI Notification List</name>
-      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-build</subscribe>
-      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-build</unsubscribe>
-      <archive>http://dev.eclipse.org/mhonarc/lists/aether-build/</archive>
-    </mailingList>
-  </mailingLists>
-
-  <scm>
-    <connection>scm:git:git://git.eclipse.org/gitroot/aether/aether-core.git</connection>
-    <developerConnection>scm:git:ssh://git.eclipse.org/gitroot/aether/aether-core.git</developerConnection>
-    <url>http://git.eclipse.org/c/aether/aether-core.git/tree/</url>
-  </scm>
-
-  <issueManagement>
-    <system>bugzilla</system>
-    <url>https://bugs.eclipse.org/bugs/buglist.cgi?query_format=specific&amp;bug_status=__open__&amp;product=Aether</url>
-  </issueManagement>
-
-  <ciManagement>
-    <system>Hudson</system>
-    <url>https://hudson.eclipse.org/aether/job/aether-core/</url>
-  </ciManagement>
-
-  <distributionManagement>
-    <repository>
-      <id>sonatype-nexus-staging</id>
-      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
-    </repository>
-    <snapshotRepository>
-      <id>${sonatypeOssDistMgmtSnapshotsId}</id>
-      <url>${sonatypeOssDistMgmtSnapshotsUrl}</url>
-    </snapshotRepository>
-  </distributionManagement>
-
-  <licenses>
-    <license>
-      <name>Eclipse Public License, Version 1.0</name>
-      <url>http://www.eclipse.org/legal/epl-v10.html</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-
-  <developers>
-    <developer>
-      <id>bbentmann</id>
-      <name>Benjamin Bentmann</name>
-      <roles>
-        <role>Project Lead</role>
-      </roles>
-    </developer>
-    <developer>
-      <id>jvanzyl</id>
-      <name>Jason Van Zyl</name>
-      <roles>
-        <role>Project Lead</role>
-      </roles>
-    </developer>
-  </developers>
-
-  <modules>
-    <!-- NOTE: Be sure to update the bin assembly descriptor as well if the module list changes -->
-    <module>aether-api</module>
-    <module>aether-spi</module>
-    <module>aether-util</module>
-    <module>aether-impl</module>
-    <module>aether-test-util</module>
-    <module>aether-connector-basic</module>
-    <module>aether-transport-classpath</module>
-    <module>aether-transport-file</module>
-    <module>aether-transport-http</module>
-    <module>aether-transport-wagon</module>
-  </modules>
-
-  <properties>
-    <bundle.env>J2SE-1.5</bundle.env>
-    <bundle.vendor>Eclipse Aether</bundle.vendor>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-    <surefire.redirectTestOutputToFile>true</surefire.redirectTestOutputToFile>
-    <sonatypeOssDistMgmtSnapshotsId>sonatype-nexus-snapshots</sonatypeOssDistMgmtSnapshotsId>
-    <sonatypeOssDistMgmtSnapshotsUrl>https://oss.sonatype.org/content/repositories/snapshots/</sonatypeOssDistMgmtSnapshotsUrl>
-  </properties>
-
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-api</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-spi</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-util</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-impl</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-connector-basic</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-test-util</artifactId>
-        <version>${project.version}</version>
-        <scope>test</scope>
-      </dependency>
-
-      <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>4.11</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.hamcrest</groupId>
-        <artifactId>hamcrest-core</artifactId>
-        <version>1.3</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.hamcrest</groupId>
-        <artifactId>hamcrest-library</artifactId>
-        <version>1.3</version>
-        <scope>test</scope>
-      </dependency>
-
-      <dependency>
-        <groupId>javax.inject</groupId>
-        <artifactId>javax.inject</artifactId>
-        <version>1</version>
-        <scope>provided</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-component-annotations</artifactId>
-        <version>1.5.5</version>
-        <scope>provided</scope>
-      </dependency>
-
-      <dependency>
-        <groupId>org.eclipse.sisu</groupId>
-        <artifactId>org.eclipse.sisu.inject</artifactId>
-        <version>0.1.1</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.sisu</groupId>
-        <artifactId>org.eclipse.sisu.plexus</artifactId>
-        <version>0.1.1</version>
-        <exclusions>
-          <exclusion>
-            <groupId>javax.enterprise</groupId>
-            <artifactId>cdi-api</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.sonatype.sisu</groupId>
-        <artifactId>sisu-guice</artifactId>
-        <version>3.1.6</version>
-        <classifier>no_aop</classifier>
-        <exclusions>
-          <exclusion>
-            <groupId>aopalliance</groupId>
-            <artifactId>aopalliance</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>com.google.code.findbugs</groupId>
-            <artifactId>jsr305</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-api</artifactId>
-        <version>1.6.2</version>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.felix</groupId>
-          <artifactId>maven-bundle-plugin</artifactId>
-          <version>2.4.0</version>
-          <configuration>
-            <instructions>
-              <Bundle-DocURL>${project.url}</Bundle-DocURL>
-              <Bundle-Name>${project.name}</Bundle-Name>
-              <Bundle-RequiredExecutionEnvironment>${bundle.env}</Bundle-RequiredExecutionEnvironment>
-              <Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName>
-              <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor>
-              <Bundle-Version>${bundle.osgiVersion}</Bundle-Version>
-              <Export-Package>org.eclipse.aether.internal.*;x-internal:=true,org.eclipse.aether.*</Export-Package>
-            </instructions>
-          </configuration>
-          <executions>
-            <execution>
-              <id>create-manifest</id>
-              <phase>process-test-classes</phase>
-              <goals>
-                <goal>manifest</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-assembly-plugin</artifactId>
-          <version>2.2.1</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-clean-plugin</artifactId>
-          <version>2.5</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>2.5.1</version>
-          <configuration>
-            <source>1.5</source>
-            <target>1.5</target>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-deploy-plugin</artifactId>
-          <version>2.5</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-enforcer-plugin</artifactId>
-          <version>1.2</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-gpg-plugin</artifactId>
-          <version>1.2</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-install-plugin</artifactId>
-          <version>2.3.1</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-jar-plugin</artifactId>
-          <!-- NOTE: Avoiding 2.4+ due to https://github.com/sonatype/m2eclipse-extras/issues/10 -->
-          <version>2.3.2</version>
-          <configuration>
-            <archive>
-              <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
-            </archive>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-javadoc-plugin</artifactId>
-          <version>2.8.1</version>
-          <configuration>
-            <detectOfflineLinks>false</detectOfflineLinks>
-            <links>
-              <link>http://download.oracle.com/javase/6/docs/api/</link>
-            </links>
-            <tags>
-              <tag>
-                <name>noextend</name>
-                <placement>a</placement>
-                <head>Restriction:</head>
-              </tag>
-              <tag>
-                <name>noimplement</name>
-                <placement>a</placement>
-                <head>Restriction:</head>
-              </tag>
-              <tag>
-                <name>noinstantiate</name>
-                <placement>a</placement>
-                <head>Restriction:</head>
-              </tag>
-              <tag>
-                <name>nooverride</name>
-                <placement>a</placement>
-                <head>Restriction:</head>
-              </tag>
-              <tag>
-                <name>noreference</name>
-                <placement>a</placement>
-                <head>Restriction:</head>
-              </tag>
-              <tag>
-                <name>provisional</name>
-                <placement>a</placement>
-                <head>Provisional:</head>
-              </tag>
-            </tags>
-            <groups>
-              <group>
-                <title>API</title>
-                <packages>org.eclipse.aether*</packages>
-              </group>
-              <group>
-                <title>SPI</title>
-                <packages>org.eclipse.aether.spi*</packages>
-              </group>
-              <group>
-                <title>Utilities</title>
-                <packages>org.eclipse.aether.util*</packages>
-              </group>
-              <group>
-                <title>Repository Connectors</title>
-                <packages>org.eclipse.aether.connector*</packages>
-              </group>
-              <group>
-                <title>Transporters</title>
-                <packages>org.eclipse.aether.transport*</packages>
-              </group>
-              <group>
-                <title>Implementation</title>
-                <packages>org.eclipse.aether.impl*</packages>
-              </group>
-              <group>
-                <title>Internals</title>
-                <packages>org.eclipse.aether.internal*</packages>
-              </group>
-            </groups>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-release-plugin</artifactId>
-          <version>2.1</version>
-          <configuration>
-            <autoVersionSubmodules>true</autoVersionSubmodules>
-            <mavenExecutorId>forked-path</mavenExecutorId>
-            <useReleaseProfile>false</useReleaseProfile>
-            <goals>deploy javadoc:aggregate-jar assembly:attached</goals>
-            <arguments>-Psonatype-oss-release</arguments>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-resources-plugin</artifactId>
-          <version>2.6</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-site-plugin</artifactId>
-          <version>3.0</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-source-plugin</artifactId>
-          <version>2.1.2</version>
-          <configuration>
-            <archive>
-              <manifestEntries>
-                <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
-                <Bundle-Name>${project.name} Sources</Bundle-Name>
-                <Bundle-License>http://www.eclipse.org/legal/epl-v10.html</Bundle-License>
-                <Bundle-RequiredExecutionEnvironment>${bundle.env}</Bundle-RequiredExecutionEnvironment>
-                <Bundle-SymbolicName>${bundle.symbolicName}.source</Bundle-SymbolicName>
-                <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor>
-                <Bundle-Version>${bundle.osgiVersion}</Bundle-Version>
-                <Eclipse-SourceBundle>${bundle.symbolicName};version="${bundle.osgiVersion}";roots:="."</Eclipse-SourceBundle>
-              </manifestEntries>
-            </archive>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-surefire-plugin</artifactId>
-          <version>2.9</version>
-          <configuration>
-            <argLine>-Xmx128m</argLine>
-            <redirectTestOutputToFile>${surefire.redirectTestOutputToFile}</redirectTestOutputToFile>
-            <systemPropertyVariables>
-              <java.io.tmpdir>${project.build.directory}/surefire-tmp</java.io.tmpdir>
-            </systemPropertyVariables>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>animal-sniffer-maven-plugin</artifactId>
-          <version>1.9</version>
-          <configuration>
-            <signature>
-              <groupId>org.codehaus.mojo.signature</groupId>
-              <artifactId>java15</artifactId>
-              <version>1.0</version>
-            </signature>
-          </configuration>
-          <executions>
-            <execution>
-              <id>check-java-1.5-compat</id>
-              <phase>process-classes</phase>
-              <goals>
-                <goal>check</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>clirr-maven-plugin</artifactId>
-          <version>2.3</version>
-        </plugin>
-        <plugin>
-          <groupId>org.codehaus.plexus</groupId>
-          <artifactId>plexus-component-metadata</artifactId>
-          <version>1.5.5</version>
-          <executions>
-            <execution>
-              <id>generate-components-xml</id>
-              <phase>process-classes</phase>
-              <goals>
-                <goal>generate-metadata</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <groupId>org.eclipse.sisu</groupId>
-          <artifactId>sisu-maven-plugin</artifactId>
-          <version>0.0.0.M2</version>
-          <executions>
-            <execution>
-              <id>generate-index</id>
-              <phase>process-classes</phase>
-              <goals>
-                <goal>main-index</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>qa</id>
-            <phase>verify</phase>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <requireProperty>
-                  <!-- enforce OSGi-friendly versioning scheme such that milestone < rc < final release -->
-                  <property>project.version</property>
-                  <regex>[0-9]+\.[0-9]+\.[0-9]+((.*-SNAPSHOT)|(\.M[0-9]+)|(\.RC[0-9]+)|(\.v[0-9]{8}))</regex>
-                  <regexMessage>Project version must be either X.Y.Z.M#, X.Y.Z.RC# or X.Y.Z.v########</regexMessage>
-                </requireProperty>
-                <bannedDependencies>
-                  <!-- enforce use of dependencies approved via IP log -->
-                  <searchTransitive>true</searchTransitive>
-                  <excludes>
-                    <exclude>*:*</exclude>
-                  </excludes>
-                  <includes>
-                    <include>org.eclipse.aether</include>
-                    <include>org.eclipse.sisu</include>
-                    <include>org.eclipse.jetty:*:*:*:test</include>
-                    <!-- CQ #5627 -->
-                    <include>org.slf4j:slf4j-api:[1.6.2]</include>
-                    <!-- CQ #5629 -->
-                    <include>org.codehaus.plexus:plexus-component-annotations:[1.5.5]</include>
-                    <!-- CQ #5630 -->
-                    <include>org.codehaus.plexus:plexus-utils:[2.1]</include>
-                    <!-- CQ #5631 -->
-                    <include>org.codehaus.plexus:plexus-classworlds:[2.4]</include>
-                    <!-- CQ #5632 -->
-                    <include>org.apache.maven.wagon:wagon-provider-api:[1.0]</include>
-                    <!-- CQ #5636 -->
-                    <include>org.sonatype.sisu:sisu-guice:[3.1.6]</include>
-                    <!-- CQ #7328 -->
-                    <include>com.google.guava:guava:[11.0.2]</include>
-                    <!-- CQ #5639 -->
-                    <include>javax.inject:javax.inject:[1]</include>
-                    <!-- CQ #7657 -->
-                    <include>org.apache.httpcomponents:httpclient:[4.2.6]</include>
-                    <!-- CQ #7656 -->
-                    <include>org.apache.httpcomponents:httpcore:[4.2.5]</include>
-                    <!-- CQ #7346 -->
-                    <include>commons-codec:commons-codec:[1.6]</include>
-                    <!-- CQ #7347 -->
-                    <include>org.slf4j:jcl-over-slf4j:[1.6.2]</include>
-                    <!-- CQ #7538 -->
-                    <include>junit:junit:[4.11]:*:test</include>
-                    <include>org.hamcrest:hamcrest-core:[1.3]:*:test</include>
-                    <include>org.hamcrest:hamcrest-library:[1.3]:*:test</include>
-                    <include>com.googlecode.jmockit:jmockit:[1.3]:*:test</include>
-                    <include>ch.qos.logback:logback-core:[1.0.7]:*:test</include>
-                    <include>ch.qos.logback:logback-classic:[1.0.7]:*:test</include>
-                    <include>org.eclipse.jetty.orbit:javax.servlet:[2.5.0.v201103041518]:*:test</include>
-                  </includes>
-                </bannedDependencies>
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <version>1.7</version>
-        <executions>
-          <execution>
-            <id>osgi-timestamp</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>timestamp-property</goal>
-            </goals>
-            <configuration>
-              <name>bundle.osgiTimestamp</name>
-              <pattern>yyyyMMdd-HHmm</pattern>
-              <timeZone>UTC</timeZone>
-              <locale>en</locale>
-            </configuration>
-          </execution>
-          <execution>
-            <id>osgi-version</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>regex-property</goal>
-            </goals>
-            <configuration>
-              <name>bundle.osgiVersion</name>
-              <value>${project.version}</value>
-              <regex>-SNAPSHOT</regex>
-              <replacement>.${bundle.osgiTimestamp}</replacement>
-              <failIfNoMatch>false</failIfNoMatch>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-  <profiles>
-    <profile>
-      <id>sonatype-oss-release</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-source-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-sources</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>jar-no-fork</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-javadoc-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-javadocs</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>jar</goal>
-                </goals>
-              </execution>
-              <execution>
-                <id>default-cli</id>
-                <configuration>
-                  <attach>false</attach>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-gpg-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>sign-artifacts</id>
-                <phase>verify</phase>
-                <goals>
-                  <goal>sign</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-assembly-plugin</artifactId>
-            <dependencies>
-              <dependency>
-                <groupId>org.apache.apache.resources</groupId>
-                <artifactId>apache-source-release-assembly-descriptor</artifactId>
-                <version>1.0.2</version>
-              </dependency>
-            </dependencies>
-            <executions>
-              <execution>
-                <id>attach-source-release-distro</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>single</goal>
-                </goals>
-                <configuration>
-                  <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
-                  <descriptorRefs>
-                    <descriptorRef>source-release</descriptorRef>
-                  </descriptorRefs>
-                  <tarLongFileFormat>gnu</tarLongFileFormat>
-                </configuration>
-              </execution>
-              <execution>
-                <id>default-cli</id>
-                <configuration>
-                  <attach>false</attach>
-                  <descriptors>
-                    <descriptor>src/main/assembly/bin.xml</descriptor>
-                  </descriptors>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>snapshot-sources</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-source-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-sources</id>
-                <goals>
-                  <goal>jar-no-fork</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>clirr</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>clirr-maven-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>check-api-compat</id>
-                <phase>verify</phase>
-                <goals>
-                  <goal>check-no-fork</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>m2e</id>
-      <activation>
-        <property>
-          <name>m2e.version</name>
-        </property>
-      </activation>
-      <build>
-        <pluginManagement>
-          <plugins>
-            <plugin>
-              <groupId>org.eclipse.m2e</groupId>
-              <artifactId>lifecycle-mapping</artifactId>
-              <version>1.0.0</version>
-              <configuration>
-                <lifecycleMappingMetadata>
-                  <pluginExecutions>
-                    <pluginExecution>
-                      <pluginExecutionFilter>
-                        <groupId>org.eclipse.sisu</groupId>
-                        <artifactId>sisu-maven-plugin</artifactId>
-                        <versionRange>[0.0.0.M2,)</versionRange>
-                        <goals>
-                          <goal>test-index</goal>
-                          <goal>main-index</goal>
-                        </goals>
-                      </pluginExecutionFilter>
-                      <action>
-                        <ignore />
-                      </action>
-                    </pluginExecution>
-                    <pluginExecution>
-                      <pluginExecutionFilter>
-                        <groupId>org.codehaus.mojo</groupId>
-                        <artifactId>build-helper-maven-plugin</artifactId>
-                        <versionRange>[1.7,)</versionRange>
-                        <goals>
-                          <goal>regex-property</goal>
-                          <goal>timestamp-property</goal>
-                        </goals>
-                      </pluginExecutionFilter>
-                      <action>
-                        <ignore />
-                      </action>
-                    </pluginExecution>
-                  </pluginExecutions>
-                </lifecycleMappingMetadata>
-              </configuration>
-            </plugin>
-            <plugin>
-              <groupId>org.apache.felix</groupId>
-              <artifactId>maven-bundle-plugin</artifactId>
-              <configuration>
-                <instructions>
-                  <Bundle-Version>$(replace;${project.version};-SNAPSHOT;.qualifier)</Bundle-Version>
-                </instructions>
-              </configuration>
-            </plugin>
-          </plugins>
-        </pluginManagement>
-      </build>
-    </profile>
-  </profiles>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Copyright (c) 2010, 2014 Sonatype, Inc.
+ ~ All rights reserved. This program and the accompanying materials
+ ~ are made available under the terms of the Eclipse Public License v1.0
+ ~ which accompanies this distribution, and is available at
+ ~ http://www.eclipse.org/legal/epl-v10.html
+ ~
+ ~ Contributors:
+ ~    Sonatype, Inc. - initial API and implementation
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.eclipse.aether</groupId>
+  <artifactId>aether</artifactId>
+  <version>1.1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>Aether</name>
+  <description>
+    The parent and aggregator for the repository system.
+  </description>
+  <url>http://www.eclipse.org/aether/</url>
+  <inceptionYear>2010</inceptionYear>
+
+  <organization>
+    <name>The Eclipse Foundation</name>
+    <url>http://www.eclipse.org/</url>
+  </organization>
+
+  <mailingLists>
+    <mailingList>
+      <name>Aether Developer List</name>
+      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-dev</subscribe>
+      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-dev</unsubscribe>
+      <post>aether-dev@eclipse.org</post>
+      <archive>http://dev.eclipse.org/mhonarc/lists/aether-dev/</archive>
+    </mailingList>
+    <mailingList>
+      <name>Aether User List</name>
+      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-users</subscribe>
+      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-users</unsubscribe>
+      <post>aether-users@eclipse.org</post>
+      <archive>http://dev.eclipse.org/mhonarc/lists/aether-users/</archive>
+    </mailingList>
+    <mailingList>
+      <name>Aether Commit Notification List</name>
+      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-commit</subscribe>
+      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-commit</unsubscribe>
+      <archive>http://dev.eclipse.org/mhonarc/lists/aether-commit/</archive>
+    </mailingList>
+    <mailingList>
+      <name>Aether CI Notification List</name>
+      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-build</subscribe>
+      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-build</unsubscribe>
+      <archive>http://dev.eclipse.org/mhonarc/lists/aether-build/</archive>
+    </mailingList>
+  </mailingLists>
+
+  <scm>
+    <connection>scm:git:git://git.eclipse.org/gitroot/aether/aether-core.git</connection>
+    <developerConnection>scm:git:ssh://git.eclipse.org/gitroot/aether/aether-core.git</developerConnection>
+    <url>http://git.eclipse.org/c/aether/aether-core.git/tree/</url>
+  </scm>
+
+  <issueManagement>
+    <system>bugzilla</system>
+    <url>https://bugs.eclipse.org/bugs/buglist.cgi?query_format=specific&amp;bug_status=__open__&amp;product=Aether</url>
+  </issueManagement>
+
+  <ciManagement>
+    <system>Hudson</system>
+    <url>https://hudson.eclipse.org/aether/job/aether-core/</url>
+  </ciManagement>
+
+  <distributionManagement>
+    <repository>
+      <id>sonatype-nexus-staging</id>
+      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
+    </repository>
+    <snapshotRepository>
+      <id>${sonatypeOssDistMgmtSnapshotsId}</id>
+      <url>${sonatypeOssDistMgmtSnapshotsUrl}</url>
+    </snapshotRepository>
+  </distributionManagement>
+
+  <licenses>
+    <license>
+      <name>Eclipse Public License, Version 1.0</name>
+      <url>http://www.eclipse.org/legal/epl-v10.html</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+
+  <developers>
+    <developer>
+      <id>bbentmann</id>
+      <name>Benjamin Bentmann</name>
+      <roles>
+        <role>Project Lead</role>
+      </roles>
+    </developer>
+    <developer>
+      <id>jvanzyl</id>
+      <name>Jason Van Zyl</name>
+      <roles>
+        <role>Project Lead</role>
+      </roles>
+    </developer>
+  </developers>
+
+  <modules>
+    <!-- NOTE: Be sure to update the bin assembly descriptor as well if the module list changes -->
+    <module>aether-api</module>
+    <module>aether-spi</module>
+    <module>aether-util</module>
+    <module>aether-impl</module>
+    <module>aether-test-util</module>
+    <module>aether-connector-basic</module>
+    <module>aether-transport-classpath</module>
+    <module>aether-transport-file</module>
+    <module>aether-transport-http</module>
+    <module>aether-transport-wagon</module>
+  </modules>
+
+  <properties>
+    <bundle.env>J2SE-1.5</bundle.env>
+    <bundle.vendor>Eclipse Aether</bundle.vendor>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    <surefire.redirectTestOutputToFile>true</surefire.redirectTestOutputToFile>
+    <sonatypeOssDistMgmtSnapshotsId>sonatype-nexus-snapshots</sonatypeOssDistMgmtSnapshotsId>
+    <sonatypeOssDistMgmtSnapshotsUrl>https://oss.sonatype.org/content/repositories/snapshots/</sonatypeOssDistMgmtSnapshotsUrl>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.eclipse.aether</groupId>
+        <artifactId>aether-api</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.aether</groupId>
+        <artifactId>aether-spi</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.aether</groupId>
+        <artifactId>aether-util</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.aether</groupId>
+        <artifactId>aether-impl</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.aether</groupId>
+        <artifactId>aether-connector-basic</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.aether</groupId>
+        <artifactId>aether-test-util</artifactId>
+        <version>${project.version}</version>
+        <scope>test</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>junit</groupId>
+        <artifactId>junit</artifactId>
+        <version>4.11</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.hamcrest</groupId>
+        <artifactId>hamcrest-core</artifactId>
+        <version>1.3</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.hamcrest</groupId>
+        <artifactId>hamcrest-library</artifactId>
+        <version>1.3</version>
+        <scope>test</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>javax.inject</groupId>
+        <artifactId>javax.inject</artifactId>
+        <version>1</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-component-annotations</artifactId>
+        <version>1.5.5</version>
+        <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>org.eclipse.sisu.inject</artifactId>
+        <version>0.1.1</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>org.eclipse.sisu.plexus</artifactId>
+        <version>0.1.1</version>
+        <exclusions>
+          <exclusion>
+            <groupId>javax.enterprise</groupId>
+            <artifactId>cdi-api</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>org.sonatype.sisu</groupId>
+        <artifactId>sisu-guice</artifactId>
+        <version>3.1.6</version>
+        <classifier>no_aop</classifier>
+        <exclusions>
+          <exclusion>
+            <groupId>aopalliance</groupId>
+            <artifactId>aopalliance</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <version>1.6.2</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.felix</groupId>
+          <artifactId>maven-bundle-plugin</artifactId>
+          <version>2.4.0</version>
+          <configuration>
+            <instructions>
+              <Bundle-DocURL>${project.url}</Bundle-DocURL>
+              <Bundle-Name>${project.name}</Bundle-Name>
+              <Bundle-RequiredExecutionEnvironment>${bundle.env}</Bundle-RequiredExecutionEnvironment>
+              <Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName>
+              <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor>
+              <Bundle-Version>${bundle.osgiVersion}</Bundle-Version>
+              <Export-Package>org.eclipse.aether.internal.*;x-internal:=true,org.eclipse.aether.*</Export-Package>
+            </instructions>
+          </configuration>
+          <executions>
+            <execution>
+              <id>create-manifest</id>
+              <phase>process-test-classes</phase>
+              <goals>
+                <goal>manifest</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-assembly-plugin</artifactId>
+          <version>2.2.1</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>2.5</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>2.5.1</version>
+          <configuration>
+            <source>1.5</source>
+            <target>1.5</target>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.5</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-enforcer-plugin</artifactId>
+          <version>1.2</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-gpg-plugin</artifactId>
+          <version>1.2</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.3.1</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-jar-plugin</artifactId>
+          <!-- NOTE: Avoiding 2.4+ due to https://github.com/sonatype/m2eclipse-extras/issues/10 -->
+          <version>2.3.2</version>
+          <configuration>
+            <archive>
+              <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+            </archive>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-javadoc-plugin</artifactId>
+          <version>2.8.1</version>
+          <configuration>
+            <detectOfflineLinks>false</detectOfflineLinks>
+            <links>
+              <link>http://download.oracle.com/javase/6/docs/api/</link>
+            </links>
+            <tags>
+              <tag>
+                <name>noextend</name>
+                <placement>a</placement>
+                <head>Restriction:</head>
+              </tag>
+              <tag>
+                <name>noimplement</name>
+                <placement>a</placement>
+                <head>Restriction:</head>
+              </tag>
+              <tag>
+                <name>noinstantiate</name>
+                <placement>a</placement>
+                <head>Restriction:</head>
+              </tag>
+              <tag>
+                <name>nooverride</name>
+                <placement>a</placement>
+                <head>Restriction:</head>
+              </tag>
+              <tag>
+                <name>noreference</name>
+                <placement>a</placement>
+                <head>Restriction:</head>
+              </tag>
+              <tag>
+                <name>provisional</name>
+                <placement>a</placement>
+                <head>Provisional:</head>
+              </tag>
+            </tags>
+            <groups>
+              <group>
+                <title>API</title>
+                <packages>org.eclipse.aether*</packages>
+              </group>
+              <group>
+                <title>SPI</title>
+                <packages>org.eclipse.aether.spi*</packages>
+              </group>
+              <group>
+                <title>Utilities</title>
+                <packages>org.eclipse.aether.util*</packages>
+              </group>
+              <group>
+                <title>Repository Connectors</title>
+                <packages>org.eclipse.aether.connector*</packages>
+              </group>
+              <group>
+                <title>Transporters</title>
+                <packages>org.eclipse.aether.transport*</packages>
+              </group>
+              <group>
+                <title>Implementation</title>
+                <packages>org.eclipse.aether.impl*</packages>
+              </group>
+              <group>
+                <title>Internals</title>
+                <packages>org.eclipse.aether.internal*</packages>
+              </group>
+            </groups>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-release-plugin</artifactId>
+          <version>2.1</version>
+          <configuration>
+            <autoVersionSubmodules>true</autoVersionSubmodules>
+            <mavenExecutorId>forked-path</mavenExecutorId>
+            <useReleaseProfile>false</useReleaseProfile>
+            <goals>deploy javadoc:aggregate-jar assembly:attached</goals>
+            <arguments>-Psonatype-oss-release</arguments>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>2.6</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.4</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-source-plugin</artifactId>
+          <version>2.1.2</version>
+          <configuration>
+            <archive>
+              <manifestEntries>
+                <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
+                <Bundle-Name>${project.name} Sources</Bundle-Name>
+                <Bundle-License>http://www.eclipse.org/legal/epl-v10.html</Bundle-License>
+                <Bundle-RequiredExecutionEnvironment>${bundle.env}</Bundle-RequiredExecutionEnvironment>
+                <Bundle-SymbolicName>${bundle.symbolicName}.source</Bundle-SymbolicName>
+                <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor>
+                <Bundle-Version>${bundle.osgiVersion}</Bundle-Version>
+                <Eclipse-SourceBundle>${bundle.symbolicName};version="${bundle.osgiVersion}";roots:="."</Eclipse-SourceBundle>
+              </manifestEntries>
+            </archive>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.9</version>
+          <configuration>
+            <argLine>-Xmx128m</argLine>
+            <redirectTestOutputToFile>${surefire.redirectTestOutputToFile}</redirectTestOutputToFile>
+            <systemPropertyVariables>
+              <java.io.tmpdir>${project.build.directory}/surefire-tmp</java.io.tmpdir>
+            </systemPropertyVariables>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>animal-sniffer-maven-plugin</artifactId>
+          <version>1.9</version>
+          <configuration>
+            <signature>
+              <groupId>org.codehaus.mojo.signature</groupId>
+              <artifactId>java15</artifactId>
+              <version>1.0</version>
+            </signature>
+          </configuration>
+          <executions>
+            <execution>
+              <id>check-java-1.5-compat</id>
+              <phase>process-classes</phase>
+              <goals>
+                <goal>check</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>clirr-maven-plugin</artifactId>
+          <version>2.3</version>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.plexus</groupId>
+          <artifactId>plexus-component-metadata</artifactId>
+          <version>1.5.5</version>
+          <executions>
+            <execution>
+              <id>generate-components-xml</id>
+              <phase>process-classes</phase>
+              <goals>
+                <goal>generate-metadata</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+        <plugin>
+          <groupId>org.eclipse.sisu</groupId>
+          <artifactId>sisu-maven-plugin</artifactId>
+          <version>0.0.0.M2</version>
+          <executions>
+            <execution>
+              <id>generate-index</id>
+              <phase>process-classes</phase>
+              <goals>
+                <goal>main-index</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>qa</id>
+            <phase>verify</phase>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireProperty>
+                  <!-- enforce OSGi-friendly versioning scheme such that milestone < rc < final release -->
+                  <property>project.version</property>
+                  <regex>[0-9]+\.[0-9]+\.[0-9]+((.*-SNAPSHOT)|(\.M[0-9]+)|(\.RC[0-9]+)|(\.v[0-9]{8}))</regex>
+                  <regexMessage>Project version must be either X.Y.Z.M#, X.Y.Z.RC# or X.Y.Z.v########</regexMessage>
+                </requireProperty>
+                <bannedDependencies>
+                  <!-- enforce use of dependencies approved via IP log -->
+                  <searchTransitive>true</searchTransitive>
+                  <excludes>
+                    <exclude>*:*</exclude>
+                  </excludes>
+                  <includes>
+                    <include>org.eclipse.aether</include>
+                    <include>org.eclipse.sisu</include>
+                    <include>org.eclipse.jetty:*:*:*:test</include>
+                    <!-- CQ #5627 -->
+                    <include>org.slf4j:slf4j-api:[1.6.2]</include>
+                    <!-- CQ #5629 -->
+                    <include>org.codehaus.plexus:plexus-component-annotations:[1.5.5]</include>
+                    <!-- CQ #5630 -->
+                    <include>org.codehaus.plexus:plexus-utils:[2.1]</include>
+                    <!-- CQ #5631 -->
+                    <include>org.codehaus.plexus:plexus-classworlds:[2.4]</include>
+                    <!-- CQ #5632 -->
+                    <include>org.apache.maven.wagon:wagon-provider-api:[1.0]</include>
+                    <!-- CQ #5636 -->
+                    <include>org.sonatype.sisu:sisu-guice:[3.1.6]</include>
+                    <!-- CQ #7328 -->
+                    <include>com.google.guava:guava:[11.0.2]</include>
+                    <!-- CQ #5639 -->
+                    <include>javax.inject:javax.inject:[1]</include>
+                    <!-- CQ #7657 -->
+                    <include>org.apache.httpcomponents:httpclient:[4.2.6]</include>
+                    <!-- CQ #7656 -->
+                    <include>org.apache.httpcomponents:httpcore:[4.2.5]</include>
+                    <!-- CQ #7346 -->
+                    <include>commons-codec:commons-codec:[1.6]</include>
+                    <!-- CQ #7347 -->
+                    <include>org.slf4j:jcl-over-slf4j:[1.6.2]</include>
+                    <!-- CQ #7538 -->
+                    <include>junit:junit:[4.11]:*:test</include>
+                    <include>org.hamcrest:hamcrest-core:[1.3]:*:test</include>
+                    <include>org.hamcrest:hamcrest-library:[1.3]:*:test</include>
+                    <include>com.googlecode.jmockit:jmockit:[1.3]:*:test</include>
+                    <include>ch.qos.logback:logback-core:[1.0.7]:*:test</include>
+                    <include>ch.qos.logback:logback-classic:[1.0.7]:*:test</include>
+                    <include>org.eclipse.jetty.orbit:javax.servlet:[2.5.0.v201103041518]:*:test</include>
+                  </includes>
+                </bannedDependencies>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <version>1.7</version>
+        <executions>
+          <execution>
+            <id>osgi-timestamp</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>timestamp-property</goal>
+            </goals>
+            <configuration>
+              <name>bundle.osgiTimestamp</name>
+              <pattern>yyyyMMdd-HHmm</pattern>
+              <timeZone>UTC</timeZone>
+              <locale>en</locale>
+            </configuration>
+          </execution>
+          <execution>
+            <id>osgi-version</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>regex-property</goal>
+            </goals>
+            <configuration>
+              <name>bundle.osgiVersion</name>
+              <value>${project.version}</value>
+              <regex>-SNAPSHOT</regex>
+              <replacement>.${bundle.osgiTimestamp}</replacement>
+              <failIfNoMatch>false</failIfNoMatch>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>sonatype-oss-release</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-source-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>attach-sources</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>jar-no-fork</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-javadoc-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>attach-javadocs</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>jar</goal>
+                </goals>
+              </execution>
+              <execution>
+                <id>default-cli</id>
+                <configuration>
+                  <attach>false</attach>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-gpg-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>sign-artifacts</id>
+                <phase>verify</phase>
+                <goals>
+                  <goal>sign</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-assembly-plugin</artifactId>
+            <dependencies>
+              <dependency>
+                <groupId>org.apache.apache.resources</groupId>
+                <artifactId>apache-source-release-assembly-descriptor</artifactId>
+                <version>1.0.2</version>
+              </dependency>
+            </dependencies>
+            <executions>
+              <execution>
+                <id>attach-source-release-distro</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>single</goal>
+                </goals>
+                <configuration>
+                  <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
+                  <descriptorRefs>
+                    <descriptorRef>source-release</descriptorRef>
+                  </descriptorRefs>
+                  <tarLongFileFormat>gnu</tarLongFileFormat>
+                </configuration>
+              </execution>
+              <execution>
+                <id>default-cli</id>
+                <configuration>
+                  <attach>false</attach>
+                  <descriptors>
+                    <descriptor>src/main/assembly/bin.xml</descriptor>
+                  </descriptors>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>snapshot-sources</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-source-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>attach-sources</id>
+                <goals>
+                  <goal>jar-no-fork</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>clirr</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>clirr-maven-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>check-api-compat</id>
+                <phase>verify</phase>
+                <goals>
+                  <goal>check-no-fork</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>m2e</id>
+      <activation>
+        <property>
+          <name>m2e.version</name>
+        </property>
+      </activation>
+      <build>
+        <pluginManagement>
+          <plugins>
+            <plugin>
+              <groupId>org.eclipse.m2e</groupId>
+              <artifactId>lifecycle-mapping</artifactId>
+              <version>1.0.0</version>
+              <configuration>
+                <lifecycleMappingMetadata>
+                  <pluginExecutions>
+                    <pluginExecution>
+                      <pluginExecutionFilter>
+                        <groupId>org.eclipse.sisu</groupId>
+                        <artifactId>sisu-maven-plugin</artifactId>
+                        <versionRange>[0.0.0.M2,)</versionRange>
+                        <goals>
+                          <goal>test-index</goal>
+                          <goal>main-index</goal>
+                        </goals>
+                      </pluginExecutionFilter>
+                      <action>
+                        <ignore />
+                      </action>
+                    </pluginExecution>
+                    <pluginExecution>
+                      <pluginExecutionFilter>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>build-helper-maven-plugin</artifactId>
+                        <versionRange>[1.7,)</versionRange>
+                        <goals>
+                          <goal>regex-property</goal>
+                          <goal>timestamp-property</goal>
+                        </goals>
+                      </pluginExecutionFilter>
+                      <action>
+                        <ignore />
+                      </action>
+                    </pluginExecution>
+                  </pluginExecutions>
+                </lifecycleMappingMetadata>
+              </configuration>
+            </plugin>
+            <plugin>
+              <groupId>org.apache.felix</groupId>
+              <artifactId>maven-bundle-plugin</artifactId>
+              <configuration>
+                <instructions>
+                  <Bundle-Version>$(replace;${project.version};-SNAPSHOT;.qualifier)</Bundle-Version>
+                </instructions>
+              </configuration>
+            </plugin>
+          </plugins>
+        </pluginManagement>
+      </build>
+    </profile>
+  </profiles>
+</project>


[02/50] [abbrv] maven-aether git commit: [maven-release-plugin] prepare release aether-1.0.0.v20140518

Posted by ol...@apache.org.
[maven-release-plugin] prepare release aether-1.0.0.v20140518


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/e6398148
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/e6398148
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/e6398148

Branch: refs/heads/master
Commit: e639814816ad773a47d8ddbb6cbf113b0814fe7b
Parents: 9940845
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun May 18 19:54:11 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun May 18 19:54:11 2014 +0200

----------------------------------------------------------------------
 aether-api/pom.xml                 | 2 +-
 aether-connector-basic/pom.xml     | 2 +-
 aether-impl/pom.xml                | 2 +-
 aether-spi/pom.xml                 | 2 +-
 aether-test-util/pom.xml           | 2 +-
 aether-transport-classpath/pom.xml | 2 +-
 aether-transport-file/pom.xml      | 2 +-
 aether-transport-http/pom.xml      | 2 +-
 aether-transport-wagon/pom.xml     | 2 +-
 aether-util/pom.xml                | 2 +-
 pom.xml                            | 2 +-
 11 files changed, 11 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e6398148/aether-api/pom.xml
----------------------------------------------------------------------
diff --git a/aether-api/pom.xml b/aether-api/pom.xml
index ce6998e..35dd65b 100644
--- a/aether-api/pom.xml
+++ b/aether-api/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0-SNAPSHOT</version>
+    <version>1.0.0.v20140518</version>
   </parent>
 
   <artifactId>aether-api</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e6398148/aether-connector-basic/pom.xml
----------------------------------------------------------------------
diff --git a/aether-connector-basic/pom.xml b/aether-connector-basic/pom.xml
index b34bbb3..ee208a8 100644
--- a/aether-connector-basic/pom.xml
+++ b/aether-connector-basic/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0-SNAPSHOT</version>
+    <version>1.0.0.v20140518</version>
   </parent>
 
   <artifactId>aether-connector-basic</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e6398148/aether-impl/pom.xml
----------------------------------------------------------------------
diff --git a/aether-impl/pom.xml b/aether-impl/pom.xml
index 8e4b09a..9627aff 100644
--- a/aether-impl/pom.xml
+++ b/aether-impl/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0-SNAPSHOT</version>
+    <version>1.0.0.v20140518</version>
   </parent>
 
   <artifactId>aether-impl</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e6398148/aether-spi/pom.xml
----------------------------------------------------------------------
diff --git a/aether-spi/pom.xml b/aether-spi/pom.xml
index 6391aff..e9bd9fa 100644
--- a/aether-spi/pom.xml
+++ b/aether-spi/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0-SNAPSHOT</version>
+    <version>1.0.0.v20140518</version>
   </parent>
 
   <artifactId>aether-spi</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e6398148/aether-test-util/pom.xml
----------------------------------------------------------------------
diff --git a/aether-test-util/pom.xml b/aether-test-util/pom.xml
index f6d68cc..84ec2a4 100644
--- a/aether-test-util/pom.xml
+++ b/aether-test-util/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0-SNAPSHOT</version>
+    <version>1.0.0.v20140518</version>
   </parent>
 
   <artifactId>aether-test-util</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e6398148/aether-transport-classpath/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-classpath/pom.xml b/aether-transport-classpath/pom.xml
index 46c8609..b980591 100644
--- a/aether-transport-classpath/pom.xml
+++ b/aether-transport-classpath/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0-SNAPSHOT</version>
+    <version>1.0.0.v20140518</version>
   </parent>
 
   <artifactId>aether-transport-classpath</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e6398148/aether-transport-file/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-file/pom.xml b/aether-transport-file/pom.xml
index a0cbc19..35bf5b1 100644
--- a/aether-transport-file/pom.xml
+++ b/aether-transport-file/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0-SNAPSHOT</version>
+    <version>1.0.0.v20140518</version>
   </parent>
 
   <artifactId>aether-transport-file</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e6398148/aether-transport-http/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-http/pom.xml b/aether-transport-http/pom.xml
index c5def17..feb9adb 100644
--- a/aether-transport-http/pom.xml
+++ b/aether-transport-http/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0-SNAPSHOT</version>
+    <version>1.0.0.v20140518</version>
   </parent>
 
   <artifactId>aether-transport-http</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e6398148/aether-transport-wagon/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-wagon/pom.xml b/aether-transport-wagon/pom.xml
index 6940ad8..c021c93 100644
--- a/aether-transport-wagon/pom.xml
+++ b/aether-transport-wagon/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0-SNAPSHOT</version>
+    <version>1.0.0.v20140518</version>
   </parent>
 
   <artifactId>aether-transport-wagon</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e6398148/aether-util/pom.xml
----------------------------------------------------------------------
diff --git a/aether-util/pom.xml b/aether-util/pom.xml
index c8f2c74..624f7d4 100644
--- a/aether-util/pom.xml
+++ b/aether-util/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0-SNAPSHOT</version>
+    <version>1.0.0.v20140518</version>
   </parent>
 
   <artifactId>aether-util</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e6398148/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 858f065..753916b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,7 +16,7 @@
 
   <groupId>org.eclipse.aether</groupId>
   <artifactId>aether</artifactId>
-  <version>1.0.0-SNAPSHOT</version>
+  <version>1.0.0.v20140518</version>
   <packaging>pom</packaging>
 
   <name>Aether</name>


[19/50] [abbrv] maven-aether git commit: Updated jetty-server to 7.6.15

Posted by ol...@apache.org.
Updated jetty-server to 7.6.15


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/51ea1756
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/51ea1756
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/51ea1756

Branch: refs/heads/master
Commit: 51ea1756aac5c27c29d525e1d48689b7a5e77780
Parents: fa75e13
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Thu Aug 28 18:29:58 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Thu Aug 28 18:29:58 2014 +0200

----------------------------------------------------------------------
 aether-transport-http/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/51ea1756/aether-transport-http/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-http/pom.xml b/aether-transport-http/pom.xml
index 81b0934..f791c2a 100644
--- a/aether-transport-http/pom.xml
+++ b/aether-transport-http/pom.xml
@@ -91,7 +91,7 @@
     <dependency>
       <groupId>org.eclipse.jetty</groupId>
       <artifactId>jetty-server</artifactId>
-      <version>7.6.14.v20131031</version>
+      <version>7.6.15.v20140411</version>
       <scope>test</scope>
     </dependency>
     <dependency>


[43/50] [abbrv] maven-aether git commit: Bug 449599 - Return value of DefaultSessionData.set(key, null, null) disobeys API doc

Posted by ol...@apache.org.
Bug 449599 - Return value of DefaultSessionData.set(key, null, null) disobeys API doc

Fixed set(key, null, null) to return true if current mapping is null/non-existing


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/e171c21e
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/e171c21e
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/e171c21e

Branch: refs/heads/master
Commit: e171c21e55afc366f56cd82130888c2b3e68248a
Parents: 396bc8c
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat Nov 1 19:30:29 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat Nov 1 19:30:29 2014 +0100

----------------------------------------------------------------------
 .../org/eclipse/aether/DefaultSessionData.java  |   6 +-
 .../eclipse/aether/DefaultSessionDataTest.java  | 128 +++++++++++++++++++
 2 files changed, 133 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e171c21e/aether-api/src/main/java/org/eclipse/aether/DefaultSessionData.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/DefaultSessionData.java b/aether-api/src/main/java/org/eclipse/aether/DefaultSessionData.java
index 90f1127..738cebc 100644
--- a/aether-api/src/main/java/org/eclipse/aether/DefaultSessionData.java
+++ b/aether-api/src/main/java/org/eclipse/aether/DefaultSessionData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2012 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,6 +61,10 @@ public final class DefaultSessionData
         }
         else
         {
+            if ( oldValue == null )
+            {
+                return !data.containsKey( key );
+            }
             return data.remove( key, oldValue );
         }
     }

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e171c21e/aether-api/src/test/java/org/eclipse/aether/DefaultSessionDataTest.java
----------------------------------------------------------------------
diff --git a/aether-api/src/test/java/org/eclipse/aether/DefaultSessionDataTest.java b/aether-api/src/test/java/org/eclipse/aether/DefaultSessionDataTest.java
new file mode 100644
index 0000000..2c239a4
--- /dev/null
+++ b/aether-api/src/test/java/org/eclipse/aether/DefaultSessionDataTest.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Sonatype, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Sonatype, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.aether;
+
+import static org.junit.Assert.*;
+
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.junit.Test;
+
+public class DefaultSessionDataTest
+{
+
+    private DefaultSessionData data = new DefaultSessionData();
+
+    private Object get( Object key )
+    {
+        return data.get( key );
+    }
+
+    private void set( Object key, Object value )
+    {
+        data.set( key, value );
+    }
+
+    private boolean set( Object key, Object oldValue, Object newValue )
+    {
+        return data.set( key, oldValue, newValue );
+    }
+
+    @Test( expected = RuntimeException.class )
+    public void testGet_NullKey()
+    {
+        get( null );
+    }
+
+    @Test( expected = RuntimeException.class )
+    public void testSet_NullKey()
+    {
+        set( null, "data" );
+    }
+
+    @Test
+    public void testGetSet()
+    {
+        Object key = "key";
+        assertNull( get( key ) );
+        set( key, "value" );
+        assertEquals( "value", get( key ) );
+        set( key, "changed" );
+        assertEquals( "changed", get( key ) );
+        set( key, null );
+        assertNull( get( key ) );
+    }
+
+    @Test
+    public void testGetSafeSet()
+    {
+        Object key = "key";
+        assertNull( get( key ) );
+        assertFalse( set( key, "wrong", "value" ) );
+        assertNull( get( key ) );
+        assertTrue( set( key, null, "value" ) );
+        assertEquals( "value", get( key ) );
+        assertTrue( set( key, "value", "value" ) );
+        assertEquals( "value", get( key ) );
+        assertFalse( set( key, "wrong", "changed" ) );
+        assertEquals( "value", get( key ) );
+        assertTrue( set( key, "value", "changed" ) );
+        assertEquals( "changed", get( key ) );
+        assertFalse( set( key, "wrong", null ) );
+        assertEquals( "changed", get( key ) );
+        assertTrue( set( key, "changed", null ) );
+        assertNull( get( key ) );
+        assertTrue( set( key, null, null ) );
+        assertNull( get( key ) );
+    }
+
+    @Test( timeout = 10000 )
+    public void testConcurrency()
+        throws Exception
+    {
+        final AtomicReference<Throwable> error = new AtomicReference<Throwable>();
+        Thread threads[] = new Thread[20];
+        for ( int i = 0; i < threads.length; i++ )
+        {
+            threads[i] = new Thread()
+            {
+                @Override
+                public void run()
+                {
+                    for ( int i = 0; i < 100; i++ )
+                    {
+                        String key = UUID.randomUUID().toString();
+                        try
+                        {
+                            set( key, Boolean.TRUE );
+                            assertEquals( Boolean.TRUE, get( key ) );
+                        }
+                        catch ( Throwable t )
+                        {
+                            error.compareAndSet( null, t );
+                            t.printStackTrace();
+                        }
+                    }
+                }
+            };
+        }
+        for ( Thread thread : threads )
+        {
+            thread.start();
+        }
+        for ( Thread thread : threads )
+        {
+            thread.join();
+        }
+        assertNull( String.valueOf( error.get() ), error.get() );
+    }
+}


[41/50] [abbrv] maven-aether git commit: Polished code

Posted by ol...@apache.org.
Polished code


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/ed23cf80
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/ed23cf80
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/ed23cf80

Branch: refs/heads/master
Commit: ed23cf809cb2afb3f3e04863ff0d8050250b7126
Parents: 6ef4a91
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat Nov 1 17:02:39 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat Nov 1 17:02:39 2014 +0100

----------------------------------------------------------------------
 .../impl/DefaultRemoteRepositoryManager.java    | 50 ++++++++++++++------
 1 file changed, 36 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/ed23cf80/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java
index fa560a9..8a54d62 100644
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java
+++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java
@@ -11,10 +11,9 @@
 package org.eclipse.aether.internal.impl;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.ListIterator;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -45,8 +44,38 @@ public class DefaultRemoteRepositoryManager
     implements RemoteRepositoryManager, Service
 {
 
-    private static final String CACHE_KEY_LOGGED_MIRRORS = DefaultRemoteRepositoryManager.class.getName()
-        + "$LoggedMirrors";
+    private static final class LoggedMirror
+    {
+
+        private final Object[] keys;
+
+        public LoggedMirror( RemoteRepository original, RemoteRepository mirror )
+        {
+            keys = new Object[] { mirror.getId(), mirror.getUrl(), original.getId(), original.getUrl() };
+        }
+
+        @Override
+        public boolean equals( Object obj )
+        {
+            if ( this == obj )
+            {
+                return true;
+            }
+            else if ( !( obj instanceof LoggedMirror ) )
+            {
+                return false;
+            }
+            LoggedMirror that = (LoggedMirror) obj;
+            return Arrays.equals( keys, that.keys );
+        }
+
+        @Override
+        public int hashCode()
+        {
+            return Arrays.hashCode( keys );
+        }
+
+    }
 
     private Logger logger = NullLoggerFactory.LOGGER;
 
@@ -193,19 +222,12 @@ public class DefaultRemoteRepositoryManager
         RepositoryCache cache = session.getCache();
         if ( cache != null )
         {
-            Object logged = cache.get( session, CACHE_KEY_LOGGED_MIRRORS );
-            if ( !( logged instanceof ConcurrentMap ) )
-            {
-                logged = new ConcurrentHashMap<Object, Object>();
-                cache.put( session, CACHE_KEY_LOGGED_MIRRORS, logged );
-            }
-            @SuppressWarnings( "unchecked" )
-            ConcurrentMap<Object, Object> map = (ConcurrentMap<Object, Object>) logged;
-            String key = mirror.getId() + '\t' + mirror.getUrl() + '\t' + original.getId() + '\t' + original.getUrl();
-            if ( map.put( key, Boolean.TRUE ) != null )
+            Object key = new LoggedMirror( original, mirror );
+            if ( cache.get( session, key ) != null )
             {
                 return;
             }
+            cache.put( session, key, Boolean.TRUE );
         }
         logger.debug( "Using mirror " + mirror.getId() + " (" + mirror.getUrl() + ") for " + original.getId() + " ("
             + original.getUrl() + ")." );


[36/50] [abbrv] maven-aether git commit: Bug 447812 - Allow authentication to follow HTTP redirects

Posted by ol...@apache.org.
Bug 447812 - Allow authentication to follow HTTP redirects

Introduced configuration property aether.connector.http.redirectedAuthentication which HttpTransporter uses to control the applicable hosts for server auth


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/07e1a845
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/07e1a845
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/07e1a845

Branch: refs/heads/master
Commit: 07e1a845afd00cbc6b57e3c400c72f77f22b41f5
Parents: 32267bf
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Oct 19 17:05:27 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Oct 19 17:05:27 2014 +0200

----------------------------------------------------------------------
 .../eclipse/aether/ConfigurationProperties.java | 24 ++++++++-
 .../aether/transport/http/HttpTransporter.java  | 43 ++++++++++++++---
 .../transport/http/HttpTransporterTest.java     | 51 ++++++++++++++++++++
 3 files changed, 111 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/07e1a845/aether-api/src/main/java/org/eclipse/aether/ConfigurationProperties.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/ConfigurationProperties.java b/aether-api/src/main/java/org/eclipse/aether/ConfigurationProperties.java
index 16c483e..3cbd59c 100644
--- a/aether-api/src/main/java/org/eclipse/aether/ConfigurationProperties.java
+++ b/aether-api/src/main/java/org/eclipse/aether/ConfigurationProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -123,6 +123,28 @@ public final class ConfigurationProperties
     public static final String DEFAULT_HTTP_CREDENTIAL_ENCODING = "ISO-8859-1";
 
     /**
+     * An option indicating whether authentication configured for a HTTP repository should also be used with any host
+     * that the original server might redirect requests to. Unless enabled, credentials are only exchanged with the
+     * original host from the repository URL and not supplied to different hosts encountered during redirects. The
+     * option value can either be a boolean flag or a comma-separated list of host names denoting the whitelist of
+     * original hosts whose redirects can be trusted and should use the configured authentication no matter the
+     * destination host(s). Alternatively, the suffix {@code .<repoId>} can be appended to this configuration key to
+     * control the behavior for a specific repository id.
+     * 
+     * @see #DEFAULT_HTTP_REDIRECTED_AUTHENTICATION
+     * @since 1.1.0
+     */
+    public static final String HTTP_REDIRECTED_AUTHENTICATION = PREFIX_CONNECTOR + "http.redirectedAuthentication";
+
+    /**
+     * The default handling of authentication during HTTP redirects if {@link #HTTP_REDIRECTED_AUTHENTICATION} isn't
+     * set.
+     * 
+     * @since 1.1.0
+     */
+    public static final String DEFAULT_HTTP_REDIRECTED_AUTHENTICATION = "false";
+
+    /**
      * A flag indicating whether checksums which are retrieved during checksum validation should be persisted in the
      * local filesystem next to the file they provide the checksum for.
      * 

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/07e1a845/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
index 931e04e..1a4ac00 100644
--- a/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
+++ b/aether-transport-http/src/main/java/org/eclipse/aether/transport/http/HttpTransporter.java
@@ -76,6 +76,8 @@ final class HttpTransporter
     private static final Pattern CONTENT_RANGE_PATTERN =
         Pattern.compile( "\\s*bytes\\s+([0-9]+)\\s*-\\s*([0-9]+)\\s*/.*" );
 
+    private static final Pattern HOST_SPLIT_PATTERN = Pattern.compile( "\\s*[,]\\s*" );
+
     private final Logger logger;
 
     private final AuthenticationContext repoAuthContext;
@@ -135,7 +137,8 @@ final class HttpTransporter
 
         configureClient( client.getParams(), session, repository, proxy );
 
-        client.setCredentialsProvider( toCredentialsProvider( server, repoAuthContext, proxy, proxyAuthContext ) );
+        boolean redirectedAuth = getRedirectedAuth( session, repository, server );
+        client.setCredentialsProvider( toCredentials( server, repoAuthContext, redirectedAuth, proxy, proxyAuthContext ) );
 
         this.client = new DecompressingHttpClient( client );
     }
@@ -177,19 +180,47 @@ final class HttpTransporter
                                                                         ConfigurationProperties.USER_AGENT ) );
     }
 
-    private static CredentialsProvider toCredentialsProvider( HttpHost server, AuthenticationContext serverAuthCtx,
-                                                              HttpHost proxy, AuthenticationContext proxyAuthCtx )
+    private static boolean getRedirectedAuth( RepositorySystemSession session, RemoteRepository repo, HttpHost server )
+    {
+        String mode =
+            ConfigUtils.getString( session, ConfigurationProperties.DEFAULT_HTTP_REDIRECTED_AUTHENTICATION,
+                                   ConfigurationProperties.HTTP_REDIRECTED_AUTHENTICATION + '.' + repo.getId(),
+                                   ConfigurationProperties.HTTP_REDIRECTED_AUTHENTICATION );
+        if ( "false".equalsIgnoreCase( mode ) )
+        {
+            return false;
+        }
+        if ( "true".equalsIgnoreCase( mode ) )
+        {
+            return true;
+        }
+        String host = server.getHostName();
+        for ( String allowed : HOST_SPLIT_PATTERN.split( mode.trim() ) )
+        {
+            if ( allowed.equalsIgnoreCase( host ) )
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static CredentialsProvider toCredentials( HttpHost server, AuthenticationContext serverAuthCtx,
+                                                      boolean redirectedAuth, HttpHost proxy,
+                                                      AuthenticationContext proxyAuthCtx )
     {
-        CredentialsProvider provider = toCredentialsProvider( server.getHostName(), AuthScope.ANY_PORT, serverAuthCtx );
+        CredentialsProvider provider =
+            toCredentials( redirectedAuth ? AuthScope.ANY_HOST : server.getHostName(), AuthScope.ANY_PORT,
+                           serverAuthCtx );
         if ( proxy != null )
         {
-            CredentialsProvider p = toCredentialsProvider( proxy.getHostName(), proxy.getPort(), proxyAuthCtx );
+            CredentialsProvider p = toCredentials( proxy.getHostName(), proxy.getPort(), proxyAuthCtx );
             provider = new DemuxCredentialsProvider( provider, p, proxy );
         }
         return provider;
     }
 
-    private static CredentialsProvider toCredentialsProvider( String host, int port, AuthenticationContext ctx )
+    private static CredentialsProvider toCredentials( String host, int port, AuthenticationContext ctx )
     {
         DeferredCredentialsProvider provider = new DeferredCredentialsProvider();
         if ( ctx != null )

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/07e1a845/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
index 4dbc730..eed95b4 100644
--- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
+++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
@@ -1141,6 +1141,57 @@ public class HttpTransporterTest
     }
 
     @Test
+    public void testServerAuthScope_FollowsRedirectToDifferentHost_EnabledByRepoId()
+        throws Exception
+    {
+        session.setConfigProperty( ConfigurationProperties.HTTP_REDIRECTED_AUTHENTICATION + "." + REPO_ID, "true" );
+        String username = "testuser", password = "testpass";
+        httpServer.setAuthentication( username, password );
+        auth = new AuthenticationBuilder().addUsername( username ).addPassword( password ).build();
+        proxy = new Proxy( Proxy.TYPE_HTTP, httpServer.getHost(), httpServer.getHttpPort() );
+        newTransporter( "http://redirect.localhost:1/" );
+        GetTask task = new GetTask( URI.create( "redirect/file.txt?host=" + httpServer.getHost() ) );
+        transporter.get( task );
+        assertEquals( "test", task.getDataString() );
+    }
+
+    @Test
+    public void testServerAuthScope_FollowsRedirectToDifferentHost_EnabledByHostName()
+        throws Exception
+    {
+        session.setConfigProperty( ConfigurationProperties.HTTP_REDIRECTED_AUTHENTICATION, " REDIRECT.localhost , foo" );
+        String username = "testuser", password = "testpass";
+        httpServer.setAuthentication( username, password );
+        auth = new AuthenticationBuilder().addUsername( username ).addPassword( password ).build();
+        proxy = new Proxy( Proxy.TYPE_HTTP, httpServer.getHost(), httpServer.getHttpPort() );
+        newTransporter( "http://redirect.localhost:1/" );
+        GetTask task = new GetTask( URI.create( "redirect/file.txt?host=" + httpServer.getHost() ) );
+        transporter.get( task );
+        assertEquals( "test", task.getDataString() );
+    }
+
+    @Test
+    public void testServerAuthScope_FollowsRedirectToDifferentHost_DisabledByDefault()
+        throws Exception
+    {
+        String username = "testuser", password = "testpass";
+        httpServer.setAuthentication( username, password );
+        auth = new AuthenticationBuilder().addUsername( username ).addPassword( password ).build();
+        proxy = new Proxy( Proxy.TYPE_HTTP, httpServer.getHost(), httpServer.getHttpPort() );
+        newTransporter( "http://redirect.localhost:1/" );
+        GetTask task = new GetTask( URI.create( "redirect/file.txt?host=" + httpServer.getHost() ) );
+        try
+        {
+            transporter.get( task );
+            fail( "Server auth must not be used for redirect destination" );
+        }
+        catch ( HttpResponseException e )
+        {
+            assertEquals( 401, e.getStatusCode() );
+        }
+    }
+
+    @Test
     public void testServerAuthScope_NotUsedForProxy()
         throws Exception
     {


[28/50] [abbrv] maven-aether git commit: Re-normalized line endings changed by bb7c121befcd8a36c2663838afee48ae1c5f3191 and 149a522165cded0d116d59c6f8793e3771058acb

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e93b32de/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 8f2ff86..ae84f1d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,802 +1,802 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- ~ Copyright (c) 2010, 2014 Sonatype, Inc.
- ~ All rights reserved. This program and the accompanying materials
- ~ are made available under the terms of the Eclipse Public License v1.0
- ~ which accompanies this distribution, and is available at
- ~ http://www.eclipse.org/legal/epl-v10.html
- ~
- ~ Contributors:
- ~    Sonatype, Inc. - initial API and implementation
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.eclipse.aether</groupId>
-  <artifactId>aether</artifactId>
-  <version>1.1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <name>Aether</name>
-  <description>
-    The parent and aggregator for the repository system.
-  </description>
-  <url>http://www.eclipse.org/aether/</url>
-  <inceptionYear>2010</inceptionYear>
-
-  <organization>
-    <name>The Eclipse Foundation</name>
-    <url>http://www.eclipse.org/</url>
-  </organization>
-
-  <mailingLists>
-    <mailingList>
-      <name>Aether Developer List</name>
-      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-dev</subscribe>
-      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-dev</unsubscribe>
-      <post>aether-dev@eclipse.org</post>
-      <archive>http://dev.eclipse.org/mhonarc/lists/aether-dev/</archive>
-    </mailingList>
-    <mailingList>
-      <name>Aether User List</name>
-      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-users</subscribe>
-      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-users</unsubscribe>
-      <post>aether-users@eclipse.org</post>
-      <archive>http://dev.eclipse.org/mhonarc/lists/aether-users/</archive>
-    </mailingList>
-    <mailingList>
-      <name>Aether Commit Notification List</name>
-      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-commit</subscribe>
-      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-commit</unsubscribe>
-      <archive>http://dev.eclipse.org/mhonarc/lists/aether-commit/</archive>
-    </mailingList>
-    <mailingList>
-      <name>Aether CI Notification List</name>
-      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-build</subscribe>
-      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-build</unsubscribe>
-      <archive>http://dev.eclipse.org/mhonarc/lists/aether-build/</archive>
-    </mailingList>
-  </mailingLists>
-
-  <scm>
-    <connection>scm:git:git://git.eclipse.org/gitroot/aether/aether-core.git</connection>
-    <developerConnection>scm:git:ssh://git.eclipse.org/gitroot/aether/aether-core.git</developerConnection>
-    <url>http://git.eclipse.org/c/aether/aether-core.git/tree/</url>
-  </scm>
-
-  <issueManagement>
-    <system>bugzilla</system>
-    <url>https://bugs.eclipse.org/bugs/buglist.cgi?query_format=specific&amp;bug_status=__open__&amp;product=Aether</url>
-  </issueManagement>
-
-  <ciManagement>
-    <system>Hudson</system>
-    <url>https://hudson.eclipse.org/aether/job/aether-core/</url>
-  </ciManagement>
-
-  <distributionManagement>
-    <repository>
-      <id>sonatype-nexus-staging</id>
-      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
-    </repository>
-    <snapshotRepository>
-      <id>${sonatypeOssDistMgmtSnapshotsId}</id>
-      <url>${sonatypeOssDistMgmtSnapshotsUrl}</url>
-    </snapshotRepository>
-  </distributionManagement>
-
-  <licenses>
-    <license>
-      <name>Eclipse Public License, Version 1.0</name>
-      <url>http://www.eclipse.org/legal/epl-v10.html</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-
-  <developers>
-    <developer>
-      <id>bbentmann</id>
-      <name>Benjamin Bentmann</name>
-      <roles>
-        <role>Project Lead</role>
-      </roles>
-    </developer>
-    <developer>
-      <id>jvanzyl</id>
-      <name>Jason Van Zyl</name>
-      <roles>
-        <role>Project Lead</role>
-      </roles>
-    </developer>
-  </developers>
-
-  <modules>
-    <!-- NOTE: Be sure to update the bin assembly descriptor as well if the module list changes -->
-    <module>aether-api</module>
-    <module>aether-spi</module>
-    <module>aether-util</module>
-    <module>aether-impl</module>
-    <module>aether-test-util</module>
-    <module>aether-connector-basic</module>
-    <module>aether-transport-classpath</module>
-    <module>aether-transport-file</module>
-    <module>aether-transport-http</module>
-    <module>aether-transport-wagon</module>
-  </modules>
-
-  <properties>
-    <bundle.env>J2SE-1.5</bundle.env>
-    <bundle.vendor>Eclipse Aether</bundle.vendor>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-    <surefire.redirectTestOutputToFile>true</surefire.redirectTestOutputToFile>
-    <sonatypeOssDistMgmtSnapshotsId>sonatype-nexus-snapshots</sonatypeOssDistMgmtSnapshotsId>
-    <sonatypeOssDistMgmtSnapshotsUrl>https://oss.sonatype.org/content/repositories/snapshots/</sonatypeOssDistMgmtSnapshotsUrl>
-  </properties>
-
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-api</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-spi</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-util</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-impl</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-connector-basic</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-test-util</artifactId>
-        <version>${project.version}</version>
-        <scope>test</scope>
-      </dependency>
-
-      <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>4.11</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.hamcrest</groupId>
-        <artifactId>hamcrest-core</artifactId>
-        <version>1.3</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.hamcrest</groupId>
-        <artifactId>hamcrest-library</artifactId>
-        <version>1.3</version>
-        <scope>test</scope>
-      </dependency>
-
-      <dependency>
-        <groupId>javax.inject</groupId>
-        <artifactId>javax.inject</artifactId>
-        <version>1</version>
-        <scope>provided</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-component-annotations</artifactId>
-        <version>1.5.5</version>
-        <scope>provided</scope>
-      </dependency>
-
-      <dependency>
-        <groupId>org.eclipse.sisu</groupId>
-        <artifactId>org.eclipse.sisu.inject</artifactId>
-        <version>0.1.1</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.sisu</groupId>
-        <artifactId>org.eclipse.sisu.plexus</artifactId>
-        <version>0.1.1</version>
-        <exclusions>
-          <exclusion>
-            <groupId>javax.enterprise</groupId>
-            <artifactId>cdi-api</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-      <dependency>
-        <groupId>org.sonatype.sisu</groupId>
-        <artifactId>sisu-guice</artifactId>
-        <version>3.1.6</version>
-        <classifier>no_aop</classifier>
-        <exclusions>
-          <exclusion>
-            <groupId>aopalliance</groupId>
-            <artifactId>aopalliance</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>com.google.code.findbugs</groupId>
-            <artifactId>jsr305</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-
-      <dependency>
-        <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-api</artifactId>
-        <version>1.6.2</version>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.felix</groupId>
-          <artifactId>maven-bundle-plugin</artifactId>
-          <version>2.4.0</version>
-          <configuration>
-            <instructions>
-              <Bundle-DocURL>${project.url}</Bundle-DocURL>
-              <Bundle-Name>${project.name}</Bundle-Name>
-              <Bundle-RequiredExecutionEnvironment>${bundle.env}</Bundle-RequiredExecutionEnvironment>
-              <Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName>
-              <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor>
-              <Bundle-Version>${bundle.osgiVersion}</Bundle-Version>
-              <Export-Package>org.eclipse.aether.internal.*;x-internal:=true,org.eclipse.aether.*</Export-Package>
-            </instructions>
-          </configuration>
-          <executions>
-            <execution>
-              <id>create-manifest</id>
-              <phase>process-test-classes</phase>
-              <goals>
-                <goal>manifest</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-assembly-plugin</artifactId>
-          <version>2.2.1</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-clean-plugin</artifactId>
-          <version>2.5</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>2.5.1</version>
-          <configuration>
-            <source>1.5</source>
-            <target>1.5</target>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-deploy-plugin</artifactId>
-          <version>2.5</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-enforcer-plugin</artifactId>
-          <version>1.2</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-gpg-plugin</artifactId>
-          <version>1.2</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-install-plugin</artifactId>
-          <version>2.3.1</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-jar-plugin</artifactId>
-          <!-- NOTE: Avoiding 2.4+ due to https://github.com/sonatype/m2eclipse-extras/issues/10 -->
-          <version>2.3.2</version>
-          <configuration>
-            <archive>
-              <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
-            </archive>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-javadoc-plugin</artifactId>
-          <version>2.8.1</version>
-          <configuration>
-            <detectOfflineLinks>false</detectOfflineLinks>
-            <links>
-              <link>http://download.oracle.com/javase/6/docs/api/</link>
-            </links>
-            <tags>
-              <tag>
-                <name>noextend</name>
-                <placement>a</placement>
-                <head>Restriction:</head>
-              </tag>
-              <tag>
-                <name>noimplement</name>
-                <placement>a</placement>
-                <head>Restriction:</head>
-              </tag>
-              <tag>
-                <name>noinstantiate</name>
-                <placement>a</placement>
-                <head>Restriction:</head>
-              </tag>
-              <tag>
-                <name>nooverride</name>
-                <placement>a</placement>
-                <head>Restriction:</head>
-              </tag>
-              <tag>
-                <name>noreference</name>
-                <placement>a</placement>
-                <head>Restriction:</head>
-              </tag>
-              <tag>
-                <name>provisional</name>
-                <placement>a</placement>
-                <head>Provisional:</head>
-              </tag>
-            </tags>
-            <groups>
-              <group>
-                <title>API</title>
-                <packages>org.eclipse.aether*</packages>
-              </group>
-              <group>
-                <title>SPI</title>
-                <packages>org.eclipse.aether.spi*</packages>
-              </group>
-              <group>
-                <title>Utilities</title>
-                <packages>org.eclipse.aether.util*</packages>
-              </group>
-              <group>
-                <title>Repository Connectors</title>
-                <packages>org.eclipse.aether.connector*</packages>
-              </group>
-              <group>
-                <title>Transporters</title>
-                <packages>org.eclipse.aether.transport*</packages>
-              </group>
-              <group>
-                <title>Implementation</title>
-                <packages>org.eclipse.aether.impl*</packages>
-              </group>
-              <group>
-                <title>Internals</title>
-                <packages>org.eclipse.aether.internal*</packages>
-              </group>
-            </groups>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-release-plugin</artifactId>
-          <version>2.1</version>
-          <configuration>
-            <autoVersionSubmodules>true</autoVersionSubmodules>
-            <mavenExecutorId>forked-path</mavenExecutorId>
-            <useReleaseProfile>false</useReleaseProfile>
-            <goals>deploy javadoc:aggregate-jar assembly:attached</goals>
-            <arguments>-Psonatype-oss-release</arguments>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-resources-plugin</artifactId>
-          <version>2.6</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-site-plugin</artifactId>
-          <version>3.4</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-source-plugin</artifactId>
-          <version>2.1.2</version>
-          <configuration>
-            <archive>
-              <manifestEntries>
-                <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
-                <Bundle-Name>${project.name} Sources</Bundle-Name>
-                <Bundle-License>http://www.eclipse.org/legal/epl-v10.html</Bundle-License>
-                <Bundle-RequiredExecutionEnvironment>${bundle.env}</Bundle-RequiredExecutionEnvironment>
-                <Bundle-SymbolicName>${bundle.symbolicName}.source</Bundle-SymbolicName>
-                <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor>
-                <Bundle-Version>${bundle.osgiVersion}</Bundle-Version>
-                <Eclipse-SourceBundle>${bundle.symbolicName};version="${bundle.osgiVersion}";roots:="."</Eclipse-SourceBundle>
-              </manifestEntries>
-            </archive>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-surefire-plugin</artifactId>
-          <version>2.9</version>
-          <configuration>
-            <argLine>-Xmx128m</argLine>
-            <redirectTestOutputToFile>${surefire.redirectTestOutputToFile}</redirectTestOutputToFile>
-            <systemPropertyVariables>
-              <java.io.tmpdir>${project.build.directory}/surefire-tmp</java.io.tmpdir>
-            </systemPropertyVariables>
-          </configuration>
-        </plugin>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>animal-sniffer-maven-plugin</artifactId>
-          <version>1.9</version>
-          <configuration>
-            <signature>
-              <groupId>org.codehaus.mojo.signature</groupId>
-              <artifactId>java15</artifactId>
-              <version>1.0</version>
-            </signature>
-          </configuration>
-          <executions>
-            <execution>
-              <id>check-java-1.5-compat</id>
-              <phase>process-classes</phase>
-              <goals>
-                <goal>check</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <groupId>org.codehaus.mojo</groupId>
-          <artifactId>clirr-maven-plugin</artifactId>
-          <version>2.3</version>
-        </plugin>
-        <plugin>
-          <groupId>org.codehaus.plexus</groupId>
-          <artifactId>plexus-component-metadata</artifactId>
-          <version>1.5.5</version>
-          <executions>
-            <execution>
-              <id>generate-components-xml</id>
-              <phase>process-classes</phase>
-              <goals>
-                <goal>generate-metadata</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-        <plugin>
-          <groupId>org.eclipse.sisu</groupId>
-          <artifactId>sisu-maven-plugin</artifactId>
-          <version>0.0.0.M2</version>
-          <executions>
-            <execution>
-              <id>generate-index</id>
-              <phase>process-classes</phase>
-              <goals>
-                <goal>main-index</goal>
-              </goals>
-            </execution>
-          </executions>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>qa</id>
-            <phase>verify</phase>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <requireProperty>
-                  <!-- enforce OSGi-friendly versioning scheme such that milestone < rc < final release -->
-                  <property>project.version</property>
-                  <regex>[0-9]+\.[0-9]+\.[0-9]+((.*-SNAPSHOT)|(\.M[0-9]+)|(\.RC[0-9]+)|(\.v[0-9]{8}))</regex>
-                  <regexMessage>Project version must be either X.Y.Z.M#, X.Y.Z.RC# or X.Y.Z.v########</regexMessage>
-                </requireProperty>
-                <bannedDependencies>
-                  <!-- enforce use of dependencies approved via IP log -->
-                  <searchTransitive>true</searchTransitive>
-                  <excludes>
-                    <exclude>*:*</exclude>
-                  </excludes>
-                  <includes>
-                    <include>org.eclipse.aether</include>
-                    <include>org.eclipse.sisu</include>
-                    <include>org.eclipse.jetty:*:*:*:test</include>
-                    <!-- CQ #5627 -->
-                    <include>org.slf4j:slf4j-api:[1.6.2]</include>
-                    <!-- CQ #5629 -->
-                    <include>org.codehaus.plexus:plexus-component-annotations:[1.5.5]</include>
-                    <!-- CQ #5630 -->
-                    <include>org.codehaus.plexus:plexus-utils:[2.1]</include>
-                    <!-- CQ #5631 -->
-                    <include>org.codehaus.plexus:plexus-classworlds:[2.4]</include>
-                    <!-- CQ #5632 -->
-                    <include>org.apache.maven.wagon:wagon-provider-api:[1.0]</include>
-                    <!-- CQ #5636 -->
-                    <include>org.sonatype.sisu:sisu-guice:[3.1.6]</include>
-                    <!-- CQ #7328 -->
-                    <include>com.google.guava:guava:[11.0.2]</include>
-                    <!-- CQ #5639 -->
-                    <include>javax.inject:javax.inject:[1]</include>
-                    <!-- CQ #7657 -->
-                    <include>org.apache.httpcomponents:httpclient:[4.2.6]</include>
-                    <!-- CQ #7656 -->
-                    <include>org.apache.httpcomponents:httpcore:[4.2.5]</include>
-                    <!-- CQ #7346 -->
-                    <include>commons-codec:commons-codec:[1.6]</include>
-                    <!-- CQ #7347 -->
-                    <include>org.slf4j:jcl-over-slf4j:[1.6.2]</include>
-                    <!-- CQ #7538 -->
-                    <include>junit:junit:[4.11]:*:test</include>
-                    <include>org.hamcrest:hamcrest-core:[1.3]:*:test</include>
-                    <include>org.hamcrest:hamcrest-library:[1.3]:*:test</include>
-                    <include>com.googlecode.jmockit:jmockit:[1.3]:*:test</include>
-                    <include>ch.qos.logback:logback-core:[1.0.7]:*:test</include>
-                    <include>ch.qos.logback:logback-classic:[1.0.7]:*:test</include>
-                    <include>org.eclipse.jetty.orbit:javax.servlet:[2.5.0.v201103041518]:*:test</include>
-                  </includes>
-                </bannedDependencies>
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <version>1.7</version>
-        <executions>
-          <execution>
-            <id>osgi-timestamp</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>timestamp-property</goal>
-            </goals>
-            <configuration>
-              <name>bundle.osgiTimestamp</name>
-              <pattern>yyyyMMdd-HHmm</pattern>
-              <timeZone>UTC</timeZone>
-              <locale>en</locale>
-            </configuration>
-          </execution>
-          <execution>
-            <id>osgi-version</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>regex-property</goal>
-            </goals>
-            <configuration>
-              <name>bundle.osgiVersion</name>
-              <value>${project.version}</value>
-              <regex>-SNAPSHOT</regex>
-              <replacement>.${bundle.osgiTimestamp}</replacement>
-              <failIfNoMatch>false</failIfNoMatch>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-  <profiles>
-    <profile>
-      <id>sonatype-oss-release</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-source-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-sources</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>jar-no-fork</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-javadoc-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-javadocs</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>jar</goal>
-                </goals>
-              </execution>
-              <execution>
-                <id>default-cli</id>
-                <configuration>
-                  <attach>false</attach>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-gpg-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>sign-artifacts</id>
-                <phase>verify</phase>
-                <goals>
-                  <goal>sign</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-assembly-plugin</artifactId>
-            <dependencies>
-              <dependency>
-                <groupId>org.apache.apache.resources</groupId>
-                <artifactId>apache-source-release-assembly-descriptor</artifactId>
-                <version>1.0.2</version>
-              </dependency>
-            </dependencies>
-            <executions>
-              <execution>
-                <id>attach-source-release-distro</id>
-                <phase>package</phase>
-                <goals>
-                  <goal>single</goal>
-                </goals>
-                <configuration>
-                  <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
-                  <descriptorRefs>
-                    <descriptorRef>source-release</descriptorRef>
-                  </descriptorRefs>
-                  <tarLongFileFormat>gnu</tarLongFileFormat>
-                </configuration>
-              </execution>
-              <execution>
-                <id>default-cli</id>
-                <configuration>
-                  <attach>false</attach>
-                  <descriptors>
-                    <descriptor>src/main/assembly/bin.xml</descriptor>
-                  </descriptors>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>snapshot-sources</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-source-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>attach-sources</id>
-                <goals>
-                  <goal>jar-no-fork</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>clirr</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.codehaus.mojo</groupId>
-            <artifactId>clirr-maven-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>check-api-compat</id>
-                <phase>verify</phase>
-                <goals>
-                  <goal>check-no-fork</goal>
-                </goals>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-    <profile>
-      <id>m2e</id>
-      <activation>
-        <property>
-          <name>m2e.version</name>
-        </property>
-      </activation>
-      <build>
-        <pluginManagement>
-          <plugins>
-            <plugin>
-              <groupId>org.eclipse.m2e</groupId>
-              <artifactId>lifecycle-mapping</artifactId>
-              <version>1.0.0</version>
-              <configuration>
-                <lifecycleMappingMetadata>
-                  <pluginExecutions>
-                    <pluginExecution>
-                      <pluginExecutionFilter>
-                        <groupId>org.eclipse.sisu</groupId>
-                        <artifactId>sisu-maven-plugin</artifactId>
-                        <versionRange>[0.0.0.M2,)</versionRange>
-                        <goals>
-                          <goal>test-index</goal>
-                          <goal>main-index</goal>
-                        </goals>
-                      </pluginExecutionFilter>
-                      <action>
-                        <ignore />
-                      </action>
-                    </pluginExecution>
-                    <pluginExecution>
-                      <pluginExecutionFilter>
-                        <groupId>org.codehaus.mojo</groupId>
-                        <artifactId>build-helper-maven-plugin</artifactId>
-                        <versionRange>[1.7,)</versionRange>
-                        <goals>
-                          <goal>regex-property</goal>
-                          <goal>timestamp-property</goal>
-                        </goals>
-                      </pluginExecutionFilter>
-                      <action>
-                        <ignore />
-                      </action>
-                    </pluginExecution>
-                  </pluginExecutions>
-                </lifecycleMappingMetadata>
-              </configuration>
-            </plugin>
-            <plugin>
-              <groupId>org.apache.felix</groupId>
-              <artifactId>maven-bundle-plugin</artifactId>
-              <configuration>
-                <instructions>
-                  <Bundle-Version>$(replace;${project.version};-SNAPSHOT;.qualifier)</Bundle-Version>
-                </instructions>
-              </configuration>
-            </plugin>
-          </plugins>
-        </pluginManagement>
-      </build>
-    </profile>
-  </profiles>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Copyright (c) 2010, 2014 Sonatype, Inc.
+ ~ All rights reserved. This program and the accompanying materials
+ ~ are made available under the terms of the Eclipse Public License v1.0
+ ~ which accompanies this distribution, and is available at
+ ~ http://www.eclipse.org/legal/epl-v10.html
+ ~
+ ~ Contributors:
+ ~    Sonatype, Inc. - initial API and implementation
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.eclipse.aether</groupId>
+  <artifactId>aether</artifactId>
+  <version>1.1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <name>Aether</name>
+  <description>
+    The parent and aggregator for the repository system.
+  </description>
+  <url>http://www.eclipse.org/aether/</url>
+  <inceptionYear>2010</inceptionYear>
+
+  <organization>
+    <name>The Eclipse Foundation</name>
+    <url>http://www.eclipse.org/</url>
+  </organization>
+
+  <mailingLists>
+    <mailingList>
+      <name>Aether Developer List</name>
+      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-dev</subscribe>
+      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-dev</unsubscribe>
+      <post>aether-dev@eclipse.org</post>
+      <archive>http://dev.eclipse.org/mhonarc/lists/aether-dev/</archive>
+    </mailingList>
+    <mailingList>
+      <name>Aether User List</name>
+      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-users</subscribe>
+      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-users</unsubscribe>
+      <post>aether-users@eclipse.org</post>
+      <archive>http://dev.eclipse.org/mhonarc/lists/aether-users/</archive>
+    </mailingList>
+    <mailingList>
+      <name>Aether Commit Notification List</name>
+      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-commit</subscribe>
+      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-commit</unsubscribe>
+      <archive>http://dev.eclipse.org/mhonarc/lists/aether-commit/</archive>
+    </mailingList>
+    <mailingList>
+      <name>Aether CI Notification List</name>
+      <subscribe>https://dev.eclipse.org/mailman/listinfo/aether-build</subscribe>
+      <unsubscribe>https://dev.eclipse.org/mailman/listinfo/aether-build</unsubscribe>
+      <archive>http://dev.eclipse.org/mhonarc/lists/aether-build/</archive>
+    </mailingList>
+  </mailingLists>
+
+  <scm>
+    <connection>scm:git:git://git.eclipse.org/gitroot/aether/aether-core.git</connection>
+    <developerConnection>scm:git:ssh://git.eclipse.org/gitroot/aether/aether-core.git</developerConnection>
+    <url>http://git.eclipse.org/c/aether/aether-core.git/tree/</url>
+  </scm>
+
+  <issueManagement>
+    <system>bugzilla</system>
+    <url>https://bugs.eclipse.org/bugs/buglist.cgi?query_format=specific&amp;bug_status=__open__&amp;product=Aether</url>
+  </issueManagement>
+
+  <ciManagement>
+    <system>Hudson</system>
+    <url>https://hudson.eclipse.org/aether/job/aether-core/</url>
+  </ciManagement>
+
+  <distributionManagement>
+    <repository>
+      <id>sonatype-nexus-staging</id>
+      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
+    </repository>
+    <snapshotRepository>
+      <id>${sonatypeOssDistMgmtSnapshotsId}</id>
+      <url>${sonatypeOssDistMgmtSnapshotsUrl}</url>
+    </snapshotRepository>
+  </distributionManagement>
+
+  <licenses>
+    <license>
+      <name>Eclipse Public License, Version 1.0</name>
+      <url>http://www.eclipse.org/legal/epl-v10.html</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+
+  <developers>
+    <developer>
+      <id>bbentmann</id>
+      <name>Benjamin Bentmann</name>
+      <roles>
+        <role>Project Lead</role>
+      </roles>
+    </developer>
+    <developer>
+      <id>jvanzyl</id>
+      <name>Jason Van Zyl</name>
+      <roles>
+        <role>Project Lead</role>
+      </roles>
+    </developer>
+  </developers>
+
+  <modules>
+    <!-- NOTE: Be sure to update the bin assembly descriptor as well if the module list changes -->
+    <module>aether-api</module>
+    <module>aether-spi</module>
+    <module>aether-util</module>
+    <module>aether-impl</module>
+    <module>aether-test-util</module>
+    <module>aether-connector-basic</module>
+    <module>aether-transport-classpath</module>
+    <module>aether-transport-file</module>
+    <module>aether-transport-http</module>
+    <module>aether-transport-wagon</module>
+  </modules>
+
+  <properties>
+    <bundle.env>J2SE-1.5</bundle.env>
+    <bundle.vendor>Eclipse Aether</bundle.vendor>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    <surefire.redirectTestOutputToFile>true</surefire.redirectTestOutputToFile>
+    <sonatypeOssDistMgmtSnapshotsId>sonatype-nexus-snapshots</sonatypeOssDistMgmtSnapshotsId>
+    <sonatypeOssDistMgmtSnapshotsUrl>https://oss.sonatype.org/content/repositories/snapshots/</sonatypeOssDistMgmtSnapshotsUrl>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.eclipse.aether</groupId>
+        <artifactId>aether-api</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.aether</groupId>
+        <artifactId>aether-spi</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.aether</groupId>
+        <artifactId>aether-util</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.aether</groupId>
+        <artifactId>aether-impl</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.aether</groupId>
+        <artifactId>aether-connector-basic</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.aether</groupId>
+        <artifactId>aether-test-util</artifactId>
+        <version>${project.version}</version>
+        <scope>test</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>junit</groupId>
+        <artifactId>junit</artifactId>
+        <version>4.11</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.hamcrest</groupId>
+        <artifactId>hamcrest-core</artifactId>
+        <version>1.3</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.hamcrest</groupId>
+        <artifactId>hamcrest-library</artifactId>
+        <version>1.3</version>
+        <scope>test</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>javax.inject</groupId>
+        <artifactId>javax.inject</artifactId>
+        <version>1</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-component-annotations</artifactId>
+        <version>1.5.5</version>
+        <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>org.eclipse.sisu.inject</artifactId>
+        <version>0.1.1</version>
+      </dependency>
+      <dependency>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>org.eclipse.sisu.plexus</artifactId>
+        <version>0.1.1</version>
+        <exclusions>
+          <exclusion>
+            <groupId>javax.enterprise</groupId>
+            <artifactId>cdi-api</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+      <dependency>
+        <groupId>org.sonatype.sisu</groupId>
+        <artifactId>sisu-guice</artifactId>
+        <version>3.1.6</version>
+        <classifier>no_aop</classifier>
+        <exclusions>
+          <exclusion>
+            <groupId>aopalliance</groupId>
+            <artifactId>aopalliance</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <version>1.6.2</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.felix</groupId>
+          <artifactId>maven-bundle-plugin</artifactId>
+          <version>2.4.0</version>
+          <configuration>
+            <instructions>
+              <Bundle-DocURL>${project.url}</Bundle-DocURL>
+              <Bundle-Name>${project.name}</Bundle-Name>
+              <Bundle-RequiredExecutionEnvironment>${bundle.env}</Bundle-RequiredExecutionEnvironment>
+              <Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName>
+              <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor>
+              <Bundle-Version>${bundle.osgiVersion}</Bundle-Version>
+              <Export-Package>org.eclipse.aether.internal.*;x-internal:=true,org.eclipse.aether.*</Export-Package>
+            </instructions>
+          </configuration>
+          <executions>
+            <execution>
+              <id>create-manifest</id>
+              <phase>process-test-classes</phase>
+              <goals>
+                <goal>manifest</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-assembly-plugin</artifactId>
+          <version>2.2.1</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>2.5</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>2.5.1</version>
+          <configuration>
+            <source>1.5</source>
+            <target>1.5</target>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>2.5</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-enforcer-plugin</artifactId>
+          <version>1.2</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-gpg-plugin</artifactId>
+          <version>1.2</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>2.3.1</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-jar-plugin</artifactId>
+          <!-- NOTE: Avoiding 2.4+ due to https://github.com/sonatype/m2eclipse-extras/issues/10 -->
+          <version>2.3.2</version>
+          <configuration>
+            <archive>
+              <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+            </archive>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-javadoc-plugin</artifactId>
+          <version>2.8.1</version>
+          <configuration>
+            <detectOfflineLinks>false</detectOfflineLinks>
+            <links>
+              <link>http://download.oracle.com/javase/6/docs/api/</link>
+            </links>
+            <tags>
+              <tag>
+                <name>noextend</name>
+                <placement>a</placement>
+                <head>Restriction:</head>
+              </tag>
+              <tag>
+                <name>noimplement</name>
+                <placement>a</placement>
+                <head>Restriction:</head>
+              </tag>
+              <tag>
+                <name>noinstantiate</name>
+                <placement>a</placement>
+                <head>Restriction:</head>
+              </tag>
+              <tag>
+                <name>nooverride</name>
+                <placement>a</placement>
+                <head>Restriction:</head>
+              </tag>
+              <tag>
+                <name>noreference</name>
+                <placement>a</placement>
+                <head>Restriction:</head>
+              </tag>
+              <tag>
+                <name>provisional</name>
+                <placement>a</placement>
+                <head>Provisional:</head>
+              </tag>
+            </tags>
+            <groups>
+              <group>
+                <title>API</title>
+                <packages>org.eclipse.aether*</packages>
+              </group>
+              <group>
+                <title>SPI</title>
+                <packages>org.eclipse.aether.spi*</packages>
+              </group>
+              <group>
+                <title>Utilities</title>
+                <packages>org.eclipse.aether.util*</packages>
+              </group>
+              <group>
+                <title>Repository Connectors</title>
+                <packages>org.eclipse.aether.connector*</packages>
+              </group>
+              <group>
+                <title>Transporters</title>
+                <packages>org.eclipse.aether.transport*</packages>
+              </group>
+              <group>
+                <title>Implementation</title>
+                <packages>org.eclipse.aether.impl*</packages>
+              </group>
+              <group>
+                <title>Internals</title>
+                <packages>org.eclipse.aether.internal*</packages>
+              </group>
+            </groups>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-release-plugin</artifactId>
+          <version>2.1</version>
+          <configuration>
+            <autoVersionSubmodules>true</autoVersionSubmodules>
+            <mavenExecutorId>forked-path</mavenExecutorId>
+            <useReleaseProfile>false</useReleaseProfile>
+            <goals>deploy javadoc:aggregate-jar assembly:attached</goals>
+            <arguments>-Psonatype-oss-release</arguments>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>2.6</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>3.4</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-source-plugin</artifactId>
+          <version>2.1.2</version>
+          <configuration>
+            <archive>
+              <manifestEntries>
+                <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
+                <Bundle-Name>${project.name} Sources</Bundle-Name>
+                <Bundle-License>http://www.eclipse.org/legal/epl-v10.html</Bundle-License>
+                <Bundle-RequiredExecutionEnvironment>${bundle.env}</Bundle-RequiredExecutionEnvironment>
+                <Bundle-SymbolicName>${bundle.symbolicName}.source</Bundle-SymbolicName>
+                <Bundle-Vendor>${bundle.vendor}</Bundle-Vendor>
+                <Bundle-Version>${bundle.osgiVersion}</Bundle-Version>
+                <Eclipse-SourceBundle>${bundle.symbolicName};version="${bundle.osgiVersion}";roots:="."</Eclipse-SourceBundle>
+              </manifestEntries>
+            </archive>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.9</version>
+          <configuration>
+            <argLine>-Xmx128m</argLine>
+            <redirectTestOutputToFile>${surefire.redirectTestOutputToFile}</redirectTestOutputToFile>
+            <systemPropertyVariables>
+              <java.io.tmpdir>${project.build.directory}/surefire-tmp</java.io.tmpdir>
+            </systemPropertyVariables>
+          </configuration>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>animal-sniffer-maven-plugin</artifactId>
+          <version>1.9</version>
+          <configuration>
+            <signature>
+              <groupId>org.codehaus.mojo.signature</groupId>
+              <artifactId>java15</artifactId>
+              <version>1.0</version>
+            </signature>
+          </configuration>
+          <executions>
+            <execution>
+              <id>check-java-1.5-compat</id>
+              <phase>process-classes</phase>
+              <goals>
+                <goal>check</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>clirr-maven-plugin</artifactId>
+          <version>2.3</version>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.plexus</groupId>
+          <artifactId>plexus-component-metadata</artifactId>
+          <version>1.5.5</version>
+          <executions>
+            <execution>
+              <id>generate-components-xml</id>
+              <phase>process-classes</phase>
+              <goals>
+                <goal>generate-metadata</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+        <plugin>
+          <groupId>org.eclipse.sisu</groupId>
+          <artifactId>sisu-maven-plugin</artifactId>
+          <version>0.0.0.M2</version>
+          <executions>
+            <execution>
+              <id>generate-index</id>
+              <phase>process-classes</phase>
+              <goals>
+                <goal>main-index</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>qa</id>
+            <phase>verify</phase>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireProperty>
+                  <!-- enforce OSGi-friendly versioning scheme such that milestone < rc < final release -->
+                  <property>project.version</property>
+                  <regex>[0-9]+\.[0-9]+\.[0-9]+((.*-SNAPSHOT)|(\.M[0-9]+)|(\.RC[0-9]+)|(\.v[0-9]{8}))</regex>
+                  <regexMessage>Project version must be either X.Y.Z.M#, X.Y.Z.RC# or X.Y.Z.v########</regexMessage>
+                </requireProperty>
+                <bannedDependencies>
+                  <!-- enforce use of dependencies approved via IP log -->
+                  <searchTransitive>true</searchTransitive>
+                  <excludes>
+                    <exclude>*:*</exclude>
+                  </excludes>
+                  <includes>
+                    <include>org.eclipse.aether</include>
+                    <include>org.eclipse.sisu</include>
+                    <include>org.eclipse.jetty:*:*:*:test</include>
+                    <!-- CQ #5627 -->
+                    <include>org.slf4j:slf4j-api:[1.6.2]</include>
+                    <!-- CQ #5629 -->
+                    <include>org.codehaus.plexus:plexus-component-annotations:[1.5.5]</include>
+                    <!-- CQ #5630 -->
+                    <include>org.codehaus.plexus:plexus-utils:[2.1]</include>
+                    <!-- CQ #5631 -->
+                    <include>org.codehaus.plexus:plexus-classworlds:[2.4]</include>
+                    <!-- CQ #5632 -->
+                    <include>org.apache.maven.wagon:wagon-provider-api:[1.0]</include>
+                    <!-- CQ #5636 -->
+                    <include>org.sonatype.sisu:sisu-guice:[3.1.6]</include>
+                    <!-- CQ #7328 -->
+                    <include>com.google.guava:guava:[11.0.2]</include>
+                    <!-- CQ #5639 -->
+                    <include>javax.inject:javax.inject:[1]</include>
+                    <!-- CQ #7657 -->
+                    <include>org.apache.httpcomponents:httpclient:[4.2.6]</include>
+                    <!-- CQ #7656 -->
+                    <include>org.apache.httpcomponents:httpcore:[4.2.5]</include>
+                    <!-- CQ #7346 -->
+                    <include>commons-codec:commons-codec:[1.6]</include>
+                    <!-- CQ #7347 -->
+                    <include>org.slf4j:jcl-over-slf4j:[1.6.2]</include>
+                    <!-- CQ #7538 -->
+                    <include>junit:junit:[4.11]:*:test</include>
+                    <include>org.hamcrest:hamcrest-core:[1.3]:*:test</include>
+                    <include>org.hamcrest:hamcrest-library:[1.3]:*:test</include>
+                    <include>com.googlecode.jmockit:jmockit:[1.3]:*:test</include>
+                    <include>ch.qos.logback:logback-core:[1.0.7]:*:test</include>
+                    <include>ch.qos.logback:logback-classic:[1.0.7]:*:test</include>
+                    <include>org.eclipse.jetty.orbit:javax.servlet:[2.5.0.v201103041518]:*:test</include>
+                  </includes>
+                </bannedDependencies>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <version>1.7</version>
+        <executions>
+          <execution>
+            <id>osgi-timestamp</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>timestamp-property</goal>
+            </goals>
+            <configuration>
+              <name>bundle.osgiTimestamp</name>
+              <pattern>yyyyMMdd-HHmm</pattern>
+              <timeZone>UTC</timeZone>
+              <locale>en</locale>
+            </configuration>
+          </execution>
+          <execution>
+            <id>osgi-version</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>regex-property</goal>
+            </goals>
+            <configuration>
+              <name>bundle.osgiVersion</name>
+              <value>${project.version}</value>
+              <regex>-SNAPSHOT</regex>
+              <replacement>.${bundle.osgiTimestamp}</replacement>
+              <failIfNoMatch>false</failIfNoMatch>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>sonatype-oss-release</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-source-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>attach-sources</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>jar-no-fork</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-javadoc-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>attach-javadocs</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>jar</goal>
+                </goals>
+              </execution>
+              <execution>
+                <id>default-cli</id>
+                <configuration>
+                  <attach>false</attach>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-gpg-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>sign-artifacts</id>
+                <phase>verify</phase>
+                <goals>
+                  <goal>sign</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-assembly-plugin</artifactId>
+            <dependencies>
+              <dependency>
+                <groupId>org.apache.apache.resources</groupId>
+                <artifactId>apache-source-release-assembly-descriptor</artifactId>
+                <version>1.0.2</version>
+              </dependency>
+            </dependencies>
+            <executions>
+              <execution>
+                <id>attach-source-release-distro</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>single</goal>
+                </goals>
+                <configuration>
+                  <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
+                  <descriptorRefs>
+                    <descriptorRef>source-release</descriptorRef>
+                  </descriptorRefs>
+                  <tarLongFileFormat>gnu</tarLongFileFormat>
+                </configuration>
+              </execution>
+              <execution>
+                <id>default-cli</id>
+                <configuration>
+                  <attach>false</attach>
+                  <descriptors>
+                    <descriptor>src/main/assembly/bin.xml</descriptor>
+                  </descriptors>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>snapshot-sources</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-source-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>attach-sources</id>
+                <goals>
+                  <goal>jar-no-fork</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>clirr</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>clirr-maven-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>check-api-compat</id>
+                <phase>verify</phase>
+                <goals>
+                  <goal>check-no-fork</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>m2e</id>
+      <activation>
+        <property>
+          <name>m2e.version</name>
+        </property>
+      </activation>
+      <build>
+        <pluginManagement>
+          <plugins>
+            <plugin>
+              <groupId>org.eclipse.m2e</groupId>
+              <artifactId>lifecycle-mapping</artifactId>
+              <version>1.0.0</version>
+              <configuration>
+                <lifecycleMappingMetadata>
+                  <pluginExecutions>
+                    <pluginExecution>
+                      <pluginExecutionFilter>
+                        <groupId>org.eclipse.sisu</groupId>
+                        <artifactId>sisu-maven-plugin</artifactId>
+                        <versionRange>[0.0.0.M2,)</versionRange>
+                        <goals>
+                          <goal>test-index</goal>
+                          <goal>main-index</goal>
+                        </goals>
+                      </pluginExecutionFilter>
+                      <action>
+                        <ignore />
+                      </action>
+                    </pluginExecution>
+                    <pluginExecution>
+                      <pluginExecutionFilter>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>build-helper-maven-plugin</artifactId>
+                        <versionRange>[1.7,)</versionRange>
+                        <goals>
+                          <goal>regex-property</goal>
+                          <goal>timestamp-property</goal>
+                        </goals>
+                      </pluginExecutionFilter>
+                      <action>
+                        <ignore />
+                      </action>
+                    </pluginExecution>
+                  </pluginExecutions>
+                </lifecycleMappingMetadata>
+              </configuration>
+            </plugin>
+            <plugin>
+              <groupId>org.apache.felix</groupId>
+              <artifactId>maven-bundle-plugin</artifactId>
+              <configuration>
+                <instructions>
+                  <Bundle-Version>$(replace;${project.version};-SNAPSHOT;.qualifier)</Bundle-Version>
+                </instructions>
+              </configuration>
+            </plugin>
+          </plugins>
+        </pluginManagement>
+      </build>
+    </profile>
+  </profiles>
+</project>


[29/50] [abbrv] maven-aether git commit: Re-normalized line endings changed by bb7c121befcd8a36c2663838afee48ae1c5f3191 and 149a522165cded0d116d59c6f8793e3771058acb

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/maven-aether/blob/e93b32de/class-overview.svg
----------------------------------------------------------------------
diff --git a/class-overview.svg b/class-overview.svg
index ff34232..e866960 100644
--- a/class-overview.svg
+++ b/class-overview.svg
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- ~ Copyright (c) 2010, 2011 Sonatype, Inc.
- ~ All rights reserved. This program and the accompanying materials
- ~ are made available under the terms of the Eclipse Public License v1.0
- ~ which accompanies this distribution, and is available at
- ~ http://www.eclipse.org/legal/epl-v10.html
- ~
- ~ Contributors:
- ~    Sonatype, Inc. - initial API and implementation
--->
-
-<svg xmlns:x="http://ns.adobe.com/Extensibility/1.0/" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:graph="http://ns.adobe.com/Graphs/1.0/" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"  xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1648" height="1517"><defs></defs><rect stroke="#000000" stroke-width="1" fill="#ffffff" x="0" y="0" width="1647" height="1516"/><g transform='translate(36.0,25.0) rotate(0 100.0 91.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" 
 fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='141.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='141.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RepositorySystem</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveVersionRange()</tspa
 n></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveVersion()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >readArtifactDescriptor()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >collectDependencies()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='57.2'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveDependencies()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='72.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveArtifacts()</tspan></tspa
 n></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='86.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveMetadata()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='101.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >install()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='116.39999999999999'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >deploy()</tspan></tspan></text></g></g><g transform='translate(26.0,790.0) rotate(0 100.0 61.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g tra
 nsform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='81.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='81.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,106.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,102.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Repos</tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >itorySystem
 Session</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >offline : boolean</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >systemProperties : Map</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >updatePolicy : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >checksumPolicy : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='57.2'><tspan><tspan font-size='12' font-family='A
 rial' fill='#000000' >...</tspan></tspan></text></g><g ></g></g><g transform='translate(635.3578854796845,337.77615933375705) rotate(0 69.6421145203155 37.22384066624295)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='33.4476813324859'  stroke="#A8A8A8" str
 oke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='33.4476813324859'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='69.6421145203155' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Authentication</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(640.0,463.5) rotate(0 70.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='139.44
 22310756972' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='70.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Proxy</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(320.0,463.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.
 0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='trans
 late(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >ProxySelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getProxy()</tspan></tspan></text></g></g><g transform='translate(320.0,337.0) rotate(0 100.0 38.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width=
 "2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >AuthenticationSelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Ar
 ial' fill='#000000' >getAuthentication()</tspan></tspan></text></g></g><g transform='translate(325.0,583.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A
 8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >MirrorSelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getMirror()</tspan></tspan></text></g></g><g transform='translate(1130.0,248.5) rotate(0 75.0 47.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='21.0'
   stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,61.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='38.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,57.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='38.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='75.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >ArtifactRepository</tspan></tspan></text
 ></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >id : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >contentType : String</tspan></tspan></text></g><g ></g></g><g transform='translate(1105.0,403.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill
 -opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,46.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,42.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >LocalRepository</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >basedir : File</tspan></
 tspan></text></g><g ></g></g><g transform='translate(1345.0,403.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.
 0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >WorkspaceRepository</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(865.0,403.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g tr
 ansform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,46.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='33.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,42.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='33.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RemoteRepository</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >url : String</tspan></tspan></text></g><g ></g></g><g transfor
 m='translate(1205.0,404.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-60.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,-60.0) rotate(90.0)'><polygon points='0,0 12,7 12,-7' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-30.0)'></g></g><g transform='translate(1005.0,404.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='-20.0' x2='170.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='170.0' y1='-20.0' x2='170.0' y2='-60.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(170.0,-60.0) rotate(90.0)'><polygon points='0,0 12,7 12,-7' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(85.0,-20.0)'></g></g><g transform='translate(1405.0,404.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-wid
 th='1' /><line x1='0.0' y1='-20.0' x2='-166.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-166.0' y1='-20.0' x2='-166.0' y2='-57.5' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(-166.0,-57.5) rotate(90.0)'><polygon points='0,0 12,7 12,-7' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(-83.0,-20.0)'></g></g><g transform='translate(1105.0,543.5) rotate(0 100.0 53.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="
 #A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >LocalRepositoryManager</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForLocalArtifact()</ts
 pan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForRemoteArtifact()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForLocalMetadata()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForRemoteMetadata()</tspan></tspan></text></g></g><g transform='translate(1348.0,543.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="
 #000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >WorkspaceReader</tspan></tspan></text></g><g ></g
 ><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >findArtifact()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >findVersions</tspan><tspan font-size='12' font-family='Arial' fill='#000000' >()</tspan></tspan></text></g></g><g transform='translate(866.0,545.0) rotate(0 100.0 48.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A
 8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='55.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='55.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RepositoryConnector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12
 ' font-family='Arial' fill='#000000' >get()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >put()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >close()</tspan></tspan></text></g></g><g transform='translate(965.0,479.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='66.5' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(90.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,33.25)'></g></g><g transform='translate(1445.0,479.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='65.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rot
 ate(90.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,32.5)'></g></g><g transform='translate(1205.0,481.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='63.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(90.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,31.5)'></g></g><g transform='translate(865.0,426.0)'><line x1='0.0' y1='0.0' x2='-70.3578854796845' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-70.3578854796845' y1='0.0' x2='-70.3578854796845' y2='-36.1104637335028' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-70.3578854796845' y1='-36.1104637335028' x2='-90.3578854796845' y2='-36.1104637335028' stroke-dasharr
 ay='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(180.0)'><polygon points='0,0 8,6 16,0 8,-6' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(-35.17894273984225,0.0)'></g></g><g transform='translate(865.0,456.0)'><line x1='0.0' y1='0.0' x2='-65.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-65.0' y1='0.0' x2='-65.0' y2='29.9999999999999' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-65.0' y1='29.9999999999999' x2='-85.0' y2='29.9999999999999' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(180.0)'><polygon points='0,0 8,6 16,0 8,-6' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(-32.5,0.0)'></g></g><g transform='translate(520.0,502.0)'><line x1='0.0' y1='0.0' x2='100.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='100.0' y1='0.0' x2='10
 0.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='100.0' y1='0.0' x2='120.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(120.0,0.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(50.0,0.0)'></g></g><g transform='translate(520.0,375.0)'><line x1='0.0' y1='0.0' x2='115.357885479684' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(115.357885479684,0.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(57.678942739842,0.0)'></g></g><g transform='translate(865.0,703.0) rotate(0 100.0 38.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  
 stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,46.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,42.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto'
  font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RepositoryConnectorFactory</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >priority : int</tspan></tspan></text></g><g ></g></g><g transform='translate(965.0,703.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-62.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,-62.0) rotate(90.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-31.0)'></g></g><g transform='translate(326.0,705.5) rotate(0 100.0 53.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A
 8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12
 px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >TransferListener</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >transferStarted()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >transferProgressed()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >transferFailed()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >...</tspan></tspan></text></g><
 /g><g transform='translate(330.0,845.5) rotate(0 100.0 53.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' w
 idth='199.203187250996' height='66.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RepositoryListener</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >artifactResolving()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >artifactResolved()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >artifactDeployed()</tspan></tspan></text><text text-rendering=
 'auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >...</tspan></tspan></text></g></g><g transform='translate(336.0,1340.0) rotate(0 100.0 38.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.2031
 87250996' height='35.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >DependencyGraphTransformer</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >transformGraph()</tspan></tspan></text></g></g><g transform='translate(331.0,990.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-o
 pacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.
 0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >DependencySelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >selectDependency() : boolean</tspan></tspan></text></g></g><g transform='translate(336.0,1220.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='tra
 nslate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >DependencyTraverser</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >traverseDependency() : boolean</tspan></tspan></text></g></g><g
  transform='translate(331.5,1105.5) rotate(0 102.5 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='204.18326693227093' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='204.18326693227093' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='204.18326693227093' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='204.18326693227093' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='204.18326693227093' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='
 0.0' width='204.18326693227093' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='102.5' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >DependencyManager</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >manageDependency()</tspan></tspan></text></g></g><g transform='translate(896.0,1298.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffff
 ff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >DependencyNode</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(896
 .0,1148.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,46.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='33.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,42.0)'><rect x='0.0' y='0.0' width='199.203187250996' heigh
 t='33.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Dependency</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >scope : String</tspan></tspan></text></g><g ></g></g><g transform='translate(893.0,928.0) rotate(0 100.0 76.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect
  x='0.0' y='0.0' width='199.203187250996' height='111.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='111.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,136.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,132.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Artifact</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text
 -anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >groupId : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >artifactId : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >extension : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >classifier : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='57.2'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >version : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='7
 2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >file : File</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='86.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >properties : Map</tspan></tspan></text></g><g ></g></g><g transform='translate(996.0,1149.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-68.5' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(-90.0)'><polygon points='0,0 8,6 16,0 8,-6' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-34.25)'></g></g><g transform='translate(996.0,1299.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-75.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(-90.0)'><polygon points='0,0 8,6 16,0 8,-6' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-37.5)'></g></g><g transform='translate(866.0,5
 93.0)'><line x1='0.0' y1='0.0' x2='-167.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-167.0' y1='0.0' x2='-167.0' y2='144.6' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-167.0' y1='144.6' x2='-340.0' y2='144.6' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(-340.0,144.6) rotate(360.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(-167.0,72.3)'></g></g><g transform='translate(1036.0,1299.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='-20.0' x2='80.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='80.0' y1='-20.0' x2='80.0' y2='22.5' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='80.0' y1='22.5' x2='60.0' y2='22.5' strok
 e-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(60.0,22.5) rotate(360.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(40.0,-20.0)'></g></g><g transform='translate(586.0,1349.75) rotate(0 50.0 31.25)'><polygon points='0.0,0.0 85.65737051792827,0.0 99.601593625498,14.48675496688742 99.601593625498,62.08609271523179 0.0,62.08609271523179 '  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><line x1='85.65737051792827' y1='0.0' x2='85.65737051792827' y2='14.48675496688742'  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><line x1='85.65737051792827' y1='14.48675496688742' x2='99.601593625498' y2='14.48675496688742'  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><g  transform='translate(0.0,13.25)'><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' f
 ont-family='Arial' fill='#000000' >Scope</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' > Inheritance,</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' > Conflict</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' > Resolution</tspan></tspan></text></g></g><g transform='translate(581.0,1226.75) rotate(0 50.0 31.25)'><polygon points='0.0,0.0 85.65737051792827,0.0 99.601593625498,14.48675496688742 99.601593625498,62.08609271523179 0.0,62.08609271523179 '  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><line x1='85.65737051792827' y1='0.0' x2='85.65737051792827' y2='14.48675496688742'  stro
 ke="#000000" stroke-width="1.0" fill="#ffffff"/><line x1='85.65737051792827' y1='14.48675496688742' x2='99.601593625498' y2='14.48675496688742'  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><g  transform='translate(0.0,36.25)'><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >Fat WARs</tspan></tspan></text></g></g><g transform='translate(571.0,1000.75) rotate(0 50.0 31.25)'><polygon points='0.0,0.0 85.65737051792827,0.0 99.601593625498,14.48675496688742 99.601593625498,62.08609271523179 0.0,62.08609271523179 '  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><line x1='85.65737051792827' y1='0.0' x2='85.65737051792827' y2='14.48675496688742'  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><line x1='85.65737051792827' y1='14.48675496688742' x2='99.601593625498' y2='14.48675496688742'  stroke="#000000" stroke-width="1.0" fill="#ffffff"/><g  transform='translate(0.0,
 21.25)'><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >Exclusions,</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' > Optional</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='50.0' style='text-anchor: middle' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' > Dependencies</tspan></tspan></text></g></g><g transform='translate(136.0,207.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='83.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='83.0' x2='-50.0' y2='83.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-50.0' y1='83.0' x2='-50.0' y2='583.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(-50.0,583.0) rotate(270.0)'>
 <line x1='0' y1='0' x2='12' y2='-5' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='12' y2='5' stroke='#000000' stroke-width='1' /></g><g transform='translate(-50.0,250.0)'></g></g><g transform='translate(126.0,790.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-415.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='-415.0' x2='194.0' y2='-415.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(194.0,-415.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-207.5)'></g></g><g transform='translate(166.0,790.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-288.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='-288.0' x2='154.0' y2='-288.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(154.0,-288.0) rotate(18
 0.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-144.0)'></g></g><g transform='translate(166.0,790.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-167.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='-167.0' x2='139.0' y2='-167.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='139.0' y1='-167.0' x2='139.0' y2='-168.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='139.0' y1='-168.0' x2='159.0' y2='-168.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(159.0,-168.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-83.5)'></g></g><g transform='translate(226.0,826.6)'><line x1='0.0' y1='0.0' x2='20.0
 ' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='20.0' y1='0.0' x2='20.0' y2='-88.8' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='20.0' y1='-88.8' x2='100.0' y2='-88.8' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(100.0,-88.8) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(20.0,-44.4)'></g></g><g transform='translate(226.0,851.0)'><line x1='0.0' y1='0.0' x2='84.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='84.0' y1='0.0' x2='84.0' y2='48.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='84.0' y1='48.0' x2='104.0' y2='48.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(104.0,48.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' s
 troke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(42.0,0.0)'></g></g><g transform='translate(226.0,875.4)'><line x1='0.0' y1='0.0' x2='20.0' y2='0.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='20.0' y1='0.0' x2='20.0' y2='153.4' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='20.0' y1='153.4' x2='105.0' y2='153.4' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(105.0,153.4) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(20.0,76.7)'></g></g><g transform='translate(166.0,912.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='231.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='231.0' x2='165.5' y2='231.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g t
 ransform='translate(165.5,231.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,115.5)'></g></g><g transform='translate(126.0,912.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='346.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='346.0' x2='210.0' y2='346.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(210.0,346.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,173.0)'></g></g><g transform='translate(86.0,912.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='466.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='466.0' x2='250.0' y2='466.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g trans
 form='translate(250.0,466.0) rotate(180.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,233.0)'></g></g></svg>
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ ~ Copyright (c) 2010, 2011 Sonatype, Inc.
+ ~ All rights reserved. This program and the accompanying materials
+ ~ are made available under the terms of the Eclipse Public License v1.0
+ ~ which accompanies this distribution, and is available at
+ ~ http://www.eclipse.org/legal/epl-v10.html
+ ~
+ ~ Contributors:
+ ~    Sonatype, Inc. - initial API and implementation
+-->
+
+<svg xmlns:x="http://ns.adobe.com/Extensibility/1.0/" xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/" xmlns:graph="http://ns.adobe.com/Graphs/1.0/" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"  xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1648" height="1517"><defs></defs><rect stroke="#000000" stroke-width="1" fill="#ffffff" x="0" y="0" width="1647" height="1516"/><g transform='translate(36.0,25.0) rotate(0 100.0 91.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" 
 fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='141.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='141.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RepositorySystem</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveVersionRange()</tspa
 n></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveVersion()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >readArtifactDescriptor()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >collectDependencies()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='57.2'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveDependencies()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='72.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveArtifacts()</tspan></tspa
 n></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='86.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >resolveMetadata()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='101.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >install()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='116.39999999999999'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >deploy()</tspan></tspan></text></g></g><g transform='translate(26.0,790.0) rotate(0 100.0 61.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g tra
 nsform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='81.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='81.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,106.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,102.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Repos</tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >itorySystem
 Session</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >offline : boolean</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >systemProperties : Map</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >updatePolicy : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >checksumPolicy : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='57.2'><tspan><tspan font-size='12' font-family='A
 rial' fill='#000000' >...</tspan></tspan></text></g><g ></g></g><g transform='translate(635.3578854796845,337.77615933375705) rotate(0 69.6421145203155 37.22384066624295)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='33.4476813324859'  stroke="#A8A8A8" str
 oke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='138.72931179345719' height='33.4476813324859'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='69.6421145203155' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Authentication</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(640.0,463.5) rotate(0 70.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='139.44
 22310756972' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='139.4422310756972' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='70.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >Proxy</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(320.0,463.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.
 0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='trans
 late(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >ProxySelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getProxy()</tspan></tspan></text></g></g><g transform='translate(320.0,337.0) rotate(0 100.0 38.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width=
 "2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >AuthenticationSelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Ar
 ial' fill='#000000' >getAuthentication()</tspan></tspan></text></g></g><g transform='translate(325.0,583.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A
 8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >MirrorSelector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getMirror()</tspan></tspan></text></g></g><g transform='translate(1130.0,248.5) rotate(0 75.0 47.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='21.0'
   stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,61.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='38.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,57.0)'><rect x='0.0' y='0.0' width='149.402390438247' height='38.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='75.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >ArtifactRepository</tspan></tspan></text
 ></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >id : String</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >contentType : String</tspan></tspan></text></g><g ></g></g><g transform='translate(1105.0,403.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill
 -opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,46.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,42.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='35.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >LocalRepository</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >basedir : File</tspan></
 tspan></text></g><g ></g></g><g transform='translate(1345.0,403.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.
 0)'><rect x='0.0' y='0.0' width='199.203187250996' height='34.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >WorkspaceRepository</tspan></tspan></text></g><g ></g><g ></g></g><g transform='translate(865.0,403.5) rotate(0 100.0 37.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g tr
 ansform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,46.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='33.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,42.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='33.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RemoteRepository</tspan></tspan></text></g><g  transform='translate(0.0,38.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >url : String</tspan></tspan></text></g><g ></g></g><g transfor
 m='translate(1205.0,404.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-60.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,-60.0) rotate(90.0)'><polygon points='0,0 12,7 12,-7' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,-30.0)'></g></g><g transform='translate(1005.0,404.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='0.0' y1='-20.0' x2='170.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='170.0' y1='-20.0' x2='170.0' y2='-60.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(170.0,-60.0) rotate(90.0)'><polygon points='0,0 12,7 12,-7' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(85.0,-20.0)'></g></g><g transform='translate(1405.0,404.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-wid
 th='1' /><line x1='0.0' y1='-20.0' x2='-166.0' y2='-20.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><line x1='-166.0' y1='-20.0' x2='-166.0' y2='-57.5' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(-166.0,-57.5) rotate(90.0)'><polygon points='0,0 12,7 12,-7' fill='#FFFFFF' stroke='#000000' stroke-width='1' /></g><g transform='translate(-83.0,-20.0)'></g></g><g transform='translate(1105.0,543.5) rotate(0 100.0 53.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="
 #A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='66.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >LocalRepositoryManager</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForLocalArtifact()</ts
 pan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForRemoteArtifact()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForLocalMetadata()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='42.400000000000006'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >getPathForRemoteMetadata()</tspan></tspan></text></g></g><g transform='translate(1348.0,543.5) rotate(0 100.0 38.5)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="
 #000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='36.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >WorkspaceReader</tspan></tspan></text></g><g ></g
 ><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >findArtifact()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >findVersions</tspan><tspan font-size='12' font-family='Arial' fill='#000000' >()</tspan></tspan></text></g></g><g transform='translate(866.0,545.0) rotate(0 100.0 48.0)'><g transform='translate(4.0,4.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,0.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='21.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,25.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#A
 8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,21.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='20.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g transform='translate(4.0,45.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='55.0'  stroke="#A8A8A8" stroke-width="2.0" stroke-opacity=".6" fill-opacity=".6" fill="#A8A8A8"/></g><g transform='translate(0.0,41.0)'><rect x='0.0' y='0.0' width='199.203187250996' height='55.0'  stroke="#000000" stroke-width="2.0" fill="#ffffff"/></g><g  transform='translate(0.0,15.5)'><text text-rendering='auto' font-size='12px' x='100.0' style='text-anchor: middle' y='-2.0'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' font-weight='bold' >RepositoryConnector</tspan></tspan></text></g><g ></g><g  transform='translate(0.0,58.0)'><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='-2.0'><tspan><tspan font-size='12
 ' font-family='Arial' fill='#000000' >get()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='12.8'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >put()</tspan></tspan></text><text text-rendering='auto' font-size='12px' x='5' style='text-anchor: start' y='27.6'><tspan><tspan font-size='12' font-family='Arial' fill='#000000' >close()</tspan></tspan></text></g></g><g transform='translate(965.0,479.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='66.5' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rotate(90.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,33.25)'></g></g><g transform='translate(1445.0,479.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='65.0' stroke-dasharray='23, 0' stroke='#000000' stroke-width='1' /><g transform='translate(0.0,0.0) rot
 ate(90.0)'><line x1='0' y1='0' x2='7.0' y2='-3' stroke='#000000' stroke-width='1' /><line x1='0' y1='0' x2='7.0' y2='3' stroke='#000000' stroke-width='1' /></g><g transform='translate(0.0,32.5)'></g></g><g transform='translate(1205.0,481.0)'><line x1='0.0' y1='0.0' x2='0.0' y2='63.0' stroke-dasharray='23, 0' stroke='#000000' stroke

<TRUNCATED>

[07/50] [abbrv] maven-aether git commit: Fixed method reference

Posted by ol...@apache.org.
Fixed method reference


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/ce19988c
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/ce19988c
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/ce19988c

Branch: refs/heads/master
Commit: ce19988c5abd6006d1c5678da0d9e192f8630578
Parents: 5dedc33
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun May 25 18:06:27 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun May 25 18:06:27 2014 +0200

----------------------------------------------------------------------
 .../aether/internal/impl/DefaultRepositorySystemTest.java      | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/ce19988c/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java b/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java
index 89c2e11..2cdb035 100644
--- a/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java
+++ b/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 Sonatype, Inc.
+ * Copyright (c) 2013, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -48,7 +48,7 @@ public class DefaultRepositorySystemTest
     {
         Proxy proxy = new Proxy( "http", "localhost", 8080 );
         DefaultProxySelector proxySelector = new DefaultProxySelector();
-        proxySelector.add( proxy, null );
+        proxySelector.add( proxy, "" );
         session.setProxySelector( proxySelector );
 
         Authentication auth = new AuthenticationBuilder().addUsername( "user" ).build();
@@ -84,7 +84,7 @@ public class DefaultRepositorySystemTest
     {
         Proxy proxy = new Proxy( "http", "localhost", 8080 );
         DefaultProxySelector proxySelector = new DefaultProxySelector();
-        proxySelector.add( proxy, null );
+        proxySelector.add( proxy, "" );
         session.setProxySelector( proxySelector );
 
         Authentication auth = new AuthenticationBuilder().addUsername( "user" ).build();


[31/50] [abbrv] maven-aether git commit: Extended HttpTransporterTest to cover another scenario of interest

Posted by ol...@apache.org.
Extended HttpTransporterTest to cover another scenario of interest


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/dae06159
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/dae06159
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/dae06159

Branch: refs/heads/master
Commit: dae06159bbc67a153054efb374637cf139a77aec
Parents: e93b32d
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Sep 28 17:21:08 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Sep 28 17:21:08 2014 +0200

----------------------------------------------------------------------
 .../aether/transport/http/HttpTransporterTest.java    | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/dae06159/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
index 0ebe893..b4a38d6 100644
--- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
+++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
@@ -973,7 +973,7 @@ public class HttpTransporterTest
         assertEquals( 1, listener.startedCount );
     }
 
-    @Test( timeout = 10000 )
+    @Test( timeout = 20000 )
     public void testConcurrency()
         throws Exception
     {
@@ -1129,6 +1129,18 @@ public class HttpTransporterTest
     }
 
     @Test
+    public void testServerAuthScope_FollowsSslRedirect()
+        throws Exception
+    {
+        String username = "testuser", password = "testpass";
+        httpServer.setAuthentication( username, password );
+        httpServer.addSslConnector();
+        auth = new AuthenticationBuilder().addUsername( username ).addPassword( password ).build();
+        newTransporter( httpServer.getHttpUrl() );
+        transporter.get( new GetTask( URI.create( "redirect/file.txt?scheme=https" ) ) );
+    }
+
+    @Test
     public void testAuthSchemeReuse()
         throws Exception
     {


[03/50] [abbrv] maven-aether git commit: [maven-release-plugin] prepare for next development iteration

Posted by ol...@apache.org.
[maven-release-plugin] prepare for next development iteration


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/b7fc57c7
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/b7fc57c7
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/b7fc57c7

Branch: refs/heads/master
Commit: b7fc57c7e108fb0fa55710834abd59ff9d423e3d
Parents: e639814
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun May 18 19:54:18 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun May 18 19:54:18 2014 +0200

----------------------------------------------------------------------
 aether-api/pom.xml                 | 2 +-
 aether-connector-basic/pom.xml     | 2 +-
 aether-impl/pom.xml                | 2 +-
 aether-spi/pom.xml                 | 2 +-
 aether-test-util/pom.xml           | 2 +-
 aether-transport-classpath/pom.xml | 2 +-
 aether-transport-file/pom.xml      | 2 +-
 aether-transport-http/pom.xml      | 2 +-
 aether-transport-wagon/pom.xml     | 2 +-
 aether-util/pom.xml                | 2 +-
 pom.xml                            | 2 +-
 11 files changed, 11 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/b7fc57c7/aether-api/pom.xml
----------------------------------------------------------------------
diff --git a/aether-api/pom.xml b/aether-api/pom.xml
index 35dd65b..70b5ae2 100644
--- a/aether-api/pom.xml
+++ b/aether-api/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0.v20140518</version>
+    <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>aether-api</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/b7fc57c7/aether-connector-basic/pom.xml
----------------------------------------------------------------------
diff --git a/aether-connector-basic/pom.xml b/aether-connector-basic/pom.xml
index ee208a8..e5a1f4b 100644
--- a/aether-connector-basic/pom.xml
+++ b/aether-connector-basic/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0.v20140518</version>
+    <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>aether-connector-basic</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/b7fc57c7/aether-impl/pom.xml
----------------------------------------------------------------------
diff --git a/aether-impl/pom.xml b/aether-impl/pom.xml
index 9627aff..2ee0332 100644
--- a/aether-impl/pom.xml
+++ b/aether-impl/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0.v20140518</version>
+    <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>aether-impl</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/b7fc57c7/aether-spi/pom.xml
----------------------------------------------------------------------
diff --git a/aether-spi/pom.xml b/aether-spi/pom.xml
index e9bd9fa..cc4b470 100644
--- a/aether-spi/pom.xml
+++ b/aether-spi/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0.v20140518</version>
+    <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>aether-spi</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/b7fc57c7/aether-test-util/pom.xml
----------------------------------------------------------------------
diff --git a/aether-test-util/pom.xml b/aether-test-util/pom.xml
index 84ec2a4..ff565b9 100644
--- a/aether-test-util/pom.xml
+++ b/aether-test-util/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0.v20140518</version>
+    <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>aether-test-util</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/b7fc57c7/aether-transport-classpath/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-classpath/pom.xml b/aether-transport-classpath/pom.xml
index b980591..395484a 100644
--- a/aether-transport-classpath/pom.xml
+++ b/aether-transport-classpath/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0.v20140518</version>
+    <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>aether-transport-classpath</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/b7fc57c7/aether-transport-file/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-file/pom.xml b/aether-transport-file/pom.xml
index 35bf5b1..dcd50a3 100644
--- a/aether-transport-file/pom.xml
+++ b/aether-transport-file/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0.v20140518</version>
+    <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>aether-transport-file</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/b7fc57c7/aether-transport-http/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-http/pom.xml b/aether-transport-http/pom.xml
index feb9adb..81b0934 100644
--- a/aether-transport-http/pom.xml
+++ b/aether-transport-http/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0.v20140518</version>
+    <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>aether-transport-http</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/b7fc57c7/aether-transport-wagon/pom.xml
----------------------------------------------------------------------
diff --git a/aether-transport-wagon/pom.xml b/aether-transport-wagon/pom.xml
index c021c93..a5b46b2 100644
--- a/aether-transport-wagon/pom.xml
+++ b/aether-transport-wagon/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0.v20140518</version>
+    <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>aether-transport-wagon</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/b7fc57c7/aether-util/pom.xml
----------------------------------------------------------------------
diff --git a/aether-util/pom.xml b/aether-util/pom.xml
index 624f7d4..6414d2d 100644
--- a/aether-util/pom.xml
+++ b/aether-util/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.aether</groupId>
     <artifactId>aether</artifactId>
-    <version>1.0.0.v20140518</version>
+    <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>aether-util</artifactId>

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/b7fc57c7/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 753916b..140b0cd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,7 +16,7 @@
 
   <groupId>org.eclipse.aether</groupId>
   <artifactId>aether</artifactId>
-  <version>1.0.0.v20140518</version>
+  <version>1.1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>Aether</name>


[38/50] [abbrv] maven-aether git commit: Improved compliance with javadoc 8

Posted by ol...@apache.org.
Improved compliance with javadoc 8


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/5341d525
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/5341d525
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/5341d525

Branch: refs/heads/master
Commit: 5341d525c569fe0330ef4f17870d1741c815f91b
Parents: a29e432
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Oct 19 18:01:38 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Oct 19 18:01:38 2014 +0200

----------------------------------------------------------------------
 .../src/main/java/org/eclipse/aether/RepositoryException.java     | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/5341d525/aether-api/src/main/java/org/eclipse/aether/RepositoryException.java
----------------------------------------------------------------------
diff --git a/aether-api/src/main/java/org/eclipse/aether/RepositoryException.java b/aether-api/src/main/java/org/eclipse/aether/RepositoryException.java
index bc66ead..35f0cfd 100644
--- a/aether-api/src/main/java/org/eclipse/aether/RepositoryException.java
+++ b/aether-api/src/main/java/org/eclipse/aether/RepositoryException.java
@@ -41,6 +41,9 @@ public class RepositoryException
 
     /**
      * @noreference This method is not intended to be used by clients.
+     * @param prefix A message prefix for the cause.
+     * @param cause The error cause.
+     * @return The error message for the cause.
      */
     protected static String getMessage( String prefix, Throwable cause )
     {


[27/50] [abbrv] maven-aether git commit: Enabled EOL normalization for text files at the repository level

Posted by ol...@apache.org.
Enabled EOL normalization for text files at the repository level


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/bf49c76d
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/bf49c76d
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/bf49c76d

Branch: refs/heads/master
Commit: bf49c76d3ca5819ef34ec0ca02c1578269c9df18
Parents: 149a522
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Sep 28 15:34:53 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Sep 28 15:34:53 2014 +0200

----------------------------------------------------------------------
 .gitattributes | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/bf49c76d/.gitattributes
----------------------------------------------------------------------
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..cc9347e
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+*        text=auto


[35/50] [abbrv] maven-aether git commit: Bug 447810 - Make ConfigUtils.getString() recognize booleans and numbers as valid values

Posted by ol...@apache.org.
Bug 447810 - Make ConfigUtils.getString() recognize booleans and numbers as valid values


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/32267bff
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/32267bff
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/32267bff

Branch: refs/heads/master
Commit: 32267bff2a22be45fc94f7854d36a275a224e49c
Parents: 0db0dcc
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Oct 19 16:08:11 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Oct 19 16:08:11 2014 +0200

----------------------------------------------------------------------
 .../org/eclipse/aether/util/ConfigUtils.java    | 12 ++++++------
 .../eclipse/aether/util/ConfigUtilsTest.java    | 20 +++++++++++++++++++-
 2 files changed, 25 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/32267bff/aether-util/src/main/java/org/eclipse/aether/util/ConfigUtils.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/ConfigUtils.java b/aether-util/src/main/java/org/eclipse/aether/util/ConfigUtils.java
index 1f52a76..2bcd958 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/ConfigUtils.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/ConfigUtils.java
@@ -74,8 +74,8 @@ public final class ConfigUtils
      * Gets the specified configuration property as a string value.
      * 
      * @param properties The configuration properties to read, must not be {@code null}.
-     * @param defaultValue The default value to return in case none of the property keys is set to a string, may be
-     *            {@code null}.
+     * @param defaultValue The default value to return in case none of the property keys is set to a
+     *            string/boolean/number, may be {@code null}.
      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
      *            a string value is found.
      * @return The property value or {@code null} if none.
@@ -86,9 +86,9 @@ public final class ConfigUtils
         {
             Object value = properties.get( key );
 
-            if ( value instanceof String )
+            if ( value instanceof String || value instanceof Boolean || value instanceof Number )
             {
-                return (String) value;
+                return value.toString();
             }
         }
 
@@ -100,8 +100,8 @@ public final class ConfigUtils
      * 
      * @param session The repository system session from which to read the configuration property, must not be
      *            {@code null}.
-     * @param defaultValue The default value to return in case none of the property keys is set to a string, may be
-     *            {@code null}.
+     * @param defaultValue The default value to return in case none of the property keys is set to a
+     *            string/boolean/number, may be {@code null}.
      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
      *            a string value is found.
      * @return The property value or {@code null} if none.

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/32267bff/aether-util/src/test/java/org/eclipse/aether/util/ConfigUtilsTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/ConfigUtilsTest.java b/aether-util/src/test/java/org/eclipse/aether/util/ConfigUtilsTest.java
index 6be0476..8bd1147 100644
--- a/aether-util/src/test/java/org/eclipse/aether/util/ConfigUtilsTest.java
+++ b/aether-util/src/test/java/org/eclipse/aether/util/ConfigUtilsTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 Sonatype, Inc.
+ * Copyright (c) 2013, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -97,6 +97,24 @@ public class ConfigUtilsTest
     }
 
     @Test
+    public void testGetString_BooleanConversion()
+    {
+        config.put( "some-string", Boolean.TRUE );
+        assertEquals( "true", ConfigUtils.getString( config, "default", "some-string" ) );
+        config.put( "some-string", Boolean.FALSE );
+        assertEquals( "false", ConfigUtils.getString( config, "default", "some-string" ) );
+    }
+
+    @Test
+    public void testGetString_NumberConversion()
+    {
+        config.put( "some-string", Integer.valueOf( -7 ) );
+        assertEquals( "-7", ConfigUtils.getString( config, "default", "some-string" ) );
+        config.put( "some-string", new Float( -1.5f ) );
+        assertEquals( "-1.5", ConfigUtils.getString( config, "default", "some-string" ) );
+    }
+
+    @Test
     public void testGetBoolean_Default()
     {
         config.put( "no-boolean", new Object() );


[21/50] [abbrv] maven-aether git commit: Extended HttpServer with customizable server response header

Posted by ol...@apache.org.
Extended HttpServer with customizable server response header


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/6ac187b2
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/6ac187b2
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/6ac187b2

Branch: refs/heads/master
Commit: 6ac187b260ef6fcd795dc120f0392d0a6e649adc
Parents: d252910
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Fri Aug 29 17:48:25 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Fri Aug 29 17:48:25 2014 +0200

----------------------------------------------------------------------
 .../aether/transport/http/HttpServer.java       | 21 ++++++++++++++++++++
 1 file changed, 21 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6ac187b2/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
index 5fee786..a0f6a54 100644
--- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
+++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpServer.java
@@ -84,6 +84,8 @@ public class HttpServer
 
     private static final Logger log = LoggerFactory.getLogger( HttpServer.class );
 
+    private String serverHeader = "Dummy";
+
     private File repoDir;
 
     private boolean rangeSupport = true;
@@ -166,6 +168,12 @@ public class HttpServer
         return logEntries;
     }
 
+    public HttpServer setServer( String server )
+    {
+        this.serverHeader = server;
+        return this;
+    }
+
     public HttpServer setRepoDir( File repoDir )
     {
         this.repoDir = repoDir;
@@ -227,6 +235,7 @@ public class HttpServer
         httpConnector = new SelectChannelConnector();
 
         HandlerList handlers = new HandlerList();
+        handlers.addHandler( new CommonHandler() );
         handlers.addHandler( new LogHandler() );
         handlers.addHandler( new ProxyAuthHandler() );
         handlers.addHandler( new AuthHandler() );
@@ -253,6 +262,18 @@ public class HttpServer
         }
     }
 
+    private class CommonHandler
+        extends AbstractHandler
+    {
+
+        public void handle( String target, Request req, HttpServletRequest request, HttpServletResponse response )
+            throws IOException
+        {
+            response.setHeader( HttpHeaders.SERVER, serverHeader );
+        }
+
+    }
+
     private class LogHandler
         extends AbstractHandler
     {


[13/50] [abbrv] maven-aether git commit: Added tests for DefaultMirrorSelector

Posted by ol...@apache.org.
Added tests for DefaultMirrorSelector


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/db2202c5
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/db2202c5
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/db2202c5

Branch: refs/heads/master
Commit: db2202c5b947a6d3033bdb334e04469f67fd005f
Parents: 6ef2c6e
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat May 31 16:47:35 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat May 31 16:47:35 2014 +0200

----------------------------------------------------------------------
 .../repository/DefaultMirrorSelectorTest.java   | 165 +++++++++++++++++++
 1 file changed, 165 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/db2202c5/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultMirrorSelectorTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultMirrorSelectorTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultMirrorSelectorTest.java
new file mode 100644
index 0000000..b73c812
--- /dev/null
+++ b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultMirrorSelectorTest.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Sonatype, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Sonatype, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.aether.util.repository;
+
+import static org.junit.Assert.*;
+
+import java.util.Arrays;
+
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.util.repository.DefaultMirrorSelector.*;
+import org.junit.Test;
+
+/**
+ */
+public class DefaultMirrorSelectorTest
+{
+
+    private RemoteRepository newRepo( String id, String type, String url )
+    {
+        return new RemoteRepository.Builder( id, type, url ).build();
+    }
+
+    private static boolean matchesType( String repoType, String mirrorType )
+    {
+        return new TypeMatcher( DefaultMirrorSelector.split( mirrorType ) ).isMatch( repoType );
+    }
+
+    private boolean matchesPattern( RemoteRepository repository, String pattern )
+    {
+        return new IdMatcher( DefaultMirrorSelector.split( pattern ) ).isMatch( repository );
+    }
+
+    private static boolean isExternalRepo( RemoteRepository repository )
+    {
+        return IdMatcher.isExternalRepo( repository );
+    }
+
+    @Test
+    public void testIsExternalRepo()
+    {
+        assertEquals( false, isExternalRepo( newRepo( "", "", "http://localhost/path" ) ) );
+        assertEquals( false, isExternalRepo( newRepo( "", "", "http://127.0.0.1/path" ) ) );
+        assertEquals( false, isExternalRepo( newRepo( "", "", "file:/path" ) ) );
+        assertEquals( true, isExternalRepo( newRepo( "", "", "http://eclipse.org/" ) ) );
+        assertEquals( true, isExternalRepo( newRepo( "", "", "" ) ) );
+    }
+
+    @Test
+    public void testMatchesType()
+    {
+        assertEquals( true, matchesType( null, null ) );
+        assertEquals( true, matchesType( "any", null ) );
+        assertEquals( true, matchesType( "any", "" ) );
+        assertEquals( true, matchesType( "any", "*" ) );
+
+        assertEquals( false, matchesType( null, "default" ) );
+        assertEquals( false, matchesType( "", "default" ) );
+        assertEquals( false, matchesType( "any", "default" ) );
+
+        assertEquals( true, matchesType( "default", "default" ) );
+
+        assertEquals( false, matchesType( "default", "DEFAULT" ) );
+        assertEquals( false, matchesType( "DEFAULT", "default" ) );
+
+        assertEquals( true, matchesType( "default", "default,foo" ) );
+        assertEquals( true, matchesType( "default", "foo,default" ) );
+
+        assertEquals( true, matchesType( "default", "*,foo" ) );
+        assertEquals( true, matchesType( "default", "foo,*" ) );
+
+        assertEquals( false, matchesType( "p2", "*,!p2" ) );
+        assertEquals( false, matchesType( "p2", "!p2,*" ) );
+    }
+
+    @Test
+    public void testMatchesPattern()
+    {
+        assertEquals( false, matchesPattern( newRepo( "id", "type", "url" ), null ) );
+        assertEquals( false, matchesPattern( newRepo( "id", "type", "url" ), "" ) );
+        assertEquals( false, matchesPattern( newRepo( "id", "type", "url" ), "central" ) );
+
+        assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "central" ) );
+
+        assertEquals( false, matchesPattern( newRepo( "central", "type", "url" ), "CENTRAL" ) );
+        assertEquals( false, matchesPattern( newRepo( "CENTRAL", "type", "url" ), "central" ) );
+
+        assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "central,foo" ) );
+        assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "foo,central" ) );
+
+        assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "*,foo" ) );
+        assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "foo,*" ) );
+
+        assertEquals( false, matchesPattern( newRepo( "central", "type", "url" ), "*,!central" ) );
+        assertEquals( false, matchesPattern( newRepo( "central", "type", "url" ), "!central,*" ) );
+    }
+
+    @Test
+    public void testGetMirror_FirstMatchWins()
+    {
+        DefaultMirrorSelector selector = new DefaultMirrorSelector();
+        selector.add( "mirror1", "http://host1", "default", false, "*", "*" );
+        selector.add( "mirror2", "http://host2", "default", false, "*", "*" );
+        RemoteRepository mirror = selector.getMirror( newRepo( "central", "default", "http://localhost" ) );
+        assertNotNull( mirror );
+        assertEquals( "mirror1", mirror.getId() );
+        assertEquals( "http://host1", mirror.getUrl() );
+    }
+
+    @Test
+    public void testGetMirror_ExactMatchWins()
+    {
+        DefaultMirrorSelector selector = new DefaultMirrorSelector();
+        selector.add( "mirror1", "http://host1", "default", false, "*", "*" );
+        selector.add( "mirror2", "http://host2", "default", false, "central", "*" );
+        selector.add( "mirror3", "http://host3", "default", false, "*", "*" );
+        RemoteRepository mirror = selector.getMirror( newRepo( "central", "default", "http://localhost" ) );
+        assertNotNull( mirror );
+        assertEquals( "mirror2", mirror.getId() );
+        assertEquals( "http://host2", mirror.getUrl() );
+    }
+
+    @Test
+    public void testGetMirror_WithoutMirrorLayout()
+    {
+        DefaultMirrorSelector selector = new DefaultMirrorSelector();
+        selector.add( "mirror", "http://host", "", false, "*", "*" );
+        RemoteRepository mirror = selector.getMirror( newRepo( "central", "default", "http://localhost" ) );
+        assertNotNull( mirror );
+        assertEquals( "mirror", mirror.getId() );
+        assertEquals( "http://host", mirror.getUrl() );
+        assertEquals( "default", mirror.getContentType() );
+    }
+
+    @Test
+    public void testGetMirror_WithMirrorLayout()
+    {
+        DefaultMirrorSelector selector = new DefaultMirrorSelector();
+        selector.add( "mirror", "http://host", "layout", false, "*", "*" );
+        RemoteRepository mirror = selector.getMirror( newRepo( "central", "default", "http://localhost" ) );
+        assertNotNull( mirror );
+        assertEquals( "mirror", mirror.getId() );
+        assertEquals( "http://host", mirror.getUrl() );
+        assertEquals( "layout", mirror.getContentType() );
+    }
+
+    @Test
+    public void testGetMirror_MirroredRepos()
+    {
+        DefaultMirrorSelector selector = new DefaultMirrorSelector();
+        selector.add( "mirror", "http://host", "layout", false, "*", "*" );
+        RemoteRepository repo = newRepo( "central", "default", "http://localhost" );
+        RemoteRepository mirror = selector.getMirror( repo );
+        assertNotNull( mirror );
+        assertEquals( Arrays.asList( repo ), mirror.getMirroredRepositories() );
+    }
+
+}


[15/50] [abbrv] maven-aether git commit: Bug 436290 - Trim whitespace from id/type list strings in DefaultMirrorSelector

Posted by ol...@apache.org.
Bug 436290 - Trim whitespace from id/type list strings in DefaultMirrorSelector


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/93310af9
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/93310af9
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/93310af9

Branch: refs/heads/master
Commit: 93310af9fbeee588555148145ee3c5f560a3bb34
Parents: c9aeca7
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat May 31 17:20:09 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat May 31 17:20:09 2014 +0200

----------------------------------------------------------------------
 .../util/repository/DefaultMirrorSelector.java  | 12 ++++++------
 .../repository/DefaultMirrorSelectorTest.java   | 20 ++++++++++++++++++++
 2 files changed, 26 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/93310af9/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
index b5ad2b2..a0f9a3b 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
@@ -40,12 +40,12 @@ public final class DefaultMirrorSelector
      * @param type The content type of the mirror, may be {@code null}.
      * @param repositoryManager A flag whether the mirror is a repository manager or a simple server.
      * @param mirrorOfIds The identifier(s) of remote repositories to mirror, may be {@code null}. Multiple identifiers
-     *            can be separated by comma (',') and additionally the wildcards "*" and "external:*" can be used to
-     *            match all (external) repositories, prefixing a repo id with an exclamation mark allows to express an
-     *            exclusion. For example "external:*,!central".
+     *            can be separated by comma (',') and surrounding whitespace is trimmed. Additionally the wildcards "*"
+     *            and "external:*" can be used to match all (external) repositories, prefixing a repo id with an
+     *            exclamation mark allows to express an exclusion. For example "external:*,!central".
      * @param mirrorOfTypes The content type(s) of remote repositories to mirror, may be {@code null} or empty to match
-     *            any content type. Multiple types can be separated by comma (','), the wildcard "*" and the "!"
-     *            negation syntax are also supported. For example "*,!p2".
+     *            any content type. Multiple types can be separated by comma (',') and surrounding whitespace is
+     *            trimmed. The wildcard "*" and the "!" negation syntax are also supported. For example "*,!p2".
      * @return This selector for chaining, never {@code null}.
      */
     public DefaultMirrorSelector add( String id, String url, String type, boolean repositoryManager,
@@ -137,7 +137,7 @@ public final class DefaultMirrorSelector
         List<String> tokens = null;
         if ( list != null )
         {
-            tokens = Arrays.asList( list.split( "," ) );
+            tokens = Arrays.asList( list.trim().split( "\\s*,\\s*" ) );
         }
         return tokens;
     }

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/93310af9/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultMirrorSelectorTest.java
----------------------------------------------------------------------
diff --git a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultMirrorSelectorTest.java b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultMirrorSelectorTest.java
index b73c812..fd5aea4 100644
--- a/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultMirrorSelectorTest.java
+++ b/aether-util/src/test/java/org/eclipse/aether/util/repository/DefaultMirrorSelectorTest.java
@@ -81,6 +81,16 @@ public class DefaultMirrorSelectorTest
     }
 
     @Test
+    public void testMatchesType_Trimming()
+    {
+        assertEquals( true, matchesType( "any", " " ) );
+        assertEquals( true, matchesType( "default", " default " ) );
+        assertEquals( true, matchesType( "default", "foo, default ,bar" ) );
+        assertEquals( true, matchesType( "default", " default ,bar" ) );
+        assertEquals( true, matchesType( "default", "foo, default " ) );
+    }
+
+    @Test
     public void testMatchesPattern()
     {
         assertEquals( false, matchesPattern( newRepo( "id", "type", "url" ), null ) );
@@ -103,6 +113,16 @@ public class DefaultMirrorSelectorTest
     }
 
     @Test
+    public void testMatchesPattern_Trimming()
+    {
+        assertEquals( false, matchesPattern( newRepo( "central", "type", "url" ), " " ) );
+        assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), " central " ) );
+        assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "foo, central ,bar" ) );
+        assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), " central ,bar" ) );
+        assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "foo, central " ) );
+    }
+
+    @Test
     public void testGetMirror_FirstMatchWins()
     {
         DefaultMirrorSelector selector = new DefaultMirrorSelector();


[44/50] [abbrv] maven-aether git commit: Updated timeout test to account for changed exception generation in httpclient:4.3.x (cf. HTTPCLIENT-1362)

Posted by ol...@apache.org.
Updated timeout test to account for changed exception generation in httpclient:4.3.x (cf. HTTPCLIENT-1362)


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/57c56f92
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/57c56f92
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/57c56f92

Branch: refs/heads/master
Commit: 57c56f92b8faca575562b0887fd9711a4097e4cc
Parents: e171c21
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Mon Nov 10 23:24:46 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Mon Nov 10 23:24:46 2014 +0100

----------------------------------------------------------------------
 .../org/eclipse/aether/transport/http/HttpTransporterTest.java   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/57c56f92/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
index 50d4fee..50e4e8b 100644
--- a/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
+++ b/aether-transport-http/src/test/java/org/eclipse/aether/transport/http/HttpTransporterTest.java
@@ -14,6 +14,7 @@ import static org.junit.Assert.*;
 
 import java.io.File;
 import java.io.FileNotFoundException;
+import java.net.ConnectException;
 import java.net.ServerSocket;
 import java.net.SocketTimeoutException;
 import java.net.URI;
@@ -23,7 +24,6 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.http.client.HttpResponseException;
 import org.apache.http.conn.ConnectTimeoutException;
-import org.apache.http.conn.HttpHostConnectException;
 import org.apache.http.pool.ConnPoolControl;
 import org.apache.http.pool.PoolStats;
 import org.eclipse.aether.ConfigurationProperties;
@@ -1033,7 +1033,7 @@ public class HttpTransporterTest
         {
             assertEquals( Transporter.ERROR_OTHER, transporter.classify( e ) );
         }
-        catch ( HttpHostConnectException e )
+        catch ( ConnectException e )
         {
             assertEquals( Transporter.ERROR_OTHER, transporter.classify( e ) );
         }


[17/50] [abbrv] maven-aether git commit: Simplified code

Posted by ol...@apache.org.
Simplified code


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/cbcde593
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/cbcde593
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/cbcde593

Branch: refs/heads/master
Commit: cbcde59357d3dbce018bc5596a92f854ca7226d9
Parents: c2b1c3d
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat Jun 21 21:26:27 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat Jun 21 21:26:27 2014 +0200

----------------------------------------------------------------------
 .../eclipse/aether/internal/impl/DataPool.java  | 35 +++++---------------
 .../impl/DefaultDependencyCollector.java        |  2 +-
 .../aether/internal/impl/ObjectPool.java        | 20 ++++++-----
 3 files changed, 20 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/cbcde593/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DataPool.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DataPool.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DataPool.java
index 545aa49..3da5e60 100644
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DataPool.java
+++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DataPool.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,18 +41,14 @@ import org.eclipse.aether.version.VersionConstraint;
 final class DataPool
 {
 
-    private static final String ARTIFACT_POOL = DataPool.class.getName() + "$Artifact";
-
-    private static final String DEPENDENCY_POOL = DataPool.class.getName() + "$Dependency";
+    private static final String OBJECT_POOL = DataPool.class.getName() + "$Objects";
 
     private static final String DESCRIPTORS = DataPool.class.getName() + "$Descriptors";
 
     public static final ArtifactDescriptorResult NO_DESCRIPTOR =
         new ArtifactDescriptorResult( new ArtifactDescriptorRequest() );
 
-    private ObjectPool<Artifact> artifacts;
-
-    private ObjectPool<Dependency> dependencies;
+    private ObjectPool objectPool;
 
     private Map<Object, Descriptor> descriptors;
 
@@ -67,26 +63,16 @@ final class DataPool
 
         if ( cache != null )
         {
-            artifacts = (ObjectPool<Artifact>) cache.get( session, ARTIFACT_POOL );
-            dependencies = (ObjectPool<Dependency>) cache.get( session, DEPENDENCY_POOL );
+            objectPool = (ObjectPool) cache.get( session, OBJECT_POOL );
             descriptors = (Map<Object, Descriptor>) cache.get( session, DESCRIPTORS );
         }
 
-        if ( artifacts == null )
+        if ( objectPool == null )
         {
-            artifacts = new ObjectPool<Artifact>();
+            objectPool = new ObjectPool();
             if ( cache != null )
             {
-                cache.put( session, ARTIFACT_POOL, artifacts );
-            }
-        }
-
-        if ( dependencies == null )
-        {
-            dependencies = new ObjectPool<Dependency>();
-            if ( cache != null )
-            {
-                cache.put( session, DEPENDENCY_POOL, dependencies );
+                cache.put( session, OBJECT_POOL, objectPool );
             }
         }
 
@@ -100,14 +86,9 @@ final class DataPool
         }
     }
 
-    public Artifact intern( Artifact artifact )
-    {
-        return artifacts.intern( artifact );
-    }
-
     public Dependency intern( Dependency dependency )
     {
-        return dependencies.intern( dependency );
+        return objectPool.intern( dependency );
     }
 
     public Object toKey( ArtifactDescriptorRequest request )

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/cbcde593/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
index 404897c..28770c1 100644
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
+++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultDependencyCollector.java
@@ -441,7 +441,7 @@ public class DefaultDependencyCollector
                 }
                 else
                 {
-                    d = args.pool.intern( d.setArtifact( args.pool.intern( d.getArtifact() ) ) );
+                    d = args.pool.intern( d );
 
                     List<RemoteRepository> repos =
                         getRemoteRepositories( rangeResult.getRepository( version ), repositories );

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/cbcde593/aether-impl/src/main/java/org/eclipse/aether/internal/impl/ObjectPool.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/ObjectPool.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/ObjectPool.java
index acbf055..bdf0909 100644
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/ObjectPool.java
+++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/ObjectPool.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 Sonatype, Inc.
+ * Copyright (c) 2010, 2014 Sonatype, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,29 +15,31 @@ import java.lang.ref.WeakReference;
 import java.util.Map;
 import java.util.WeakHashMap;
 
+import org.eclipse.aether.graph.Dependency;
+
 /**
  * Pool of immutable object instances, used to avoid excessive memory consumption of (dirty) dependency graph which
  * tends to have many duplicate artifacts/dependencies.
  */
-class ObjectPool<T>
+final class ObjectPool
 {
 
-    private final Map<Object, Reference<T>> objects = new WeakHashMap<Object, Reference<T>>( 256 );
+    private final Map<Object, Reference<Dependency>> dependencies =
+        new WeakHashMap<Object, Reference<Dependency>>( 256 );
 
-    public synchronized T intern( T object )
+    public synchronized Dependency intern( Dependency dependency )
     {
-        Reference<T> pooledRef = objects.get( object );
+        Reference<Dependency> pooledRef = dependencies.get( dependency );
         if ( pooledRef != null )
         {
-            T pooled = pooledRef.get();
+            Dependency pooled = pooledRef.get();
             if ( pooled != null )
             {
                 return pooled;
             }
         }
-
-        objects.put( object, new WeakReference<T>( object ) );
-        return object;
+        dependencies.put( dependency, new WeakReference<Dependency>( dependency ) );
+        return dependency;
     }
 
 }


[47/50] [abbrv] maven-aether git commit: Bug 451566 - DefaultRepositorySystem.resolveDependencies() fails with NPE when dependency collection fails early and yields not even a root node

Posted by ol...@apache.org.
Bug 451566 - DefaultRepositorySystem.resolveDependencies() fails with NPE when dependency collection fails early and yields not even a root node

Skipped artifact resolution step if dependency collection didn't yield any nodes and allowed underlying exception from collector to bubble up


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/ab199198
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/ab199198
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/ab199198

Branch: refs/heads/master
Commit: ab19919869fb90be10e2904c6e01851d0b12dfef
Parents: 1cbc81d
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Nov 16 22:02:02 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Nov 16 22:02:02 2014 +0100

----------------------------------------------------------------------
 .../internal/impl/DefaultRepositorySystem.java  | 49 +++++++++++---------
 .../impl/DefaultRepositorySystemTest.java       | 34 ++++++++++++++
 2 files changed, 62 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/ab199198/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java
index 8882814..f15683f 100644
--- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java
+++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRepositorySystem.java
@@ -345,35 +345,42 @@ public class DefaultRepositorySystem
                 dce = e;
                 collectResult = e.getResult();
             }
-            result.setRoot( collectResult.getRoot() );
-            result.setCycles( collectResult.getCycles() );
-            result.setCollectExceptions( collectResult.getExceptions() );
+            if ( collectResult != null )
+            {
+                result.setRoot( collectResult.getRoot() );
+                result.setCycles( collectResult.getCycles() );
+                result.setCollectExceptions( collectResult.getExceptions() );
+            }
         }
         else
         {
             throw new IllegalArgumentException( "dependency node or collect request missing" );
         }
 
-        ArtifactRequestBuilder builder = new ArtifactRequestBuilder( trace );
-        DependencyFilter filter = request.getFilter();
-        DependencyVisitor visitor = ( filter != null ) ? new FilteringDependencyVisitor( builder, filter ) : builder;
-        visitor = new TreeDependencyVisitor( visitor );
-        result.getRoot().accept( visitor );
-        List<ArtifactRequest> requests = builder.getRequests();
-
-        List<ArtifactResult> results;
-        try
+        if ( result.getRoot() != null )
         {
-            results = artifactResolver.resolveArtifacts( session, requests );
-        }
-        catch ( ArtifactResolutionException e )
-        {
-            are = e;
-            results = e.getResults();
-        }
-        result.setArtifactResults( results );
+            ArtifactRequestBuilder builder = new ArtifactRequestBuilder( trace );
+            DependencyFilter filter = request.getFilter();
+            DependencyVisitor visitor =
+                ( filter != null ) ? new FilteringDependencyVisitor( builder, filter ) : builder;
+            visitor = new TreeDependencyVisitor( visitor );
+            result.getRoot().accept( visitor );
+
+            List<ArtifactResult> results;
+            try
+            {
+                List<ArtifactRequest> requests = builder.getRequests();
+                results = artifactResolver.resolveArtifacts( session, requests );
+            }
+            catch ( ArtifactResolutionException e )
+            {
+                are = e;
+                results = e.getResults();
+            }
+            result.setArtifactResults( results );
 
-        updateNodesWithResolvedArtifacts( results );
+            updateNodesWithResolvedArtifacts( results );
+        }
 
         if ( dce != null )
         {

http://git-wip-us.apache.org/repos/asf/maven-aether/blob/ab199198/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java
----------------------------------------------------------------------
diff --git a/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java b/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java
index 2cdb035..9a0b609 100644
--- a/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java
+++ b/aether-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultRepositorySystemTest.java
@@ -16,10 +16,19 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.collection.CollectRequest;
+import org.eclipse.aether.collection.CollectResult;
+import org.eclipse.aether.collection.DependencyCollectionException;
+import org.eclipse.aether.graph.Dependency;
+import org.eclipse.aether.impl.DependencyCollector;
 import org.eclipse.aether.internal.test.util.TestUtils;
 import org.eclipse.aether.repository.Authentication;
 import org.eclipse.aether.repository.Proxy;
 import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.DependencyRequest;
+import org.eclipse.aether.resolution.DependencyResolutionException;
 import org.eclipse.aether.util.repository.AuthenticationBuilder;
 import org.eclipse.aether.util.repository.DefaultAuthenticationSelector;
 import org.eclipse.aether.util.repository.DefaultMirrorSelector;
@@ -103,4 +112,29 @@ public class DefaultRepositorySystemTest
         assertSame( auth, deployRepo.getAuthentication() );
     }
 
+    @Test
+    public void testResolveDependencies_NoRootNode()
+        throws Exception
+    {
+        DependencyRequest request = new DependencyRequest();
+        request.setCollectRequest( new CollectRequest().setRoot( new Dependency( new DefaultArtifact( "g:a:v" ), "" ) ) );
+        system.setDependencyCollector( new DependencyCollector()
+        {
+            public CollectResult collectDependencies( RepositorySystemSession session, CollectRequest request )
+                throws DependencyCollectionException
+            {
+                throw new DependencyCollectionException( null );
+            }
+        } );
+        try
+        {
+            system.resolveDependencies( session, request );
+            fail( "Expected exception" );
+        }
+        catch ( DependencyResolutionException e )
+        {
+            assertTrue( e.getCause() instanceof DependencyCollectionException );
+        }
+    }
+
 }


[14/50] [abbrv] maven-aether git commit: Bug 436288 - Add overload to DefaultMirrorSelector.add() that accepts already splitted ids/types

Posted by ol...@apache.org.
Bug 436288 - Add overload to DefaultMirrorSelector.add() that accepts already splitted ids/types

Introduced add(String, String, String, boolean, Collection<String>, Collection<String>) to DefaultMirrorSelector


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/c9aeca7c
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/c9aeca7c
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/c9aeca7c

Branch: refs/heads/master
Commit: c9aeca7c2ff344e036e5f1c88f2f499bda98d667
Parents: db2202c
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sat May 31 16:58:19 2014 +0200
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sat May 31 16:58:19 2014 +0200

----------------------------------------------------------------------
 .../util/repository/DefaultMirrorSelector.java  | 24 +++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/c9aeca7c/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
----------------------------------------------------------------------
diff --git a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
index 168ff52..b5ad2b2 100644
--- a/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
+++ b/aether-util/src/main/java/org/eclipse/aether/util/repository/DefaultMirrorSelector.java
@@ -51,7 +51,29 @@ public final class DefaultMirrorSelector
     public DefaultMirrorSelector add( String id, String url, String type, boolean repositoryManager,
                                       String mirrorOfIds, String mirrorOfTypes )
     {
-        mirrors.add( new MirrorDef( id, url, type, repositoryManager, split( mirrorOfIds ), split( mirrorOfTypes ) ) );
+        return add( id, url, type, repositoryManager, split( mirrorOfIds ), split( mirrorOfTypes ) );
+    }
+
+    /**
+     * Adds the specified mirror to this selector.
+     * 
+     * @param id The identifier of the mirror, may be {@code null}.
+     * @param url The URL of the mirror, may be {@code null}.
+     * @param type The content type of the mirror, may be {@code null}.
+     * @param repositoryManager A flag whether the mirror is a repository manager or a simple server.
+     * @param mirrorOfIds The identifier(s) of remote repositories to mirror, may be {@code null}. The wildcards "*" and
+     *            "external:*" can be used to match all (external) repositories, prefixing a repo id with an exclamation
+     *            mark allows to express an exclusion. For example "external:*", "!central".
+     * @param mirrorOfTypes The content type(s) of remote repositories to mirror, may be {@code null} or empty to match
+     *            any content type. The wildcard "*" and the "!" negation syntax are also supported. For example "*",
+     *            "!p2".
+     * @return This selector for chaining, never {@code null}.
+     * @since 1.1.0
+     */
+    public DefaultMirrorSelector add( String id, String url, String type, boolean repositoryManager,
+                                      Collection<String> mirrorOfIds, Collection<String> mirrorOfTypes )
+    {
+        mirrors.add( new MirrorDef( id, url, type, repositoryManager, mirrorOfIds, mirrorOfTypes ) );
 
         return this;
     }


[48/50] [abbrv] maven-aether git commit: Silended HTTP wire logging during tests

Posted by ol...@apache.org.
Silended HTTP wire logging during tests


Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/6f1e141e
Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/6f1e141e
Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/6f1e141e

Branch: refs/heads/master
Commit: 6f1e141e10bd010ffd303c3e2710c17460777f1f
Parents: ab19919
Author: Benjamin Bentmann <be...@sonatype.com>
Authored: Sun Nov 23 16:06:22 2014 +0100
Committer: Benjamin Bentmann <be...@sonatype.com>
Committed: Sun Nov 23 16:06:22 2014 +0100

----------------------------------------------------------------------
 aether-transport-http/src/test/resources/logback.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-aether/blob/6f1e141e/aether-transport-http/src/test/resources/logback.xml
----------------------------------------------------------------------
diff --git a/aether-transport-http/src/test/resources/logback.xml b/aether-transport-http/src/test/resources/logback.xml
index c8ce3dd..9d56c3d 100644
--- a/aether-transport-http/src/test/resources/logback.xml
+++ b/aether-transport-http/src/test/resources/logback.xml
@@ -22,6 +22,6 @@
     <appender-ref ref="STDOUT" />
   </root>
 
-  <logger name="org.apache.http.wire" level="DEBUG" />
+  <logger name="org.apache.http.wire" level="INFO" />
   <logger name="org.eclipse.jetty" level="INFO" />
 </configuration>