diff --git a/src/main/java/de/hsel/itech/db/Database.java b/src/main/java/de/hsel/itech/db/Database.java index d6ba986..9243490 100644 --- a/src/main/java/de/hsel/itech/db/Database.java +++ b/src/main/java/de/hsel/itech/db/Database.java @@ -5,6 +5,7 @@ import de.hsel.itech.db.pojo.Author; import de.hsel.itech.db.pojo.Book; import de.hsel.itech.db.pojo.Category; import de.hsel.itech.db.pojo.Publisher; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.mariadb.jdbc.MariaDbPoolDataSource; @@ -23,8 +24,6 @@ import java.util.List; import java.util.Map; /** - * - * * @author Johannes Theiner * @version 0.1 * @since 0.1 @@ -34,7 +33,7 @@ public class Database { private static Database instance; public static Database getInstance() { - if(instance == null) + if (instance == null) instance = new Database(); return instance; } @@ -53,7 +52,7 @@ public class Database { assert connection != null; URL file = getClass().getClassLoader().getResource("database.sql"); assert file != null; - try(BufferedReader br = new BufferedReader(new FileReader(file.getFile()))) { + try (BufferedReader br = new BufferedReader(new FileReader(file.getFile()))) { for (String line = br.readLine(); line != null; line = br.readLine()) { PreparedStatement statement = connection.prepareStatement(line); statement.executeUpdate(); @@ -61,8 +60,7 @@ public class Database { } } catch (IOException e) { e.printStackTrace(); - } - finally { + } finally { connection.close(); } } catch (SQLException e) { @@ -100,52 +98,6 @@ public class Database { } - @Nullable - private Map.Entry getResultSet(long id, String table) { - Connection connection = getConnection(); - try{ - assert connection != null; - PreparedStatement statement = connection.prepareStatement("SELECT * FROM ? WHERE ID = ?"); - statement.setString(1, table); - statement.setLong(2, id); - ResultSet resultSet = statement.executeQuery(); - if(resultSet.next()) { - return new AbstractMap.SimpleEntry<>(resultSet, connection); - } - return null; - - }catch (SQLException ex) { - ex.printStackTrace(); - } - return null; - } - - @Nullable - private Map.Entry, Connection> getResultSets(long id, String table, String column) { - Connection connection = getConnection(); - try { - assert connection != null; - PreparedStatement statement = connection.prepareStatement("SELECT * FROM ? WHERE ? = ?"); - statement.setString(1, table); - statement.setString(2, column); - statement.setLong(3, id); - - ResultSet resultSet = statement.executeQuery(); - - Map.Entry, Connection> entry = new AbstractMap.SimpleEntry<>(new ArrayList<>(), connection); - while(resultSet.next()) { - entry.getKey().add(resultSet); - } - return entry; - - - }catch (SQLException ex) { - ex.printStackTrace(); - } - return null; - } - - @Nullable public Author getAuthor(long id) { Map.Entry entry = getResultSet(id, "author"); @@ -196,11 +148,11 @@ public class Database { @Nullable private List getAuthors(long id) { - Map.Entry, Connection> entry = getResultSets(id, "author_book", "book"); - assert entry != null; + Map.Entry, Connection> entry = getResultSets(id, "author_book", "book"); + assert entry != null; try { List list = new ArrayList<>(); - for(ResultSet rs : entry.getKey()) { + for (ResultSet rs : entry.getKey()) { list.add(rs.getInt("author")); } entry.getValue().close(); @@ -224,7 +176,7 @@ public class Database { List authorIds = getAuthors(id); assert authorIds != null; List authors = new ArrayList<>(); - for(int i : authorIds) { + for (int i : authorIds) { Author author = getAuthor(i); assert author != null; authors.add(author); @@ -237,4 +189,210 @@ public class Database { return book; } + @Nullable + public List getBooks() { + Map.Entry, Connection> entry = getResultSets("book", "id"); + assert entry != null; + + List ids = new ArrayList<>(); + try { + for (ResultSet resultSet : entry.getKey()) { + ids.add(resultSet.getLong("id")); + } + entry.getValue().close(); + } catch (SQLException ex) { + ex.printStackTrace(); + } + List books = new ArrayList<>(); + for(long id : ids) { + books.add(getBook(id)); + } + return books; + } + + @Nullable + public List getBooks(long category) { + Connection connection = getConnection(); + assert connection != null; + + List books = new ArrayList<>(); + try { + PreparedStatement statement = connection.prepareStatement("SELECT (id) FROM book WHERE category = ?"); + statement.setLong(1, category); + + ResultSet resultSet = statement.executeQuery(); + + while(resultSet.next()) { + books.add(getBook(resultSet.getLong("id"))); + } + + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + return books; + } + + @Nullable + public List getBooks(@NotNull Category category) { + return getBooks(category.getId()); + } + + + /** + * Inserts book into database + * + * authors, publishers, and category have to exist + * @param book Book + * @return insert count + */ + public int insert(@NotNull Book book) { + Connection connection = getConnection(); + assert connection != null; + + int insertCount = 0; + + try { + PreparedStatement statement = connection.prepareStatement("INSERT INTO book (title, description, price, year, publisher, category, image) VALUES (?, ?, ?, ?, ?, ?, ?)"); + statement.setString(1, book.getTitle()); + statement.setString(2, book.getDescription()); + statement.setInt(3, book.getPrice()); + statement.setInt(4, book.getYear().getValue()); + statement.setLong(5, book.getPublisher().getId()); + statement.setLong(6, book.getCategory().getId()); + statement.setString(7, book.getImage()); + insertCount += statement.executeUpdate(); + + for(Author author : book.getAuthors()) { + PreparedStatement authorStatement = connection.prepareStatement("INSERT INTO author_book (author, book) VALUES (?, ?)"); + statement.setLong(1, author.getId()); + statement.setLong(2, book.getIsbn()); + insertCount += authorStatement.executeUpdate(); + } + + connection.close(); + } catch (SQLException ex) { + ex.printStackTrace(); + } + return insertCount; + } + + /** + * inserts Category into database + * @param category Category + * @return insert count + */ + public int insert(@NotNull Category category) { + Connection connection = getConnection(); + assert connection != null; + + int insertCount = 0; + + try{ + PreparedStatement statement = connection.prepareStatement("INSERT INTO category (name, image) VALUES (?, ?)"); + statement.setString(1, category.getName()); + statement.setString(2, category.getImage()); + insertCount += statement.executeUpdate(); + + connection.close(); + }catch (SQLException ex) { + ex.printStackTrace(); + } + + return insertCount; + } + + /** + * inserts Author + * @param author Author + * @return insert count + */ + public int insert(@NotNull Author author) { + Connection connection = getConnection(); + assert connection != null; + + int insertCount = 0; + try{ + PreparedStatement statement = connection.prepareStatement("INSERT INTO author (name) VALUES (?)"); + statement.setString(1, author.getName()); + + insertCount += statement.executeUpdate(); + + connection.close(); + }catch (SQLException ex) { + ex.printStackTrace(); + } + + + return insertCount; + } + + + + + + @Nullable + private Map.Entry getResultSet(long id, String table) { + Connection connection = getConnection(); + try { + assert connection != null; + PreparedStatement statement = connection.prepareStatement("SELECT * FROM ? WHERE ID = ?"); + statement.setString(1, table); + statement.setLong(2, id); + ResultSet resultSet = statement.executeQuery(); + if (resultSet.next()) { + return new AbstractMap.SimpleEntry<>(resultSet, connection); + } + return null; + + } catch (SQLException ex) { + ex.printStackTrace(); + } + return null; + } + + @NotNull + private Map.Entry, Connection> getListConnectionEntry(Connection connection, PreparedStatement statement) throws SQLException { + ResultSet resultSet = statement.executeQuery(); + + Map.Entry, Connection> entry = new AbstractMap.SimpleEntry<>(new ArrayList<>(), connection); + while (resultSet.next()) { + entry.getKey().add(resultSet); + } + return entry; + } + + @Nullable + private Map.Entry, Connection> getResultSets(long id, String table, String column) { + Connection connection = getConnection(); + try { + assert connection != null; + PreparedStatement statement = connection.prepareStatement("SELECT * FROM ? WHERE ? = ?"); + statement.setString(1, table); + statement.setString(2, column); + statement.setLong(3, id); + + return getListConnectionEntry(connection, statement); + } catch (SQLException ex) { + ex.printStackTrace(); + } + return null; + } + + @Nullable + private Map.Entry, Connection> getResultSets(String table, String columns) { + Connection connection = getConnection(); + try { + assert connection != null; + PreparedStatement statement = connection.prepareStatement("SELECT (?) FROM ?"); + statement.setString(1, columns); + statement.setString(2, table); + + return getListConnectionEntry(connection, statement); + } catch (SQLException ex) { + ex.printStackTrace(); + } + return null; + } + } \ No newline at end of file diff --git a/src/main/java/de/hsel/itech/db/pojo/Address.java b/src/main/java/de/hsel/itech/db/pojo/Address.java index f986fbf..80f64a2 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Address.java +++ b/src/main/java/de/hsel/itech/db/pojo/Address.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; /** * @author Johannes Theiner @@ -11,13 +13,14 @@ import lombok.Data; @Data @AllArgsConstructor +@RequiredArgsConstructor public class Address { - private Customer customer; + @NonNull private Customer customer; private long id; - private String name; - private String street; - private String number; - private int zipCode; - private String city; + @NonNull private String name; + @NonNull private String street; + @NonNull private String number; + @NonNull private int zipCode; + @NonNull private String city; } \ No newline at end of file diff --git a/src/main/java/de/hsel/itech/db/pojo/Author.java b/src/main/java/de/hsel/itech/db/pojo/Author.java index 507893e..a657c51 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Author.java +++ b/src/main/java/de/hsel/itech/db/pojo/Author.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; /** * @author Johannes Theiner @@ -11,9 +13,10 @@ import lombok.Data; @Data @AllArgsConstructor +@RequiredArgsConstructor public class Author { private long id; - private String name; + @NonNull private String name; } diff --git a/src/main/java/de/hsel/itech/db/pojo/Book.java b/src/main/java/de/hsel/itech/db/pojo/Book.java index 8599fb7..8adb3a7 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Book.java +++ b/src/main/java/de/hsel/itech/db/pojo/Book.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; import java.time.Year; import java.util.List; @@ -14,21 +16,22 @@ import java.util.List; @Data @AllArgsConstructor +@RequiredArgsConstructor public class Book { private long isbn; - private List authors; - private Publisher publisher; - private Category category; - private String title; - private Year year; + @NonNull private List authors; + @NonNull private Publisher publisher; + @NonNull private Category category; + @NonNull private String title; + @NonNull private Year year; /** * saved in cents */ - private int price; - private String description; - private String image; + @NonNull private int price; + @NonNull private String description; + @NonNull private String image; diff --git a/src/main/java/de/hsel/itech/db/pojo/Category.java b/src/main/java/de/hsel/itech/db/pojo/Category.java index 6c6a166..f2ebeb4 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Category.java +++ b/src/main/java/de/hsel/itech/db/pojo/Category.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; /** * @author Johannes Theiner @@ -11,9 +13,10 @@ import lombok.Data; @Data @AllArgsConstructor +@RequiredArgsConstructor public class Category { private long id; - private String name; - private String image; + @NonNull private String name; + @NonNull private String image; } diff --git a/src/main/java/de/hsel/itech/db/pojo/CreditCardPayment.java b/src/main/java/de/hsel/itech/db/pojo/CreditCardPayment.java index 0a19e81..bb7957f 100644 --- a/src/main/java/de/hsel/itech/db/pojo/CreditCardPayment.java +++ b/src/main/java/de/hsel/itech/db/pojo/CreditCardPayment.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; import java.time.LocalDate; @@ -13,12 +15,13 @@ import java.time.LocalDate; @Data @AllArgsConstructor +@RequiredArgsConstructor public class CreditCardPayment { private long id; - private Customer customer; - private int number; - private String owner; - private LocalDate expiration; - private int checksum; + @NonNull private Customer customer; + @NonNull private int number; + @NonNull private String owner; + @NonNull private LocalDate expiration; + @NonNull private int checksum; } \ No newline at end of file diff --git a/src/main/java/de/hsel/itech/db/pojo/Customer.java b/src/main/java/de/hsel/itech/db/pojo/Customer.java index b06ab30..61c0a2f 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Customer.java +++ b/src/main/java/de/hsel/itech/db/pojo/Customer.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; /** * @author Johannes Theiner @@ -11,11 +13,12 @@ import lombok.Data; @Data @AllArgsConstructor +@RequiredArgsConstructor public class Customer { private long id; - private String email; - private String name; - private String password; - private boolean admin; + @NonNull private String email; + @NonNull private String name; + @NonNull private String password; + @NonNull private boolean admin; } \ No newline at end of file diff --git a/src/main/java/de/hsel/itech/db/pojo/DebitCardPayment.java b/src/main/java/de/hsel/itech/db/pojo/DebitCardPayment.java index 3741404..d4bfb78 100644 --- a/src/main/java/de/hsel/itech/db/pojo/DebitCardPayment.java +++ b/src/main/java/de/hsel/itech/db/pojo/DebitCardPayment.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; /** * @author Johannes Theiner @@ -11,11 +13,12 @@ import lombok.Data; @Data @AllArgsConstructor +@RequiredArgsConstructor public class DebitCardPayment { private long id; - private Customer customer; - private String iban; - private String bic; - private String owner; + @NonNull private Customer customer; + @NonNull private String iban; + @NonNull private String bic; + @NonNull private String owner; } \ No newline at end of file diff --git a/src/main/java/de/hsel/itech/db/pojo/InvoicePayment.java b/src/main/java/de/hsel/itech/db/pojo/InvoicePayment.java index acf8a5a..4bf7d0e 100644 --- a/src/main/java/de/hsel/itech/db/pojo/InvoicePayment.java +++ b/src/main/java/de/hsel/itech/db/pojo/InvoicePayment.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; /** * @author Johannes Theiner @@ -11,8 +13,9 @@ import lombok.Data; @Data @AllArgsConstructor +@RequiredArgsConstructor public class InvoicePayment { private long id; - private Customer customer; + @NonNull private Customer customer; } \ No newline at end of file diff --git a/src/main/java/de/hsel/itech/db/pojo/Order.java b/src/main/java/de/hsel/itech/db/pojo/Order.java index c0f8a14..e990112 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Order.java +++ b/src/main/java/de/hsel/itech/db/pojo/Order.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; import java.time.LocalDateTime; @@ -14,16 +16,17 @@ import java.time.LocalDateTime; @Data @AllArgsConstructor +@RequiredArgsConstructor public class Order { private long id; - private LocalDateTime date; - private Book book; + @NonNull private LocalDateTime date; + @NonNull private Book book; /** * price in cents */ - private int price; - private PaymentType paymentType; - private Address address; + @NonNull private int price; + @NonNull private PaymentType paymentType; + @NonNull private Address address; } \ No newline at end of file diff --git a/src/main/java/de/hsel/itech/db/pojo/PayPalPayment.java b/src/main/java/de/hsel/itech/db/pojo/PayPalPayment.java index e5804ac..6a5d4fe 100644 --- a/src/main/java/de/hsel/itech/db/pojo/PayPalPayment.java +++ b/src/main/java/de/hsel/itech/db/pojo/PayPalPayment.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; /** * @author Johannes Theiner @@ -11,10 +13,11 @@ import lombok.Data; @Data @AllArgsConstructor +@RequiredArgsConstructor public class PayPalPayment { private long id; - private Customer customer; - private String email; - private String authCode; + @NonNull private Customer customer; + @NonNull private String email; + @NonNull private String authCode; } \ No newline at end of file diff --git a/src/main/java/de/hsel/itech/db/pojo/PaymentType.java b/src/main/java/de/hsel/itech/db/pojo/PaymentType.java index 5f7e519..f191503 100644 --- a/src/main/java/de/hsel/itech/db/pojo/PaymentType.java +++ b/src/main/java/de/hsel/itech/db/pojo/PaymentType.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; /** * @author Johannes Theiner @@ -11,8 +13,9 @@ import lombok.Data; @Data @AllArgsConstructor +@RequiredArgsConstructor public class PaymentType { private long id; - private String name; + @NonNull private String name; } \ No newline at end of file diff --git a/src/main/java/de/hsel/itech/db/pojo/Publisher.java b/src/main/java/de/hsel/itech/db/pojo/Publisher.java index c036d86..eee9d9e 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Publisher.java +++ b/src/main/java/de/hsel/itech/db/pojo/Publisher.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; /** * @author Johannes Theiner @@ -11,8 +13,9 @@ import lombok.Data; @Data @AllArgsConstructor +@RequiredArgsConstructor public class Publisher { private long id; - private String name; + @NonNull private String name; } \ No newline at end of file diff --git a/src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java b/src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java index 375d01a..c56c4f3 100644 --- a/src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java +++ b/src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java @@ -2,6 +2,8 @@ package de.hsel.itech.db.pojo; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; /** * @author Johannes Theiner @@ -11,10 +13,11 @@ import lombok.Data; @Data @AllArgsConstructor +@RequiredArgsConstructor public class ShoppingCart { private long id; - private Customer customer; - private Book article; - private int count; + @NonNull private Customer customer; + @NonNull private Book article; + @NonNull private int count; } \ No newline at end of file diff --git a/src/main/java/de/hsel/itech/servlet/Database.java b/src/main/java/de/hsel/itech/servlet/DBTest.java similarity index 86% rename from src/main/java/de/hsel/itech/servlet/Database.java rename to src/main/java/de/hsel/itech/servlet/DBTest.java index a5c9a15..7f797c1 100644 --- a/src/main/java/de/hsel/itech/servlet/Database.java +++ b/src/main/java/de/hsel/itech/servlet/DBTest.java @@ -1,5 +1,7 @@ package de.hsel.itech.servlet; +import de.hsel.itech.db.Database; + import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -11,7 +13,7 @@ import java.io.PrintWriter; * @version 0.1 * @since 0.1 **/ -public class Database extends HttpServlet { +public class DBTest extends HttpServlet { private static final long serialVersionUID = 15679036734L; @@ -33,7 +35,7 @@ public class Database extends HttpServlet { out.println("Hallo Welt!"); out.println(""); out.println(""); - out.println("

" + de.hsel.itech.db.Database.getInstance().getHello() + "

"); + out.println("

" + Database.getInstance().getHello() + "

"); out.println(""); out.println(""); } diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 391a545..b4d113c 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -12,7 +12,7 @@ database - de.hsel.itech.servlet.Database + de.hsel.itech.servlet.DBTest