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
1 package de.dhbwloe.campusapp.coursenames;
2
3 import org.json.JSONArray;
4 import org.json.JSONException;
5 import org.json.JSONObject;
6
7 import java.net.URLEncoder;
8 import java.util.ArrayList;
9
10 import de.dhbwloe.campusapp.CampusAppContext;
11 import de.dhbwloe.campusapp.network.JsonRequestHelper;
12
13 /**
14  * Created by pk910 on 09.03.2016.
15  */
16 public class CourseNameManager extends JsonRequestHelper {
17     private static final String COURSENAMES_API_HOST = "http://dev.pk910.de/DHBWCampusCourses";
18
19     private ArrayList<CourseNameManagerInterface> aCallbackInterfaces = new ArrayList<CourseNameManagerInterface>();
20     private boolean bSyncRequestRunning;
21
22     public void synchronizeCourseNames(CourseNameManagerInterface callback) {
23         aCallbackInterfaces.add(callback);
24         if(bSyncRequestRunning)
25             return;
26
27         bSyncRequestRunning = true;
28
29         String courseNamesSyncUrl = COURSENAMES_API_HOST + "?action=sync";
30         CourseName lastName = CampusAppContext.getInstance().getDatabaseManager().getLatestCourseName();
31         if(lastName != null)
32             courseNamesSyncUrl += "&time="+Long.toString(lastName.getLastUpdate());
33         requestJsonFromWeb(courseNamesSyncUrl);
34     }
35
36     public void addCourseName(String courseName) {
37         String courseNamesAddUrl = "?action=add&course="+ URLEncoder.encode(courseName);
38         JsonRequestHelper addCourseReqHelper = new JsonRequestHelper() {
39             @Override
40             protected void onJsonReceived(JSONObject json) {
41                 /* unused - no JSON Response from action=add */
42             }
43
44             @Override
45             protected void onJsonReceived(JSONArray json) {
46                 /* unused - no JSON Response from action=add */
47             }
48
49             @Override
50             protected void onTextReceived(String response) {
51
52             }
53
54             @Override
55             protected void onJsonRequestFail(int statusCode, String errorMessage) {
56
57             }
58         };
59     }
60
61
62     @Override
63     protected void onJsonReceived(JSONObject json) {
64         /* unused - we'll receive text (error) or a JSON array of results. */
65     }
66
67     @Override
68     protected void onJsonReceived(JSONArray json) {
69         for(int i = 0; i < json.length(); i++) {
70             try {
71                 JSONObject courseNameEntry = json.getJSONObject(i);
72
73                 String courseName = courseNameEntry.getString("name");
74                 String courseStatus = courseNameEntry.getString("status");
75                 long courseUpdate = courseNameEntry.getLong("lastupdate");
76
77                 CourseName course = new CourseName(courseName, courseStatus, courseUpdate);
78                 CampusAppContext.getInstance().getDatabaseManager().addCourseName(course);
79             } catch (JSONException e) {
80                 e.printStackTrace();
81             }
82         }
83         for(CourseNameManagerInterface callback : aCallbackInterfaces)
84             callback.onCourseNamesSynchronized();
85     }
86
87     @Override
88     protected void onTextReceived(String response) {
89         for(CourseNameManagerInterface callback : aCallbackInterfaces)
90             callback.onCourseNamesFailed(response);
91     }
92
93     @Override
94     protected void onJsonRequestFail(int statusCode, String errorMessage) {
95         for(CourseNameManagerInterface callback : aCallbackInterfaces)
96             callback.onCourseNamesFailed(errorMessage);
97     }
98 }