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