package com.android.iliConnect.dataproviders; import java.util.concurrent.ExecutionException; import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.conn.HttpHostConnectException; import com.android.iliConnect.MainActivity; import com.android.iliConnect.MainTabView; import com.android.iliConnect.MessageBuilder; import com.android.iliConnect.Exceptions.CoursePasswordException; import com.android.iliConnect.Exceptions.JoinCourseException; import com.android.iliConnect.Exceptions.NetworkException; import com.android.iliConnect.models.CourseData; public class LocalCourseProvider { private CourseData course = null; private RemoteCourseProvider courseProv = new RemoteCourseProvider(); private RemoteDataProvider remoteProv = MainActivity.instance.remoteDataProvider; private LocalDataProvider localProv = MainActivity.instance.localDataProvider; public String joinCourse(String ref_id, String pw) throws JoinCourseException, CoursePasswordException, NetworkException { course = new CourseData("join", localProv.auth.user_id, localProv.auth.password, localProv.auth.url_src, localProv.auth.api_src, ref_id, pw); // Kursbeitritt im Hintergrund durchfuehren courseProv.execute(course); try { // Result enthaelt die Ergebnisnachricht des http-Requests. Mit get() wird auf das Ende des // asnyc. Aufrufs gewartet. Object response = courseProv.get(); if(!(response instanceof String)) { if(response instanceof HttpHostConnectException || response instanceof ConnectTimeoutException) { throw new NetworkException("Es konnte keine Verbindung zum Server hergestellt werden"); } else { throw new NetworkException("Es ist ein Fehler bei der Anmeldung aufgetreten. Bitte versuchen Sie es erneut."); } } else { String result = (String) response; if (result.contains("JOINED")) { if (MainActivity.instance.localDataProvider.settings.sync) { // Nach Anmeldung, neu syncen. Durch null wird keine Sync-Meldung angezeigt MainActivity.instance.sync(null); } // Bei erfolgreicher Anmeldung Schreibtisch anzeigen. MainTabView.instance.changeViewTo(3); } else if (result.contains("PASSWORD_NEEDED")) { return result; } else if (result.contains("JOIN_REQUEST_SENT")) { MessageBuilder.course_join_request_send(MainTabView.instance); } else if (result.contains("WAITING_FOR_CONFIRMATION")) { MessageBuilder.course_waiting_for_confirm(MainTabView.instance); } else if (result.contains("ALREADY_SUBSCRIBED")) { MessageBuilder.course_alreadysignedin(MainTabView.instance); } else if (result.contains("not a course object")) { MessageBuilder.course_notexist(MainTabView.instance, ref_id); } else if (result.contains("WRONG_PASSWORD")) { MessageBuilder.course_passwordfalse(MainTabView.instance, ref_id); } else if (result.contains("PERMISSION_DENIED")) { MessageBuilder.course_permissondenied(MainTabView.instance, ref_id); } else { MessageBuilder.QR_error(MainTabView.instance); } } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } return null; } public String leaveCourse(String ref_id) throws JoinCourseException, NetworkException { course = new CourseData("leave", localProv.auth.user_id, localProv.auth.password, localProv.auth.url_src, localProv.auth.api_src, ref_id, null); // Abmeldung im Hintergrund durchfuehren courseProv.execute(course); try { // Result enthaelt die Ergebnisnachricht des http-Requests. Mit get() wird auf das Ende des // asnyc. Aufrufs gewartet. Object response = courseProv.get(); if (!(response instanceof String)) { if (response instanceof HttpHostConnectException) { throw new NetworkException("Es konnte keine Verbindung zum Server hergestellt werden"); } else { throw new NetworkException("Es ist ein Fehler bei der Abmeldung aufgetreten. Bitte versuchen Sie es erneut."); } } else { String result = (String) response; if (result.contains("not a course object")) { throw new JoinCourseException("Der Kurs ist nicht vorhanden"); } else if (result.contains("PERMISSION_DENIED")) { throw new JoinCourseException("Zugriff verweigert"); } else { if (MainActivity.instance.localDataProvider.settings.sync) { // Nach Abmeldung, neu syncen. Durch null wird keine Sync-Meldung angezeigt MainActivity.instance.sync(null); } MainTabView.instance.update(); return "LEFT"; } } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } return null; } }