Autocomplete Feature für Kursnamen hinzugefügt (eigene API, da von DHBW nicht bereitg...
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / coursenames / CourseNameManager.java
diff --git a/app/src/main/java/de/dhbwloe/campusapp/coursenames/CourseNameManager.java b/app/src/main/java/de/dhbwloe/campusapp/coursenames/CourseNameManager.java
new file mode 100644 (file)
index 0000000..546238b
--- /dev/null
@@ -0,0 +1,98 @@
+package de.dhbwloe.campusapp.coursenames;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.net.URLEncoder;
+import java.util.ArrayList;
+
+import de.dhbwloe.campusapp.CampusAppContext;
+import de.dhbwloe.campusapp.network.JsonRequestHelper;
+
+/**
+ * Created by pk910 on 09.03.2016.
+ */
+public class CourseNameManager extends JsonRequestHelper {
+    private static final String COURSENAMES_API_HOST = "http://dev.pk910.de/DHBWCampusCourses";
+
+    private ArrayList<CourseNameManagerInterface> aCallbackInterfaces = new ArrayList<CourseNameManagerInterface>();
+    private boolean bSyncRequestRunning;
+
+    public void synchronizeCourseNames(CourseNameManagerInterface callback) {
+        aCallbackInterfaces.add(callback);
+        if(bSyncRequestRunning)
+            return;
+
+        bSyncRequestRunning = true;
+
+        String courseNamesSyncUrl = COURSENAMES_API_HOST + "?action=sync";
+        CourseName lastName = CampusAppContext.getInstance().getDatabaseManager().getLatestCourseName();
+        if(lastName != null)
+            courseNamesSyncUrl += "&time="+Long.toString(lastName.getLastUpdate());
+        requestJsonFromWeb(courseNamesSyncUrl);
+    }
+
+    public void addCourseName(String courseName) {
+        String courseNamesAddUrl = "?action=add&course="+ URLEncoder.encode(courseName);
+        JsonRequestHelper addCourseReqHelper = new JsonRequestHelper() {
+            @Override
+            protected void onJsonReceived(JSONObject json) {
+                /* unused - no JSON Response from action=add */
+            }
+
+            @Override
+            protected void onJsonReceived(JSONArray json) {
+                /* unused - no JSON Response from action=add */
+            }
+
+            @Override
+            protected void onTextReceived(String response) {
+
+            }
+
+            @Override
+            protected void onJsonRequestFail(int statusCode, String errorMessage) {
+
+            }
+        };
+    }
+
+
+    @Override
+    protected void onJsonReceived(JSONObject json) {
+        /* unused - we'll receive text (error) or a JSON array of results. */
+    }
+
+    @Override
+    protected void onJsonReceived(JSONArray json) {
+        for(int i = 0; i < json.length(); i++) {
+            try {
+                JSONObject courseNameEntry = json.getJSONObject(i);
+
+                String courseName = courseNameEntry.getString("name");
+                String courseStatus = courseNameEntry.getString("status");
+                long courseUpdate = courseNameEntry.getLong("lastupdate");
+
+                CourseName course = new CourseName(courseName, courseStatus, courseUpdate);
+                CampusAppContext.getInstance().getDatabaseManager().addCourseName(course);
+            } catch (JSONException e) {
+                e.printStackTrace();
+            }
+        }
+        for(CourseNameManagerInterface callback : aCallbackInterfaces)
+            callback.onCourseNamesSynchronized();
+    }
+
+    @Override
+    protected void onTextReceived(String response) {
+        for(CourseNameManagerInterface callback : aCallbackInterfaces)
+            callback.onCourseNamesFailed(response);
+    }
+
+    @Override
+    protected void onJsonRequestFail(int statusCode, String errorMessage) {
+        for(CourseNameManagerInterface callback : aCallbackInterfaces)
+            callback.onCourseNamesFailed(errorMessage);
+    }
+}