package de.htwdd.database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import de.htwdd.classes.CONST;
import de.htwdd.types.Lesson;
import de.htwdd.types.RoomTimetable;
/**
* DAO für den Raumplan
* @author Kay Förster
*/
public class RoomTimetableDAO
{
private RoomTimetableDatabaseManager roomTimetableDatabaseManager;
public RoomTimetableDAO(Context context)
{
roomTimetableDatabaseManager = new RoomTimetableDatabaseManager(context);
}
public ArrayList<RoomTimetable> getOverview(final int day, final int week)
{
ArrayList<RoomTimetable> roomTimetables = new ArrayList<RoomTimetable>();
// Projections
String[] projection_rooms = {CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_ROOMS};
String[] projection_lesson = {
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_LESSONTAG,
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_DS,
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_DAY,
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_TYP,
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_WEEKSONLY};
// Datenbank öffnen
SQLiteDatabase sqLiteDatabase = roomTimetableDatabaseManager.getReadableDatabase();
// Hole alle Räume aus der DB
Cursor cursor_rooms = sqLiteDatabase.query(CONST.DataBaseRoomTimetableEntry.TABLE_NAME, projection_rooms, null, null, CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_ROOMS, null, null);
if (cursor_rooms.moveToFirst())
{
do {
RoomTimetable roomTimetable = new RoomTimetable();
roomTimetable.RoomName = cursor_rooms.getString(0);
roomTimetable.day = day;
roomTimetable.Timetable = new ArrayList<Lesson>();
Cursor cursor = sqLiteDatabase.query(CONST.DataBaseRoomTimetableEntry.TABLE_NAME,
projection_lesson,
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_ROOMS + " = ? AND " +
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_DAY + " = ? AND " +
"(" + CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_WEEK + " = ? OR " + CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_WEEK + " = 0)",
new String[] { cursor_rooms.getString(0), String.valueOf(day), String.valueOf(CONST.db_week(week))},
null,
null,
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_DS + " DESC");
if (cursor.moveToFirst())
{
do {
Lesson lesson = new Lesson();
lesson.lessonTag = cursor.getString(0);
lesson.ds = cursor.getInt(1);
lesson.day = cursor.getInt(2);
lesson.type = cursor.getString(3);
lesson.weeksOnly = cursor.getString(4);
// Zur Liste hinzufügen
roomTimetable.Timetable.add(lesson);
}
while (cursor.moveToNext());
}
// Cursor für einzelne Stunden schliessen
cursor.close();
// Füge Raum zur Liste hinzu
roomTimetables.add(roomTimetable);
}
while (cursor_rooms.moveToNext());
}
cursor_rooms.close();
sqLiteDatabase.close();
return roomTimetables;
}
public void add(RoomTimetable roomTimetable)
{
SQLiteDatabase sqLiteDatabase = roomTimetableDatabaseManager.getWritableDatabase();
// Starte Transaction
sqLiteDatabase.beginTransaction();
for (Lesson lesson: roomTimetable.Timetable)
{
ContentValues contentValues = new ContentValues();
contentValues.put(CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_LESSONTAG, lesson.lessonTag);
contentValues.put(CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_NAME, lesson.name);
contentValues.put(CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_TYP, lesson.type);
contentValues.put(CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_WEEK, lesson.week);
contentValues.put(CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_DAY, lesson.day);
contentValues.put(CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_DS, lesson.ds);
contentValues.put(CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_BEGINTIME, lesson.beginTime.toString());
contentValues.put(CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_ENDTIME, lesson.endTime.toString());
contentValues.put(CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_PROFESSOR, lesson.professor);
contentValues.put(CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_WEEKSONLY, lesson.weeksOnly);
contentValues.put(CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_ROOMS, roomTimetable.RoomName);
sqLiteDatabase.insert(CONST.DataBaseRoomTimetableEntry.TABLE_NAME, null, contentValues);
}
// Beende Transaction
sqLiteDatabase.setTransactionSuccessful();
sqLiteDatabase.endTransaction();
sqLiteDatabase.close();
}
public void removeRoom(String room)
{
SQLiteDatabase sqLiteDatabase = roomTimetableDatabaseManager.getWritableDatabase();
sqLiteDatabase.delete(CONST.DataBaseRoomTimetableEntry.TABLE_NAME, CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_ROOMS + " == '" + room + "'", null);
sqLiteDatabase.close();
}
public ArrayList<Lesson> loadWeek(String room, int week)
{
ArrayList<Lesson> lessons = new ArrayList<Lesson>();
SQLiteDatabase sqLiteDatabase = roomTimetableDatabaseManager.getReadableDatabase();
Cursor cursor = sqLiteDatabase.query(
CONST.DataBaseRoomTimetableEntry.TABLE_NAME,
new String[] {
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_DAY,
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_DS,
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_LESSONTAG,
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_TYP,
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_WEEKSONLY,
CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_ROOMS
},
"(" + CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_WEEK + "= ? OR " + CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_WEEK + " = 0) " +
"AND " + CONST.DataBaseRoomTimetableEntry.COLUMN_NAME_ROOMS + " = ? ",
new String[] {String.valueOf(CONST.db_week(week)), room},
null, null, null
);
if (cursor.moveToFirst())
{
do
{
Lesson lesson = new Lesson();
lesson.day = cursor.getInt(0);
lesson.ds = cursor.getInt(1);
lesson.lessonTag = cursor.getString(2);
lesson.type = cursor.getString(3);
lesson.weeksOnly = cursor.getString(4);
lesson.rooms = cursor.getString(5);
lessons.add(lesson);
}while (cursor.moveToNext());
}
cursor.close();
sqLiteDatabase.close();
return lessons;
}
}