Family-Map-Project / FamilyMapServer / FamilyMapServerStudent-master / src / handlers / PersonHandler.java
PersonHandler.java
Raw
package handlers;

import com.google.gson.Gson;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import dao.DataAccessException;
import request.PersonRequest;
import request.RegisterRequest;
import result.ClearResult;
import result.PersonResult;
import result.PersonsResult;
import result.RegisterResult;
import services.PersonService;

import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class PersonHandler implements HttpHandler
{
    public void handle(HttpExchange exchange) throws IOException
    {
        try
        {
            if (exchange.getRequestMethod().equals("GET")) {
                Headers reqHeaders = exchange.getRequestHeaders();

                if (reqHeaders.containsKey("Authorization")) {
                    String authToken = reqHeaders.getFirst("Authorization");

                    Gson gson = new Gson();

                    String URLPath = exchange.getRequestURI().getPath();

                    List<String> urlElements = new ArrayList<>();
                    Scanner s = new Scanner(URLPath).useDelimiter("/");

                    while (s.hasNext())
                    {
                        urlElements.add(s.next());
                    }

                    if (urlElements.size() > 1)
                    {
                        PersonRequest request = new PersonRequest(urlElements.get(1), authToken);
                        PersonService service = new PersonService();
                        PersonResult result = service.getPerson(request);

                        if(!result.isSuccess())
                        {
                            exchange.sendResponseHeaders(HttpURLConnection.HTTP_BAD_REQUEST, 0);
                        }
                        else
                        {
                            exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, 0);
                        }

                        DefaultHandler handler = new DefaultHandler();

                        OutputStream resBody = exchange.getResponseBody();
                        String jsonString = gson.toJson(result);
                        handler.writeString(jsonString, resBody);
                        resBody.close();

                    }
                    else
                    {
                        PersonRequest request = new PersonRequest();
                        request.setAuthToken(authToken);
                        PersonService service = new PersonService();
                        PersonsResult result = service.getPersons(request);

                        if(!result.isSuccess())
                        {
                            exchange.sendResponseHeaders(HttpURLConnection.HTTP_BAD_REQUEST, 0);
                        }
                        else
                        {
                            exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, 0);
                        }

                        DefaultHandler handler = new DefaultHandler();

                        OutputStream resBody = exchange.getResponseBody();
                        String jsonString = gson.toJson(result);
                        handler.writeString(jsonString, resBody);
                        resBody.close();
                    }
                }
            }
        }
        catch (IOException | DataAccessException e)
        {
            exchange.sendResponseHeaders(HttpURLConnection.HTTP_SERVER_ERROR, 0);
            exchange.getResponseBody().close();
            e.printStackTrace();
        }
    }
}