package de.htwdd.classes; import android.content.ContentValues; import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.preference.PreferenceManager; import org.json.JSONArray; import org.json.JSONObject; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collections; import de.htwdd.DatabaseHandlerNoten; import de.htwdd.types.Grade; import de.htwdd.types.Stats; public class Noten { private String sNummer; private String RZLogin; private DatabaseHandlerNoten mDbHelper; private Context context; public Grade[] noten; public Noten(Context context) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); sNummer = sharedPreferences.getString("bib", ""); mDbHelper = new DatabaseHandlerNoten(context); this.context = context; // Encode the Password try { RZLogin = URLEncoder.encode(sharedPreferences.getString("RZLogin", ""), "UTF-8"); } catch (Exception e) { RZLogin = sharedPreferences.getString("RZLogin", ""); } } public int getNotenHIS() { noten = new Grade[0]; JSONObject object; ArrayList<Grade> arrayList = new ArrayList<Grade>(); Grade grade; // Überprüfe Internetverbindung if (!HTTPDownloader.CheckInternet(context)) return 900; // Lade Studiengänge des Studenten HTTPDownloader downloader = new HTTPDownloader("https://wwwqis.htw-dresden.de/appservice/v2/getcourses"); downloader.setBasicAuth("s" + sNummer, RZLogin); downloader.context = context; String response = downloader.getString(); if (downloader.ResponseCode != 200) return downloader.ResponseCode; try { JSONArray arrayCourses = new JSONArray(response); int countCourses = arrayCourses.length(); for (int i = 0; i < countCourses; i++) { // Hole JSON-Objekt object = arrayCourses.getJSONObject(i); // Lade die Noten je nach Studiengang downloader = new HTTPDownloader("https://wwwqis.htw-dresden.de/appservice/v2/getgrades?AbschlNr=" + object.getString("AbschlNr") + "&StgNr=" + object.getString("StgNr") + "&POVersion=" + object.getInt("POVersion")); downloader.setBasicAuth("s" + sNummer, RZLogin); downloader.context = context; response = downloader.getString(); // Überprüfe HTTP- ResonseCde if (downloader.ResponseCode != 200) return downloader.ResponseCode; JSONArray array = new JSONArray(response); int countGrade = array.length(); for (int x = 0; x < countGrade; x++) { // Hole JSON-Objekt object = array.getJSONObject(x); // Noten anlegen grade = new Grade(); grade.Modul = object.getString("text"); grade.Vermerk = object.optString("note"); grade.Status = object.optString("state"); grade.Credits = Float.parseFloat(object.getString("credits")); grade.Versuch = Short.parseShort(object.getString("tries")); grade.Semester = object.getInt("semester"); grade.Kennzeichen= object.getString("form"); if (!object.isNull("grade")) grade.Note = (float)object.getDouble("grade")/100; else grade.Note = 0f; arrayList.add(grade); } Collections.reverse(arrayList); noten = arrayList.toArray(new Grade[arrayList.size()]); } } catch (Exception e) { return 999; } return downloader.ResponseCode; } public void getNotenLocal() { // Gets the data repository in read mode SQLiteDatabase db = mDbHelper.getReadableDatabase(); // Define a projection that specifies which columns from the database you will actually use after this query. String[] projection = { DatabaseHandlerNoten.COLUMN_NAME_MODUL, DatabaseHandlerNoten.COLUMN_NAME_Note, DatabaseHandlerNoten.COLUMN_NAME_VERMERK, DatabaseHandlerNoten.COLUMN_NAME_STATUS, DatabaseHandlerNoten.COLUMN_NAME_CREDITS, DatabaseHandlerNoten.COLUMN_NAME_VERSUCH, DatabaseHandlerNoten.COLUMN_NAME_SEMESTER, DatabaseHandlerNoten.COLUMN_NAME_KENNZEICHEN }; Cursor cursor = db.query(DatabaseHandlerNoten.TABLE_NAME, projection, null, null,null,null,null); if (cursor.moveToFirst()) { ArrayList<Grade> arrayList = new ArrayList<Grade>(); do { Grade grade = new Grade(); grade.Modul = cursor.getString(0); grade.Note = Float.parseFloat(cursor.getString(1)); grade.Vermerk = cursor.getString(2); grade.Status = cursor.getString(3); grade.Credits = Float.parseFloat(cursor.getString(4)); grade.Versuch = Short.parseShort(cursor.getString(5)); grade.Semester = cursor.getInt(6); grade.Kennzeichen = cursor.getString(7); arrayList.add(grade); }while (cursor.moveToNext()); noten = arrayList.toArray(new Grade[arrayList.size()]); } else noten = new Grade[0]; cursor.close(); db.close(); } public void saveNotenLocal() { // Gets the data repository in write mode SQLiteDatabase db = mDbHelper.getWritableDatabase(); mDbHelper.clearTable(db); for (Grade note : noten) { // Create a new map of values, where column names are the keys ContentValues values = new ContentValues(); values.put(DatabaseHandlerNoten.COLUMN_NAME_MODUL, note.Modul); values.put(DatabaseHandlerNoten.COLUMN_NAME_Note, note.Note); values.put(DatabaseHandlerNoten.COLUMN_NAME_VERMERK, note.Vermerk); values.put(DatabaseHandlerNoten.COLUMN_NAME_STATUS, note.Status); values.put(DatabaseHandlerNoten.COLUMN_NAME_CREDITS, note.Credits); values.put(DatabaseHandlerNoten.COLUMN_NAME_VERSUCH, note.Versuch); values.put(DatabaseHandlerNoten.COLUMN_NAME_SEMESTER, note.Semester); values.put(DatabaseHandlerNoten.COLUMN_NAME_KENNZEICHEN, note.Kennzeichen); // Insert the new row, returning the primary key value of the new row long newRowId = db.insert(DatabaseHandlerNoten.TABLE_NAME, null, values); } db.close(); } public Stats[] getStats() { // Gets the data repository in read mode SQLiteDatabase db = mDbHelper.getReadableDatabase(); ArrayList<Stats> arrayList = new ArrayList<Stats>(); Cursor cursor = db.rawQuery("SELECT Noten.Semester, MAX(Note), MIN(Note), AnzahlNoten,SUM(Credits),SUM(Note*Credits)" + " FROM Noten" + " JOIN (SELECT Semester, Count(Credits) AS AnzahlNoten FROM Noten WHERE Credits != 0.0 GROUP BY Semester) AS UA" + " ON UA.Semester == Noten.Semester" + " WHERE NOTE != 0" + " GROUP BY Noten.Semester" + " ORDER BY Noten.Semester DESC", null); if (cursor.moveToFirst()) { Stats total = new Stats(); total.Semester = "Studium"; total.GradeBest = 5.0f; total.GradeWorst = 1.0f; do { Stats stats = new Stats(); stats.Semester = getSemester(Integer.parseInt(cursor.getString(0))); stats.GradeWorst = cursor.getFloat(1); stats.GradeBest = cursor.getFloat(2); stats.GradeCount = cursor.getInt(3); stats.Credits = cursor.getFloat(4); stats.Average = cursor.getFloat(5)/stats.Credits; total.GradeBest = Math.min(total.GradeBest,cursor.getFloat(2)); total.GradeWorst = Math.max(total.GradeWorst,cursor.getFloat(1)); total.Credits += cursor.getFloat(4); total.GradeCount += cursor.getInt(3); total.Average += cursor.getFloat(5); arrayList.add(stats); }while (cursor.moveToNext()); total.Average = total.Average / total.Credits; arrayList.add(0, total); cursor.close(); db.close(); return arrayList.toArray(new Stats[arrayList.size()]); } cursor.close(); db.close(); return new Stats[0]; } public static String getSemester(Integer Semester) { Semester-=20000; if (Semester%2 == 1) return "Sommersemester " + Semester / 10; else return "Wintersemester " + Semester / 10 + " / " + ((Semester / 10)+1); } }