package neongarage.slakr;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import java.util.LinkedList;
import java.util.List;
import neongarage.slakr.Assignment.Assignment;
import neongarage.slakr.Course.Course;
/**
* Created by Sean on 4/8/2015.
*/
public class MySQLiteHelper extends SQLiteOpenHelper {
// Table names
private static final String TABLE_ASSIGNMENTS = "assignments";
private static final String TABLE_COURSES = "courses";
// Assignment column names
private static final String COLUMN_NAME = "name";
private static final String COLUMN_TYPE = "type";
private static final String COLUMN_DATE = "dateModified";
private static final String COLUMN_GRADE = "grade";
private static final String COLUMN_WEIGHT = "weight";
private static final String COLUMN_COMPLETED = "completed";
// Course column names
private static final String COLUMN_DEPARTMENT = "department";
private static final String COLUMN_NUMBER = "number";
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "SLKR_DB";
public MySQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// SQL statement to create courses table
String CREATE_COURSES_TABLE = "CREATE TABLE courses ( " + "department TEXT, "
+ "number TEXT, " + "PRIMARY KEY (department, number))";
// create course table
db.execSQL(CREATE_COURSES_TABLE);
Log.d("SQLite: onCreate", "Created courses table");
// SQL statement to create assignments table
String CREATE_ASSIGNMENTS_TABLE = "CREATE TABLE assignments ( " + "name TEXT, "
+ "type TEXT, " + "dateModified TEXT, " + "grade REAL, " + "weight REAL, " + "completed TEXT, " +
"department TEXT, " + "number TEXT, " +
"FOREIGN KEY(department) REFERENCES courses(department), " +
"FOREIGN KEY(number) REFERENCES courses(number))";
// create assignments table
db.execSQL(CREATE_ASSIGNMENTS_TABLE);
Log.d("SQLite: onCreate", "Created assignments table");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older courses table if exists
db.execSQL("DROP TABLE IF EXISTS courses");
// Drop older assignments table if exists
db.execSQL("DROP TABLE IF EXISTS assignments");
// create fresh tables
this.onCreate(db);
}
public void addCourse(Course c) {
SQLiteDatabase db = this.getWritableDatabase();
// create ContentValues to add key "column"/value
ContentValues values = new ContentValues();
values.put(COLUMN_DEPARTMENT, c.getDept());
values.put(COLUMN_NUMBER, c.getNum());
// insert
db.insert(TABLE_COURSES, null, values);
Log.d("SQLite: addCourse", c.getDept() + c.getNum());
db.close();
}
public void addAssignment(Assignment a, String department, String courseNumber) {
// for logging
Log.d("addAssignment", a.getName());
SQLiteDatabase db = this.getWritableDatabase();
// create ContentValues to add key "column"/value
ContentValues values = new ContentValues();
values.put(COLUMN_NAME, a.getName());
values.put(COLUMN_TYPE, a.getType());
values.put(COLUMN_DATE, a.getDateModified());
values.put(COLUMN_GRADE, a.getGrade());
values.put(COLUMN_WEIGHT, a.getWeight());
values.put(COLUMN_COMPLETED, a.getCompleted());
values.put(COLUMN_DEPARTMENT, department);
values.put(COLUMN_NUMBER, courseNumber);
// insert
db.insert(TABLE_ASSIGNMENTS, null, values);
Log.d("SQLite: addAssignment", a.getName());
db.close();
}
public List<Course> getAllCourses() {
List<Course> courses = new LinkedList<Course>();
// build the query
String query = "SELECT * FROM " + TABLE_COURSES;
// get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
// go through each row and add to list
Course c = null;
if (cursor.moveToFirst()) {
do {
c = new Course();
c.setDept(cursor.getString(0));
c.setNum(cursor.getString(1));
courses.add(c);
} while (cursor.moveToNext());
}
return courses;
}
public List<Assignment> getAssignmentsForCourse(Course c) {
List<Assignment> assignments = new LinkedList<Assignment>();
// build the query
String query = "SELECT * FROM " + TABLE_ASSIGNMENTS + " WHERE " + COLUMN_NUMBER + " = '" + c.getNum() +
"' AND " + COLUMN_DEPARTMENT + " = '" + c.getDept() + "'";
// get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(query, null);
// go through each row and add to list
Assignment a = null;
if (cursor.moveToFirst()) {
do {
a = new Assignment();
a.setName(cursor.getString(0));
a.setType(cursor.getString(1));
a.setDateModified(cursor.getString(2));
a.setGrade(Float.parseFloat(cursor.getString(3)));
a.setWeight(Float.parseFloat(cursor.getString(4)));
a.setCompleted(Boolean.parseBoolean(cursor.getString(5)));
assignments.add(a);
} while (cursor.moveToNext());
}
return assignments;
}
// delete single course
public void deleteCourse(Course c) {
SQLiteDatabase db = this.getWritableDatabase();
// delete course
db.delete(TABLE_COURSES, COLUMN_DEPARTMENT + "=" + c.getDept() + " and " + COLUMN_NUMBER + "=" + c.getNum(), null);
db.close();
}
public void deleteAll() {
SQLiteDatabase db = this.getWritableDatabase();
onUpgrade(db, 1, 1);
}
}