/* * Copyright (c) 2015. , Beaufort 8 * released under MIT License * http://opensource.org/licenses/MIT */ package de.elggconnect.elggconnectclient.webservice; import de.elggconnect.elggconnectclient.manager.StatusUserManager; import de.elggconnect.elggconnectclient.model.StatusUserObject; import de.elggconnect.elggconnectclient.util.UserAuthentication; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.LinkedList; /** * WebServiceMethod for the StatusUser HTTP API Method * * @author Alexander Stifel * @author Beaufort 8 */ public class StatusUser implements IWebServiceMethod { private static final String APIMETHOD = "?method=status.user"; private static final String USER_AGENT = "ELGGCONNECT"; private String authToken; private UserAuthentication userAuthentication = UserAuthentication.getInstance(); private StatusUserManager statusUserManager = StatusUserManager.getInstance(); private Long status = Long.valueOf(-1); /** * Constructor * * @param authToken */ public StatusUser(String authToken) { this.authToken = authToken; } /** * Run the StatusUser Web API Method */ @Override public Long execute() { //Build URL for API Method String urlParameters = APIMETHOD + "&auth.token=" + this.authToken; String url = userAuthentication.getBaseURL() + urlParameters; //Try to execute the API Method try { URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // optional default is GET con.setRequestMethod("GET"); //add user agent to the request header con.setRequestProperty("User-Agent", USER_AGENT); BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String inputLine; StringBuilder response = new StringBuilder(); //Read the response JSON while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); JSONObject json = (JSONObject) new JSONParser().parse(response.toString()); this.status = (Long) json.get("status"); if (this.status != -1L) { //Handle the JSON Response handleStatusUserResponse((JSONArray) json.get("result")); } } catch (Exception e) { System.err.println(e.getMessage()); } return this.status; } /** * handle the StatusUser JSON Response and store it into the StatusManager * <p> * Remove the old Data and fill it with new one * * @param result */ private void handleStatusUserResponse(JSONArray result) { LinkedList<JSONObject> statusUserObjectList = new LinkedList<>(); //Save JSON Objects from result array for (Object aResult : result) { JSONObject object = (JSONObject) aResult; statusUserObjectList.add((JSONObject) object.get("object")); } //Clear StatusUserObjects StatusUserManager.getInstance().getStatusUserObjects().clear(); //save all UserStatus objects statusUserObjectList.forEach(this::saveStatusUserObject); } /** * Helper Method to convert JSON Response to StatusUserObject * * @param object */ private void saveStatusUserObject(JSONObject object) { //get Object information from JSONObject String type = (String) object.get("type"); String name = (String) object.get("name"); String url = (String) object.get("url"); Long count = (Long) object.get("count"); String text = (String) object.get("text"); Long newCount = (Long) object.get("new"); if (type.equals("notification")) { //Save StatusObjects into Singleton List this.statusUserManager.addStatusUserObject(new StatusUserObject(type, name, count, url, text, newCount)); } else { //Save StatusObjects into Singleton List this.statusUserManager.addStatusUserObject(new StatusUserObject(type, name, count, url)); } } }