package com.jdroid.android.http;

import java.net.URI;
import java.net.URISyntaxException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.Header;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.ProtocolException;
import org.apache.http.client.CircularRedirectException;
import org.apache.http.client.params.ClientPNames;
import org.apache.http.client.utils.URIUtils;
import org.apache.http.impl.client.DefaultRedirectHandler;
import org.apache.http.impl.client.RedirectLocations;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.ExecutionContext;
import org.apache.http.protocol.HttpContext;

public class AndroidDefaultRedirectHandler extends DefaultRedirectHandler {
	
	private final Log log = LogFactory.getLog(getClass());
	
	private static final String REDIRECT_LOCATIONS = "http.protocol.redirect-locations";
	
	@Override
	public URI getLocationURI(final HttpResponse response, final HttpContext context) throws ProtocolException {
		if (response == null) {
			throw new IllegalArgumentException("HTTP response may not be null");
		}
		// get the location header to find out where to redirect to
		Header locationHeader = response.getFirstHeader("location");
		if (locationHeader == null) {
			// got a redirect response, but no location header
			throw new ProtocolException("Received redirect response " + response.getStatusLine()
					+ " but no location header");
		}
		String location = locationHeader.getValue().replaceAll(" ", "%20");
		if (log.isDebugEnabled()) {
			log.debug("Redirect requested to location '" + location + "'");
		}
		
		URI uri;
		try {
			uri = new URI(location);
		} catch (URISyntaxException ex) {
			throw new ProtocolException("Invalid redirect URI: " + location, ex);
		}
		
		HttpParams params = response.getParams();
		// rfc2616 demands the location value be a complete URI
		// Location = "Location" ":" absoluteURI
		if (!uri.isAbsolute()) {
			if (params.isParameterTrue(ClientPNames.REJECT_RELATIVE_REDIRECT)) {
				throw new ProtocolException("Relative redirect location '" + uri + "' not allowed");
			}
			// Adjust location URI
			HttpHost target = (HttpHost)context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
			if (target == null) {
				throw new IllegalStateException("Target host not available " + "in the HTTP context");
			}
			
			HttpRequest request = (HttpRequest)context.getAttribute(ExecutionContext.HTTP_REQUEST);
			
			try {
				URI requestURI = new URI(request.getRequestLine().getUri());
				URI absoluteRequestURI = URIUtils.rewriteURI(requestURI, target, true);
				uri = URIUtils.resolve(absoluteRequestURI, uri);
			} catch (URISyntaxException ex) {
				throw new ProtocolException(ex.getMessage(), ex);
			}
		}
		
		if (params.isParameterFalse(ClientPNames.ALLOW_CIRCULAR_REDIRECTS)) {
			
			RedirectLocations redirectLocations = (RedirectLocations)context.getAttribute(REDIRECT_LOCATIONS);
			
			if (redirectLocations == null) {
				redirectLocations = new RedirectLocations();
				context.setAttribute(REDIRECT_LOCATIONS, redirectLocations);
			}
			
			URI redirectURI;
			if (uri.getFragment() != null) {
				try {
					HttpHost target = new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme());
					redirectURI = URIUtils.rewriteURI(uri, target, true);
				} catch (URISyntaxException ex) {
					throw new ProtocolException(ex.getMessage(), ex);
				}
			} else {
				redirectURI = uri;
			}
			
			if (redirectLocations.contains(redirectURI)) {
				throw new CircularRedirectException("Circular redirect to '" + redirectURI + "'");
			} else {
				redirectLocations.add(redirectURI);
			}
		}
		
		return uri;
	}
	
}

@@ -92,95 +92,8 @@
 n;%0D%0A
-import org.apache.commons.logging.Log;%0D%0Aimport org.apache.commons.logging.LogFactory;%0D%0A
 impo
@@ -116,24 +116,24 @@
 tp.Header;%0D%0A
+
 import org.a
@@ -683,16 +683,85 @@
 ontext;%0D
+%0Aimport org.slf4j.Logger;%0D%0Aimport com.jdroid.java.utils.LoggerUtils;%0D
 %0A%0D%0Apubli
@@ -857,43 +857,78 @@
  Log
- log = LogFactory.getLog(getC
+ger LOGGER = LoggerUtils.getLogger(AndroidDefaultRedirectHandler.c
 lass
-()
 );%0D%0A
@@ -1670,43 +1670,14 @@
 %0D%0A%09%09
-if (log.isDebugEnabled()) %7B%0D%0A%09%09%09log
+LOGGER
 .deb
@@ -1730,29 +1730,24 @@
 on + %22'%22);%0D%0A
-%09%09%7D%0D%0A
 %09%09%0D%0A%09%09URI ur

Fix compilation error