From 45b415cedfec975b760a95b6e661f07282eec448 Mon Sep 17 00:00:00 2001 From: SVEK Date: Thu, 18 Apr 2019 14:41:45 +0200 Subject: [PATCH] Add Lab5 --- src/main/java/Lab5/App.java | 34 ++++++++ src/main/java/Lab5/CarCrudResource.java | 61 ++++++++++++++ src/main/java/Lab5/CarsDAO.java | 106 ++++++++++++++++++++++++ 3 files changed, 201 insertions(+) create mode 100644 src/main/java/Lab5/App.java create mode 100644 src/main/java/Lab5/CarCrudResource.java create mode 100644 src/main/java/Lab5/CarsDAO.java diff --git a/src/main/java/Lab5/App.java b/src/main/java/Lab5/App.java new file mode 100644 index 0000000..2274dcc --- /dev/null +++ b/src/main/java/Lab5/App.java @@ -0,0 +1,34 @@ +package Lab5; + +import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory; +import com.sun.jersey.api.core.ClassNamesResourceConfig; +import com.sun.jersey.api.core.ResourceConfig; +import org.glassfish.grizzly.http.server.HttpServer; + +import java.io.IOException; +import java.net.URI; + +public class App { + + private static final URI BASE_URI = URI.create("http://localhost:8081/rest/"); + + public static void main(String[] args) { + HttpServer server = null; + try { + ResourceConfig resourceConfig = new ClassNamesResourceConfig(CarCrudResource.class); + server = GrizzlyServerFactory.createHttpServer(BASE_URI, resourceConfig); + server.start(); + System.in.read(); + stopServer(server); + } catch (IOException e) { + e.printStackTrace(); + stopServer(server); + } + } + + private static void stopServer(HttpServer server) { + if (server != null) + server.stop(); + } + +} diff --git a/src/main/java/Lab5/CarCrudResource.java b/src/main/java/Lab5/CarCrudResource.java new file mode 100644 index 0000000..ae1ff77 --- /dev/null +++ b/src/main/java/Lab5/CarCrudResource.java @@ -0,0 +1,61 @@ +package Lab5; + +//import Lab2.CheckStatus; +import Lab4.common.Car; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.Date; +import java.util.List; + +@Path("/cars") +@Produces({MediaType.APPLICATION_JSON}) +public class CarCrudResource { + + private final static CarsDAO carDao = new CarsDAO(); + + /// Find + @GET + public List findCars(@QueryParam("Name") String name, + @QueryParam("model") String model, + @QueryParam("country") String country, + @QueryParam("dateOfSales") Date dateOfSales, + @QueryParam("power") Integer power) { + return carDao.getDataByFields(name, model, country, dateOfSales, power); + } + + /// seve + @POST + @Path("/saves") + public String insertCars(@QueryParam("Name") String name, + @QueryParam("model") String model, + @QueryParam("country") String country, + @QueryParam("dateOfSales") Date dateOfSales, + @QueryParam("power") Integer power) { + return carDao.insertDB(name, model, country, dateOfSales, power).toString(); + } + + /// Update id + @PUT + @Path("/update/ID") + public String updateCars(@QueryParam("id") Integer id, + @QueryParam("Name") String name, + @QueryParam("model") String model, + @QueryParam("country") String country, + @QueryParam("dateOfSales") Date dateOfSales, + @QueryParam("power") Integer power) { + return String.valueOf(carDao.updateDB(id, name, model, country, dateOfSales, power)); + } + + /// Delete + + @Path("/delete/ID") + @DELETE + public String deleteCars(@QueryParam("id") Integer id) { + + return carDao.deleteDB(id).getStringValue(); + } + + + +} diff --git a/src/main/java/Lab5/CarsDAO.java b/src/main/java/Lab5/CarsDAO.java new file mode 100644 index 0000000..b7a0a92 --- /dev/null +++ b/src/main/java/Lab5/CarsDAO.java @@ -0,0 +1,106 @@ +package Lab5; + +import Lab1.CarDAO; +import Lab1.ConnectionUtil; +import Lab2.CheckStatus; +import Lab4.common.StandaloneCarDAO; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Date; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class CarsDAO extends StandaloneCarDAO { + + public static Integer insertDB(String name, String model, String country, Date dateOfSales, int power) { + String query = " insert into cars (name, model, country, dateOfSales, power)" + + " values (?, ?, ?, ?, ?)"; + int index = 1; + Integer id = null; + try (Connection connection = ConnectionUtil.getConnection();) { + + try (PreparedStatement preparedStmt = connection.prepareStatement(query)) { + preparedStmt.setString(index++, name); + preparedStmt.setString(index++, model); + preparedStmt.setDate(index++, dateOfSales != null + ? new java.sql.Date(dateOfSales.getTime()) + : null); + preparedStmt.setString(index++, country); + preparedStmt.setObject(index, power); + preparedStmt.executeUpdate(); + try (ResultSet result = connection.createStatement().executeQuery("select max(id) as maxid from cars")) { + result.next(); + id = result.getInt("maxid"); + } + } + } catch (SQLException ex) { + Logger.getLogger(CarDAO.class.getName()).log(Level.SEVERE, null, ex); + } + return id; + } + + private static void addUpdated(Object value, String fieldName, StringBuilder query) { + if (value != null) { + if (value instanceof String) { + query.append(fieldName).append(" = '").append(value).append("'").append(", "); + } else { + query.append(fieldName).append(" = ").append(value).append(','); + } + } + } + + public static CheckStatus updateDB(Integer id, String name, String model, String country, Date dateOfSales, int power) { + StringBuilder query = new StringBuilder(" update cars set "); + addUpdated(name, "name", query); + addUpdated(model, "model", query); + addUpdated(country, "country", query); + addUpdated(dateOfSales, "dateOfSales", query); + addUpdated(power, "power", query); + query.replace(query.lastIndexOf("."), query.length(), " "); + query.append(" where id = " + id); + try (Connection connection = ConnectionUtil.getConnection();) { + try (PreparedStatement preparedStmt = connection.prepareStatement(query.toString())) { + preparedStmt.executeUpdate(); + } + } catch (SQLException ex) { + Logger.getLogger(CarDAO.class.getName()).log(Level.SEVERE, null, ex); + return CheckStatus.FAIL; + } + return CheckStatus.SUCCESS_UPDATE; + } + + public static CheckStatus deleteDB(Integer id) { + String query = "DELETE FROM cars WHERE id = " + id; + try (Connection connection = ConnectionUtil.getConnection()) { + try (PreparedStatement preparedStmt = connection.prepareStatement(query)) { + preparedStmt.executeUpdate(); + } + } catch (SQLException ex) { + Logger.getLogger(CarDAO.class.getName()).log(Level.SEVERE, null, ex); + return CheckStatus.FAIL; + } + return CheckStatus.SUCCESS_DELETE; + } + + public boolean findID(Integer id) { + boolean isIdPresent = false; + String query = "select count(*) from cars where id = ?"; + try (Connection connection = ConnectionUtil.getConnection()) { + try (PreparedStatement ps = connection.prepareStatement(query)) { + ps.setInt(1, id); + ResultSet rs = ps.executeQuery(); + if (rs.next()) { + isIdPresent = rs.getInt(1) == 1; + } + } + } catch (SQLException ex) { + Logger.getLogger(CarsDAO.class.getName()).log(Level.SEVERE, null, ex); + } finally { + return isIdPresent; + } + } + +}