package it.fdev.scraper.esse3;
import it.fdev.unisaconnect.data.SharedPrefDataManager;
import it.fdev.utils.Utils;
import java.io.IOException;
import java.util.ArrayList;
import org.jsoup.HttpStatusException;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import android.content.Context;
import android.content.Intent;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
public class Esse3TipoCorsoScraper extends Esse3BasicScraper {
private final String startUrl = "https://esse3web.unisa.it/unisa/auth/Logon.do";
public Esse3TipoCorsoScraper(Context context, SharedPrefDataManager dataManager, String base64login, String broadcastID) {
super(context, dataManager, base64login, broadcastID);
}
@Override
public LoadStates startScraper() {
try {
ArrayList<TipoCorso> tipoCorsi = scraperStepTipoCorso();
if (tipoCorsi != null) {
broadcastStatus(mContext, broadcastID, tipoCorsi);
return LoadStates.FINISHED;
} else
return LoadStates.NO_DATA;
} catch (HttpStatusException e) {
Log.w(Utils.TAG, "ERROR ", e);
int code = e.getStatusCode();
if (code == 401)
return LoadStates.WRONG_DATA;
else
return LoadStates.UNKNOWN_PROBLEM;
} catch (Exception e) {
Log.w(Utils.TAG, "ERROR ", e);
return LoadStates.UNKNOWN_PROBLEM;
}
}
public static void broadcastStatus(Context ctx, String action, ArrayList<TipoCorso> list) {
Intent localIntent = new Intent(action);
localIntent.putExtra("status", LoadStates.FINISHED);
localIntent.putParcelableArrayListExtra("list", list);
ctx.sendBroadcast(localIntent);
}
private ArrayList<TipoCorso> scraperStepTipoCorso() throws HttpStatusException, IOException, InterruptedException {
ArrayList<TipoCorso> listaTipoCorso = new ArrayList<TipoCorso>();
Document document = scraperGetUrl(startUrl);
if (document == null) {
return null;
}
Elements detailsTables = document.getElementsByClass("detail_table");
if (detailsTables.size() > 0) {
Elements rows = detailsTables.get(0).getElementsByTag("tr");
rows.remove(0); //Remove headers
for (Element cRow : rows) {
Elements cols = cRow.getElementsByTag("td");
if (cols.size() != 4) {
Log.d(Utils.TAG, "Unknown cols number checking tipoCorso: #" + cols.size());
continue;
}
String matricola = cols.get(0).text();
String tipoCorso = cols.get(1).text();
String corsoDiStudio = cols.get(2).text();
String stato = cols.get(3).text();
listaTipoCorso.add(new TipoCorso(matricola, tipoCorso, corsoDiStudio, stato));
}
}
return listaTipoCorso;
}
public static class TipoCorso implements Parcelable {
private String matricola;
private String tipoCorso;
private String corsoDiStudio;
private String stato;
public TipoCorso(String matricola, String tipoCorso, String corsoDiStudio, String stato) {
this.matricola = matricola;
this.tipoCorso = tipoCorso;
this.corsoDiStudio = corsoDiStudio;
this.stato = stato;
}
public String getMatricola() {
return matricola;
}
public String getTipoCorso() {
return tipoCorso;
}
public String getCorsoDiStudio() {
return corsoDiStudio;
}
public String getStato() {
return stato;
}
public TipoCorso(Parcel in) {
readFromParcel(in);
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(matricola);
dest.writeString(tipoCorso);
dest.writeString(corsoDiStudio);
dest.writeString(stato);
}
private void readFromParcel(Parcel in) {
matricola = in.readString();
tipoCorso = in.readString();
corsoDiStudio = in.readString();
stato = in.readString();
}
public static final Parcelable.Creator<TipoCorso> CREATOR = new Parcelable.Creator<TipoCorso>() {
public TipoCorso createFromParcel(Parcel in) {
return new TipoCorso(in);
}
public TipoCorso[] newArray(int size) {
return new TipoCorso[size];
}
};
@Override
public int describeContents() {
return 0;
}
}
}