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

import com.google.gson.Gson;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import dao.DataAccessException;
import request.FillRequest;
import request.LoadRequest;
import request.PersonRequest;
import result.FillResult;
import result.LoadResult;
import result.PersonResult;
import result.PersonsResult;
import services.FillService;

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 FillHandler implements HttpHandler
{
    final int DEFAULT_GENERATIONS = 4;

    public void handle(HttpExchange exchange) throws IOException
    {
        try
        {
            if (exchange.getRequestMethod().equals("POST")) {
                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() == 3 && Integer.parseInt(urlElements.get(2)) > 0)
                {
                    FillRequest request = new FillRequest(urlElements.get(1), Integer.parseInt(urlElements.get(2)));
                    FillService service = new FillService();
                    FillResult result = service.fill(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
                {
                    FillRequest request = new FillRequest(urlElements.get(1), DEFAULT_GENERATIONS);
                    FillService service = new FillService();
                    FillResult result = service.fill(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();
        }
    }
}