Datenbankname angepasst
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / database / DatabaseManager.java
index 43a5fd5666c8326560a98bffd067f31cc0d510d1..6a515b42a3c97ed0d6676c42928ab1d9bcf85f9a 100644 (file)
@@ -6,6 +6,7 @@ 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 +31,8 @@ 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;
     private CampusAppContext AppContext;
     private SQLiteDatabase database;
     private NewsDatabaseHelper newsDBHelper;
@@ -43,8 +44,15 @@ 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);");
 
         Cursor resultSet = database.rawQuery("Select * from Version", null);
@@ -60,7 +68,8 @@ public class DatabaseManager {
         if(version < DATABASE_VERSION)
             upgradeTables(version, DATABASE_VERSION);
 
-
+        //database.execSQL("DELETE FROM CourseCalendar");
+        //database.execSQL("DELETE FROM CourseCalendarEvent");
     }
 
     private void upgradeTables(int oldVersion, int newVersion) {
@@ -109,7 +118,6 @@ public class DatabaseManager {
                     "(" +
                     "CardId INT, " +
                     "UpdateTime INT," +
-                    "CardData TEXT, " +
                     "CardBalance INT, " +
                     "CardLastTransaction INT, " +
                     "PRIMARY KEY (CardId, UpdateTime)" +
@@ -156,13 +164,18 @@ 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) {
+        openDatabase();
         for(int i = 0; i < indices.length; i++) {
             String[] whereArgs = new String[] {
                     indices[i].getKeyName()
@@ -196,6 +209,7 @@ public class DatabaseManager {
     }
 
     public SearchIndices[] performSearchRequest(String query, int maxResults) {
+        openDatabase();
         String[] whereArgs = new String[] {
                 "%" + query + "%"
         };
@@ -229,6 +243,7 @@ public class DatabaseManager {
     }
 
     public void setRuntimeCache(String name, String value) {
+        openDatabase();
         long now = (new Date()).getTime() / 1000;
         String[] whereArgs = new String[] {
                 name
@@ -262,6 +277,7 @@ public class DatabaseManager {
     }
 
     public String getRuntimeCache(String name) {
+        openDatabase();
         String value = null;
         String[] whereArgs = new String[] {
                 name
@@ -275,17 +291,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 +312,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 +324,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<NfcCardData> nfcCardDatas = new ArrayList<NfcCardData>();
         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 +347,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);