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