/*******************************************************************************
* Copyright (c) 2010 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.usage.internal.http;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.MessageFormat;
import org.jboss.tools.usage.tracker.internal.UsagePluginLogger;
/**
* Class that executes a HTTP Get request to the given url.
*
* @author Andre Dietisheim
*/
public class HttpGetRequest implements IHttpGetRequest {
private static final String USER_AGENT = "User-Agent"; //$NON-NLS-1$
private static final String GET_METHOD_NAME = "GET"; //$NON-NLS-1$
private static final int TIMEOUT = 10000; // Connection timeout is 10 seconds.
private UsagePluginLogger logger = null;
private String userAgent;
public HttpGetRequest(String userAgent, UsagePluginLogger logger) {
this.userAgent = userAgent;
this.logger = logger;
}
/* (non-Javadoc)
* @see org.jboss.tools.usage.IHttpGetRequest#request(java.lang.String)
*/
public boolean request(String urlString) {
boolean result = false;
try {
HttpURLConnection urlConnection = createURLConnection(urlString, userAgent);
urlConnection.connect();
int responseCode = getResponseCode(urlConnection);
if (responseCode == HttpURLConnection.HTTP_OK) {
result = true;
logger.debug(MessageFormat.format(HttpMessages.HttpGetMethod_Success, urlString, responseCode));
} else {
logger.error(MessageFormat.format(HttpMessages.HttpGetMethod_Error_Http, urlString, responseCode));
}
} catch (Exception e) {
logger.debug(MessageFormat.format(HttpMessages.HttpGetMethod_Error_Io, urlString, e.toString()));
}
return result;
}
/**
* Returns the return code from the given {@link HttpURLConnection}.
* Provided to be called by test cases so that they can retrieve the return code.
*
* @param urlConnection to get the response code from
* @return the return code the HttpUrlConnection received
* @throws IOException Signals that an I/O exception has occurred.
*/
protected int getResponseCode(HttpURLConnection urlConnection) throws IOException {
return urlConnection.getResponseCode();
}
/**
* Creates a new url connection.
*
* @param urlString the url string
* @param userAgent the user agent
* @return the http url connection
* @throws IOException Signals that an I/O exception has occurred.
*/
protected HttpURLConnection createURLConnection(String urlString, String userAgent) throws IOException {
URL url = new URL(urlString);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setInstanceFollowRedirects(true);
urlConnection.setRequestMethod(GET_METHOD_NAME);
urlConnection.setRequestProperty(USER_AGENT, userAgent);
urlConnection.setConnectTimeout(TIMEOUT);
return urlConnection;
}
}