package org.flisolsaocarlos.flisolapp.provider.impl;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import org.flisolsaocarlos.flisolapp.model.Lecture;
import org.flisolsaocarlos.flisolapp.provider.DatabaseContract;
import org.flisolsaocarlos.flisolapp.provider.DatabaseContract.*;
import org.flisolsaocarlos.flisolapp.provider.DatabaseHelper;
import org.flisolsaocarlos.flisolapp.provider.LectureDao;
import org.flisolsaocarlos.flisolapp.service.ApplicationService;
import java.util.ArrayList;
import java.util.List;
public class LectureDaoImpl implements LectureDao {
final static String TAG = LectureDaoImpl.class.getName();
private SQLiteDatabase database;
public LectureDaoImpl() {
DatabaseHelper databaseHelper = ApplicationService.getInstance().getDatabaseHelper();
database = databaseHelper.getWritableDatabase();
}
public Lecture findById(int id) {
Lecture lecture = null;
String[] columns = {LectureColumns.TITLE,
LectureColumns.DESCRIPTION,
LectureColumns.LECTURER,
LectureColumns.FIELD,
LectureColumns.SCHEDULE_BEGIN,
LectureColumns.SCHEDULE_END,
LectureColumns.ROOM
};
Cursor cursor = database.rawQuery("SELECT " + columns + " FROM " + Tables.LECTURE
+ " WHERE " + LectureColumns.ID + " = " + id , null);
lecture = cursorToLecture(cursor);
return lecture;
}
@Override
public List<Lecture> findAll() {
List<Lecture> lectures = new ArrayList<Lecture>();
String[] columns = {LectureColumns.TITLE,
LectureColumns.DESCRIPTION,
LectureColumns.LECTURER,
LectureColumns.FIELD,
LectureColumns.SCHEDULE_BEGIN,
LectureColumns.SCHEDULE_END,
LectureColumns.ROOM
};
Cursor cursor = database.query(DatabaseContract.Tables.LECTURE, columns, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Lecture lecture = cursorToLecture(cursor);
lectures.add(lecture);
cursor.moveToNext();
}
cursor.close();
return lectures;
}
public List<Lecture> findByEditionYear(int year) {
List<Lecture> lectures = new ArrayList<Lecture>();
String columns = LectureColumns.TITLE + ", " +
LectureColumns.DESCRIPTION + ", " +
LectureColumns.LECTURER + ", " +
LectureColumns.FIELD + ", " +
LectureColumns.SCHEDULE_BEGIN + ", " +
LectureColumns.SCHEDULE_END + ", " +
LectureColumns.ROOM;
final String query = "SELECT " + columns + " FROM " + Tables.EDITION + " e "
+ " INNER JOIN " + Tables.LECTURE + " l "
+ " ON e." + EditionColumns.ID + " = l." + LectureColumns.EDITION
+ " WHERE e." + EditionColumns.YEAR + " = ? "
+ " ORDER BY l." + LectureColumns.TITLE;
final Cursor cursor = database.rawQuery(query, new String[]{String.valueOf(year)});
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Lecture lecture = cursorToLecture(cursor);
lectures.add(lecture);
cursor.moveToNext();
}
cursor.close();
return lectures;
}
private Lecture cursorToLecture(Cursor cursor) {
Lecture lecture = new Lecture();
lecture.setTitle(cursor.getString(0));
lecture.setDescription(cursor.getString(1));
lecture.setLecturer(cursor.getString(2));
lecture.setField(cursor.getString(3));
lecture.setScheduleBegin(cursor.getString(4));
lecture.setScheduleEnd(cursor.getString(5));
lecture.setRoom(cursor.getString(6));
return lecture;
}
public List<Lecture> findByEditionYearAndRoom(int year, String room) {
List<Lecture> lectures = new ArrayList<Lecture>();
String columns = LectureColumns.TITLE + ", " +
LectureColumns.DESCRIPTION + ", " +
LectureColumns.LECTURER + ", " +
LectureColumns.FIELD + ", " +
LectureColumns.SCHEDULE_BEGIN + ", " +
LectureColumns.SCHEDULE_END + ", " +
LectureColumns.ROOM;
final String query = "SELECT " + columns + " FROM " + Tables.EDITION + " e"
+ " INNER JOIN " + Tables.LECTURE + " l"
+ " ON e." + EditionColumns.ID + " = l." + LectureColumns.EDITION
+ " WHERE e." + EditionColumns.YEAR + " = ?"
+ " AND l." + LectureColumns.ROOM + " LIKE '" + room + "'"
+ " ORDER BY l." + LectureColumns.SCHEDULE_BEGIN;
final Cursor cursor = database.rawQuery(query, new String[]{String.valueOf(year)});
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Lecture lecture = cursorToLecture(cursor);
lectures.add(lecture);
cursor.moveToNext();
}
cursor.close();
return lectures;
}
public Lecture create(Lecture lecture) {
ContentValues values = new ContentValues();
values.put(LectureColumns.TITLE, lecture.getTitle());
values.put(LectureColumns.DESCRIPTION, lecture.getDescription());
values.put(LectureColumns.FIELD, lecture.getField());
values.put(LectureColumns.LECTURER, lecture.getLecturer());
values.put(LectureColumns.SCHEDULE_BEGIN, lecture.getScheduleBegin());
values.put(LectureColumns.SCHEDULE_END, lecture.getScheduleEnd());
values.put(LectureColumns.ROOM, lecture.getRoom());
database.insert(DatabaseContract.Tables.LECTURE, null, values);
return lecture;
}
public List<String> findYears() {
List<String> years = new ArrayList<String>();
final String query = "SELECT DISTINCT e." + EditionColumns.YEAR + " FROM " + Tables.EDITION + " e"
+ " JOIN " + Tables.LECTURE + " l"
+ " ON e." + EditionColumns.ID + " = l." + LectureColumns.EDITION
+ " ORDER BY " + EditionColumns.YEAR + " DESC";
final Cursor cursor = database.rawQuery(query, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
years.add(cursor.getString(0));
cursor.moveToNext();
}
cursor.close();
return years;
}
}