/*
* Copyright (C) 2009 Teleca Poland Sp. z o.o. <android@teleca.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.teleca.jamendo.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.SocketException;
import java.net.UnknownHostException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import com.teleca.jamendo.MyApplication;
import com.teleca.jamendo.model.ErrorMsg;
import android.util.Log;
/**
* @author Lukasz Wisniewski
*/
public class Caller {
/**
* Cache for most recent request
*/
private static RequestCache requestCache = null;
/**
* Performs HTTP GET using Apache HTTP Client v 4
*
* @param url
* @return
* @throws ErrorMsg
*/
public static String doGet(String url) throws ErrorMsg{
String data = null;
if(requestCache != null){
data = requestCache.get(url);
if(data != null){
Log.d(MyApplication.TAG, "Caller.doGet [cached] "+url);
return data;
}
}
// initialize HTTP GET request objects
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse;
try {
// execute request
try {
httpResponse = httpClient.execute(httpGet);
} catch (UnknownHostException e) {
ErrorMsg wsError = new ErrorMsg();
wsError.setMessage(e.getLocalizedMessage());
throw wsError;
} catch (SocketException e){
ErrorMsg wsError = new ErrorMsg();
wsError.setMessage(e.getLocalizedMessage());
throw wsError;
}
// request data
HttpEntity httpEntity = httpResponse.getEntity();
if(httpEntity != null){
InputStream inputStream = httpEntity.getContent();
data = convertStreamToString(inputStream);
// cache the result
if(requestCache != null){
requestCache.put(url, data);
}
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Log.d(MyApplication.TAG, "Caller.doGet "+url);
return data;
}
private static String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
public static void setRequestCache(RequestCache requestCache) {
Caller.requestCache = requestCache;
}
public static String createStringFromIds(int[] ids){
if(ids == null)
return "";
String query ="";
for(int id : ids){
query = query + id + "+";
}
return query;
}
}