From 9c3880021404d6c6501ec9eaa2d54b698d188a6f Mon Sep 17 00:00:00 2001 From: Arti Zirk Date: Sun, 7 Oct 2018 19:23:56 +0300 Subject: [PATCH] hw3 --- build.gradle | 2 + src/main/java/DTO/Order.java | 1 + src/main/java/api/Orders.java | 56 ++++++++++++++++++++++++---- src/main/java/form/Index.java | 17 +++++++++ src/main/java/form/OrdersForm.java | 50 +++++++++++++++++++++++++ src/main/java/test/HelloServlet.java | 2 +- 6 files changed, 119 insertions(+), 9 deletions(-) create mode 100644 src/main/java/form/Index.java create mode 100644 src/main/java/form/OrdersForm.java diff --git a/build.gradle b/build.gradle index a34e501..ade5ee0 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,8 @@ dependencies { // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.7' + compile 'com.fasterxml.jackson.core:jackson-databind:2.9.6' + compileOnly 'javax.servlet:javax.servlet-api:4.0.1' } diff --git a/src/main/java/DTO/Order.java b/src/main/java/DTO/Order.java index 2961f02..1507962 100644 --- a/src/main/java/DTO/Order.java +++ b/src/main/java/DTO/Order.java @@ -4,6 +4,7 @@ import lombok.Data; import java.util.List; public @Data class Order { + private int id; private String orderNumber; private List orderRows; } diff --git a/src/main/java/api/Orders.java b/src/main/java/api/Orders.java index 013a2fd..a0233fa 100644 --- a/src/main/java/api/Orders.java +++ b/src/main/java/api/Orders.java @@ -1,32 +1,72 @@ package api; +import DTO.Order; +import com.fasterxml.jackson.databind.ObjectMapper; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; import javax.servlet.ServletException; +import javax.servlet.annotation.WebListener; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.util.HashMap; +import java.util.Map; import java.util.stream.Collectors; -@WebServlet("/api/orders") -public class Orders extends HttpServlet { +@WebServlet(urlPatterns = "/api/orders", name="Orders") +@WebListener +public class Orders extends HttpServlet implements ServletContextListener { private static final long serialVersionUID = 1L; - private int lastOrderId = 0; - private Pattern orderPattern = Pattern.compile(".*\"orderNumber\":\\s*\"(.*)\".*"); + private static int nextOrderId = 0; + private static Map orders = new HashMap(); + + public int addOrder(Order order) { + int orderId = nextOrderId; + nextOrderId++; + order.setId(orderId); + orders.put(orderId, order); + return orderId; + } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - resp.getWriter().format("%d", lastOrderId); + String idString = req.getParameter("id"); + if (idString != null) { + int id = Integer.parseInt(idString); + Order order = (Order) orders.get(id); + if (order == null) { + resp.setStatus(404); + return; + } + resp.setContentType("application/json"); + resp.getWriter().print(new ObjectMapper().writeValueAsString(order)); + return; + } + resp.getWriter().format("%s %d", getServletName(), orders.size()); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("application/json"); - String order = req.getReader().lines().collect(Collectors.joining(" ")); + String orderJson = req.getReader().lines().collect(Collectors.joining(" ")); + Order order = new ObjectMapper().readValue(orderJson, Order.class); + addOrder(order); + resp.getWriter().print(new ObjectMapper().writeValueAsString(order)); + } + + @Override + public void contextInitialized(ServletContextEvent sce) { + // fixme horrible hack + sce.getServletContext().setAttribute("Orders", this); + } + + @Override + public void contextDestroyed(ServletContextEvent sce) { } } diff --git a/src/main/java/form/Index.java b/src/main/java/form/Index.java new file mode 100644 index 0000000..43a3274 --- /dev/null +++ b/src/main/java/form/Index.java @@ -0,0 +1,17 @@ +package form; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(urlPatterns = "/", name="Index") +public class Index extends HttpServlet { + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("text/html; charset=utf-8"); + response.getWriter().print("Orders form"); + } +} diff --git a/src/main/java/form/OrdersForm.java b/src/main/java/form/OrdersForm.java new file mode 100644 index 0000000..6976d1d --- /dev/null +++ b/src/main/java/form/OrdersForm.java @@ -0,0 +1,50 @@ +package form; + +import DTO.Order; +import api.Orders; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(urlPatterns = "/orders/form", name="OrdersForm") +public class OrdersForm extends HttpServlet +{ + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + + resp.setContentType("text/html; charset=utf-8"); + resp.getWriter().print( + "
" + + " " + + " " + + "" + + "
" + ); + } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + resp.setContentType("application/json"); + // fixme horrible hack + Orders orders = (Orders) getServletContext().getAttribute("Orders"); + if (orders == null) { + throw new NullPointerException("Orders servlet not found"); + } + + String orderNumber = req.getParameter("orderNumber"); + if (orderNumber == null) { + resp.setStatus(400, "orderNumber parameter is empty"); + resp.getWriter().print("orderNumber parameter is empty"); + return; + } + + Order order = new Order(); + order.setOrderNumber(orderNumber); + int orderId = orders.addOrder(order); + resp.getWriter().format("%d", orderId); + } +} diff --git a/src/main/java/test/HelloServlet.java b/src/main/java/test/HelloServlet.java index d5d7b4e..7d68f3f 100644 --- a/src/main/java/test/HelloServlet.java +++ b/src/main/java/test/HelloServlet.java @@ -7,7 +7,7 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -@WebServlet("/hello") +@WebServlet(urlPatterns = "/hello", name="Hello") public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L;