Bug 512006: respect nonProxyHosts setting when fetching indexes

Change-Id: Id7597424219c0037eac4cc33190c9706a940df6d
Signed-off-by: Fred Bricon <fbricon@gmail.com>
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/AetherClientResourceFetcher.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/AetherClientResourceFetcher.java
index 64e1fb7..c549248 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/AetherClientResourceFetcher.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/AetherClientResourceFetcher.java
@@ -20,6 +20,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.security.NoSuchAlgorithmException;
 import java.util.HashMap;
 import java.util.Map;
@@ -36,6 +38,7 @@
 import org.apache.maven.index.updater.AbstractResourceFetcher;
 import org.apache.maven.wagon.authentication.AuthenticationInfo;
 import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.proxy.ProxyUtils;
 
 import org.eclipse.m2e.core.internal.MavenPluginActivator;
 import org.eclipse.m2e.core.internal.Messages;
@@ -70,10 +73,11 @@
     this.userAgent = MavenPluginActivator.getUserAgent();
   }
 
-  public void connect(String id, String url) throws IOException {
-    aetherClient = new OkHttpAetherClient(new AetherClientConfigAdapter(authInfo, proxyInfo, userAgent,
-        new HashMap<String, String>()));
+  public void connect(String id, String url) {
     this.baseUrl = url;
+    aetherClient = new OkHttpAetherClient(
+        new AetherClientConfigAdapter(baseUrl, authInfo, proxyInfo, userAgent,
+        new HashMap<String, String>()));
   }
 
   public void disconnect() throws IOException {
@@ -110,10 +114,13 @@
 
     String userAgent;
 
+    String baseUrl;
+
     Map<String, String> headers;
 
-    public AetherClientConfigAdapter(AuthenticationInfo authInfo, ProxyInfo proxyInfo, String userAgent,
+    public AetherClientConfigAdapter(String baseUrl, AuthenticationInfo authInfo, ProxyInfo proxyInfo, String userAgent,
         Map<String, String> headers) {
+      this.baseUrl = baseUrl;
       this.authInfo = authInfo;
       this.proxyInfo = proxyInfo;
       this.userAgent = userAgent;
@@ -144,6 +151,13 @@
       if(proxyInfo == null) {
         return null;
       }
+      //Bug 512006 don't return the proxy for nonProxyHosts 
+      try {
+        if(ProxyUtils.validateNonProxyHosts(proxyInfo, new URL(baseUrl).getHost())) {
+          return null;
+        }
+      } catch(MalformedURLException ignore) {
+      }
 
       return new AetherClientProxy() {