diff --git a/pom.xml b/pom.xml index 8f7cf6b7d..44f044e06 100644 --- a/pom.xml +++ b/pom.xml @@ -31,8 +31,13 @@ 4.0.1 provided + + + jstl + jstl + 1.2 + - diff --git a/src/main/java/mate/controller/AddDriverToCarController.java b/src/main/java/mate/controller/AddDriverToCarController.java new file mode 100644 index 000000000..c3fad6b29 --- /dev/null +++ b/src/main/java/mate/controller/AddDriverToCarController.java @@ -0,0 +1,39 @@ +package mate.controller; + +import java.io.IOException; +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 mate.lib.Injector; +import mate.model.Car; +import mate.model.Driver; +import mate.service.CarService; +import mate.service.DriverService; +import mate.util.Properties; + +@WebServlet("/cars/drivers/add") +public class AddDriverToCarController extends HttpServlet { + private static final Injector injector = Injector.getInstance("mate"); + private final CarService carService = (CarService) injector.getInstance(CarService.class); + private final DriverService driverService = + (DriverService) injector.getInstance(DriverService.class); + + @Override + protected void doGet(HttpServletRequest req, + HttpServletResponse resp) throws ServletException, IOException { + req.getRequestDispatcher("/WEB-INF/views/addDriverToCar.jsp").forward(req, resp); + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + Long driverId = Long.valueOf(request.getParameter("driver_id")); + Long carId = Long.valueOf(request.getParameter("car_id")); + Car car = carService.get(carId); + Driver driver = driverService.get(driverId); + carService.addDriverToCar(driver, car); + response.sendRedirect(request.getContextPath() + Properties.INDEX_PAGE); + } +} diff --git a/src/main/java/mate/controller/CreateCarController.java b/src/main/java/mate/controller/CreateCarController.java new file mode 100644 index 000000000..8d1bf0a91 --- /dev/null +++ b/src/main/java/mate/controller/CreateCarController.java @@ -0,0 +1,45 @@ +package mate.controller; + +import java.io.IOException; +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 mate.lib.Injector; +import mate.model.Car; +import mate.model.Manufacturer; +import mate.service.CarService; +import mate.service.DriverService; +import mate.service.ManufacturerService; +import mate.util.Properties; + +@WebServlet("/cars/add") +public class CreateCarController extends HttpServlet { + private static final Injector injector = Injector.getInstance("mate"); + private final CarService carService = (CarService) injector.getInstance(CarService.class); + private final ManufacturerService manufacturerService = + (ManufacturerService) injector.getInstance(ManufacturerService.class); + private final DriverService driverService = + (DriverService) injector.getInstance(DriverService.class); + + @Override + protected void doGet(HttpServletRequest req, + HttpServletResponse resp) throws ServletException, IOException { + req.getRequestDispatcher("/WEB-INF/views/createCar.jsp").forward(req, resp); + } + + @Override + protected void doPost(HttpServletRequest req, + HttpServletResponse resp) throws ServletException, IOException { + String model = req.getParameter("model"); + Long manufacturerId = Long.valueOf(req.getParameter("manufacturer_id")); + + Manufacturer manufacturer = manufacturerService.get(manufacturerId); + Car newCar = new Car(); + newCar.setModel(model); + newCar.setManufacturer(manufacturer); + carService.create(newCar); + resp.sendRedirect(req.getContextPath() + Properties.INDEX_PAGE); + } +} diff --git a/src/main/java/mate/controller/CreateDriverController.java b/src/main/java/mate/controller/CreateDriverController.java new file mode 100644 index 000000000..4d3119813 --- /dev/null +++ b/src/main/java/mate/controller/CreateDriverController.java @@ -0,0 +1,37 @@ +package mate.controller; + +import java.io.IOException; +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 mate.lib.Injector; +import mate.model.Driver; +import mate.service.DriverService; +import mate.util.Properties; + +@WebServlet("/drivers/add") +public class CreateDriverController extends HttpServlet { + private static final Injector injector = Injector.getInstance("mate"); + private final DriverService driverService = + (DriverService) injector.getInstance(DriverService.class); + + @Override + protected void doGet(HttpServletRequest req, + HttpServletResponse resp) throws ServletException, IOException { + + } + + @Override + protected void doPost(HttpServletRequest req, + HttpServletResponse resp) throws ServletException, IOException { + String name = req.getParameter("name"); + String licenseNumber = req.getParameter("license_number"); + Driver newDriver = new Driver(); + newDriver.setName(name); + newDriver.setLicenseNumber(licenseNumber); + driverService.create(newDriver); + resp.sendRedirect(req.getContextPath() + Properties.INDEX_PAGE); + } +} diff --git a/src/main/java/mate/controller/CreateManufacturerController.java b/src/main/java/mate/controller/CreateManufacturerController.java new file mode 100644 index 000000000..f0bbd8fbf --- /dev/null +++ b/src/main/java/mate/controller/CreateManufacturerController.java @@ -0,0 +1,38 @@ +package mate.controller; + +import java.io.IOException; +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 mate.lib.Injector; +import mate.model.Manufacturer; +import mate.service.ManufacturerService; +import mate.util.Properties; + +@WebServlet("/manufacturers/add") +public class CreateManufacturerController extends HttpServlet { + private static final Injector injector = Injector.getInstance("mate"); + private final ManufacturerService manufacturerService = + (ManufacturerService) injector.getInstance(ManufacturerService.class); + + @Override + protected void doGet(HttpServletRequest req, + HttpServletResponse resp) throws ServletException, IOException { + req.getRequestDispatcher("/WEB-INF/views/createManufacturer.jsp").forward(req, resp); + } + + @Override + protected void doPost(HttpServletRequest req, + HttpServletResponse resp) throws ServletException, IOException { + String name = req.getParameter("name"); + String country = req.getParameter("country"); + Manufacturer manufacturer = new Manufacturer(); + manufacturer.setName(name); + manufacturer.setCountry(country); + manufacturerService.create(manufacturer); + resp.sendRedirect(req.getContextPath() + Properties.INDEX_PAGE); + } +} + diff --git a/src/main/java/mate/controller/DeleteDriverController.java b/src/main/java/mate/controller/DeleteDriverController.java new file mode 100644 index 000000000..ad67ee9b7 --- /dev/null +++ b/src/main/java/mate/controller/DeleteDriverController.java @@ -0,0 +1,26 @@ +package mate.controller; + +import java.io.IOException; +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 mate.lib.Injector; +import mate.service.DriverService; +import mate.util.Properties; + +@WebServlet("/drivers/delete") +public class DeleteDriverController extends HttpServlet { + private static final Injector injector = Injector.getInstance("mate"); + private final DriverService driverService = + (DriverService) injector.getInstance(DriverService.class); + + @Override + protected void doGet(HttpServletRequest req, + HttpServletResponse resp) throws ServletException, IOException { + Long id = Long.valueOf(req.getParameter("id")); + driverService.delete(id); + resp.sendRedirect(req.getContextPath() + Properties.INDEX_PAGE); + } +} diff --git a/src/main/java/mate/controller/DeleteManufacturerController.java b/src/main/java/mate/controller/DeleteManufacturerController.java new file mode 100644 index 000000000..934dc8704 --- /dev/null +++ b/src/main/java/mate/controller/DeleteManufacturerController.java @@ -0,0 +1,26 @@ +package mate.controller; + +import java.io.IOException; +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 mate.lib.Injector; +import mate.service.ManufacturerService; +import mate.util.Properties; + +@WebServlet("/manufacturers/delete") +public class DeleteManufacturerController extends HttpServlet { + private static final Injector injector = Injector.getInstance("mate"); + private final ManufacturerService manufacturerService = + (ManufacturerService) injector.getInstance(ManufacturerService.class); + + @Override + protected void doGet(HttpServletRequest req, + HttpServletResponse resp) throws ServletException, IOException { + Long id = Long.valueOf(req.getParameter("id")); + manufacturerService.delete(id); + resp.sendRedirect(req.getContextPath() + Properties.INDEX_PAGE); + } +} diff --git a/src/main/java/mate/controller/GetAllCarsController.java b/src/main/java/mate/controller/GetAllCarsController.java new file mode 100644 index 000000000..0e0ff9d76 --- /dev/null +++ b/src/main/java/mate/controller/GetAllCarsController.java @@ -0,0 +1,27 @@ +package mate.controller; + +import java.io.IOException; +import java.util.List; +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 mate.lib.Injector; +import mate.model.Car; +import mate.service.CarService; + +@WebServlet("/cars") +public class GetAllCarsController extends HttpServlet { + private static final Injector injector = Injector.getInstance("mate"); + private final CarService carService = + (CarService) injector.getInstance(CarService.class); + + @Override + protected void doGet(HttpServletRequest req, + HttpServletResponse resp) throws ServletException, IOException { + List cars = carService.getAll(); + req.setAttribute("cars", cars); + req.getRequestDispatcher("/WEB-INF/views/getAllCars.jsp").forward(req, resp); + } +} diff --git a/src/main/java/mate/controller/GetAllDriverController.java b/src/main/java/mate/controller/GetAllDriverController.java new file mode 100644 index 000000000..e3f7797cb --- /dev/null +++ b/src/main/java/mate/controller/GetAllDriverController.java @@ -0,0 +1,29 @@ +package mate.controller; + +import java.io.IOException; +import java.util.List; +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 mate.lib.Injector; +import mate.model.Driver; +import mate.service.DriverService; + +@WebServlet("/drivers") +public class GetAllDriverController extends HttpServlet { + private static final Injector injector = Injector.getInstance("mate"); + private final DriverService driverService = + (DriverService) injector.getInstance(DriverService.class); + + @Override + protected void doGet(HttpServletRequest req, + HttpServletResponse resp) throws ServletException, IOException { + List driverList = driverService.getAll(); + req.setAttribute("drivers", driverList); + req.getRequestDispatcher("/WEB-INF/views/getAllDrivers.jsp").forward(req, resp); + } +} + + diff --git a/src/main/java/mate/controller/GetAllManufacturersController.java b/src/main/java/mate/controller/GetAllManufacturersController.java new file mode 100644 index 000000000..e2f338d4d --- /dev/null +++ b/src/main/java/mate/controller/GetAllManufacturersController.java @@ -0,0 +1,27 @@ +package mate.controller; + +import java.io.IOException; +import java.util.List; +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 mate.lib.Injector; +import mate.model.Manufacturer; +import mate.service.ManufacturerService; + +@WebServlet("/manufacturers") +public class GetAllManufacturersController extends HttpServlet { + private static final Injector injector = Injector.getInstance("mate"); + private final ManufacturerService manufacturerService = + (ManufacturerService) injector.getInstance(ManufacturerService.class); + + @Override + protected void doGet(HttpServletRequest req, + HttpServletResponse resp) throws ServletException, IOException { + List manufacturers = manufacturerService.getAll(); + req.setAttribute("manufacturers", manufacturers); + req.getRequestDispatcher("/WEB-INF/views/getAllManufacturers.jsp").forward(req, resp); + } +} diff --git a/src/main/java/mate/dao/CarDaoImpl.java b/src/main/java/mate/dao/CarDaoImpl.java index 4af37e958..7ef8255ef 100644 --- a/src/main/java/mate/dao/CarDaoImpl.java +++ b/src/main/java/mate/dao/CarDaoImpl.java @@ -20,11 +20,11 @@ public class CarDaoImpl implements CarDao { @Override public Car create(Car car) { String query = "INSERT INTO cars (model, manufacturer_id)" - + "VALUES (?, ?)"; + + "VALUES (?, ?)"; try (Connection connection = ConnectionUtil.getConnection(); PreparedStatement statement = connection.prepareStatement( - query, Statement.RETURN_GENERATED_KEYS)) { + query, Statement.RETURN_GENERATED_KEYS)) { statement.setString(1, car.getModel()); statement.setLong(2, car.getManufacturer().getId()); statement.executeUpdate(); @@ -42,13 +42,13 @@ public Car create(Car car) { @Override public Optional get(Long id) { String query = "SELECT c.id AS id, " - + "model, " - + "manufacturer_id, " - + "m.name AS manufacturer_name, " - + "m.country AS manufacturer_country " - + "FROM cars c" - + " JOIN manufacturers m ON c.manufacturer_id = m.id" - + " WHERE c.id = ? AND c.is_deleted = FALSE"; + + "model, " + + "manufacturer_id, " + + "m.name AS manufacturer_name, " + + "m.country AS manufacturer_country " + + "FROM cars c" + + " JOIN manufacturers m ON c.manufacturer_id = m.id" + + " WHERE c.id = ? AND c.is_deleted = FALSE"; Car car = null; try (Connection connection = ConnectionUtil.getConnection(); PreparedStatement statement = @@ -70,13 +70,13 @@ public Optional get(Long id) { @Override public List getAll() { String query = "SELECT c.id AS id, " - + "model, " - + "manufacturer_id, " - + "m.name AS manufacturer_name, " - + "m.country AS manufacturer_country " - + "FROM cars c" - + " JOIN manufacturers m ON c.manufacturer_id = m.id" - + " WHERE c.is_deleted = FALSE"; + + "model, " + + "manufacturer_id, " + + "m.name AS manufacturer_name, " + + "m.country AS manufacturer_country " + + "FROM cars c" + + " JOIN manufacturers m ON c.manufacturer_id = m.id" + + " WHERE c.is_deleted = FALSE"; List cars = new ArrayList<>(); try (Connection connection = ConnectionUtil.getConnection(); PreparedStatement statement = @@ -95,7 +95,7 @@ public List getAll() { @Override public Car update(Car car) { String query = "UPDATE cars SET model = ?, manufacturer_id = ? WHERE id = ?" - + " AND is_deleted = FALSE"; + + " AND is_deleted = FALSE"; try (Connection connection = ConnectionUtil.getConnection(); PreparedStatement statement = connection.prepareStatement(query)) { @@ -114,10 +114,10 @@ public Car update(Car car) { @Override public boolean delete(Long id) { String query = "UPDATE cars SET is_deleted = TRUE WHERE id = ?" - + " AND is_deleted = FALSE"; + + " AND is_deleted = FALSE"; try (Connection connection = ConnectionUtil.getConnection(); - PreparedStatement statement = - connection.prepareStatement(query)) { + PreparedStatement statement = + connection.prepareStatement(query)) { statement.setLong(1, id); return statement.executeUpdate() > 0; } catch (SQLException e) { @@ -128,16 +128,16 @@ public boolean delete(Long id) { @Override public List getAllByDriver(Long driverId) { String query = "SELECT c.id AS id, " - + "model, " - + "manufacturer_id, " - + "m.name AS manufacturer_name, " - + "m.country AS manufacturer_country " - + "FROM cars c" - + " JOIN manufacturers m ON c.manufacturer_id = m.id" - + " JOIN cars_drivers cd ON c.id = cd.car_id" - + " JOIN drivers d ON cd.driver_id = d.id" - + " WHERE c.is_deleted = FALSE and driver_id = ?" - + " AND d.is_deleted = FALSE"; + + "model, " + + "manufacturer_id, " + + "m.name AS manufacturer_name, " + + "m.country AS manufacturer_country " + + "FROM cars c" + + " JOIN manufacturers m ON c.manufacturer_id = m.id" + + " JOIN cars_drivers cd ON c.id = cd.car_id" + + " JOIN drivers d ON cd.driver_id = d.id" + + " WHERE c.is_deleted = FALSE and driver_id = ?" + + " AND d.is_deleted = FALSE"; List cars = new ArrayList<>(); try (Connection connection = ConnectionUtil.getConnection(); PreparedStatement statement = @@ -157,7 +157,8 @@ public List getAllByDriver(Long driverId) { private void insertAllDrivers(Car car) { Long carId = car.getId(); List drivers = car.getDrivers(); - if (drivers.size() == 0) { + + if (drivers == null || drivers.size() == 0) { return; } String query = "INSERT INTO cars_drivers (car_id, driver_id) VALUES (?, ?)"; @@ -189,8 +190,8 @@ private void deleteAllDriversExceptList(Car car) { private List getAllDriversByCarId(Long carId) { String query = "SELECT id, name, license_number FROM cars_drivers cd " - + "JOIN drivers d on cd.driver_id = d.id " - + "where car_id = ? AND is_deleted = FALSE"; + + "JOIN drivers d on cd.driver_id = d.id " + + "where car_id = ? AND is_deleted = FALSE"; try (Connection connection = ConnectionUtil.getConnection(); PreparedStatement statement = connection.prepareStatement(query)) { diff --git a/src/main/java/mate/util/ConnectionUtil.java b/src/main/java/mate/util/ConnectionUtil.java index a9249b004..8e6e08338 100644 --- a/src/main/java/mate/util/ConnectionUtil.java +++ b/src/main/java/mate/util/ConnectionUtil.java @@ -6,10 +6,10 @@ import java.util.Properties; public class ConnectionUtil { - private static final String URL = "YOUR DATABASE URL"; - private static final String USERNAME = "YOUR USERNAME"; - private static final String PASSWORD = "YOUR PASSWORD"; - private static final String JDBC_DRIVER = "YOUR DRIVER"; + private static final String URL = "jdbc:mysql://localhost:3306/taxi?serverTimezone=Europe/Kiev"; + private static final String USERNAME = "root"; + private static final String PASSWORD = "matebest"; + private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; static { try { @@ -19,14 +19,10 @@ public class ConnectionUtil { } } - public static Connection getConnection() { + public static Connection getConnection() throws SQLException { Properties dbProperties = new Properties(); dbProperties.setProperty("user", USERNAME); dbProperties.setProperty("password", PASSWORD); - try { - return DriverManager.getConnection(URL, dbProperties); - } catch (SQLException e) { - throw new RuntimeException("Can't create connection to DB ", e); - } + return DriverManager.getConnection(URL, dbProperties); } } diff --git a/src/main/java/mate/util/Properties.java b/src/main/java/mate/util/Properties.java new file mode 100644 index 000000000..0473794b5 --- /dev/null +++ b/src/main/java/mate/util/Properties.java @@ -0,0 +1,5 @@ +package mate.util; + +public class Properties { + public static final String INDEX_PAGE = "/index"; +} diff --git a/src/main/webapp/WEB-INF/views/addDriverToCar.jsp b/src/main/webapp/WEB-INF/views/addDriverToCar.jsp new file mode 100644 index 000000000..7f70fb48a --- /dev/null +++ b/src/main/webapp/WEB-INF/views/addDriverToCar.jsp @@ -0,0 +1,19 @@ + +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Add a car to a driver page + + +

Add a driver to a car

+
+ + +
+ + +
+ +
+ + diff --git a/src/main/webapp/WEB-INF/views/createCar.jsp b/src/main/webapp/WEB-INF/views/createCar.jsp new file mode 100644 index 000000000..1f62893a2 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/createCar.jsp @@ -0,0 +1,20 @@ + +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Create car page + + + +

Create a car

+
+ + +
+ + +
+ +
+ + diff --git a/src/main/webapp/WEB-INF/views/createDriver.jsp b/src/main/webapp/WEB-INF/views/createDriver.jsp new file mode 100644 index 000000000..3d83ce65c --- /dev/null +++ b/src/main/webapp/WEB-INF/views/createDriver.jsp @@ -0,0 +1,18 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Driver page + + +

Create a new driver

+
+ + +
+ + + +
+ + diff --git a/src/main/webapp/WEB-INF/views/createManufacturer.jsp b/src/main/webapp/WEB-INF/views/createManufacturer.jsp new file mode 100644 index 000000000..04c9db502 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/createManufacturer.jsp @@ -0,0 +1,19 @@ + +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Manufacturer page + + +

Create a manufacturer

+
+ + +
+ + + +
+ + + diff --git a/src/main/webapp/WEB-INF/views/getAllCars.jsp b/src/main/webapp/WEB-INF/views/getAllCars.jsp new file mode 100644 index 000000000..870966a3a --- /dev/null +++ b/src/main/webapp/WEB-INF/views/getAllCars.jsp @@ -0,0 +1,36 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Cars table + + + + + + + + + + + + + + + + + + + +
IDMODEL>ManufacturerDriversDELETE
+ Id:
+ Name:
+ Country: +
+ Id:
+ Name:
+ License number: +
+
Delete
+ + diff --git a/src/main/webapp/WEB-INF/views/getAllDrivers.jsp b/src/main/webapp/WEB-INF/views/getAllDrivers.jsp new file mode 100644 index 000000000..75c5a582f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/getAllDrivers.jsp @@ -0,0 +1,25 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + All drivers page + + +

Drivers

+ + + + + + + + + + + + + + +
IDNAME>LICENSE NUMBER
Delete
+ + diff --git a/src/main/webapp/WEB-INF/views/getAllManufacturers.jsp b/src/main/webapp/WEB-INF/views/getAllManufacturers.jsp new file mode 100644 index 000000000..6b00e8c0a --- /dev/null +++ b/src/main/webapp/WEB-INF/views/getAllManufacturers.jsp @@ -0,0 +1,27 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Manufacturers table + + +

Manufacturers

+ + + + + + + + + + + + + + + +
IDNAMECOUNTRYDELETE
Delete
+ + +