From dc201bc7fdc36bdef9368ed3a75b0b4c6511ad6c Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Tue, 30 Jun 2020 17:46:03 +0000 Subject: [PATCH 01/18] Changed Hello World statement to greet myself instead --- .../src/main/java/com/google/sps/servlets/DataServlet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index dca6ec3..740cd36 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -27,6 +27,6 @@ public class DataServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html;"); - response.getWriter().println("

Hello world!

"); + response.getWriter().println("

Hello Ihsan Olawale!

"); } } From cb8faf0a8bd0ecc072a0f5cf229c5b8ce1228e05 Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Tue, 30 Jun 2020 18:53:47 +0000 Subject: [PATCH 02/18] Implemented feature to fetch greeting from /data and display it at top of page --- portfolio/src/main/webapp/index.html | 3 ++- portfolio/src/main/webapp/script.js | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/portfolio/src/main/webapp/index.html b/portfolio/src/main/webapp/index.html index 6f5b6f1..b1708fa 100644 --- a/portfolio/src/main/webapp/index.html +++ b/portfolio/src/main/webapp/index.html @@ -6,8 +6,9 @@ - +
+

Ihsan Olawale's Portfolio

This is Ihsan Olawale's portfolio.

I, Ihsan Olawale, am a STEP intern at Google. By the end of the internship I will have created a web project. This is practice.

diff --git a/portfolio/src/main/webapp/script.js b/portfolio/src/main/webapp/script.js index 4fed33c..6e66dea 100644 --- a/portfolio/src/main/webapp/script.js +++ b/portfolio/src/main/webapp/script.js @@ -44,3 +44,14 @@ function addRandomFact() { const factContainer = document.getElementById('fact-container'); factContainer.innerText = fact; } + +/** + * Fetches greeting from /data for use as opening greeting + */ +async function getOpeningGreeting() { + const response = await fetch('/data'); + const greeting = await response.text(); + let innerHTML = document.getElementById('opening-greeting').innerHTML; + innerHTML = greeting + innerHTML; + document.getElementById('opening-greeting').innerHTML = innerHTML; +} From eb4fb56e6ada1d2b1033fd6f279d570e67418dcd Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Tue, 30 Jun 2020 19:20:20 +0000 Subject: [PATCH 03/18] Removed unnecessary assignment and appending --- portfolio/src/main/webapp/script.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/portfolio/src/main/webapp/script.js b/portfolio/src/main/webapp/script.js index 6e66dea..a30610b 100644 --- a/portfolio/src/main/webapp/script.js +++ b/portfolio/src/main/webapp/script.js @@ -51,7 +51,5 @@ function addRandomFact() { async function getOpeningGreeting() { const response = await fetch('/data'); const greeting = await response.text(); - let innerHTML = document.getElementById('opening-greeting').innerHTML; - innerHTML = greeting + innerHTML; - document.getElementById('opening-greeting').innerHTML = innerHTML; + document.getElementById('opening-greeting').innerHTML = greeting; } From 61d7a8e61424137aaf0e922ee2b08ac6d355adc8 Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Wed, 8 Jul 2020 09:53:35 -0700 Subject: [PATCH 04/18] Resolved merge conflicts --- .../main/java/com/google/sps/servlets/DataServlet.java | 5 ----- portfolio/src/main/webapp/index.html | 4 ---- portfolio/src/main/webapp/script.js | 9 --------- 3 files changed, 18 deletions(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index 680ddeb..a2dd588 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -32,10 +32,6 @@ public class DataServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { -<<<<<<< HEAD - response.setContentType("text/html;"); - response.getWriter().println("

Hello Ihsan Olawale!

"); -======= response.setContentType("application/json;"); String json = new Gson().toJson(messages); response.getWriter().println(json); @@ -48,6 +44,5 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) thr messages.put(username, message); // messages.add(username); response.sendRedirect("/index.html"); ->>>>>>> 27fb121d78e46b35f57241c83d6cd4a4b0714785 } } diff --git a/portfolio/src/main/webapp/index.html b/portfolio/src/main/webapp/index.html index 448eb70..02246e6 100644 --- a/portfolio/src/main/webapp/index.html +++ b/portfolio/src/main/webapp/index.html @@ -6,11 +6,7 @@ -<<<<<<< HEAD - -======= ->>>>>>> 27fb121d78e46b35f57241c83d6cd4a4b0714785

Ihsan Olawale's Portfolio

diff --git a/portfolio/src/main/webapp/script.js b/portfolio/src/main/webapp/script.js index 1101a4d..3e5e936 100644 --- a/portfolio/src/main/webapp/script.js +++ b/portfolio/src/main/webapp/script.js @@ -46,14 +46,6 @@ function addRandomFact() { } /** -<<<<<<< HEAD - * Fetches greeting from /data for use as opening greeting - */ -async function getOpeningGreeting() { - const response = await fetch('/data'); - const greeting = await response.text(); - document.getElementById('opening-greeting').innerHTML = greeting; -======= * Fetches messages from the server and adds them to the webpage */ function displayMessages() { @@ -66,5 +58,4 @@ function displayMessages() { // messageContainer.innerText += username + '\n'; } }); ->>>>>>> 27fb121d78e46b35f57241c83d6cd4a4b0714785 } From 6a0d4548db59cb0c68ed0b24ce838c2872590a8a Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Wed, 8 Jul 2020 18:03:34 -0700 Subject: [PATCH 05/18] Used datastore to display at most 7 comments on webpage --- portfolio/pom.xml | 6 +++ .../com/google/sps/servlets/DataServlet.java | 40 ++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/portfolio/pom.xml b/portfolio/pom.xml index d4b938e..f3aded7 100644 --- a/portfolio/pom.xml +++ b/portfolio/pom.xml @@ -29,6 +29,12 @@ gson 2.8.6 + + + com.google.appengine + appengine-api-1.0-sdk + 1.9.59 + diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index a2dd588..fe76ffa 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -23,16 +23,36 @@ import java.util.HashMap; // import java.util.ArrayList; import com.google.gson.Gson; +import com.google.appengine.api.datastore.DatastoreService; +import com.google.appengine.api.datastore.DatastoreServiceFactory; +import com.google.appengine.api.datastore.Entity; +import com.google.appengine.api.datastore.PreparedQuery; +import com.google.appengine.api.datastore.Query; +import com.google.appengine.api.datastore.Query.SortDirection; +import com.google.appengine.api.datastore.FetchOptions; /** Servlet that returns some example content. TODO: modify this file to handle comments data */ @WebServlet("/data") public class DataServlet extends HttpServlet { - HashMap messages = new HashMap(); + // HashMap messages = new HashMap(); // ArrayList messages = new ArrayList(); + DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); + int maxNumComments; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("application/json;"); + + HashMap messages = new HashMap(); + Query query = new Query("Comment").addSort("timestamp", SortDirection.DESCENDING); + PreparedQuery results = datastore.prepare(query); + + for (Entity entity: results.asIterable(FetchOptions.Builder.withLimit(maxNumComments))) { + String username = (String) entity.getProperty("username"); + String message = (String) entity.getProperty("message"); + messages.put(username, message); + } + String json = new Gson().toJson(messages); response.getWriter().println(json); } @@ -41,8 +61,24 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { String username = request.getParameter("username"); String message = request.getParameter("comment-or-question"); - messages.put(username, message); + // messages.put(username, message); // messages.add(username); + String maxNumCommentsString = request.getParameter("max-num-comments"); + try { + maxNumComments = Integer.parseInt(maxNumCommentsString); + } catch (NumberFormatException e) { + System.err.println("Could not convert to int: " + maxNumCommentsString); + System.err.println("Using default value of 7."); + maxNumComments = 7; + } + + Entity commentEntity = new Entity("Comment"); + commentEntity.setProperty("username", username); + commentEntity.setProperty("message", message); + commentEntity.setProperty("timestamp", System.currentTimeMillis()); + + datastore.put(commentEntity); + response.sendRedirect("/index.html"); } } From 12192853960f96ac3604f6e8ce6a5ef716bd4bae Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Thu, 9 Jul 2020 14:46:14 -0700 Subject: [PATCH 06/18] Used LinkedHashMap to keep messages ordered temporarily and added comment limiting input box --- .../src/main/java/com/google/sps/servlets/DataServlet.java | 6 +++--- portfolio/src/main/webapp/index.html | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index fe76ffa..b8b742b 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -20,7 +20,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.HashMap; +import java.util.LinkedHashMap; // import java.util.ArrayList; import com.google.gson.Gson; import com.google.appengine.api.datastore.DatastoreService; @@ -34,7 +34,7 @@ /** Servlet that returns some example content. TODO: modify this file to handle comments data */ @WebServlet("/data") public class DataServlet extends HttpServlet { - // HashMap messages = new HashMap(); + // LinkedHashMap messages = new LinkedHashMap(); // ArrayList messages = new ArrayList(); DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); int maxNumComments; @@ -43,7 +43,7 @@ public class DataServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("application/json;"); - HashMap messages = new HashMap(); + LinkedHashMap messages = new LinkedHashMap(); Query query = new Query("Comment").addSort("timestamp", SortDirection.DESCENDING); PreparedQuery results = datastore.prepare(query); diff --git a/portfolio/src/main/webapp/index.html b/portfolio/src/main/webapp/index.html index 02246e6..fa730a3 100644 --- a/portfolio/src/main/webapp/index.html +++ b/portfolio/src/main/webapp/index.html @@ -23,6 +23,7 @@

Ihsan Olawale's Portfolio

Comment here on your perception of the content. Or ask me any questions about me.


+

From f0561550e79c25c8b45a69a46e8a2fd6b3bd3584 Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Thu, 9 Jul 2020 18:12:28 -0700 Subject: [PATCH 07/18] Implemented comments deletion feature --- .../com/google/sps/servlets/DataServlet.java | 6 ++-- .../google/sps/servlets/DeleteServlet.java | 28 +++++++++++++++++++ portfolio/src/main/webapp/index.html | 7 +++-- portfolio/src/main/webapp/script.js | 4 +++ 4 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index b8b742b..0c6b427 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -21,7 +21,8 @@ import javax.servlet.http.HttpServletResponse; import java.util.LinkedHashMap; -// import java.util.ArrayList; +import java.util.ArrayList; +import java.util.List; import com.google.gson.Gson; import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.DatastoreServiceFactory; @@ -37,6 +38,7 @@ public class DataServlet extends HttpServlet { // LinkedHashMap messages = new LinkedHashMap(); // ArrayList messages = new ArrayList(); DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); + List keys = new ArrayList<>(); int maxNumComments; @Override @@ -77,7 +79,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) thr commentEntity.setProperty("message", message); commentEntity.setProperty("timestamp", System.currentTimeMillis()); - datastore.put(commentEntity); + keys.add(datastore.put(commentEntity)); response.sendRedirect("/index.html"); } diff --git a/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java new file mode 100644 index 0000000..85443b5 --- /dev/null +++ b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java @@ -0,0 +1,28 @@ +package com.google.sps.servlets; + +import java.io.IOException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.google.appengine.api.datastore.DatastoreService; +import com.google.appengine.api.datastore.Key; +import java.util.List; +import DataServlet; + +/** Servlet that deletes data from the database. */ +@WebServlet("/delete-data") +public class DeleteServlet extends HttpServlet { + + @Override + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + String shouldDelete = request.getParameter("shouldDelete"); + if (shouldDelete.equals("yes")) { + DatastoreService datastore = DataServlet.datastore; + List keys = DataServlet.keys; + datastore.delete(keys); + } + response.sendRedirect("/index.html"); + } +} diff --git a/portfolio/src/main/webapp/index.html b/portfolio/src/main/webapp/index.html index fa730a3..86c0549 100644 --- a/portfolio/src/main/webapp/index.html +++ b/portfolio/src/main/webapp/index.html @@ -22,11 +22,14 @@

Ihsan Olawale's Portfolio

Comment here on your perception of the content. Or ask me any questions about me.


+
- -

+
+ +
+
diff --git a/portfolio/src/main/webapp/script.js b/portfolio/src/main/webapp/script.js index 3e5e936..de31ff4 100644 --- a/portfolio/src/main/webapp/script.js +++ b/portfolio/src/main/webapp/script.js @@ -59,3 +59,7 @@ function displayMessages() { } }); } + +function deleteMessages() { + fetch('/delete-data', {method: 'POST'}).then((response) => displayMessages()); +} From ec9fa7b38cb599210b7432756838540ed1720db8 Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Mon, 13 Jul 2020 18:07:02 -0700 Subject: [PATCH 08/18] Resolved compilation errors --- .../main/java/com/google/sps/servlets/DataServlet.java | 5 +++-- .../java/com/google/sps/servlets/DeleteServlet.java | 10 +++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index 0c6b427..b30d28c 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -31,14 +31,15 @@ import com.google.appengine.api.datastore.Query; import com.google.appengine.api.datastore.Query.SortDirection; import com.google.appengine.api.datastore.FetchOptions; +import com.google.appengine.api.datastore.Key; /** Servlet that returns some example content. TODO: modify this file to handle comments data */ @WebServlet("/data") public class DataServlet extends HttpServlet { // LinkedHashMap messages = new LinkedHashMap(); // ArrayList messages = new ArrayList(); - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - List keys = new ArrayList<>(); + static DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); + static List keys = new ArrayList<>(); int maxNumComments; @Override diff --git a/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java index 85443b5..a1c0239 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java @@ -9,7 +9,6 @@ import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.Key; import java.util.List; -import DataServlet; /** Servlet that deletes data from the database. */ @WebServlet("/delete-data") @@ -17,12 +16,9 @@ public class DeleteServlet extends HttpServlet { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { - String shouldDelete = request.getParameter("shouldDelete"); - if (shouldDelete.equals("yes")) { - DatastoreService datastore = DataServlet.datastore; - List keys = DataServlet.keys; - datastore.delete(keys); - } + DatastoreService datastore = DataServlet.datastore; + List keys = DataServlet.keys; + datastore.delete(keys); response.sendRedirect("/index.html"); } } From e8bd138ec8bb81bfda6f5803fe5f5763ebd7eb66 Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Mon, 13 Jul 2020 18:14:17 -0700 Subject: [PATCH 09/18] Reformatted java files with fix_java.sh --- .../com/google/sps/servlets/DataServlet.java | 25 +++++++++---------- .../google/sps/servlets/DeleteServlet.java | 7 +++--- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index b30d28c..bf1ff18 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -14,24 +14,23 @@ package com.google.sps.servlets; -import java.io.IOException; -import javax.servlet.annotation.WebServlet; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import java.util.LinkedHashMap; -import java.util.ArrayList; -import java.util.List; -import com.google.gson.Gson; import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.DatastoreServiceFactory; import com.google.appengine.api.datastore.Entity; +import com.google.appengine.api.datastore.FetchOptions; +import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.PreparedQuery; import com.google.appengine.api.datastore.Query; import com.google.appengine.api.datastore.Query.SortDirection; -import com.google.appengine.api.datastore.FetchOptions; -import com.google.appengine.api.datastore.Key; +import com.google.gson.Gson; +import java.io.IOException; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; /** Servlet that returns some example content. TODO: modify this file to handle comments data */ @WebServlet("/data") @@ -50,7 +49,7 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro Query query = new Query("Comment").addSort("timestamp", SortDirection.DESCENDING); PreparedQuery results = datastore.prepare(query); - for (Entity entity: results.asIterable(FetchOptions.Builder.withLimit(maxNumComments))) { + for (Entity entity : results.asIterable(FetchOptions.Builder.withLimit(maxNumComments))) { String username = (String) entity.getProperty("username"); String message = (String) entity.getProperty("message"); messages.put(username, message); diff --git a/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java index a1c0239..801b61b 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java @@ -1,15 +1,14 @@ package com.google.sps.servlets; +import com.google.appengine.api.datastore.DatastoreService; +import com.google.appengine.api.datastore.Key; import java.io.IOException; +import java.util.List; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.google.appengine.api.datastore.DatastoreService; -import com.google.appengine.api.datastore.Key; -import java.util.List; - /** Servlet that deletes data from the database. */ @WebServlet("/delete-data") public class DeleteServlet extends HttpServlet { From 767409e372697023cda6831786e735fe68a622a9 Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Mon, 13 Jul 2020 18:20:01 -0700 Subject: [PATCH 10/18] Removed extraneous /'s and comments --- .../main/java/com/google/sps/servlets/DataServlet.java | 7 ++----- portfolio/src/main/webapp/index.html | 10 +++++----- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index bf1ff18..66a634b 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -35,8 +36,6 @@ /** Servlet that returns some example content. TODO: modify this file to handle comments data */ @WebServlet("/data") public class DataServlet extends HttpServlet { - // LinkedHashMap messages = new LinkedHashMap(); - // ArrayList messages = new ArrayList(); static DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); static List keys = new ArrayList<>(); int maxNumComments; @@ -45,7 +44,7 @@ public class DataServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("application/json;"); - LinkedHashMap messages = new LinkedHashMap(); + Map messages = new LinkedHashMap<>(); Query query = new Query("Comment").addSort("timestamp", SortDirection.DESCENDING); PreparedQuery results = datastore.prepare(query); @@ -63,8 +62,6 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { String username = request.getParameter("username"); String message = request.getParameter("comment-or-question"); - // messages.put(username, message); - // messages.add(username); String maxNumCommentsString = request.getParameter("max-num-comments"); try { maxNumComments = Integer.parseInt(maxNumCommentsString); diff --git a/portfolio/src/main/webapp/index.html b/portfolio/src/main/webapp/index.html index 86c0549..ab849b9 100644 --- a/portfolio/src/main/webapp/index.html +++ b/portfolio/src/main/webapp/index.html @@ -21,15 +21,15 @@

Ihsan Olawale's Portfolio

-

Comment here on your perception of the content. Or ask me any questions about me.


-
+

Comment here on your perception of the content. Or ask me any questions about me.


+
-
+
-
+
-
+
From bee7148d6752155320348e04cf69598c9ac26225 Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Tue, 14 Jul 2020 10:44:24 -0700 Subject: [PATCH 11/18] Alphabetized dependencies by groupId --- portfolio/pom.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/portfolio/pom.xml b/portfolio/pom.xml index f3aded7..1e294df 100644 --- a/portfolio/pom.xml +++ b/portfolio/pom.xml @@ -17,6 +17,12 @@ + + com.google.appengine + appengine-api-1.0-sdk + 1.9.59 + + javax.servlet javax.servlet-api @@ -29,12 +35,6 @@ gson 2.8.6 - - - com.google.appengine - appengine-api-1.0-sdk - 1.9.59 - From 4569f519f7839e15fc3ecf1d3eea1c02e1fa75b2 Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Tue, 14 Jul 2020 11:07:32 -0700 Subject: [PATCH 12/18] Used persistence layer to get keys --- .../src/main/java/com/google/sps/servlets/DataServlet.java | 5 +---- .../main/java/com/google/sps/servlets/DeleteServlet.java | 7 ++++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index 66a634b..d4ce13a 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -36,8 +36,7 @@ /** Servlet that returns some example content. TODO: modify this file to handle comments data */ @WebServlet("/data") public class DataServlet extends HttpServlet { - static DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - static List keys = new ArrayList<>(); + DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); int maxNumComments; @Override @@ -76,8 +75,6 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) thr commentEntity.setProperty("message", message); commentEntity.setProperty("timestamp", System.currentTimeMillis()); - keys.add(datastore.put(commentEntity)); - response.sendRedirect("/index.html"); } } diff --git a/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java index 801b61b..16684cc 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java @@ -15,9 +15,10 @@ public class DeleteServlet extends HttpServlet { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { - DatastoreService datastore = DataServlet.datastore; - List keys = DataServlet.keys; - datastore.delete(keys); + DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); + Query query = new Query("Comment").setKeysOnly(); + PreparedQuery keys = datastore.prepare(query); + datastore.delete(keys.asIterable()); response.sendRedirect("/index.html"); } } From dbc1fa3058fd17840c644428bf97be5dd10905cc Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Tue, 14 Jul 2020 11:41:58 -0700 Subject: [PATCH 13/18] Removed TODO, added missing import, privatized class members --- .../src/main/java/com/google/sps/servlets/DataServlet.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index d4ce13a..f49c4d5 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -28,16 +28,17 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Query; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -/** Servlet that returns some example content. TODO: modify this file to handle comments data */ +/** Servlet that returns some example content.*/ @WebServlet("/data") public class DataServlet extends HttpServlet { - DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - int maxNumComments; + private final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); + private int maxNumComments; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { From 5fce08ad655a7a51be21a484f72f2c605106b2a1 Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Tue, 14 Jul 2020 18:22:32 -0700 Subject: [PATCH 14/18] Fixed imports, added constant to hold default value --- .../java/com/google/sps/servlets/DataServlet.java | 8 ++++---- .../java/com/google/sps/servlets/DeleteServlet.java | 13 +++++++++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index f49c4d5..d5df3a0 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -28,7 +28,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Query; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; @@ -38,7 +37,8 @@ @WebServlet("/data") public class DataServlet extends HttpServlet { private final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - private int maxNumComments; + private final int defaultMaxNumComments = 7; + private int maxNumComments = defaultMaxNumComments; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { @@ -67,8 +67,8 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) thr maxNumComments = Integer.parseInt(maxNumCommentsString); } catch (NumberFormatException e) { System.err.println("Could not convert to int: " + maxNumCommentsString); - System.err.println("Using default value of 7."); - maxNumComments = 7; + System.err.println("Using default value of " + defaultMaxNumComments + "."); + maxNumComments = defaultMaxNumComments; } Entity commentEntity = new Entity("Comment"); diff --git a/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java index 16684cc..7154d4f 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java @@ -1,8 +1,13 @@ package com.google.sps.servlets; import com.google.appengine.api.datastore.DatastoreService; +import com.google.appengine.api.datastore.DatastoreServiceFactory; +import com.google.appengine.api.datastore.Entity; import com.google.appengine.api.datastore.Key; +import com.google.appengine.api.datastore.PreparedQuery; +import com.google.appengine.api.datastore.Query; import java.io.IOException; +import java.util.Iterator; import java.util.List; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; @@ -17,8 +22,12 @@ public class DeleteServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); Query query = new Query("Comment").setKeysOnly(); - PreparedQuery keys = datastore.prepare(query); - datastore.delete(keys.asIterable()); + PreparedQuery preparedQuery = datastore.prepare(query); + Iterator entities = preparedQuery.asIterator(); + while (entities.hasNext()) { + Key key = entities.next().getKey(); + datastore.delete(key); + } response.sendRedirect("/index.html"); } } From 5a5a47c890d0c034bb816fe3cc2e19cdee1a3e06 Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Tue, 14 Jul 2020 18:25:51 -0700 Subject: [PATCH 15/18] Renamed servlet path to delete-messages --- .../src/main/java/com/google/sps/servlets/DeleteServlet.java | 2 +- portfolio/src/main/webapp/script.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java index 7154d4f..6a1a919 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java @@ -15,7 +15,7 @@ import javax.servlet.http.HttpServletResponse; /** Servlet that deletes data from the database. */ -@WebServlet("/delete-data") +@WebServlet("/delete-messages") public class DeleteServlet extends HttpServlet { @Override diff --git a/portfolio/src/main/webapp/script.js b/portfolio/src/main/webapp/script.js index de31ff4..a199a52 100644 --- a/portfolio/src/main/webapp/script.js +++ b/portfolio/src/main/webapp/script.js @@ -61,5 +61,5 @@ function displayMessages() { } function deleteMessages() { - fetch('/delete-data', {method: 'POST'}).then((response) => displayMessages()); + fetch('/delete-messages', {method: 'POST'}).then((response) => displayMessages()); } From 947663df4a7c04b0283b14709d4e2acae8bf066c Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Wed, 15 Jul 2020 10:00:22 -0700 Subject: [PATCH 16/18] Moved maxNumComments declaration out of class scope, switched to String.format --- .../java/com/google/sps/servlets/DataServlet.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index d5df3a0..81381fe 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -37,8 +37,7 @@ @WebServlet("/data") public class DataServlet extends HttpServlet { private final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); - private final int defaultMaxNumComments = 7; - private int maxNumComments = defaultMaxNumComments; + private static final int DEFAULT_MAX_NUM_COMMENTS = 7; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { @@ -48,6 +47,7 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro Query query = new Query("Comment").addSort("timestamp", SortDirection.DESCENDING); PreparedQuery results = datastore.prepare(query); + int maxNumComments = (int)request.getSession().getAttribute("maxNumComments"); for (Entity entity : results.asIterable(FetchOptions.Builder.withLimit(maxNumComments))) { String username = (String) entity.getProperty("username"); String message = (String) entity.getProperty("message"); @@ -63,13 +63,15 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) thr String username = request.getParameter("username"); String message = request.getParameter("comment-or-question"); String maxNumCommentsString = request.getParameter("max-num-comments"); + int maxNumComments; try { maxNumComments = Integer.parseInt(maxNumCommentsString); } catch (NumberFormatException e) { - System.err.println("Could not convert to int: " + maxNumCommentsString); - System.err.println("Using default value of " + defaultMaxNumComments + "."); - maxNumComments = defaultMaxNumComments; + System.err.format("Could not convert to int: %d%n", maxNumCommentsString); + System.err.format("Using default value of %d.%n", DEFAULT_MAX_NUM_COMMENTS); + maxNumComments = DEFAULT_MAX_NUM_COMMENTS; } + request.getSession().setAttribute("maxNumComments", maxNumComments); Entity commentEntity = new Entity("Comment"); commentEntity.setProperty("username", username); From 88ba33426ada68ba80b3ae66fd09b5cd0e32ce81 Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Wed, 15 Jul 2020 10:05:45 -0700 Subject: [PATCH 17/18] Updated javadoc --- .../src/main/java/com/google/sps/servlets/DataServlet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index 81381fe..da29eed 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -33,7 +33,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -/** Servlet that returns some example content.*/ +/** Servlet that adds/retrieves comments stored in a Datastore*/ @WebServlet("/data") public class DataServlet extends HttpServlet { private final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); From c0dfad25fa3b2ddf516795941de35b79aaf64913 Mon Sep 17 00:00:00 2001 From: Ihsan Olawale Date: Wed, 15 Jul 2020 17:10:05 -0700 Subject: [PATCH 18/18] Added missing space, replaced %d with %s, and added comment to Datastore --- .../src/main/java/com/google/sps/servlets/DataServlet.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java index da29eed..b8a11e4 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -33,7 +33,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -/** Servlet that adds/retrieves comments stored in a Datastore*/ +/** Servlet that adds/retrieves comments stored in a Datastore */ @WebServlet("/data") public class DataServlet extends HttpServlet { private final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); @@ -67,7 +67,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) thr try { maxNumComments = Integer.parseInt(maxNumCommentsString); } catch (NumberFormatException e) { - System.err.format("Could not convert to int: %d%n", maxNumCommentsString); + System.err.format("Could not convert to int: %s%n", maxNumCommentsString); System.err.format("Using default value of %d.%n", DEFAULT_MAX_NUM_COMMENTS); maxNumComments = DEFAULT_MAX_NUM_COMMENTS; } @@ -78,6 +78,7 @@ public void doPost(HttpServletRequest request, HttpServletResponse response) thr commentEntity.setProperty("message", message); commentEntity.setProperty("timestamp", System.currentTimeMillis()); + datastore.put(commentEntity); response.sendRedirect("/index.html"); } }