From 18efa59177be1a7818ffc4c6b2d90ff97df1a3eb Mon Sep 17 00:00:00 2001 From: joethei Date: Wed, 17 Apr 2019 14:59:35 +0200 Subject: [PATCH 1/4] + get(Author/Publisher/Category/Book) --- src/main/java/de/hsel/itech/db/Database.java | 147 +++++++++++++++++- src/main/java/de/hsel/itech/db/pojo/Book.java | 5 +- .../java/de/hsel/itech/db/pojo/Category.java | 2 +- 3 files changed, 150 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/hsel/itech/db/Database.java b/src/main/java/de/hsel/itech/db/Database.java index 3b9267e..d6ba986 100644 --- a/src/main/java/de/hsel/itech/db/Database.java +++ b/src/main/java/de/hsel/itech/db/Database.java @@ -1,16 +1,26 @@ package de.hsel.itech.db; import de.hsel.itech.config.Configuration; +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.Nullable; import org.mariadb.jdbc.MariaDbPoolDataSource; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; +import java.net.URL; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.time.Year; +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; /** * @@ -41,7 +51,9 @@ public class Database { Connection connection = getConnection(); assert connection != null; - try(BufferedReader br = new BufferedReader(new FileReader(getClass().getClassLoader().getResource("database.sql").getFile()))) { + URL file = getClass().getClassLoader().getResource("database.sql"); + assert file != null; + 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(); @@ -88,8 +100,141 @@ 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"); + assert entry != null; + + ResultSet rs = entry.getKey(); + Author author = null; + try { + author = new Author(rs.getLong("id"), rs.getString("name")); + entry.getValue().close(); + } catch (SQLException e) { + e.printStackTrace(); + } + return author; + } + + @Nullable + public Category getCategory(long id) { + Map.Entry entry = getResultSet(id, "category"); + assert entry != null; + + ResultSet rs = entry.getKey(); + Category category = null; + try { + category = new Category(rs.getLong("id"), rs.getString("name"), rs.getString("image")); + entry.getValue().close(); + } catch (SQLException e) { + e.printStackTrace(); + } + return category; + } + + @Nullable + public Publisher getPublisher(long id) { + Map.Entry entry = getResultSet(id, "category"); + assert entry != null; + + ResultSet rs = entry.getKey(); + Publisher publisher = null; + try { + publisher = new Publisher(rs.getLong("id"), rs.getString("name")); + entry.getValue().close(); + } catch (SQLException e) { + e.printStackTrace(); + } + return publisher; + } + + @Nullable + private List getAuthors(long id) { + Map.Entry, Connection> entry = getResultSets(id, "author_book", "book"); + assert entry != null; + try { + List list = new ArrayList<>(); + for(ResultSet rs : entry.getKey()) { + list.add(rs.getInt("author")); + } + entry.getValue().close(); + return list; + } catch (SQLException e) { + e.printStackTrace(); + } + return null; + } + + @Nullable + public Book getBook(long id) { + Map.Entry entry = getResultSet(id, "book"); + assert entry != null; + + ResultSet rs = entry.getKey(); + Book book = null; + try { + Category category = getCategory(rs.getLong("category")); + Publisher publisher = getPublisher(rs.getLong("publisher")); + List authorIds = getAuthors(id); + assert authorIds != null; + List authors = new ArrayList<>(); + for(int i : authorIds) { + Author author = getAuthor(i); + assert author != null; + authors.add(author); + } + book = new Book(rs.getLong("id"), authors, publisher, category, rs.getString("title"), Year.of(rs.getInt("year")), rs.getInt("price"), rs.getString("description"), rs.getString("image")); + entry.getValue().close(); + } catch (SQLException e) { + e.printStackTrace(); + } + return book; + } + } \ No newline at end of file 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 79160e1..8599fb7 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Book.java +++ b/src/main/java/de/hsel/itech/db/pojo/Book.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import java.time.Year; +import java.util.List; /** * @author Johannes Theiner @@ -15,8 +16,8 @@ import java.time.Year; @AllArgsConstructor public class Book { - private int isbn; - private Author author; + private long isbn; + private List authors; private Publisher publisher; private Category category; private String title; 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 685ca42..6c6a166 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Category.java +++ b/src/main/java/de/hsel/itech/db/pojo/Category.java @@ -13,7 +13,7 @@ import lombok.Data; @AllArgsConstructor public class Category { - private int id; + private long id; private String name; private String image; } From 59ecac912cf933dedccfe3a822cce579478b3be3 Mon Sep 17 00:00:00 2001 From: Johannes Theiner Date: Wed, 17 Apr 2019 20:14:26 +0200 Subject: [PATCH 2/4] + insert(Book/Author/Publisher) + getBooks Signed-off-by: Johannes Theiner --- src/main/java/de/hsel/itech/db/Database.java | 270 ++++++++++++++---- .../java/de/hsel/itech/db/pojo/Address.java | 15 +- .../java/de/hsel/itech/db/pojo/Author.java | 5 +- src/main/java/de/hsel/itech/db/pojo/Book.java | 19 +- .../java/de/hsel/itech/db/pojo/Category.java | 7 +- .../hsel/itech/db/pojo/CreditCardPayment.java | 13 +- .../java/de/hsel/itech/db/pojo/Customer.java | 11 +- .../hsel/itech/db/pojo/DebitCardPayment.java | 11 +- .../de/hsel/itech/db/pojo/InvoicePayment.java | 5 +- .../java/de/hsel/itech/db/pojo/Order.java | 13 +- .../de/hsel/itech/db/pojo/PayPalPayment.java | 9 +- .../de/hsel/itech/db/pojo/PaymentType.java | 5 +- .../java/de/hsel/itech/db/pojo/Publisher.java | 5 +- .../de/hsel/itech/db/pojo/ShoppingCart.java | 9 +- .../servlet/{Database.java => DBTest.java} | 6 +- src/main/webapp/WEB-INF/web.xml | 2 +- 16 files changed, 302 insertions(+), 103 deletions(-) rename src/main/java/de/hsel/itech/servlet/{Database.java => DBTest.java} (86%) 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 From 8b9d81bfc15f440040f7bdf0e54cee165416861e Mon Sep 17 00:00:00 2001 From: joethei Date: Thu, 18 Apr 2019 09:10:13 +0200 Subject: [PATCH 3/4] + delete(Book/Author/Publisher/Category) --- src/main/java/de/hsel/itech/db/Database.java | 133 +++++++++++++++---- 1 file changed, 108 insertions(+), 25 deletions(-) diff --git a/src/main/java/de/hsel/itech/db/Database.java b/src/main/java/de/hsel/itech/db/Database.java index 9243490..4e3c60a 100644 --- a/src/main/java/de/hsel/itech/db/Database.java +++ b/src/main/java/de/hsel/itech/db/Database.java @@ -30,6 +30,12 @@ import java.util.Map; */ public class Database { + private final String BOOK = "book"; + private final String AUTHOR = "author"; + private final String AUTHOR_BOOK = "author_book"; + private final String PUBLISHER = "publisher"; + private final String CATEGORY = "category"; + private static Database instance; public static Database getInstance() { @@ -100,7 +106,7 @@ public class Database { @Nullable public Author getAuthor(long id) { - Map.Entry entry = getResultSet(id, "author"); + Map.Entry entry = getResultSet(id, AUTHOR); assert entry != null; ResultSet rs = entry.getKey(); @@ -116,7 +122,7 @@ public class Database { @Nullable public Category getCategory(long id) { - Map.Entry entry = getResultSet(id, "category"); + Map.Entry entry = getResultSet(id, CATEGORY); assert entry != null; ResultSet rs = entry.getKey(); @@ -132,7 +138,7 @@ public class Database { @Nullable public Publisher getPublisher(long id) { - Map.Entry entry = getResultSet(id, "category"); + Map.Entry entry = getResultSet(id, PUBLISHER); assert entry != null; ResultSet rs = entry.getKey(); @@ -148,12 +154,12 @@ public class Database { @Nullable private List getAuthors(long id) { - Map.Entry, Connection> entry = getResultSets(id, "author_book", "book"); + Map.Entry, Connection> entry = getResultSets(id, AUTHOR_BOOK, BOOK); assert entry != null; try { List list = new ArrayList<>(); for (ResultSet rs : entry.getKey()) { - list.add(rs.getInt("author")); + list.add(rs.getInt(AUTHOR)); } entry.getValue().close(); return list; @@ -165,14 +171,14 @@ public class Database { @Nullable public Book getBook(long id) { - Map.Entry entry = getResultSet(id, "book"); + Map.Entry entry = getResultSet(id, BOOK); assert entry != null; ResultSet rs = entry.getKey(); Book book = null; try { - Category category = getCategory(rs.getLong("category")); - Publisher publisher = getPublisher(rs.getLong("publisher")); + Category category = getCategory(rs.getLong(CATEGORY)); + Publisher publisher = getPublisher(rs.getLong(PUBLISHER)); List authorIds = getAuthors(id); assert authorIds != null; List authors = new ArrayList<>(); @@ -191,7 +197,7 @@ public class Database { @Nullable public List getBooks() { - Map.Entry, Connection> entry = getResultSets("book", "id"); + Map.Entry, Connection> entry = getResultSets(BOOK, "id"); assert entry != null; List ids = new ArrayList<>(); @@ -298,7 +304,6 @@ public class Database { }catch (SQLException ex) { ex.printStackTrace(); } - return insertCount; } @@ -322,11 +327,90 @@ public class Database { }catch (SQLException ex) { ex.printStackTrace(); } - - return insertCount; } + /** + * inserts Publisher + * @param publisher Publisher + * @return insert count + */ + public int insert(@NotNull Publisher publisher) { + Connection connection = getConnection(); + assert connection != null; + + int insertCount = 0; + try{ + PreparedStatement statement = connection.prepareStatement("INSERT INTO publisher (name) VALUES (?)"); + statement.setString(1, publisher.getName()); + + insertCount += statement.executeUpdate(); + + connection.close(); + }catch (SQLException ex) { + ex.printStackTrace(); + } + return insertCount; + } + + public int deleteBook(long id) { + int deleteCount = 0; + + try{ + Connection connection = getConnection(); + assert connection != null; + + PreparedStatement statement = connection.prepareStatement("DELETE FROM author_book WHERE book = ?"); + statement.setLong(1, id); + deleteCount =+ statement.executeUpdate(); + + connection.close(); + }catch (SQLException ex) { + ex.printStackTrace(); + } + + deleteCount += delete(id, BOOK); + + return deleteCount; + } + + public int deleteAuthor(long id) { + return delete(id, AUTHOR); + } + + public int deletePublisher(long id) { + return delete(id, PUBLISHER); + } + + public int deleteCategory(long id) { + return delete(id, CATEGORY); + } + + + + /** + * + * @param id + * @param table + * @return delete count + */ + private int delete(long id, String table) { + Connection connection = getConnection(); + assert connection != null; + + int deleteCount = 0; + try{ + PreparedStatement statement = connection.prepareStatement("DELETE FROM ? WHERE id=?"); + statement.setString(1, table); + statement.setLong(2, id); + + deleteCount =+ statement.executeUpdate(); + + }catch (SQLException ex) { + ex.printStackTrace(); + } + return deleteCount; + } @@ -351,19 +435,8 @@ public class Database { 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) { + private Map.Entry, Connection> getResultSets(long id, @NotNull String table, @NotNull String column) { Connection connection = getConnection(); try { assert connection != null; @@ -380,7 +453,7 @@ public class Database { } @Nullable - private Map.Entry, Connection> getResultSets(String table, String columns) { + private Map.Entry, Connection> getResultSets(@NotNull String table, @NotNull String columns) { Connection connection = getConnection(); try { assert connection != null; @@ -395,4 +468,14 @@ public class Database { return null; } + @NotNull + private Map.Entry, Connection> getListConnectionEntry(@NotNull Connection connection, @NotNull 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; + } } \ No newline at end of file From 48606ee9537340efee1b6306952e66c8f00b7e47 Mon Sep 17 00:00:00 2001 From: joethei Date: Thu, 18 Apr 2019 12:31:04 +0200 Subject: [PATCH 4/4] + Documentation ~ made Checkstyle happy --- checkstyle.xml | 9 +- pom.xml | 4 + .../de/hsel/itech/config/Configuration.java | 7 +- .../java/de/hsel/itech/config/Database.java | 2 + src/main/java/de/hsel/itech/db/Database.java | 255 +++++++++++++----- .../java/de/hsel/itech/db/pojo/Address.java | 2 + .../java/de/hsel/itech/db/pojo/Author.java | 2 + src/main/java/de/hsel/itech/db/pojo/Book.java | 4 +- .../java/de/hsel/itech/db/pojo/Category.java | 2 + .../hsel/itech/db/pojo/CreditCardPayment.java | 2 + .../java/de/hsel/itech/db/pojo/Customer.java | 2 + .../hsel/itech/db/pojo/DebitCardPayment.java | 2 + .../de/hsel/itech/db/pojo/InvoicePayment.java | 2 + .../java/de/hsel/itech/db/pojo/Order.java | 4 +- .../de/hsel/itech/db/pojo/PayPalPayment.java | 2 + .../de/hsel/itech/db/pojo/PaymentType.java | 2 + .../java/de/hsel/itech/db/pojo/Publisher.java | 2 + .../de/hsel/itech/db/pojo/ShoppingCart.java | 2 + .../servlet/{DBTest.java => DbTest.java} | 4 +- src/main/webapp/WEB-INF/web.xml | 2 +- 20 files changed, 241 insertions(+), 72 deletions(-) rename src/main/java/de/hsel/itech/servlet/{DBTest.java => DbTest.java} (94%) diff --git a/checkstyle.xml b/checkstyle.xml index 1cec088..0c17f24 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -44,7 +44,7 @@ - + @@ -55,13 +55,14 @@ - + + + + value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_DO, LITERAL_IF, LITERAL_ELSE"/> diff --git a/pom.xml b/pom.xml index 2418572..188835c 100644 --- a/pom.xml +++ b/pom.xml @@ -212,6 +212,10 @@ spotbugs-maven-plugin 3.1.9 + + org.apache.maven.plugins + maven-javadoc-plugin + diff --git a/src/main/java/de/hsel/itech/config/Configuration.java b/src/main/java/de/hsel/itech/config/Configuration.java index 3c2b440..3412c35 100644 --- a/src/main/java/de/hsel/itech/config/Configuration.java +++ b/src/main/java/de/hsel/itech/config/Configuration.java @@ -10,6 +10,8 @@ import java.io.FileNotFoundException; import java.io.FileReader; /** + * config object. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 @@ -25,7 +27,10 @@ public class Configuration { private Database database; - + /** + * gets Configuration object from file. + * @return {@link de.hsel.itech.config.Configuration} + */ public static Configuration get() { Gson gson = new Gson(); diff --git a/src/main/java/de/hsel/itech/config/Database.java b/src/main/java/de/hsel/itech/config/Database.java index 2e78599..3eb5138 100644 --- a/src/main/java/de/hsel/itech/config/Database.java +++ b/src/main/java/de/hsel/itech/config/Database.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.ToString; /** + * POJO for gson. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 diff --git a/src/main/java/de/hsel/itech/db/Database.java b/src/main/java/de/hsel/itech/db/Database.java index 4e3c60a..35af2eb 100644 --- a/src/main/java/de/hsel/itech/db/Database.java +++ b/src/main/java/de/hsel/itech/db/Database.java @@ -24,20 +24,27 @@ import java.util.List; import java.util.Map; /** + * base class for everything regarding the database. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 */ public class Database { - private final String BOOK = "book"; - private final String AUTHOR = "author"; - private final String AUTHOR_BOOK = "author_book"; - private final String PUBLISHER = "publisher"; - private final String CATEGORY = "category"; + private final String book = "book"; + private final String author = "author"; + private final String authorBook = "author_book"; + private final String publisher = "publisher"; + private final String category = "category"; private static Database instance; + /** + * Singleton for database access. + * + * @return {@link Database} + */ public static Database getInstance() { if (instance == null) instance = new Database(); @@ -46,9 +53,13 @@ public class Database { private MariaDbPoolDataSource dataSource; + /** + * initializes connection pool and executes database setup. + */ private Database() { Configuration config = Configuration.get(); - dataSource = new MariaDbPoolDataSource("jdbc:mysql://" + config.getDatabase().getHostname() + ":" + config.getDatabase().getPort() + "/" + config.getDatabase().getDatabase()); + dataSource = new MariaDbPoolDataSource("jdbc:mysql://" + config.getDatabase().getHostname() + + ":" + config.getDatabase().getPort() + "/" + config.getDatabase().getDatabase()); try { dataSource.setUser(config.getDatabase().getUsername()); dataSource.setPassword(config.getDatabase().getPassword()); @@ -74,6 +85,11 @@ public class Database { } } + /** + * gets connection from connection pool. + * + * @return {@link java.sql.Connection} + */ @Nullable private Connection getConnection() { try { @@ -84,6 +100,12 @@ public class Database { return null; } + /** + * testing method. + * + * @return String + */ + @Deprecated public String getHello() { Connection connection = getConnection(); @@ -92,21 +114,25 @@ public class Database { assert connection != null; PreparedStatement statement = connection.prepareStatement("SELECT * FROM test WHERE id = 1"); ResultSet resultSet = statement.executeQuery(); - resultSet.next(); - hello = resultSet.getString("hello"); + if (resultSet.next()) + hello = resultSet.getString("hello"); connection.close(); } catch (SQLException e) { e.printStackTrace(); } - return hello; - } + /** + * gets author by id. + * + * @param id ID from database + * @return {@link de.hsel.itech.db.pojo.Author} + */ @Nullable public Author getAuthor(long id) { - Map.Entry entry = getResultSet(id, AUTHOR); + Map.Entry entry = getResultSet(id, author); assert entry != null; ResultSet rs = entry.getKey(); @@ -120,9 +146,15 @@ public class Database { return author; } + /** + * gets category by id. + * + * @param id ID from database + * @return {@link de.hsel.itech.db.pojo.Category} + */ @Nullable public Category getCategory(long id) { - Map.Entry entry = getResultSet(id, CATEGORY); + Map.Entry entry = getResultSet(id, category); assert entry != null; ResultSet rs = entry.getKey(); @@ -136,9 +168,15 @@ public class Database { return category; } + /** + * gets publisher by id. + * + * @param id ID from database + * @return {@link de.hsel.itech.db.pojo.Publisher} + */ @Nullable public Publisher getPublisher(long id) { - Map.Entry entry = getResultSet(id, PUBLISHER); + Map.Entry entry = getResultSet(id, publisher); assert entry != null; ResultSet rs = entry.getKey(); @@ -152,14 +190,20 @@ public class Database { return publisher; } + /** + * gets list of author ids from database. + * + * @param id book id from database + * @return {@link java.util.List} + */ @Nullable private List getAuthors(long id) { - Map.Entry, Connection> entry = getResultSets(id, AUTHOR_BOOK, BOOK); + Map.Entry, Connection> entry = getResultSets(id, authorBook, book); assert entry != null; try { List list = new ArrayList<>(); for (ResultSet rs : entry.getKey()) { - list.add(rs.getInt(AUTHOR)); + list.add(rs.getInt(author)); } entry.getValue().close(); return list; @@ -169,16 +213,22 @@ public class Database { return null; } + /** + * gets book by id. + * + * @param id ID from database + * @return {@link de.hsel.itech.db.pojo.Book} + */ @Nullable public Book getBook(long id) { - Map.Entry entry = getResultSet(id, BOOK); + Map.Entry entry = getResultSet(id, book); assert entry != null; ResultSet rs = entry.getKey(); Book book = null; try { - Category category = getCategory(rs.getLong(CATEGORY)); - Publisher publisher = getPublisher(rs.getLong(PUBLISHER)); + Category category = getCategory(rs.getLong(this.category)); + Publisher publisher = getPublisher(rs.getLong(this.publisher)); List authorIds = getAuthors(id); assert authorIds != null; List authors = new ArrayList<>(); @@ -187,7 +237,9 @@ public class Database { assert author != null; authors.add(author); } - book = new Book(rs.getLong("id"), authors, publisher, category, rs.getString("title"), Year.of(rs.getInt("year")), rs.getInt("price"), rs.getString("description"), rs.getString("image")); + book = new Book(rs.getLong("id"), authors, publisher, category, rs.getString("title"), + Year.of(rs.getInt("year")), rs.getInt("price"), rs.getString("description"), + rs.getString("image")); entry.getValue().close(); } catch (SQLException e) { e.printStackTrace(); @@ -195,9 +247,14 @@ public class Database { return book; } + /** + * gets all books. + * + * @return {@link java.util.List} + */ @Nullable public List getBooks() { - Map.Entry, Connection> entry = getResultSets(BOOK, "id"); + Map.Entry, Connection> entry = getResultSets(book, "id"); assert entry != null; List ids = new ArrayList<>(); @@ -210,12 +267,18 @@ public class Database { ex.printStackTrace(); } List books = new ArrayList<>(); - for(long id : ids) { + for (long id : ids) { books.add(getBook(id)); } return books; } + /** + * gets books by category. + * + * @param category category id + * @return {@link java.util.List} + */ @Nullable public List getBooks(long category) { Connection connection = getConnection(); @@ -228,7 +291,7 @@ public class Database { ResultSet resultSet = statement.executeQuery(); - while(resultSet.next()) { + while (resultSet.next()) { books.add(getBook(resultSet.getLong("id"))); } @@ -239,6 +302,12 @@ public class Database { return books; } + /** + * get books by category. + * + * @param category Category object + * @return {@link java.util.List} + */ @Nullable public List getBooks(@NotNull Category category) { return getBooks(category.getId()); @@ -246,9 +315,9 @@ public class Database { /** - * Inserts book into database + * Inserts book into database. + * authors, publishers, and category have to exist. * - * authors, publishers, and category have to exist * @param book Book * @return insert count */ @@ -259,7 +328,8 @@ public class Database { int insertCount = 0; try { - PreparedStatement statement = connection.prepareStatement("INSERT INTO book (title, description, price, year, publisher, category, image) VALUES (?, ?, ?, ?, ?, ?, ?)"); + 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()); @@ -269,7 +339,7 @@ public class Database { statement.setString(7, book.getImage()); insertCount += statement.executeUpdate(); - for(Author author : book.getAuthors()) { + 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()); @@ -284,7 +354,8 @@ public class Database { } /** - * inserts Category into database + * inserts Category into database. + * * @param category Category * @return insert count */ @@ -294,44 +365,46 @@ public class Database { int insertCount = 0; - try{ + 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) { + } catch (SQLException ex) { ex.printStackTrace(); } return insertCount; } /** - * inserts Author + * inserts Author. + * * @param author Author * @return insert count */ public int insert(@NotNull Author author) { Connection connection = getConnection(); - assert connection != null; + assert connection != null; int insertCount = 0; - try{ + try { PreparedStatement statement = connection.prepareStatement("INSERT INTO author (name) VALUES (?)"); statement.setString(1, author.getName()); insertCount += statement.executeUpdate(); connection.close(); - }catch (SQLException ex) { + } catch (SQLException ex) { ex.printStackTrace(); } return insertCount; } /** - * inserts Publisher + * inserts Publisher. + * * @param publisher Publisher * @return insert count */ @@ -340,81 +413,110 @@ public class Database { assert connection != null; int insertCount = 0; - try{ + try { PreparedStatement statement = connection.prepareStatement("INSERT INTO publisher (name) VALUES (?)"); statement.setString(1, publisher.getName()); insertCount += statement.executeUpdate(); connection.close(); - }catch (SQLException ex) { + } catch (SQLException ex) { ex.printStackTrace(); } return insertCount; } + /** + * deletes book from database. + * + * @param id book id + * @return deletion count + */ public int deleteBook(long id) { int deleteCount = 0; - try{ + try { Connection connection = getConnection(); assert connection != null; PreparedStatement statement = connection.prepareStatement("DELETE FROM author_book WHERE book = ?"); statement.setLong(1, id); - deleteCount =+ statement.executeUpdate(); + deleteCount = +statement.executeUpdate(); connection.close(); - }catch (SQLException ex) { + } catch (SQLException ex) { ex.printStackTrace(); } - deleteCount += delete(id, BOOK); + deleteCount += delete(id, book); return deleteCount; } + /** + * deletes author from database. + * + * @param id author id + * @return deletion count + */ public int deleteAuthor(long id) { - return delete(id, AUTHOR); + return delete(id, author); } + /** + * deletes publisher from database. + * + * @param id publisher id + * @return deletion count + */ public int deletePublisher(long id) { - return delete(id, PUBLISHER); + return delete(id, publisher); } + /** + * deletes category from database. + * + * @param id category count + * @return deletion count + */ public int deleteCategory(long id) { - return delete(id, CATEGORY); + return delete(id, category); } - /** + * deletes id from table. * - * @param id - * @param table - * @return delete count + * @param id database id + * @param table table name + * @return deletion count */ private int delete(long id, String table) { Connection connection = getConnection(); assert connection != null; int deleteCount = 0; - try{ + try { PreparedStatement statement = connection.prepareStatement("DELETE FROM ? WHERE id=?"); statement.setString(1, table); statement.setLong(2, id); - deleteCount =+ statement.executeUpdate(); + deleteCount = +statement.executeUpdate(); - }catch (SQLException ex) { + } catch (SQLException ex) { ex.printStackTrace(); } return deleteCount; } - - + /** + * gets specific entry from database. + * + * @param id id from database + * @param table table name + * @return {@link java.util.Map.Entry} + */ @Nullable private Map.Entry getResultSet(long id, String table) { Connection connection = getConnection(); @@ -435,6 +537,14 @@ public class Database { return null; } + /** + * gets specific entries from table. + * + * @param id id all entries should reference + * @param table table name + * @param column column to match + * @return {@link java.util.Map.Entry} + */ @Nullable private Map.Entry, Connection> getResultSets(long id, @NotNull String table, @NotNull String column) { Connection connection = getConnection(); @@ -445,37 +555,56 @@ public class Database { statement.setString(2, column); statement.setLong(3, id); - return getListConnectionEntry(connection, statement); + return getAllEntries(connection, statement); } catch (SQLException ex) { ex.printStackTrace(); } return null; } + /** + * gets all specified columns from table. + * + * @param table table name + * @param columns columns as String array + * @return {@link java.util.Map.Entry} + */ @Nullable - private Map.Entry, Connection> getResultSets(@NotNull String table, @NotNull String columns) { + private Map.Entry, Connection> getResultSets(@NotNull String table, @NotNull String... columns) { Connection connection = getConnection(); try { assert connection != null; PreparedStatement statement = connection.prepareStatement("SELECT (?) FROM ?"); - statement.setString(1, columns); + statement.setString(1, String.join(",", columns)); statement.setString(2, table); - return getListConnectionEntry(connection, statement); + return getAllEntries(connection, statement); } catch (SQLException ex) { ex.printStackTrace(); } return null; } - @NotNull - private Map.Entry, Connection> getListConnectionEntry(@NotNull Connection connection, @NotNull PreparedStatement statement) throws SQLException { - ResultSet resultSet = statement.executeQuery(); + /** + * gets all entries contained in result set. + * + * @param connection Connection + * @param statement query statement + * @return {@link java.util.Map.Entry} + */ + @Nullable + private Map.Entry, Connection> getAllEntries(@NotNull Connection connection, @NotNull PreparedStatement statement) { + try { + ResultSet resultSet = statement.executeQuery(); - Map.Entry, Connection> entry = new AbstractMap.SimpleEntry<>(new ArrayList<>(), connection); - while (resultSet.next()) { - entry.getKey().add(resultSet); + 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 entry; + 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 80f64a2..030e0be 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Address.java +++ b/src/main/java/de/hsel/itech/db/pojo/Address.java @@ -6,6 +6,8 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; /** + * POJO for Address. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 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 a657c51..ce43d7d 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Author.java +++ b/src/main/java/de/hsel/itech/db/pojo/Author.java @@ -6,6 +6,8 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; /** + * POJO for Author. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 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 8adb3a7..c0fc7aa 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Book.java +++ b/src/main/java/de/hsel/itech/db/pojo/Book.java @@ -9,6 +9,8 @@ import java.time.Year; import java.util.List; /** + * POJO for Book. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 @@ -27,7 +29,7 @@ public class Book { @NonNull private Year year; /** - * saved in cents + * saved in cents. */ @NonNull private int price; @NonNull private String description; 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 f2ebeb4..28eb94e 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Category.java +++ b/src/main/java/de/hsel/itech/db/pojo/Category.java @@ -6,6 +6,8 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; /** + * POJO for Category. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 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 bb7957f..0145e55 100644 --- a/src/main/java/de/hsel/itech/db/pojo/CreditCardPayment.java +++ b/src/main/java/de/hsel/itech/db/pojo/CreditCardPayment.java @@ -8,6 +8,8 @@ import lombok.RequiredArgsConstructor; import java.time.LocalDate; /** + * POJO for CreditCard Payment. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 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 61c0a2f..566afd3 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Customer.java +++ b/src/main/java/de/hsel/itech/db/pojo/Customer.java @@ -6,6 +6,8 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; /** + * POJO for Customer. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 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 d4bfb78..5e7afdd 100644 --- a/src/main/java/de/hsel/itech/db/pojo/DebitCardPayment.java +++ b/src/main/java/de/hsel/itech/db/pojo/DebitCardPayment.java @@ -6,6 +6,8 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; /** + * POJO for DebitCard Payment. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 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 4bf7d0e..b250a97 100644 --- a/src/main/java/de/hsel/itech/db/pojo/InvoicePayment.java +++ b/src/main/java/de/hsel/itech/db/pojo/InvoicePayment.java @@ -6,6 +6,8 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; /** + * POJO for Invoice Payment. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 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 e990112..203a8eb 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Order.java +++ b/src/main/java/de/hsel/itech/db/pojo/Order.java @@ -9,6 +9,8 @@ import java.time.LocalDateTime; /** + * POJO for Orders. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 @@ -24,7 +26,7 @@ public class Order { @NonNull private Book book; /** - * price in cents + * price in cents. */ @NonNull private int price; @NonNull private PaymentType paymentType; 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 6a5d4fe..be55830 100644 --- a/src/main/java/de/hsel/itech/db/pojo/PayPalPayment.java +++ b/src/main/java/de/hsel/itech/db/pojo/PayPalPayment.java @@ -6,6 +6,8 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; /** + * POJO for PayPal Payment. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 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 f191503..dad8e43 100644 --- a/src/main/java/de/hsel/itech/db/pojo/PaymentType.java +++ b/src/main/java/de/hsel/itech/db/pojo/PaymentType.java @@ -6,6 +6,8 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; /** + * POJO for PaymentType. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 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 eee9d9e..3d34f23 100644 --- a/src/main/java/de/hsel/itech/db/pojo/Publisher.java +++ b/src/main/java/de/hsel/itech/db/pojo/Publisher.java @@ -6,6 +6,8 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; /** + * POJO for Publisher. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 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 c56c4f3..547743a 100644 --- a/src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java +++ b/src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java @@ -6,6 +6,8 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; /** + * POJO for Shopping Cart. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 diff --git a/src/main/java/de/hsel/itech/servlet/DBTest.java b/src/main/java/de/hsel/itech/servlet/DbTest.java similarity index 94% rename from src/main/java/de/hsel/itech/servlet/DBTest.java rename to src/main/java/de/hsel/itech/servlet/DbTest.java index 7f797c1..db86770 100644 --- a/src/main/java/de/hsel/itech/servlet/DBTest.java +++ b/src/main/java/de/hsel/itech/servlet/DbTest.java @@ -9,11 +9,13 @@ import java.io.IOException; import java.io.PrintWriter; /** + * Database test. + * * @author Johannes Theiner * @version 0.1 * @since 0.1 **/ -public class DBTest extends HttpServlet { +public class DbTest extends HttpServlet { private static final long serialVersionUID = 15679036734L; diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index b4d113c..a40a730 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.DBTest + de.hsel.itech.servlet.DbTest