From 2aa59ba46563a01d2412f98d50ab686fab5ef43c Mon Sep 17 00:00:00 2001 From: Gwendal Margely <gwendal.margely.etu@univ-lille.fr> Date: Thu, 14 Mar 2024 15:55:42 +0100 Subject: [PATCH] Adding the first state of Ingredient WebServlet --- ...DAOIngredients.java => IngredientDAO.java} | 5 +- WEB-INF/src/Servlets/IngredientServlet.java | 128 ++++++++++++++++++ 2 files changed, 132 insertions(+), 1 deletion(-) rename WEB-INF/src/DAO/{DAOIngredients.java => IngredientDAO.java} (97%) create mode 100644 WEB-INF/src/Servlets/IngredientServlet.java diff --git a/WEB-INF/src/DAO/DAOIngredients.java b/WEB-INF/src/DAO/IngredientDAO.java similarity index 97% rename from WEB-INF/src/DAO/DAOIngredients.java rename to WEB-INF/src/DAO/IngredientDAO.java index 2a42631..da9dc87 100644 --- a/WEB-INF/src/DAO/DAOIngredients.java +++ b/WEB-INF/src/DAO/IngredientDAO.java @@ -5,7 +5,7 @@ import java.sql.*; import java.util.ArrayList; import java.util.List; -public class DAOIngredients { +public class IngredientDAO { // JDBC URL, username, and password of PostgresSQL server private static final String url = "jdbc:postgresql://"; //CHANGE URL private static final String user = "gwendalmargelyetu"; @@ -85,4 +85,7 @@ public class DAOIngredients { close(); return ingredient; } + + public void deleteIngredient(int id) { + } } diff --git a/WEB-INF/src/Servlets/IngredientServlet.java b/WEB-INF/src/Servlets/IngredientServlet.java new file mode 100644 index 0000000..0df5ab9 --- /dev/null +++ b/WEB-INF/src/Servlets/IngredientServlet.java @@ -0,0 +1,128 @@ +package Servlets; + + + +import DAO.IngredientDAO; +import POJO.Ingredient; +import com.fasterxml.jackson.databind.ObjectMapper; + +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; +import java.util.List; + +@WebServlet("/ingredients/*") +public class IngredientServlet extends HttpServlet { + private IngredientDAO ingredientDAO; + private ObjectMapper objectMapper; + + @Override + public void init() throws ServletException { + ingredientDAO = new IngredientDAO(); + objectMapper = new ObjectMapper(); + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String pathInfo = req.getPathInfo(); + if (pathInfo == null || pathInfo.equals("/")) { + // Get all ingredients + try { + List<Ingredient> ingredients = ingredientDAO.getAllIngredients(); + resp.setContentType("application/json"); + resp.getWriter().write(objectMapper.writeValueAsString(ingredients)); + } catch (Exception e) { + resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + resp.getWriter().write("Error fetching ingredients: " + e.getMessage()); + } + } else { + String[] pathParts = pathInfo.split("/"); + if (pathParts.length == 2) { + // Get ingredient by id + try { + int id = Integer.parseInt(pathParts[1]); + Ingredient ingredient = ingredientDAO.getIngredient(id); + if (ingredient != null) { + resp.setContentType("application/json"); + resp.getWriter().write(objectMapper.writeValueAsString(ingredient)); + } else { + resp.setStatus(HttpServletResponse.SC_NOT_FOUND); + resp.getWriter().write("Ingredient not found with id: " + id); + } + } catch (NumberFormatException e) { + resp.setStatus(HttpServletResponse.SC_BAD_REQUEST); + resp.getWriter().write("Invalid ingredient id: " + pathParts[1]); + } catch (Exception e) { + resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + resp.getWriter().write("Error fetching ingredient: " + e.getMessage()); + } + } else if (pathParts.length == 3 && pathParts[2].equals("name")) { + // Get ingredient name by id + try { + int id = Integer.parseInt(pathParts[1]); + Ingredient ingredient = ingredientDAO.getIngredient(id); + if (ingredient != null) { + resp.setContentType("application/json"); + resp.getWriter().write(objectMapper.writeValueAsString(ingredient.getName())); + } else { + resp.setStatus(HttpServletResponse.SC_NOT_FOUND); + resp.getWriter().write("Ingredient not found with id: " + id); + } + } catch (NumberFormatException e) { + resp.setStatus(HttpServletResponse.SC_BAD_REQUEST); + resp.getWriter().write("Invalid ingredient id: " + pathParts[1]); + } catch (Exception e) { + resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + resp.getWriter().write("Error fetching ingredient name: " + e.getMessage()); + } + } else { + resp.setStatus(HttpServletResponse.SC_BAD_REQUEST); + resp.getWriter().write("Invalid endpoint"); + } + } + } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + // Add new ingredient + try { + Ingredient ingredient = objectMapper.readValue(req.getInputStream(), Ingredient.class); + IngredientDAO.insertIngredient(ingredient); + resp.setStatus(HttpServletResponse.SC_CREATED); + } catch (Exception e) { + resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + resp.getWriter().write("Error adding ingredient: " + e.getMessage()); + } + } + + @Override + protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String pathInfo = req.getPathInfo(); + if (pathInfo != null && !pathInfo.equals("/")) { + String[] pathParts = pathInfo.split("/"); + if (pathParts.length == 2) { + // Delete ingredient by id + try { + int id = Integer.parseInt(pathParts[1]); + ingredientDAO.deleteIngredient(id); // Create this method + resp.setStatus(HttpServletResponse.SC_OK); + } catch (NumberFormatException e) { + resp.setStatus(HttpServletResponse.SC_BAD_REQUEST); + resp.getWriter().write("Invalid ingredient id: " + pathParts[1]); + } catch (Exception e) { + resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + resp.getWriter().write("Error deleting ingredient: " + e.getMessage()); + } + } else { + resp.setStatus(HttpServletResponse.SC_BAD_REQUEST); + resp.getWriter().write("Invalid endpoint"); + } + } else { + resp.setStatus(HttpServletResponse.SC_BAD_REQUEST); + resp.getWriter().write("Invalid endpoint"); + } + } +} -- GitLab