package it.fdev.unisaconnect.data; import it.fdev.unisaconnect.model.bustrattaendpoint.model.BusCorsa; import it.fdev.unisaconnect.model.bustrattaendpoint.model.BusFermata; import it.fdev.unisaconnect.model.bustrattaendpoint.model.BusTratta; import java.util.ArrayList; import java.util.Collections; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import com.readystatesoftware.sqliteasset.SQLiteAssetHelper; public class BusDB extends SQLiteAssetHelper { private static final String DATABASE_NAME = "bus.db"; private static final int DATABASE_VERSION = 9; private final String TABLE_TRATTE_NAME = "tratta"; private final String TABLE_CORSE_NAME = "corse"; private final String TABLE_FERMATE_NAME = "fermate"; public BusDB(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); setForcedUpgrade(); } public ArrayList<String> getStazioniConTesto(String nomeStazione) { ArrayList<String> nomiStazioni = new ArrayList<String>(); SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query(true, TABLE_FERMATE_NAME, new String[] { "stazione" }, "stazione LIKE ?", new String[] { "%" + nomeStazione + "%" }, null, null, "stazione DESC", null); cursor.moveToFirst(); int nomeIndex = cursor.getColumnIndex("stazione"); while (!cursor.isAfterLast()) { String nome = cursor.getString(nomeIndex); nomiStazioni.add(nome); cursor.moveToNext(); } return nomiStazioni; } private ArrayList<Integer> getIDTrattePerStazione(String stazione) { ArrayList<Integer> idTratte = new ArrayList<Integer>(); SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query(true, TABLE_FERMATE_NAME, new String[] { "id_tratta" }, "stazione LIKE ?", new String[] { "%" + stazione + "%" }, null, null, null, null); cursor.moveToFirst(); int idTrattaIndex = cursor.getColumnIndex("id_tratta"); while (!cursor.isAfterLast()) { int idTratta = cursor.getInt(idTrattaIndex); idTratte.add(idTratta); cursor.moveToNext(); } return idTratte; } private BusTratta getTratta(int idTrattaDaCercare) { SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query(TABLE_TRATTE_NAME, null, "id = ?", new String[] { Integer.toString(idTrattaDaCercare) }, null, null, null, null); if (!cursor.moveToFirst()) { return null; } int idTrattaIndex = cursor.getColumnIndex("id"); int compagniaIndex = cursor.getColumnIndex("compagnia"); int capolineaIndex = cursor.getColumnIndex("capolinea"); int idTratta = cursor.getInt(idTrattaIndex); String compagnia = cursor.getString(compagniaIndex); String capolinea = cursor.getString(capolineaIndex); ArrayList<BusCorsa> cCorse = getCorsePerTratta(idTrattaDaCercare); ArrayList<String> stazioniVersoUni = getStazioniTratta(idTrattaDaCercare, true); ArrayList<String> stazioniDaUni = getStazioniTratta(idTrattaDaCercare, false); // BusTratta cTratta = new BusTratta(idTratta, compagnia, capolinea, cCorse, stazioniVersoUni, stazioniDaUni); // return cTratta; return null; } public ArrayList<BusTratta> getTrattePerStazione(String stazione) { ArrayList<BusTratta> tratte = new ArrayList<BusTratta>(); ArrayList<Integer> idTratte = getIDTrattePerStazione(stazione); for (Integer cIdTratta : idTratte) { BusTratta cTratta = getTratta(cIdTratta); if (cTratta != null) { tratte.add(cTratta); } } return tratte; } private ArrayList<BusCorsa> getCorsePerTratta(int idTrattaDaCercare) { ArrayList<BusCorsa> corse = new ArrayList<BusCorsa>(); SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query(true, TABLE_CORSE_NAME, null, "id_tratta LIKE ?", new String[] { Integer.toString(idTrattaDaCercare) }, null, null, null, null); cursor.moveToFirst(); int idCorsaIndex = cursor.getColumnIndex("id"); int idTrattaIndex = cursor.getColumnIndex("id_tratta"); int versoUniIndex = cursor.getColumnIndex("verso_uni"); int giorniIndex = cursor.getColumnIndex("giorni"); while (!cursor.isAfterLast()) { int idCorsa = cursor.getInt(idCorsaIndex); int idTratta = cursor.getInt(idTrattaIndex); boolean versoUni = cursor.getInt(versoUniIndex) == 1; String giorni = cursor.getString(giorniIndex); ArrayList<BusFermata> cFermate = getFermate(idCorsa); // BusCorsa cCorsa = new BusCorsa(idTratta, idCorsa, versoUni, giorni, cFermate); // corse.add(cCorsa); cursor.moveToNext(); } return corse; } private ArrayList<String> getStazioniTratta(int idTrattaDaCercare, boolean versoUni) { ArrayList<String> stazioni = new ArrayList<String>(); String idTrattaDaCercareString = Integer.toString(idTrattaDaCercare); String versoUniString = versoUni ? "1" : "0"; SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); qb.setTables(TABLE_FERMATE_NAME + " JOIN " + TABLE_CORSE_NAME + " ON " + "id_corsa = id"); String orderBy = "posizione ASC"; SQLiteDatabase db = getReadableDatabase(); Cursor cursor = qb.query(db, new String[] { "stazione" }, TABLE_FERMATE_NAME + ".id_tratta = ? AND verso_uni = ?", new String[] { idTrattaDaCercareString, versoUniString }, null, null, orderBy); int stazioneIndex = cursor.getColumnIndex("stazione"); cursor.moveToFirst(); while (!cursor.isAfterLast()) { String stazione = cursor.getString(stazioneIndex); stazioni.add(stazione); cursor.moveToNext(); } return stazioni; } private ArrayList<BusFermata> getFermate(int idCorsaDaCercare) { ArrayList<BusFermata> fermate = new ArrayList<BusFermata>(); SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.query(TABLE_FERMATE_NAME, null, "id_corsa = ?", new String[] { Integer.toString(idCorsaDaCercare) }, null, null, null); cursor.moveToFirst(); int idTrattaIndex = cursor.getColumnIndex("id_tratta"); int idCorsaIndex = cursor.getColumnIndex("id_corsa"); int stazioneIndex = cursor.getColumnIndex("stazione"); int oraIndex = cursor.getColumnIndex("ora"); int posizioneIndex = cursor.getColumnIndex("posizione"); while (!cursor.isAfterLast()) { int idTratta = cursor.getInt(idTrattaIndex); int idCorsa = cursor.getInt(idCorsaIndex); String stazione = cursor.getString(stazioneIndex); int ora = cursor.getInt(oraIndex); int posizione = cursor.getInt(posizioneIndex); // BusFermata cFermata = new BusFermata(idTratta, idCorsa, stazione, ora, posizione); // fermate.add(cFermata); cursor.moveToNext(); } // TODO // Collections.sort(fermate); return fermate; } // public BusFermata getFermata(int idCorsaDaCercare, String stazioneDaCercare) { // SQLiteDatabase db = getReadableDatabase(); // Cursor cursor = db.query(TABLE_FERMATE_NAME, null, "id_corsa = ? AND stazione = ?", new String[] { Integer.toString(idCorsaDaCercare), stazioneDaCercare }, null, null, null); // return getFermata(cursor); // } // public BusFermata getFermata(Cursor cursor) { // try { // int idTrattaIndex = cursor.getColumnIndex("id_tratta"); // int idCorsaIndex = cursor.getColumnIndex("id_corsa"); // int stazioneIndex = cursor.getColumnIndex("stazione"); // int oraIndex = cursor.getColumnIndex("ora"); // int posizioneIndex = cursor.getColumnIndex("posizione"); // // int idTratta = cursor.getInt(idTrattaIndex); // int idCorsa = cursor.getInt(idCorsaIndex); // String stazione = cursor.getString(stazioneIndex); // int ora = cursor.getInt(oraIndex); // int posizione = cursor.getInt(posizioneIndex); // // return new BusFermata(idTratta, idCorsa, stazione, ora, posizione); // } catch (Exception e) { // return null; // } // } }