X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fde%2Fdhbwloe%2Fcampusapp%2Fdatabase%2FDatabaseManager.java;h=d042bd0810a3e4b6fc1f121b96deb1b2477ce56b;hb=48e758721a39298a85c69ecc7267f3daf6993e78;hp=43a5fd5666c8326560a98bffd067f31cc0d510d1;hpb=a0f644715b43af1e4acf2513b972c3f980efdaca;p=DHBWCampusApp.git
diff --git a/app/src/main/java/de/dhbwloe/campusapp/database/DatabaseManager.java b/app/src/main/java/de/dhbwloe/campusapp/database/DatabaseManager.java
index 43a5fd5..d042bd0 100644
--- a/app/src/main/java/de/dhbwloe/campusapp/database/DatabaseManager.java
+++ b/app/src/main/java/de/dhbwloe/campusapp/database/DatabaseManager.java
@@ -1,11 +1,26 @@
+/* DatabaseManager.java
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
package de.dhbwloe.campusapp.database;
-
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
+import net.fortuna.ical4j.model.Component;
import net.fortuna.ical4j.model.DateList;
import net.fortuna.ical4j.model.DateTime;
import net.fortuna.ical4j.model.Period;
@@ -30,8 +45,9 @@ import de.dhbwloe.campusapp.vorlesungen.CourseGroup;
* Created by pk910 on 19.01.2016.
*/
public class DatabaseManager {
- private static final String DATABASE_NAME = "DHBWLoe.CampusApp.DEV";
- private static final int DATABASE_VERSION = 1;
+ private static final String DATABASE_NAME = "DHBWLoe.CampusApp.db";
+ private static final int DATABASE_VERSION = 2; // Datenbank Version - muss bei strukturellen Anpassungen erhöht werden
+
private CampusAppContext AppContext;
private SQLiteDatabase database;
private NewsDatabaseHelper newsDBHelper;
@@ -43,10 +59,18 @@ public class DatabaseManager {
AppContext = context;
}
- public void initializeDatabase() {
+ private void openDatabase() {
+ if(database != null)
+ return;
+
database = AppContext.getMainActivity().openOrCreateDatabase(DATABASE_NAME, Activity.MODE_PRIVATE, null);
+ }
+
+ public void initializeDatabase() {
+ openDatabase();
database.execSQL("CREATE TABLE IF NOT EXISTS Version(Version INT);");
+ // Abfragen der Datenbank Version
Cursor resultSet = database.rawQuery("Select * from Version", null);
int version;
if(resultSet.moveToFirst()) {
@@ -57,14 +81,12 @@ public class DatabaseManager {
}
resultSet.close();
- if(version < DATABASE_VERSION)
+ if(version < DATABASE_VERSION) // Upgrade der Datenbank Struktur (oder auch Initialisierung)
upgradeTables(version, DATABASE_VERSION);
-
-
}
private void upgradeTables(int oldVersion, int newVersion) {
- if(oldVersion == 0 && newVersion > 0) {
+ if(oldVersion == 0 && newVersion > 0) { // Initialisierung (noch keine Datenbank)
database.execSQL("CREATE TABLE IF NOT EXISTS RuntimeCache " +
"(" +
"Reference TEXT, " +
@@ -81,6 +103,8 @@ public class DatabaseManager {
"StaticEntry INT, " +
"UpdateTime INT, " +
"TargetPage TEXT);");
+
+ // Vorlesungsplan
database.execSQL("CREATE TABLE IF NOT EXISTS CourseCalendar " +
"(" +
"Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
@@ -105,15 +129,6 @@ public class DatabaseManager {
"PRIMARY KEY (EventId, EventFrom, EventTo)" +
");");
database.execSQL("CREATE INDEX CourseCalendarEventIdx ON CourseCalendarEvent (EventFrom, EventTo);");
- database.execSQL("CREATE TABLE IF NOT EXISTS NfcCardStore " +
- "(" +
- "CardId INT, " +
- "UpdateTime INT," +
- "CardData TEXT, " +
- "CardBalance INT, " +
- "CardLastTransaction INT, " +
- "PRIMARY KEY (CardId, UpdateTime)" +
- ");");
database.execSQL("CREATE TABLE IF NOT EXISTS CourseCalendarGroup " +
"(" +
"GroupId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
@@ -123,6 +138,18 @@ public class DatabaseManager {
"UNIQUE (GroupName)" +
");");
database.execSQL("CREATE INDEX CourseCalendarGroupIdx ON CourseCalendarGroup (CourseName, GroupName);");
+
+ // Mensa Karten History is this actually used?)
+ database.execSQL("CREATE TABLE IF NOT EXISTS NfcCardStore " +
+ "(" +
+ "CardId INT, " +
+ "UpdateTime INT," +
+ "CardBalance INT, " +
+ "CardLastTransaction INT, " +
+ "PRIMARY KEY (CardId, UpdateTime)" +
+ ");");
+
+ // Mensaplan
database.execSQL("CREATE TABLE IF NOT EXISTS MensaPlan " +
"(" +
"PlanDate INT, " +
@@ -138,6 +165,8 @@ public class DatabaseManager {
"PriceSchool INT, " +
"PRIMARY KEY (PlanDate, MenuName)" +
");");
+
+ // News
database.execSQL("CREATE TABLE IF NOT EXISTS News " +
"(" +
"Id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " +
@@ -156,13 +185,19 @@ public class DatabaseManager {
}
if(oldVersion < 2 && newVersion >= 2) {
// Version 2
+ database.execSQL("ALTER TABLE CourseCalendarEvent ADD EventType INT;");
+ }
+ if(oldVersion < 3 && newVersion >= 3) {
+ // Version 3
}
- database.execSQL("UPDATE Version SET Version = "+Integer.toString(newVersion));
+ database.execSQL("UPDATE Version SET Version = " + Integer.toString(newVersion));
}
public void addSearchIndices(SearchIndices[] indices) {
+ // Hinzufügen oder Updaten mehrerer SearchIndice Objekte
+ openDatabase();
for(int i = 0; i < indices.length; i++) {
String[] whereArgs = new String[] {
indices[i].getKeyName()
@@ -196,6 +231,8 @@ public class DatabaseManager {
}
public SearchIndices[] performSearchRequest(String query, int maxResults) {
+ // App Suche
+ openDatabase();
String[] whereArgs = new String[] {
"%" + query + "%"
};
@@ -229,6 +266,8 @@ public class DatabaseManager {
}
public void setRuntimeCache(String name, String value) {
+ // Simple cache for runtime options
+ openDatabase();
long now = (new Date()).getTime() / 1000;
String[] whereArgs = new String[] {
name
@@ -262,6 +301,7 @@ public class DatabaseManager {
}
public String getRuntimeCache(String name) {
+ openDatabase();
String value = null;
String[] whereArgs = new String[] {
name
@@ -275,17 +315,15 @@ public class DatabaseManager {
}
public void addNfcCardData(NfcCardData nfcCardData) {
+ openDatabase();
String[] whereArgs = new String[] {
Integer.toString(nfcCardData.getUniqueId()),
Long.toString(nfcCardData.getLastUpdate())
};
- Cursor resultSet = database.rawQuery("SELECT CardData FROM NfcCardStore WHERE CardId = ? AND UpdateTime = ?", whereArgs);
+ Cursor resultSet = database.rawQuery("SELECT CardBalance FROM NfcCardStore WHERE CardId = ? AND UpdateTime = ?", whereArgs);
if(resultSet.moveToFirst()) {
- if(resultSet.getString(0).equalsIgnoreCase(nfcCardData.getCardData()))
- return;
try {
ContentValues updateValues = new ContentValues();
- updateValues.put("CardData", nfcCardData.getCardData());
updateValues.put("CardBalance", nfcCardData.getBalance());
updateValues.put("CardLastTransaction", nfcCardData.getLastTransaction());
@@ -298,7 +336,6 @@ public class DatabaseManager {
ContentValues indexValues = new ContentValues();
indexValues.put("CardId", nfcCardData.getUniqueId());
indexValues.put("UpdateTime", nfcCardData.getLastUpdate());
- indexValues.put("CardData", nfcCardData.getCardData());
indexValues.put("CardBalance", nfcCardData.getBalance());
indexValues.put("CardLastTransaction", nfcCardData.getLastTransaction());
@@ -311,19 +348,20 @@ public class DatabaseManager {
}
public NfcCardData[] getNfcCardData(int lastLimit) {
+ openDatabase();
String value = null;
Cursor resultSet;
if(lastLimit > 0) {
String[] whereArgs = {
Integer.toString(lastLimit)
};
- resultSet = database.rawQuery("SELECT CardId,UpdateTime,CardData,CardBalance,CardLastTransaction FROM NfcCardStore ORDER BY UpdateTime DESC LIMIT ?", whereArgs);
+ resultSet = database.rawQuery("SELECT CardId,UpdateTime,CardBalance,CardLastTransaction FROM NfcCardStore ORDER BY UpdateTime DESC LIMIT ?", whereArgs);
} else
- resultSet = database.rawQuery("SELECT CardId,UpdateTime,CardData,CardBalance,CardLastTransaction FROM NfcCardStore ORDER BY UpdateTime DESC", null);
+ resultSet = database.rawQuery("SELECT CardId,UpdateTime,CardBalance,CardLastTransaction FROM NfcCardStore ORDER BY UpdateTime DESC", null);
ArrayList nfcCardDatas = new ArrayList();
if(resultSet.moveToFirst()) {
do {
- NfcCardData nfcCardData = new NfcCardData(resultSet.getInt(0), resultSet.getLong(1), resultSet.getString(2), resultSet.getInt(3), resultSet.getInt(4));
+ NfcCardData nfcCardData = new NfcCardData(resultSet.getInt(0), resultSet.getLong(1), resultSet.getInt(2), resultSet.getInt(3));
nfcCardDatas.add(nfcCardData);
} while (resultSet.moveToNext());
}
@@ -333,67 +371,121 @@ public class DatabaseManager {
return resultsArr;
}
- public void updateCourseCalendar(CourseEvent event) {
+ public NfcCardData getLatestNfcCardData(int cardId) {
+ openDatabase();
+ String value = null;
+ String[] whereArgs = {
+ Integer.toString(cardId)
+ };
+ Cursor resultSet = database.rawQuery("SELECT CardId,UpdateTime,CardBalance,CardLastTransaction FROM NfcCardStore WHERE CardId = ? ORDER BY UpdateTime DESC LIMIT 1", whereArgs);
+ NfcCardData nfcCardData = null;
+ if(resultSet.moveToFirst()) {
+ nfcCardData = new NfcCardData(resultSet.getInt(0), resultSet.getLong(1), resultSet.getInt(2), resultSet.getInt(3));
+ }
+ resultSet.close();
+ return nfcCardData;
+ }
+
+ public void updateCourseCalendar(CourseEvent event, Component cevent) {
+ openDatabase();
if(vorlesungsplanDBHelper == null)
vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database);
- vorlesungsplanDBHelper.updateCourseCalendar(event);
+ vorlesungsplanDBHelper.updateCourseCalendar(event, cevent);
}
public CourseEvent[] getCourseCalendarEvents(String coursename, long timeFrom, long timeTo) {
+ openDatabase();
if(vorlesungsplanDBHelper == null)
vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database);
return vorlesungsplanDBHelper.getCourseCalendarEvents(coursename, timeFrom, timeTo);
}
+ public CourseEvent[] getCourseEventsByGroup(CourseGroup group) {
+ openDatabase();
+ if(vorlesungsplanDBHelper == null)
+ vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database);
+ return vorlesungsplanDBHelper.getCourseEventsByGroup(group);
+ }
+
+ public CourseEvent[] getCourseCalendarTimetable(String coursename, long timeFrom, int days) {
+ openDatabase();
+ if(vorlesungsplanDBHelper == null)
+ vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database);
+ return vorlesungsplanDBHelper.getCourseCalendarTimetable(coursename, timeFrom, days);
+ }
+
public CourseGroup getCourseGroup(int courseGroupId) {
+ openDatabase();
if(vorlesungsplanDBHelper == null)
vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database);
return vorlesungsplanDBHelper.getCourseGroup(courseGroupId);
}
public CourseGroup getCourseGroup(String coursename, String groupname) {
+ openDatabase();
if(vorlesungsplanDBHelper == null)
vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database);
return vorlesungsplanDBHelper.getCourseGroup(coursename, groupname);
}
public CourseGroup addCourseGroup(String coursename, String groupname) {
+ openDatabase();
if(vorlesungsplanDBHelper == null)
vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database);
return vorlesungsplanDBHelper.addCourseGroup(coursename, groupname);
}
+ public CourseGroup[] getCourseGroups(String coursename, Date notBefore) {
+ openDatabase();
+ if(vorlesungsplanDBHelper == null)
+ vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database);
+ return vorlesungsplanDBHelper.getCourseGroups(coursename, notBefore);
+ }
+
+ public CourseEvent[] getCourseExamEvents(String coursename, long timeFrom, long timeTo) {
+ openDatabase();
+ if(vorlesungsplanDBHelper == null)
+ vorlesungsplanDBHelper = new VorlesungsplanDatabaseHelper(AppContext, database);
+ return vorlesungsplanDBHelper.getCourseExamEvents(coursename, timeFrom, timeTo);
+ }
+
public void updateMensaTagesplan(MensaTagesplan plan) {
+ openDatabase();
if(mensaplanDBHelper == null)
mensaplanDBHelper = new MensaplanDatabaseHelper(AppContext, database);
mensaplanDBHelper.updateMensaTagesplan(plan);
}
public MensaTagesplan[] getMensaTagesplan(long timeFrom, long timeTo) {
+ openDatabase();
if(mensaplanDBHelper == null)
mensaplanDBHelper = new MensaplanDatabaseHelper(AppContext, database);
return mensaplanDBHelper.getMensaTagesplan(timeFrom, timeTo);
}
public long[] getDaysWithPlanData(long timeFrom, long timeTo) {
+ openDatabase();
if(mensaplanDBHelper == null)
mensaplanDBHelper = new MensaplanDatabaseHelper(AppContext, database);
return mensaplanDBHelper.getDaysWithPlanData(timeFrom, timeTo);
}
public long[] getWeeksWithPlanData(long timeFrom, long timeTo) {
+ openDatabase();
if(mensaplanDBHelper == null)
mensaplanDBHelper = new MensaplanDatabaseHelper(AppContext, database);
return mensaplanDBHelper.getWeeksWithPlanData(timeFrom, timeTo);
}
public void updateNewsItem(NewsItem news) {
+ openDatabase();
if(newsDBHelper == null)
newsDBHelper = new NewsDatabaseHelper(AppContext, database);
newsDBHelper.updateNewsItem(news);
}
public NewsItem[] getNewsItems(String source, long timeFrom, long timeTo) {
+ openDatabase();
if(newsDBHelper == null)
newsDBHelper = new NewsDatabaseHelper(AppContext, database);
return newsDBHelper.getNewsItems(source, timeFrom, timeTo);