diff --git a/portfolio/pom.xml b/portfolio/pom.xml index d4b938e..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 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..b8a11e4 100644 --- a/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java +++ b/portfolio/src/main/java/com/google/sps/servlets/DataServlet.java @@ -14,25 +14,46 @@ 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.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.gson.Gson; import java.io.IOException; +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; import javax.servlet.http.HttpServletResponse; -import java.util.HashMap; -// import java.util.ArrayList; -import com.google.gson.Gson; - -/** Servlet that returns some example content. TODO: modify this file to handle comments data */ +/** Servlet that adds/retrieves comments stored in a Datastore */ @WebServlet("/data") public class DataServlet extends HttpServlet { - HashMap messages = new HashMap(); - // ArrayList messages = new ArrayList(); + private final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); + private static final int DEFAULT_MAX_NUM_COMMENTS = 7; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("application/json;"); + + Map messages = new LinkedHashMap<>(); + 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"); + messages.put(username, message); + } + String json = new Gson().toJson(messages); response.getWriter().println(json); } @@ -41,8 +62,23 @@ 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"); + int maxNumComments; + try { + maxNumComments = Integer.parseInt(maxNumCommentsString); + } catch (NumberFormatException e) { + 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; + } + request.getSession().setAttribute("maxNumComments", maxNumComments); + + 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"); } } 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..6a1a919 --- /dev/null +++ b/portfolio/src/main/java/com/google/sps/servlets/DeleteServlet.java @@ -0,0 +1,33 @@ +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; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** Servlet that deletes data from the database. */ +@WebServlet("/delete-messages") +public class DeleteServlet extends HttpServlet { + + @Override + public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); + Query query = new Query("Comment").setKeysOnly(); + PreparedQuery preparedQuery = datastore.prepare(query); + Iterator entities = preparedQuery.asIterator(); + while (entities.hasNext()) { + Key key = entities.next().getKey(); + datastore.delete(key); + } + response.sendRedirect("/index.html"); + } +} diff --git a/portfolio/src/main/webapp/index.html b/portfolio/src/main/webapp/index.html index 9a5bc31..ab849b9 100644 --- a/portfolio/src/main/webapp/index.html +++ b/portfolio/src/main/webapp/index.html @@ -8,6 +8,7 @@
+

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.

@@ -20,11 +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.


+
-

+
+ +
+
diff --git a/portfolio/src/main/webapp/script.js b/portfolio/src/main/webapp/script.js index 3e5e936..a199a52 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-messages', {method: 'POST'}).then((response) => displayMessages()); +}