Grundaufbau der App
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / search / SearchHelper.java
1 package de.dhbwloe.campusapp.search;
2
3 import android.util.Log;
4
5 import com.loopj.android.http.AsyncHttpResponseHandler;
6
7 import org.jsoup.Jsoup;
8 import org.jsoup.nodes.Document;
9
10 import java.io.UnsupportedEncodingException;
11 import java.util.List;
12
13 import cz.msebera.android.httpclient.Header;
14 import de.dhbwloe.campusapp.fragments.AppSearchListItem;
15
16 /**
17  * Created by pk910 on 25.01.2016.
18  */
19 public abstract class SearchHelper {
20
21     protected boolean bRequestRunning = false;
22     protected boolean bHtmlParser;
23     protected SearchResultListener oRequestListener = null;
24
25     public SearchHelper(boolean htmlparser) {
26         bHtmlParser = htmlparser;
27     }
28
29     protected void performWebRequest(String keywords) {
30         AsyncHttpResponseHandler handler = new AsyncHttpResponseHandler() {
31             @Override
32             public void onStart() {
33             }
34             @Override
35             public void onSuccess(int statusCode, Header[] headers, byte[] response) {
36                 boolean parsedHttp = false;
37                 if(bHtmlParser) {
38                     try {
39                         Document document = Jsoup.parse(new String(response));
40
41                         parsedHttp = true;
42                         bRequestRunning = false;
43                         try {
44                             List<AppSearchListItem> results = onHtmlDocumentReceived(document);
45                             oRequestListener.onSearchResultsReceived(results);
46                         } catch(Exception e) {
47                             oRequestListener.onSearchFailed(e.getMessage());
48                         }
49                     } catch(Exception e) {
50                     }
51                 }
52                 if(!parsedHttp) {
53                     try {
54                         List<AppSearchListItem> results = onPlainTextReceived(response);
55                         oRequestListener.onSearchResultsReceived(results);
56                     } catch(Exception e) {
57                         oRequestListener.onSearchFailed(e.getMessage());
58                     }
59                 }
60                 bRequestRunning = false;
61             }
62             @Override
63             public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
64                 String error = null;
65                 try {
66                     error = new String(errorResponse, "US-ASCII");
67                 } catch (Exception e1) {
68                 }
69                 Log.i("HTTPClient", "  Error: " + statusCode + " - " + error);
70                 bRequestRunning = false;
71                 oRequestListener.onSearchFailed(statusCode + ": " + error);
72             }
73             @Override
74             public void onRetry(int retryNo) {
75             }
76         };
77         processWebRequest(handler, keywords);
78     }
79
80     public void search(String keywords, SearchResultListener resultlistener) {
81         if(bRequestRunning) {
82             resultlistener.onSearchFailed("another request is already running!");
83             return;
84         }
85         oRequestListener = resultlistener;
86         bRequestRunning = true;
87
88         performWebRequest(keywords);
89     }
90
91     protected abstract void processWebRequest(AsyncHttpResponseHandler handler, String keywords);
92     protected abstract List<AppSearchListItem> onHtmlDocumentReceived(Document document);
93     protected abstract List<AppSearchListItem> onPlainTextReceived(byte[] data);
94 }