package ca.etsmtl.applets.etsmobile.http;
import android.content.Context;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.octo.android.robospice.request.springandroid.SpringAndroidSpiceRequest;
import org.apache.commons.io.IOUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.kobjects.base64.Base64;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Iterator;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import ca.etsmtl.applets.etsmobile.model.Nouvelle;
import ca.etsmtl.applets.etsmobile.model.Nouvelles;
import ca.etsmtl.applets.etsmobile2.R;
/**
* Created by gnut3ll4 on 11/30/14.
*/
public class AppletsApiNewsRequest extends SpringAndroidSpiceRequest<Nouvelles> {
private Context context;
private String source;
private String startDate;
private String endDate;
public AppletsApiNewsRequest(Context context, String source, String startDate, String endDate) {
super(Nouvelles.class);
this.context = context;
this.source = source;
this.startDate = startDate;
this.endDate = endDate;
}
@Override
public Nouvelles loadDataFromNetwork() throws Exception {
// String address = context.getString(R.string.applets_api_news, source, startDate, endDate);
String address = context.getString(R.string.applets_api_news_all);
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
}
};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
URL url = new URL(address);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
String userCredentials = context.getString(R.string.credentials_api);
String basicAuth = "Basic " + new String(new Base64().encode(userCredentials.getBytes()));
con.setRequestProperty ("Authorization", basicAuth);
con.setRequestMethod("GET");
con.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
con.setUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
String result = IOUtils.toString(con.getInputStream());
// urlConnection.disconnect();
JSONObject root = new JSONObject(result);
JSONObject data = root.getJSONObject("data");
ObjectMapper mapper = new ObjectMapper();
Nouvelles nouvelles = new Nouvelles();
Iterator keys = data.keys();
while (keys.hasNext()) {
int imageResource = 0;
String currentDynamicKey = (String) keys.next();
imageResource = assignResource(currentDynamicKey);
JSONArray arrayNews = data.getJSONArray(currentDynamicKey);
for (int i = 0; i < arrayNews.length(); i++) {
Nouvelle nouvelle = mapper.readValue(arrayNews.getJSONObject(i).toString(), Nouvelle.class);
nouvelle.setImageResource(imageResource);
nouvelles.add(nouvelle);
}
}
return nouvelles;
}
private int assignResource(String key) {
switch (key) {
case "ets":
return R.drawable.ic_ets;
case "substance":
return R.drawable.ic_substance;
case "centresportif":
return R.drawable.ic_centresportif;
case "applets":
return R.drawable.ic_applets;
case "esports":
return R.drawable.ic_esports;
case "rafale":
return R.drawable.ic_rafale;
case "rockanddance":
return R.drawable.ic_rockanddance;
case "conjure":
return R.drawable.ic_conjure;
case "rockets":
return R.drawable.ic_rockets;
case "phoenix":
return R.drawable.ic_phoenix;
case "avioncargo":
return R.drawable.ic_ace;
case "clubcycliste":
return R.drawable.ic_clubcycliste;
case "football":
return R.drawable.ic_football;
case "ingenieuses":
return R.drawable.ic_ingenieuses;
case "debatpiranha":
return R.drawable.ic_debatpiranha;
case "radiopiranha":
return R.drawable.ic_radiopiranha;
case "walkingmachine":
return R.drawable.ic_walkingmachine;
case "atlhetsiques":
return R.drawable.ic_athletsiques;
case "aeets":
return R.drawable.ic_aeets;
case "rugby":
return R.drawable.ic_rugby;
case "bibliotheque":
return R.drawable.ic_bibliotheque;
case "capra":
return R.drawable.ic_capra;
case "ieee":
return R.drawable.ic_ieee;
case "pontpop":
return R.drawable.ic_pontpop;
case "omer":
return R.drawable.ic_omer;
case "baja":
return R.drawable.ic_baja;
case "canoedebeton":
return R.drawable.ic_canoedebeton;
case "chinook":
return R.drawable.ic_chinook;
case "sonia":
return R.drawable.ic_sonia;
case "lanets":
return R.drawable.ic_lanets;
case "formuleets":
return R.drawable.ic_formuleets;
case "eclipse":
return R.drawable.ic_eclipse;
case "turbulence":
return R.drawable.ic_turbulence;
case "preci":
return R.drawable.ic_preci;
case "reflets":
return R.drawable.ic_reflets;
case "crabeets":
return R.drawable.ic_crabeets;
case "decliq":
return R.drawable.ic_decliq;
case "quiets":
return R.drawable.ic_quiets;
case "dronolab":
return R.drawable.ic_dronolab;
case "liets":
return R.drawable.ic_liets;
case "radiosansgenie":
return R.drawable.ic_radiosansgenie;
case "coopets":
return R.drawable.ic_coopets;
case "integrale":
return R.drawable.ic_integrale;
case "geniale":
return R.drawable.ic_geniale;
default:
return 0;
}
}
}