extract interfaces to improve testability
[teamcity/dotNetPackagesSupport.git] / nuget-server / src / jetbrains / buildServer / nuget / server / feed / reader / impl / UrlResolver.java
index 597676767b5ea044afe109a609b976ef7e6e6cfe..3aac7c677c131f2e880c2607b87492776a4f6557 100644 (file)
 package jetbrains.buildServer.nuget.server.feed.reader.impl;\r
 \r
 import com.intellij.openapi.util.Pair;\r
-import org.apache.http.Header;\r
 import org.apache.http.HttpResponse;\r
-import org.apache.http.HttpStatus;\r
-import org.apache.http.client.methods.HttpGet;\r
-import org.apache.http.client.params.ClientPNames;\r
 import org.jetbrains.annotations.NotNull;\r
 \r
 import java.io.IOException;\r
 \r
 /**\r
  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
- * Date: 12.08.11 10:24\r
+ * Date: 12.08.11 15:15\r
  */\r
-public class UrlResolver {\r
-  private final FeedClient myClient;\r
-  private final FeedGetMethodFactory myMethods;\r
-\r
-  public UrlResolver(@NotNull final FeedClient client,\r
-                     @NotNull final FeedGetMethodFactory methods) {\r
-    myClient = client;\r
-    myMethods = methods;\r
-  }\r
-\r
-  /**\r
-   * Generates GET request to a given URL.\r
-   * If HTTP Status 3xx is returned, Location header is\r
-   * used to generate next request unless non 3xx status\r
-   * is returned\r
-   * @param feedUrl url to ping and resolve\r
-   * @return resolved URL and HttpResponse\r
-   * @throws IOException if failed to communicate or non 3xx or 200 status returned\r
-   */\r
+public interface UrlResolver {\r
   @NotNull\r
-  public Pair<String, HttpResponse> resolvePath(@NotNull String feedUrl) throws IOException {\r
-    for(int _ = 100; _-->0;) {\r
-      HttpGet ping = myMethods.createGet(feedUrl);\r
-      ping.getParams().setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, false);\r
-\r
-      final HttpResponse execute = myClient.getClient().execute(ping);\r
-      final int statusCode = execute.getStatusLine().getStatusCode();\r
-      if (statusCode / 100 == 3) {\r
-        final Header location = execute.getFirstHeader("Location");\r
-        if (location != null) {\r
-          feedUrl = location.getValue();\r
-          continue;\r
-        }\r
-      }\r
-\r
-      if (statusCode != HttpStatus.SC_OK) {\r
-        throw new IOException("Failed to connect to " + feedUrl);\r
-      }\r
-      return Pair.create(feedUrl, execute);\r
-    }\r
-    throw new IOException("Failed to resolve redirects");\r
-  }\r
-\r
+  Pair<String, HttpResponse> resolvePath(@NotNull String feedUrl) throws IOException;\r
 }\r