From f71be79fc71a06c656311259fe3d5b6a278917da Mon Sep 17 00:00:00 2001
From: Ivan Olexyn <ivan@olexyn.com>
Date: Sat, 18 Apr 2020 23:51:11 +0200
Subject: [PATCH] + rework messages.

---
 mispclient/src/ClientServlet.java  | 326 ++++++++++++-----------------
 mispclient/src/DoClientThings.java |  71 -------
 2 files changed, 130 insertions(+), 267 deletions(-)
 delete mode 100644 mispclient/src/DoClientThings.java

diff --git a/mispclient/src/ClientServlet.java b/mispclient/src/ClientServlet.java
index 8c91b95..c7f40fb 100644
--- a/mispclient/src/ClientServlet.java
+++ b/mispclient/src/ClientServlet.java
@@ -6,9 +6,10 @@
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.ArrayList;
@@ -17,247 +18,180 @@ import java.util.List;
 
 public class ClientServlet extends HttpServlet {
 
-    private static final String MISP_BRIDGE_URL = "http://localhost:9090/mispbridge/core";
+    protected static final String MISP_BRIDGE_URL = "http://localhost:9090/mispbridge/core";
 
     public List<Ride> availableRides = new ArrayList<>();
     public List<Ride> reservedRides = new ArrayList<>();
-    private List<Ride> newRequests = new ArrayList<>();
-    private List<Ride> forwardedRequests = new ArrayList<>();
-    private List<Ride> newData = new ArrayList<>();
-    private List<Ride> forwardedData = new ArrayList<>();
+    public List<Ride> pendingRequests = new ArrayList<>();
+    public List<Ride> pendingData = new ArrayList<>();
 
     public ClientServlet() {
-        new DoClientThings().start(this);
-    }
-
-
-
-
-
-
-
-
-
-
-
-
-
-    // handle OK (Ride)
-    // remove Ride from AvailableRides
-    // add Ride to ReservedRides
-
-    // handle OK (Ride)(Request)
-    // remove Ride from AvailableRides
-    // add Request to NewRequest
-    // send GET (Request)
-    // remove Ride from NewRequest
-    // add Ride to ForwardedRequest
-
-    // handle OK (Data)
-    // remove Ride from ForwardedRequest
-    // add Ride to NewData
-    // send GET (Ride)(Data)
-    // remove Ride from NewData
-    // add Ride to ForwardedData
-
-    // handle OK (EOL)
-    // remove Ride from ForwardedData
-    // add Ride to EOl
-
-
-    // # send POST (Ride)
 
-    // # send GET (Ride)
-
-    // # send GET (Request)
-
-    // # send GET (Ride)(Data)
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
-        response.setContentType("text/html");
-        PrintWriter writer = response.getWriter();
-        writer.println("<html><head><title>MispClient</title></head><body bgcolor=white>");
-        writer.println("</body></html>");
-    }
-
-    @Override
-    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
+        // Thread : while AvailableRides < 256 , add Ride to AvailableRides , send POST (Ride) [DONE]
+        new Thread(new PostRideRunnable(this)).start();
 
+        // Thread : for Rides in ReservedRides, send GET (Ride)
+        new Thread(new GetRideRunnable(this)).start();
     }
 
-    private String make2ColumnRow(String one, String two) {
-        String sb = "<tr>" + "<td>" + one + "</td>" + "<td>" + two + "</td>" + "</tr>";
-        return sb;
-    }
-
-
-    private String sendGet() throws IOException {
 
+    /**
+     * # send POST (Ride)
+     * Generated by Loop
+     */
+    Ride sendPostRide(Ride oldRide) throws IOException, ServletException {
 
-        URL url = new URL(MISP_BRIDGE_URL);
-        HttpURLConnection con = (HttpURLConnection) url.openConnection();
+        HttpURLConnection connection = ConnectionHelper.make("POST", MISP_BRIDGE_URL);
 
-        // By default it is GET request
-        con.setRequestMethod("GET");
-
-        //add request header
-        con.setRequestProperty("User-Agent", "USER_AGENT");
-
-        int responseCode = con.getResponseCode();
-        System.out.println("Sending get request : " + url);
-        System.out.println("Response code : " + responseCode);
-
-        // Reading response from input Stream
-        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
-        String output;
-        StringBuffer response = new StringBuffer();
+        // send POST (Ride)
+        availableRides.add(oldRide);
+        connection.setDoOutput(true);
+        DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
+        outputStream.writeBytes(oldRide.json());
+        outputStream.flush();
+        outputStream.close();
 
-        while ((output = in.readLine()) != null) {
-            response.append(output);
+        // handle OK (Ride)
+        // remove Ride from AvailableRides
+        // add Ride to ReservedRides
+        if (connection.getResponseCode() == 200) {
+            Ride parsedRide = ConnectionHelper.parseRide(connection);
+            if (parsedRide.equals(oldRide)) {
+                availableRides.remove(oldRide);
+                reservedRides.add(parsedRide);
+                return parsedRide;
+            }
         }
-        in.close();
-
-
-        return response.toString();
-        //printing result from response
-
-
+        return null;
     }
 
 
-    Ride sendPostRide(Ride ride) throws IOException, ServletException {
-
-        URL url = new URL(MISP_BRIDGE_URL);
-        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
-
-        // prepare
-        connection.setRequestMethod("POST");
-        connection.setRequestProperty("User-Agent", "USER_AGENT");
-        connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
-        connection.setRequestProperty("Content-Type", "application/json");
-
-        availableRides.add(ride);
+    /**
+     * # send GET (Ride)
+     * Generated by Loop
+     */
+    Ride sendGetRide(Ride oldRide) throws IOException {
 
+        HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL);
 
-        // send POST
+        // send GET (Ride)
         connection.setDoOutput(true);
         DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
-        outputStream.writeBytes(ride.json());
+        outputStream.writeBytes(oldRide.json());
         outputStream.flush();
         outputStream.close();
 
-
-        // read OK
-        int responseCode = connection.getResponseCode();
-
-        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
-        String output;
-        StringBuilder response = new StringBuilder();
-
-        while ((output = in.readLine()) != null) {
-            response.append(output);
+        // handle OK (Ride)(Request)
+        // remove Ride from ReservedRides
+        // add Ride to PendingRequests
+        // send GET (Request)
+        if (connection.getResponseCode() == 200) {
+            Ride parsedRide = ConnectionHelper.parseRide(connection);
+            if (parsedRide.getRequest() != null) {
+                reservedRides.remove(oldRide);
+                pendingRequests.add(parsedRide);
+                sendGetRequest(parsedRide);
+                return parsedRide;
+            }
         }
-        in.close();
-
-
-        // process
-        availableRides.remove(ride);
-        reservedRides.add(ride);
-        return ride;
+        return null;
     }
 
+    /**
+     * # send GET (Request) to App
+     */
+    Ride sendGetRequest(Ride oldRide) throws IOException {
+
+        // send FOO
+        // TODO make sure as many as possible tyes of requests can be forwarded.
+
+        // handle OK (Data)
+        // remove Ride from PendingRequests
+        // add Ride to PendingData
+        // send GET (Ride)(Data)
+        String data = "DATA";
+        pendingRequests.remove(oldRide);
+        Ride newRide = oldRide;
+        newRide.setData(data);
+        pendingData.add(newRide);
+        sendGetRideRequestData(newRide);
+        return newRide;
+    }
 
-    Ride sendGetRide(Ride ride) throws IOException {
-
-        URL url = new URL(MISP_BRIDGE_URL);
-        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
 
-        // prepare
-        connection.setRequestMethod("GET");
-        connection.setRequestProperty("User-Agent", "USER_AGENT");
-        connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
-        connection.setRequestProperty("Content-Type", "application/json");
+    /**
+     * # send GET (Ride)(Request)(Data)
+     */
+    Ride sendGetRideRequestData(Ride oldRide) throws IOException {
 
+        HttpURLConnection connection = ConnectionHelper.make("GET", MISP_BRIDGE_URL);
 
-        // send POST
+        // send GET (Ride)(Request)(Data)
         connection.setDoOutput(true);
         DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
-        outputStream.writeBytes(ride.json());
+        outputStream.writeBytes(oldRide.json());
         outputStream.flush();
         outputStream.close();
 
-
-        // read OK
-        int responseCode = connection.getResponseCode();
-
-        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
-        String output;
-        StringBuilder response = new StringBuilder();
-
-        while ((output = in.readLine()) != null) {
-            response.append(output);
+        // handle OK (EOL)
+        // remove Ride from PendingData
+        // add Ride to EOl
+        if (connection.getResponseCode() == 200) {
+            Ride shellIdRide = ConnectionHelper.parseRide(connection);
+            if (shellIdRide.getRideID() != null) {
+                pendingData.remove(oldRide);
+            }
         }
-        in.close();
-
-
-        Ride rideRequest = new Ride(response.toString());
-
-
-        // process
-        // TODO add checks
-        reservedRides.remove(ride);
-        newRequests.add(rideRequest);
-        sendGetRequest(rideRequest.getRequest());
-        newRequests.remove(rideRequest);
-        forwardedRequests.add(rideRequest);
-
-        return ride;
+        return null;
     }
 
-    Ride sendGetRequest(String request) throws IOException {
-
-        URL url = new URL(MISP_BRIDGE_URL);
-        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
-
-        // prepare
-        connection.setRequestMethod("GET");
-        connection.setRequestProperty("Content-Type", "application/json");
 
+}
 
-        // TODO replace
-        Ride ride = new Ride();
-
-        // send POST
-        connection.setDoOutput(true);
-        DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
-        outputStream.writeBytes(ride.json());
-        outputStream.flush();
-        outputStream.close();
 
+/**
+ * While AvailableRides < 256 ,
+ * add Ride to AvailableRides ,
+ * send POST (Ride).
+ */
+class PostRideRunnable implements Runnable {
 
-        // read OK
-        int responseCode = connection.getResponseCode();
+    ClientServlet clientServlet;
 
-        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
-        String output;
-        StringBuilder response = new StringBuilder();
+    public PostRideRunnable(ClientServlet clientServlet) {
+        this.clientServlet = clientServlet;
+    }
 
-        while ((output = in.readLine()) != null) {
-            response.append(output);
+    @Override
+    public void run() {
+        while (true) {
+            if (clientServlet.availableRides.size() < 1) {
+                try {clientServlet.sendPostRide(new Ride());} catch (IOException | ServletException e) { e.printStackTrace(); }
+            }
+            try {Thread.sleep(500);} catch (InterruptedException e) { e.printStackTrace(); }
         }
-        in.close();
-
+    }
+}
 
-        Ride rideRequest = new Ride(response.toString());
 
+/**
+ * For Rides in ReservedRides,
+ * send GET (Ride).
+ */
+class GetRideRunnable implements Runnable {
+    ClientServlet clientServlet;
 
-        // process
-        // TODO add checks
-        reservedRides.remove(ride);
-        newRequests.add(ride);
-        return ride;
+    public GetRideRunnable(ClientServlet clientServlet) {
+        this.clientServlet = clientServlet;
     }
 
-
-}
+    @Override
+    public void run() {
+        while (true) {
+            for (Ride reservedRide : clientServlet.reservedRides) {
+                try {clientServlet.sendGetRide(reservedRide);} catch (IOException e) { e.printStackTrace(); }
+            }
+            try {Thread.sleep(500);} catch (InterruptedException e) { e.printStackTrace(); }
+        }
+    }
+}
\ No newline at end of file
diff --git a/mispclient/src/DoClientThings.java b/mispclient/src/DoClientThings.java
deleted file mode 100644
index 6a67422..0000000
--- a/mispclient/src/DoClientThings.java
+++ /dev/null
@@ -1,71 +0,0 @@
-import javax.servlet.ServletException;
-import java.io.IOException;
-
-public class DoClientThings {
-
-
-    public void start(ClientServlet clientServlet) {
-        // Thread 1
-        // while AvailableRides < 256 , add Ride to AvailableRides , send POST (Ride) [DONE]
-        Runnable postRideRunnable = new PostRideRunnable(clientServlet);
-        Thread postRideThread = new Thread(postRideRunnable);
-        postRideThread.start();
-
-        // Thread 2
-        // for Rides in ReservedRides, send GET (Ride) [DONE]
-        Runnable getRideRunnable = new GetRideRunnable(clientServlet);
-        Thread getRideThread = new Thread(getRideRunnable);
-        getRideThread.start();
-    }
-
-
-    /**
-     * While AvailableRides < 256 ,
-     * add Ride to AvailableRides ,
-     * send POST (Ride).
-     */
-    private class PostRideRunnable implements Runnable {
-
-        ClientServlet clientServlet;
-
-        public PostRideRunnable(ClientServlet clientServlet) {
-            this.clientServlet = clientServlet;
-        }
-
-        @Override
-        public void run() {
-            while (true) {
-                if (clientServlet.availableRides.size() < 256) {
-                    try {clientServlet.sendPostRide(new Ride());} catch (IOException | ServletException e) { e.printStackTrace(); }
-                }
-                try {Thread.sleep(500);} catch (InterruptedException e) { e.printStackTrace(); }
-            }
-        }
-    }
-
-
-    /**
-     * For Rides in ReservedRides,
-     * send GET (Ride).
-     */
-    private class GetRideRunnable implements Runnable {
-        ClientServlet clientServlet;
-
-        public GetRideRunnable(ClientServlet clientServlet) {
-            this.clientServlet = clientServlet;
-        }
-
-        @Override
-        public void run() {
-            while (true) {
-                for (Ride reservedRide : clientServlet.reservedRides) {
-                    try {clientServlet.sendGetRide(reservedRide);} catch (IOException e) { e.printStackTrace(); }
-                }
-                try {Thread.sleep(500);} catch (InterruptedException e) { e.printStackTrace(); }
-            }
-        }
-    }
-
-}
-
-