package com.example.familymap; import android.util.Log; import com.google.gson.Gson; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import request.EventRequest; import request.LoginRequest; import request.PersonRequest; import request.RegisterRequest; import result.ClearResult; import result.EventsResult; import result.LoginResult; import result.PersonsResult; import result.RegisterResult; public class ServerProxy { String serverHost; String portNumber; public ServerProxy(String serverHost, String portNumber) { this.serverHost = serverHost; this.portNumber = portNumber; } public RegisterResult register(RegisterRequest request) { Gson gson = new Gson(); try { URL url = new URL("http://" + serverHost + ":" + portNumber + "/user/register"); HttpURLConnection http = (HttpURLConnection) url.openConnection(); http.setRequestMethod("POST"); http.setDoOutput(true); http.connect(); String reqData = gson.toJson(request); OutputStream reqBody = http.getOutputStream(); writeString(reqData, reqBody); reqBody.close(); if (http.getResponseCode() == HttpURLConnection.HTTP_OK) { InputStream respBody = http.getInputStream(); String respData = readString(respBody); RegisterResult result = gson.fromJson(respData, RegisterResult.class); return result; } else { System.out.print("ERROR: " + http.getResponseMessage()); InputStream respBody = http.getErrorStream(); String respData = readString(respBody); RegisterResult result = gson.fromJson(respData, RegisterResult.class); return result; } } catch (IOException e) { e.printStackTrace(); } return null; } public LoginResult login(LoginRequest request) { Gson gson = new Gson(); try { URL url = new URL("http://" + serverHost + ":" + portNumber + "/user/login"); HttpURLConnection http = (HttpURLConnection) url.openConnection(); http.setRequestMethod("POST"); http.setDoOutput(true); http.connect(); String reqData = gson.toJson(request); OutputStream reqBody = http.getOutputStream(); writeString(reqData, reqBody); reqBody.close(); if (http.getResponseCode() == HttpURLConnection.HTTP_OK) { InputStream respBody = http.getInputStream(); String respData = readString(respBody); LoginResult result = gson.fromJson(respData, LoginResult.class); return result; } else { System.out.print("ERROR: " + http.getResponseMessage()); InputStream respBody = http.getErrorStream(); String respData = readString(respBody); LoginResult result = gson.fromJson(respData, LoginResult.class); return result; } } catch (IOException e) { e.printStackTrace(); } return null; } public PersonsResult getPersons(PersonRequest request) { Gson gson = new Gson(); try { URL url = new URL("http://" + serverHost + ":" + portNumber + "/person"); HttpURLConnection http = (HttpURLConnection) url.openConnection(); http.setRequestMethod("GET"); http.addRequestProperty("Authorization", request.getAuthToken()); http.setDoOutput(false); http.connect(); if (http.getResponseCode() == HttpURLConnection.HTTP_OK) { InputStream respBody = http.getInputStream(); String respData = readString(respBody); PersonsResult result = gson.fromJson(respData, PersonsResult.class); return result; } else { System.out.print("ERROR: " + http.getResponseMessage()); InputStream respBody = http.getErrorStream(); String respData = readString(respBody); PersonsResult result = gson.fromJson(respData, PersonsResult.class); return result; } } catch (IOException e) { e.printStackTrace(); } return null; } public EventsResult getEvents(EventRequest request) { Gson gson = new Gson(); try { URL url = new URL("http://" + serverHost + ":" + portNumber + "/event"); HttpURLConnection http = (HttpURLConnection) url.openConnection(); http.setRequestMethod("GET"); http.addRequestProperty("Authorization", request.getAuthToken()); http.setDoOutput(false); http.connect(); if (http.getResponseCode() == HttpURLConnection.HTTP_OK) { InputStream respBody = http.getInputStream(); String respData = readString(respBody); EventsResult result = gson.fromJson(respData, EventsResult.class); return result; } else { System.out.print("ERROR: " + http.getResponseMessage()); InputStream respBody = http.getErrorStream(); String respData = readString(respBody); EventsResult result = gson.fromJson(respData, EventsResult.class); return result; } } catch (IOException e) { e.printStackTrace(); } return null; } /** * Used only for JUnit testing purposes */ public ClearResult clear() { Gson gson = new Gson(); try { URL url = new URL("http://" + serverHost + ":" + portNumber + "/clear"); HttpURLConnection http = (HttpURLConnection) url.openConnection(); http.setRequestMethod("POST"); http.setDoOutput(false); http.connect(); if (http.getResponseCode() == HttpURLConnection.HTTP_OK) { InputStream respBody = http.getInputStream(); String respData = readString(respBody); ClearResult result = gson.fromJson(respData, ClearResult.class); return result; } else { System.out.print("ERROR: " + http.getResponseMessage()); InputStream respBody = http.getErrorStream(); String respData = readString(respBody); ClearResult result = gson.fromJson(respData, ClearResult.class); return result; } } catch (IOException e) { e.printStackTrace(); } return null; } public String readString(InputStream is) throws IOException { StringBuilder sb = new StringBuilder(); InputStreamReader sr = new InputStreamReader(is); char[] buf = new char[1024]; int len; while ((len = sr.read(buf)) > 0) { sb.append(buf, 0, len); } return sb.toString(); } public void writeString(String str, OutputStream os) throws IOException { OutputStreamWriter sw = new OutputStreamWriter(os); sw.write(str); sw.flush(); } }