From 76eea1b8f7536417ef477cd481f04a2c0451b141 Mon Sep 17 00:00:00 2001 From: SVEK Date: Wed, 17 Apr 2019 17:37:17 +0200 Subject: [PATCH] Add Lab4 --- src/main/java/Lab4/App.java | 33 ++++++++++ src/main/java/Lab4/common/Car.java | 64 ++++++++++++++++++ src/main/java/Lab4/common/CarDAO.java | 66 +++++++++++++++++++ src/main/java/Lab4/common/CarResource.java | 29 ++++++++ src/main/java/Lab4/common/ConnectionUtil.java | 34 ++++++++++ .../java/Lab4/common/StandaloneCarDAO.java | 11 ++++ 6 files changed, 237 insertions(+) create mode 100644 src/main/java/Lab4/App.java create mode 100644 src/main/java/Lab4/common/Car.java create mode 100644 src/main/java/Lab4/common/CarDAO.java create mode 100644 src/main/java/Lab4/common/CarResource.java create mode 100644 src/main/java/Lab4/common/ConnectionUtil.java create mode 100644 src/main/java/Lab4/common/StandaloneCarDAO.java diff --git a/src/main/java/Lab4/App.java b/src/main/java/Lab4/App.java new file mode 100644 index 0000000..73683db --- /dev/null +++ b/src/main/java/Lab4/App.java @@ -0,0 +1,33 @@ +package Lab4; + +import Lab4.common.CarResource; +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(CarResource.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/Lab4/common/Car.java b/src/main/java/Lab4/common/Car.java new file mode 100644 index 0000000..fdae3b9 --- /dev/null +++ b/src/main/java/Lab4/common/Car.java @@ -0,0 +1,64 @@ +package Lab4.common; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.Date; + + +@XmlRootElement +public class Car { + + private String name; + private Date dateOfSales; + private String country; + private double power; + private String model; + + public Car(String name, Date date, String country, double power, String model) { + this.name = name; + this.dateOfSales = date; + this.country = country; + this.power = power; + this.model = model; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getdateOfSales() { + return dateOfSales; + } + + public void setdateOfSales(Date dateOfSales) { + this.dateOfSales = dateOfSales; + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public double getpower() { + return power; + } + + public void setpower(double power) { + this.power = power; + } + + public String getmodel() { + return model; + } + + public void setmodel(String model) { + this.model = model; + } + +} diff --git a/src/main/java/Lab4/common/CarDAO.java b/src/main/java/Lab4/common/CarDAO.java new file mode 100644 index 0000000..b157e92 --- /dev/null +++ b/src/main/java/Lab4/common/CarDAO.java @@ -0,0 +1,66 @@ +package Lab4.common; + +import java.sql.*; +import java.util.*; +import java.util.Date; +import java.util.logging.Level; +import java.util.logging.Logger; + +public abstract class CarDAO { + + private Boolean CheckIN(Object value, String fieldName, Boolean isNotFirst, StringBuilder query) { + if (value != null) { + if (isNotFirst) { + query.append(" and "); + } + if (value instanceof String) { + query.append(fieldName).append(" = '").append(value).append("'"); + } else { + query.append(fieldName).append(" = ").append(value); + } + if (!isNotFirst) { + return true; + } + } + return isNotFirst; + } + + public abstract Connection getConnection(); + + public List getDataByFields(String name, String model, String country, Date dateOfSales, Integer power) { + List cars = Collections.emptyList(); + try (Connection connection = getConnection()) { + StringBuilder query = new StringBuilder("select * from cars"); + boolean notFirstField = false; + if (name != null || model != null || country != null && dateOfSales != null || power != 0) { + query.append(" where "); + } + notFirstField = CheckIN(name, "name", notFirstField, query); + notFirstField = CheckIN(model, "model", notFirstField, query); + notFirstField = CheckIN(country, "country", notFirstField, query); + notFirstField = CheckIN(dateOfSales, "dateOfSales", notFirstField, query); + CheckIN(power, "power", notFirstField, query); + + PreparedStatement stmt = connection.prepareStatement(query.toString()); + ResultSet rs = stmt.executeQuery(); + cars = extractCarsFromResult(rs); + } catch (SQLException ex) { + Logger.getLogger(CarDAO.class.getName()).log(Level.SEVERE, null, ex); + } + return cars; + } + + private List extractCarsFromResult(ResultSet rs) throws SQLException{ + List cars = new ArrayList(); + while (rs.next()) { + String name = rs.getString("name"); + Date date = rs.getDate("dateOfSales"); + String model = rs.getString("model"); + String country = rs.getString("country"); + double power = rs.getDouble("power"); + + Car car = new Car(name, date, country, power, model); + cars.add(car); + } return cars; + } +} \ No newline at end of file diff --git a/src/main/java/Lab4/common/CarResource.java b/src/main/java/Lab4/common/CarResource.java new file mode 100644 index 0000000..83d66b5 --- /dev/null +++ b/src/main/java/Lab4/common/CarResource.java @@ -0,0 +1,29 @@ +package Lab4.common; + + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + +import java.util.Date; +import java.util.List; + +@Path("/cars") +@Produces({MediaType.APPLICATION_JSON}) +public class CarResource { + + private final static CarDAO carDao = new StandaloneCarDAO(); + + @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); + } + + +} diff --git a/src/main/java/Lab4/common/ConnectionUtil.java b/src/main/java/Lab4/common/ConnectionUtil.java new file mode 100644 index 0000000..0c3666f --- /dev/null +++ b/src/main/java/Lab4/common/ConnectionUtil.java @@ -0,0 +1,34 @@ +package Lab4.common; + +//import Lab1.CarDAO; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class ConnectionUtil { + /// private static final String JDBC_URL = "jdbc:postgresql://192.168.1.119:5432/"; + private static final String JDBC_URL = "jdbc:postgresql://5.19.136.134:5432/"; + private static final String JDBC_USER = "postgres"; + private static final String JDBC_PASSWORD = "qwerty"; + + static { + try { + Class.forName("org.postgresql.Driver"); + } catch (ClassNotFoundException ex) { + Logger.getLogger(CarDAO.class.getName()).log(Level.SEVERE, null, ex); + } + } + public static Connection getConnection() { + Connection connection = null; + try { + connection = DriverManager.getConnection(JDBC_URL, JDBC_USER, + JDBC_PASSWORD); + } catch (SQLException ex) { + Logger.getLogger(ConnectionUtil.class.getName()).log(Level.SEVERE, null, ex); + } + return connection; + } +} diff --git a/src/main/java/Lab4/common/StandaloneCarDAO.java b/src/main/java/Lab4/common/StandaloneCarDAO.java new file mode 100644 index 0000000..43dccdd --- /dev/null +++ b/src/main/java/Lab4/common/StandaloneCarDAO.java @@ -0,0 +1,11 @@ +package Lab4.common; + + +import java.sql.Connection; + +public class StandaloneCarDAO extends CarDAO { + @Override + public Connection getConnection() { + return ConnectionUtil.getConnection(); + } +}