package com.android.iliConnect.dataproviders;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import com.android.iliConnect.MainActivity;
import com.android.iliConnect.MainTabView;
import com.android.iliConnect.models.CourseData;
import com.android.iliConnect.ssl.HttpsClient;
import android.os.AsyncTask;
public class RemoteCourseProvider extends AsyncTask<CourseData, Integer, Object> {
@Override
protected Object doInBackground(CourseData... crs) {
// nur ersten Kurs verarbeiten
CourseData course = crs[0];
// Creating HTTP client
HttpParams params = new BasicHttpParams();
// Timeout für Verbindungsaufbau definieren
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpClient httpClient = new DefaultHttpClient(params);
// mache aus http einen httpsClient
HttpClient httpsClient = HttpsClient.createHttpsClient(httpClient);
// Url für Request erstellen
String url = course.getUrlSrc() + course.getApiPath() + "?action=" + course.getAction() + "&ref_id=" + course.getCourseId();
// Creating HTTP Post
HttpPost httpPost = new HttpPost(url);
// Building post parameters, key and value pair
List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
nameValuePair.add(new BasicNameValuePair("username", course.getUserId()));
nameValuePair.add(new BasicNameValuePair("password", course.getPassword()));
if(course.getCoursePw() != null) {
nameValuePair.add(new BasicNameValuePair("course_pw", course.getCoursePw()));
}
try {
// Url Encoding the POST parameters
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String responseMessage = null;
try {
// Http-Request ausfuehren
HttpResponse response = httpsClient.execute(httpPost);
StatusLine status = response.getStatusLine();
if(status.getStatusCode() < 200 || status.getStatusCode() > 207) {
throw new HttpException(status.getReasonPhrase());
}
// Antwortnachricht aus Response auslesen
responseMessage = this.getResponseMessage(response);
} catch (Exception e) {
e.printStackTrace();
return e;
}
// Mit return wird das Ergebnis im result bereitgestellt
return responseMessage;
}
@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
MainTabView.instance.update();
}
// Liest den Text aus der Http Responsen aus.
private String getResponseMessage(HttpResponse response) {
InputStream is = null;
try {
is = response.getEntity().getContent();
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder str = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
str.append(line + "\n");
}
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
is.close();
} catch (IOException e) {
}
}
return str.toString();
}
}